diff --git a/.node-version b/.node-version new file mode 100644 index 00000000..a45fd52c --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +24 diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..a45fd52c --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24 diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz new file mode 100644 index 00000000..6f62b37d Binary files /dev/null and b/.yarn/install-state.gz differ diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 00000000..063ed601 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,8 @@ +approvedGitRepositories: + - "**" + +enableScripts: true + +nodeLinker: node-modules + +npmMinimalAgeGate: 0 diff --git a/data/data-migration.json b/data/data-migration.json index b3926fd5..671fa6dc 100644 --- a/data/data-migration.json +++ b/data/data-migration.json @@ -275,6 +275,164 @@ } ], "enfyra_route": [ + { + "_unique": { + "path": { + "_eq": "/admin/reload" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:refresh-cw", + "availableMethods": [ + "POST" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/reload/metadata" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:refresh-cw", + "availableMethods": [ + "POST" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/reload/routes" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:refresh-cw", + "availableMethods": [ + "POST" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/reload/graphql" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:refresh-cw", + "availableMethods": [ + "POST" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/reload/guards" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:refresh-cw", + "availableMethods": [ + "POST" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/script/validate" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:code-2", + "availableMethods": [ + "POST" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/test/run" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:flask-conical", + "availableMethods": [ + "POST" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/flow/trigger/:id" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:play", + "availableMethods": [ + "POST" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/redis/overview" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:database-zap", + "availableMethods": [ + "GET" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/redis/keys" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:key-round", + "availableMethods": [ + "GET" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/redis/key" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:key-round", + "availableMethods": [ + "GET", + "POST", + "DELETE" + ] + }, + { + "_unique": { + "path": { + "_eq": "/admin/redis/key/ttl" + } + }, + "isEnabled": true, + "isSystem": true, + "icon": "lucide:timer", + "availableMethods": [ + "PATCH" + ] + }, { "_unique": { "path": { @@ -393,14 +551,6 @@ "GET" ] }, - { - "_unique": { - "path": { - "_eq": "/admin/test/run" - } - }, - "isEnabled": true - }, { "_unique": { "path": { diff --git a/data/snapshot-migration.json b/data/snapshot-migration.json index 3d7c5e5e..fec589f7 100644 --- a/data/snapshot-migration.json +++ b/data/snapshot-migration.json @@ -128,6 +128,20 @@ "_eq": "enfyra_file" } }, + "columnsToModify": [ + { + "from": { + "name": "isPublished" + }, + "to": { + "name": "isPublic", + "type": "boolean", + "isNullable": false, + "defaultValue": true, + "description": "Allow public access without authentication" + } + } + ], "relationsToModify": [ { "from": { @@ -303,7 +317,8 @@ }, { "from": "user_definition", - "to": "enfyra_user" + "to": "enfyra_user", + "mergeKeys": ["email"] }, { "from": "oauth_config_definition", diff --git a/data/snapshot.json b/data/snapshot.json index eb690757..b5860e15 100644 --- a/data/snapshot.json +++ b/data/snapshot.json @@ -555,13 +555,13 @@ "status" ], [ - "isPublished" + "isPublic" ] ], "columns": [ { "name": "id", "type": "uuid", "isPrimary": true, "isGenerated": true, "isNullable": false, "description": "Unique file identifier" }, { "name": "filename", "type": "varchar", "isNullable": false, "description": "Original filename including extension" }, - { "name": "isPublished", "type": "boolean", "isNullable": false, "defaultValue": true, "description": "Allow public access without authentication" }, + { "name": "isPublic", "type": "boolean", "isNullable": false, "defaultValue": true, "description": "Allow public access without authentication" }, { "name": "mimetype", "type": "varchar", "isNullable": false, "isGenerated": true, "description": "MIME type of the file (e.g., image/png, application/pdf)" }, { "name": "filesize", "type": "bigint", "isNullable": false, "isGenerated": true, "description": "File size in bytes" }, { "name": "location", "type": "varchar", "isNullable": false, "isGenerated": true, "description": "Full path or URL to the file" }, diff --git a/package.json b/package.json index e82c3e4f..26365ac2 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,29 @@ { "name": "enfyra-server", - "version": "2.2.2", + "version": "2.2.3", "description": "Dynamic backend platform that auto-generates REST and GraphQL APIs from database schemas", "author": "dothinh115 ", - "private": false, "license": "SEE LICENSE IN LICENSE", + "packageManager": "yarn@1.22.22", + "engines": { + "node": ">=24 <25", + "yarn": ">=1.22 <2" + }, + "volta": { + "node": "24.9.0", + "yarn": "1.22.22" + }, "scripts": { + "check:node": "node scripts/check-node-version.js", + "preinstall": "node scripts/check-node-version.js", + "prebuild": "node scripts/check-node-version.js", + "prestart": "node scripts/check-node-version.js", + "predev": "node scripts/check-node-version.js", + "predebug": "node scripts/check-node-version.js", + "pretest:all": "node scripts/check-node-version.js", + "pretest:watch": "node scripts/check-node-version.js", + "pretest:ui": "node scripts/check-node-version.js", + "pretest:e2e": "node scripts/check-node-version.js", "generate:mongo-fold": "tsx scripts/generate-mongo-fold-text-search.ts", "build": "tsc && yarn generate:mongo-fold && cp -r data dist/", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", diff --git a/scripts/check-node-version.js b/scripts/check-node-version.js new file mode 100644 index 00000000..b5748762 --- /dev/null +++ b/scripts/check-node-version.js @@ -0,0 +1,15 @@ +const requiredMajor = 24; +const actual = process.versions.node; +const actualMajor = Number(actual.split('.')[0]); + +if (actualMajor !== requiredMajor) { + console.error( + [ + `Enfyra Server requires Node ${requiredMajor}.x.`, + `Current runtime is Node ${actual} at ${process.execPath}.`, + 'The server uses isolated-vm, which must match the production Node 24 runtime.', + 'Switch to Node 24 before running install, dev, build, start, or tests.', + ].join('\n'), + ); + process.exit(1); +} diff --git a/src/container.ts b/src/container.ts index 83033006..df30339e 100644 --- a/src/container.ts +++ b/src/container.ts @@ -8,25 +8,50 @@ import { } from 'awilix'; import { EventEmitter2 } from 'eventemitter2'; import Redis from 'ioredis'; -import { Queue } from 'bullmq'; +import { Queue, type ConnectionOptions } from 'bullmq'; import { env } from './env'; import { SYSTEM_QUEUES } from './shared/utils/constant'; -type QueueWithConnection = Queue & { __enfyraConnection?: Redis }; +function buildQueueConnectionOptions(redisUri: string): ConnectionOptions { + const parsed = new URL(redisUri); + const port = + parsed.port.length > 0 + ? Number(parsed.port) + : parsed.protocol === 'rediss:' + ? 6380 + : 6379; + const dbPath = parsed.pathname.replace(/^\//, ''); + const db = dbPath.length > 0 ? Number(dbPath) : undefined; + const options: any = { + host: parsed.hostname, + port, + }; + + if (parsed.username) { + options.username = decodeURIComponent(parsed.username); + } + if (parsed.password) { + options.password = decodeURIComponent(parsed.password); + } + if (db !== undefined && Number.isFinite(db)) { + options.db = db; + } + if (parsed.protocol === 'rediss:') { + options.tls = {}; + } + + return options as ConnectionOptions; +} -function createRuntimeQueue(name: string): QueueWithConnection { - const connection = new Redis(env.REDIS_URI); - const queue = new Queue(name, { +function createRuntimeQueue(name: string): Queue { + return new Queue(name, { prefix: env.NODE_NAME, - connection, - }) as QueueWithConnection; - queue.__enfyraConnection = connection; - return queue; + connection: buildQueueConnectionOptions(env.REDIS_URI), + }); } -async function closeRuntimeQueue(queue: QueueWithConnection): Promise { +async function closeRuntimeQueue(queue: Queue): Promise { await queue.close(); - queue.__enfyraConnection?.disconnect(); } import { diff --git a/src/domain/auth/services/api-token.service.ts b/src/domain/auth/services/api-token.service.ts index 4576d4c2..b5c9a3de 100644 --- a/src/domain/auth/services/api-token.service.ts +++ b/src/domain/auth/services/api-token.service.ts @@ -9,8 +9,8 @@ import { BadRequestException, UnauthorizedException } from '../../exceptions'; import { Logger } from '../../../shared/logger'; import { loadUserWithRole, - userCacheKey, - USER_CACHE_TTL_MS, + primeCachedUserWithRole, + primeCachedUserSnapshot, } from '../../../shared/utils/load-user-with-role.util'; import { parseOrBadRequest } from '../../../shared/utils/zod-parse.util'; import { @@ -22,6 +22,7 @@ const API_TOKEN_TABLE = 'enfyra_api_token'; const API_TOKEN_CACHE_PREFIX = 'auth:api-token'; const API_TOKEN_REVOKED_CHANNEL = 'api-token:revoked'; const API_TOKEN_STATE_TTL_MS = 60_000; +const API_TOKEN_ACCESS_TTL_MS = API_TOKEN_STATE_TTL_MS; type ApiTokenState = { id: string; @@ -171,21 +172,25 @@ export class ApiTokenService { userId, expiresAt: expiresAt ? expiresAt.toISOString() : null, }); - await this.cacheService.set(userCacheKey(userId), user, USER_CACHE_TTL_MS); + primeCachedUserSnapshot(userId, user); + + const accessExpiresAtMs = Math.min( + Date.now() + API_TOKEN_ACCESS_TTL_MS, + expiresAt ? expiresAt.getTime() : Number.POSITIVE_INFINITY, + ); + const accessExp = Math.floor(accessExpiresAtMs / 1000); const payload: any = { id: userId, loginProvider: 'api_token', tokenType: 'api_token', tokenId, + exp: accessExp, }; - if (expiresAt) { - payload.exp = Math.floor(expiresAt.getTime() / 1000); - } return { accessToken: jwt.sign(payload, this.envService.get('SECRET_KEY')), - expTime: expiresAt ? expiresAt.getTime() : null, + expTime: accessExp * 1000, loginProvider: 'api_token', }; } @@ -241,10 +246,7 @@ export class ApiTokenService { } private async seedUserCache(userId: unknown): Promise { - const user = await loadUserWithRole(this.queryBuilder, userId); - if (user) { - await this.cacheService.set(userCacheKey(userId), user, USER_CACHE_TTL_MS); - } + await primeCachedUserWithRole(this.queryBuilder, userId); } private hashToken(token: string): string { diff --git a/src/domain/auth/services/auth.service.ts b/src/domain/auth/services/auth.service.ts index ec48dc5a..8ceccc08 100644 --- a/src/domain/auth/services/auth.service.ts +++ b/src/domain/auth/services/auth.service.ts @@ -7,11 +7,7 @@ import * as jwt from 'jsonwebtoken'; import { IQueryBuilder } from '../../shared/interfaces/query-builder.interface'; import { ICache } from '../../shared/interfaces/cache.interface'; import { BcryptService } from './bcrypt.service'; -import { - loadUserWithRole, - userCacheKey, - USER_CACHE_TTL_MS, -} from '../../../shared/utils/load-user-with-role.util'; +import { primeCachedUserWithRole } from '../../../shared/utils/load-user-with-role.util'; import { parseOrBadRequest } from '../../../shared/utils/zod-parse.util'; import { loginSchema, @@ -23,7 +19,6 @@ export class AuthService { private bcryptService: BcryptService; private queryBuilder: IQueryBuilder; private envService: EnvService; - private cacheService: ICache; constructor(deps: { bcryptService: BcryptService; @@ -34,18 +29,10 @@ export class AuthService { this.bcryptService = deps.bcryptService; this.queryBuilder = deps.queryBuilderService; this.envService = deps.envService; - this.cacheService = deps.cacheService; } private async seedUserCache(userIdForJwt: unknown): Promise { - const user = await loadUserWithRole(this.queryBuilder, userIdForJwt); - if (user) { - await this.cacheService.set( - userCacheKey(userIdForJwt), - user, - USER_CACHE_TTL_MS, - ); - } + await primeCachedUserWithRole(this.queryBuilder, userIdForJwt); } private hashToken(token: string): string { diff --git a/src/domain/auth/services/oauth.service.ts b/src/domain/auth/services/oauth.service.ts index ce7b6aca..ac579ce8 100644 --- a/src/domain/auth/services/oauth.service.ts +++ b/src/domain/auth/services/oauth.service.ts @@ -13,11 +13,7 @@ import { ICache } from '../../shared/interfaces/cache.interface'; import { ExecutorEngineService } from '@enfyra/kernel'; import { resolveExecutableScript } from '../../../shared/utils/script-code.util'; import { RepoRegistryService } from '../../../engines/cache'; -import { - loadUserWithRole, - userCacheKey, - USER_CACHE_TTL_MS, -} from '../../../shared/utils/load-user-with-role.util'; +import { primeCachedUserWithRole } from '../../../shared/utils/load-user-with-role.util'; import type { OAuthExchangeTokenPayload } from '../types/oauth-exchange-code.types'; type OAuthProvider = 'google' | 'facebook' | 'github'; @@ -430,17 +426,7 @@ export class OAuthService { { refreshTokenHash }, ); - const userForCache = await loadUserWithRole( - this.queryBuilderService, - userId, - ); - if (userForCache) { - await this.cacheService.set( - userCacheKey(userId), - userForCache, - USER_CACHE_TTL_MS, - ); - } + await primeCachedUserWithRole(this.queryBuilderService, userId); const decoded: any = jwt.decode(accessToken); diff --git a/src/domain/auth/services/user-revocation.service.ts b/src/domain/auth/services/user-revocation.service.ts index 1972c693..c888c1b4 100644 --- a/src/domain/auth/services/user-revocation.service.ts +++ b/src/domain/auth/services/user-revocation.service.ts @@ -3,14 +3,13 @@ import { IRedisPubSub } from '../../shared/interfaces/redis-pubsub.interface'; import { ICache } from '../../shared/interfaces/cache.interface'; import { IQueryBuilder } from '../../shared/interfaces/query-builder.interface'; import { Logger } from '../../../shared/logger'; -import { userCacheKey } from '../../../shared/utils/load-user-with-role.util'; +import { invalidateCachedUserWithRole } from '../../../shared/utils/load-user-with-role.util'; const USER_REVOKED_CHANNEL = 'user:revoked'; export class UserRevocationService { private readonly logger = new Logger(UserRevocationService.name); private readonly redisPubSubService: IRedisPubSub; - private readonly cacheService: ICache; private readonly queryBuilderService: IQueryBuilder; constructor(deps: { @@ -19,7 +18,6 @@ export class UserRevocationService { queryBuilderService: IQueryBuilder; }) { this.redisPubSubService = deps.redisPubSubService; - this.cacheService = deps.cacheService; this.queryBuilderService = deps.queryBuilderService; } @@ -49,7 +47,7 @@ export class UserRevocationService { } private async handleRevocation(userId: unknown): Promise { - await this.cacheService.deleteKey(userCacheKey(userId)); + invalidateCachedUserWithRole(userId); const isMongoDB = this.queryBuilderService.isMongoDb(); if (isMongoDB) { diff --git a/src/domain/bootstrap/utils/sql-junction-metadata.util.ts b/src/domain/bootstrap/utils/sql-junction-metadata.util.ts index aa856d93..805c693a 100644 --- a/src/domain/bootstrap/utils/sql-junction-metadata.util.ts +++ b/src/domain/bootstrap/utils/sql-junction-metadata.util.ts @@ -1,9 +1,178 @@ -import { - getForeignKeyColumnName, - getJunctionTableName, -} from '@enfyra/kernel'; +import { getForeignKeyColumnName, getJunctionTableName } from '@enfyra/kernel'; +import { buildSqlJunctionTableContract } from '../../../engines/knex/utils/sql-physical-schema-contract'; +import { getSqlJunctionPhysicalNames } from '../../../modules/table-management/utils/sql-junction-naming.util'; import type { IQueryBuilder } from '../../shared/interfaces/query-builder.interface'; +async function tableHasColumns( + knex: any, + tableName: string, + columns: string[], +): Promise { + if (!(await knex.schema.hasTable(tableName))) return false; + const checks = await Promise.all( + columns.map((column) => knex.schema.hasColumn(tableName, column)), + ); + return checks.every(Boolean); +} + +function getSqlDbType(knex: any): 'mysql' | 'postgres' { + const client = String(knex?.client?.config?.client || '').toLowerCase(); + return client.includes('mysql') ? 'mysql' : 'postgres'; +} + +async function getSqlPrimaryKeyType( + knex: any, + tableName: string, +): Promise<'uuid' | 'varchar' | 'integer'> { + const columnInfo = await knex(tableName).columnInfo(); + const idColumn = columnInfo.id || columnInfo._id; + const type = String(idColumn?.type || '').toLowerCase(); + if (type.includes('uuid')) return 'uuid'; + if ( + type.includes('char') || + type.includes('text') || + type.includes('string') + ) { + return 'varchar'; + } + return 'integer'; +} + +function addSqlJunctionColumn( + table: any, + columnName: string, + pkType: 'uuid' | 'varchar' | 'integer', + dbType: string, +) { + if (pkType === 'uuid') { + return dbType === 'postgres' + ? table.uuid(columnName) + : table.string(columnName, 36); + } + if (pkType === 'varchar') { + return table.string(columnName, 255); + } + return dbType === 'mysql' + ? table.integer(columnName).unsigned() + : table.integer(columnName); +} + +async function ensureSqlJunctionTable( + queryBuilderService: IQueryBuilder, + input: { + sourceTable: string; + targetTable: string; + propertyName: string; + junctionTable: string; + sourceColumn: string; + targetColumn: string; + }, +): Promise { + const knex = queryBuilderService.getKnex(); + const tableExists = await knex.schema.hasTable(input.junctionTable); + if ( + tableExists && + (await tableHasColumns(knex, input.junctionTable, [ + input.sourceColumn, + input.targetColumn, + ])) + ) { + return; + } + + if (tableExists) { + throw new Error( + `Junction table ${input.junctionTable} exists but is missing ${input.sourceColumn} or ${input.targetColumn}`, + ); + } + + const [sourcePkType, targetPkType] = await Promise.all([ + getSqlPrimaryKeyType(knex, input.sourceTable), + getSqlPrimaryKeyType(knex, input.targetTable), + ]); + const dbType = getSqlDbType(knex); + const junction = buildSqlJunctionTableContract({ + tableName: input.junctionTable, + sourceTable: input.sourceTable, + targetTable: input.targetTable, + sourceColumn: input.sourceColumn, + targetColumn: input.targetColumn, + sourcePropertyName: input.propertyName, + }); + + await knex.schema.createTable(input.junctionTable, (table: any) => { + addSqlJunctionColumn( + table, + input.sourceColumn, + sourcePkType, + dbType, + ).notNullable(); + addSqlJunctionColumn( + table, + input.targetColumn, + targetPkType, + dbType, + ).notNullable(); + table.primary( + [input.sourceColumn, input.targetColumn], + junction.primaryKeyName, + ); + table + .foreign(input.sourceColumn) + .references('id') + .inTable(input.sourceTable) + .onDelete(junction.onDelete) + .onUpdate(junction.onUpdate) + .withKeyName(junction.sourceForeignKeyName); + table + .foreign(input.targetColumn) + .references('id') + .inTable(input.targetTable) + .onDelete(junction.onDelete) + .onUpdate(junction.onUpdate) + .withKeyName(junction.targetForeignKeyName); + table.index([input.sourceColumn], junction.sourceIndexName); + table.index([input.targetColumn], junction.targetIndexName); + table.index( + [input.targetColumn, input.sourceColumn], + junction.reverseIndexName, + ); + }); +} + +async function normalizeSqlRelationJunctionMetadata( + queryBuilderService: IQueryBuilder, + relation: any, + standard: { + junctionTableName: string; + junctionSourceColumn: string; + junctionTargetColumn: string; + }, +): Promise { + if (!relation?.id) return; + const knex = queryBuilderService.getKnex(); + const updateData: any = {}; + if (relation.junctionTableName !== standard.junctionTableName) { + updateData.junctionTableName = standard.junctionTableName; + } + if (relation.junctionSourceColumn !== standard.junctionSourceColumn) { + updateData.junctionSourceColumn = standard.junctionSourceColumn; + } + if (relation.junctionTargetColumn !== standard.junctionTargetColumn) { + updateData.junctionTargetColumn = standard.junctionTargetColumn; + } + if (Object.keys(updateData).length > 0) { + await knex('enfyra_relation').where({ id: relation.id }).update(updateData); + } + + if (relation.mappedById) return; + await knex('enfyra_relation').where({ mappedById: relation.id }).update({ + junctionTableName: standard.junctionTableName, + junctionSourceColumn: standard.junctionTargetColumn, + junctionTargetColumn: standard.junctionSourceColumn, + }); +} + export async function getSqlJunctionMetadata( queryBuilderService: IQueryBuilder, input: { @@ -38,19 +207,71 @@ export async function getSqlJunctionMetadata( .where('r.propertyName', input.propertyName) .first(); + const standard = getSqlJunctionPhysicalNames({ + sourceTable: input.sourceTable, + propertyName: input.propertyName, + targetTable: input.targetTable, + }); + const metadataCandidate = { + junctionTableName: + relation?.junctionTableName || standard.junctionTableName, + junctionSourceColumn: + relation?.junctionSourceColumn || standard.junctionSourceColumn, + junctionTargetColumn: + relation?.junctionTargetColumn || standard.junctionTargetColumn, + }; + const metadataReady = await tableHasColumns( + knex, + metadataCandidate.junctionTableName, + [ + metadataCandidate.junctionSourceColumn, + metadataCandidate.junctionTargetColumn, + ], + ); + const standardReady = await tableHasColumns( + knex, + standard.junctionTableName, + [standard.junctionSourceColumn, standard.junctionTargetColumn], + ); + + const selected = + standardReady || !metadataReady + ? { + junctionTableName: standard.junctionTableName, + junctionSourceColumn: standard.junctionSourceColumn, + junctionTargetColumn: standard.junctionTargetColumn, + } + : metadataCandidate; + + await ensureSqlJunctionTable(queryBuilderService, { + sourceTable: input.sourceTable, + targetTable: input.targetTable, + propertyName: input.propertyName, + junctionTable: selected.junctionTableName, + sourceColumn: selected.junctionSourceColumn, + targetColumn: selected.junctionTargetColumn, + }); + if (selected.junctionTableName === standard.junctionTableName) { + await normalizeSqlRelationJunctionMetadata( + queryBuilderService, + relation, + selected, + ); + } + return { junctionTable: - relation?.junctionTableName || + selected.junctionTableName || getJunctionTableName( input.sourceTable, input.propertyName, input.targetTable, ), sourceColumn: - relation?.junctionSourceColumn || + selected.junctionSourceColumn || getForeignKeyColumnName(input.sourceTable), targetColumn: - relation?.junctionTargetColumn || + selected.junctionTargetColumn || getForeignKeyColumnName(input.targetTable), }; } diff --git a/src/domain/policy/policy.service.ts b/src/domain/policy/policy.service.ts index 4fcb9c90..9d02a475 100644 --- a/src/domain/policy/policy.service.ts +++ b/src/domain/policy/policy.service.ts @@ -20,11 +20,11 @@ export class PolicyService { } checkRequestAccess(ctx: TPolicyRequestContext): TPolicyDecision { - const isPublished = ctx.routeData?.publicMethods?.some( + const isPublic = ctx.routeData?.publicMethods?.some( (m: any) => m.name === ctx.method, ); - if (isPublished) return { allow: true }; + if (isPublic) return { allow: true }; if (!ctx.user) { return { diff --git a/src/engines/bootstrap/services/metadata-migration.service.ts b/src/engines/bootstrap/services/metadata-migration.service.ts index fd8b2d05..28e2b766 100644 --- a/src/engines/bootstrap/services/metadata-migration.service.ts +++ b/src/engines/bootstrap/services/metadata-migration.service.ts @@ -21,7 +21,11 @@ import { hasSchemaMigrations, loadSnapshotMigrationFile, } from '../utils/metadata-migration.util'; -import { SYSTEM_TABLES } from '../../../shared/utils/system-tables.constants'; +import { + CORE_SYSTEM_TABLES, + LEGACY_CORE_SYSTEM_TABLES, + SYSTEM_TABLES, +} from '../../../shared/utils/system-tables.constants'; import { MetadataPhysicalMigrationHelper } from '../utils/metadata-physical-migration.util'; export class MetadataMigrationService { @@ -30,6 +34,8 @@ export class MetadataMigrationService { private readonly systemCoreTableResolver: SystemCoreTableResolver; private readonly physicalMigration: MetadataPhysicalMigrationHelper; private migrations: SchemaMigrationDef | null = null; + private readonly sqlCoreTableIdRemap = new Map(); + private readonly mongoCoreTableIdRemap = new Map(); constructor(deps: { queryBuilderService: QueryBuilderService; @@ -188,8 +194,9 @@ export class MetadataMigrationService { const oldExists = await knex.schema.hasTable(rename.from); const newExists = await knex.schema.hasTable(rename.to); if (oldExists && newExists) { - throw new Error( - `Cannot rename core system table ${rename.from} to ${rename.to}: both physical tables exist`, + await this.reconcileSqlCoreTableOverlap(rename); + this.verbose( + ` Core SQL table overlap detected: ${rename.from} and ${rename.to} both exist; continuing with canonical ${rename.to}`, ); } } @@ -223,8 +230,9 @@ export class MetadataMigrationService { rename.to, ); if (oldExists && newExists) { - throw new Error( - `Cannot rename core system collection ${rename.from} to ${rename.to}: both collections exist`, + await this.reconcileMongoCoreTableOverlap(rename); + this.verbose( + ` Core Mongo collection overlap detected: ${rename.from} and ${rename.to} both exist; continuing with canonical ${rename.to}`, ); } } @@ -245,12 +253,7 @@ export class MetadataMigrationService { } for (const rename of validRenames) { - await db - .collection(SYSTEM_TABLES.table) - .updateOne( - { name: rename.from }, - { $set: { name: rename.to, updatedAt: new Date() } }, - ); + await this.renameMongoTableMetadataRow(SYSTEM_TABLES.table, rename); await this.updateMongoCanonicalRoutePath(rename); } } @@ -261,8 +264,9 @@ export class MetadataMigrationService { const newExists = await knex.schema.hasTable(rename.to); if (oldExists && newExists) { - throw new Error( - `Cannot rename system table ${rename.from} to ${rename.to}: both physical tables exist`, + await this.reconcileSqlTableOverlap(rename); + this.verbose( + ` SQL table overlap detected: ${rename.from} and ${rename.to} both exist; continuing with canonical ${rename.to}`, ); } @@ -298,8 +302,9 @@ export class MetadataMigrationService { ); if (oldExists && newExists) { - throw new Error( - `Cannot rename system collection ${rename.from} to ${rename.to}: both collections exist`, + await this.reconcileMongoTableOverlap(rename); + this.verbose( + ` Mongo collection overlap detected: ${rename.from} and ${rename.to} both exist; continuing with canonical ${rename.to}`, ); } @@ -317,12 +322,11 @@ export class MetadataMigrationService { const tableStoreAfter = await this.systemCoreTableResolver.getTableName('table'); - await db - .collection(tableStoreAfter) - .updateOne( - tableRecord?._id ? { _id: tableRecord._id } : { name: rename.from }, - { $set: { name: rename.to, updatedAt: new Date() } }, - ); + await this.renameMongoTableMetadataRow( + tableStoreAfter, + rename, + tableRecord?._id, + ); } private async findSqlTableRecord( @@ -334,6 +338,674 @@ export class MetadataMigrationService { return knex(tableStore).where({ name: tableName }).first(); } + private getCoreMetadataRowKey( + rename: TableRenameDef, + row: any, + ): string | null { + const tableName = rename.to || rename.from; + if (tableName === SYSTEM_TABLES.table || tableName === 'table_definition') { + return row?.name + ? `table:${this.normalizeCoreTableName(row.name)}` + : null; + } + + if ( + tableName === SYSTEM_TABLES.column || + tableName === 'column_definition' + ) { + const owner = this.remapCoreTableId(rename, row?.tableId ?? row?.table); + const name = row?.name; + return owner !== undefined && owner !== null && name + ? `column:${String(owner)}:${name}` + : null; + } + + if ( + tableName === SYSTEM_TABLES.relation || + tableName === 'relation_definition' + ) { + const owner = this.remapCoreTableId( + rename, + row?.sourceTableId ?? row?.sourceTable, + ); + const propertyName = row?.propertyName; + return owner !== undefined && owner !== null && propertyName + ? `relation:${String(owner)}:${propertyName}` + : null; + } + + if (row?.name) return `name:${row.name}`; + if (row?.propertyName) return `property:${row.propertyName}`; + return null; + } + + private normalizeCoreTableName(tableName: string): string { + const entries = Object.entries(LEGACY_CORE_SYSTEM_TABLES) as Array< + [keyof typeof LEGACY_CORE_SYSTEM_TABLES, string] + >; + const matched = entries.find(([, legacyName]) => legacyName === tableName); + return matched ? CORE_SYSTEM_TABLES[matched[0]] : tableName; + } + + private remapCoreTableId(rename: TableRenameDef, value: any): any { + if (value === undefined || value === null) return value; + const tableName = rename.to || rename.from; + if ( + tableName !== SYSTEM_TABLES.column && + tableName !== 'column_definition' && + tableName !== SYSTEM_TABLES.relation && + tableName !== 'relation_definition' + ) { + return value; + } + + const map = this.queryBuilderService.isMongoDb() + ? this.mongoCoreTableIdRemap + : this.sqlCoreTableIdRemap; + return map.get(String(value)) ?? value; + } + + private async getSqlOverlapColumns( + oldTable: string, + newTable: string, + ): Promise { + const knex = this.queryBuilderService.getKnex(); + const [oldInfo, newInfo] = await Promise.all([ + knex(oldTable).columnInfo(), + knex(newTable).columnInfo(), + ]); + return Object.keys(oldInfo).filter((column) => column in newInfo); + } + + private async getSqlMergedColumns( + oldTable: string, + newTable: string, + ): Promise { + const knex = this.queryBuilderService.getKnex(); + const [oldInfo, newInfo] = await Promise.all([ + knex(oldTable).columnInfo(), + knex(newTable).columnInfo(), + ]); + const missingColumns = Object.keys(oldInfo).filter( + (column) => !(column in newInfo), + ); + if (missingColumns.length > 0) { + await this.addMissingSqlColumns(newTable, oldInfo, missingColumns); + } + const refreshedNewInfo = await knex(newTable).columnInfo(); + return Object.keys(oldInfo).filter((column) => column in refreshedNewInfo); + } + + private async addMissingSqlColumns( + tableName: string, + sourceInfo: Record, + columns: string[], + ): Promise { + const knex = this.queryBuilderService.getKnex(); + await knex.schema.alterTable(tableName, (table: any) => { + for (const column of columns) { + table.specificType( + column, + this.getPortableSqlColumnType(sourceInfo[column]), + ); + } + }); + this.verbose( + ` Added ${columns.length} legacy column(s) to ${tableName} before overlap merge`, + ); + } + + private getPortableSqlColumnType(columnInfo: any): string { + const type = String(columnInfo?.type || '').toLowerCase(); + const maxLength = Number( + columnInfo?.maxLength || columnInfo?.characterMaximumLength || 0, + ); + + if (!type) return 'text'; + if (type.includes('bigint')) return 'bigint'; + if (type.includes('int')) return 'integer'; + if (type.includes('bool') || type === 'tinyint(1)') return 'boolean'; + if (type.includes('double')) return 'double precision'; + if (type.includes('float')) return 'float'; + if (type.includes('decimal') || type.includes('numeric')) return 'decimal'; + if (type.includes('jsonb')) return 'jsonb'; + if (type.includes('json')) return 'json'; + if (type.includes('timestamp')) return 'timestamp'; + if (type === 'date') return 'date'; + if (type.includes('time')) return 'time'; + if (type.includes('uuid')) return 'uuid'; + if (type.includes('text')) return 'text'; + if (type.includes('char')) + return `varchar(${maxLength > 0 ? maxLength : 255})`; + return 'text'; + } + + private getOverlapRowKey( + rename: TableRenameDef, + row: any, + columns: string[], + ): string | null { + const logicalKey = this.getCoreMetadataRowKey(rename, row); + if (logicalKey) return logicalKey; + + if ('id' in row && columns.includes('id') && row.id != null) + return `id:${row.id}`; + if ('_id' in row && columns.includes('_id') && row._id != null) + return `_id:${row._id}`; + + if (rename.mergeKeys?.length) { + const values = rename.mergeKeys.map((column) => row?.[column]); + if ( + rename.mergeKeys.every((column) => columns.includes(column)) && + values.every((value) => value !== undefined && value !== null) + ) { + return `merge:${rename.mergeKeys + .map((column, index) => `${column}:${String(values[index])}`) + .join('|')}`; + } + } + + return null; + } + + private projectRowToColumns(row: any, columns: string[]): any { + return Object.fromEntries( + columns + .filter((column) => row[column] !== undefined) + .map((column) => [column, row[column]]), + ); + } + + private rowsConflict(left: any, right: any, columns: string[]): boolean { + return columns.some((column) => { + if ( + left?.[column] === undefined || + right?.[column] === undefined || + right?.[column] === null || + column === 'createdAt' || + column === 'updatedAt' + ) { + return false; + } + return JSON.stringify(left[column]) !== JSON.stringify(right[column]); + }); + } + + private findRowByOverlapKey( + rename: TableRenameDef, + rows: any[], + key: string, + columns: string[], + ): any | null { + return ( + rows.find((row) => this.getOverlapRowKey(rename, row, columns) === key) ?? + null + ); + } + + private getMissingRowValues( + legacyRow: any, + canonicalRow: any, + columns: string[], + ): Record { + return Object.fromEntries( + columns + .filter( + (column) => + column !== 'id' && + column !== '_id' && + column !== 'createdAt' && + column !== 'updatedAt' && + legacyRow?.[column] !== undefined && + (canonicalRow?.[column] === undefined || + canonicalRow?.[column] === null), + ) + .map((column) => [column, legacyRow[column]]), + ); + } + + private getRowIdentityFilter( + rename: TableRenameDef, + row: any, + ): Record | null { + if (row?.id !== undefined && row.id !== null) return { id: row.id }; + if (row?._id !== undefined && row._id !== null) return { _id: row._id }; + if (rename.mergeKeys?.length) { + const entries = rename.mergeKeys + .map((column) => [column, row?.[column]]) + .filter(([, value]) => value !== undefined && value !== null); + if (entries.length === rename.mergeKeys.length) { + return Object.fromEntries(entries); + } + } + return null; + } + + private projectCoreRowToColumns( + rename: TableRenameDef, + row: any, + columns: string[], + ): any { + const projected = this.projectRowToColumns(row, columns); + const tableName = rename.to || rename.from; + if ( + (tableName === SYSTEM_TABLES.table || tableName === 'table_definition') && + typeof projected.name === 'string' + ) { + projected.name = this.normalizeCoreTableName(projected.name); + } + if ( + tableName === SYSTEM_TABLES.column || + tableName === 'column_definition' + ) { + if ('tableId' in projected) + projected.tableId = this.remapCoreTableId(rename, projected.tableId); + if ('table' in projected) + projected.table = this.remapCoreTableId(rename, projected.table); + } + if ( + tableName === SYSTEM_TABLES.relation || + tableName === 'relation_definition' + ) { + if ('sourceTableId' in projected) { + projected.sourceTableId = this.remapCoreTableId( + rename, + projected.sourceTableId, + ); + } + if ('targetTableId' in projected) { + projected.targetTableId = this.remapCoreTableId( + rename, + projected.targetTableId, + ); + } + if ('sourceTable' in projected) { + projected.sourceTable = this.remapCoreTableId( + rename, + projected.sourceTable, + ); + } + if ('targetTable' in projected) { + projected.targetTable = this.remapCoreTableId( + rename, + projected.targetTable, + ); + } + } + return projected; + } + + private isCoreTableMetadataStore(rename: TableRenameDef): boolean { + const tableName = rename.to || rename.from; + return ( + tableName === SYSTEM_TABLES.table || tableName === 'table_definition' + ); + } + + private trackCanonicalCoreTableId(rename: TableRenameDef, row: any): void { + if (!this.isCoreTableMetadataStore(rename) || !row?.name) return; + const id = row.id ?? row._id; + if (id === undefined || id === null) return; + const map = this.queryBuilderService.isMongoDb() + ? this.mongoCoreTableIdRemap + : this.sqlCoreTableIdRemap; + map.set(String(id), id); + } + + private trackExistingCoreRowRemap( + rename: TableRenameDef, + legacyRow: any, + canonicalRows: any[], + ): void { + if (!this.isCoreTableMetadataStore(rename) || !legacyRow?.name) return; + const legacyId = legacyRow.id ?? legacyRow._id; + if (legacyId === undefined || legacyId === null) return; + const normalizedName = this.normalizeCoreTableName(legacyRow.name); + const canonicalRow = canonicalRows.find( + (row) => row?.name === normalizedName, + ); + const canonicalId = canonicalRow?.id ?? canonicalRow?._id; + if (canonicalId === undefined || canonicalId === null) return; + const map = this.queryBuilderService.isMongoDb() + ? this.mongoCoreTableIdRemap + : this.sqlCoreTableIdRemap; + map.set(String(legacyId), canonicalId); + } + + private sqlProjectedIdConflicts( + projected: any, + canonicalRows: any[], + ): boolean { + if (projected?.id === undefined || projected.id === null) return false; + return canonicalRows.some((row) => row?.id === projected.id); + } + + private mongoProjectedIdConflicts( + projected: any, + canonicalRows: any[], + ): boolean { + if (projected?._id === undefined || projected._id === null) return false; + return canonicalRows.some( + (row) => String(row?._id) === String(projected._id), + ); + } + + private async trackInsertedSqlCoreRowRemap( + rename: TableRenameDef, + legacyRow: any, + projected: any, + ): Promise { + if (!this.isCoreTableMetadataStore(rename)) return; + const legacyId = legacyRow?.id; + if (legacyId === undefined || legacyId === null) return; + let canonicalId = projected?.id; + if ( + (canonicalId === undefined || canonicalId === null) && + projected?.name + ) { + const inserted = await this.queryBuilderService + .getKnex()(rename.to) + .where({ name: projected.name }) + .first(); + canonicalId = inserted?.id; + } + if (canonicalId === undefined || canonicalId === null) return; + this.sqlCoreTableIdRemap.set(String(legacyId), canonicalId); + } + + private async trackInsertedMongoCoreRowRemap( + rename: TableRenameDef, + legacyRow: any, + projected: any, + ): Promise { + if (!this.isCoreTableMetadataStore(rename)) return; + const legacyId = legacyRow?._id; + if (legacyId === undefined || legacyId === null) return; + let canonicalId = projected?._id; + if ( + (canonicalId === undefined || canonicalId === null) && + projected?.name + ) { + const inserted = await this.getMongoDb()! + .collection(rename.to) + .findOne({ name: projected.name }); + canonicalId = inserted?._id; + } + if (canonicalId === undefined || canonicalId === null) return; + this.mongoCoreTableIdRemap.set(String(legacyId), canonicalId); + } + + private async reconcileSqlCoreTableOverlap( + rename: TableRenameDef, + ): Promise { + const knex = this.queryBuilderService.getKnex(); + const columns = await this.getSqlMergedColumns(rename.from, rename.to); + const [legacyRows, canonicalRows] = await Promise.all([ + knex(rename.from).select(columns), + knex(rename.to).select(columns), + ]); + + const canonicalKeys = new Set(); + for (const row of canonicalRows) { + this.trackCanonicalCoreTableId(rename, row); + const key = this.getOverlapRowKey(rename, row, columns); + if (key !== null && key !== undefined) canonicalKeys.add(key); + } + const occupiedIds = new Set( + canonicalRows + .map((row: any) => row?.id) + .filter((id: any) => id !== undefined && id !== null) + .map((id: any) => String(id)), + ); + const rowsToInsert = legacyRows.filter((row: any) => { + const key = this.getOverlapRowKey(rename, row, columns); + if (key === null || key === undefined) return false; + if (canonicalKeys.has(key)) { + this.trackExistingCoreRowRemap(rename, row, canonicalRows); + return false; + } + return true; + }); + + let insertedCount = 0; + for (const row of rowsToInsert) { + const projected = this.projectCoreRowToColumns(rename, row, columns); + if ( + projected?.id !== undefined && + projected?.id !== null && + occupiedIds.has(String(projected.id)) + ) { + delete projected.id; + } + await knex(rename.to).insert(projected); + insertedCount += 1; + await this.trackInsertedSqlCoreRowRemap(rename, row, projected); + const insertedId = + projected?.id ?? + (projected?.name + ? (await knex(rename.to).where({ name: projected.name }).first())?.id + : undefined); + if (insertedId !== undefined && insertedId !== null) { + occupiedIds.add(String(insertedId)); + } + } + + if (insertedCount > 0) { + this.verbose( + ` Copied ${insertedCount} missing core metadata row(s) from ${rename.from} to ${rename.to}`, + ); + } + } + + private async reconcileSqlTableOverlap( + rename: TableRenameDef, + ): Promise { + const knex = this.queryBuilderService.getKnex(); + const columns = await this.getSqlMergedColumns(rename.from, rename.to); + const [legacyRows, canonicalRows] = await Promise.all([ + knex(rename.from).select(columns), + knex(rename.to).select(columns), + ]); + const canonicalKeys = new Set(); + const occupiedIds = new Set(); + for (const row of canonicalRows) { + const key = this.getOverlapRowKey(rename, row, columns); + if (key) canonicalKeys.add(key); + if (row?.id !== undefined && row.id !== null) { + occupiedIds.add(String(row.id)); + } + } + + let insertedCount = 0; + let conflictCount = 0; + let skippedCount = 0; + let updatedCount = 0; + for (const row of legacyRows) { + const key = this.getOverlapRowKey(rename, row, columns); + if (!key) { + skippedCount += 1; + continue; + } + if (canonicalKeys.has(key)) { + const canonicalRow = this.findRowByOverlapKey( + rename, + canonicalRows, + key, + columns, + ); + if (canonicalRow && this.rowsConflict(row, canonicalRow, columns)) { + conflictCount += 1; + } + if (canonicalRow) { + const missingValues = this.getMissingRowValues( + row, + canonicalRow, + columns, + ); + const filter = this.getRowIdentityFilter(rename, canonicalRow); + if (filter && Object.keys(missingValues).length > 0) { + await knex(rename.to).where(filter).update(missingValues); + Object.assign(canonicalRow, missingValues); + updatedCount += 1; + } + } + continue; + } + const projected = this.projectRowToColumns(row, columns); + if ( + projected?.id !== undefined && + projected?.id !== null && + occupiedIds.has(String(projected.id)) + ) { + delete projected.id; + } + await knex(rename.to).insert(projected); + insertedCount += 1; + canonicalKeys.add(key); + if (projected?.id !== undefined && projected.id !== null) { + occupiedIds.add(String(projected.id)); + } + } + this.verbose( + ` SQL table overlap reconciled for ${rename.from} → ${rename.to}: copied ${insertedCount}, updated ${updatedCount}, conflicts ${conflictCount}, skipped ${skippedCount}`, + ); + } + + private async reconcileMongoCoreTableOverlap( + rename: TableRenameDef, + ): Promise { + const db = this.getMongoDb()!; + const [legacyRows, canonicalRows] = await Promise.all([ + db.collection(rename.from).find({}).toArray(), + db.collection(rename.to).find({}).toArray(), + ]); + + const canonicalKeys = new Set(); + for (const row of canonicalRows) { + this.trackCanonicalCoreTableId(rename, row); + const key = this.getCoreMetadataRowKey(rename, row); + if (key !== null && key !== undefined) canonicalKeys.add(key); + } + const rowsToInsert = legacyRows.filter((row) => { + const key = this.getCoreMetadataRowKey(rename, row); + if (key === null || key === undefined) return false; + if (canonicalKeys.has(key)) { + this.trackExistingCoreRowRemap(rename, row, canonicalRows); + return false; + } + return true; + }); + + const projectedRows = rowsToInsert.map((row) => { + const projected = this.projectCoreRowToColumns( + rename, + row, + Object.keys(row), + ); + if (this.mongoProjectedIdConflicts(projected, canonicalRows)) { + delete projected._id; + } + return projected; + }); + + if (projectedRows.length > 0) { + await db.collection(rename.to).insertMany(projectedRows); + for (let index = 0; index < rowsToInsert.length; index += 1) { + await this.trackInsertedMongoCoreRowRemap( + rename, + rowsToInsert[index], + projectedRows[index], + ); + } + this.verbose( + ` Copied ${projectedRows.length} missing core metadata row(s) from ${rename.from} to ${rename.to}`, + ); + } + } + + private async reconcileMongoTableOverlap( + rename: TableRenameDef, + ): Promise { + const db = this.getMongoDb()!; + const [legacyRows, canonicalRows] = await Promise.all([ + db.collection(rename.from).find({}).toArray(), + db.collection(rename.to).find({}).toArray(), + ]); + const columns = [ + ...new Set([ + ...legacyRows.flatMap((row) => Object.keys(row)), + ...canonicalRows.flatMap((row) => Object.keys(row)), + ]), + ]; + const canonicalKeys = new Set(); + const occupiedIds = new Set(); + for (const row of canonicalRows) { + const key = this.getOverlapRowKey(rename, row, columns); + if (key) canonicalKeys.add(key); + if (row?._id !== undefined && row._id !== null) { + occupiedIds.add(String(row._id)); + } + } + + let conflictCount = 0; + let skippedCount = 0; + let updatedCount = 0; + const rowsToInsert: any[] = []; + for (const row of legacyRows) { + const key = this.getOverlapRowKey(rename, row, columns); + if (!key) { + skippedCount += 1; + continue; + } + if (canonicalKeys.has(key)) { + const canonicalRow = this.findRowByOverlapKey( + rename, + canonicalRows, + key, + columns, + ); + if (canonicalRow && this.rowsConflict(row, canonicalRow, columns)) { + conflictCount += 1; + } + if (canonicalRow) { + const missingValues = this.getMissingRowValues( + row, + canonicalRow, + columns, + ); + const filter = this.getRowIdentityFilter(rename, canonicalRow); + if (filter && Object.keys(missingValues).length > 0) { + await db + .collection(rename.to) + .updateOne(filter, { $set: missingValues }); + Object.assign(canonicalRow, missingValues); + updatedCount += 1; + } + } + continue; + } + const projected = this.projectRowToColumns(row, columns); + if ( + projected?._id !== undefined && + projected?._id !== null && + occupiedIds.has(String(projected._id)) + ) { + delete projected._id; + } + rowsToInsert.push(projected); + canonicalKeys.add(key); + if (projected?._id !== undefined && projected._id !== null) { + occupiedIds.add(String(projected._id)); + } + } + if (rowsToInsert.length > 0) { + await db.collection(rename.to).insertMany(rowsToInsert); + } + this.verbose( + ` Mongo collection overlap reconciled for ${rename.from} → ${rename.to}: copied ${rowsToInsert.length}, updated ${updatedCount}, conflicts ${conflictCount}, skipped ${skippedCount}`, + ); + } + private async renameSqlTableMetadataRow( tableStore: string, rename: TableRenameDef, @@ -341,12 +1013,31 @@ export class MetadataMigrationService { ): Promise { const knex = this.queryBuilderService.getKnex(); if (!(await knex.schema.hasTable(tableStore))) return; + const targetRow = await knex(tableStore).where({ name: rename.to }).first(); + if (targetRow) return; const query = tableId ? knex(tableStore).where({ id: tableId }) : knex(tableStore).where({ name: rename.from }); await query.update({ name: rename.to }); } + private async renameMongoTableMetadataRow( + tableStore: string, + rename: TableRenameDef, + tableId?: any, + ): Promise { + const db = this.getMongoDb()!; + const targetRow = await db + .collection(tableStore) + .findOne({ name: rename.to }); + if (targetRow) return; + + const filter = tableId ? { _id: tableId } : { name: rename.from }; + await db.collection(tableStore).updateOne(filter, { + $set: { name: rename.to, updatedAt: new Date() }, + }); + } + private async updateSqlCanonicalRoutePath( rename: TableRenameDef, tableId?: any, diff --git a/src/engines/bootstrap/utils/metadata-physical-migration.util.ts b/src/engines/bootstrap/utils/metadata-physical-migration.util.ts index 65f3a634..8cca0ddf 100644 --- a/src/engines/bootstrap/utils/metadata-physical-migration.util.ts +++ b/src/engines/bootstrap/utils/metadata-physical-migration.util.ts @@ -67,6 +67,17 @@ export class MetadataPhysicalMigrationHelper { { [oldName]: { $exists: true }, [newName]: { $exists: false } }, [{ $set: { [newName]: `$${oldName}` } }], ); + const conflictCount = await db.collection(tableName).countDocuments({ + [oldName]: { $exists: true }, + [newName]: { $exists: true }, + $expr: { $ne: [`$${oldName}`, `$${newName}`] }, + }); + if (conflictCount > 0) { + this.verbose( + ` Preserved legacy document field ${tableName}.${oldName}; ${conflictCount} document(s) conflict with ${newName}`, + ); + return; + } await db .collection(tableName) .updateMany( @@ -98,6 +109,17 @@ export class MetadataPhysicalMigrationHelper { oldName, newName, ]); + const conflictResult = await knex.raw( + 'SELECT COUNT(*) AS count FROM ?? WHERE ?? IS NOT NULL AND ?? IS NOT NULL AND ?? <> ??', + [tableName, oldName, newName, oldName, newName], + ); + const conflictCount = this.readSqlCount(conflictResult); + if (conflictCount > 0) { + this.verbose( + ` Preserved legacy physical column ${tableName}.${oldName}; ${conflictCount} row(s) conflict with ${newName}`, + ); + return; + } await knex.schema.alterTable(tableName, (table: any) => { table.dropColumn(oldName); }); @@ -147,12 +169,29 @@ export class MetadataPhysicalMigrationHelper { return matches.length > 0; } + private async reconcileMongoCollectionOverlap( + rename: TableRenameDef, + ): Promise { + this.verbose( + ` Physical Mongo overlap detected for ${rename.from} and ${rename.to}; preserving canonical collection ${rename.to}`, + ); + } + + private async reconcileSqlTableOverlap( + rename: TableRenameDef, + ): Promise { + this.verbose( + ` Physical SQL overlap detected for ${rename.from} and ${rename.to}; preserving canonical table ${rename.to}`, + ); + } + private async renameMongoCollection(rename: TableRenameDef): Promise { const oldExists = await this.mongoCollectionExists(rename.from); const newExists = await this.mongoCollectionExists(rename.to); if (oldExists && newExists) { - throw new Error( - `Cannot rename physical collection ${rename.from} to ${rename.to}: both collections exist`, + await this.reconcileMongoCollectionOverlap(rename); + this.verbose( + ` Physical Mongo overlap detected: ${rename.from} and ${rename.to} both exist; continuing with canonical ${rename.to}`, ); } if (oldExists && !newExists) { @@ -168,8 +207,9 @@ export class MetadataPhysicalMigrationHelper { const oldExists = await knex.schema.hasTable(rename.from); const newExists = await knex.schema.hasTable(rename.to); if (oldExists && newExists) { - throw new Error( - `Cannot rename physical table ${rename.from} to ${rename.to}: both physical tables exist`, + await this.reconcileSqlTableOverlap(rename); + this.verbose( + ` Physical SQL overlap detected: ${rename.from} and ${rename.to} both exist; continuing with canonical ${rename.to}`, ); } if (oldExists && !newExists) { @@ -181,4 +221,15 @@ export class MetadataPhysicalMigrationHelper { private getMongoDb(): Db { return this.queryBuilderService.getMongoDb(); } + + private readSqlCount(result: any): number { + const rows = Array.isArray(result) + ? Array.isArray(result[0]) + ? result[0] + : result + : result?.rows; + const row = Array.isArray(rows) ? rows[0] : rows; + const value = row?.count ?? row?.COUNT ?? row?.['COUNT(*)'] ?? 0; + return Number(value) || 0; + } } diff --git a/src/http/middlewares/dynamic-interceptor.middleware.ts b/src/http/middlewares/dynamic-interceptor.middleware.ts index 37d31a26..7645ddcc 100644 --- a/src/http/middlewares/dynamic-interceptor.middleware.ts +++ b/src/http/middlewares/dynamic-interceptor.middleware.ts @@ -8,6 +8,14 @@ function isAdminTestRunRequest(req: any): boolean { return req.method === 'POST' && path === '/admin/test/run'; } +function isErrorResponse(res: Response, data: any): boolean { + return ( + res.statusCode >= 400 || + data?.success === false || + (data?.error && Number(data?.statusCode || res.statusCode) >= 400) + ); +} + export function dynamicInterceptorBegin( executorEngineService: ExecutorEngineService, ) { @@ -31,6 +39,10 @@ export function dynamicInterceptorBegin( const postHooks = req.routeData?.postHooks; const hasDynamicHandler = Boolean(req.routeData?.handler?.trim?.()); + if (isErrorResponse(res, data)) { + return originalJson(appendLogs(data)); + } + if (!hasDynamicHandler && postHooks?.length) { Promise.resolve() .then(async () => { diff --git a/src/http/middlewares/jwt-auth.middleware.ts b/src/http/middlewares/jwt-auth.middleware.ts index c0ad0500..01e3c163 100644 --- a/src/http/middlewares/jwt-auth.middleware.ts +++ b/src/http/middlewares/jwt-auth.middleware.ts @@ -7,14 +7,13 @@ import { import { QueryBuilderService } from '@enfyra/kernel'; import { CacheService } from '../../engines/cache'; import { - loadUserWithRole, - userCacheKey, - USER_CACHE_TTL_MS, + loadCachedUserWithRole, + withUserRequestContext, } from '../../shared/utils/load-user-with-role.util'; import type { ApiTokenService } from '../../domain/auth'; -function isPublishedRequest(req: any): boolean { - if (req.routeData?.isPublished === true) return true; +function isPublicRequest(req: any): boolean { + if (req.routeData?.isPublic === true) return true; return ( req.routeData?.publicMethods?.some( (method: any) => method?.name === req.method || method === req.method, @@ -31,7 +30,7 @@ function setAnonymousUser(req: any): void { export function jwtAuthMiddleware( queryBuilderService: QueryBuilderService, - cacheService: CacheService, + _cacheService: CacheService, secretKey: string, apiTokenService?: ApiTokenService, ) { @@ -52,7 +51,7 @@ export function jwtAuthMiddleware( const { payload: decoded } = await jwtVerify(token, key); payload = decoded; } catch (err: any) { - if (isPublishedRequest(req)) { + if (isPublicRequest(req)) { setAnonymousUser(req); return next(); } @@ -75,26 +74,20 @@ export function jwtAuthMiddleware( } const { id, loginProvider, tokenType, tokenId } = payload; - const cacheKey = userCacheKey(id); + const cachedUser = await loadCachedUserWithRole( + queryBuilderService, + id, + ); - let user = await cacheService.get(cacheKey); - - if (!user) { - user = await loadUserWithRole(queryBuilderService, id); - if (user) { - await cacheService.set(cacheKey, user, USER_CACHE_TTL_MS); - } - } - - if (!user) { + if (!cachedUser) { setAnonymousUser(req); return next(); } - Object.assign(user, { - loginProvider: loginProvider ?? null, - tokenType: tokenType ?? null, - apiTokenId: tokenId ?? null, + const user = withUserRequestContext(cachedUser, { + loginProvider, + tokenType, + tokenId, }); req.user = user; diff --git a/src/http/middlewares/route-detect.middleware.ts b/src/http/middlewares/route-detect.middleware.ts index 2d41e75f..e04e4880 100644 --- a/src/http/middlewares/route-detect.middleware.ts +++ b/src/http/middlewares/route-detect.middleware.ts @@ -162,7 +162,7 @@ export function routeDetectMiddleware( params, preHooks: filteredPreHooks, postHooks: filteredPostHooks, - isPublished: + isPublic: route.publicMethods?.some( (pubMethod: any) => pubMethod.name === req.method, ) || false, diff --git a/src/http/routes/file.routes.ts b/src/http/routes/file.routes.ts index 22915724..f18bcf1a 100644 --- a/src/http/routes/file.routes.ts +++ b/src/http/routes/file.routes.ts @@ -139,7 +139,7 @@ export function registerFileRoutes( title: file.originalname, description: body.description, status: body.status, - isPublished: body.isPublished, + isPublic: body.isPublic, }, ); return res.json(result); @@ -157,7 +157,7 @@ export function registerFileRoutes( storageConfig: body.storageConfig, description: body.description, status: body.status, - isPublished: body.isPublished, + isPublic: body.isPublic, }, ); return res.json(result); diff --git a/src/modules/file-management/services/file-assets.service.ts b/src/modules/file-management/services/file-assets.service.ts index 87bc5bd7..e75be883 100644 --- a/src/modules/file-management/services/file-assets.service.ts +++ b/src/modules/file-management/services/file-assets.service.ts @@ -11,7 +11,7 @@ import { StreamHelper } from '../utils/stream.helper'; import { FileValidationHelper } from '../utils/file-validation.helper'; import { ImageFormatHelper } from '../utils/image-format.helper'; import { FileSignatureHelper } from '../utils/file-signature.helper'; -import { loadUserWithRole } from '../../../shared/utils/load-user-with-role.util'; +import { loadCachedUserWithRole } from '../../../shared/utils/load-user-with-role.util'; import { EventEmitter2 } from 'eventemitter2'; import { CACHE_EVENTS } from '../../../shared/utils/cache-events.constants'; import type { TCacheInvalidationPayload } from '../../../shared/types/cache.types'; @@ -473,7 +473,7 @@ export class FileAssetsService { const file = await this.getFileFromCache(fileId); if (!file) throw new NotFoundException(`File not found: ${fileId}`); - if (!file.isPublished) { + if (!file.isPublic) { const currentUser = req.user || req.routeData?.context?.$user; const currentUserId = this.normalizeId( currentUser?.id ?? currentUser?._id, @@ -484,7 +484,7 @@ export class FileAssetsService { !isRootAdmin && (!req.user || (!req.user.role && !req.user.roleId)) ) { - req.user = await loadUserWithRole( + req.user = await loadCachedUserWithRole( this.queryBuilderService, currentUserId, ); diff --git a/src/modules/file-management/services/file-management.service.ts b/src/modules/file-management/services/file-management.service.ts index 7eff0511..1ee67855 100644 --- a/src/modules/file-management/services/file-management.service.ts +++ b/src/modules/file-management/services/file-management.service.ts @@ -392,7 +392,7 @@ export class FileManagementService { title?: string; description?: string; status?: string; - isPublished?: boolean; + isPublic?: boolean; } = {}, ): Promise { const currentStorageConfigId = this.getFileStorageConfigId(currentFile); @@ -411,10 +411,8 @@ export class FileManagementService { : currentFile.description; const nextStatus = options.status !== undefined ? options.status : currentFile.status; - const nextIsPublished = - options.isPublished !== undefined - ? options.isPublished - : currentFile.isPublished; + const nextIsPublic = + options.isPublic !== undefined ? options.isPublic : currentFile.isPublic; const processedFile = await this.processFileUpload( { @@ -441,7 +439,7 @@ export class FileManagementService { folder: nextFolder, uploadedBy: currentFile.uploadedBy, status: nextStatus, - isPublished: nextIsPublished, + isPublic: nextIsPublic, storageConfig: processedFile.storage_config_id ? this.createIdReference(processedFile.storage_config_id) : null, @@ -476,7 +474,7 @@ export class FileManagementService { title?: string; description?: string; status?: string; - isPublished?: boolean; + isPublic?: boolean; }, ): Promise { const updateData: any = {}; @@ -499,8 +497,7 @@ export class FileManagementService { if (options.description !== undefined) updateData.description = options.description; if (options.status !== undefined) updateData.status = options.status; - if (options.isPublished !== undefined) - updateData.isPublished = options.isPublished; + if (options.isPublic !== undefined) updateData.isPublic = options.isPublic; if (Object.keys(updateData).length === 0) return currentFile; diff --git a/src/modules/file-management/utils/file-validation.helper.ts b/src/modules/file-management/utils/file-validation.helper.ts index 2e73990a..61af5909 100644 --- a/src/modules/file-management/utils/file-validation.helper.ts +++ b/src/modules/file-management/utils/file-validation.helper.ts @@ -43,7 +43,7 @@ export class FileValidationHelper { file: any, req: RequestWithRouteData, ): Promise { - if (file.isPublished) return; + if (file.isPublic) return; const user = req.user || req.routeData?.context?.$user; if (user?.isRootAdmin) return; diff --git a/src/modules/graphql/resolvers/dynamic.resolver.ts b/src/modules/graphql/resolvers/dynamic.resolver.ts index a66c1679..d45fc3e3 100644 --- a/src/modules/graphql/resolvers/dynamic.resolver.ts +++ b/src/modules/graphql/resolvers/dynamic.resolver.ts @@ -16,7 +16,7 @@ import { import { PolicyService, isPolicyDeny } from '../../../domain/policy'; import { resolveClientIpFromRequest } from '../../../shared/utils/client-ip.util'; import { isMetadataTable } from '../../../shared/utils/cache-events.constants'; -import { loadUserWithRole } from '../../../shared/utils/load-user-with-role.util'; +import { loadCachedUserWithRole } from '../../../shared/utils/load-user-with-role.util'; export class DynamicResolver { private readonly queryBuilderService: QueryBuilderService; @@ -265,7 +265,10 @@ export class DynamicResolver { } catch { throwGqlError('401', 'Unauthorized'); } - const user = await loadUserWithRole(this.queryBuilderService, decoded.id); + const user = await loadCachedUserWithRole( + this.queryBuilderService, + decoded.id, + ); if (!user) { throwGqlError('401', 'Invalid user'); } diff --git a/src/modules/me/services/me.service.ts b/src/modules/me/services/me.service.ts index a88ceb95..87a1de16 100644 --- a/src/modules/me/services/me.service.ts +++ b/src/modules/me/services/me.service.ts @@ -37,14 +37,9 @@ export class MeService { return context.$repos?.secure?.[tableName]; } - private getTrustedRepo(req: Request & { routeData?: any }, tableName: string) { - const context = this.getRepoContext(req); - return context.$repos?.[tableName]; - } - async find(req: Request & { user: any; routeData?: any }) { if (!req.user) throw new UnauthorizedException(); - const repo = this.getTrustedRepo(req, 'enfyra_user'); + const repo = this.getSecureRepo(req, 'enfyra_user'); if (!repo) { throw new Error('Repository not found in route context'); } @@ -137,7 +132,7 @@ export class MeService { async findOAuthAccounts(req: Request & { user: any; routeData?: any }) { if (!req.user) throw new UnauthorizedException(); - const repo = this.getTrustedRepo(req, 'enfyra_oauth_account'); + const repo = this.getSecureRepo(req, 'enfyra_oauth_account'); if (!repo) { throw new Error('Repository not found in route context'); } diff --git a/src/modules/websocket/gateway/dynamic-websocket.gateway.ts b/src/modules/websocket/gateway/dynamic-websocket.gateway.ts index 49de0d58..ff9a5fbf 100644 --- a/src/modules/websocket/gateway/dynamic-websocket.gateway.ts +++ b/src/modules/websocket/gateway/dynamic-websocket.gateway.ts @@ -17,9 +17,8 @@ import { import { QueryBuilderService } from '@enfyra/kernel'; import { RedisAdminService } from '../../admin/services/redis-admin.service'; import { - loadUserWithRole, - userCacheKey, - USER_CACHE_TTL_MS, + loadCachedUserWithRole, + withUserRequestContext, } from '../../../shared/utils/load-user-with-role.util'; import type { Cradle } from '../../../container'; @@ -627,22 +626,19 @@ export class DynamicWebSocketGateway { if (currentUser?.isRootAdmin !== undefined) return currentUser; const id = currentUser?.id ?? currentUser?.userId; if (id === undefined || id === null) return null; - const cacheKey = userCacheKey(id); - let user = await this.cacheService.get(cacheKey); - if (!user) { - user = await loadUserWithRole(this.queryBuilderService, id); - if (user) { - await this.cacheService.set(cacheKey, user, USER_CACHE_TTL_MS); - } - } - if (user) { - Object.assign(user, { - loginProvider: currentUser?.loginProvider ?? null, + const cachedUser = await loadCachedUserWithRole( + this.queryBuilderService, + id, + ); + if (cachedUser) { + const user = withUserRequestContext(cachedUser, { + loginProvider: currentUser?.loginProvider, }); socket.data.user = user; socket.data.userId = user.id || user._id || id; + return user; } - return user; + return null; } async handleConnection(_client: Socket) {} diff --git a/src/shared/helpers/upload-file.helper.ts b/src/shared/helpers/upload-file.helper.ts index d39d4ba6..7a4668b0 100644 --- a/src/shared/helpers/upload-file.helper.ts +++ b/src/shared/helpers/upload-file.helper.ts @@ -252,7 +252,7 @@ export class UploadFileHelper { title: options.title, description: options.description, status: options.status, - isPublished: options.isPublished, + isPublic: options.isPublic, }, ); } @@ -267,7 +267,7 @@ export class UploadFileHelper { title: options.title, description: options.description, status: options.status, - isPublished: options.isPublished, + isPublic: options.isPublic, }, ); } catch (error: any) { diff --git a/src/shared/types/dynamic-context.types.ts b/src/shared/types/dynamic-context.types.ts index 9811855b..2c1dbb83 100644 --- a/src/shared/types/dynamic-context.types.ts +++ b/src/shared/types/dynamic-context.types.ts @@ -184,7 +184,7 @@ export interface RequestWithRouteData extends Request { handlers?: any[]; preHooks: any[]; postHooks: any[]; - isPublished: boolean; + isPublic: boolean; mainTable?: any; route?: any; res?: Response; diff --git a/src/shared/types/schema-migration.types.ts b/src/shared/types/schema-migration.types.ts index 0d38abb1..d67c6f35 100644 --- a/src/shared/types/schema-migration.types.ts +++ b/src/shared/types/schema-migration.types.ts @@ -40,6 +40,7 @@ export interface RelationModifyDef { export interface TableRenameDef { from: string; to: string; + mergeKeys?: string[]; } /** diff --git a/src/shared/utils/load-user-with-role.util.ts b/src/shared/utils/load-user-with-role.util.ts index f6957402..a3afb9fa 100644 --- a/src/shared/utils/load-user-with-role.util.ts +++ b/src/shared/utils/load-user-with-role.util.ts @@ -4,10 +4,25 @@ import { DatabaseConfigService } from '../services'; export const USER_CACHE_TTL_MS = 60_000; +type CachedUserEntry = { + expiresAt: number; + user: any; +}; + +const localUserCache = new Map(); + export function userCacheKey(id: unknown): string { return `user:${String(id)}`; } +function normalizeUserLookupId( + queryBuilder: IQueryBuilder, + rawId: unknown, +): unknown | null { + if (rawId === undefined || rawId === null) return null; + return queryBuilder.isMongoDb() ? toMongoObjectId(rawId) : toSqlId(rawId); +} + function toMongoObjectId(value: unknown): ObjectId | null { if (value instanceof ObjectId) return value; if (typeof value === 'string' && /^[0-9a-fA-F]{24}$/.test(value)) { @@ -36,11 +51,9 @@ export async function loadUserWithRole( queryBuilder: IQueryBuilder, rawId: unknown, ): Promise { - if (rawId === undefined || rawId === null) return null; - const isMongoDB = queryBuilder.isMongoDb(); const idField = DatabaseConfigService.getPkField(); - const idValue = isMongoDB ? toMongoObjectId(rawId) : toSqlId(rawId); + const idValue = normalizeUserLookupId(queryBuilder, rawId); if (!idValue) return null; const user = await queryBuilder.findOne({ @@ -63,3 +76,80 @@ export async function loadUserWithRole( return user; } + +export async function loadCachedUserWithRole( + queryBuilder: IQueryBuilder, + rawId: unknown, +): Promise { + const idValue = normalizeUserLookupId(queryBuilder, rawId); + if (!idValue) return null; + + const cacheKey = userCacheKey(idValue); + const cachedUser = localUserCache.get(cacheKey); + if (cachedUser) { + if (cachedUser.expiresAt > Date.now()) return cachedUser.user; + localUserCache.delete(cacheKey); + } + + const user = await loadUserWithRole(queryBuilder, idValue); + if (user) { + localUserCache.set(cacheKey, { + user, + expiresAt: Date.now() + USER_CACHE_TTL_MS, + }); + } + return user; +} + +export async function primeCachedUserWithRole( + queryBuilder: IQueryBuilder, + rawId: unknown, +): Promise { + const user = await loadUserWithRole(queryBuilder, rawId); + if (!user) return; + + const idValue = normalizeUserLookupId(queryBuilder, rawId); + if (!idValue) return; + localUserCache.set(userCacheKey(idValue), { + user, + expiresAt: Date.now() + USER_CACHE_TTL_MS, + }); +} + +export function primeCachedUserSnapshot(rawId: unknown, user: any): void { + if (!user || rawId === undefined || rawId === null) return; + localUserCache.set(userCacheKey(rawId), { + user, + expiresAt: Date.now() + USER_CACHE_TTL_MS, + }); +} + +export function invalidateCachedUserWithRole(rawId: unknown): void { + if (rawId === undefined || rawId === null) return; + localUserCache.delete(userCacheKey(rawId)); +} + +export function clearLocalUserCacheForTesting(): void { + localUserCache.clear(); +} + +export function withUserRequestContext( + user: any, + context: { + loginProvider?: unknown; + tokenType?: unknown; + tokenId?: unknown; + }, +): any { + if (!user) return user; + return { + ...user, + role: + user.role && typeof user.role === 'object' && !Array.isArray(user.role) + ? { ...user.role } + : user.role, + loginProvider: context.loginProvider ?? null, + tokenType: context.tokenType ?? null, + apiTokenId: context.tokenId ?? null, + }; +} diff --git a/test/cache/websocket-cache-partial.spec.ts b/test/cache/websocket-cache-partial.spec.ts index 79a4c522..ccb33e1b 100644 --- a/test/cache/websocket-cache-partial.spec.ts +++ b/test/cache/websocket-cache-partial.spec.ts @@ -63,8 +63,8 @@ describe('WebsocketCacheService partial reload', () => { }, ]; const events = [ - { id: 10, gateway: { id: 1 } }, - { id: 20, gateway: { id: 2 } }, + { id: 10, eventName: 'chat:message', gateway: { id: 1 } }, + { id: 20, eventName: 'admin:ping', gateway: { id: 2 } }, ]; const { svc, qb } = makeService(gateways, events); await svc.reload(false); @@ -72,6 +72,7 @@ describe('WebsocketCacheService partial reload', () => { gateways[0].events = [ { id: 10, eventName: 'chat:new', gateway: { id: 1 } }, ]; + events[0].eventName = 'chat:new'; qb.find.mockClear(); await svc.partialReload( diff --git a/test/domain/api-token.service.spec.ts b/test/domain/api-token.service.spec.ts index befc9ad1..727fe5f3 100644 --- a/test/domain/api-token.service.spec.ts +++ b/test/domain/api-token.service.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it, vi } from 'vitest'; +import { afterEach, describe, expect, it, vi } from 'vitest'; import * as jwt from 'jsonwebtoken'; import { ApiTokenService } from '../../src/domain/auth'; @@ -81,6 +81,12 @@ function createHarness() { } describe('ApiTokenService', () => { + const now = new Date('2026-01-01T00:00:00.000Z'); + + afterEach(() => { + vi.useRealTimers(); + }); + it('creates a token with the exact never-expiry contract', async () => { const { service, req } = createHarness(); @@ -110,6 +116,8 @@ describe('ApiTokenService', () => { }); it('exchanges a valid API token into a JWT tied to the token record', async () => { + vi.useFakeTimers(); + vi.setSystemTime(now); const { service, req, userId } = createHarness(); const created = await service.create( { @@ -125,9 +133,31 @@ describe('ApiTokenService', () => { expect(decoded.id).toBe(userId); expect(decoded.tokenType).toBe('api_token'); expect(decoded.tokenId).toBe(created.id); + expect(decoded.exp).toBe(Math.floor((now.getTime() + 60_000) / 1000)); + expect(exchanged.expTime).toBe(decoded.exp! * 1000); await expect(service.validateAccessPayload(decoded)).resolves.toBe(true); }); + it('caps exchanged JWT expiry to the API token expiry when sooner than the access TTL', async () => { + vi.useFakeTimers(); + vi.setSystemTime(now); + const { service, req } = createHarness(); + const expiresAt = new Date(now.getTime() + 30_000); + const created = await service.create( + { + name: 'Short MCP token', + expiresAt: expiresAt.toISOString(), + }, + req, + ); + + const exchanged = await service.exchange({ apiToken: created.token }); + const decoded = jwt.decode(exchanged.accessToken) as jwt.JwtPayload; + + expect(decoded.exp).toBe(Math.floor(expiresAt.getTime() / 1000)); + expect(exchanged.expTime).toBe(decoded.exp! * 1000); + }); + it('hard-deletes revoked tokens and invalidates their cached access state', async () => { const { service, req, tokens, cacheService, redisPubSubService } = createHarness(); diff --git a/test/domain/bootstrap-data-validator.spec.ts b/test/domain/bootstrap-data-validator.spec.ts index 37d92116..797abdb7 100644 --- a/test/domain/bootstrap-data-validator.spec.ts +++ b/test/domain/bootstrap-data-validator.spec.ts @@ -19,6 +19,31 @@ describe('validateBootstrapDataFiles', () => { expect(issues).toEqual([]); }); + it('migrates static admin routes into route metadata', () => { + const dataMigration = loadJson('data-migration.json'); + const routes = dataMigration.enfyra_route ?? []; + const paths = new Set( + routes.map((route: any) => route._unique?.path?._eq ?? route.path), + ); + + expect([...paths]).toEqual( + expect.arrayContaining([ + '/admin/script/validate', + '/admin/test/run', + '/admin/flow/trigger/:id', + '/admin/reload', + '/admin/reload/metadata', + '/admin/reload/routes', + '/admin/reload/graphql', + '/admin/reload/guards', + '/admin/redis/overview', + '/admin/redis/keys', + '/admin/redis/key', + '/admin/redis/key/ttl', + ]), + ); + }); + it('reports unknown route mainTable and method names', () => { const issues = validateBootstrapDataFiles({ snapshot: { diff --git a/test/domain/data-migration.service.spec.ts b/test/domain/data-migration.service.spec.ts index e5cd0df3..37fecd6f 100644 --- a/test/domain/data-migration.service.spec.ts +++ b/test/domain/data-migration.service.spec.ts @@ -1,5 +1,14 @@ import { DataMigrationService } from '../../src/engines/bootstrap'; import { DatabaseConfigService } from '../../src/shared/services'; +import { getSqlJunctionPhysicalNames } from '../../src/modules/table-management/utils/sql-junction-naming.util'; + +function routeMethodJunction(propertyName: string) { + return getSqlJunctionPhysicalNames({ + sourceTable: 'enfyra_route', + propertyName, + targetTable: 'enfyra_method', + }).junctionTableName; +} function makeQueryBuilder( overrides: Partial<{ @@ -75,6 +84,10 @@ function makeKnex(methodRows: any[] = []) { rawCalls.push({ sql, bindings }); return { rows: [] }; }); + (knex as any).schema = { + hasTable: jest.fn(async () => true), + hasColumn: jest.fn(async () => true), + }; return { knex, deletes, inserts, rawCalls }; } @@ -171,20 +184,20 @@ describe('DataMigrationService.transformRecord', () => { it('does not capture undefined relation field', () => { const svc = makeService(makeQueryBuilder()); - const { relationUpdates } = (svc as any).transformRecord( - 'enfyra_route', - { _unique: { path: { _eq: '/test' } }, name: 'hello' }, - ); + const { relationUpdates } = (svc as any).transformRecord('enfyra_route', { + _unique: { path: { _eq: '/test' } }, + name: 'hello', + }); expect(relationUpdates.publicMethods).toBeUndefined(); expect(relationUpdates.availableMethods).toBeUndefined(); }); it('does not capture null relation field', () => { const svc = makeService(makeQueryBuilder()); - const { relationUpdates } = (svc as any).transformRecord( - 'enfyra_route', - { _unique: { path: { _eq: '/test' } }, publicMethods: null }, - ); + const { relationUpdates } = (svc as any).transformRecord('enfyra_route', { + _unique: { path: { _eq: '/test' } }, + publicMethods: null, + }); expect(relationUpdates.publicMethods).toBeUndefined(); }); }); @@ -210,7 +223,7 @@ describe('DataMigrationService.updateRelations', () => { expect(qb.__knexMock.rawCalls).toContainEqual({ sql: 'delete from ?? where ?? = ?', - bindings: ['j_publicMethods', 'sourceId', 99], + bindings: [routeMethodJunction('publicMethods'), 'sourceId', 99], }); }); @@ -230,7 +243,15 @@ describe('DataMigrationService.updateRelations', () => { expect(knexMock.rawCalls).toContainEqual({ sql: 'insert into ?? (??, ??) values (?, ?), (?, ?)', - bindings: ['j_publicMethods', 'sourceId', 'targetId', 10, 1, 10, 2], + bindings: [ + routeMethodJunction('publicMethods'), + 'sourceId', + 'targetId', + 10, + 1, + 10, + 2, + ], }); }); @@ -246,7 +267,7 @@ describe('DataMigrationService.updateRelations', () => { expect(qb.__knexMock.rawCalls).toContainEqual({ sql: 'delete from ?? where ?? = ?', - bindings: ['j_availableMethods', 'sourceId', 5], + bindings: [routeMethodJunction('availableMethods'), 'sourceId', 5], }); }); @@ -275,21 +296,24 @@ describe('DataMigrationService.updateRelations', () => { expect(knexMock.rawCalls).toContainEqual({ sql: 'delete from ?? where ?? = ?', - bindings: ['j_publicMethods', 'sourceId', 7], + bindings: [routeMethodJunction('publicMethods'), 'sourceId', 7], }); expect(knexMock.rawCalls).toContainEqual({ sql: 'insert into ?? (??, ??) values (?, ?)', - bindings: ['j_availableMethods', 'sourceId', 'targetId', 7, 3], + bindings: [ + routeMethodJunction('availableMethods'), + 'sourceId', + 'targetId', + 7, + 3, + ], }); }); it('writes Mongo route method relations directly to the metadata junction', async () => { DatabaseConfigService.overrideForTesting('mongodb'); const mongoDb = makeMongoDb(); - const methodIds = [ - '653333333333333333333333', - '654444444444444444444444', - ]; + const methodIds = ['653333333333333333333333', '654444444444444444444444']; const qb = makeQueryBuilder({ getMongoDb: jest.fn(() => mongoDb), find: jest.fn().mockResolvedValue({ @@ -347,7 +371,7 @@ describe('DataMigrationService.migrateTable — end-to-end for publicMethods cle expect(qb.update).not.toHaveBeenCalled(); expect(qb.__knexMock.rawCalls).toContainEqual({ sql: 'delete from ?? where ?? = ?', - bindings: ['j_publicMethods', 'sourceId', 42], + bindings: [routeMethodJunction('publicMethods'), 'sourceId', 42], }); }); diff --git a/test/domain/first-run-initializer.spec.ts b/test/domain/first-run-initializer.spec.ts index ca4a0e11..f67e4ec0 100644 --- a/test/domain/first-run-initializer.spec.ts +++ b/test/domain/first-run-initializer.spec.ts @@ -33,6 +33,10 @@ describe('FirstRunInitializer', () => { createInitMetadata: jest.fn(async () => undefined), }, metadataMigrationService: { + runCoreTableRenamesBeforeMetadataSync: jest.fn(async () => { + calls.push('core-migrate'); + }), + runTableRenamesBeforeMetadataSync: jest.fn(async () => undefined), runPhysicalMigrationsBeforeMetadataSync: jest.fn(async () => { calls.push('migrate'); }), @@ -49,9 +53,11 @@ describe('FirstRunInitializer', () => { runMigrations: jest.fn(), }, schemaHealingService: { - repairSystemPhysicalColumnsBeforeMetadataProvision: jest.fn(async () => { - calls.push('heal-preflight'); - }), + repairSystemPhysicalColumnsBeforeMetadataProvision: jest.fn( + async () => { + calls.push('heal-preflight'); + }, + ), repairSystemMetadataFromSnapshot: jest.fn(async () => { calls.push('metadata-heal'); }), @@ -70,7 +76,8 @@ describe('FirstRunInitializer', () => { await (initializer as any).runWithProgress(); - expect(calls.slice(0, 4)).toEqual([ + expect(calls.slice(0, 5)).toEqual([ + 'core-migrate', 'migrate', 'heal-preflight', 'metadata-migrate', diff --git a/test/domain/load-user-with-role.util.spec.ts b/test/domain/load-user-with-role.util.spec.ts index 6b096dd7..f3b4315b 100644 --- a/test/domain/load-user-with-role.util.spec.ts +++ b/test/domain/load-user-with-role.util.spec.ts @@ -1,11 +1,17 @@ import { ObjectId } from 'mongodb'; import { afterEach, describe, expect, it, vi } from 'vitest'; import { DatabaseConfigService } from '../../src/shared/services'; -import { loadUserWithRole } from '../../src/shared/utils/load-user-with-role.util'; +import { + clearLocalUserCacheForTesting, + loadCachedUserWithRole, + loadUserWithRole, + primeCachedUserSnapshot, +} from '../../src/shared/utils/load-user-with-role.util'; describe('loadUserWithRole', () => { afterEach(() => { DatabaseConfigService.resetForTesting(); + clearLocalUserCacheForTesting(); }); it('returns null for invalid Mongo user ids without querying', async () => { @@ -104,4 +110,42 @@ describe('loadUserWithRole', () => { }); expect(result?.role).toEqual(role); }); + + it('returns local cached users without querying the database', async () => { + DatabaseConfigService.overrideForTesting('postgres'); + const cachedUser = { id: '1', email: 'cached@example.com' }; + primeCachedUserSnapshot('1', cachedUser); + const queryBuilder = { + isMongoDb: () => false, + findOne: vi.fn(), + } as any; + + await expect( + loadCachedUserWithRole(queryBuilder, '1'), + ).resolves.toBe(cachedUser); + + expect(queryBuilder.findOne).not.toHaveBeenCalled(); + }); + + it('caches loaded users in the local process for one minute', async () => { + DatabaseConfigService.overrideForTesting('postgres'); + const user = { id: '1', email: 'root@example.com', roleId: 2 }; + const role = { id: 2, name: 'Admin' }; + const findOne = vi.fn(async ({ table }) => { + if (table === 'enfyra_user') return user; + if (table === 'enfyra_role') return role; + return null; + }); + const queryBuilder = { + isMongoDb: () => false, + findOne, + } as any; + + const result = await loadCachedUserWithRole(queryBuilder, '1'); + const cachedResult = await loadCachedUserWithRole(queryBuilder, '1'); + + expect(result?.role).toEqual(role); + expect(cachedResult).toBe(result); + expect(findOne).toHaveBeenCalledTimes(2); + }); }); diff --git a/test/domain/metadata-migration.real-db.spec.ts b/test/domain/metadata-migration.real-db.spec.ts new file mode 100644 index 00000000..b1085491 --- /dev/null +++ b/test/domain/metadata-migration.real-db.spec.ts @@ -0,0 +1,635 @@ +import knex, { type Knex } from 'knex'; +import { MongoClient, type Db } from 'mongodb'; +import { MetadataMigrationService } from '../../src/engines/bootstrap/services/metadata-migration.service'; +import { MetadataPhysicalMigrationHelper } from '../../src/engines/bootstrap/utils/metadata-physical-migration.util'; + +const SQL_DBS = [ + { + name: 'postgres', + client: 'pg', + connection: + process.env.PG_TEST_URI || + 'postgresql://root:1234@localhost:5432/postgres', + }, + { + name: 'mysql', + client: 'mysql2', + connection: + process.env.MYSQL_TEST_URI || 'mysql://root:1234@localhost:3306/enfyra', + }, +]; + +const MONGO_URI = + process.env.MONGO_TEST_URI || + 'mongodb://enfyra_admin:enfyra_password_123@localhost:27017/?authSource=admin'; + +async function probeSql(config: (typeof SQL_DBS)[number]): Promise { + const db = knex({ client: config.client, connection: config.connection }); + try { + await db.raw('select 1'); + return true; + } catch { + return false; + } finally { + await db.destroy(); + } +} + +async function probeMongo(): Promise { + const client = new MongoClient(MONGO_URI, { serverSelectionTimeoutMS: 2000 }); + try { + await client.connect(); + return true; + } catch { + return false; + } finally { + await client.close().catch(() => undefined); + } +} + +function makeService(queryBuilderService: any) { + return new MetadataMigrationService({ + queryBuilderService, + systemCoreTableResolver: { + getTableName: async (key: string) => `enfyra_${key}`, + } as any, + }); +} + +function normalizeSqlBooleans>(rows: T[]): T[] { + return rows.map((row) => ({ + ...row, + ...(Object.prototype.hasOwnProperty.call(row, 'isPublished') + ? { isPublished: Boolean(row.isPublished) } + : {}), + ...(Object.prototype.hasOwnProperty.call(row, 'isPublic') + ? { isPublic: Boolean(row.isPublic) } + : {}), + })); +} + +async function dropSqlTables(db: Knex, names: string[]) { + for (const name of names) { + await db.schema.dropTableIfExists(name); + } +} + +async function makeIsolatedSqlDb(config: (typeof SQL_DBS)[number]) { + const suffix = `${Date.now()}_${Math.random().toString(16).slice(2)}`.replace( + /[^a-zA-Z0-9_]/g, + '_', + ); + const admin = knex({ client: config.client, connection: config.connection }); + + if (config.client === 'pg') { + const schema = `metadata_migration_stress_${suffix}`.toLowerCase(); + await admin.raw('create schema ??', [schema]); + const db = knex({ + client: config.client, + connection: config.connection, + searchPath: [schema], + }); + return { + db, + cleanup: async () => { + await db.destroy(); + await admin.raw('drop schema if exists ?? cascade', [schema]); + await admin.destroy(); + }, + }; + } + + const database = `metadata_migration_stress_${suffix}`.toLowerCase(); + await admin.raw('create database ??', [database]); + const url = new URL(config.connection); + url.pathname = `/${database}`; + const db = knex({ client: config.client, connection: url.toString() }); + return { + db, + cleanup: async () => { + await db.destroy(); + await admin.raw('drop database if exists ??', [database]); + await admin.destroy(); + }, + }; +} + +async function createSqlCoreStore(db: Knex, name: string) { + await db.schema.createTable(name, (table) => { + table.increments('id').primary(); + table.string('name'); + }); +} + +async function createSqlColumnStore(db: Knex, name: string) { + await db.schema.createTable(name, (table) => { + table.increments('id').primary(); + table.integer('tableId'); + table.string('name'); + }); +} + +async function createSqlRelationStore(db: Knex, name: string) { + await db.schema.createTable(name, (table) => { + table.increments('id').primary(); + table.integer('sourceTableId'); + table.integer('targetTableId'); + table.string('propertyName'); + }); +} + +describe('MetadataMigrationService real DB self-healing stress', () => { + for (const config of SQL_DBS) { + test(`heals repeated core table overlap on ${config.name}`, async () => { + const available = await probeSql(config); + if (!available) { + console.warn(`${config.name} not available, skipping SQL stress test`); + return; + } + + const names = { + tableOld: 'table_definition', + tableNew: 'enfyra_table', + columnOld: 'column_definition', + columnNew: 'enfyra_column', + relationOld: 'relation_definition', + relationNew: 'enfyra_relation', + }; + const { db, cleanup } = await makeIsolatedSqlDb(config); + + try { + await dropSqlTables(db, Object.values(names)); + await createSqlCoreStore(db, names.tableOld); + await createSqlCoreStore(db, names.tableNew); + await createSqlColumnStore(db, names.columnOld); + await createSqlColumnStore(db, names.columnNew); + await createSqlRelationStore(db, names.relationOld); + await createSqlRelationStore(db, names.relationNew); + await db.schema.alterTable(names.tableOld, (table) => { + table.string('operatorTag'); + }); + await db.schema.alterTable(names.columnOld, (table) => { + table.string('operatorTag'); + }); + await db.schema.alterTable(names.relationOld, (table) => { + table.string('operatorTag'); + }); + + await db(names.tableOld).insert([ + { id: 10, name: 'table_definition', operatorTag: 'legacy-core' }, + { id: 11, name: 'post', operatorTag: 'custom-post' }, + { id: 12, name: 'comment', operatorTag: 'custom-comment' }, + ]); + await db(names.tableNew).insert([{ id: 10, name: 'enfyra_table' }]); + await db(names.columnOld).insert([ + { id: 20, tableId: 11, name: 'title', operatorTag: 'title-field' }, + { id: 21, tableId: 12, name: 'body', operatorTag: 'body-field' }, + ]); + await db(names.columnNew).insert([{ id: 20, tableId: 10, name: 'id' }]); + await db(names.relationOld).insert([ + { + id: 30, + sourceTableId: 11, + targetTableId: 12, + propertyName: 'comments', + operatorTag: 'comments-relation', + }, + ]); + await db(names.relationNew).insert([ + { + id: 30, + sourceTableId: 10, + targetTableId: 10, + propertyName: 'self', + }, + ]); + + const service = makeService({ + isMongoDb: () => false, + getKnex: () => db, + }); + const renames = [ + { from: names.tableOld, to: names.tableNew }, + { from: names.columnOld, to: names.columnNew }, + { from: names.relationOld, to: names.relationNew }, + ]; + + await (service as any).runSqlCoreTableRenames(renames); + await (service as any).runSqlCoreTableRenames(renames); + + const tables = await db(names.tableNew).select('*').orderBy('name'); + const post = tables.find((row) => row.name === 'post'); + const comment = tables.find((row) => row.name === 'comment'); + expect(tables.filter((row) => row.name === 'post')).toHaveLength(1); + expect(tables.filter((row) => row.name === 'comment')).toHaveLength(1); + expect(post.operatorTag).toBe('custom-post'); + expect(comment.operatorTag).toBe('custom-comment'); + expect(tables.some((row) => row.name === 'table_definition')).toBe( + false, + ); + + const columns = await db(names.columnNew).select('*'); + expect( + columns.filter( + (row) => + row.tableId === post.id && + row.name === 'title' && + row.operatorTag === 'title-field', + ), + ).toHaveLength(1); + expect( + columns.filter( + (row) => + row.tableId === comment.id && + row.name === 'body' && + row.operatorTag === 'body-field', + ), + ).toHaveLength(1); + + const relations = await db(names.relationNew).select('*'); + expect( + relations.filter( + (row) => + row.sourceTableId === post.id && + row.targetTableId === comment.id && + row.propertyName === 'comments' && + row.operatorTag === 'comments-relation', + ), + ).toHaveLength(1); + } finally { + await cleanup(); + } + }); + + test(`heals non-core table overlap with custom fields on ${config.name}`, async () => { + const available = await probeSql(config); + if (!available) { + console.warn(`${config.name} not available, skipping SQL stress test`); + return; + } + + const { db, cleanup } = await makeIsolatedSqlDb(config); + try { + await dropSqlTables(db, [ + 'user_definition', + 'enfyra_user', + 'enfyra_table', + ]); + await db.schema.createTable('user_definition', (table) => { + table.integer('id').primary(); + table.string('email'); + table.string('displayName'); + table.string('favoriteColor'); + }); + await db.schema.createTable('enfyra_user', (table) => { + table.integer('id').primary(); + table.string('email'); + table.string('displayName'); + }); + await createSqlCoreStore(db, 'enfyra_table'); + + await db('user_definition').insert([ + { + id: 1, + email: 'same@example.com', + displayName: 'Canonical', + favoriteColor: 'green', + }, + { + id: 2, + email: 'new@example.com', + displayName: 'New User', + favoriteColor: 'blue', + }, + ]); + await db('enfyra_user').insert({ + id: 1, + email: 'same@example.com', + displayName: 'Canonical', + }); + + const service = makeService({ + isMongoDb: () => false, + getKnex: () => db, + }); + const rename = { + from: 'user_definition', + to: 'enfyra_user', + mergeKeys: ['email'], + }; + await (service as any).renameSqlTable(rename); + await (service as any).renameSqlTable(rename); + + const users = await db('enfyra_user').select('*').orderBy('id'); + expect(users).toEqual([ + { + id: 1, + email: 'same@example.com', + displayName: 'Canonical', + favoriteColor: 'green', + }, + { + id: 2, + email: 'new@example.com', + displayName: 'New User', + favoriteColor: 'blue', + }, + ]); + } finally { + await cleanup(); + } + }); + + test(`preserves conflicting physical rename data on ${config.name}`, async () => { + const available = await probeSql(config); + if (!available) { + console.warn(`${config.name} not available, skipping SQL stress test`); + return; + } + + const { db, cleanup } = await makeIsolatedSqlDb(config); + try { + await dropSqlTables(db, ['enfyra_file']); + await db.schema.createTable('enfyra_file', (table) => { + table.integer('id').primary(); + table.boolean('isPublished'); + table.boolean('isPublic'); + }); + await db('enfyra_file').insert([ + { id: 1, isPublished: true, isPublic: false }, + { id: 2, isPublished: true, isPublic: null }, + ]); + + const helper = new MetadataPhysicalMigrationHelper({ + queryBuilderService: { + getKnex: () => db, + } as any, + verbose: () => undefined, + }); + await helper.renameSqlPhysicalColumnIfNeeded( + 'enfyra_file', + 'isPublished', + 'isPublic', + ); + + const rows = normalizeSqlBooleans( + await db('enfyra_file').select('*').orderBy('id'), + ); + expect(rows).toEqual([ + { id: 1, isPublished: true, isPublic: false }, + { id: 2, isPublished: true, isPublic: true }, + ]); + expect(await db.schema.hasColumn('enfyra_file', 'isPublished')).toBe( + true, + ); + } finally { + await cleanup(); + } + }); + } + + test('heals repeated core collection overlap on MongoDB', async () => { + const available = await probeMongo(); + if (!available) { + console.warn('MongoDB not available, skipping Mongo stress test'); + return; + } + + const suffix = `${Date.now()}_${Math.random().toString(16).slice(2)}`; + const dbName = `metadata_migration_stress_${suffix}`; + const names = { + tableOld: 'table_definition', + tableNew: 'enfyra_table', + columnOld: 'column_definition', + columnNew: 'enfyra_column', + relationOld: 'relation_definition', + relationNew: 'enfyra_relation', + }; + const client = new MongoClient(MONGO_URI); + let db: Db | undefined; + + try { + await client.connect(); + db = client.db(dbName); + await db.collection(names.tableOld).insertMany([ + { + _id: 'table-id', + name: 'table_definition', + operatorTag: 'legacy-core', + }, + { _id: 'post-id', name: 'post', operatorTag: 'custom-post' }, + { _id: 'comment-id', name: 'comment', operatorTag: 'custom-comment' }, + ]); + await db + .collection(names.tableNew) + .insertOne({ _id: 'table-id', name: 'enfyra_table' }); + await db.collection(names.columnOld).insertMany([ + { + _id: 'title-column', + table: 'post-id', + name: 'title', + operatorTag: 'title-field', + }, + { + _id: 'body-column', + table: 'comment-id', + name: 'body', + operatorTag: 'body-field', + }, + ]); + await db + .collection(names.columnNew) + .insertOne({ _id: 'title-column', table: 'table-id', name: 'id' }); + await db.collection(names.relationOld).insertOne({ + _id: 'comments-relation', + sourceTable: 'post-id', + targetTable: 'comment-id', + propertyName: 'comments', + operatorTag: 'comments-relation', + }); + await db.collection(names.relationNew).insertOne({ + _id: 'comments-relation', + sourceTable: 'table-id', + targetTable: 'table-id', + propertyName: 'self', + }); + + const service = makeService({ + isMongoDb: () => true, + getMongoDb: () => db, + }); + const renames = [ + { from: names.tableOld, to: names.tableNew }, + { from: names.columnOld, to: names.columnNew }, + { from: names.relationOld, to: names.relationNew }, + ]; + + await (service as any).runMongoCoreTableRenames(renames); + await (service as any).runMongoCoreTableRenames(renames); + + const tables = await db.collection(names.tableNew).find({}).toArray(); + const post = tables.find((row) => row.name === 'post'); + const comment = tables.find((row) => row.name === 'comment'); + expect(tables.filter((row) => row.name === 'post')).toHaveLength(1); + expect(tables.filter((row) => row.name === 'comment')).toHaveLength(1); + expect(post?.operatorTag).toBe('custom-post'); + expect(comment?.operatorTag).toBe('custom-comment'); + expect(tables.some((row) => row.name === 'table_definition')).toBe(false); + + const columns = await db.collection(names.columnNew).find({}).toArray(); + expect( + columns.filter( + (row) => + row.table === post?._id && + row.name === 'title' && + row.operatorTag === 'title-field', + ), + ).toHaveLength(1); + expect( + columns.filter( + (row) => + row.table === comment?._id && + row.name === 'body' && + row.operatorTag === 'body-field', + ), + ).toHaveLength(1); + + const relations = await db + .collection(names.relationNew) + .find({}) + .toArray(); + expect( + relations.filter( + (row) => + row.sourceTable === post?._id && + row.targetTable === comment?._id && + row.propertyName === 'comments' && + row.operatorTag === 'comments-relation', + ), + ).toHaveLength(1); + } finally { + if (db) await db.dropDatabase(); + await client.close(); + } + }); + + test('heals non-core collection overlap with custom fields on MongoDB', async () => { + const available = await probeMongo(); + if (!available) { + console.warn('MongoDB not available, skipping Mongo stress test'); + return; + } + + const suffix = `${Date.now()}_${Math.random().toString(16).slice(2)}`; + const dbName = `metadata_migration_stress_${suffix}`; + const client = new MongoClient(MONGO_URI); + let db: Db | undefined; + + try { + await client.connect(); + db = client.db(dbName); + await db.collection('user_definition').insertMany([ + { + _id: 'user-1', + email: 'same@example.com', + displayName: 'Canonical', + favoriteColor: 'green', + }, + { + _id: 'user-2', + email: 'new@example.com', + displayName: 'New User', + favoriteColor: 'blue', + }, + ]); + await db.collection('enfyra_user').insertOne({ + _id: 'user-1', + email: 'same@example.com', + displayName: 'Canonical', + }); + + const service = makeService({ + isMongoDb: () => true, + getMongoDb: () => db, + }); + const rename = { + from: 'user_definition', + to: 'enfyra_user', + mergeKeys: ['email'], + }; + await (service as any).renameMongoTable(rename); + await (service as any).renameMongoTable(rename); + + const users = await db + .collection('enfyra_user') + .find({}) + .sort({ _id: 1 }) + .toArray(); + expect(users).toEqual([ + { + _id: 'user-1', + email: 'same@example.com', + displayName: 'Canonical', + favoriteColor: 'green', + }, + { + _id: 'user-2', + email: 'new@example.com', + displayName: 'New User', + favoriteColor: 'blue', + }, + ]); + } finally { + if (db) await db.dropDatabase(); + await client.close(); + } + }); + + test('preserves conflicting physical rename data on MongoDB', async () => { + const available = await probeMongo(); + if (!available) { + console.warn('MongoDB not available, skipping Mongo stress test'); + return; + } + + const suffix = `${Date.now()}_${Math.random().toString(16).slice(2)}`; + const dbName = `metadata_migration_stress_${suffix}`; + const client = new MongoClient(MONGO_URI); + let db: Db | undefined; + + try { + await client.connect(); + db = client.db(dbName); + await db.collection('enfyra_file').insertMany([ + { _id: 'file-1', isPublished: true, isPublic: false }, + { _id: 'file-2', isPublished: true }, + ]); + + const helper = new MetadataPhysicalMigrationHelper({ + queryBuilderService: { + isMongoDb: () => true, + getMongoDb: () => db, + } as any, + verbose: () => undefined, + }); + await helper.renameMongoDocumentFieldIfNeeded( + 'enfyra_file', + 'isPublished', + 'isPublic', + ); + + const rows = await db + .collection('enfyra_file') + .find({}) + .sort({ _id: 1 }) + .toArray(); + expect(rows).toEqual([ + { _id: 'file-1', isPublished: true, isPublic: false }, + { _id: 'file-2', isPublished: true, isPublic: true }, + ]); + } finally { + if (db) await db.dropDatabase(); + await client.close(); + } + }); +}); diff --git a/test/domain/metadata-migration.service.spec.ts b/test/domain/metadata-migration.service.spec.ts new file mode 100644 index 00000000..2d563d94 --- /dev/null +++ b/test/domain/metadata-migration.service.spec.ts @@ -0,0 +1,880 @@ +import { MetadataMigrationService } from '../../src/engines/bootstrap/services/metadata-migration.service'; + +function makeSqlKnex({ + tables, + schemas = {}, +}: { + tables: Record; + schemas?: Record; +}) { + const inserts: Array<{ table: string; rows: any[] }> = []; + const updates: Array<{ table: string; where: any; data: any }> = []; + const deletes: Array<{ table: string; where: any }> = []; + + const matchRow = (row: any, condition: any) => + Object.entries(condition).every(([key, value]) => row[key] === value); + + const knex = jest.fn((table: string) => ({ + select: jest.fn(async () => tables[table] ?? []), + columnInfo: jest.fn(async () => { + const rows = tables[table] ?? []; + const columns = new Set(schemas[table] ?? []); + rows.forEach((row) => + Object.keys(row).forEach((column) => columns.add(column)), + ); + return Object.fromEntries( + [...columns].map((column) => [column, { type: 'varchar' }]), + ); + }), + insert: jest.fn(async (input: any[] | any) => { + const rows = Array.isArray(input) ? input : [input]; + const normalizedRows = rows.map((row) => { + if (row.id !== undefined && row.id !== null) return row; + const maxId = Math.max(0, ...(tables[table] ?? []).map((r) => r.id)); + return { ...row, id: maxId + 1 }; + }); + inserts.push({ table, rows: normalizedRows }); + tables[table] = [...(tables[table] ?? []), ...normalizedRows]; + return normalizedRows.length; + }), + where: jest.fn((condition: any) => ({ + update: jest.fn(async (data: any) => { + updates.push({ table, where: condition, data }); + tables[table] = (tables[table] ?? []).map((row) => + matchRow(row, condition) ? { ...row, ...data } : row, + ); + return 1; + }), + andWhere: jest.fn((extraCondition: any) => ({ + update: jest.fn(async (data: any) => { + updates.push({ + table, + where: { ...condition, ...extraCondition }, + data, + }); + return 1; + }), + })), + whereNot: jest.fn((negativeCondition: any) => ({ + delete: jest.fn(async () => { + deletes.push({ + table, + where: { ...condition, not: negativeCondition }, + }); + tables[table] = (tables[table] ?? []).filter( + (row) => + !matchRow(row, condition) || matchRow(row, negativeCondition), + ); + return 1; + }), + })), + first: jest.fn( + async () => + (tables[table] ?? []).find((row) => matchRow(row, condition)) ?? null, + ), + })), + })) as any; + + knex.schema = { + hasTable: jest.fn(async (table: string) => table in tables), + hasColumn: jest.fn(async (table: string, column: string) => + (schemas[table] ?? Object.keys(tables[table]?.[0] ?? {})).includes( + column, + ), + ), + alterTable: jest.fn(async (tableName: string, callback: any) => { + const builder = { + specificType: jest.fn((column: string) => { + schemas[tableName] = [...(schemas[tableName] ?? []), column]; + }), + text: jest.fn((column: string) => { + schemas[tableName] = [...(schemas[tableName] ?? []), column]; + }), + dropColumn: jest.fn((column: string) => { + schemas[tableName] = (schemas[tableName] ?? []).filter( + (name) => name !== column, + ); + tables[tableName] = (tables[tableName] ?? []).map((row) => { + const next = { ...row }; + delete next[column]; + return next; + }); + }), + }; + callback(builder); + }), + }; + + return { knex, inserts, updates, deletes, tables }; +} + +function makeMongoDb({ collections }: { collections: Record }) { + const inserts: Array<{ collection: string; rows: any[] }> = []; + const updates: Array<{ collection: string; filter: any; data: any }> = []; + + const matchRow = (row: any, condition: any) => + Object.entries(condition).every(([key, value]) => row[key] === value); + + const db = { + collection: jest.fn((name: string) => ({ + find: jest.fn((filter = {}) => ({ + toArray: jest.fn(async () => + (collections[name] ?? []).filter((row) => matchRow(row, filter)), + ), + })), + findOne: jest.fn( + async (filter = {}) => + (collections[name] ?? []).find((row) => matchRow(row, filter)) ?? + null, + ), + insertMany: jest.fn(async (rows: any[]) => { + const normalizedRows = rows.map((row, index) => + row._id !== undefined && row._id !== null + ? row + : { ...row, _id: `${name}-generated-${index + 1}` }, + ); + inserts.push({ collection: name, rows: normalizedRows }); + collections[name] = [...(collections[name] ?? []), ...normalizedRows]; + return { insertedCount: normalizedRows.length }; + }), + updateOne: jest.fn(async (filter: any, data: any) => { + updates.push({ collection: name, filter, data }); + collections[name] = (collections[name] ?? []).map((row) => + matchRow(row, filter) ? { ...row, ...(data.$set ?? data) } : row, + ); + return { modifiedCount: 1 }; + }), + updateMany: jest.fn(async (filter: any, data: any) => { + updates.push({ collection: name, filter, data }); + collections[name] = (collections[name] ?? []).map((row) => + matchRow(row, filter) ? { ...row, ...(data.$set ?? data) } : row, + ); + return { modifiedCount: 1 }; + }), + rename: jest.fn(async (target: string) => { + collections[target] = collections[name] ?? []; + delete collections[name]; + }), + })), + listCollections: jest.fn(({ name }: { name: string }) => ({ + toArray: jest.fn(async () => (name in collections ? [{ name }] : [])), + })), + } as any; + + return { db, collections, inserts, updates }; +} + +describe('MetadataMigrationService core table overlap', () => { + it('does not keep legacy core table names when canonical SQL metadata already exists', async () => { + const sql = makeSqlKnex({ + tables: { + table_definition: [ + { id: 1, name: 'table_definition' }, + { id: 4, name: 'route_definition' }, + ], + enfyra_table: [ + { id: 2, name: 'enfyra_table' }, + { id: 3, name: 'route_definition' }, + ], + route_definition: [ + { id: 10, path: '/table_definition', mainTableId: 1 }, + ], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => false), + getKnex: jest.fn(() => sql.knex), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).runSqlCoreTableRenames([ + { from: 'table_definition', to: 'enfyra_table' }, + ]); + + expect(sql.inserts).toEqual([]); + expect(sql.tables.enfyra_table).toEqual( + expect.arrayContaining([ + { id: 2, name: 'enfyra_table' }, + { id: 3, name: 'route_definition' }, + ]), + ); + expect(sql.deletes).toEqual([]); + }); + + it('copies missing non-core legacy rows into canonical SQL metadata without keeping legacy core names', async () => { + const sql = makeSqlKnex({ + tables: { + table_definition: [ + { id: 1, name: 'table_definition' }, + { id: 20, name: 'custom_post' }, + ], + enfyra_table: [{ id: 2, name: 'enfyra_table' }], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => false), + getKnex: jest.fn(() => sql.knex), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).runSqlCoreTableRenames([ + { from: 'table_definition', to: 'enfyra_table' }, + ]); + + expect(sql.inserts).toContainEqual({ + table: 'enfyra_table', + rows: [{ id: 20, name: 'custom_post' }], + }); + expect(sql.tables.enfyra_table).not.toEqual( + expect.arrayContaining([{ id: 1, name: 'table_definition' }]), + ); + }); + + it('remaps SQL child metadata when a legacy table id conflicts with an existing canonical row', async () => { + const sql = makeSqlKnex({ + tables: { + table_definition: [ + { id: 1, name: 'table_definition' }, + { id: 20, name: 'custom_post' }, + ], + enfyra_table: [{ id: 20, name: 'enfyra_table' }], + column_definition: [{ id: 100, tableId: 20, name: 'title' }], + enfyra_column: [{ id: 999, tableId: 20, name: 'id' }], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => false), + getKnex: jest.fn(() => sql.knex), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).runSqlCoreTableRenames([ + { from: 'table_definition', to: 'enfyra_table' }, + { from: 'column_definition', to: 'enfyra_column' }, + ]); + + const insertedTable = sql.tables.enfyra_table.find( + (row) => row.name === 'custom_post', + ); + expect(insertedTable).toMatchObject({ name: 'custom_post' }); + expect(insertedTable.id).not.toBe(20); + expect(sql.inserts).toContainEqual({ + table: 'enfyra_column', + rows: [{ id: 100, tableId: insertedTable.id, name: 'title' }], + }); + }); + + it('remaps SQL relation metadata through conflicting legacy source and target table ids', async () => { + const sql = makeSqlKnex({ + tables: { + table_definition: [ + { id: 30, name: 'author' }, + { id: 31, name: 'post' }, + ], + enfyra_table: [ + { id: 30, name: 'enfyra_table' }, + { id: 31, name: 'enfyra_column' }, + ], + relation_definition: [ + { + id: 200, + sourceTableId: 31, + targetTableId: 30, + propertyName: 'author', + }, + ], + enfyra_relation: [ + { + id: 999, + sourceTableId: 900, + targetTableId: 901, + propertyName: 'existing', + }, + ], + }, + schemas: { + relation_definition: [ + 'id', + 'sourceTableId', + 'targetTableId', + 'propertyName', + ], + enfyra_relation: [ + 'id', + 'sourceTableId', + 'targetTableId', + 'propertyName', + ], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => false), + getKnex: jest.fn(() => sql.knex), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).runSqlCoreTableRenames([ + { from: 'table_definition', to: 'enfyra_table' }, + { from: 'relation_definition', to: 'enfyra_relation' }, + ]); + + const author = sql.tables.enfyra_table.find((row) => row.name === 'author'); + const post = sql.tables.enfyra_table.find((row) => row.name === 'post'); + expect(author.id).not.toBe(30); + expect(post.id).not.toBe(31); + expect(sql.inserts).toContainEqual({ + table: 'enfyra_relation', + rows: [ + { + id: 200, + sourceTableId: post.id, + targetTableId: author.id, + propertyName: 'author', + }, + ], + }); + }); + + it('keeps SQL core overlap healing idempotent across repeated runs', async () => { + const tables = { + table_definition: [ + { id: 40, name: 'table_definition' }, + { id: 41, name: 'post' }, + { id: 42, name: 'comment' }, + ], + enfyra_table: [{ id: 40, name: 'enfyra_table' }], + column_definition: [ + { id: 300, tableId: 41, name: 'title' }, + { id: 301, tableId: 42, name: 'body' }, + ], + enfyra_column: [{ id: 302, tableId: 40, name: 'id' }], + relation_definition: [ + { + id: 400, + sourceTableId: 41, + targetTableId: 42, + propertyName: 'comments', + }, + ], + enfyra_relation: [ + { + id: 401, + sourceTableId: 40, + targetTableId: 40, + propertyName: 'self', + }, + ], + }; + const sql = makeSqlKnex({ + tables, + schemas: { + table_definition: ['id', 'name'], + enfyra_table: ['id', 'name'], + column_definition: ['id', 'tableId', 'name'], + enfyra_column: ['id', 'tableId', 'name'], + relation_definition: [ + 'id', + 'sourceTableId', + 'targetTableId', + 'propertyName', + ], + enfyra_relation: [ + 'id', + 'sourceTableId', + 'targetTableId', + 'propertyName', + ], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => false), + getKnex: jest.fn(() => sql.knex), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + const renames = [ + { from: 'table_definition', to: 'enfyra_table' }, + { from: 'column_definition', to: 'enfyra_column' }, + { from: 'relation_definition', to: 'enfyra_relation' }, + ]; + + await (service as any).runSqlCoreTableRenames(renames); + const afterFirstRun = { + tables: [...sql.tables.enfyra_table], + columns: [...sql.tables.enfyra_column], + relations: [...sql.tables.enfyra_relation], + insertCount: sql.inserts.length, + }; + + await (service as any).runSqlCoreTableRenames(renames); + + expect(sql.tables.enfyra_table).toEqual(afterFirstRun.tables); + expect(sql.tables.enfyra_column).toEqual(afterFirstRun.columns); + expect(sql.tables.enfyra_relation).toEqual(afterFirstRun.relations); + expect(sql.inserts).toHaveLength(afterFirstRun.insertCount); + expect( + sql.tables.enfyra_table.filter((row) => row.name === 'post'), + ).toHaveLength(1); + expect( + sql.tables.enfyra_relation.filter( + (row) => row.propertyName === 'comments', + ), + ).toHaveLength(1); + }); + + it('does not duplicate SQL relation metadata when remapped logical relation already exists', async () => { + const sql = makeSqlKnex({ + tables: { + table_definition: [{ id: 10, name: 'post' }], + enfyra_table: [{ id: 99, name: 'post' }], + relation_definition: [ + { id: 100, sourceTableId: 10, propertyName: 'comments' }, + ], + enfyra_relation: [ + { id: 101, sourceTableId: 99, propertyName: 'comments' }, + ], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => false), + getKnex: jest.fn(() => sql.knex), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).runSqlCoreTableRenames([ + { from: 'table_definition', to: 'enfyra_table' }, + { from: 'relation_definition', to: 'enfyra_relation' }, + ]); + + expect(sql.inserts).toEqual([]); + expect(sql.tables.enfyra_relation).toEqual([ + { id: 101, sourceTableId: 99, propertyName: 'comments' }, + ]); + }); + + it('does not duplicate canonical SQL core rows when logical names already match', async () => { + const sql = makeSqlKnex({ + tables: { + table_definition: [{ id: 1, name: 'enfyra_table' }], + enfyra_table: [{ id: 2, name: 'enfyra_table' }], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => false), + getKnex: jest.fn(() => sql.knex), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).runSqlCoreTableRenames([ + { from: 'table_definition', to: 'enfyra_table' }, + ]); + + expect(sql.inserts).toEqual([]); + expect(sql.tables.enfyra_table).toEqual([{ id: 2, name: 'enfyra_table' }]); + expect(sql.deletes).toEqual([]); + }); + + it('copies SQL non-core overlap rows and preserves custom columns added by users', async () => { + const sql = makeSqlKnex({ + tables: { + user_definition: [ + { + id: 1, + email: 'old@example.com', + displayName: 'Old User', + favoriteColor: 'green', + }, + ], + enfyra_user: [], + enfyra_table: [], + }, + schemas: { + user_definition: ['id', 'email', 'displayName', 'favoriteColor'], + enfyra_user: ['id', 'email', 'displayName'], + enfyra_table: ['id', 'name'], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => false), + getKnex: jest.fn(() => sql.knex), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).renameSqlTable({ + from: 'user_definition', + to: 'enfyra_user', + mergeKeys: ['email'], + }); + + expect(sql.tables.enfyra_user).toEqual([ + { + id: 1, + email: 'old@example.com', + displayName: 'Old User', + favoriteColor: 'green', + }, + ]); + }); + + it('keeps canonical SQL non-core overlap rows when legacy data conflicts', async () => { + const sql = makeSqlKnex({ + tables: { + user_definition: [ + { id: 1, email: 'same@example.com', displayName: 'Legacy' }, + ], + enfyra_user: [ + { id: 1, email: 'same@example.com', displayName: 'Canonical' }, + ], + enfyra_table: [], + }, + schemas: { + user_definition: ['id', 'email', 'displayName'], + enfyra_user: ['id', 'email', 'displayName'], + enfyra_table: ['id', 'name'], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => false), + getKnex: jest.fn(() => sql.knex), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).renameSqlTable({ + from: 'user_definition', + to: 'enfyra_user', + mergeKeys: ['email'], + }); + + expect(sql.tables.enfyra_user).toEqual([ + { id: 1, email: 'same@example.com', displayName: 'Canonical' }, + ]); + expect(sql.inserts).toEqual([]); + }); + + it('backfills missing custom values into existing SQL non-core canonical rows', async () => { + const sql = makeSqlKnex({ + tables: { + user_definition: [ + { + id: 1, + email: 'same@example.com', + displayName: 'Canonical', + favoriteColor: 'green', + }, + ], + enfyra_user: [ + { id: 1, email: 'same@example.com', displayName: 'Canonical' }, + ], + enfyra_table: [], + }, + schemas: { + user_definition: ['id', 'email', 'displayName', 'favoriteColor'], + enfyra_user: ['id', 'email', 'displayName'], + enfyra_table: ['id', 'name'], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => false), + getKnex: jest.fn(() => sql.knex), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).renameSqlTable({ + from: 'user_definition', + to: 'enfyra_user', + mergeKeys: ['email'], + }); + + expect(sql.tables.enfyra_user).toEqual([ + { + id: 1, + email: 'same@example.com', + displayName: 'Canonical', + favoriteColor: 'green', + }, + ]); + expect(sql.inserts).toEqual([]); + }); + + it('normalizes legacy core table names when reconciling Mongo core overlap', async () => { + const mongo = makeMongoDb({ + collections: { + table_definition: [ + { _id: 'legacy-table', name: 'table_definition' }, + { _id: 'custom-post', name: 'custom_post' }, + ], + enfyra_table: [{ _id: 'canonical-table', name: 'enfyra_table' }], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => true), + getMongoDb: jest.fn(() => mongo.db), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).runMongoCoreTableRenames([ + { from: 'table_definition', to: 'enfyra_table' }, + ]); + + expect(mongo.inserts).toContainEqual({ + collection: 'enfyra_table', + rows: [{ _id: 'custom-post', name: 'custom_post' }], + }); + expect(mongo.collections.enfyra_table).not.toEqual( + expect.arrayContaining([ + { _id: 'legacy-table', name: 'table_definition' }, + ]), + ); + }); + + it('remaps Mongo child metadata when a legacy table id conflicts with an existing canonical document', async () => { + const mongo = makeMongoDb({ + collections: { + table_definition: [ + { _id: 'legacy-core', name: 'table_definition' }, + { _id: 'conflicting-id', name: 'custom_post' }, + ], + enfyra_table: [{ _id: 'conflicting-id', name: 'enfyra_table' }], + column_definition: [ + { _id: 'legacy-column', table: 'conflicting-id', name: 'title' }, + ], + enfyra_column: [], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => true), + getMongoDb: jest.fn(() => mongo.db), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).runMongoCoreTableRenames([ + { from: 'table_definition', to: 'enfyra_table' }, + { from: 'column_definition', to: 'enfyra_column' }, + ]); + + const insertedTable = mongo.collections.enfyra_table.find( + (row) => row.name === 'custom_post', + ); + expect(insertedTable).toMatchObject({ name: 'custom_post' }); + expect(insertedTable._id).not.toBe('conflicting-id'); + expect(mongo.inserts).toContainEqual({ + collection: 'enfyra_column', + rows: [{ _id: 'legacy-column', table: insertedTable._id, name: 'title' }], + }); + }); + + it('backfills missing custom values into existing Mongo non-core canonical documents', async () => { + const mongo = makeMongoDb({ + collections: { + user_definition: [ + { + _id: 'user-1', + email: 'same@example.com', + displayName: 'Canonical', + favoriteColor: 'green', + }, + ], + enfyra_user: [ + { + _id: 'user-1', + email: 'same@example.com', + displayName: 'Canonical', + }, + ], + enfyra_table: [], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => true), + getMongoDb: jest.fn(() => mongo.db), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).renameMongoTable({ + from: 'user_definition', + to: 'enfyra_user', + mergeKeys: ['email'], + }); + + expect(mongo.collections.enfyra_user).toEqual([ + { + _id: 'user-1', + email: 'same@example.com', + displayName: 'Canonical', + favoriteColor: 'green', + }, + ]); + expect(mongo.inserts).toEqual([]); + }); + + it('remaps Mongo relation metadata through conflicting legacy source and target table ids', async () => { + const mongo = makeMongoDb({ + collections: { + table_definition: [ + { _id: 'author-id', name: 'author' }, + { _id: 'post-id', name: 'post' }, + ], + enfyra_table: [ + { _id: 'author-id', name: 'enfyra_table' }, + { _id: 'post-id', name: 'enfyra_column' }, + ], + relation_definition: [ + { + _id: 'legacy-relation', + sourceTable: 'post-id', + targetTable: 'author-id', + propertyName: 'author', + }, + ], + enfyra_relation: [], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => true), + getMongoDb: jest.fn(() => mongo.db), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).runMongoCoreTableRenames([ + { from: 'table_definition', to: 'enfyra_table' }, + { from: 'relation_definition', to: 'enfyra_relation' }, + ]); + + const author = mongo.collections.enfyra_table.find( + (row) => row.name === 'author', + ); + const post = mongo.collections.enfyra_table.find( + (row) => row.name === 'post', + ); + expect(author._id).not.toBe('author-id'); + expect(post._id).not.toBe('post-id'); + expect(mongo.inserts).toContainEqual({ + collection: 'enfyra_relation', + rows: [ + { + _id: 'legacy-relation', + sourceTable: post._id, + targetTable: author._id, + propertyName: 'author', + }, + ], + }); + }); + + it('does not duplicate Mongo relation metadata when remapped logical relation already exists', async () => { + const mongo = makeMongoDb({ + collections: { + table_definition: [{ _id: 'legacy-post', name: 'post' }], + enfyra_table: [{ _id: 'canonical-post', name: 'post' }], + relation_definition: [ + { + _id: 'legacy-relation', + sourceTable: 'legacy-post', + propertyName: 'comments', + }, + ], + enfyra_relation: [ + { + _id: 'canonical-relation', + sourceTable: 'canonical-post', + propertyName: 'comments', + }, + ], + }, + }); + + const service = new MetadataMigrationService({ + queryBuilderService: { + isMongoDb: jest.fn(() => true), + getMongoDb: jest.fn(() => mongo.db), + } as any, + systemCoreTableResolver: { + getTableName: jest.fn(async () => 'enfyra_table'), + } as any, + }); + + await (service as any).runMongoCoreTableRenames([ + { from: 'table_definition', to: 'enfyra_table' }, + { from: 'relation_definition', to: 'enfyra_relation' }, + ]); + + expect(mongo.inserts).toEqual([]); + expect(mongo.collections.enfyra_relation).toEqual([ + { + _id: 'canonical-relation', + sourceTable: 'canonical-post', + propertyName: 'comments', + }, + ]); + }); +}); diff --git a/test/domain/metadata-physical-migration.util.spec.ts b/test/domain/metadata-physical-migration.util.spec.ts new file mode 100644 index 00000000..3f19937a --- /dev/null +++ b/test/domain/metadata-physical-migration.util.spec.ts @@ -0,0 +1,187 @@ +import { MetadataPhysicalMigrationHelper } from '../../src/engines/bootstrap/utils/metadata-physical-migration.util'; + +function makePhysicalSql(rows: any[]) { + const tables = { enfyra_file: rows }; + const schemas = { enfyra_file: ['id', 'isPublished', 'isPublic'] }; + const knex = { + schema: { + hasTable: jest.fn(async (table: string) => table in tables), + hasColumn: jest.fn( + async (table: string, column: string) => + (schemas as any)[table]?.includes(column) ?? false, + ), + alterTable: jest.fn(async (table: string, callback: any) => { + const builder = { + dropColumn: jest.fn((column: string) => { + (schemas as any)[table] = (schemas as any)[table].filter( + (name: string) => name !== column, + ); + (tables as any)[table] = (tables as any)[table].map((row: any) => { + const next = { ...row }; + delete next[column]; + return next; + }); + }), + renameColumn: jest.fn((oldName: string, newName: string) => { + (schemas as any)[table] = (schemas as any)[table].map( + (name: string) => (name === oldName ? newName : name), + ); + (tables as any)[table] = (tables as any)[table].map((row: any) => { + const next = { ...row, [newName]: row[oldName] }; + delete next[oldName]; + return next; + }); + }), + }; + callback(builder); + }), + }, + raw: jest.fn(async (sql: string, params: string[]) => { + if (sql.startsWith('UPDATE')) { + const [table, newName, oldName] = params; + (tables as any)[table] = (tables as any)[table].map((row: any) => + row[newName] === null || row[newName] === undefined + ? { ...row, [newName]: row[oldName] } + : row, + ); + return; + } + const [table, oldName, newName] = params; + const count = (tables as any)[table].filter( + (row: any) => + row[oldName] !== null && + row[oldName] !== undefined && + row[newName] !== null && + row[newName] !== undefined && + row[oldName] !== row[newName], + ).length; + return [{ count }]; + }), + }; + return { knex, tables, schemas }; +} + +function makePhysicalMongo(documents: any[]) { + const collections = { enfyra_file: documents }; + const db = { + collection: jest.fn((name: string) => ({ + updateMany: jest.fn(async (filter: any, update: any) => { + (collections as any)[name] = (collections as any)[name].map( + (doc: any) => { + const hasOld = doc.isPublished !== undefined; + const hasNew = doc.isPublic !== undefined; + if (filter.isPublished?.$exists && !hasOld) return doc; + if (filter.isPublic?.$exists === false && hasNew) return doc; + if (Array.isArray(update)) { + return { ...doc, isPublic: doc.isPublished }; + } + if (update.$unset?.isPublished !== undefined) { + const next = { ...doc }; + delete next.isPublished; + return next; + } + return doc; + }, + ); + }), + countDocuments: jest.fn( + async () => + (collections as any)[name].filter( + (doc: any) => + doc.isPublished !== undefined && + doc.isPublic !== undefined && + doc.isPublished !== doc.isPublic, + ).length, + ), + })), + }; + return { db, collections }; +} + +describe('MetadataPhysicalMigrationHelper conflict-safe field rename', () => { + it('preserves SQL legacy column when old and new values conflict', async () => { + const sql = makePhysicalSql([ + { id: 1, isPublished: true, isPublic: false }, + ]); + const helper = new MetadataPhysicalMigrationHelper({ + queryBuilderService: { + getKnex: jest.fn(() => sql.knex), + } as any, + verbose: jest.fn(), + }); + + await helper.renameSqlPhysicalColumnIfNeeded( + 'enfyra_file', + 'isPublished', + 'isPublic', + ); + + expect(sql.tables.enfyra_file).toEqual([ + { id: 1, isPublished: true, isPublic: false }, + ]); + expect(sql.schemas.enfyra_file).toContain('isPublished'); + }); + + it('drops SQL legacy column when target values are safely backfilled', async () => { + const sql = makePhysicalSql([{ id: 1, isPublished: true, isPublic: null }]); + const helper = new MetadataPhysicalMigrationHelper({ + queryBuilderService: { + getKnex: jest.fn(() => sql.knex), + } as any, + verbose: jest.fn(), + }); + + await helper.renameSqlPhysicalColumnIfNeeded( + 'enfyra_file', + 'isPublished', + 'isPublic', + ); + + expect(sql.tables.enfyra_file).toEqual([{ id: 1, isPublic: true }]); + expect(sql.schemas.enfyra_file).not.toContain('isPublished'); + }); + + it('preserves Mongo legacy field when old and new values conflict', async () => { + const mongo = makePhysicalMongo([ + { _id: '1', isPublished: true, isPublic: false }, + ]); + const helper = new MetadataPhysicalMigrationHelper({ + queryBuilderService: { + isMongoDb: jest.fn(() => true), + getMongoDb: jest.fn(() => mongo.db), + } as any, + verbose: jest.fn(), + }); + + await helper.renameMongoDocumentFieldIfNeeded( + 'enfyra_file', + 'isPublished', + 'isPublic', + ); + + expect(mongo.collections.enfyra_file).toEqual([ + { _id: '1', isPublished: true, isPublic: false }, + ]); + }); + + it('unsets Mongo legacy field when target values are safely backfilled', async () => { + const mongo = makePhysicalMongo([{ _id: '1', isPublished: true }]); + const helper = new MetadataPhysicalMigrationHelper({ + queryBuilderService: { + isMongoDb: jest.fn(() => true), + getMongoDb: jest.fn(() => mongo.db), + } as any, + verbose: jest.fn(), + }); + + await helper.renameMongoDocumentFieldIfNeeded( + 'enfyra_file', + 'isPublished', + 'isPublic', + ); + + expect(mongo.collections.enfyra_file).toEqual([ + { _id: '1', isPublic: true }, + ]); + }); +}); diff --git a/test/domain/route-definition-processor.spec.ts b/test/domain/route-definition-processor.spec.ts index 1bd47bc9..d0c22b5e 100644 --- a/test/domain/route-definition-processor.spec.ts +++ b/test/domain/route-definition-processor.spec.ts @@ -1,6 +1,15 @@ import { RouteDefinitionProcessor } from '../../src/domain/bootstrap'; +import { getSqlJunctionPhysicalNames } from '../../src/modules/table-management/utils/sql-junction-naming.util'; import { DatabaseConfigService } from '../../src/shared/services'; +function routeMethodJunction(propertyName: string) { + return getSqlJunctionPhysicalNames({ + sourceTable: 'enfyra_route', + propertyName, + targetTable: 'enfyra_method', + }).junctionTableName; +} + function makeKnex(methodRows: any[] = []) { const deletes: any[] = []; const inserts: any[] = []; @@ -52,6 +61,10 @@ function makeKnex(methodRows: any[] = []) { rawCalls.push({ sql, bindings }); return { rows: [] }; }); + (knex as any).schema = { + hasTable: jest.fn(async () => true), + hasColumn: jest.fn(async () => true), + }; return { knex, deletes, inserts, rawCalls }; } @@ -77,7 +90,9 @@ describe('RouteDefinitionProcessor SQL relation writes', () => { getKnex: jest.fn(() => knex.knex), } as any; - const processor = new RouteDefinitionProcessor({ queryBuilderService: queryBuilder }); + const processor = new RouteDefinitionProcessor({ + queryBuilderService: queryBuilder, + }); await processor.processWithQueryBuilder( [ @@ -101,15 +116,29 @@ describe('RouteDefinitionProcessor SQL relation writes', () => { ); expect(knex.rawCalls).toContainEqual({ sql: 'delete from ?? where ?? = ?', - bindings: ['j_availableMethods', 'sourceId', 42], + bindings: [routeMethodJunction('availableMethods'), 'sourceId', 42], }); expect(knex.rawCalls).toContainEqual({ sql: 'insert into ?? (??, ??) values (?, ?), (?, ?)', - bindings: ['j_availableMethods', 'sourceId', 'targetId', 42, 1, 42, 2], + bindings: [ + routeMethodJunction('availableMethods'), + 'sourceId', + 'targetId', + 42, + 1, + 42, + 2, + ], }); expect(knex.rawCalls).toContainEqual({ sql: 'insert into ?? (??, ??) values (?, ?)', - bindings: ['j_skipRoleGuardMethods', 'sourceId', 'targetId', 42, 1], + bindings: [ + routeMethodJunction('skipRoleGuardMethods'), + 'sourceId', + 'targetId', + 42, + 1, + ], }); }); @@ -123,7 +152,9 @@ describe('RouteDefinitionProcessor SQL relation writes', () => { getKnex: jest.fn(() => knex.knex), } as any; - const processor = new RouteDefinitionProcessor({ queryBuilderService: queryBuilder }); + const processor = new RouteDefinitionProcessor({ + queryBuilderService: queryBuilder, + }); await processor.processWithQueryBuilder( [{ path: '/assets/:id', availableMethods: ['GET'] }], @@ -133,7 +164,13 @@ describe('RouteDefinitionProcessor SQL relation writes', () => { expect(knex.rawCalls).toContainEqual({ sql: 'insert into ?? (??, ??) values (?, ?)', - bindings: ['j_availableMethods', 'sourceId', 'targetId', 99, 1], + bindings: [ + routeMethodJunction('availableMethods'), + 'sourceId', + 'targetId', + 99, + 1, + ], }); }); }); diff --git a/test/domain/schema-healing.mongo.integration.spec.ts b/test/domain/schema-healing.mongo.integration.spec.ts index ae0446e4..578df4f5 100644 --- a/test/domain/schema-healing.mongo.integration.spec.ts +++ b/test/domain/schema-healing.mongo.integration.spec.ts @@ -11,7 +11,9 @@ const DB_NAME = `test_schema_healing_mongo_${Date.now()}`; async function probeMongo(): Promise { try { - const client = new MongoClient(MONGO_URI, { serverSelectionTimeoutMS: 2000 }); + const client = new MongoClient(MONGO_URI, { + serverSelectionTimeoutMS: 2000, + }); await client.connect(); await client.close(); return true; @@ -38,6 +40,17 @@ function makeTableMetadata(name: string) { }; } +function makeCoreTableResolver() { + return { + getNames: async () => ({ + table: 'enfyra_table', + column: 'enfyra_column', + relation: 'enfyra_relation', + }), + getTableName: async (key: string) => `enfyra_${key}`, + }; +} + describe('SchemaHealingService Mongo integration', () => { let available = false; let client: MongoClient | undefined; @@ -62,7 +75,9 @@ describe('SchemaHealingService Mongo integration', () => { test('repairs persisted Mongo primary key metadata through real Mongo query builder', async () => { if (!available || !db) { - console.warn('MongoDB not available, skipping real DB schema healing test'); + console.warn( + 'MongoDB not available, skipping real DB schema healing test', + ); return; } @@ -94,10 +109,12 @@ describe('SchemaHealingService Mongo integration', () => { getDb: () => db, collection: (name: string) => db.collection(name), updateOne: async (collectionName: string, id: string, data: any) => - db.collection(collectionName).updateOne( - { _id: typeof id === 'string' ? new ObjectId(id) : id }, - { $set: data }, - ), + db + .collection(collectionName) + .updateOne( + { _id: typeof id === 'string' ? new ObjectId(id) : id }, + { $set: data }, + ), processNestedRelations: async (_tableName: string, data: any) => data, applyUpdateTimestamp: (data: any) => data, }, @@ -119,6 +136,7 @@ describe('SchemaHealingService Mongo integration', () => { const service = new SchemaHealingService({ queryBuilderService, metadataCacheService: metadataCacheService as any, + systemCoreTableResolver: makeCoreTableResolver() as any, }); await service.runIfNeeded(); @@ -137,7 +155,9 @@ describe('SchemaHealingService Mongo integration', () => { test('heals legacy Mongo junction metadata and merges existing legacy collection data', async () => { if (!available || !db) { - console.warn('MongoDB not available, skipping real DB schema healing test'); + console.warn( + 'MongoDB not available, skipping real DB schema healing test', + ); return; } @@ -145,8 +165,7 @@ describe('SchemaHealingService Mongo integration', () => { await db.collection('enfyra_table').deleteMany({}); await db.collection('enfyra_relation').deleteMany({}); - const oldCollectionName = - 'enfyra_route_availableMethods_enfyra_method'; + const oldCollectionName = 'enfyra_route_availableMethods_enfyra_method'; try { await db.collection(oldCollectionName).drop(); } catch {} @@ -233,6 +252,7 @@ describe('SchemaHealingService Mongo integration', () => { const service = new SchemaHealingService({ queryBuilderService, metadataCacheService: { getAllTablesMetadata: async () => [] } as any, + systemCoreTableResolver: makeCoreTableResolver() as any, }); await service.runIfNeeded(); @@ -278,7 +298,9 @@ describe('SchemaHealingService Mongo integration', () => { test('drops orphan legacy Mongo junction collection when metadata already uses standard contract', async () => { if (!available || !db) { - console.warn('MongoDB not available, skipping real DB schema healing test'); + console.warn( + 'MongoDB not available, skipping real DB schema healing test', + ); return; } @@ -286,8 +308,7 @@ describe('SchemaHealingService Mongo integration', () => { await db.collection('enfyra_table').deleteMany({}); await db.collection('enfyra_relation').deleteMany({}); - const oldCollectionName = - 'enfyra_route_availableMethods_enfyra_method'; + const oldCollectionName = 'enfyra_route_availableMethods_enfyra_method'; try { await db.collection(oldCollectionName).drop(); } catch {} @@ -372,6 +393,7 @@ describe('SchemaHealingService Mongo integration', () => { const service = new SchemaHealingService({ queryBuilderService, metadataCacheService: { getAllTablesMetadata: async () => [] } as any, + systemCoreTableResolver: makeCoreTableResolver() as any, }); await service.runIfNeeded(); diff --git a/test/domain/schema-healing.service.spec.ts b/test/domain/schema-healing.service.spec.ts index 643d7853..c6c18d4e 100644 --- a/test/domain/schema-healing.service.spec.ts +++ b/test/domain/schema-healing.service.spec.ts @@ -46,7 +46,9 @@ function makeQb(findImpl: (args: any) => any, updateMock: any) { getKnex: vi.fn().mockReturnValue(knex), getMongoDb: vi.fn().mockReturnValue({ collection: vi.fn().mockReturnValue({ - find: vi.fn().mockReturnValue({ toArray: vi.fn().mockResolvedValue([]) }), + find: vi + .fn() + .mockReturnValue({ toArray: vi.fn().mockResolvedValue([]) }), updateMany: vi.fn().mockResolvedValue({ modifiedCount: 0 }), createIndex: vi.fn().mockResolvedValue(undefined), }), @@ -68,6 +70,25 @@ function makeCache(tables: any[]) { } as any; } +function makeCoreTableResolver() { + return { + getNames: vi.fn().mockResolvedValue({ + table: 'enfyra_table', + column: 'enfyra_column', + relation: 'enfyra_relation', + }), + getTableName: vi.fn(async (key: string) => `enfyra_${key}`), + } as any; +} + +function makeService(qb: any, cache: any) { + return new SchemaHealingService({ + queryBuilderService: qb, + metadataCacheService: cache, + systemCoreTableResolver: makeCoreTableResolver(), + }); +} + describe('SchemaHealingService.runIfNeeded', () => { beforeEach(() => { DatabaseConfigService.overrideForTesting?.('postgres'); @@ -77,10 +98,7 @@ describe('SchemaHealingService.runIfNeeded', () => { const update = vi.fn(); const qb = makeQb(() => ({ data: [makeSetting(true)] }), update); const cache = makeCache([]); - const svc = new SchemaHealingService({ - queryBuilderService: qb, - metadataCacheService: cache, - }); + const svc = makeService(qb, cache); await svc.runIfNeeded(); @@ -92,10 +110,7 @@ describe('SchemaHealingService.runIfNeeded', () => { const update = vi.fn(); const qb = makeQb(() => ({ data: [] }), update); const cache = makeCache([]); - const svc = new SchemaHealingService({ - queryBuilderService: qb, - metadataCacheService: cache, - }); + const svc = makeService(qb, cache); await svc.runIfNeeded(); @@ -113,10 +128,7 @@ describe('SchemaHealingService.runIfNeeded', () => { relations: [{ propertyName: 'author', foreignKeyColumn: 'authorId' }], }), ]); - const svc = new SchemaHealingService({ - queryBuilderService: qb, - metadataCacheService: cache, - }); + const svc = makeService(qb, cache); await svc.runIfNeeded(); @@ -141,10 +153,7 @@ describe('SchemaHealingService.runIfNeeded', () => { ], }), ]); - const svc = new SchemaHealingService({ - queryBuilderService: qb, - metadataCacheService: cache, - }); + const svc = makeService(qb, cache); await svc.runIfNeeded(); @@ -167,7 +176,57 @@ describe('SchemaHealingService.runIfNeeded', () => { it('repairs Mongo primary key column metadata even when uniques/indexes flag is already true', async () => { DatabaseConfigService.overrideForTesting?.('mongodb'); const update = vi.fn().mockResolvedValue(undefined); + const updateOne = vi.fn().mockResolvedValue({ modifiedCount: 1 }); const columnId = '65f000000000000000000001'; + const collections: Record = { + enfyra_setting: { + find: vi + .fn() + .mockReturnValue({ toArray: vi.fn().mockResolvedValue([]) }), + findOne: vi.fn().mockResolvedValue({ + _id: 'setting-id', + isInit: true, + uniquesIndexesRepaired: true, + }), + updateOne: vi.fn().mockResolvedValue({ modifiedCount: 0 }), + updateMany: vi.fn().mockResolvedValue({ modifiedCount: 0 }), + createIndex: vi.fn().mockResolvedValue(undefined), + }, + enfyra_column: { + find: vi.fn().mockReturnValue({ + toArray: vi.fn().mockResolvedValue([ + { + _id: columnId, + name: '_id', + type: 'uuid', + isPrimary: true, + }, + ]), + }), + findOne: vi.fn().mockResolvedValue(null), + updateOne, + updateMany: vi.fn().mockResolvedValue({ modifiedCount: 0 }), + createIndex: vi.fn().mockResolvedValue(undefined), + }, + }; + const db = { + collection: vi.fn((name: string) => { + collections[name] ||= { + find: vi + .fn() + .mockReturnValue({ toArray: vi.fn().mockResolvedValue([]) }), + findOne: vi.fn().mockResolvedValue(null), + updateOne: vi.fn().mockResolvedValue({ modifiedCount: 0 }), + updateMany: vi.fn().mockResolvedValue({ modifiedCount: 0 }), + createIndex: vi.fn().mockResolvedValue(undefined), + }; + return collections[name]; + }), + createCollection: vi.fn().mockResolvedValue(undefined), + listCollections: vi.fn().mockReturnValue({ + toArray: vi.fn().mockResolvedValue([]), + }), + }; const qb = makeQb( (args: any) => args.table === 'enfyra_column' @@ -192,19 +251,15 @@ describe('SchemaHealingService.runIfNeeded', () => { }, update, ); + qb.getMongoDb.mockReturnValue(db); const cache = makeCache([]); - const svc = new SchemaHealingService({ - queryBuilderService: qb, - metadataCacheService: cache, - }); + const svc = makeService(qb, cache); await svc.runIfNeeded(); - expect(update).toHaveBeenCalledTimes(1); - expect(update).toHaveBeenCalledWith( - 'enfyra_column', - { where: [{ field: '_id', operator: '=', value: columnId }] }, - { name: '_id', type: 'ObjectId' }, + expect(updateOne).toHaveBeenCalledWith( + { _id: columnId }, + { $set: { name: '_id', type: 'ObjectId' } }, ); }); @@ -220,10 +275,7 @@ describe('SchemaHealingService.runIfNeeded', () => { relations: [{ propertyName: 'user', foreignKeyColumn: 'userId' }], }), ]); - const svc = new SchemaHealingService({ - queryBuilderService: qb, - metadataCacheService: cache, - }); + const svc = makeService(qb, cache); await svc.runIfNeeded(); @@ -243,10 +295,7 @@ describe('SchemaHealingService.runIfNeeded', () => { relations: [{ propertyName: 'user', foreignKeyColumn: 'userId' }], }), ]); - const svc = new SchemaHealingService({ - queryBuilderService: qb, - metadataCacheService: cache, - }); + const svc = makeService(qb, cache); await svc.runIfNeeded(); @@ -267,10 +316,7 @@ describe('SchemaHealingService.runIfNeeded', () => { relations: [{ propertyName: 'author', foreignKeyColumn: 'authorId' }], }), ]); - const svc = new SchemaHealingService({ - queryBuilderService: qb, - metadataCacheService: cache, - }); + const svc = makeService(qb, cache); await svc.runIfNeeded(); @@ -321,16 +367,20 @@ describe('SchemaHealingService.runIfNeeded', () => { throw new Error(`Unexpected table ${tableName}`); }); knex.schema = { - hasTable: vi.fn(async (tableName: string) => tableName === 'test_students_students'), + hasTable: vi.fn( + async (tableName: string) => tableName === 'test_students_students', + ), hasColumn: vi.fn(async (_tableName: string, columnName: string) => ['testId', 'studentsId'].includes(columnName), ), renameTable: vi.fn().mockResolvedValue(undefined), - alterTable: vi.fn().mockImplementation( - async (_tableName: string, callback: (table: any) => void) => { - callback({ renameColumn: vi.fn() }); - }, - ), + alterTable: vi + .fn() + .mockImplementation( + async (_tableName: string, callback: (table: any) => void) => { + callback({ renameColumn: vi.fn() }); + }, + ), createTable: vi.fn().mockResolvedValue(undefined), }; const qb = { @@ -339,10 +389,7 @@ describe('SchemaHealingService.runIfNeeded', () => { getDatabaseType: vi.fn().mockReturnValue('postgres'), getKnex: vi.fn().mockReturnValue(knex), } as any; - const svc = new SchemaHealingService({ - queryBuilderService: qb, - metadataCacheService: makeCache([]), - }); + const svc = makeService(qb, makeCache([])); await svc.runIfNeeded(); @@ -411,11 +458,15 @@ describe('SchemaHealingService.runIfNeeded', () => { ]; const collections: Record = { enfyra_relation: { - find: vi.fn().mockReturnValue({ toArray: vi.fn().mockResolvedValue(relations) }), + find: vi + .fn() + .mockReturnValue({ toArray: vi.fn().mockResolvedValue(relations) }), updateOne, }, enfyra_table: { - find: vi.fn().mockReturnValue({ toArray: vi.fn().mockResolvedValue(tables) }), + find: vi + .fn() + .mockReturnValue({ toArray: vi.fn().mockResolvedValue(tables) }), }, bad_junction: { rename, @@ -424,7 +475,9 @@ describe('SchemaHealingService.runIfNeeded', () => { const db = { collection: vi.fn((name: string) => { collections[name] ||= { - find: vi.fn().mockReturnValue({ toArray: vi.fn().mockResolvedValue([]) }), + find: vi + .fn() + .mockReturnValue({ toArray: vi.fn().mockResolvedValue([]) }), updateMany, createIndex, }; @@ -441,15 +494,20 @@ describe('SchemaHealingService.runIfNeeded', () => { find: vi.fn((args: any) => args.table === 'enfyra_column' ? { data: [] } - : { data: [{ _id: 'setting-id', isInit: true, uniquesIndexesRepaired: true }] }, + : { + data: [ + { + _id: 'setting-id', + isInit: true, + uniquesIndexesRepaired: true, + }, + ], + }, ), update, getMongoDb: vi.fn().mockReturnValue(db), } as any; - const svc = new SchemaHealingService({ - queryBuilderService: qb, - metadataCacheService: makeCache([]), - }); + const svc = makeService(qb, makeCache([])); await svc.runIfNeeded(); diff --git a/test/http/assets-cache-memory-pressure.spec.ts b/test/http/assets-cache-memory-pressure.spec.ts index e242bcae..7131d138 100644 --- a/test/http/assets-cache-memory-pressure.spec.ts +++ b/test/http/assets-cache-memory-pressure.spec.ts @@ -12,7 +12,7 @@ function makeQueryBuilder() { mimetype: 'text/plain', type: 'document', location: '/uploads/asset.txt', - isPublished: true, + isPublic: true, storageConfig: null, }, ], diff --git a/test/http/assets-cache.e2e.spec.ts b/test/http/assets-cache.e2e.spec.ts index 874c59cb..4c292447 100644 --- a/test/http/assets-cache.e2e.spec.ts +++ b/test/http/assets-cache.e2e.spec.ts @@ -16,7 +16,7 @@ function makeFile(overrides: Record = {}) { type: 'document', location: '/uploads/avatar.txt', filesize: Buffer.byteLength('asset-body'), - isPublished: true, + isPublic: true, storageConfig: null, ...overrides, }; @@ -267,7 +267,7 @@ describe('assets route cache e2e', () => { it('caches private file permissions by file and invalidates by changed permission id', async () => { const state = { - files: [makeFile({ isPublished: false })], + files: [makeFile({ isPublic: false })], permissions: [makePermission()], }; const { service, eventEmitter, queryBuilderService } = makeService(state); @@ -301,7 +301,7 @@ describe('assets route cache e2e', () => { it('allows root admin to stream private files without file permissions', async () => { const state = { - files: [makeFile({ isPublished: false })], + files: [makeFile({ isPublic: false })], permissions: [], }; const { service, queryBuilderService } = makeService(state); diff --git a/test/http/dynamic-interceptor-admin-test-run.spec.ts b/test/http/dynamic-interceptor-admin-test-run.spec.ts index eb55eeb9..598d3763 100644 --- a/test/http/dynamic-interceptor-admin-test-run.spec.ts +++ b/test/http/dynamic-interceptor-admin-test-run.spec.ts @@ -97,4 +97,59 @@ describe('dynamicInterceptorBegin admin test run isolation', () => { }); expect(json).toHaveBeenCalledWith({ statusCode: 200, data: [] }); }); + + it('does not run success post hooks for error responses from built-in routes', async () => { + const executorEngineService = { + register: vi.fn(), + runBatch: vi.fn(async (req: any) => { + req.routeData.context.$data = { + statusCode: req.routeData.context.$statusCode, + ...req.routeData.context.$data, + message: 'Success', + }; + }), + }; + const req = { + method: 'POST', + path: '/auth/token/exchange', + originalUrl: '/auth/token/exchange', + routeData: { + context: { + $share: { $logs: [] }, + $data: undefined, + }, + preHooks: [], + postHooks: [ + { + code: "@DATA = { statusCode: @STATUS, ...@DATA, message: 'Success' }", + }, + ], + }, + }; + const json = vi.fn(); + const res = { + statusCode: 401, + json, + }; + const next = vi.fn(); + const errorBody = { + success: false, + message: 'Invalid API token', + statusCode: 401, + error: { code: 'UNAUTHORIZED', message: 'Invalid API token' }, + }; + + await dynamicInterceptorBegin(executorEngineService as any)( + req, + res as any, + next, + ); + res.json(errorBody); + await new Promise((resolve) => setTimeout(resolve, 0)); + + expect(next).toHaveBeenCalledTimes(1); + expect(executorEngineService.register).not.toHaveBeenCalled(); + expect(executorEngineService.runBatch).not.toHaveBeenCalled(); + expect(json).toHaveBeenCalledWith(errorBody); + }); }); diff --git a/test/http/jwt-auth-middleware.spec.ts b/test/http/jwt-auth-middleware.spec.ts index 07064ecf..b9163cbf 100644 --- a/test/http/jwt-auth-middleware.spec.ts +++ b/test/http/jwt-auth-middleware.spec.ts @@ -1,18 +1,39 @@ -import { describe, expect, it, vi } from 'vitest'; +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { SignJWT } from 'jose'; import { jwtAuthMiddleware } from '../../src/http/middlewares/jwt-auth.middleware'; import { InvalidTokenException } from '../../src/domain/exceptions'; +import { + clearLocalUserCacheForTesting, + primeCachedUserSnapshot, +} from '../../src/shared/utils/load-user-with-role.util'; -function makeMiddleware() { - return jwtAuthMiddleware({} as any, {} as any, 'test-secret'); +const secret = 'test-secret'; + +function makeMiddleware( + queryBuilder: any = {}, + cacheService: any = {}, + apiTokenService?: any, +) { + return jwtAuthMiddleware(queryBuilder, cacheService, secret, apiTokenService); +} + +async function signToken(payload: Record) { + return new SignJWT(payload) + .setProtectedHeader({ alg: 'HS256' }) + .sign(new TextEncoder().encode(secret)); } describe('jwtAuthMiddleware', () => { + afterEach(() => { + clearLocalUserCacheForTesting(); + }); + it('treats invalid Bearer tokens as anonymous on public methods', async () => { const req: any = { method: 'GET', headers: { authorization: 'Bearer malformed.jwt.token' }, routeData: { - isPublished: true, + publicMethods: [{ name: 'GET' }], context: { $user: 'existing' }, }, }; @@ -40,4 +61,90 @@ describe('jwtAuthMiddleware', () => { expect(next).toHaveBeenCalledWith(expect.any(InvalidTokenException)); }); + + it('caches hydrated users after a verified JWT', async () => { + const user = { id: '1', email: 'root@example.com', roleId: '2' }; + const role = { id: '2', name: 'Admin' }; + const findOne = vi.fn(async ({ table }) => { + if (table === 'enfyra_user') return user; + if (table === 'enfyra_role') return role; + return null; + }); + const queryBuilder = { + isMongoDb: () => false, + findOne, + }; + const token = await signToken({ id: '1' }); + const req: any = { + method: 'GET', + headers: { authorization: `Bearer ${token}` }, + routeData: { context: { $user: null } }, + }; + const next = vi.fn(); + + await makeMiddleware(queryBuilder)(req, {} as any, next); + const secondReq: any = { + method: 'GET', + headers: { authorization: `Bearer ${token}` }, + routeData: { context: { $user: null } }, + }; + await makeMiddleware(queryBuilder)(secondReq, {} as any, vi.fn()); + + expect(findOne).toHaveBeenCalledTimes(2); + expect(req.user).toEqual( + expect.objectContaining({ + id: '1', + role, + loginProvider: null, + tokenType: null, + apiTokenId: null, + }), + ); + expect(secondReq.user).toEqual(expect.objectContaining({ id: '1', role })); + expect(req.routeData.context.$user).toBe(req.user); + expect(next).toHaveBeenCalledWith(); + }); + + it('does not write request token context into cached user snapshots', async () => { + const cachedUser: any = { + id: '1', + email: 'root@example.com', + role: { id: '2', name: 'Admin' }, + }; + primeCachedUserSnapshot('1', cachedUser); + const token = await signToken({ + id: '1', + loginProvider: 'api_token', + tokenType: 'api_token', + tokenId: 'token-1', + }); + const req: any = { + method: 'GET', + headers: { authorization: `Bearer ${token}` }, + routeData: { context: { $user: null } }, + }; + const next = vi.fn(); + + await makeMiddleware( + { isMongoDb: () => false }, + {}, + { + validateAccessPayload: vi.fn().mockResolvedValue(true), + }, + )(req, {} as any, next); + + expect(req.user).toEqual( + expect.objectContaining({ + id: '1', + loginProvider: 'api_token', + tokenType: 'api_token', + apiTokenId: 'token-1', + }), + ); + expect(cachedUser).toEqual({ + id: '1', + email: 'root@example.com', + role: { id: '2', name: 'Admin' }, + }); + }); }); diff --git a/test/http/metadata-access.spec.ts b/test/http/metadata-access.spec.ts index ea47781d..3e8e4db1 100644 --- a/test/http/metadata-access.spec.ts +++ b/test/http/metadata-access.spec.ts @@ -179,8 +179,8 @@ describe('metadata access projection', () => { } as any); expect([...names].sort()).toEqual([ - 'post_definition', 'enfyra_user', + 'post_definition', ]); }); diff --git a/test/modules/me-service.spec.ts b/test/modules/me-service.spec.ts index c4927241..609c2192 100644 --- a/test/modules/me-service.spec.ts +++ b/test/modules/me-service.spec.ts @@ -2,9 +2,22 @@ import { describe, expect, it, vi } from 'vitest'; import { MeService } from '../../src/modules/me/services/me.service'; describe('MeService', () => { - it('creates a trusted repo context for built-in /me routes without dynamic routeData', async () => { + it('creates an enforced repo context for built-in /me reads without dynamic routeData', async () => { const userRepo = { - find: vi.fn(async () => ({ data: [{ id: 'user-1', email: 'a@test.dev' }] })), + find: vi.fn(async () => ({ + data: [{ id: 'user-1', email: 'a@test.dev' }], + })), + }; + const trustedUserRepo = { + find: vi.fn(async () => ({ + data: [ + { + id: 'user-1', + email: 'a@test.dev', + password: 'hashed-password', + }, + ], + })), }; const context: any = {}; const dynamicContextFactory = { @@ -12,13 +25,9 @@ describe('MeService', () => { }; const repoRegistryService = { createReposProxy: vi.fn(() => ({ - enfyra_user: userRepo, + enfyra_user: trustedUserRepo, secure: { - enfyra_user: { - find: vi.fn(async () => { - throw new Error('secure repo should not be used for /me'); - }), - }, + enfyra_user: userRepo, }, })), }; @@ -51,6 +60,8 @@ describe('MeService', () => { email: 'a@test.dev', loginProvider: 'google', }); + expect(result.data[0]).not.toHaveProperty('password'); + expect(trustedUserRepo.find).not.toHaveBeenCalled(); }); @@ -130,4 +141,55 @@ describe('MeService', () => { }); }); + it('uses enforced repository reads for /me/oauth-accounts', async () => { + const oauthRepo = { + find: vi.fn(async () => ({ + data: [{ id: 'oauth-1', provider: 'google' }], + })), + }; + const trustedOauthRepo = { + find: vi.fn(async () => ({ + data: [ + { + id: 'oauth-1', + provider: 'google', + accessToken: 'secret-access-token', + }, + ], + })), + }; + const context: any = {}; + const service = new MeService({ + dynamicContextFactory: { + createHttp: vi.fn(() => context), + } as any, + repoRegistryService: { + createReposProxy: vi.fn(() => ({ + enfyra_oauth_account: trustedOauthRepo, + secure: { enfyra_oauth_account: oauthRepo }, + })), + } as any, + }); + + const result = await service.findOAuthAccounts({ + user: { id: 'user-1' }, + method: 'GET', + url: '/me/oauth-accounts', + originalUrl: '/me/oauth-accounts', + path: '/me/oauth-accounts', + query: {}, + params: {}, + headers: {}, + hostname: 'example.test', + protocol: 'https', + ip: '127.0.0.1', + } as any); + + expect(oauthRepo.find).toHaveBeenCalledWith({ + filter: { user: { id: { _eq: 'user-1' } } }, + }); + expect(trustedOauthRepo.find).not.toHaveBeenCalled(); + expect(result.data[0]).not.toHaveProperty('accessToken'); + }); + }); diff --git a/test/security/graphql-route-permission.spec.ts b/test/security/graphql-route-permission.spec.ts index b568a88f..02267808 100644 --- a/test/security/graphql-route-permission.spec.ts +++ b/test/security/graphql-route-permission.spec.ts @@ -3,11 +3,11 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'; import { DynamicResolver } from '../../src/modules/graphql/resolvers/dynamic.resolver'; const mocks = vi.hoisted(() => ({ - loadUserWithRole: vi.fn(), + loadCachedUserWithRole: vi.fn(), })); vi.mock('../../src/shared/utils/load-user-with-role.util', () => ({ - loadUserWithRole: mocks.loadUserWithRole, + loadCachedUserWithRole: mocks.loadCachedUserWithRole, })); function makeResolver(overrides: Record = {}) { @@ -49,6 +49,7 @@ function makeResolver(overrides: Record = {}) { $params: input.params, })), }, + cacheService: {}, ...overrides, } as any); @@ -67,7 +68,7 @@ function authContext() { describe('DynamicResolver route permissions', () => { beforeEach(() => { vi.clearAllMocks(); - mocks.loadUserWithRole.mockResolvedValue({ + mocks.loadCachedUserWithRole.mockResolvedValue({ id: 'user-1', role: { id: 'role-user' }, isRootAdmin: false, diff --git a/test/shared/public-methods-cleanup.spec.ts b/test/shared/public-methods-cleanup.spec.ts index f9588f49..81c244fb 100644 --- a/test/shared/public-methods-cleanup.spec.ts +++ b/test/shared/public-methods-cleanup.spec.ts @@ -14,6 +14,9 @@ const AUTH_PATHS = new Set([ '/auth/providers', '/auth/:provider', '/auth/:provider/callback', + '/auth/token/exchange', + '/auth/oauth/exchange', + '/auth/set-cookies', ]); const PUBLIC_NON_AUTH_PATHS = new Set([ diff --git a/yarn.lock b/yarn.lock index e9a5b05d..7d395120 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@ampproject/remapping@^2.3.0": version "2.3.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: "@jridgewell/gen-mapping" "^0.3.5" @@ -12,7 +12,7 @@ "@aws-crypto/crc32@5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== dependencies: "@aws-crypto/util" "^5.2.0" @@ -21,7 +21,7 @@ "@aws-crypto/crc32c@5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz#4e34aab7f419307821509a98b9b08e84e0c1917e" integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== dependencies: "@aws-crypto/util" "^5.2.0" @@ -30,7 +30,7 @@ "@aws-crypto/sha1-browser@5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz#b0ee2d2821d3861f017e965ef3b4cb38e3b6a0f4" integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== dependencies: "@aws-crypto/supports-web-crypto" "^5.2.0" @@ -42,7 +42,7 @@ "@aws-crypto/sha256-browser@5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== dependencies: "@aws-crypto/sha256-js" "^5.2.0" @@ -55,7 +55,7 @@ "@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== dependencies: "@aws-crypto/util" "^5.2.0" @@ -64,224 +64,174 @@ "@aws-crypto/supports-web-crypto@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== dependencies: tslib "^2.6.2" "@aws-crypto/util@5.2.0", "@aws-crypto/util@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== dependencies: "@aws-sdk/types" "^3.222.0" "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" +"@aws-sdk/checksums@^3.1000.7": + version "3.1000.7" + resolved "https://registry.yarnpkg.com/@aws-sdk/checksums/-/checksums-3.1000.7.tgz#2b023fc4ef1c770c145c107a974f414c18b0c1e6" + integrity sha512-qh0fG/RtrFztst4+vn1HZehAvAhr5Jlq/WMP7e5KvvfF16oNVBc9CDNVdxdm19vzOY2x0qiDMFCRjhxQAusGWQ== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-crypto/util" "5.2.0" + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/types" "^4.14.3" + tslib "^2.6.2" + "@aws-sdk/client-s3@^3.1024.0": - version "3.1024.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1024.0.tgz" - integrity sha512-8qdO5aLCzaf9l0RdrSBW1iIroRKP2QBqtZ6lkrtHKiaaH0B18xEn+lrEgiN/eCf3uRAYk4cqbnI2XcWzm+7dDQ== + version "3.1073.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.1073.0.tgz#6327e40d0040f2dd3ab5aa0d1ad2ef7db4d1deaa" + integrity sha512-/Dvhrff0I4D2YUWSdm8uLKa1bfXdw9BMRDUME6ZeoTrrdQKQDeo2scLDjdpC5X2YdvTc/ZnUCR2HAvD7qXvS1w== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/credential-provider-node" "^3.972.29" - "@aws-sdk/middleware-bucket-endpoint" "^3.972.8" - "@aws-sdk/middleware-expect-continue" "^3.972.8" - "@aws-sdk/middleware-flexible-checksums" "^3.974.6" - "@aws-sdk/middleware-host-header" "^3.972.8" - "@aws-sdk/middleware-location-constraint" "^3.972.8" - "@aws-sdk/middleware-logger" "^3.972.8" - "@aws-sdk/middleware-recursion-detection" "^3.972.9" - "@aws-sdk/middleware-sdk-s3" "^3.972.27" - "@aws-sdk/middleware-ssec" "^3.972.8" - "@aws-sdk/middleware-user-agent" "^3.972.28" - "@aws-sdk/region-config-resolver" "^3.972.10" - "@aws-sdk/signature-v4-multi-region" "^3.996.15" - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/util-endpoints" "^3.996.5" - "@aws-sdk/util-user-agent-browser" "^3.972.8" - "@aws-sdk/util-user-agent-node" "^3.973.14" - "@smithy/config-resolver" "^4.4.13" - "@smithy/core" "^3.23.13" - "@smithy/eventstream-serde-browser" "^4.2.12" - "@smithy/eventstream-serde-config-resolver" "^4.3.12" - "@smithy/eventstream-serde-node" "^4.2.12" - "@smithy/fetch-http-handler" "^5.3.15" - "@smithy/hash-blob-browser" "^4.2.13" - "@smithy/hash-node" "^4.2.12" - "@smithy/hash-stream-node" "^4.2.12" - "@smithy/invalid-dependency" "^4.2.12" - "@smithy/md5-js" "^4.2.12" - "@smithy/middleware-content-length" "^4.2.12" - "@smithy/middleware-endpoint" "^4.4.28" - "@smithy/middleware-retry" "^4.4.46" - "@smithy/middleware-serde" "^4.2.16" - "@smithy/middleware-stack" "^4.2.12" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/node-http-handler" "^4.5.1" - "@smithy/protocol-http" "^5.3.12" - "@smithy/smithy-client" "^4.12.8" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-body-length-browser" "^4.2.2" - "@smithy/util-body-length-node" "^4.2.3" - "@smithy/util-defaults-mode-browser" "^4.3.44" - "@smithy/util-defaults-mode-node" "^4.2.48" - "@smithy/util-endpoints" "^3.3.3" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-retry" "^4.2.13" - "@smithy/util-stream" "^4.5.21" - "@smithy/util-utf8" "^4.2.2" - "@smithy/util-waiter" "^4.2.14" + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/credential-provider-node" "^3.972.57" + "@aws-sdk/middleware-flexible-checksums" "^3.974.32" + "@aws-sdk/middleware-sdk-s3" "^3.972.53" + "@aws-sdk/signature-v4-multi-region" "^3.996.35" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/fetch-http-handler" "^5.4.6" + "@smithy/node-http-handler" "^4.7.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/core@^3.973.26": - version "3.973.26" - resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.26.tgz" - integrity sha512-A/E6n2W42ruU+sfWk+mMUOyVXbsSgGrY3MJ9/0Az5qUdG67y8I6HYzzoAa+e/lzxxl1uCYmEL6BTMi9ZiZnplQ== +"@aws-sdk/core@^3.974.22": + version "3.974.22" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.974.22.tgz#924157ab67067bf874cb883ed7d306230d5a5921" + integrity sha512-YofH63shc6YRdXjz80BJkpJW+Bkn0Cuu2dn4Rv7s9G2Idt58tgtzQEWxrR2xVljlVfIBeUjPuULnSVYLke3sUQ== dependencies: - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/xml-builder" "^3.972.16" - "@smithy/core" "^3.23.13" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/property-provider" "^4.2.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/signature-v4" "^5.3.12" - "@smithy/smithy-client" "^4.12.8" - "@smithy/types" "^4.13.1" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-utf8" "^4.2.2" + "@aws-sdk/types" "^3.973.13" + "@aws-sdk/xml-builder" "^3.972.30" + "@aws/lambda-invoke-store" "^0.2.2" + "@smithy/core" "^3.24.6" + "@smithy/signature-v4" "^5.4.6" + "@smithy/types" "^4.14.3" + bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/crc64-nvme@^3.972.5": - version "3.972.5" - resolved "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.5.tgz" - integrity sha512-2VbTstbjKdT+yKi8m7b3a9CiVac+pL/IY2PHJwsaGkkHmuuqkJZIErPck1h6P3T9ghQMLSdMPyW6Qp7Di5swFg== +"@aws-sdk/credential-provider-env@^3.972.48": + version "3.972.48" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.48.tgz#dbbb28a6bd125674c249394574b718668172b861" + integrity sha512-h6FEC95fbexUd6zxm4PdgS82bTcI2PRtUb2ZwMipb/Xr8bPwtf0G8rBo2jp7NA24Mbx2JA8/WingiYpA9RCCyw== dependencies: - "@smithy/types" "^4.13.1" + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@^3.972.24": - version "3.972.24" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.24.tgz" - integrity sha512-FWg8uFmT6vQM7VuzELzwVo5bzExGaKHdubn0StjgrcU5FvuLExUe+k06kn/40uKv59rYzhez8eFNM4yYE/Yb/w== - dependencies: - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/types" "^4.13.1" +"@aws-sdk/credential-provider-http@^3.972.50": + version "3.972.50" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.50.tgz#2e3360819a9c59ffc2f0ec53607eac50da0b2340" + integrity sha512-lJO3OLpjvz5m/RSBQmsG/CEUGsvCy5ruxKwPQaOCqxqCMuyYT2BZwQUTDZVVwqQ9LrZKuK24JSa6r31hL/tvkg== + dependencies: + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/fetch-http-handler" "^5.4.6" + "@smithy/node-http-handler" "^4.7.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@^3.972.26": - version "3.972.26" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.26.tgz" - integrity sha512-CY4ppZ+qHYqcXqBVi//sdHST1QK3KzOEiLtpLsc9W2k2vfZPKExGaQIsOwcyvjpjUEolotitmd3mUNY56IwDEA== - dependencies: - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/types" "^3.973.6" - "@smithy/fetch-http-handler" "^5.3.15" - "@smithy/node-http-handler" "^4.5.1" - "@smithy/property-provider" "^4.2.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/smithy-client" "^4.12.8" - "@smithy/types" "^4.13.1" - "@smithy/util-stream" "^4.5.21" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@^3.972.28": - version "3.972.28" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.28.tgz" - integrity sha512-wXYvq3+uQcZV7k+bE4yDXCTBdzWTU9x/nMiKBfzInmv6yYK1veMK0AKvRfRBd72nGWYKcL6AxwiPg9z/pYlgpw== - dependencies: - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/credential-provider-env" "^3.972.24" - "@aws-sdk/credential-provider-http" "^3.972.26" - "@aws-sdk/credential-provider-login" "^3.972.28" - "@aws-sdk/credential-provider-process" "^3.972.24" - "@aws-sdk/credential-provider-sso" "^3.972.28" - "@aws-sdk/credential-provider-web-identity" "^3.972.28" - "@aws-sdk/nested-clients" "^3.996.18" - "@aws-sdk/types" "^3.973.6" - "@smithy/credential-provider-imds" "^4.2.12" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" +"@aws-sdk/credential-provider-ini@^3.972.55": + version "3.972.55" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.55.tgz#ddb0c927a6f903cb02ea0f3a943a01c0fc4f3899" + integrity sha512-TBoF4buBGYhXjdZAryayY2TrkQj2B2KfE/msG4V53XCt+w0EhEwM2JRjx8p2grJ2C6gtH5++SAwEvGMRdi0yyw== + dependencies: + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/credential-provider-env" "^3.972.48" + "@aws-sdk/credential-provider-http" "^3.972.50" + "@aws-sdk/credential-provider-login" "^3.972.54" + "@aws-sdk/credential-provider-process" "^3.972.48" + "@aws-sdk/credential-provider-sso" "^3.972.54" + "@aws-sdk/credential-provider-web-identity" "^3.972.54" + "@aws-sdk/nested-clients" "^3.997.22" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/credential-provider-imds" "^4.3.7" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/credential-provider-login@^3.972.28": - version "3.972.28" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.28.tgz" - integrity sha512-ZSTfO6jqUTCysbdBPtEX5OUR//3rbD0lN7jO3sQeS2Gjr/Y+DT6SbIJ0oT2cemNw3UzKu97sNONd1CwNMthuZQ== +"@aws-sdk/credential-provider-login@^3.972.54": + version "3.972.54" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.54.tgz#d02f2c8549f48d7f43c757e4566214f05b207675" + integrity sha512-hBWI3wZTdTGiuMfmPts6AWbAjFfRniOQnqx68tc2cQvRKWawFbN9wkLOVPWM1FAOyowZU73mC6Fi+rHSHNyLFw== dependencies: - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/nested-clients" "^3.996.18" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/nested-clients" "^3.997.22" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@^3.972.29": - version "3.972.29" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.29.tgz" - integrity sha512-clSzDcvndpFJAggLDnDb36sPdlZYyEs5Zm6zgZjjUhwsJgSWiWKwFIXUVBcbruidNyBdbpOv2tNDL9sX8y3/0g== - dependencies: - "@aws-sdk/credential-provider-env" "^3.972.24" - "@aws-sdk/credential-provider-http" "^3.972.26" - "@aws-sdk/credential-provider-ini" "^3.972.28" - "@aws-sdk/credential-provider-process" "^3.972.24" - "@aws-sdk/credential-provider-sso" "^3.972.28" - "@aws-sdk/credential-provider-web-identity" "^3.972.28" - "@aws-sdk/types" "^3.973.6" - "@smithy/credential-provider-imds" "^4.2.12" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" +"@aws-sdk/credential-provider-node@^3.972.57": + version "3.972.57" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.57.tgz#0b9f16cb8814d56b86bd23a7610115fd5a2457ea" + integrity sha512-u6dClpzNdWf1HGWz4wwhdXi1wiOofCLniM9S4BQQGlLAN9TW7VB+ld5V533GdKrYMaFeBGFqKnj0JCYvynLqwQ== + dependencies: + "@aws-sdk/credential-provider-env" "^3.972.48" + "@aws-sdk/credential-provider-http" "^3.972.50" + "@aws-sdk/credential-provider-ini" "^3.972.55" + "@aws-sdk/credential-provider-process" "^3.972.48" + "@aws-sdk/credential-provider-sso" "^3.972.54" + "@aws-sdk/credential-provider-web-identity" "^3.972.54" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/credential-provider-imds" "^4.3.7" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@^3.972.24": - version "3.972.24" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.24.tgz" - integrity sha512-Q2k/XLrFXhEztPHqj4SLCNID3hEPdlhh1CDLBpNnM+1L8fq7P+yON9/9M1IGN/dA5W45v44ylERfXtDAlmMNmw== +"@aws-sdk/credential-provider-process@^3.972.48": + version "3.972.48" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.48.tgz#7689a62a63317165263555a0fce9379fd560a0c5" + integrity sha512-w6VZwojPt12WnEkAUy6Nu4K6sWCbBmR7QX390b0nE6vRvkXbrYr9Lq9VySGkfjiMjpUA87op+J4EgvRmtWIDoQ== dependencies: - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@^3.972.28": - version "3.972.28" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.28.tgz" - integrity sha512-IoUlmKMLEITFn1SiCTjPfR6KrE799FBo5baWyk/5Ppar2yXZoUdaRqZzJzK6TcJxx450M8m8DbpddRVYlp5R/A== - dependencies: - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/nested-clients" "^3.996.18" - "@aws-sdk/token-providers" "3.1021.0" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" +"@aws-sdk/credential-provider-sso@^3.972.54": + version "3.972.54" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.54.tgz#4798823741c76292dd035cf5263c09a4d88b82e9" + integrity sha512-23uZpIpF2SIFDCa1fcWa202tK4gGeyvX6GIIAjiB8WBsvsVRBMnJ/7dCxHzxf7eZT7GToJg837LDIBnZsl/VUg== + dependencies: + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/nested-clients" "^3.997.22" + "@aws-sdk/token-providers" "3.1071.0" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@^3.972.28": - version "3.972.28" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.28.tgz" - integrity sha512-d+6h0SD8GGERzKe27v5rOzNGKOl0D+l0bWJdqrxH8WSQzHzjsQFIAPgIeOTUwBHVsKKwtSxc91K/SWax6XgswQ== +"@aws-sdk/credential-provider-web-identity@^3.972.54": + version "3.972.54" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.54.tgz#226d686715396b711c13a62285b229f84b1a3fa7" + integrity sha512-0Iv5QttS6wcATlodYKgvQj6B9Db51rx7NU9fqu0PoLeS4BIgdYMc/QK4smwLwpm5RFrs02V/eLyEFp3FklvlNQ== dependencies: - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/nested-clients" "^3.996.18" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/nested-clients" "^3.997.22" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" "@aws-sdk/lib-storage@3.1024.0": @@ -298,308 +248,121 @@ stream-browserify "3.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-bucket-endpoint@^3.972.8": - version "3.972.8" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.8.tgz" - integrity sha512-WR525Rr2QJSETa9a050isktyWi/4yIGcmY3BQ1kpHqb0LqUglQHCS8R27dTJxxWNZvQ0RVGtEZjTCbZJpyF3Aw== +"@aws-sdk/middleware-flexible-checksums@^3.974.32": + version "3.974.32" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.32.tgz#fb4591d82c7b73c1dae350c49015a0c34dba6ccf" + integrity sha512-KhuzFMzUbb3oEj43CdPDbEJ/RG/RkErkmXk3J/LE8OPFNvkCn8PYPMpjOLgzAzvxBacsSyytdWf+R50q0alJ4w== dependencies: - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/util-arn-parser" "^3.972.3" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-config-provider" "^4.2.2" + "@aws-sdk/checksums" "^3.1000.7" tslib "^2.6.2" -"@aws-sdk/middleware-expect-continue@^3.972.8": - version "3.972.8" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.8.tgz" - integrity sha512-5DTBTiotEES1e2jOHAq//zyzCjeMB78lEHd35u15qnrid4Nxm7diqIf9fQQ3Ov0ChH1V3Vvt13thOnrACmfGVQ== +"@aws-sdk/middleware-sdk-s3@^3.972.53": + version "3.972.53" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.53.tgz#eb2d9803db363e0431fcfb968d20c4f30989f15a" + integrity sha512-keWp6Z5cEIJzPwoCf/WRm0ceAeephPDDivhRsK/xXs2ZYXyypJ2/DL9G1IR0bz/s+iZC0EgzmFV4r7rlvLlxQQ== dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/signature-v4-multi-region" "^3.996.35" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@^3.974.6": - version "3.974.6" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.974.6.tgz" - integrity sha512-YckB8k1ejbyCg/g36gUMFLNzE4W5cERIa4MtsdO+wpTmJEP0+TB7okWIt7d8TDOvnb7SwvxJ21E4TGOBxFpSWQ== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@aws-crypto/crc32c" "5.2.0" - "@aws-crypto/util" "5.2.0" - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/crc64-nvme" "^3.972.5" - "@aws-sdk/types" "^3.973.6" - "@smithy/is-array-buffer" "^4.2.2" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-stream" "^4.5.21" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@^3.972.8": - version "3.972.8" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.8.tgz" - integrity sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@^3.972.8": - version "3.972.8" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.8.tgz" - integrity sha512-KaUoFuoFPziIa98DSQsTPeke1gvGXlc5ZGMhy+b+nLxZ4A7jmJgLzjEF95l8aOQN2T/qlPP3MrAyELm8ExXucw== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@^3.972.8": - version "3.972.8" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.8.tgz" - integrity sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@^3.972.9": - version "3.972.9" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.9.tgz" - integrity sha512-/Wt5+CT8dpTFQxEJ9iGy/UGrXr7p2wlIOEHvIr/YcHYByzoLjrqkYqXdJjd9UIgWjv7eqV2HnFJen93UTuwfTQ== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@aws/lambda-invoke-store" "^0.2.2" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@^3.972.27": - version "3.972.27" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.27.tgz" - integrity sha512-gomO6DZwx+1D/9mbCpcqO5tPBqYBK7DtdgjTIjZ4yvfh/S7ETwAPS0XbJgP2JD8Ycr5CwVrEkV1sFtu3ShXeOw== - dependencies: - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/util-arn-parser" "^3.972.3" - "@smithy/core" "^3.23.13" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/signature-v4" "^5.3.12" - "@smithy/smithy-client" "^4.12.8" - "@smithy/types" "^4.13.1" - "@smithy/util-config-provider" "^4.2.2" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-stream" "^4.5.21" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@^3.972.8": - version "3.972.8" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.8.tgz" - integrity sha512-wqlK0yO/TxEC2UsY9wIlqeeutF6jjLe0f96Pbm40XscTo57nImUk9lBcw0dPgsm0sppFtAkSlDrfpK+pC30Wqw== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@^3.972.28": - version "3.972.28" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.28.tgz" - integrity sha512-cfWZFlVh7Va9lRay4PN2A9ARFzaBYcA097InT5M2CdRS05ECF5yaz86jET8Wsl2WcyKYEvVr/QNmKtYtafUHtQ== - dependencies: - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/util-endpoints" "^3.996.5" - "@smithy/core" "^3.23.13" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-retry" "^4.2.13" - tslib "^2.6.2" - -"@aws-sdk/nested-clients@^3.996.18": - version "3.996.18" - resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.18.tgz" - integrity sha512-c7ZSIXrESxHKx2Mcopgd8AlzZgoXMr20fkx5ViPWPOLBvmyhw9VwJx/Govg8Ef/IhEon5R9l53Z8fdYSEmp6VA== +"@aws-sdk/nested-clients@^3.997.22": + version "3.997.22" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.997.22.tgz#b3ac0053daf05a399e4a1cb4a9f8d9a0484b1b85" + integrity sha512-4IwtcYSxEIVw5hcp8ogq0CMbFNZFw7jJUetpfFUhFFeqsa1K8j2Ihg2hnxLyOp3stMZnXda6VzOmPi1AFZQXcg== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/middleware-host-header" "^3.972.8" - "@aws-sdk/middleware-logger" "^3.972.8" - "@aws-sdk/middleware-recursion-detection" "^3.972.9" - "@aws-sdk/middleware-user-agent" "^3.972.28" - "@aws-sdk/region-config-resolver" "^3.972.10" - "@aws-sdk/types" "^3.973.6" - "@aws-sdk/util-endpoints" "^3.996.5" - "@aws-sdk/util-user-agent-browser" "^3.972.8" - "@aws-sdk/util-user-agent-node" "^3.973.14" - "@smithy/config-resolver" "^4.4.13" - "@smithy/core" "^3.23.13" - "@smithy/fetch-http-handler" "^5.3.15" - "@smithy/hash-node" "^4.2.12" - "@smithy/invalid-dependency" "^4.2.12" - "@smithy/middleware-content-length" "^4.2.12" - "@smithy/middleware-endpoint" "^4.4.28" - "@smithy/middleware-retry" "^4.4.46" - "@smithy/middleware-serde" "^4.2.16" - "@smithy/middleware-stack" "^4.2.12" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/node-http-handler" "^4.5.1" - "@smithy/protocol-http" "^5.3.12" - "@smithy/smithy-client" "^4.12.8" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-body-length-browser" "^4.2.2" - "@smithy/util-body-length-node" "^4.2.3" - "@smithy/util-defaults-mode-browser" "^4.3.44" - "@smithy/util-defaults-mode-node" "^4.2.48" - "@smithy/util-endpoints" "^3.3.3" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-retry" "^4.2.13" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@^3.972.10": - version "3.972.10" - resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.10.tgz" - integrity sha512-1dq9ToC6e070QvnVhhbAs3bb5r6cQ10gTVc6cyRV5uvQe7P138TV2uG2i6+Yok4bAkVAcx5AqkTEBUvWEtBlsQ== - dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/config-resolver" "^4.4.13" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@^3.996.15": - version "3.996.15" - resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.15.tgz" - integrity sha512-Ukw2RpqvaL96CjfH/FgfBmy/ZosHBqoHBCFsN61qGg99F33vpntIVii8aNeh65XuOja73arSduskoa4OJea9RQ== - dependencies: - "@aws-sdk/middleware-sdk-s3" "^3.972.27" - "@aws-sdk/types" "^3.973.6" - "@smithy/protocol-http" "^5.3.12" - "@smithy/signature-v4" "^5.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.1021.0": - version "3.1021.0" - resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1021.0.tgz" - integrity sha512-TKY6h9spUk3OLs5v1oAgW9mAeBE3LAGNBwJokLy96wwmd4W2v/tYlXseProyed9ValDj2u1jK/4Rg1T+1NXyJA== - dependencies: - "@aws-sdk/core" "^3.973.26" - "@aws-sdk/nested-clients" "^3.996.18" - "@aws-sdk/types" "^3.973.6" - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/signature-v4-multi-region" "^3.996.35" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/fetch-http-handler" "^5.4.6" + "@smithy/node-http-handler" "^4.7.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/types@^3.222.0", "@aws-sdk/types@^3.973.6": - version "3.973.6" - resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz" - integrity sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw== +"@aws-sdk/signature-v4-multi-region@^3.996.35": + version "3.996.35" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.35.tgz#2994b9f33e84b9c74392b7495f89e5c958bda503" + integrity sha512-6L/VWs+Wch2stHemCGTmUNqKLMzURxQDK5boNG3Jn3kAOp71meDUuS5sbObpEvFxHDq0uWeSLFDNSYsjNt+Dlg== dependencies: - "@smithy/types" "^4.13.1" + "@aws-sdk/types" "^3.973.13" + "@smithy/signature-v4" "^5.4.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/util-arn-parser@^3.972.3": - version "3.972.3" - resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.3.tgz" - integrity sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA== +"@aws-sdk/token-providers@3.1071.0": + version "3.1071.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.1071.0.tgz#3302dafa1acdb097002496700160881b161a0148" + integrity sha512-4LDW2Qob6LoLFuqYSYZq2AyTE9koSE9+i+n5UZcm10GpmQOK0zRD9L4uYlzItiTKksIWgC/qMFChAi3RvKYtMg== dependencies: + "@aws-sdk/core" "^3.974.22" + "@aws-sdk/nested-clients" "^3.997.22" + "@aws-sdk/types" "^3.973.13" + "@smithy/core" "^3.24.6" + "@smithy/types" "^4.14.3" tslib "^2.6.2" -"@aws-sdk/util-endpoints@^3.996.5": - version "3.996.5" - resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.5.tgz" - integrity sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw== +"@aws-sdk/types@^3.222.0", "@aws-sdk/types@^3.973.13": + version "3.973.13" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.973.13.tgz#c076f611e94394a49c1bc1aeb64371ef6db4b3da" + integrity sha512-pEHZqRkAlHfnfAU9tK+WpKv/gBNjGJrHMgA3A0iYRGyswBS2t0pfez+lWlwktb3Bqa0ovh7w/QJTFwp3fDxLNg== dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-endpoints" "^3.3.3" + "@smithy/types" "^4.14.3" tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": - version "3.893.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz" - integrity sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg== + version "3.965.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.965.8.tgz#d9a6bede3c136f433441391615da68c924692487" + integrity sha512-uUbMs1cBZPafD0ohUj6EwNf0fPZ534NvBxHox4hjX+0Rxq5paSYUem7+hi833pYrzrcnBATKIYpR02MDXT5M9g== dependencies: tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@^3.972.8": - version "3.972.8" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.8.tgz" - integrity sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA== +"@aws-sdk/xml-builder@^3.972.30": + version "3.972.30" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.30.tgz#a52f9d8a69b1ceedb21012dd7830f098aa11102c" + integrity sha512-StElZPEoBquWwNqw1AcfpzEyZqJvFxouG+mpDNYlcH6ZOrqd2CuIryv+8LV8gNHZUOyKyJF3Dq9vxaXEmDR9TQ== dependencies: - "@aws-sdk/types" "^3.973.6" - "@smithy/types" "^4.13.1" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@^3.973.14": - version "3.973.14" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.14.tgz" - integrity sha512-vNSB/DYaPOyujVZBg/zUznH9QC142MaTHVmaFlF7uzzfg3CgT9f/l4C0Yi+vU/tbBhxVcXVB90Oohk5+o+ZbWw== - dependencies: - "@aws-sdk/middleware-user-agent" "^3.972.28" - "@aws-sdk/types" "^3.973.6" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-config-provider" "^4.2.2" - tslib "^2.6.2" - -"@aws-sdk/xml-builder@^3.972.16": - version "3.972.16" - resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.16.tgz" - integrity sha512-iu2pyvaqmeatIJLURLqx9D+4jKAdTH20ntzB6BFwjyN7V960r4jK32mx0Zf7YbtOYAbmbtQfDNuL60ONinyw7A== - dependencies: - "@smithy/types" "^4.13.1" - fast-xml-parser "5.5.8" + "@smithy/types" "^4.14.3" + fast-xml-parser "5.7.3" tslib "^2.6.2" "@aws/lambda-invoke-store@^0.2.2": version "0.2.4" - resolved "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz" + resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz#802f6a50f6b6589063ef63ba8acdee86fcb9f395" integrity sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ== -"@babel/helper-string-parser@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" - integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== +"@babel/helper-string-parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz#7f0871d99824d23137d60f86fcf6130fd5a1b51f" + integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== -"@babel/helper-validator-identifier@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz" - integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== +"@babel/helper-validator-identifier@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#bd87084ced0c796ec46bda492de6e83d29e89fc2" + integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== -"@babel/parser@^7.25.4", "@babel/parser@^7.29.2": - version "7.29.2" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz" - integrity sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA== +"@babel/parser@^7.25.4", "@babel/parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.7.tgz#837b87387cbf5ec5530cb634b3c622f68edb9334" + integrity sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg== dependencies: - "@babel/types" "^7.29.0" + "@babel/types" "^7.29.7" -"@babel/types@^7.25.4", "@babel/types@^7.29.0": - version "7.29.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz" - integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== +"@babel/types@^7.25.4", "@babel/types@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.7.tgz#8005e31d82712ee7adaef6e23c63b71a62770a92" + integrity sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA== dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.28.5" + "@babel/helper-string-parser" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" "@bcoe/v8-coverage@^1.0.2": version "1.0.2" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz#bbe12dca5b4ef983a0d0af4b07b9bc90ea0ababa" integrity sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA== "@colors/colors@1.5.0": @@ -608,9 +371,9 @@ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@emnapi/runtime@^1.7.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.10.0.tgz#4b260c0d3534204e98c6110b8db1a987d26ec87c" - integrity sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA== + version "1.11.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.11.1.tgz#58f1f3d5d81a9b12f793ab688c96371901027c24" + integrity sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw== dependencies: tslib "^2.4.0" @@ -627,7 +390,7 @@ "@envelop/core@^5.5.1": version "5.5.1" - resolved "https://registry.npmjs.org/@envelop/core/-/core-5.5.1.tgz" + resolved "https://registry.yarnpkg.com/@envelop/core/-/core-5.5.1.tgz#ca30c927b3a7d7f118d36111e17b355eedae9ff4" integrity sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw== dependencies: "@envelop/instrumentation" "^1.0.0" @@ -637,7 +400,7 @@ "@envelop/depth-limit@^7.1.1": version "7.1.1" - resolved "https://registry.npmjs.org/@envelop/depth-limit/-/depth-limit-7.1.1.tgz" + resolved "https://registry.yarnpkg.com/@envelop/depth-limit/-/depth-limit-7.1.1.tgz#8dadcbfdaf7b7b234195bf072cbac29ec022565c" integrity sha512-FH+uEgcgvlUEtDkKHUcUwHTCvcAm/wtDZaEqng/fCzM2MCsQm0QBSaCX+OiBzZxIh7J5f3yxWmAij0veIiy/0Q== dependencies: graphql-depth-limit "^1.1.0" @@ -645,7 +408,7 @@ "@envelop/instrumentation@^1.0.0": version "1.0.0" - resolved "https://registry.npmjs.org/@envelop/instrumentation/-/instrumentation-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/@envelop/instrumentation/-/instrumentation-1.0.0.tgz#43268392e065d8ba975cacbdf4fc297dfe3e11e5" integrity sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw== dependencies: "@whatwg-node/promise-helpers" "^1.2.1" @@ -653,7 +416,7 @@ "@envelop/types@^5.2.1": version "5.2.1" - resolved "https://registry.npmjs.org/@envelop/types/-/types-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/@envelop/types/-/types-5.2.1.tgz#6bc9713f2aea56d7de3ea39e8bb70035c0475b36" integrity sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg== dependencies: "@whatwg-node/promise-helpers" "^1.0.0" @@ -664,167 +427,299 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz#82b74f92aa78d720b714162939fb248c90addf53" integrity sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg== +"@esbuild/aix-ppc64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz#7a01a8d2ec2fbb2dac78adad09b0fa781e4082be" + integrity sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ== + "@esbuild/android-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz#f78cb8a3121fc205a53285adb24972db385d185d" integrity sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ== +"@esbuild/android-arm64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz#b540a27d14e4afd058496a4dbec4d3f414db110a" + integrity sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg== + "@esbuild/android-arm@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.7.tgz#593e10a1450bbfcac6cb321f61f468453bac209d" integrity sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ== +"@esbuild/android-arm@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.28.1.tgz#704bd297de6d762de54eabbeafbf55f6756abe2f" + integrity sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ== + "@esbuild/android-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.7.tgz#453143d073326033d2d22caf9e48de4bae274b07" integrity sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg== +"@esbuild/android-x64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.28.1.tgz#d1cb166d34b0fbf0fe8ab460a5594f24a378701e" + integrity sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng== + "@esbuild/darwin-arm64@0.27.7": version "0.27.7" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz#6f23000fb9b40b7e04b7d0606c0693bd0632f322" integrity sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw== +"@esbuild/darwin-arm64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz#1034b26457fc886368fe61bbd09f653f6afa8e54" + integrity sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q== + "@esbuild/darwin-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz#27393dd18bb1263c663979c5f1576e00c2d024be" integrity sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ== +"@esbuild/darwin-x64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz#65556a432a1e4d72032d8218c1932fcca1a49772" + integrity sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ== + "@esbuild/freebsd-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz#22e4638fa502d1c0027077324c97640e3adf3a62" integrity sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w== +"@esbuild/freebsd-arm64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz#2e61e0592f9030d7e3dae18ee25ebc535918aef6" + integrity sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw== + "@esbuild/freebsd-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz#9224b8e4fea924ce2194e3efc3e9aebf822192d6" integrity sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ== +"@esbuild/freebsd-x64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz#c95ec289959ef8079c4dca817a1e2c4be66b9bd3" + integrity sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ== + "@esbuild/linux-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz#4f5d1c27527d817b35684ae21419e57c2bda0966" integrity sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A== +"@esbuild/linux-arm64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz#40b22175dda06182f3ee8141186c5ff304c4a717" + integrity sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g== + "@esbuild/linux-arm@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz#b9e9d070c8c1c0449cf12b20eac37d70a4595921" integrity sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA== +"@esbuild/linux-arm@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz#c09a0f67917592ac0de892a9be4d3814debd2a6c" + integrity sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ== + "@esbuild/linux-ia32@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz#3f80fb696aa96051a94047f35c85b08b21c36f9e" integrity sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg== +"@esbuild/linux-ia32@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz#a580f9c676797833891e519fc7a1337c8afd8db3" + integrity sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w== + "@esbuild/linux-loong64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz#9be1f2c28210b13ebb4156221bba356fe1675205" integrity sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q== +"@esbuild/linux-loong64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz#46452cf321dc7f9e91c2fa780a56bb56e79cd68b" + integrity sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg== + "@esbuild/linux-mips64el@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz#4ab5ee67a3dfcbcb5e8fd7883dae6e735b1163b8" integrity sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw== +"@esbuild/linux-mips64el@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz#4211b3184dd6608f53dcb22e39f5d34ee08852c8" + integrity sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ== + "@esbuild/linux-ppc64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz#dac78c689f6499459c4321e5c15032c12307e7ea" integrity sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ== +"@esbuild/linux-ppc64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz#697857c2a61cb9b0b6bb6652e40c1dc5e1ca8e5d" + integrity sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ== + "@esbuild/linux-riscv64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz#050f7d3b355c3a98308e935bc4d6325da91b0027" integrity sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ== +"@esbuild/linux-riscv64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz#d192943eb146a40ac4c6497d0cf7be35b986bf08" + integrity sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ== + "@esbuild/linux-s390x@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz#d61f715ce61d43fe5844ad0d8f463f88cbe4fef6" integrity sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw== +"@esbuild/linux-s390x@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz#acea0356da0e0ebc08f97cf7b9c2e401e1e648dc" + integrity sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag== + "@esbuild/linux-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz#ca8e1aa478fc8209257bf3ac8f79c4dc2982f32a" integrity sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA== +"@esbuild/linux-x64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz#6f0c3ce0cb64c534b70c4c45ecb2c16d34e35dfd" + integrity sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA== + "@esbuild/netbsd-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz#1650f2c1b948deeb3ef948f2fc30614723c09690" integrity sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w== +"@esbuild/netbsd-arm64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz#8bcd77077a0dce3378b574fedb26d2a253b73d36" + integrity sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw== + "@esbuild/netbsd-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz#65772ab342c4b3319bf0705a211050aac1b6e320" integrity sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw== +"@esbuild/netbsd-x64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz#e7fb2a01e99c830c94e6623cd9fefb4c8fb58347" + integrity sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg== + "@esbuild/openbsd-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz#37ed7cfa66549d7955852fce37d0c3de4e715ea1" integrity sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A== +"@esbuild/openbsd-arm64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz#c52909372db8b86e2c55e05a8940033b5660a3b2" + integrity sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q== + "@esbuild/openbsd-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz#01bf3d385855ef50cb33db7c4b52f957c34cd179" integrity sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg== +"@esbuild/openbsd-x64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz#c427b9be5a64c262ff9a7eb70b5fbbaadf446c6c" + integrity sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw== + "@esbuild/openharmony-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz#6c1f94b34086599aabda4eac8f638294b9877410" integrity sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw== +"@esbuild/openharmony-arm64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz#dc9b147baca2e6c4b3c85571741ef4860a489097" + integrity sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg== + "@esbuild/sunos-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz#4b0dd17ae0a6941d2d0fd35a906392517071a90d" integrity sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA== +"@esbuild/sunos-x64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz#ce866d12df13c15e4c99f073a3d466f6e0649b3a" + integrity sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ== + "@esbuild/win32-arm64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz#34193ab5565d6ff68ca928ac04be75102ccb2e77" integrity sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA== +"@esbuild/win32-arm64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz#7468e3692d01d629d5941e5d83817bb80f9e39b4" + integrity sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA== + "@esbuild/win32-ia32@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz#eb67f0e4482515d8c1894ede631c327a4da9fc4d" integrity sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw== +"@esbuild/win32-ia32@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz#a5bc0063fb2bcab6d0ed63f2a1537958bc269ec6" + integrity sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg== + "@esbuild/win32-x64@0.27.7": version "0.27.7" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz#8fe30b3088b89b4873c3a6cc87597ae3920c0a8b" integrity sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.9.1": +"@esbuild/win32-x64@0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz#10064ee44f4347b90c9a02b446bbf80a91632b12" + integrity sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A== + +"@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1": version "4.9.1" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== dependencies: eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2": version "4.12.2" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/config-array@^0.21.0": - version "0.21.0" - resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz" - integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== +"@eslint/config-array@^0.21.2": + version "0.21.2" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.2.tgz#f29e22057ad5316cf23836cee9a34c81fffcb7e6" + integrity sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw== dependencies: - "@eslint/object-schema" "^2.1.6" + "@eslint/object-schema" "^2.1.7" debug "^4.3.1" - minimatch "^3.1.2" + minimatch "^3.1.5" -"@eslint/config-helpers@^0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz" - integrity sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA== +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== + dependencies: + "@eslint/core" "^0.17.0" -"@eslint/core@^0.15.2": - version "0.15.2" - resolved "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz" - integrity sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg== +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== dependencies: "@types/json-schema" "^7.0.15" -"@eslint/eslintrc@^3.3.1", "@eslint/eslintrc@^3.3.5": +"@eslint/eslintrc@^3.3.5": version "3.3.5" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.5.tgz#c131793cfc1a7b96f24a83e0a8bbd4b881558c60" integrity sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg== dependencies: ajv "^6.14.0" @@ -837,32 +732,32 @@ minimatch "^3.1.5" strip-json-comments "^3.1.1" -"@eslint/js@9.33.0": - version "9.33.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz" - integrity sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A== +"@eslint/js@9.39.4": + version "9.39.4" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.4.tgz#a3f83bfc6fd9bf33a853dfacd0b49b398eb596c1" + integrity sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw== -"@eslint/object-schema@^2.1.6": - version "2.1.6" - resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz" - integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== -"@eslint/plugin-kit@^0.3.5": - version "0.3.5" - resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz" - integrity sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w== +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== dependencies: - "@eslint/core" "^0.15.2" + "@eslint/core" "^0.17.0" levn "^0.4.1" "@fastify/busboy@^3.1.1": version "3.2.0" - resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-3.2.0.tgz#13ed8212f3b9ba697611529d15347f8528058cea" integrity sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA== "@google-cloud/paginator@^5.0.0": version "5.0.2" - resolved "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-5.0.2.tgz#86ad773266ce9f3b82955a8f75e22cd012ccc889" integrity sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg== dependencies: arrify "^2.0.0" @@ -870,18 +765,18 @@ "@google-cloud/projectify@^4.0.0": version "4.0.0" - resolved "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-4.0.0.tgz#d600e0433daf51b88c1fa95ac7f02e38e80a07be" integrity sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA== "@google-cloud/promisify@<4.1.0": version "4.0.0" - resolved "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-4.0.0.tgz#a906e533ebdd0f754dca2509933334ce58b8c8b1" integrity sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g== "@google-cloud/storage@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.19.0.tgz" - integrity sha512-n2FjE7NAOYyshogdc7KQOl/VZb4sneqPjWouSyia9CMDdMhRX5+RIbqalNmC7LOLzuLAN89VlF2HvG8na9G+zQ== + version "7.21.0" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-7.21.0.tgz#46b89afbdc3014e18b60afdfba5d9212a23e7b58" + integrity sha512-l+IFTkd+6Y5LoAuXyYCKNAKtw/Ci+rAMqgdTB1jv4iZiLhw0rtq+0qjIRbBizXkNzEFmXiXUW0H7sZQQvk1ffA== dependencies: "@google-cloud/paginator" "^5.0.0" "@google-cloud/projectify" "^4.0.0" @@ -897,40 +792,39 @@ p-limit "^3.0.1" retry-request "^7.0.0" teeny-request "^9.0.0" - uuid "^8.0.0" "@graphql-tools/executor@^1.5.0": - version "1.5.1" - resolved "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.5.1.tgz" - integrity sha512-n94Qcu875Mji9GQ52n5UbgOTxlgvFJicBPYD+FRks9HKIQpdNPjkkrKZUYNG51XKa+bf03rxNflm4+wXhoHHrA== + version "1.5.3" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-1.5.3.tgz#3c567ec4854fe8ed69eb6a890e41db7bdae2b0bc" + integrity sha512-mgBFC0bsrZPZLu9EnydpMnAuQ8Iiq0CEbUcsmvXsm2/iYektGHDN/+bmb7hicA6dWZtdPfklYJmr21WD0GnOfA== dependencies: - "@graphql-tools/utils" "^11.0.0" + "@graphql-tools/utils" "^11.1.0" "@graphql-typed-document-node/core" "^3.2.0" "@repeaterjs/repeater" "^3.0.4" "@whatwg-node/disposablestack" "^0.0.6" "@whatwg-node/promise-helpers" "^1.0.0" tslib "^2.4.0" -"@graphql-tools/merge@^9.1.7": - version "9.1.7" - resolved "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.1.7.tgz" - integrity sha512-Y5E1vTbTabvcXbkakdFUt4zUIzB1fyaEnVmIWN0l0GMed2gdD01TpZWLUm4RNAxpturvolrb24oGLQrBbPLSoQ== +"@graphql-tools/merge@^9.1.9": + version "9.1.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-9.1.9.tgz#d5b042ef11695ca130a36477e25786100353609b" + integrity sha512-iHUWNjRHeQRYdgIMIuChThOwoKzA9vrzYeslgfBo5eUYEyHGZCoDPjAavssoYXLwstYt1dZj2J22jSzc2DrN0Q== dependencies: - "@graphql-tools/utils" "^11.0.0" + "@graphql-tools/utils" "^11.1.0" tslib "^2.4.0" "@graphql-tools/schema@^10.0.11", "@graphql-tools/schema@^10.0.31": - version "10.0.31" - resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.31.tgz" - integrity sha512-ZewRgWhXef6weZ0WiP7/MV47HXiuFbFpiDUVLQl6mgXsWSsGELKFxQsyUCBos60Qqy1JEFAIu3Ns6GGYjGkqkQ== + version "10.0.33" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-10.0.33.tgz#147d70aa9bb12123ffca2c091be1f3f3ec592911" + integrity sha512-O6P3RIftO0jafnSsFAqpjurUuUxJ43s/AdPVLQsBkI6y4Ic/tKm4C1Qm1KKQsCDTOxXPJClh/v3g7k7yLKCFBQ== dependencies: - "@graphql-tools/merge" "^9.1.7" - "@graphql-tools/utils" "^11.0.0" + "@graphql-tools/merge" "^9.1.9" + "@graphql-tools/utils" "^11.1.0" tslib "^2.4.0" "@graphql-tools/utils@^10.11.0": version "10.11.0" - resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.11.0.tgz" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-10.11.0.tgz#2513dca9ca25bab5a2651da2d66c37b1e2616bdf" integrity sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q== dependencies: "@graphql-typed-document-node/core" "^3.1.1" @@ -938,10 +832,10 @@ cross-inspect "1.0.1" tslib "^2.4.0" -"@graphql-tools/utils@^11.0.0": - version "11.0.0" - resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-11.0.0.tgz" - integrity sha512-bM1HeZdXA2C3LSIeLOnH/bcqSgbQgKEDrjxODjqi3y58xai2TkNrtYcQSoWzGbt9VMN1dORGjR7Vem8SPnUFQA== +"@graphql-tools/utils@^11.1.0": + version "11.1.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-11.1.0.tgz#03593c3ae1177e04a3620c688fd29df912aa094f" + integrity sha512-PtFVG4r8Z2LEBSaPYQMusBiB3o6kjLVJyjCLbnWem/SpSuM21v6LTmgpkXfYU1qpBV2UGsFyuEnSJInl8fR1Ag== dependencies: "@graphql-typed-document-node/core" "^3.1.1" "@whatwg-node/promise-helpers" "^1.0.0" @@ -950,19 +844,19 @@ "@graphql-typed-document-node/core@^3.1.1", "@graphql-typed-document-node/core@^3.2.0": version "3.2.0" - resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== "@graphql-yoga/logger@^2.0.1": version "2.0.1" - resolved "https://registry.npmjs.org/@graphql-yoga/logger/-/logger-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/@graphql-yoga/logger/-/logger-2.0.1.tgz#b3d18371c07bb2fe03417e3920ddcaebb2ee0262" integrity sha512-Nv0BoDGLMg9QBKy9cIswQ3/6aKaKjlTh87x3GiBg2Z4RrjyrM48DvOOK0pJh1C1At+b0mUIM67cwZcFTDLN4sA== dependencies: tslib "^2.8.1" "@graphql-yoga/subscription@^5.0.5": version "5.0.5" - resolved "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-5.0.5.tgz" + resolved "https://registry.yarnpkg.com/@graphql-yoga/subscription/-/subscription-5.0.5.tgz#55e1dc472de866185d7c122e2c534023a331f65c" integrity sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw== dependencies: "@graphql-yoga/typed-event-target" "^3.0.2" @@ -972,48 +866,51 @@ "@graphql-yoga/typed-event-target@^3.0.2": version "3.0.2" - resolved "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz#af29ed2a5a84062ffab8e404b335ec4d4c37ceb4" integrity sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA== dependencies: "@repeaterjs/repeater" "^3.0.4" tslib "^2.8.1" -"@humanfs/core@^0.19.1": - version "0.19.1" - resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz" - integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== +"@humanfs/core@^0.19.2": + version "0.19.2" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.2.tgz#a8272ca03b2acf492670222b2320b6c421bfde60" + integrity sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA== + dependencies: + "@humanfs/types" "^0.15.0" "@humanfs/node@^0.16.6": - version "0.16.6" - resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz" - integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + version "0.16.8" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.8.tgz#8f800cccc13f4f8cd3116e2d9c0a94939da3e3ed" + integrity sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ== dependencies: - "@humanfs/core" "^0.19.1" - "@humanwhocodes/retry" "^0.3.0" + "@humanfs/core" "^0.19.2" + "@humanfs/types" "^0.15.0" + "@humanwhocodes/retry" "^0.4.0" + +"@humanfs/types@^0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@humanfs/types/-/types-0.15.0.tgz#f2a09f62012390b2bff3fc6fb248ddec8c09a090" + integrity sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q== "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/retry@^0.3.0": - version "0.3.1" - resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz" - integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== - -"@humanwhocodes/retry@^0.4.2": +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": version "0.4.3" - resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== "@img/colour@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz" - integrity sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/colour/-/colour-1.1.0.tgz#b0c2c2fa661adf75effd6b4964497cd80010bb9d" + integrity sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ== "@img/sharp-darwin-arm64@0.34.5": version "0.34.5" - resolved "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz#6e0732dcade126b6670af7aa17060b926835ea86" integrity sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w== optionalDependencies: "@img/sharp-libvips-darwin-arm64" "1.2.4" @@ -1027,7 +924,7 @@ "@img/sharp-libvips-darwin-arm64@1.2.4": version "1.2.4" - resolved "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz#2894c0cb87d42276c3889942e8e2db517a492c43" integrity sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g== "@img/sharp-libvips-darwin-x64@1.2.4": @@ -1153,14 +1050,19 @@ resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz#a81ffb00e69267cd0a1d626eaedb8a8430b2b2f8" integrity sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw== +"@ioredis/commands@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.10.0.tgz#cc387f8ec5ebe5b3b5104d393b5ac1f9cf794b9a" + integrity sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q== + "@ioredis/commands@1.5.1": version "1.5.1" - resolved "https://registry.npmjs.org/@ioredis/commands/-/commands-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.5.1.tgz#a0a3449993b10c7aeb91ecb0d5f1a23692297e51" integrity sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw== "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -1172,12 +1074,12 @@ "@istanbuljs/schema@^0.1.2": version "0.1.6" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.6.tgz#8dc9afa2ac1506cb1a58f89940f1c124446c8df3" integrity sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw== "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" @@ -1185,67 +1087,67 @@ "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": version "1.5.5" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.31": version "0.3.31" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@mongodb-js/saslprep@^1.3.0": - version "1.3.1" - resolved "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.1.tgz" - integrity sha512-6nZrq5kfAz0POWyhljnbWQQJQ5uT8oE2ddX303q1uY0tWsivWKgBDXBBvuFPwOqRRalXJuVO9EjOdVtuhLX0zg== + version "1.4.11" + resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.4.11.tgz#3fae1bf22a6e485ea42d26e46d06e49c8eadb86b" + integrity sha512-o9rAHc0IpIjuPSxRutWpE1F62x7n+4mVS4rCNHkzhIUMQcc18bb6xEq5wd2NdN0WjepIyXIppRshYI2kQDOZVA== dependencies: sparse-bitfield "^3.0.3" -"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3": - 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== +"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz#22619f76a6b10ba78c8b74025b0d9754cad69cc7" + integrity sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ== -"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz#33677a275204898ad8acbf62734fc4dc0b6a4855" - integrity sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw== +"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz#c2fc0573afe08b0cf213e66eef76842b121d1577" + integrity sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w== -"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz#19edf7cdc2e7063ee328403c1d895a86dd28f4bb" - integrity sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg== +"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz#4e3822f5522e18ed92611b894dc5db1bc882f39d" + integrity sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw== -"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz#94fb0543ba2e28766c3fc439cabbe0440ae70159" - integrity sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw== +"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz#27ec4bc7eb6c311c982a50f1a6e1e1414638a6f8" + integrity sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw== -"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz#4a0609ab5fe44d07c9c60a11e4484d3c38bbd6e3" - integrity sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg== +"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz#37317d833c7d01d086f6155fa59c478adb6839f6" + integrity sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ== -"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz#0aa5502d547b57abfc4ac492de68e2006e417242" - integrity sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ== +"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz#a1c79dcc9ae5f8c02aea8c2f144e5af6a822e5e8" + integrity sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ== "@nodable/entities@^2.1.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@nodable/entities/-/entities-2.1.1.tgz#ce41931e9b72606d7f0598d665e46e889285d78a" - integrity sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@nodable/entities/-/entities-2.2.0.tgz#a1d45a992b022591b1c2b03a77935c939375b642" + integrity sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg== "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1253,12 +1155,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -1266,653 +1168,262 @@ "@pinojs/redact@^0.4.0": version "0.4.0" - resolved "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/@pinojs/redact/-/redact-0.4.0.tgz#c3de060dd12640dcc838516aa2a6803cc7b2e9d6" integrity sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg== "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@pkgr/core@^0.2.9": - version "0.2.9" - resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz" - integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== +"@pkgr/core@^0.3.6": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.3.6.tgz#3569708bd4be4d8870ba32bf1c456dac81600d97" + integrity sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA== "@repeaterjs/repeater@^3.0.4": - version "3.0.6" - resolved "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz" - integrity sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA== - -"@rolldown/pluginutils@1.0.0-rc.2": - version "1.0.0-rc.2" - resolved "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz" - integrity sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw== - -"@rollup/rollup-android-arm-eabi@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz#a19c645c375158cd5c50a344106f0fa18eb821c4" - integrity sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw== - -"@rollup/rollup-android-arm64@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz#1af19aa9d3ad6d00df2681f59cfcb8bf7499576b" - integrity sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg== - -"@rollup/rollup-darwin-arm64@4.60.2": - version "4.60.2" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz" - integrity sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA== - -"@rollup/rollup-darwin-x64@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz#28da23d69fe117f5f0ff330a8549e51bd09f1b6a" - integrity sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g== - -"@rollup/rollup-freebsd-arm64@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz#94bacac3190f621de1355922b599f3817786044c" - integrity sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw== - -"@rollup/rollup-freebsd-x64@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz#8a0094f533b9fda160b5c90ad9e0c78fca341788" - integrity sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz#3b7e901a555c7245c87f7440979bee0a1ec882bb" - integrity sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg== - -"@rollup/rollup-linux-arm-musleabihf@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz#ee9a09b72e8ad764cfd6188b32ff1de528ff7ebe" - integrity sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw== - -"@rollup/rollup-linux-arm64-gnu@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz#ba483f4aca9be141171d086dbd01ada6ab03b58d" - integrity sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg== - -"@rollup/rollup-linux-arm64-musl@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz#17b595b790e6df68e91c5d02526fc832a985ce4f" - integrity sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA== - -"@rollup/rollup-linux-loong64-gnu@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz#551718714075a2bfb36a2813c466e3a0e9d56abf" - integrity sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A== - -"@rollup/rollup-linux-loong64-musl@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz#ba156ed1243447a3d710972001d5dcfe3827ff3d" - integrity sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q== - -"@rollup/rollup-linux-ppc64-gnu@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz#6a957a709b86ac62ef68e597ac03dbd4336782b1" - integrity sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw== - -"@rollup/rollup-linux-ppc64-musl@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz#ca4176b4ad53f3edee3b4bfa6f9ef48ff38f167b" - integrity sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ== - -"@rollup/rollup-linux-riscv64-gnu@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz#4e6b08f72ebeafdb41f3ec433bd228ba8573473b" - integrity sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A== - -"@rollup/rollup-linux-riscv64-musl@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz#a0b8b8580c7680c8086cb3226527e5472253b895" - integrity sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ== - -"@rollup/rollup-linux-s390x-gnu@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz#79fe15b92ce0bae2b609cf26dd158cd3e2b73634" - integrity sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA== - -"@rollup/rollup-linux-x64-gnu@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz#6aa8302fa45fd3cbbc510ccd223c9c37bf67e53f" - integrity sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ== - -"@rollup/rollup-linux-x64-musl@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz#0c1a5e9799f80c47a66f2c3a5f1a280f38356047" - integrity sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw== - -"@rollup/rollup-openbsd-x64@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz#5f07c863e74fd428794f1dc5749f321b661d1f17" - integrity sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg== - -"@rollup/rollup-openharmony-arm64@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz#8e0d71324be0f423428b12b25a2eb8ea8e0a7833" - integrity sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q== - -"@rollup/rollup-win32-arm64-msvc@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz#a553fdf90a785ace6d7501eed6241c468b088999" - integrity sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ== - -"@rollup/rollup-win32-ia32-msvc@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz#0fb04f0a88027fbfd323e25a446debce4773868c" - integrity sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg== - -"@rollup/rollup-win32-x64-gnu@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz#aaa9e36dbdc0f0e397e5966dcce1b4285354ede2" - integrity sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA== - -"@rollup/rollup-win32-x64-msvc@4.60.2": - version "4.60.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz#3418dcf1388f2abd6b0ccc08fe1ef205ae76d696" - integrity sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA== - -"@smithy/chunked-blob-reader-native@^4.2.3": - version "4.2.3" - resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.3.tgz" - integrity sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw== - dependencies: - "@smithy/util-base64" "^4.3.2" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^5.2.2": - version "5.2.2" - resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.2.tgz" - integrity sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^4.4.13": - version "4.4.13" - resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.13.tgz" - integrity sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg== - dependencies: - "@smithy/node-config-provider" "^4.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-config-provider" "^4.2.2" - "@smithy/util-endpoints" "^3.3.3" - "@smithy/util-middleware" "^4.2.12" - tslib "^2.6.2" - -"@smithy/core@^3.23.13": - version "3.23.13" - resolved "https://registry.npmjs.org/@smithy/core/-/core-3.23.13.tgz" - integrity sha512-J+2TT9D6oGsUVXVEMvz8h2EmdVnkBiy2auCie4aSJMvKlzUtO5hqjEzXhoCUkIMo7gAYjbQcN0g/MMSXEhDs1Q== - dependencies: - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-body-length-browser" "^4.2.2" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-stream" "^4.5.21" - "@smithy/util-utf8" "^4.2.2" - "@smithy/uuid" "^1.1.2" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.12.tgz" - integrity sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg== - dependencies: - "@smithy/node-config-provider" "^4.3.12" - "@smithy/property-provider" "^4.2.12" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - tslib "^2.6.2" + version "3.1.0" + resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.1.0.tgz#312b20a655e5b3ebfe8b1e04ec7df567bcb48d87" + integrity sha512-TaoVksZRSx2KWYYpyLQtMQXXeS98VsgZImzW65xmiVgbYhXLk+aEsmzPLirqVuE4/XuUapH2iMtxUzaBNDzdSQ== -"@smithy/eventstream-codec@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.12.tgz" - integrity sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA== +"@rolldown/pluginutils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz#e3fcee093fbb5ce765e1ad088ff4de2889f6f9be" + integrity sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw== + +"@rollup/rollup-android-arm-eabi@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz#5e9849b661c2229cf967a08dbe2dbbe9e8c991e5" + integrity sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg== + +"@rollup/rollup-android-arm64@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz#5b0699ee5dd484b222c9ed74aff43c91ea8b17f8" + integrity sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw== + +"@rollup/rollup-darwin-arm64@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz#8bc52c9d7a3ce8d0533c351a9c935de781daa06f" + integrity sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A== + +"@rollup/rollup-darwin-x64@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz#ba2ef3e8fb310f0af35588f270cfa5aa96e48764" + integrity sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA== + +"@rollup/rollup-freebsd-arm64@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz#93b10bdbfe8ada226b8bc0c02ef6b7f544474d96" + integrity sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw== + +"@rollup/rollup-freebsd-x64@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz#3e8aa38ef3c9c300946871e3fdbb0c30e0a20f86" + integrity sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg== + +"@rollup/rollup-linux-arm-gnueabihf@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz#1d7994384bb0ad1bc41921b506e1642d4f9d7fc3" + integrity sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg== + +"@rollup/rollup-linux-arm-musleabihf@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz#a6540f47cf844a56b80ca9ff95d2acdfb2cef97b" + integrity sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA== + +"@rollup/rollup-linux-arm64-gnu@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz#404f2045651840cbf48da91ba6d0f490f0bc2cbf" + integrity sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA== + +"@rollup/rollup-linux-arm64-musl@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz#a3404ffddf7b474b48c99b9c893b6247bb765ba5" + integrity sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ== + +"@rollup/rollup-linux-loong64-gnu@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz#e8aac6d549b377945e349882f199b7c8eb75ca38" + integrity sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg== + +"@rollup/rollup-linux-loong64-musl@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz#6e2e44ea50310b3a582078a915e5feb879c820d4" + integrity sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ== + +"@rollup/rollup-linux-ppc64-gnu@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz#6898302da6d77a0537cde64b2b4c6b60659bd110" + integrity sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A== + +"@rollup/rollup-linux-ppc64-musl@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz#333717c95dd5a66bef8f63e7ef8a9fd845fd18d0" + integrity sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w== + +"@rollup/rollup-linux-riscv64-gnu@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz#81bc06ba380352004d01f4826eb7cdccefa05bad" + integrity sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg== + +"@rollup/rollup-linux-riscv64-musl@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz#95a7cd39de21389ad6788a5284eaaa738e29ca4c" + integrity sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q== + +"@rollup/rollup-linux-s390x-gnu@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz#06e6db2ec1bc48b5374c7923ef83c2eb024b2452" + integrity sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg== + +"@rollup/rollup-linux-x64-gnu@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz#5dc818988285e09e88790c6462def72413df2da3" + integrity sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A== + +"@rollup/rollup-linux-x64-musl@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz#2080f4a93349e9afd34be6fc1a37e01fc8bfc80f" + integrity sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg== + +"@rollup/rollup-openbsd-x64@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz#21d64a8acb66221724b923e51af5333df1af044b" + integrity sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg== + +"@rollup/rollup-openharmony-arm64@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz#8e0fcd9d02141e337b4c5b5cff576cb9a76b1ba0" + integrity sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA== + +"@rollup/rollup-win32-arm64-msvc@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz#bdb4cc4efd58efe808203347f0f5463f0ea16e52" + integrity sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg== + +"@rollup/rollup-win32-ia32-msvc@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz#dbaebde5afd24eae0eefe915d901632e7cb59860" + integrity sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q== + +"@rollup/rollup-win32-x64-gnu@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz#84109e85fea5f8f1353499f96578fdc2a0e8b138" + integrity sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg== + +"@rollup/rollup-win32-x64-msvc@4.62.2": + version "4.62.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz#3671ce3f9b928d5c01f879792d5c0b60ae14d4ad" + integrity sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA== + +"@smithy/core@^3.24.6", "@smithy/core@^3.25.1": + version "3.25.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.25.1.tgz#93d342dd50a82973fcbb7b562f17a6f0e2a20009" + integrity sha512-zpDbpXBCBsxfLtG2GEUyfgvHvSFrw5CwDZSNzL0v52gx/c3oPlPbm+7W7num8xs6vyiUBn+bvYPHcQDOXZynCQ== dependencies: "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^4.13.1" - "@smithy/util-hex-encoding" "^4.2.2" + "@smithy/types" "^4.15.0" tslib "^2.6.2" -"@smithy/eventstream-serde-browser@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.12.tgz" - integrity sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A== - dependencies: - "@smithy/eventstream-serde-universal" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^4.3.12": - version "4.3.12" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.12.tgz" - integrity sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.12.tgz" - integrity sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA== - dependencies: - "@smithy/eventstream-serde-universal" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.12.tgz" - integrity sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ== - dependencies: - "@smithy/eventstream-codec" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^5.3.15": - version "5.3.15" - resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.15.tgz" - integrity sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A== - dependencies: - "@smithy/protocol-http" "^5.3.12" - "@smithy/querystring-builder" "^4.2.12" - "@smithy/types" "^4.13.1" - "@smithy/util-base64" "^4.3.2" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^4.2.13": - version "4.2.13" - resolved "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.13.tgz" - integrity sha512-YrF4zWKh+ghLuquldj6e/RzE3xZYL8wIPfkt0MqCRphVICjyyjH8OwKD7LLlKpVEbk4FLizFfC1+gwK6XQdR3g== - dependencies: - "@smithy/chunked-blob-reader" "^5.2.2" - "@smithy/chunked-blob-reader-native" "^4.2.3" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/hash-node@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.12.tgz" - integrity sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w== - dependencies: - "@smithy/types" "^4.13.1" - "@smithy/util-buffer-from" "^4.2.2" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.12.tgz" - integrity sha512-O3YbmGExeafuM/kP7Y8r6+1y0hIh3/zn6GROx0uNlB54K9oihAL75Qtc+jFfLNliTi6pxOAYZrRKD9A7iA6UFw== +"@smithy/credential-provider-imds@^4.3.7": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.4.1.tgz#159ac9a8af797c7951c73ad4840510acb2b678e7" + integrity sha512-TSAF5NHgxEsllbErYWbK8aLnl5L601NGc5VYJlSPsKnf3YlkhdoBN+geGcaU00oiw2OK3QO5LA3QNXiiWhCidQ== dependencies: - "@smithy/types" "^4.13.1" - "@smithy/util-utf8" "^4.2.2" + "@smithy/core" "^3.25.1" + "@smithy/types" "^4.15.0" tslib "^2.6.2" -"@smithy/invalid-dependency@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.12.tgz" - integrity sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g== +"@smithy/fetch-http-handler@^5.4.6": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.5.1.tgz#ac333e1a210f08fd50dd1a74807420981ba7f531" + integrity sha512-96JrD1q71anokymx9Iblb+zKmNQYNstlV/25A9ZYIJ2A0rp1r7/GZAIm0bDWSmVvz3DpNOCZuabzsiL+w0UHhw== dependencies: - "@smithy/types" "^4.13.1" + "@smithy/core" "^3.25.1" + "@smithy/types" "^4.15.0" tslib "^2.6.2" "@smithy/is-array-buffer@^2.2.0": version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== dependencies: tslib "^2.6.2" -"@smithy/is-array-buffer@^4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz" - integrity sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow== - dependencies: - tslib "^2.6.2" - -"@smithy/md5-js@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.12.tgz" - integrity sha512-W/oIpHCpWU2+iAkfZYyGWE+qkpuf3vEXHLxQQDx9FPNZTTdnul0dZ2d/gUFrtQ5je1G2kp4cjG0/24YueG2LbQ== - dependencies: - "@smithy/types" "^4.13.1" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.12.tgz" - integrity sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA== - dependencies: - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - "@smithy/middleware-endpoint@^4.4.28": - version "4.4.28" - resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.28.tgz" - integrity sha512-p1gfYpi91CHcs5cBq982UlGlDrxoYUX6XdHSo91cQ2KFuz6QloHosO7Jc60pJiVmkWrKOV8kFYlGFFbQ2WUKKQ== - dependencies: - "@smithy/core" "^3.23.13" - "@smithy/middleware-serde" "^4.2.16" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - "@smithy/url-parser" "^4.2.12" - "@smithy/util-middleware" "^4.2.12" - tslib "^2.6.2" - -"@smithy/middleware-retry@^4.4.46": - version "4.4.46" - resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.46.tgz" - integrity sha512-SpvWNNOPOrKQGUqZbEPO+es+FRXMWvIyzUKUOYdDgdlA6BdZj/R58p4umoQ76c2oJC44PiM7mKizyyex1IJzow== + version "4.6.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.6.1.tgz#3b6777e4971101794eb58949041ef2603f06a5a8" + integrity sha512-TgyNn9dd8oC87+9M5Iarpf0Nr8UTtlJW0FwEMtZHc6CbhD2NZDv9kYapnnLPmhdIOvX/XDatn26Cl9UhdZJsNQ== dependencies: - "@smithy/node-config-provider" "^4.3.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/service-error-classification" "^4.2.12" - "@smithy/smithy-client" "^4.12.8" - "@smithy/types" "^4.13.1" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-retry" "^4.2.13" - "@smithy/uuid" "^1.1.2" + "@smithy/core" "^3.25.1" tslib "^2.6.2" -"@smithy/middleware-serde@^4.2.16": - version "4.2.16" - resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.16.tgz" - integrity sha512-beqfV+RZ9RSv+sQqor3xroUUYgRFCGRw6niGstPG8zO9LgTl0B0MCucxjmrH/2WwksQN7UUgI7KNANoZv+KALA== +"@smithy/node-http-handler@^4.7.6": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.8.1.tgz#7202ab67a2d48994e9b49a3a8cd5e1d710dbe359" + integrity sha512-emtXvoky671puri18ETf64AFIQUGIEA093F2drXpBgB0OGnBLjcwNR3CA2mYu62IAqNsS56xa5lnTxAgPq7cjw== dependencies: - "@smithy/core" "^3.23.13" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/middleware-stack@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.12.tgz" - integrity sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/node-config-provider@^4.3.12": - version "4.3.12" - resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.12.tgz" - integrity sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw== - dependencies: - "@smithy/property-provider" "^4.2.12" - "@smithy/shared-ini-file-loader" "^4.4.7" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/node-http-handler@^4.5.1": - version "4.5.1" - resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.5.1.tgz" - integrity sha512-ejjxdAXjkPIs9lyYyVutOGNOraqUE9v/NjGMKwwFrfOM354wfSD8lmlj8hVwUzQmlLLF4+udhfCX9Exnbmvfzw== - dependencies: - "@smithy/protocol-http" "^5.3.12" - "@smithy/querystring-builder" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/property-provider@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.12.tgz" - integrity sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A== - dependencies: - "@smithy/types" "^4.13.1" + "@smithy/core" "^3.25.1" + "@smithy/types" "^4.15.0" tslib "^2.6.2" "@smithy/protocol-http@^5.3.12": - version "5.3.12" - resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.12.tgz" - integrity sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/querystring-builder@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.12.tgz" - integrity sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg== - dependencies: - "@smithy/types" "^4.13.1" - "@smithy/util-uri-escape" "^4.2.2" - tslib "^2.6.2" - -"@smithy/querystring-parser@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.12.tgz" - integrity sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/service-error-classification@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.12.tgz" - integrity sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ== - dependencies: - "@smithy/types" "^4.13.1" - -"@smithy/shared-ini-file-loader@^4.4.7": - version "4.4.7" - resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.7.tgz" - integrity sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw== + version "5.5.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.5.1.tgz#7234afacc8246ab7cd1900b4b91fc297bc7f0cce" + integrity sha512-GRQofBqr/pPNjR04mU0JjdjsbV8F33KCxSHMFXBb2mWJXxyEalNe814Y4cFd4Efd5tNucaOc31L3/8wXlymjfg== dependencies: - "@smithy/types" "^4.13.1" + "@smithy/core" "^3.25.1" tslib "^2.6.2" -"@smithy/signature-v4@^5.3.12": - version "5.3.12" - resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.12.tgz" - integrity sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw== +"@smithy/signature-v4@^5.4.6": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.5.1.tgz#e669088e22ded3cebc296b40e6b28cbfb37254dc" + integrity sha512-X9rVls3En0z3NtrmguTmpRM0/NqtWUxBjal6fcAkwtsub+gOdLZ6kD+V7xhUgFMGdG14bHbZ7M5QjaRI1+DatQ== dependencies: - "@smithy/is-array-buffer" "^4.2.2" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-hex-encoding" "^4.2.2" - "@smithy/util-middleware" "^4.2.12" - "@smithy/util-uri-escape" "^4.2.2" - "@smithy/util-utf8" "^4.2.2" + "@smithy/core" "^3.25.1" + "@smithy/types" "^4.15.0" tslib "^2.6.2" "@smithy/smithy-client@^4.12.8": - version "4.12.8" - resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.8.tgz" - integrity sha512-aJaAX7vHe5i66smoSSID7t4rKY08PbD8EBU7DOloixvhOozfYWdcSYE4l6/tjkZ0vBZhGjheWzB2mh31sLgCMA== - dependencies: - "@smithy/core" "^3.23.13" - "@smithy/middleware-endpoint" "^4.4.28" - "@smithy/middleware-stack" "^4.2.12" - "@smithy/protocol-http" "^5.3.12" - "@smithy/types" "^4.13.1" - "@smithy/util-stream" "^4.5.21" - tslib "^2.6.2" - -"@smithy/types@^4.13.1": - version "4.13.1" - resolved "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz" - integrity sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g== + version "4.14.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.14.1.tgz#2da1ee27add4ba67551e3b9f846c00b6a5a626dd" + integrity sha512-/GsNFh1enYQB4w3x1+ZHR3IFtEya3UlcyF/8+0GUX6qObxPsm8uA4EHzopmcO5Z6DjxLwjAOco+1wwCr9mis0A== dependencies: + "@smithy/core" "^3.25.1" + "@smithy/types" "^4.15.0" tslib "^2.6.2" -"@smithy/url-parser@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.12.tgz" - integrity sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA== - dependencies: - "@smithy/querystring-parser" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-base64@^4.3.2": - version "4.3.2" - resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz" - integrity sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ== - dependencies: - "@smithy/util-buffer-from" "^4.2.2" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz" - integrity sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^4.2.3": - version "4.2.3" - resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz" - integrity sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g== +"@smithy/types@^4.13.1", "@smithy/types@^4.14.3", "@smithy/types@^4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.15.0.tgz#0346065c3e810755428df89c9a84427969931357" + integrity sha512-Z5TAOxygoFvybJV3igo5SloFflSokHx2hu1eFA+DxDTcn+FtKxUSui+rbTRG1pAafMA888Z3MVvCWUuvCrTXjg== dependencies: tslib "^2.6.2" "@smithy/util-buffer-from@^2.2.0": version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== dependencies: "@smithy/is-array-buffer" "^2.2.0" tslib "^2.6.2" -"@smithy/util-buffer-from@^4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz" - integrity sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q== - dependencies: - "@smithy/is-array-buffer" "^4.2.2" - tslib "^2.6.2" - -"@smithy/util-config-provider@^4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz" - integrity sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^4.3.44": - version "4.3.44" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.44.tgz" - integrity sha512-eZg6XzaCbVr2S5cAErU5eGBDaOVTuTo1I65i4tQcHENRcZ8rMWhQy1DaIYUSLyZjsfXvmCqZrstSMYyGFocvHA== - dependencies: - "@smithy/property-provider" "^4.2.12" - "@smithy/smithy-client" "^4.12.8" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^4.2.48": - version "4.2.48" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.48.tgz" - integrity sha512-FqOKTlqSaoV3nzO55pMs5NBnZX8EhoI0DGmn9kbYeXWppgHD6dchyuj2HLqp4INJDJbSrj6OFYJkAh/WhSzZPg== - dependencies: - "@smithy/config-resolver" "^4.4.13" - "@smithy/credential-provider-imds" "^4.2.12" - "@smithy/node-config-provider" "^4.3.12" - "@smithy/property-provider" "^4.2.12" - "@smithy/smithy-client" "^4.12.8" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-endpoints@^3.3.3": - version "3.3.3" - resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.3.3.tgz" - integrity sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig== - dependencies: - "@smithy/node-config-provider" "^4.3.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz" - integrity sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^4.2.12": - version "4.2.12" - resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.12.tgz" - integrity sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-retry@^4.2.13": - version "4.2.13" - resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.13.tgz" - integrity sha512-qQQsIvL0MGIbUjeSrg0/VlQ3jGNKyM3/2iU3FPNgy01z+Sp4OvcaxbgIoFOTvB61ZoohtutuOvOcgmhbD0katQ== - dependencies: - "@smithy/service-error-classification" "^4.2.12" - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/util-stream@^4.5.21": - version "4.5.21" - resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.21.tgz" - integrity sha512-KzSg+7KKywLnkoKejRtIBXDmwBfjGvg1U1i/etkC7XSWUyFCoLno1IohV2c74IzQqdhX5y3uE44r/8/wuK+A7Q== - dependencies: - "@smithy/fetch-http-handler" "^5.3.15" - "@smithy/node-http-handler" "^4.5.1" - "@smithy/types" "^4.13.1" - "@smithy/util-base64" "^4.3.2" - "@smithy/util-buffer-from" "^4.2.2" - "@smithy/util-hex-encoding" "^4.2.2" - "@smithy/util-utf8" "^4.2.2" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz" - integrity sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw== - dependencies: - tslib "^2.6.2" - "@smithy/util-utf8@^2.0.0": version "2.3.0" - resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== dependencies: "@smithy/util-buffer-from" "^2.2.0" tslib "^2.6.2" -"@smithy/util-utf8@^4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz" - integrity sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw== - dependencies: - "@smithy/util-buffer-from" "^4.2.2" - tslib "^2.6.2" - -"@smithy/util-waiter@^4.2.14": - version "4.2.14" - resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.14.tgz" - integrity sha512-2zqq5o/oizvMaFUlNiTyZ7dbgYv1a893aGut2uaxtbzTx/VYYnRxWzDHuD/ftgcw94ffenua+ZNLrbqwUYE+Bg== - dependencies: - "@smithy/types" "^4.13.1" - tslib "^2.6.2" - -"@smithy/uuid@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.2.tgz" - integrity sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g== - dependencies: - tslib "^2.6.2" - "@socket.io/component-emitter@~3.1.0": version "3.1.2" - resolved "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== "@socket.io/redis-adapter@^8.3.0": version "8.3.0" - resolved "https://registry.npmjs.org/@socket.io/redis-adapter/-/redis-adapter-8.3.0.tgz" + resolved "https://registry.yarnpkg.com/@socket.io/redis-adapter/-/redis-adapter-8.3.0.tgz#bdce1e8f34c07df4a8baf98170bf24dc84eaed4a" integrity sha512-ly0cra+48hDmChxmIpnESKrc94LjRL80TEmZVscuQ/WWkRP81nNj8W8cCGMqbI4L6NCuAaPRSzZF1a9GlAxxnA== dependencies: debug "~4.3.1" @@ -1920,13 +1431,13 @@ uid2 "1.0.0" "@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + version "2.0.1" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.1.tgz#35adc6222e3662fa2222ce123b961476a746b9ea" + integrity sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ== "@types/body-parser@*": version "1.19.6" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== dependencies: "@types/connect" "*" @@ -1934,12 +1445,12 @@ "@types/caseless@*": version "0.12.5" - resolved "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz" + resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.5.tgz#db9468cb1b1b5a925b8f34822f1669df0c5472f5" integrity sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg== "@types/chai@^5.2.2": version "5.2.3" - resolved "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.3.tgz#8e9cd9e1c3581fa6b341a5aed5588eb285be0b4a" integrity sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA== dependencies: "@types/deep-eql" "*" @@ -1947,31 +1458,31 @@ "@types/connect@*": version "3.4.38" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/cors@^2.8.12": version "2.8.19" - resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== dependencies: "@types/node" "*" "@types/deep-eql@*": version "4.0.2" - resolved "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== -"@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.6": - version "1.0.8" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" - integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== +"@types/estree@1.0.9", "@types/estree@^1.0.0", "@types/estree@^1.0.6": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" + integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== "@types/express-serve-static-core@^5.0.0": version "5.1.1" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz#1a77faffee9572d39124933259be2523837d7eaa" integrity sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A== dependencies: "@types/node" "*" @@ -1981,7 +1492,7 @@ "@types/express@*", "@types/express@^5.0.6": version "5.0.6" - resolved "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.6.tgz#2d724b2c990dcb8c8444063f3580a903f6d500cc" integrity sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA== dependencies: "@types/body-parser" "*" @@ -1990,12 +1501,12 @@ "@types/http-errors@*": version "2.0.5" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== "@types/json-schema@^7.0.15": version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/jsonwebtoken@^9.0.10": @@ -2018,26 +1529,33 @@ dependencies: "@types/express" "*" -"@types/node@*", "@types/node@>=10.0.0", "@types/node@^24.12.2": - version "24.12.2" - resolved "https://registry.npmjs.org/@types/node/-/node-24.12.2.tgz" - integrity sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g== +"@types/node@*", "@types/node@>=10.0.0": + version "26.0.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-26.0.0.tgz#d4aece9e9412e9f2008d59bc2d74f5279316b665" + integrity sha512-vf2YFi1iY9lHGwNJMs01biZFbKJkrZR1T6/MlzjhJLPdntOHLhTrDSnSVcdtvjihi4VQNlrFRIxLsDBlQpAipA== + dependencies: + undici-types "~8.3.0" + +"@types/node@^24.12.2": + version "24.13.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.13.2.tgz#3b9b280a7055128359f125eb1067d9a190f39854" + integrity sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA== dependencies: - undici-types "~7.16.0" + undici-types "~7.18.0" "@types/qs@*": - version "6.15.0" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz" - integrity sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow== + version "6.15.1" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.15.1.tgz#8606884272c63f0db96986bd3548650d8a9388bf" + integrity sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw== "@types/range-parser@*": version "1.2.7" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/request@^2.48.8": version "2.48.13" - resolved "https://registry.npmjs.org/@types/request/-/request-2.48.13.tgz" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.13.tgz#abdf4256524e801ea8fdda54320f083edb5a6b80" integrity sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg== dependencies: "@types/caseless" "*" @@ -2047,14 +1565,14 @@ "@types/send@*": version "1.2.1" - resolved "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== dependencies: "@types/node" "*" "@types/serve-static@^2": version "2.2.0" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-2.2.0.tgz#d4a447503ead0d1671132d1ab6bd58b805d8de6a" integrity sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ== dependencies: "@types/http-errors" "*" @@ -2062,135 +1580,135 @@ "@types/tough-cookie@*": version "4.0.5" - resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== "@types/webidl-conversions@*": version "7.0.3" - resolved "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz#1306dbfa53768bcbcfc95a1c8cde367975581859" integrity sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA== "@types/whatwg-url@^13.0.0": version "13.0.0" - resolved "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-13.0.0.tgz" + resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-13.0.0.tgz#2b11e32772fd321c0dedf4d655953ea8ce587b2a" integrity sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q== dependencies: "@types/webidl-conversions" "*" -"@types/ws@^8.18.1": +"@types/ws@^8.18.1", "@types/ws@^8.5.12": version "8.18.1" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: "@types/node" "*" "@typescript-eslint/eslint-plugin@^8.58.0": - version "8.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.0.tgz" - integrity sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg== + version "8.61.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.61.1.tgz#6e4b7fee21f1983308e9e9b634ecbaf702c86006" + integrity sha512-ZPlVl3PB3et/59Ne0fv/sci6ZXz4T4Hp4nTJ56i/Y0gR89ARb+KphojTq6j+56E5PIezmOIOOWyY+aWQFd+IkQ== dependencies: "@eslint-community/regexpp" "^4.12.2" - "@typescript-eslint/scope-manager" "8.58.0" - "@typescript-eslint/type-utils" "8.58.0" - "@typescript-eslint/utils" "8.58.0" - "@typescript-eslint/visitor-keys" "8.58.0" + "@typescript-eslint/scope-manager" "8.61.1" + "@typescript-eslint/type-utils" "8.61.1" + "@typescript-eslint/utils" "8.61.1" + "@typescript-eslint/visitor-keys" "8.61.1" ignore "^7.0.5" natural-compare "^1.4.0" ts-api-utils "^2.5.0" "@typescript-eslint/parser@^8.58.0": - version "8.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.0.tgz" - integrity sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA== - dependencies: - "@typescript-eslint/scope-manager" "8.58.0" - "@typescript-eslint/types" "8.58.0" - "@typescript-eslint/typescript-estree" "8.58.0" - "@typescript-eslint/visitor-keys" "8.58.0" + version "8.61.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.61.1.tgz#881fba60b50636249cdeea2e547bf75715254c72" + integrity sha512-PJ5vePq5/ognBbrIcoC5+SHO5dfpeLPzP9FpLkzWrguoYQEeeSjlJpVwOpo1JRSTEi7dRcwNy4h4dzV70PqHcg== + dependencies: + "@typescript-eslint/scope-manager" "8.61.1" + "@typescript-eslint/types" "8.61.1" + "@typescript-eslint/typescript-estree" "8.61.1" + "@typescript-eslint/visitor-keys" "8.61.1" debug "^4.4.3" -"@typescript-eslint/project-service@8.58.0": - version "8.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.0.tgz" - integrity sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg== +"@typescript-eslint/project-service@8.61.1": + version "8.61.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.61.1.tgz#fcd9739964a40867eed55f1ac318d3909f24b4af" + integrity sha512-PrC4JYGmR241lYnfhmKGTXkFqv8+ymbTFgSAY0fVXpY82/QkMw5TZPl+vGzuDDU2QYJk9fIDOBTntF+yDv9LEA== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.58.0" - "@typescript-eslint/types" "^8.58.0" + "@typescript-eslint/tsconfig-utils" "^8.61.1" + "@typescript-eslint/types" "^8.61.1" debug "^4.4.3" -"@typescript-eslint/scope-manager@8.58.0": - version "8.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.0.tgz" - integrity sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ== +"@typescript-eslint/scope-manager@8.61.1": + version "8.61.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.61.1.tgz#2479921a40fdb0afa18f5838fae6167264b417b2" + integrity sha512-L2bdIeoQS8FlKAvONAr20w6OcLXeB+qiDKbAooS9A0Ben+iSIkBef0FxqwKWYqt5sa0i4KJtxVyVmhMylKzF5w== dependencies: - "@typescript-eslint/types" "8.58.0" - "@typescript-eslint/visitor-keys" "8.58.0" + "@typescript-eslint/types" "8.61.1" + "@typescript-eslint/visitor-keys" "8.61.1" -"@typescript-eslint/tsconfig-utils@8.58.0", "@typescript-eslint/tsconfig-utils@^8.58.0": - version "8.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.0.tgz" - integrity sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A== +"@typescript-eslint/tsconfig-utils@8.61.1", "@typescript-eslint/tsconfig-utils@^8.61.1": + version "8.61.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.1.tgz#ca88080e0cf191d49516d7f300b67aa090d2254f" + integrity sha512-UN/H4di+OO7EWx2ovME+8t31YO+KVnK0RRKEHR3kOt21/Ay8BOq3M1OMvWs5vNiqcFCYGYoxK3MXPZzmMUE+yg== -"@typescript-eslint/type-utils@8.58.0": - version "8.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.0.tgz" - integrity sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg== +"@typescript-eslint/type-utils@8.61.1": + version "8.61.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.61.1.tgz#8fa18f453ee140893b47d339d1a6b64cac9b08a1" + integrity sha512-GYRicKmVK0C4fsKgaACaknOUAq9Oa2kwsjnpFhFcS/5p4Ht5IP9OVLbgIgcK4SRk92nVHFluurg1lumD9dBcLw== dependencies: - "@typescript-eslint/types" "8.58.0" - "@typescript-eslint/typescript-estree" "8.58.0" - "@typescript-eslint/utils" "8.58.0" + "@typescript-eslint/types" "8.61.1" + "@typescript-eslint/typescript-estree" "8.61.1" + "@typescript-eslint/utils" "8.61.1" debug "^4.4.3" ts-api-utils "^2.5.0" -"@typescript-eslint/types@8.58.0", "@typescript-eslint/types@^8.58.0": - version "8.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.0.tgz" - integrity sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww== +"@typescript-eslint/types@8.61.1", "@typescript-eslint/types@^8.61.1": + version "8.61.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.61.1.tgz#0c51f518e4e6848371a1c988e859d59eb7522d5a" + integrity sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA== -"@typescript-eslint/typescript-estree@8.58.0": - version "8.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.0.tgz" - integrity sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA== +"@typescript-eslint/typescript-estree@8.61.1": + version "8.61.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.61.1.tgz#febbe70365ac0bf7611262b61b338fc8797965c7" + integrity sha512-u+oQD3BqYWPc8YV9Zab4vaJElJuwOLPRc10Jm1o/qS+6Qwen14HCWwx0Seo4LnSn2wxea2Ik8DxPt2/FHmuhrg== dependencies: - "@typescript-eslint/project-service" "8.58.0" - "@typescript-eslint/tsconfig-utils" "8.58.0" - "@typescript-eslint/types" "8.58.0" - "@typescript-eslint/visitor-keys" "8.58.0" + "@typescript-eslint/project-service" "8.61.1" + "@typescript-eslint/tsconfig-utils" "8.61.1" + "@typescript-eslint/types" "8.61.1" + "@typescript-eslint/visitor-keys" "8.61.1" debug "^4.4.3" minimatch "^10.2.2" semver "^7.7.3" tinyglobby "^0.2.15" ts-api-utils "^2.5.0" -"@typescript-eslint/utils@8.58.0": - version "8.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.0.tgz" - integrity sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA== +"@typescript-eslint/utils@8.61.1": + version "8.61.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.61.1.tgz#ffd1054de7dd33b7873cd6c6713ec6b0366316d3" + integrity sha512-1+P/3Dj6jvtybE1q0HQ6yBt/gq+oKJyLdEv4HdnqasaEXRSYCAsD59mXEVQnM/ULNdQxbX77tdG4jPRjIS6knA== dependencies: "@eslint-community/eslint-utils" "^4.9.1" - "@typescript-eslint/scope-manager" "8.58.0" - "@typescript-eslint/types" "8.58.0" - "@typescript-eslint/typescript-estree" "8.58.0" + "@typescript-eslint/scope-manager" "8.61.1" + "@typescript-eslint/types" "8.61.1" + "@typescript-eslint/typescript-estree" "8.61.1" -"@typescript-eslint/visitor-keys@8.58.0": - version "8.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.0.tgz" - integrity sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ== +"@typescript-eslint/visitor-keys@8.61.1": + version "8.61.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.61.1.tgz#546cf102b4efdb72a9a08e63a1b0d7d745eb66eb" + integrity sha512-6fJ9MHWtK14C1DSkiMlHUSOmrVebL7150xZJBlJiL62jjhIA4JmOq6flwBgDxIdBKKdoiZRel+dfPD5MLfny3w== dependencies: - "@typescript-eslint/types" "8.58.0" + "@typescript-eslint/types" "8.61.1" eslint-visitor-keys "^5.0.0" "@vitejs/plugin-vue@^6.0.5": - version "6.0.5" - resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.5.tgz" - integrity sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg== + version "6.0.7" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-6.0.7.tgz#194235d364a2c601c521b0410e524e521119059f" + integrity sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg== dependencies: - "@rolldown/pluginutils" "1.0.0-rc.2" + "@rolldown/pluginutils" "^1.0.1" "@vitest/coverage-v8@^3": - version "3.2.4" - resolved "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz" - integrity sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ== + version "3.2.6" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-3.2.6.tgz#ca3bbfb264389d5e17134ccf84f988c2f7a121fb" + integrity sha512-LsAdmUapA0qSN306d8+zOyawM0hFm2m2Hg9IwVNIKBm+qJV8cijiq2c+gxKZcB1HCfIWAy+0qEZDCUQA58A1cw== dependencies: "@ampproject/remapping" "^2.3.0" "@bcoe/v8-coverage" "^1.0.2" @@ -2267,89 +1785,89 @@ loupe "^3.1.4" tinyrainbow "^2.0.0" -"@vue/compiler-core@3.5.32": - version "3.5.32" - resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.32.tgz" - integrity sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ== +"@vue/compiler-core@3.5.38": + version "3.5.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.38.tgz#fb6679d50a5de198398a1df2ce9d3a49ef8e8072" + integrity sha512-s99aGxWYig9ErHbct27KXEGhrBYlRI6c4MwAgXErOAbX9xiW37/uMa+XUDO69zLz83dng8UUZ70CTOJrLrYrEQ== dependencies: - "@babel/parser" "^7.29.2" - "@vue/shared" "3.5.32" + "@babel/parser" "^7.29.7" + "@vue/shared" "3.5.38" entities "^7.0.1" estree-walker "^2.0.2" source-map-js "^1.2.1" -"@vue/compiler-dom@3.5.32": - version "3.5.32" - resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.32.tgz" - integrity sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q== +"@vue/compiler-dom@3.5.38": + version "3.5.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.38.tgz#10ad73a70399a4c09dedf45ff6a93d42eadc861f" + integrity sha512-JTqp25l8aFfJYF7/KmsXZjAxJz7T+SjmTJLoXVjHtc2BrSgSiW2n9Aem/cWq1OPe68A8JL06B3eVdhlP0H4TVw== dependencies: - "@vue/compiler-core" "3.5.32" - "@vue/shared" "3.5.32" + "@vue/compiler-core" "3.5.38" + "@vue/shared" "3.5.38" -"@vue/compiler-sfc@3.5.32": - version "3.5.32" - resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.32.tgz" - integrity sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg== +"@vue/compiler-sfc@3.5.38": + version "3.5.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.38.tgz#2b02036f89c7db0a688534a2eb0d42728c7f09c1" + integrity sha512-DuA2GiZawSEW442iw/9+Fkol8hTgb4Ke5KkhmSry65QA7YuyMbIdy8p0XZRMvNwJdgRz307W8g1CSzdvS4nuNg== dependencies: - "@babel/parser" "^7.29.2" - "@vue/compiler-core" "3.5.32" - "@vue/compiler-dom" "3.5.32" - "@vue/compiler-ssr" "3.5.32" - "@vue/shared" "3.5.32" + "@babel/parser" "^7.29.7" + "@vue/compiler-core" "3.5.38" + "@vue/compiler-dom" "3.5.38" + "@vue/compiler-ssr" "3.5.38" + "@vue/shared" "3.5.38" estree-walker "^2.0.2" magic-string "^0.30.21" - postcss "^8.5.8" + postcss "^8.5.15" source-map-js "^1.2.1" -"@vue/compiler-ssr@3.5.32": - version "3.5.32" - resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.32.tgz" - integrity sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw== +"@vue/compiler-ssr@3.5.38": + version "3.5.38" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.38.tgz#23975aa9643752c78c0625277ffa86f58600300d" + integrity sha512-7s+W5Gc42FGxZMcuwl8H5B29T8BJPMdBT7KHFE+BbAuZ/iTEdTtv7z2XiMjiaUUw4w3ZcCEdHs36RuYJ2VA7bA== dependencies: - "@vue/compiler-dom" "3.5.32" - "@vue/shared" "3.5.32" + "@vue/compiler-dom" "3.5.38" + "@vue/shared" "3.5.38" -"@vue/reactivity@3.5.32": - version "3.5.32" - resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.32.tgz" - integrity sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ== +"@vue/reactivity@3.5.38": + version "3.5.38" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.38.tgz#71cf88b764a6d5334dd27d5ac9f029c81cd4fc34" + integrity sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ== dependencies: - "@vue/shared" "3.5.32" + "@vue/shared" "3.5.38" -"@vue/runtime-core@3.5.32": - version "3.5.32" - resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.32.tgz" - integrity sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ== +"@vue/runtime-core@3.5.38": + version "3.5.38" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.38.tgz#26560a876b9c0251e57f7a05f9263e623f244f9c" + integrity sha512-iyW8WVfF1CpCXxncZY5Ei6rSd6oZr5DgEom//fUjRBRl56AXPD+s9ATvukRt77ZFTuYlnVA1bxY+dJB94tWVYw== dependencies: - "@vue/reactivity" "3.5.32" - "@vue/shared" "3.5.32" + "@vue/reactivity" "3.5.38" + "@vue/shared" "3.5.38" -"@vue/runtime-dom@3.5.32": - version "3.5.32" - resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.32.tgz" - integrity sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ== +"@vue/runtime-dom@3.5.38": + version "3.5.38" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.38.tgz#7aec70bd013e43166e9ccecd4a1f096fd8ca11fb" + integrity sha512-apX2wt9sdfDshS+a2xueFZLVpt0GkRJZSoPmrW/SA4yzXTznhfcMVW59gr7h4YQeY0vJhdJkk2rsIDwgfFgC5A== dependencies: - "@vue/reactivity" "3.5.32" - "@vue/runtime-core" "3.5.32" - "@vue/shared" "3.5.32" + "@vue/reactivity" "3.5.38" + "@vue/runtime-core" "3.5.38" + "@vue/shared" "3.5.38" csstype "^3.2.3" -"@vue/server-renderer@3.5.32": - version "3.5.32" - resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.32.tgz" - integrity sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ== +"@vue/server-renderer@3.5.38": + version "3.5.38" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.38.tgz#5d24a5305e776a53038fc772fbd9d1205c236588" + integrity sha512-vue8vbf2QlV4quHqzwmJy6dWfmRhP1J8l4wtZg60CL6VoKqcPY2oe7may3+1d9qfpedjK5PRLFqd5k3Isj9mUw== dependencies: - "@vue/compiler-ssr" "3.5.32" - "@vue/shared" "3.5.32" + "@vue/compiler-ssr" "3.5.38" + "@vue/shared" "3.5.38" -"@vue/shared@3.5.32": - version "3.5.32" - resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.32.tgz" - integrity sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg== +"@vue/shared@3.5.38": + version "3.5.38" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.38.tgz#6c4be4defd86cdc35bfa2b7dd45d7b11a5d51101" + integrity sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug== "@whatwg-node/disposablestack@^0.0.6": version "0.0.6" - resolved "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz" + resolved "https://registry.yarnpkg.com/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz#2064a1425ea66194def6df0c7a1851b6939c82bb" integrity sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw== dependencies: "@whatwg-node/promise-helpers" "^1.0.0" @@ -2357,23 +1875,23 @@ "@whatwg-node/events@^0.1.0": version "0.1.2" - resolved "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.1.2.tgz#23f7c7ad887d7fd448e9ce3261eac9ef319ddd7c" integrity sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ== dependencies: tslib "^2.6.3" "@whatwg-node/fetch@^0.10.13", "@whatwg-node/fetch@^0.10.6": version "0.10.13" - resolved "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.13.tgz" + resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.10.13.tgz#2d47190c620f134dda31c7f827976a909b2cca7a" integrity sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q== dependencies: "@whatwg-node/node-fetch" "^0.8.3" urlpattern-polyfill "^10.0.0" "@whatwg-node/node-fetch@^0.8.3": - version "0.8.5" - resolved "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.8.5.tgz" - integrity sha512-4xzCl/zphPqlp9tASLVeUhB5+WJHbuWGYpfoC2q1qh5dw0AqZBW7L27V5roxYWijPxj4sspRAAoOH3d2ztaHUQ== + version "0.8.6" + resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.8.6.tgz#22c5235f49c69c6b2cfc63d4a759de407a8fc664" + integrity sha512-BDMdYFcerLQkwA2RTldxOqRCs6ZQD1S7UgP3pUdGUkcbgTrP/V5ko77ZkCww9DHmC4lpoYuwigGfQYj285gMvA== dependencies: "@fastify/busboy" "^3.1.1" "@whatwg-node/disposablestack" "^0.0.6" @@ -2382,15 +1900,15 @@ "@whatwg-node/promise-helpers@^1.0.0", "@whatwg-node/promise-helpers@^1.2.1", "@whatwg-node/promise-helpers@^1.2.4", "@whatwg-node/promise-helpers@^1.3.2": version "1.3.2" - resolved "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz#3b54987ad6517ef6db5920c66a6f0dada606587d" integrity sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA== dependencies: tslib "^2.6.3" -"@whatwg-node/server@^0.10.14": - version "0.10.18" - resolved "https://registry.npmjs.org/@whatwg-node/server/-/server-0.10.18.tgz" - integrity sha512-kMwLlxUbduttIgaPdSkmEarFpP+mSY8FEm+QWMBRJwxOHWkri+cxd8KZHO9EMrB9vgUuz+5WEaCawaL5wGVoXg== +"@whatwg-node/server@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@whatwg-node/server/-/server-0.11.0.tgz#307e0d84f94da2f0cbd1798bab430404b468a239" + integrity sha512-VSdkwnJRr8Yv9UgB2aXB3VUPWwd6Oqnn0hycFwhg9pZgWxJXb7JmhsiXe9tmpMwjHFxli12PGcz9aI63YYloGQ== dependencies: "@envelop/instrumentation" "^1.0.0" "@whatwg-node/disposablestack" "^0.0.6" @@ -2400,14 +1918,14 @@ abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" accepts@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== dependencies: mime-types "^3.0.0" @@ -2415,7 +1933,7 @@ accepts@^2.0.0: accepts@~1.3.4: version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -2423,30 +1941,30 @@ accepts@~1.3.4: acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.15.0: - version "8.16.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz" - integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + version "8.17.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.17.0.tgz#1785adb84faf8d8add10369b93826fc2bd08f1fe" + integrity sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg== agent-base@6: version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agent-base@^7.1.2: version "7.1.4" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== -ajv@^6.12.4, ajv@^6.14.0: - version "6.14.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz" - integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== +ajv@^6.14.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.15.0.tgz#07e982c74626167aa7a2495c53817892d7139492" + integrity sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -2455,54 +1973,54 @@ ajv@^6.12.4, ajv@^6.14.0: ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.3" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== -anynum@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/anynum/-/anynum-1.0.0.tgz#afe3f3a78c6621fbdf1e107154fac01eef711cc5" - integrity sha512-xjR9/zBVnUOP6ztMIIgShjsxui80nQUQH+5xJnvrYLs+90bF25/KJqaAi8mk+B4RDtX1Nspi6fmp4YTEts8SfA== +anynum@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/anynum/-/anynum-1.0.1.tgz#2aac00e08dfad3726c1d462e60dbc2f831659a44" + integrity sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A== append-field@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== arrify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== arrify@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== assertion-error@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== ast-v8-to-istanbul@^0.3.3: version "0.3.12" - resolved "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.12.tgz" + resolved "https://registry.yarnpkg.com/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.12.tgz#8eb1b7c86ef8499859be761b17ffd91406c0c36f" integrity sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g== dependencies: "@jridgewell/trace-mapping" "^0.3.31" @@ -2511,31 +2029,31 @@ ast-v8-to-istanbul@^0.3.3: async-retry@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== dependencies: retry "0.13.1" asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== atomic-sleep@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== awilix@^13.0.3: - version "13.0.3" - resolved "https://registry.npmjs.org/awilix/-/awilix-13.0.3.tgz" - integrity sha512-WpgYKwf8XEPAxabPxBYGvxz1QZhyxoopQLLqpwwVqSQAvTO46yhld3M9nfMuV8t2FjsTO7DQblALD9w+C8iVKQ== + version "13.0.5" + resolved "https://registry.yarnpkg.com/awilix/-/awilix-13.0.5.tgz#998c3878a59ee4431f0b194b180fc1cba9354ecd" + integrity sha512-ORtca6suBdYA1FyTzqHEZDvEuUwo3lPDDBRm7GrzHgi6STESzJKdBtpqfTzObdMj1NGQUWX6k26E3EbQaGJX5Q== dependencies: fast-glob "^3.3.3" aws-ssl-profiles@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz#157dd77e9f19b1d123678e93f120e6f193022641" integrity sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g== balanced-match@^1.0.0: @@ -2545,61 +2063,61 @@ balanced-match@^1.0.0: balanced-match@^4.0.2: version "4.0.4" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== base64-js@^1.0.2, base64-js@^1.3.0: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base64id@2.0.0, base64id@~2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== bcryptjs@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-3.0.3.tgz#4b93d6a398c48bfc9f32ee65d301174a8a8ea56f" integrity sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g== bignumber.js@^9.0.0: version "9.3.1" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== body-parser@^2.2.1: - 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== + version "2.3.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.3.0.tgz#6d8662f4d8c336028b8ac9aa24251b0ca64ba437" + integrity sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw== dependencies: bytes "^3.1.2" - content-type "^1.0.5" + content-type "^2.0.0" debug "^4.4.3" - http-errors "^2.0.0" - iconv-lite "^0.7.0" + http-errors "^2.0.1" + iconv-lite "^0.7.2" on-finished "^2.4.1" - qs "^6.14.1" - raw-body "^3.0.1" - type-is "^2.0.1" + qs "^6.15.2" + raw-body "^3.0.2" + type-is "^2.1.0" bowser@^2.11.0: version "2.14.1" - resolved "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.14.1.tgz#4ea39bf31e305184522d7ad7bfd91389e4f0cb79" integrity sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg== brace-expansion@^1.1.7: - version "1.1.13" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz#d37875c01dc9eff988dd49d112a57cb67b54efe6" - integrity sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w== + version "1.1.15" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.15.tgz#a6d90d54067236e5f42570a3b7378d594d9b7738" + integrity sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.2: - version "2.1.0" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz#4f41a41190216ee36067ec381526fe9539c4f0ae" - integrity sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w== + version "2.1.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.1.tgz#c68b1c4111c76aae3a6fba55d496cee10c39dad8" + integrity sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA== dependencies: balanced-match "^1.0.0" @@ -2612,24 +2130,24 @@ brace-expansion@^5.0.5: braces@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" -bson@^7.1.1: - version "7.2.0" - resolved "https://registry.npmjs.org/bson/-/bson-7.2.0.tgz" - integrity sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ== +bson@^7.2.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/bson/-/bson-7.3.0.tgz#ec8711e962fa9a9fb02c07c088e152cdc624646d" + integrity sha512-WmjjMEwFwZHmGnAb7wn90MhkiT+mTm4x/rLj7dvAPWfwnVWDXhLun2e+UM88MJoDGW624yzZglVX/zTBy9ZZMw== buffer-equal-constant-time@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@5.6.0: @@ -2641,38 +2159,37 @@ buffer@5.6.0: ieee754 "^1.1.4" bullmq@^5.73.0: - version "5.73.0" - resolved "https://registry.npmjs.org/bullmq/-/bullmq-5.73.0.tgz" - integrity sha512-uX8RbQaBbzk0H9JYXKGrNxpDqFcDBQFFKCyKarMjtfYHuct5X48M2LUq3Q9FXt/P2kWzPrqYlNnNqsico7ty5A== + version "5.79.1" + resolved "https://registry.yarnpkg.com/bullmq/-/bullmq-5.79.1.tgz#12d33ad99a9addfb4bb96a9ca74363ef5b11b689" + integrity sha512-cteoHRr1FGOTUgzFrnMyBNGtQhNeVR8Ej6nImNSHQDJi4tj6GMD0p9ZG65ZsTnvR9RVf18dhRxWu4kFl634QGA== dependencies: cron-parser "4.9.0" ioredis "5.10.1" - msgpackr "1.11.5" + msgpackr "2.0.2" node-abort-controller "3.1.1" - semver "7.7.4" + semver "7.8.1" tslib "2.8.1" - uuid "11.1.0" busboy@^1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== dependencies: streamsearch "^1.1.0" bytes@^3.1.2, bytes@~3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cac@^6.7.14: version "6.7.14" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" @@ -2680,7 +2197,7 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: call-bound@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: call-bind-apply-helpers "^1.0.2" @@ -2688,12 +2205,12 @@ call-bound@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== chai@^5.2.0: version "5.3.3" - resolved "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz" + resolved "https://registry.yarnpkg.com/chai/-/chai-5.3.3.tgz#dd3da955e270916a4bd3f625f4b919996ada7e06" integrity sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw== dependencies: assertion-error "^2.0.1" @@ -2704,7 +2221,7 @@ chai@^5.2.0: chalk@^4.0.0: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -2712,7 +2229,7 @@ chalk@^4.0.0: check-error@^2.1.1: version "2.1.3" - resolved "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.3.tgz#2427361117b70cca8dc89680ead32b157019caf5" integrity sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA== cli-table3@0.6.3: @@ -2724,43 +2241,48 @@ cli-table3@0.6.3: optionalDependencies: "@colors/colors" "1.5.0" +cluster-key-slot@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz#10ccb9ded0729464b6d2e7d714b100a2d1259d43" + integrity sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw== + cluster-key-slot@^1.1.0: version "1.1.2" - resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colorette@2.0.19: version "2.0.19" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== colorette@^2.0.7: version "2.0.20" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^10.0.0: version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== concat-map@0.0.1: @@ -2770,7 +2292,7 @@ concat-map@0.0.1: concat-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== dependencies: buffer-from "^1.0.0" @@ -2779,28 +2301,33 @@ concat-stream@^2.0.0: typedarray "^0.0.6" content-disposition@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz" - integrity sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q== + version "1.1.0" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.1.0.tgz#f3db789c752d45564cc7e9e1e0b31790d4a38e17" + integrity sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g== content-type@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== +content-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-2.0.0.tgz#2fb3ede69dffa0af78ca7c4ce7589680638b56df" + integrity sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ== + cookie-signature@^1.2.1: version "1.2.2" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== cookie@^0.7.1, cookie@~0.7.2: version "0.7.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== cors@^2.8.6, cors@~2.8.5: version "2.8.6" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.6.tgz#ff5dd69bd95e547503820d29aba4f8faf8dfec96" integrity sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw== dependencies: object-assign "^4" @@ -2808,21 +2335,21 @@ cors@^2.8.6, cors@~2.8.5: cron-parser@4.9.0: version "4.9.0" - resolved "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5" integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q== dependencies: luxon "^3.2.1" cross-inspect@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/cross-inspect/-/cross-inspect-1.0.1.tgz#15f6f65e4ca963cf4cc1a2b5fef18f6ca328712b" integrity sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A== dependencies: tslib "^2.4.0" cross-spawn@^7.0.6: version "7.0.6" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -2831,78 +2358,78 @@ cross-spawn@^7.0.6: csstype@^3.2.3: version "3.2.3" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== date-fns@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz" - integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== + version "4.4.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.4.0.tgz#806539edf45c616b2b76b5f78b88c56ed3c7e036" + integrity sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w== dateformat@^4.6.3: version "4.6.3" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== -debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3, debug@~4.4.1: +debug@4, debug@4.4.3, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3, debug@~4.4.1: version "4.4.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" debug@4.3.4: version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@~4.3.1: version "4.3.7" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: ms "^2.1.3" deep-eql@^5.0.1: version "5.0.2" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -denque@^2.1.0: +denque@2.1.0, denque@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== depd@^2.0.0, depd@~2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== detect-libc@^2.0.1, detect-libc@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== dotenv@^17.2.3: - version "17.4.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-17.4.1.tgz" - integrity sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw== + version "17.4.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.4.2.tgz#c07e54a746e11eba021dd9e1047ced5afdc1c034" + integrity sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw== dunder-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: call-bind-apply-helpers "^1.0.1" @@ -2911,7 +2438,7 @@ dunder-proto@^1.0.1: duplexify@^4.1.3: version "4.1.3" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== dependencies: end-of-stream "^1.4.1" @@ -2921,94 +2448,95 @@ duplexify@^4.1.3: ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: version "1.0.11" - resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== dependencies: safe-buffer "^5.0.1" ee-first@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== encodeurl@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.5" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== dependencies: once "^1.4.0" engine.io-client@~6.6.1: - version "6.6.4" - resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.4.tgz" - integrity sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw== + version "6.6.6" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.6.6.tgz#8a8f1e451b1f6d4acf413305445e42133d1cbe9a" + integrity sha512-iY6QdftLQ9pyiPoX082bpf/u1UewnOaJrtJIF9T0++QB34lZrj0uP+Q/bj8AlUsAxqhnkTV2BS8SBZSxOmoV5Q== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.4.1" engine.io-parser "~5.2.1" - ws "~8.18.3" + ws "~8.21.0" xmlhttprequest-ssl "~2.1.1" engine.io-parser@~5.2.1: version "5.2.3" - resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== engine.io@~6.6.0: - version "6.6.5" - resolved "https://registry.npmjs.org/engine.io/-/engine.io-6.6.5.tgz" - integrity sha512-2RZdgEbXmp5+dVbRm0P7HQUImZpICccJy7rN7Tv+SFa55pH+lxnuw6/K1ZxxBfHoYpSkHLAO92oa8O4SwFXA2A== + version "6.6.9" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.9.tgz#fd17e9f4e3a256423592574b60ac262e91af4b82" + integrity sha512-clKkw4C7nJ22mGgoVcCg6V/W/TxdNyIOTr89k2ONZu81qqkddPFDF0LXcbAwhzPD8DjkiRCjzuiO6Y+fkpD4vg== dependencies: "@types/cors" "^2.8.12" "@types/node" ">=10.0.0" + "@types/ws" "^8.5.12" accepts "~1.3.4" base64id "2.0.0" cookie "~0.7.2" cors "~2.8.5" debug "~4.4.1" engine.io-parser "~5.2.1" - ws "~8.18.3" + ws "~8.21.0" entities@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/entities/-/entities-7.0.1.tgz#26e8a88889db63417dcb9a1e79a3f1bc92b5976b" integrity sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA== es-define-property@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-module-lexer@^1.7.0: version "1.7.0" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - 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== + version "1.1.2" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz#a2d0b373205724dfa525d23b0c3e1b1ca582c99b" + integrity sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw== dependencies: es-errors "^1.3.0" es-set-tostringtag@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: es-errors "^1.3.0" @@ -3016,9 +2544,9 @@ es-set-tostringtag@^2.1.0: has-tostringtag "^1.0.2" hasown "^2.0.2" -esbuild@^0.27.0, esbuild@~0.27.0: +esbuild@^0.27.0: version "0.27.7" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.7.tgz#bcadce22b2f3fd76f257e3a64f83a64986fea11f" integrity sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w== optionalDependencies: "@esbuild/aix-ppc64" "0.27.7" @@ -3048,37 +2576,69 @@ esbuild@^0.27.0, esbuild@~0.27.0: "@esbuild/win32-ia32" "0.27.7" "@esbuild/win32-x64" "0.27.7" +esbuild@~0.28.0: + version "0.28.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.28.1.tgz#ef45b4634c9c9d97a296aea4114a5f9840f95578" + integrity sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.28.1" + "@esbuild/android-arm" "0.28.1" + "@esbuild/android-arm64" "0.28.1" + "@esbuild/android-x64" "0.28.1" + "@esbuild/darwin-arm64" "0.28.1" + "@esbuild/darwin-x64" "0.28.1" + "@esbuild/freebsd-arm64" "0.28.1" + "@esbuild/freebsd-x64" "0.28.1" + "@esbuild/linux-arm" "0.28.1" + "@esbuild/linux-arm64" "0.28.1" + "@esbuild/linux-ia32" "0.28.1" + "@esbuild/linux-loong64" "0.28.1" + "@esbuild/linux-mips64el" "0.28.1" + "@esbuild/linux-ppc64" "0.28.1" + "@esbuild/linux-riscv64" "0.28.1" + "@esbuild/linux-s390x" "0.28.1" + "@esbuild/linux-x64" "0.28.1" + "@esbuild/netbsd-arm64" "0.28.1" + "@esbuild/netbsd-x64" "0.28.1" + "@esbuild/openbsd-arm64" "0.28.1" + "@esbuild/openbsd-x64" "0.28.1" + "@esbuild/openharmony-arm64" "0.28.1" + "@esbuild/sunos-x64" "0.28.1" + "@esbuild/win32-arm64" "0.28.1" + "@esbuild/win32-ia32" "0.28.1" + "@esbuild/win32-x64" "0.28.1" + escalade@^3.1.1: version "3.2.0" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-prettier@^9.0.0: version "9.1.2" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz#90deb4fa0259592df774b600dbd1d2249a78ce91" integrity sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ== eslint-plugin-prettier@^5.5.5: - version "5.5.5" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz" - integrity sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw== + version "5.5.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz#363ebe4d769bce157ccdd8129ce3efd91dc62564" + integrity sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ== dependencies: prettier-linter-helpers "^1.0.1" - synckit "^0.11.12" + synckit "^0.11.13" eslint-scope@^8.4.0: version "8.4.0" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: esrecurse "^4.3.0" @@ -3086,38 +2646,37 @@ eslint-scope@^8.4.0: eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint-visitor-keys@^4.2.1: version "4.2.1" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint-visitor-keys@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== eslint@^9.33.0: - version "9.33.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz" - integrity sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA== + version "9.39.4" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.4.tgz#855da1b2e2ad66dc5991195f35e262bcec8117b5" + integrity sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.21.0" - "@eslint/config-helpers" "^0.3.1" - "@eslint/core" "^0.15.2" - "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.33.0" - "@eslint/plugin-kit" "^0.3.5" + "@eslint/config-array" "^0.21.2" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" + "@eslint/eslintrc" "^3.3.5" + "@eslint/js" "9.39.4" + "@eslint/plugin-kit" "^0.4.1" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" - "@types/json-schema" "^7.0.15" - ajv "^6.12.4" + ajv "^6.14.0" chalk "^4.0.0" cross-spawn "^7.0.6" debug "^4.3.2" @@ -3136,18 +2695,18 @@ eslint@^9.33.0: is-glob "^4.0.0" json-stable-stringify-without-jsonify "^1.0.1" lodash.merge "^4.6.2" - minimatch "^3.1.2" + minimatch "^3.1.5" natural-compare "^1.4.0" optionator "^0.9.3" esm@^3.2.25: version "3.2.25" - resolved "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== espree@^10.0.1, espree@^10.4.0: version "10.4.0" - resolved "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: acorn "^8.15.0" @@ -3155,54 +2714,54 @@ espree@^10.0.1, espree@^10.4.0: eslint-visitor-keys "^4.2.1" esquery@^1.5.0: - version "1.6.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + version "1.7.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== estree-walker@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== dependencies: "@types/estree" "^1.0.0" esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@^1.8.1: version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== eventemitter2@^6.4.9: version "6.4.9" - resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== events@3.3.0: @@ -3212,12 +2771,12 @@ events@3.3.0: expect-type@^1.2.1: version "1.3.0" - resolved "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.3.0.tgz#0d58ed361877a31bbc4dd6cf71bbfef7faf6bd68" integrity sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA== express@^5.0.0: version "5.2.1" - resolved "https://registry.npmjs.org/express/-/express-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/express/-/express-5.2.1.tgz#8f21d15b6d327f92b4794ecf8cb08a72f956ac04" integrity sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw== dependencies: accepts "^2.0.0" @@ -3251,27 +2810,27 @@ express@^5.0.0: extend@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== fast-copy@^4.0.0: version "4.0.3" - resolved "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-4.0.3.tgz#935adef81c26276dcbe8892347af307b5090206a" integrity sha512-58apWr0GUiDFM8+3afrO6eYwJBn9ZAhDOzG3L+/9llab/haCARS2UIfffmOurYLwbgDRs8n0rfr6qAAPEAuAQw== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.3.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.3.3: version "3.3.3" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -3282,17 +2841,17 @@ fast-glob@^3.3.3: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-safe-stringify@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== fast-xml-builder@1.2.0, fast-xml-builder@^1.2.0: @@ -3303,7 +2862,7 @@ fast-xml-builder@1.2.0, fast-xml-builder@^1.2.0: path-expression-matcher "^1.5.0" xml-naming "^0.1.0" -fast-xml-parser@5.5.8, fast-xml-parser@5.8.0, fast-xml-parser@^5.3.4: +fast-xml-parser@5.7.3, fast-xml-parser@5.8.0, fast-xml-parser@^5.3.4: version "5.8.0" resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.8.0.tgz#64d71f0f8d4bf23621dffd762aef7e98c1884fc1" integrity sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg== @@ -3316,33 +2875,33 @@ fast-xml-parser@5.5.8, fast-xml-parser@5.8.0, fast-xml-parser@^5.3.4: fastq@^1.6.0: version "1.20.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== dependencies: reusify "^1.0.4" fdir@^6.5.0: version "6.5.0" - resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== file-entry-cache@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: flat-cache "^4.0.0" fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" finalhandler@^2.1.0: version "2.1.1" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099" integrity sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA== dependencies: debug "^4.4.0" @@ -3354,7 +2913,7 @@ finalhandler@^2.1.0: find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -3362,7 +2921,7 @@ find-up@^5.0.0: flat-cache@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" @@ -3375,47 +2934,47 @@ flatted@3.4.2, flatted@^3.2.9: foreground-child@^3.1.0: version "3.3.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: cross-spawn "^7.0.6" signal-exit "^4.0.1" form-data@^2.5.5: - version "2.5.5" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz" - integrity sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A== + version "2.5.6" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.6.tgz#ef39b3d99e2fc9f25420c0db7962fe36cafcd244" + integrity sha512-Ogz/E85h9tlfJzpI6TuFpGcHZFhLrb9Gw8wq9v40CxSCPnv7ahKr6Xgtkn0KYCDQJ8DNn5VoMO8EXr9V5PadyA== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" es-set-tostringtag "^2.1.0" - hasown "^2.0.2" + hasown "^2.0.4" mime-types "^2.1.35" safe-buffer "^5.2.1" forwarded@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gaxios@^6.0.0, gaxios@^6.0.2, gaxios@^6.1.1: version "6.7.1" - resolved "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-6.7.1.tgz#ebd9f7093ede3ba502685e73390248bb5b7f71fb" integrity sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ== dependencies: extend "^3.0.2" @@ -3426,7 +2985,7 @@ gaxios@^6.0.0, gaxios@^6.0.2, gaxios@^6.1.1: gcp-metadata@^6.1.0: version "6.1.1" - resolved "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-6.1.1.tgz#f65aa69f546bc56e116061d137d3f5f90bdec494" integrity sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A== dependencies: gaxios "^6.1.1" @@ -3435,14 +2994,14 @@ gcp-metadata@^6.1.0: generate-function@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== dependencies: is-property "^1.0.2" get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: call-bind-apply-helpers "^1.0.2" @@ -3458,46 +3017,39 @@ get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" -get-tsconfig@^4.7.5: - version "4.14.0" - resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz" - integrity sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA== - dependencies: - resolve-pkg-maps "^1.0.0" - getopts@2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4" integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA== glob-parent@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@^10.4.1: version "10.5.0" - resolved "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== dependencies: foreground-child "^3.1.0" @@ -3509,12 +3061,12 @@ glob@^10.4.1: globals@^14.0.0: version "14.0.0" - resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== google-auth-library@^9.6.3: version "9.15.1" - resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.15.1.tgz#0c5d84ed1890b2375f1cd74f03ac7b806b392928" integrity sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng== dependencies: base64-js "^1.3.0" @@ -3526,25 +3078,25 @@ google-auth-library@^9.6.3: google-logging-utils@^0.0.2: version "0.0.2" - resolved "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz" + resolved "https://registry.yarnpkg.com/google-logging-utils/-/google-logging-utils-0.0.2.tgz#5fd837e06fa334da450433b9e3e1870c1594466a" integrity sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ== gopd@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graphql-depth-limit@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz#59fe6b2acea0ab30ee7344f4c75df39cc18244e8" integrity sha512-+3B2BaG8qQ8E18kzk9yiSdAa75i/hnnOwgSeAxVJctGQPvmeiLtqKOYF6HETCyRjiF7Xfsyal0HbLlxCQkgkrw== dependencies: arrify "^1.0.1" graphql-yoga@^5.21.0: - version "5.21.0" - resolved "https://registry.npmjs.org/graphql-yoga/-/graphql-yoga-5.21.0.tgz" - integrity sha512-PS37UoDihx8209RRl1ogttzWevNYDnGvP7beHkwHzUpUdfZTHsVRTVe1ysGXre1EjwUAePbpez302YSrq70Ngw== + version "5.21.2" + resolved "https://registry.yarnpkg.com/graphql-yoga/-/graphql-yoga-5.21.2.tgz#93c8c15c67b7b515d3c6d70b70b9261984fe97fe" + integrity sha512-IIRF/3xtjj2D6caAWL9177hQ8tV3mWB3hve1GRnz7njPhQ3iY1jFtSp98fNGv0yV9kaPh9kKQ8JWdJZnedVmDw== dependencies: "@envelop/core" "^5.5.1" "@envelop/instrumentation" "^1.0.0" @@ -3555,18 +3107,18 @@ graphql-yoga@^5.21.0: "@graphql-yoga/subscription" "^5.0.5" "@whatwg-node/fetch" "^0.10.6" "@whatwg-node/promise-helpers" "^1.3.2" - "@whatwg-node/server" "^0.10.14" + "@whatwg-node/server" "^0.11.0" lru-cache "^10.0.0" tslib "^2.8.1" graphql@^16.13.2: - version "16.13.2" - resolved "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz" - integrity sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig== + version "16.14.2" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.14.2.tgz#83faf25869e3df727cc855161db5da85b0e5b2c0" + integrity sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA== gtoken@^7.0.0: version "7.1.0" - resolved "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-7.1.0.tgz#d61b4ebd10132222817f7222b1e6064bd463fc26" integrity sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw== dependencies: gaxios "^6.0.0" @@ -3574,25 +3126,25 @@ gtoken@^7.0.0: has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== +hasown@^2.0.2, hasown@^2.0.3, hasown@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.4.tgz#8c62d8cb90beb2aad5d0a5b67581ad9854c3f003" + integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A== dependencies: function-bind "^1.1.2" @@ -3614,22 +3166,22 @@ heic-decode@^2.0.0: help-me@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/help-me/-/help-me-5.0.0.tgz#b1ebe63b967b74060027c2ac61f9be12d354a6f6" integrity sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg== html-entities@^2.5.2: version "2.6.0" - resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.6.0.tgz#7c64f1ea3b36818ccae3d3fb48b6974208e984f8" integrity sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ== html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-errors@^2.0.0, http-errors@^2.0.1, http-errors@~2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== dependencies: depd "~2.0.0" @@ -3640,7 +3192,7 @@ http-errors@^2.0.0, http-errors@^2.0.1, http-errors@~2.0.1: http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -3649,7 +3201,7 @@ http-proxy-agent@^5.0.0: https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -3657,15 +3209,15 @@ https-proxy-agent@^5.0.0: https-proxy-agent@^7.0.1: version "7.0.6" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== dependencies: agent-base "^7.1.2" debug "4" -iconv-lite@^0.7.0, iconv-lite@^0.7.2, iconv-lite@~0.7.0: +iconv-lite@^0.7.2, iconv-lite@~0.7.0: version "0.7.2" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" @@ -3677,17 +3229,17 @@ ieee754@^1.1.4: ignore@^5.2.0: version "5.3.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== ignore@^7.0.5: version "7.0.5" - resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== import-fresh@^3.2.1: version "3.3.1" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" @@ -3695,22 +3247,22 @@ import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inherits@^2.0.3, inherits@~2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== interpret@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -ioredis@5.10.1, ioredis@^5.10.1: +ioredis@5.10.1: version "5.10.1" - resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.10.1.tgz" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.10.1.tgz#6082781d8aec8d51ee4936bf81d0610404db1e3d" integrity sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA== dependencies: "@ioredis/commands" "1.5.1" @@ -3723,75 +3275,88 @@ ioredis@5.10.1, ioredis@^5.10.1: redis-parser "^3.0.0" standard-as-callback "^2.1.0" +ioredis@^5.10.1: + version "5.11.1" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.11.1.tgz#2d1e52e350a79ee3b00883f3681a410427b49f28" + integrity sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A== + dependencies: + "@ioredis/commands" "1.10.0" + cluster-key-slot "1.1.1" + debug "4.4.3" + denque "2.1.0" + redis-errors "1.2.0" + redis-parser "3.0.0" + standard-as-callback "2.1.0" + ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-core-module@^2.16.0: - version "2.16.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== +is-core-module@^2.16.1: + version "2.16.2" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.2.tgz#3e07450a8080ebce3fbf0cac494f4d2ab324e082" + integrity sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA== dependencies: - hasown "^2.0.2" + hasown "^2.0.3" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-promise@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== is-property@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isolated-vm@^6.1.2: version "6.1.2" - resolved "https://registry.npmjs.org/isolated-vm/-/isolated-vm-6.1.2.tgz" + resolved "https://registry.yarnpkg.com/isolated-vm/-/isolated-vm-6.1.2.tgz#812c655f9dc4e1328a766d520cff6c3a88ee911b" integrity sha512-GGfsHqtlZiiurZaxB/3kY7LLAXR3sgzDul0fom4cSyBjx6ZbjpTrFWiH3z/nUfLJGJ8PIq9LQmQFiAxu24+I7A== dependencies: node-gyp-build "^4.8.4" istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: version "3.2.2" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -3800,7 +3365,7 @@ istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: istanbul-lib-source-maps@^5.0.6: version "5.0.6" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== dependencies: "@jridgewell/trace-mapping" "^0.3.23" @@ -3809,7 +3374,7 @@ istanbul-lib-source-maps@^5.0.6: istanbul-reports@^3.1.7: version "3.2.0" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== dependencies: html-escaper "^2.0.0" @@ -3817,7 +3382,7 @@ istanbul-reports@^3.1.7: jackspeak@^3.1.2: version "3.4.3" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" @@ -3825,13 +3390,13 @@ jackspeak@^3.1.2: "@pkgjs/parseargs" "^0.11.0" jose@^6.2.2: - version "6.2.2" - resolved "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz" - integrity sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ== + version "6.2.3" + resolved "https://registry.yarnpkg.com/jose/-/jose-6.2.3.tgz#0975197ad973251221c658a3cddc4b951a250c2d" + integrity sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw== joycon@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== jpeg-js@^0.4.4: @@ -3841,46 +3406,46 @@ jpeg-js@^0.4.4: js-tokens@^10.0.0: version "10.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-10.0.0.tgz#dffe7599b4a8bb7fe30aff8d0235234dffb79831" integrity sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q== js-tokens@^9.0.1: version "9.0.1" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.1.tgz#2ec43964658435296f6761b34e10671c2d9527f4" integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== js-yaml@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz" - integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + version "4.2.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.2.0.tgz#2bd9e85682dd91bd469afb809d816043b3d49524" + integrity sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw== dependencies: argparse "^2.0.1" json-bigint@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== dependencies: bignumber.js "^9.0.0" json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== jsonwebtoken@^9.0.3: version "9.0.3" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#6cd57ab01e9b0ac07cb847d53d3c9b6ee31f7ae2" integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g== dependencies: jws "^4.0.1" @@ -3896,7 +3461,7 @@ jsonwebtoken@^9.0.3: jwa@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804" integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg== dependencies: buffer-equal-constant-time "^1.0.1" @@ -3905,7 +3470,7 @@ jwa@^2.0.1: jws@^4.0.0, jws@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.1.tgz#07edc1be8fac20e677b283ece261498bd38f0690" integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA== dependencies: jwa "^2.0.1" @@ -3913,20 +3478,20 @@ jws@^4.0.0, jws@^4.0.1: keyv@^4.5.4: version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" kleur@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== knex@^3.2.9: - version "3.2.9" - resolved "https://registry.npmjs.org/knex/-/knex-3.2.9.tgz" - integrity sha512-dtAILTjBMaG8YloP5oBxohDIKyIsdQ/TkcVvSjhsksvsjeH63Y0PADyuMDfNZKbVT3Rlx3vEYVBlecbPT/KerA== + version "3.2.10" + resolved "https://registry.yarnpkg.com/knex/-/knex-3.2.10.tgz#ca8f77a10851b1e18b26463a6dc995e563c3b165" + integrity sha512-oypTHfrc9i72iyxaUQBKHOxhcr0xM65MPf6FpN02nimsftXwzXprIkLjfXdubvhbu4PMWLp023q8o8CYvHSuZw== dependencies: colorette "2.0.19" commander "^10.0.0" @@ -3936,7 +3501,7 @@ knex@^3.2.9: get-package-type "^0.1.0" getopts "2.3.0" interpret "^2.2.0" - lodash "^4.17.21" + lodash "^4.18.1" pg-connection-string "2.6.2" rechoir "^0.8.0" resolve-from "^5.0.0" @@ -3945,7 +3510,7 @@ knex@^3.2.9: levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -3958,101 +3523,101 @@ libheif-js@^1.19.8: locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.defaults@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== lodash.includes@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== lodash.isarguments@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== lodash.isboolean@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== lodash.isinteger@^4.0.4: version "4.0.4" - resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== lodash.isnumber@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isstring@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.once@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash@^4.17.21: +lodash@^4.18.1: version "4.18.1" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== long@^5.3.2: version "5.3.2" - resolved "https://registry.npmjs.org/long/-/long-5.3.2.tgz" + resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== loupe@^3.1.0, loupe@^3.1.4: version "3.2.1" - resolved "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.2.1.tgz#0095cf56dc5b7a9a7c08ff5b1a8796ec8ad17e76" integrity sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ== lru-cache@^10.0.0, lru-cache@^10.2.0: version "10.4.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru.min@^1.1.0, lru.min@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/lru.min/-/lru.min-1.1.4.tgz#6ea1737a8c1ba2300cc87ad46910a4bdffa0117b" integrity sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA== luxon@^3.2.1: version "3.7.2" - resolved "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba" integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew== magic-string@^0.30.17, magic-string@^0.30.21: version "0.30.21" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== dependencies: "@jridgewell/sourcemap-codec" "^1.5.5" magicast@^0.3.5: version "0.3.5" - resolved "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.5.tgz#8301c3c7d66704a0771eb1bad74274f0ec036739" integrity sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ== dependencies: "@babel/parser" "^7.25.4" @@ -4061,44 +3626,44 @@ magicast@^0.3.5: make-dir@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: semver "^7.5.3" math-intrinsics@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== media-typer@0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== media-typer@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561" integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== memory-pager@^1.0.2: version "1.5.0" - resolved "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== merge-descriptors@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808" integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== merge2@^1.3.0: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" @@ -4106,121 +3671,121 @@ micromatch@^4.0.8: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-db@^1.54.0: version "1.54.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime-types@^3.0.0, mime-types@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== dependencies: mime-db "^1.54.0" mime@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== minimatch@^10.2.2: version "10.2.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1" integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg== dependencies: brace-expansion "^5.0.5" -minimatch@^3.1.2, minimatch@^3.1.5: +minimatch@^3.1.5: version "3.1.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== dependencies: brace-expansion "^1.1.7" minimatch@^9.0.4: version "9.0.9" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== dependencies: brace-expansion "^2.0.2" minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.3" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== mongodb-connection-string-url@^7.0.0: version "7.0.1" - resolved "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-7.0.1.tgz#347b664cd9e6ddff10d5c1c6010d6d8dbfe9272d" integrity sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ== dependencies: "@types/whatwg-url" "^13.0.0" whatwg-url "^14.1.0" mongodb@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/mongodb/-/mongodb-7.1.1.tgz" - integrity sha512-067DXiMjcpYQl6bGjWQoTUEE9UoRViTtKFcoqX7z08I+iDZv/emH1g8XEFiO3qiDfXAheT5ozl1VffDTKhIW/w== + version "7.3.0" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-7.3.0.tgz#bd7d47c34590861fd37741914f259cea199d6c07" + integrity sha512-WpCqSx7JAU9vcyjm/SU7ydnHls2YrfU3Y3sx4Ml9D7sPe4mXPlaapndiurDXrQ7/VvJkB4/i7b7WovHb8bd8sg== dependencies: "@mongodb-js/saslprep" "^1.3.0" - bson "^7.1.1" + bson "^7.2.0" mongodb-connection-string-url "^7.0.0" ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@3.0.0-canary.202508261828: version "3.0.0-canary.202508261828" - resolved "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.202508261828.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-3.0.0-canary.202508261828.tgz#be2e8829740af5bd1db8605ca4fcb0d1ff44c11f" integrity sha512-NotsCoUCIUkojWCzQff4ttdCfIPoA1UGZsyQbi7KmqkNRfKCrvga8JJi2PknHymHOuor0cJSn/ylj52Cbt2IrQ== ms@^2.1.1, ms@^2.1.3: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -msgpackr-extract@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz" - integrity sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA== +msgpackr-extract@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz#d252698947f7a1a62478d22bfb789ba48dd4c1ac" + integrity sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw== dependencies: node-gyp-build-optional-packages "5.2.2" 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" - -msgpackr@1.11.5: - version "1.11.5" - resolved "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.5.tgz" - integrity sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA== + "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.4" + "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.4" + "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.4" + "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.4" + "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.4" + "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.4" + +msgpackr@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-2.0.2.tgz#2b9838ba796d4c9760878a04d4fa69391178b5ac" + integrity sha512-c5hYOXFbP79Slh6Dzd2wzk+jnV7mX1UxfMYtilnY1NmalXPqG8DGb5cYCMBrW4AsH3zekBBZd4QrKz9NhtvYLQ== optionalDependencies: - msgpackr-extract "^3.0.2" + msgpackr-extract "^3.0.4" multer@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/multer/-/multer-2.1.1.tgz" - integrity sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/XYU6UuJ3VZnODIrak5ZrPiPyB6A== + version "2.2.0" + resolved "https://registry.yarnpkg.com/multer/-/multer-2.2.0.tgz#f005268ca816324ba7335e3b48166896a3fa5d79" + integrity sha512-6rdyFg2kLrMh9Jee7/BMPuV9lEAd7lLW2YUpF9/YxR7njyoUwwQ0ZPh3TaIY50Sw6vlyD2HW3wGOkTS4P79xrQ== dependencies: append-field "^1.0.0" busboy "^1.6.0" @@ -4228,9 +3793,9 @@ multer@^2.1.1: type-is "^1.6.18" mysql2@^3.20.0: - version "3.20.0" - resolved "https://registry.npmjs.org/mysql2/-/mysql2-3.20.0.tgz" - integrity sha512-eCLUs7BNbgA6nf/MZXsaBO1SfGs0LtLVrJD3WeWq+jPLDWkSufTD+aGMwykfUVPdZnblaUK1a8G/P63cl9FkKg== + version "3.22.5" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.22.5.tgz#26c51c035ac577579ad239168015ad1eec321679" + integrity sha512-95uZ2TrPWAZdwpB3vvvDbmEMcNG8yIeNCyu6GUcr/QnWEE/wXm7+mhOCsdQfWQDTV7qYT/PDUZ4U4UPP4AsXqQ== dependencies: aws-ssl-profiles "^1.1.2" denque "^2.1.0" @@ -4243,92 +3808,92 @@ mysql2@^3.20.0: named-placeholders@^1.1.6: version "1.1.6" - resolved "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz" + resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.6.tgz#c50c6920b43f258f59c16add1e56654f5cc02bb5" integrity sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w== dependencies: lru.min "^1.1.0" nanoid@^3.3.12: - version "3.3.12" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.12.tgz#ab3d912e217a6d0a514f00a72a16543a28982c05" - integrity sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ== + version "3.3.15" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.15.tgz#36c490fad8c6e86c824c940dfdde999b69ed4316" + integrity sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== negotiator@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== node-abort-controller@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== node-fetch@^2.6.9: version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-gyp-build-optional-packages@5.2.2: version "5.2.2" - resolved "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz" + resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz#522f50c2d53134d7f3a76cd7255de4ab6c96a3a4" integrity sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw== dependencies: detect-libc "^2.0.1" node-gyp-build@^4.8.4: version "4.8.4" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== notepack.io@~3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/notepack.io/-/notepack.io-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/notepack.io/-/notepack.io-3.0.1.tgz#2c2c9de1bd4e64a79d34e33c413081302a0d4019" integrity sha512-TKC/8zH5pXIAMVQio2TvVDTtPRX+DJPHDqjRbxogtFiByHyzKmy96RA0JtCQJ+WouyyL4A10xomQzgbUT+1jCg== object-assign@^4: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.3: +object-inspect@^1.13.3, object-inspect@^1.13.4: version "1.13.4" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== on-exit-leak-free@^2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== on-finished@^2.4.1: version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" optionator@^0.9.3: version "0.9.4" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" @@ -4340,58 +3905,58 @@ optionator@^0.9.3: p-limit@^3.0.1, p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" package-json-from-dist@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parseurl@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-expression-matcher@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz#3b98545dc88ffebb593e2d8458d0929da9275f4a" - integrity sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ== + version "1.6.0" + resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.6.0.tgz#a94b623c5a24b1087eb348b02fa5dae8cb363212" + integrity sha512-e5y7RCLHKjemsgQ4eqGJtPyr10ILz25HO7flzxhTV8bgvd5yHx98DGtCAtbVW9f2TqnYI/gEVZd+vz7snrdPTw== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-scurry@^1.11.1: version "1.11.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" @@ -4399,52 +3964,52 @@ path-scurry@^1.11.1: path-to-regexp@^8.0.0: version "8.4.2" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.4.2.tgz#795c420c4f7ca45c5b887366f622ee0c9852cccd" integrity sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA== pathe@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== pathval@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.1.tgz#8855c5a2899af072d6ac05d11e46045ad0dc605d" integrity sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ== -pg-cloudflare@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz" - integrity sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ== +pg-cloudflare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz#4b4c20e6d8ae531d400730f4804571a8d62f1497" + integrity sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A== pg-connection-string@2.6.2: version "2.6.2" - resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== -pg-connection-string@^2.12.0: - version "2.12.0" - resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz" - integrity sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ== +pg-connection-string@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.14.0.tgz#abc26ee4f37c56c0f3ae0fcf0b0653cc4e1c0fd9" + integrity sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg== pg-int8@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== -pg-pool@^3.13.0: - version "3.13.0" - resolved "https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz" - integrity sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA== +pg-pool@^3.14.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.14.0.tgz#f35ae4eb846780cad71af24099b3edfa9781ad90" + integrity sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw== -pg-protocol@^1.13.0: - version "1.13.0" - resolved "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz" - integrity sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w== +pg-protocol@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.15.0.tgz#758f6c0679cc0bbf4938603b7597703f333180c0" + integrity sha512-cq9sECI5s0+uPUXjbz8ioyPJni6RzsRib0US67i5IoTZKw8fNeYlVE7u8F4dG7vEJJtc5wdD1K189lCCUwqWTQ== pg-types@2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== dependencies: pg-int8 "1.0.1" @@ -4454,28 +4019,28 @@ pg-types@2.2.0: postgres-interval "^1.1.0" pg@^8.20.0: - version "8.20.0" - resolved "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz" - integrity sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA== + version "8.22.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.22.0.tgz#55ca3975026180c6dced6eec3a20a844c2dc9237" + integrity sha512-8wih1vVIBMxoUM2oB4soJsD9tDnDpLv4OXBJ+EJzFsvycD+lfyIreC2gGHq78f8jbLLt+bvlPTFdFZfJkOuzAA== dependencies: - pg-connection-string "^2.12.0" - pg-pool "^3.13.0" - pg-protocol "^1.13.0" + pg-connection-string "^2.14.0" + pg-pool "^3.14.0" + pg-protocol "^1.15.0" pg-types "2.2.0" pgpass "1.0.5" optionalDependencies: - pg-cloudflare "^1.3.0" + pg-cloudflare "^1.4.0" pgpass@1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== dependencies: split2 "^4.1.0" picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.3.1: @@ -4485,19 +4050,19 @@ picomatch@^2.3.1: picomatch@^4.0.2, picomatch@^4.0.3, picomatch@^4.0.4: version "4.0.4" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== pino-abstract-transport@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz#b21e5f33a297e8c4c915c62b3ce5dd4a87a52c23" integrity sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg== dependencies: split2 "^4.0.0" pino-pretty@^13.1.3: version "13.1.3" - resolved "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz" + resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-13.1.3.tgz#2274cccda925dd355c104079a5029f6598d0381b" integrity sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg== dependencies: colorette "^2.0.7" @@ -4516,7 +4081,7 @@ pino-pretty@^13.1.3: pino-roll@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/pino-roll/-/pino-roll-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/pino-roll/-/pino-roll-4.0.0.tgz#cae376045fee327753f924215cc67a1515afc04c" integrity sha512-axI1aQaIxXdw1F4OFFli1EDxIrdYNGLowkw/ZoZogX8oCSLHUghzwVVXUS8U+xD/Savwa5IXpiXmsSGKFX/7Sg== dependencies: date-fns "^4.1.0" @@ -4524,12 +4089,12 @@ pino-roll@^4.0.0: pino-std-serializers@^7.0.0: version "7.1.0" - resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz#a7b0cd65225f29e92540e7853bd73b07479893fc" integrity sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw== pino@^10.3.1: version "10.3.1" - resolved "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz" + resolved "https://registry.yarnpkg.com/pino/-/pino-10.3.1.tgz#6552c8f8d8481844c9e452e7bf0be90bff1939ce" integrity sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg== dependencies: "@pinojs/redact" "^0.4.0" @@ -4549,7 +4114,7 @@ pngjs@^6.0.0: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== -postcss@8.5.15, postcss@^8.5.6, postcss@^8.5.8: +postcss@8.5.15, postcss@^8.5.15, postcss@^8.5.6: version "8.5.15" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.15.tgz#d1eaf677a324e9ec02196da2d3fecf4a0b9a735c" integrity sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A== @@ -4560,51 +4125,51 @@ postcss@8.5.15, postcss@^8.5.6, postcss@^8.5.8: postgres-array@~2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + version "1.0.1" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.1.tgz#c40b3da0222c500ff1e51c5d7014b60b79697c7a" + integrity sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ== postgres-date@~1.0.4: version "1.0.7" - resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== postgres-interval@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== dependencies: xtend "^4.0.0" prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-linter-helpers@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz#6a31f88a4bad6c7adda253de12ba4edaea80ebcd" integrity sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg== dependencies: fast-diff "^1.1.2" prettier@^3.8.1: - version "3.8.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz" - integrity sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg== + version "3.8.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.4.tgz#f334f013ac04a96676f24dabc23c1c4ae1bae411" + integrity sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q== process-warning@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-5.0.0.tgz#566e0bf79d1dff30a72d8bbbe9e8ecefe8d378d7" integrity sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA== prompts@^2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" @@ -4612,26 +4177,26 @@ prompts@^2.4.2: proxy-addr@^2.0.7: version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" ipaddr.js "1.9.1" pump@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz" - integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.4.tgz#1f313430527fa8b905622ebd22fe1444e757ab3c" + integrity sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA== dependencies: end-of-stream "^1.1.0" once "^1.3.1" punycode@^2.1.0, punycode@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@6.15.2, qs@^6.14.0, qs@^6.14.1, qs@^6.15.2: +qs@6.15.2, qs@^6.14.0, qs@^6.15.2: version "6.15.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.2.tgz#fd55426d710403ddccc45e0f9eab16db7727ece9" integrity sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw== @@ -4640,22 +4205,22 @@ qs@6.15.2, qs@^6.14.0, qs@^6.14.1, qs@^6.15.2: queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-format-unescaped@^4.0.3: version "4.0.4" - resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== range-parser@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@^3.0.1: +raw-body@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.2.tgz#3e3ada5ae5568f9095d84376fd3a49b8fb000a51" integrity sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA== dependencies: bytes "~3.1.2" @@ -4665,7 +4230,7 @@ raw-body@^3.0.1: readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.5.0: version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -4674,55 +4239,56 @@ readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.5.0: real-require@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== +real-require@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-1.0.0.tgz#e4f0a3737e8060c513b60c2652c58b8ef56bc8a9" + integrity sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g== + rechoir@^0.8.0: version "0.8.0" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: resolve "^1.20.0" -redis-errors@^1.0.0, redis-errors@^1.2.0: +redis-errors@1.2.0, redis-errors@^1.0.0, redis-errors@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== -redis-parser@^3.0.0: +redis-parser@3.0.0, redis-parser@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== dependencies: redis-errors "^1.0.0" resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - resolve@^1.20.0: - version "1.22.10" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + version "1.22.12" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" + integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== dependencies: - is-core-module "^2.16.0" + es-errors "^1.3.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" retry-request@^7.0.0: version "7.0.2" - resolved "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-7.0.2.tgz#60bf48cfb424ec01b03fca6665dee91d06dd95f3" integrity sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w== dependencies: "@types/request" "^2.48.8" @@ -4731,51 +4297,51 @@ retry-request@^7.0.0: retry@0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.1.0" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rollup@^4.43.0: - version "4.60.2" - resolved "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz" - integrity sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ== + version "4.62.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.62.2.tgz#d90fc4cb811f071303c890b779595634f35f9541" + integrity sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA== dependencies: - "@types/estree" "1.0.8" + "@types/estree" "1.0.9" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.60.2" - "@rollup/rollup-android-arm64" "4.60.2" - "@rollup/rollup-darwin-arm64" "4.60.2" - "@rollup/rollup-darwin-x64" "4.60.2" - "@rollup/rollup-freebsd-arm64" "4.60.2" - "@rollup/rollup-freebsd-x64" "4.60.2" - "@rollup/rollup-linux-arm-gnueabihf" "4.60.2" - "@rollup/rollup-linux-arm-musleabihf" "4.60.2" - "@rollup/rollup-linux-arm64-gnu" "4.60.2" - "@rollup/rollup-linux-arm64-musl" "4.60.2" - "@rollup/rollup-linux-loong64-gnu" "4.60.2" - "@rollup/rollup-linux-loong64-musl" "4.60.2" - "@rollup/rollup-linux-ppc64-gnu" "4.60.2" - "@rollup/rollup-linux-ppc64-musl" "4.60.2" - "@rollup/rollup-linux-riscv64-gnu" "4.60.2" - "@rollup/rollup-linux-riscv64-musl" "4.60.2" - "@rollup/rollup-linux-s390x-gnu" "4.60.2" - "@rollup/rollup-linux-x64-gnu" "4.60.2" - "@rollup/rollup-linux-x64-musl" "4.60.2" - "@rollup/rollup-openbsd-x64" "4.60.2" - "@rollup/rollup-openharmony-arm64" "4.60.2" - "@rollup/rollup-win32-arm64-msvc" "4.60.2" - "@rollup/rollup-win32-ia32-msvc" "4.60.2" - "@rollup/rollup-win32-x64-gnu" "4.60.2" - "@rollup/rollup-win32-x64-msvc" "4.60.2" + "@rollup/rollup-android-arm-eabi" "4.62.2" + "@rollup/rollup-android-arm64" "4.62.2" + "@rollup/rollup-darwin-arm64" "4.62.2" + "@rollup/rollup-darwin-x64" "4.62.2" + "@rollup/rollup-freebsd-arm64" "4.62.2" + "@rollup/rollup-freebsd-x64" "4.62.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.62.2" + "@rollup/rollup-linux-arm-musleabihf" "4.62.2" + "@rollup/rollup-linux-arm64-gnu" "4.62.2" + "@rollup/rollup-linux-arm64-musl" "4.62.2" + "@rollup/rollup-linux-loong64-gnu" "4.62.2" + "@rollup/rollup-linux-loong64-musl" "4.62.2" + "@rollup/rollup-linux-ppc64-gnu" "4.62.2" + "@rollup/rollup-linux-ppc64-musl" "4.62.2" + "@rollup/rollup-linux-riscv64-gnu" "4.62.2" + "@rollup/rollup-linux-riscv64-musl" "4.62.2" + "@rollup/rollup-linux-s390x-gnu" "4.62.2" + "@rollup/rollup-linux-x64-gnu" "4.62.2" + "@rollup/rollup-linux-x64-musl" "4.62.2" + "@rollup/rollup-openbsd-x64" "4.62.2" + "@rollup/rollup-openharmony-arm64" "4.62.2" + "@rollup/rollup-win32-arm64-msvc" "4.62.2" + "@rollup/rollup-win32-ia32-msvc" "4.62.2" + "@rollup/rollup-win32-x64-gnu" "4.62.2" + "@rollup/rollup-win32-x64-msvc" "4.62.2" fsevents "~2.3.2" router@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/router/-/router-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== dependencies: debug "^4.4.0" @@ -4786,39 +4352,44 @@ router@^2.2.0: run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-buffer@^5.0.1, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-stable-stringify@^2.3.1: version "2.5.0" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== secure-json-parse@^4.0.0: version "4.1.0" - resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-4.1.0.tgz#4f1ab41c67a13497ea1b9131bb4183a22865477c" integrity sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA== -semver@7.7.4, semver@^7.5.3, semver@^7.5.4, semver@^7.7.3: - version "7.7.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz" - integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== +semver@7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.1.tgz#bf4970b5e70fda0686363cc18bfe8805d5ed957e" + integrity sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg== + +semver@^7.5.3, semver@^7.5.4, semver@^7.7.3: + version "7.8.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== send@^1.1.0, send@^1.2.0: version "1.2.1" - resolved "https://registry.npmjs.org/send/-/send-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed" integrity sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ== dependencies: debug "^4.4.3" @@ -4835,7 +4406,7 @@ send@^1.1.0, send@^1.2.0: serve-static@^2.2.0: version "2.2.1" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.1.tgz#7f186a4a4e5f5b663ad7a4294ff1bf37cf0e98a9" integrity sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw== dependencies: encodeurl "^2.0.0" @@ -4845,12 +4416,12 @@ serve-static@^2.2.0: setprototypeof@~1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sharp@^0.34.5: version "0.34.5" - resolved "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.34.5.tgz#b6f148e4b8c61f1797bde11a9d1cfebbae2c57b0" integrity sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg== dependencies: "@img/colour" "^1.0.0" @@ -4884,27 +4455,27 @@ sharp@^0.34.5: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== +side-channel-list@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127" + integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== dependencies: es-errors "^1.3.0" - object-inspect "^1.13.3" + object-inspect "^1.13.4" side-channel-map@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: call-bound "^1.0.2" @@ -4914,7 +4485,7 @@ side-channel-map@^1.0.1: side-channel-weakmap@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== dependencies: call-bound "^1.0.2" @@ -4924,42 +4495,42 @@ side-channel-weakmap@^1.0.2: side-channel-map "^1.0.1" side-channel@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.1.tgz#ea02c62e05dc4bea67d4442f0fb71ee192f8e0ab" + integrity sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ== dependencies: es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" + object-inspect "^1.13.4" + side-channel-list "^1.0.1" side-channel-map "^1.0.1" side-channel-weakmap "^1.0.2" siginfo@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== signal-exit@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== socket.io-adapter@~2.5.2: - version "2.5.6" - resolved "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.6.tgz" - integrity sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ== + version "2.5.8" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.8.tgz#c9fcabf602dbd5b09258ca98e5ec6a7ae4360698" + integrity sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw== dependencies: debug "~4.4.1" - ws "~8.18.3" + ws "~8.21.0" socket.io-client@^4.8.3: version "4.8.3" - resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.8.3.tgz#62717edd46a318c918125b57e92dc7f8bb71c34c" integrity sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g== dependencies: "@socket.io/component-emitter" "~3.1.0" @@ -4977,7 +4548,7 @@ socket.io-parser@4.2.6, socket.io-parser@~4.2.4: socket.io@^4.8.3: version "4.8.3" - resolved "https://registry.npmjs.org/socket.io/-/socket.io-4.8.3.tgz" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.3.tgz#ca6ba1431c69532e1e0a6f496deebeb601dbc4df" integrity sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A== dependencies: accepts "~1.3.4" @@ -4990,51 +4561,51 @@ socket.io@^4.8.3: sonic-boom@^4.0.1: version "4.2.1" - resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.1.tgz#28598250df4899c0ac572d7e2f0460690ba6a030" integrity sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q== dependencies: atomic-sleep "^1.0.0" source-map-js@^1.2.0, source-map-js@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== sparse-bitfield@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== dependencies: memory-pager "^1.0.2" split2@^4.0.0, split2@^4.1.0: version "4.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== sql-escaper@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/sql-escaper/-/sql-escaper-1.3.3.tgz" + resolved "https://registry.yarnpkg.com/sql-escaper/-/sql-escaper-1.3.3.tgz#65faf89f048d26bb9a75566b82b5990ddf8a5b7f" integrity sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw== stackback@0.0.2: version "0.0.2" - resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -standard-as-callback@^2.1.0: +standard-as-callback@2.1.0, standard-as-callback@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== std-env@^3.9.0: version "3.10.0" - resolved "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b" integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== stream-browserify@3.0.0: @@ -5047,24 +4618,24 @@ stream-browserify@3.0.0: stream-events@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== dependencies: stubs "^3.0.0" stream-shift@^1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== streamsearch@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -5082,14 +4653,14 @@ string-width@4.2.3, string-width@^4.1.0, string-width@^4.2.0, string-width@^5.0. string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" @@ -5103,65 +4674,65 @@ strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7.0.1: strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@^5.0.2: version "5.0.3" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-5.0.3.tgz#b7304249dd402ee67fd518ada993ab3593458bcf" integrity sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw== strip-literal@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-3.1.0.tgz#222b243dd2d49c0bcd0de8906adbd84177196032" integrity sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg== dependencies: js-tokens "^9.0.1" strnum@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.4.0.tgz#304881c3299b017855f1934a4ce85bfb60b1ca2a" - integrity sha512-sHrVyWWdq28RbhjuJdZsA1SnGRJV6NiXbk6AXBxDOsgAcA+lmpUZCYjOdLBxkXMwis6RRe7dlZt4VlIWFVzkmg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.4.1.tgz#85417f683113badea0fe7e17227676f889ff7e58" + integrity sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg== dependencies: - anynum "^1.0.0" + anynum "^1.0.1" stubs@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" integrity sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw== supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -synckit@^0.11.12: - version "0.11.12" - resolved "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz" - integrity sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ== +synckit@^0.11.13: + version "0.11.13" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.13.tgz#062a5ea57d81befc35892f8254de5c567e97c80a" + integrity sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg== dependencies: - "@pkgr/core" "^0.2.9" + "@pkgr/core" "^0.3.6" tailwindcss@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz" - integrity sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q== + version "4.3.1" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.3.1.tgz#78ee06f6186bc8fb9603f8083eb703dc7dd96a10" + integrity sha512-hk+TB1m+K8CYNrP6rjQaq/Y+4Zylwpa87mLYBKCunwnnQ9p+fHb7kmSfGqyEJoxF/O6CDyABWVFEafNSYKll+Q== tarn@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== teeny-request@^9.0.0: version "9.0.0" - resolved "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-9.0.0.tgz#18140de2eb6595771b1b02203312dfad79a4716d" integrity sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g== dependencies: http-proxy-agent "^5.0.0" @@ -5172,7 +4743,7 @@ teeny-request@^9.0.0: test-exclude@^7.0.1: version "7.0.2" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-7.0.2.tgz#482392077630bc57d5630c13abe908bb910dfc65" integrity sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -5180,181 +4751,177 @@ test-exclude@^7.0.1: minimatch "^10.2.2" thread-stream@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz" - integrity sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA== + version "4.2.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-4.2.0.tgz#054063e93baab22363d05b784d6c7e439230cac7" + integrity sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ== dependencies: - real-require "^0.2.0" + real-require "^1.0.0" tildify@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== tinybench@^2.9.0: version "2.9.0" - resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== tinyexec@^0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== -tinyglobby@^0.2.14: - version "0.2.16" - resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz" - integrity sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg== +tinyglobby@^0.2.14, tinyglobby@^0.2.15: + version "0.2.17" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.17.tgz#562a9a6c9eb2b3b123d39719f9af5bb44fcd7631" + integrity sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g== dependencies: fdir "^6.5.0" picomatch "^4.0.4" -tinyglobby@^0.2.15: - version "0.2.15" - resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz" - integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== - dependencies: - fdir "^6.5.0" - picomatch "^4.0.3" - tinypool@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591" integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== tinyrainbow@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-2.0.0.tgz#9509b2162436315e80e3eee0fcce4474d2444294" integrity sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw== tinyspy@^4.0.3: version "4.0.4" - resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-4.0.4.tgz#d77a002fb53a88aa1429b419c1c92492e0c81f78" integrity sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@~1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tr46@^5.1.0: version "5.1.1" - resolved "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.1.1.tgz#96ae867cddb8fdb64a49cc3059a8d428bcf238ca" integrity sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw== dependencies: punycode "^2.3.1" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== ts-api-utils@^2.5.0: version "2.5.0" - resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.5.0.tgz#4acd4a155e22734990a5ed1fe9e97f113bcb37c1" integrity sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA== tslib@2.8.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.6.3, tslib@^2.8.1: version "2.8.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tsx@^4.21.0: - version "4.21.0" - resolved "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz" - integrity sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw== + version "4.22.4" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.22.4.tgz#0ab3b7fb4ec7feeee74e5b1f26337caa71e44700" + integrity sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg== dependencies: - esbuild "~0.27.0" - get-tsconfig "^4.7.5" + esbuild "~0.28.0" optionalDependencies: fsevents "~2.3.3" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-is@^1.6.18: version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" mime-types "~2.1.24" -type-is@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz" - integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== +type-is@^2.0.1, type-is@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.1.0.tgz#71d1a7053293582e16ac9f3ebaf1ab9aa49e5570" + integrity sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA== dependencies: - content-type "^1.0.5" + content-type "^2.0.0" media-typer "^1.1.0" mime-types "^3.0.0" typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^5.1.3: version "5.9.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== uid2@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/uid2/-/uid2-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/uid2/-/uid2-1.0.0.tgz#ef8d95a128d7c5c44defa1a3d052eecc17a06bfb" integrity sha512-+I6aJUv63YAcY9n4mQreLUt0d4lvwkkopDNmpomkAUz0fAkEMV9pRWxN0EjhW1YfRhcuyHg2v3mwddCDW1+LFQ== -undici-types@~7.16.0: - version "7.16.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz" - integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== +undici-types@~7.18.0: + version "7.18.2" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" + integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== + +undici-types@~8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-8.3.0.tgz#44e9fc9f3244648cdea35e4f9bb2d681e9410809" + integrity sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ== unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" urlpattern-polyfill@^10.0.0: version "10.1.0" - resolved "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz#1b2517e614136c73ba32948d5e7a3a063cba8e74" integrity sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw== util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@11.1.0, uuid@11.1.1, uuid@^11.1.1, uuid@^8.0.0, uuid@^9.0.0, uuid@^9.0.1: +uuid@11.1.1, uuid@^11.1.1, uuid@^9.0.0, uuid@^9.0.1: version "11.1.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.1.tgz#f6d81d2e1c65d00762e5e29b16c5d2d995e208ad" integrity sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ== vary@^1, vary@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vite-node@3.2.4: version "3.2.4" - resolved "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-3.2.4.tgz#f3676d94c4af1e76898c162c92728bca65f7bb07" integrity sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg== dependencies: cac "^6.7.14" @@ -5364,9 +4931,9 @@ vite-node@3.2.4: vite "^5.0.0 || ^6.0.0 || ^7.0.0-0" "vite@^5.0.0 || ^6.0.0 || ^7.0.0-0", vite@^7.3.1: - version "7.3.2" - resolved "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz" - integrity sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg== + version "7.3.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.3.5.tgz#90c2d0b7b94a224e7e7dcf22d2912ff0b5291165" + integrity sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww== dependencies: esbuild "^0.27.0" fdir "^6.5.0" @@ -5407,29 +4974,29 @@ vitest@^3.2.6: why-is-node-running "^2.3.0" vue@^3.5.32: - version "3.5.32" - resolved "https://registry.npmjs.org/vue/-/vue-3.5.32.tgz" - integrity sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw== + version "3.5.38" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.38.tgz#8a6d52f1768e197545e937920d6c197fe76fc2db" + integrity sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A== dependencies: - "@vue/compiler-dom" "3.5.32" - "@vue/compiler-sfc" "3.5.32" - "@vue/runtime-dom" "3.5.32" - "@vue/server-renderer" "3.5.32" - "@vue/shared" "3.5.32" + "@vue/compiler-dom" "3.5.38" + "@vue/compiler-sfc" "3.5.38" + "@vue/runtime-dom" "3.5.38" + "@vue/server-renderer" "3.5.38" + "@vue/shared" "3.5.38" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== whatwg-url@^14.1.0: version "14.2.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.2.0.tgz#4ee02d5d725155dae004f6ae95c73e7ef5d95663" integrity sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw== dependencies: tr46 "^5.1.0" @@ -5437,7 +5004,7 @@ whatwg-url@^14.1.0: whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -5445,14 +5012,14 @@ whatwg-url@^5.0.0: which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" why-is-node-running@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== dependencies: siginfo "^2.0.0" @@ -5460,12 +5027,12 @@ why-is-node-running@^2.3.0: word-wrap@^1.2.5: version "1.2.5" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -5474,7 +5041,7 @@ word-wrap@^1.2.5: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -5483,10 +5050,10 @@ wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@8.21.0, ws@^8.20.1, ws@~8.18.3: +ws@8.21.0, ws@^8.20.1, ws@~8.21.0: version "8.21.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.21.0.tgz#012e413fc07429945121b0c153158c4343086951" integrity sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g== @@ -5498,20 +5065,20 @@ xml-naming@^0.1.0: xmlhttprequest-ssl@~2.1.1: version "2.1.2" - resolved "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz#e9e8023b3f29ef34b97a859f584c5e6c61418e23" integrity sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ== xtend@^4.0.0: version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== zod@^4.3.6: - version "4.3.6" - resolved "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz" - integrity sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg== + version "4.4.3" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.4.3.tgz#b680f172885d18bbebf21a834ea25e55a1bbf356" + integrity sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==