diff --git a/Dockerfile b/Dockerfile index 59b46e4..1ce801c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,4 +28,4 @@ WORKDIR /app COPY --from=builder /app/.output ./ -CMD node /app/server/index.mjs \ No newline at end of file +CMD ["node", "/app/server/index.mjs"] \ No newline at end of file diff --git a/lib/db/index.ts b/lib/db/index.ts index 72f7d59..2f949a5 100644 --- a/lib/db/index.ts +++ b/lib/db/index.ts @@ -4,11 +4,12 @@ import type { DatabaseDriverName } from '~/lib/db/drivers' import cluster from 'node:cluster' import { hash } from 'node:crypto' +import { createSingletonPromise } from '@antfu/utils' import { Kysely, Migrator } from 'kysely' import { getDatabaseDriver } from '~/lib/db/drivers' import { migrations } from '~/lib/db/migrations' -import { ENV } from '~/lib/env' +import { ENV } from '~/lib/env' import { logger } from '~/lib/logger' export interface CacheKeysTable { @@ -23,12 +24,10 @@ export interface UploadsTable { key: string version: string id: string - driver_upload_id: string } export interface UploadPartsTable { upload_id: string part_number: number - e_tag: string | null } export interface MetaTable { @@ -43,62 +42,46 @@ export interface Database { meta: MetaTable } -let _db: Kysely - -let initializationPromise: Promise | undefined -export async function initializeDatabase() { - if (initializationPromise) return initializationPromise - - // eslint-disable-next-line unicorn/consistent-function-scoping - const init = async () => { - const driverName = ENV.DB_DRIVER - const driverSetup = getDatabaseDriver(driverName) - if (!driverSetup) { - logger.error(`No database driver found for ${driverName}`) - // eslint-disable-next-line unicorn/no-process-exit - process.exit(1) - } - if (cluster.isPrimary) logger.info(`Using database driver: ${driverName}`) +export const useDB = createSingletonPromise(async () => { + const driverName = ENV.DB_DRIVER + const driverSetup = getDatabaseDriver(driverName) + if (!driverSetup) { + logger.error(`No database driver found for ${driverName}`) + // eslint-disable-next-line unicorn/no-process-exit + process.exit(1) + } + if (cluster.isPrimary) logger.info(`Using database driver: ${driverName}`) - const driver = await driverSetup() + const driver = await driverSetup() - _db = new Kysely({ - dialect: driver, - }) + const db = new Kysely({ + dialect: driver, + }) - if (cluster.isPrimary) { - logger.info('Migrating database...') - const migrator = new Migrator({ - db: _db, - provider: { - async getMigrations() { - return migrations(driverName as DatabaseDriverName) - }, + if (cluster.isPrimary) { + logger.info('Migrating database...') + const migrator = new Migrator({ + db, + provider: { + async getMigrations() { + return migrations(driverName as DatabaseDriverName) }, - }) - const { error, results } = await migrator.migrateToLatest() - if (error) { - logger.error('Database migration failed', error) - // eslint-disable-next-line unicorn/no-process-exit - process.exit(1) - } - logger.debug('Migration results', results) - logger.success('Database migrated') + }, + }) + const { error, results } = await migrator.migrateToLatest() + if (error) { + logger.error('Database migration failed', error) + // eslint-disable-next-line unicorn/no-process-exit + process.exit(1) } + logger.debug('Migration results', results) + logger.success('Database migrated') } - initializationPromise = init() - return initializationPromise -} - -export async function useDB() { - if (!_db) { - await initializeDatabase() - } - return _db -} + return db +}) -type DB = typeof _db +type DB = Awaited> /** * @see https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#matching-a-cache-key diff --git a/lib/db/migrations.ts b/lib/db/migrations.ts index 7fef4ef..f23e950 100644 --- a/lib/db/migrations.ts +++ b/lib/db/migrations.ts @@ -70,5 +70,11 @@ export function migrations(dbType: DatabaseDriverName) { await db.schema.dropTable('meta').ifExists().execute() }, }, + $3_remove_unused_columns: { + async up(db) { + await db.schema.alterTable('uploads').dropColumn('driver_upload_id').execute() + await db.schema.alterTable('upload_parts').dropColumn('e_tag').execute() + }, + }, } satisfies Record } diff --git a/lib/storage/defineStorageDriver.ts b/lib/storage/defineStorageDriver.ts index ec4f32c..888bcc8 100644 --- a/lib/storage/defineStorageDriver.ts +++ b/lib/storage/defineStorageDriver.ts @@ -2,53 +2,66 @@ import type { Readable } from 'node:stream' import type { z } from 'zod' +import path from 'node:path' import { formatZodError } from '~/lib/env' import { logger } from '~/lib/logger' -interface PartDetails { - partNumber: number - eTag?: string -} +export abstract class StorageDriver { + static baseFolder = 'gh-actions-cache' + static uploadFolder = '.uploads' + baseFolderPrefix: string | undefined + + constructor(baseFolderPrefix?: string) { + this.baseFolderPrefix = baseFolderPrefix + } + + addBaseFolderPrefix(objectName: string) { + return path.join(this.baseFolderPrefix ?? '', StorageDriver.baseFolder, objectName) + } + + getUploadFolderPrefix(uploadId: string) { + return path.join( + this.baseFolderPrefix ?? '', + StorageDriver.baseFolder, + StorageDriver.uploadFolder, + uploadId, + ) + } + + addUploadFolderPrefix(opts: { uploadId: string; objectName: string }) { + return path.join(this.getUploadFolderPrefix(opts.uploadId), opts.objectName) + } -export interface StorageDriver { - initiateMultiPartUpload: (opts: { objectName: string; totalSize: number }) => Promise - uploadPart: (opts: { - objectName: string + getUploadPartObjectName(opts: { uploadId: string; partNumber: number }) { + return this.addUploadFolderPrefix({ + uploadId: opts.uploadId, + objectName: `part_${opts.partNumber}`, + }) + } + + abstract delete(objectNames: string[]): Promise + abstract createReadStream(objectName: string): Promise + abstract createDownloadUrl?(objectName: string): Promise + abstract uploadPart(opts: { uploadId: string partNumber: number data: ReadableStream - chunkStart: number - }) => Promise<{ - eTag: string | null - }> - completeMultipartUpload: (opts: { - objectName: string + }): Promise + abstract completeMultipartUpload(opts: { + finalOutputObjectName: string uploadId: string - parts: PartDetails[] - }) => Promise - abortMultipartUpload: (opts: { objectName: string; uploadId: string }) => Promise - download: (opts: { objectName: string }) => Promise - createDownloadUrl?: (opts: { objectName: string }) => Promise - delete: (opts: { objectNames: string[] }) => Promise + partNumbers: number[] + }): Promise + abstract cleanupMultipartUpload(uploadId: string): Promise } -interface DefineStorageDriverOptions { - envSchema: EnvSchema - setup: (options: z.output) => Promise | StorageDriver -} -export function defineStorageDriver( - options: DefineStorageDriverOptions, -) { - return () => { - const env = options.envSchema.safeParse(process.env) - if (!env.success) { - logger.error(`Invalid environment variables:\n${formatZodError(env.error)}`) - // eslint-disable-next-line unicorn/no-process-exit - process.exit(1) - } - - const driver = options.setup(env.data) - return driver instanceof Promise ? driver : Promise.resolve(driver) +export function parseEnv(schema: Schema) { + const env = schema.safeParse(process.env) + if (!env.success) { + logger.error(`Invalid environment variables:\n${formatZodError(env.error)}`) + // eslint-disable-next-line unicorn/no-process-exit + process.exit(1) } + return env.data as z.output } diff --git a/lib/storage/drivers/filesystem.ts b/lib/storage/drivers/filesystem.ts index 2775b2f..36d784c 100644 --- a/lib/storage/drivers/filesystem.ts +++ b/lib/storage/drivers/filesystem.ts @@ -1,79 +1,96 @@ -import { createReadStream, promises as fs } from 'node:fs' +import { createReadStream, createWriteStream, promises as fs } from 'node:fs' import path from 'node:path' +import { pipeline } from 'node:stream/promises' import { z } from 'zod' -import { ENV } from '~/lib/env' -import { defineStorageDriver } from '~/lib/storage/defineStorageDriver' +import { parseEnv, StorageDriver } from '~/lib/storage/defineStorageDriver' +import { createTempDir } from '~/lib/utils' -export const filesystemDriver = defineStorageDriver({ - envSchema: z.object({ - STORAGE_FILESYSTEM_PATH: z.string().default('.data/storage/filesystem'), - }), - async setup({ STORAGE_FILESYSTEM_PATH }) { - const basePath = STORAGE_FILESYSTEM_PATH +export class FilesystemStorageDriver extends StorageDriver { + constructor(baseFolderPrefix?: string) { + super(baseFolderPrefix) + } - await fs.mkdir(basePath, { + static async create() { + const options = parseEnv( + z.object({ + STORAGE_FILESYSTEM_PATH: z.string().default('.data/storage/filesystem'), + }), + ) + + const baseFolderPrefix = options.STORAGE_FILESYSTEM_PATH + await fs.mkdir(path.join(baseFolderPrefix, StorageDriver.baseFolder), { recursive: true, }) + await fs.mkdir( + path.join(baseFolderPrefix, StorageDriver.baseFolder, StorageDriver.uploadFolder), + { + recursive: true, + }, + ) - const tempDir = await fs.mkdtemp(path.join(ENV.TEMP_DIR, 'github-actions-cache-server')) + return new FilesystemStorageDriver(baseFolderPrefix) + } - function getUploadBufferPath(uploadId: string) { - return path.join(tempDir, uploadId) - } + async uploadPart(opts: { uploadId: string; partNumber: number; data: ReadableStream }) { + const folderPath = this.getUploadFolderPrefix(opts.uploadId) + await fs.mkdir(folderPath, { recursive: true }) + const writeStream = await createWriteStream( + this.getUploadPartObjectName({ + uploadId: opts.uploadId, + partNumber: opts.partNumber, + }), + ) + + await pipeline(opts.data, writeStream) + } - function getStoragePath(objectName: string) { - return path.join(basePath, objectName) + async completeMultipartUpload(opts: { + finalOutputObjectName: string + uploadId: string + partNumbers: number[] + }) { + const tempDir = await createTempDir() + const outputTempFilePath = path.join(tempDir, 'output') + + for (const partNumber of opts.partNumbers) { + const buffer = await fs.readFile( + this.getUploadPartObjectName({ + uploadId: opts.uploadId, + partNumber, + }), + ) + + await fs.appendFile(outputTempFilePath, buffer) } - return { - async initiateMultiPartUpload() { - const uploadId = crypto.randomUUID() - const tempPath = getUploadBufferPath(uploadId) - await fs.mkdir(path.dirname(tempPath), { recursive: true }) - await fs.writeFile(tempPath, '') - return uploadId - }, + await fs.rename(outputTempFilePath, this.addBaseFolderPrefix(opts.finalOutputObjectName)) - async uploadPart({ uploadId, chunkStart, data }) { - const file = await fs.open(getUploadBufferPath(uploadId), 'r+') - let currentChunk = 0 - const bufferWriteStream = new WritableStream({ - async write(chunk) { - const start = chunkStart + currentChunk - currentChunk += chunk.length - await file.write(chunk, 0, chunk.length, start) - }, - }) - await data.pipeTo(bufferWriteStream) - await file.close() - - return { - eTag: null, - } - }, + await Promise.all([ + this.cleanupMultipartUpload(opts.uploadId), + fs.rm(outputTempFilePath, { force: true }), + ]) + } - async completeMultipartUpload({ uploadId, objectName }) { - const bufferPath = getUploadBufferPath(uploadId) - await fs.copyFile(bufferPath, getStoragePath(objectName)) - await fs.rm(bufferPath) - }, + async cleanupMultipartUpload(uploadId: string) { + await fs.rm(this.getUploadFolderPrefix(uploadId), { + force: true, + recursive: true, + }) + } - async abortMultipartUpload({ uploadId }): Promise { - await fs.rm(getUploadBufferPath(uploadId), { force: true }) - }, - async download({ objectName }) { - const stream = createReadStream(getStoragePath(objectName)) - return stream - }, - async delete({ objectNames }) { - for (const name of objectNames) { - await fs.rm(getStoragePath(name), { - force: true, - }) - } - }, + async delete(objectNames: string[]): Promise { + for (const name of objectNames) { + await fs.rm(this.addBaseFolderPrefix(name), { + force: true, + }) } - }, -}) + } + + async createReadStream(objectName: string) { + return createReadStream(this.addBaseFolderPrefix(objectName)) + } + + createDownloadUrl: undefined +} diff --git a/lib/storage/drivers/gcs.ts b/lib/storage/drivers/gcs.ts index 49a28cf..dc5d746 100644 --- a/lib/storage/drivers/gcs.ts +++ b/lib/storage/drivers/gcs.ts @@ -1,22 +1,29 @@ -import { randomUUID } from 'node:crypto' -import path from 'node:path' -import { pipeline } from 'node:stream/promises' +import type { Bucket } from '@google-cloud/storage' +import { pipeline } from 'node:stream/promises' import { Storage } from '@google-cloud/storage' import { z } from 'zod' +import { parseEnv, StorageDriver } from '~/lib/storage/defineStorageDriver' + +export class GCSStorageDriver extends StorageDriver { + bucket + gcs + + constructor(opts: { gcs: Storage; bucket: Bucket }) { + super() + this.gcs = opts.gcs + this.bucket = opts.bucket + } + + static async create() { + const options = parseEnv( + z.object({ + STORAGE_GCS_BUCKET: z.string().min(1), + STORAGE_GCS_SERVICE_ACCOUNT_KEY: z.string().optional(), + STORAGE_GCS_ENDPOINT: z.string().optional(), + }), + ) -import { defineStorageDriver } from '~/lib/storage/defineStorageDriver' - -/** - * ? Google cloud doesn't support out-of-order multipart uploads so we need to use a temp folder - */ -export const gcsDriver = defineStorageDriver({ - envSchema: z.object({ - STORAGE_GCS_BUCKET: z.string().min(1), - STORAGE_GCS_SERVICE_ACCOUNT_KEY: z.string().optional(), - STORAGE_GCS_ENDPOINT: z.string().optional(), - }), - async setup(options) { const gcs = new Storage({ keyFilename: options.STORAGE_GCS_SERVICE_ACCOUNT_KEY, apiEndpoint: options.STORAGE_GCS_ENDPOINT, @@ -25,76 +32,79 @@ export const gcsDriver = defineStorageDriver({ // Try to load metadata await bucket.getMetadata() - const basePath = 'gh-actions-cache' - function getFile(objectName: string) { - return bucket.file(`${basePath}/${objectName}`) - } + return new GCSStorageDriver({ + gcs, + bucket, + }) + } - function getUploadTempFile(uploadId: string, partNumber: number) { - return bucket.file(path.join(getUploadFolderPath(uploadId), `part_${partNumber}`)) - } + async delete(objectNames: string[]) { + await Promise.all( + objectNames.map((name) => this.bucket.file(this.addBaseFolderPrefix(name)).delete()), + ) + } + async createReadStream(objectName: string) { + return this.bucket.file(this.addBaseFolderPrefix(objectName)).createReadStream() + } - function getUploadFolderPath(uploadId: string) { - return path.join(basePath, '.uploads', uploadId) - } - return { - async initiateMultiPartUpload() { - return randomUUID() - }, - async abortMultipartUpload({ uploadId }) { - await bucket.deleteFiles({ prefix: getUploadFolderPath(uploadId) }) - }, - async uploadPart({ uploadId, partNumber, data }) { - await getUploadTempFile(uploadId, partNumber).save(data) - return { eTag: null } - }, - async completeMultipartUpload({ objectName, uploadId, parts }) { - const [files] = await bucket.getFiles({ prefix: getUploadFolderPath(uploadId) }) - - const filesByPartNumber = Object.fromEntries( - files.map((file) => [file.name.split('_')[1], file]), + async createDownloadUrl?(objectName: string) { + return this.bucket + .file(this.addBaseFolderPrefix(objectName)) + .getSignedUrl({ + action: 'read', + expires: Date.now() + 5 * 60 * 1000, // 5 minutes + }) + .then((res) => res[0]) + } + + async uploadPart(opts: { uploadId: string; partNumber: number; data: ReadableStream }) { + await this.bucket + .file( + this.getUploadPartObjectName({ + uploadId: opts.uploadId, + partNumber: opts.partNumber, + }), + ) + .save(opts.data) + } + + async completeMultipartUpload(opts: { + finalOutputObjectName: string + uploadId: string + partNumbers: number[] + }) { + const finalFile = this.bucket.file(this.addBaseFolderPrefix(opts.finalOutputObjectName)) + const writeStream = finalFile.createWriteStream() + + for (const partNumber of opts.partNumbers) { + const readStream = this.bucket + .file( + this.getUploadPartObjectName({ + partNumber, + uploadId: opts.uploadId, + }), ) + .createReadStream() - const finalFile = getFile(objectName) - const writeStream = finalFile.createWriteStream() - - for (const part of parts) { - const partFile = filesByPartNumber[part.partNumber.toString()] - if (!partFile) throw new Error(`Part ${part.partNumber} is missing`) - - const readStream = partFile.createReadStream() - - await pipeline(readStream, writeStream, { end: false }) - } - - writeStream.end() - - // Wait for the write to complete - await new Promise((resolve, reject) => { - writeStream.on('finish', resolve) - writeStream.on('error', reject) - }) - - // Clean up temp files - await bucket.deleteFiles({ prefix: getUploadFolderPath(uploadId) }) - }, - async download({ objectName }) { - return getFile(objectName).createReadStream() - }, - async createDownloadUrl({ objectName }) { - return getFile(objectName) - .getSignedUrl({ - action: 'read', - expires: Date.now() + 5 * 60 * 1000, // 5 minutes - }) - .then((res) => res[0]) - }, - async delete({ objectNames }) { - for (const name of objectNames) { - await getFile(name).delete() - } - }, + await pipeline(readStream, writeStream, { end: false }) } - }, -}) + + writeStream.end() + + // Wait for the write to complete + await new Promise((resolve, reject) => { + writeStream.on('finish', resolve) + writeStream.on('error', reject) + }) + + // Clean up temp files + await this.cleanupMultipartUpload(opts.uploadId) + } + + async cleanupMultipartUpload(uploadId: string) { + await this.bucket.deleteFiles({ + prefix: this.getUploadFolderPrefix(uploadId), + }) + } +} diff --git a/lib/storage/drivers/index.ts b/lib/storage/drivers/index.ts index 7b7ba02..1413f5d 100644 --- a/lib/storage/drivers/index.ts +++ b/lib/storage/drivers/index.ts @@ -1,13 +1,12 @@ -import type { defineStorageDriver } from '~/lib/storage/defineStorageDriver' -import { filesystemDriver } from '~/lib/storage/drivers/filesystem' -import { gcsDriver } from '~/lib/storage/drivers/gcs' -import { s3Driver } from '~/lib/storage/drivers/s3' +import { FilesystemStorageDriver } from './filesystem' +import { GCSStorageDriver } from './gcs' +import { S3StorageDriver } from './s3' const storageDrivers = { - s3: s3Driver, - gcs: gcsDriver, - filesystem: filesystemDriver, -} as const satisfies Record> + s3: S3StorageDriver, + gcs: GCSStorageDriver, + filesystem: FilesystemStorageDriver, +} as const export type StorageDriverName = keyof typeof storageDrivers diff --git a/lib/storage/drivers/s3.ts b/lib/storage/drivers/s3.ts index c1de4e8..526ea80 100644 --- a/lib/storage/drivers/s3.ts +++ b/lib/storage/drivers/s3.ts @@ -1,27 +1,40 @@ +import { createReadStream } from 'node:fs' +import fs from 'node:fs/promises' +import path from 'node:path' import { - AbortMultipartUploadCommand, - CompleteMultipartUploadCommand, - CreateMultipartUploadCommand, DeleteObjectsCommand, GetObjectCommand, HeadBucketCommand, + ListObjectsV2Command, + PutObjectCommand, S3Client, - UploadPartCommand, } from '@aws-sdk/client-s3' import { getSignedUrl } from '@aws-sdk/s3-request-presigner' + import * as R from 'remeda' import { z } from 'zod' +import { parseEnv, StorageDriver } from '~/lib/storage/defineStorageDriver' +import { createTempDir, streamToBuffer } from '~/lib/utils' + +export class S3StorageDriver extends StorageDriver { + s3 + bucket + + constructor(opts: { s3: S3Client; bucket: string }) { + super() + this.s3 = opts.s3 + this.bucket = opts.bucket + } -import { defineStorageDriver } from '~/lib/storage/defineStorageDriver' -import { streamToBuffer } from '~/lib/utils' + static async create() { + const options = parseEnv( + z.object({ + STORAGE_S3_BUCKET: z.string().min(1), + // AWS SDK requires an AWS_REGION to be set, even if you're using a custom endpoint + AWS_REGION: z.string().default('us-east-1'), + }), + ) -export const s3Driver = defineStorageDriver({ - envSchema: z.object({ - STORAGE_S3_BUCKET: z.string().min(1), - // AWS SDK requires an AWS_REGION to be set, even if you're using a custom endpoint - AWS_REGION: z.string().default('us-east-1'), - }), - async setup(options) { const s3 = new S3Client({ forcePathStyle: true, region: options.AWS_REGION, @@ -40,102 +53,141 @@ export const s3Driver = defineStorageDriver({ } throw err } + return new S3StorageDriver({ s3, bucket: options.STORAGE_S3_BUCKET }) + } - const basePath = 'gh-actions-cache' - - function getObjectKey(objectName: string) { - return `${basePath}/${objectName}` - } - - return { - async initiateMultiPartUpload({ objectName }) { - const res = await s3.send( - new CreateMultipartUploadCommand({ - Bucket: options.STORAGE_S3_BUCKET, - Key: getObjectKey(objectName), - }), - ) - if (!res.UploadId) throw new Error('No upload id returned') - return res.UploadId - }, - async abortMultipartUpload({ objectName, uploadId }) { - await s3.send( - new AbortMultipartUploadCommand({ - Bucket: options.STORAGE_S3_BUCKET, - Key: getObjectKey(objectName), - UploadId: uploadId, - }), - ) - }, - async completeMultipartUpload({ objectName, uploadId, parts }) { - await s3.send( - new CompleteMultipartUploadCommand({ - Bucket: options.STORAGE_S3_BUCKET, - Key: getObjectKey(objectName), - UploadId: uploadId, - MultipartUpload: { - Parts: parts.map((part) => ({ - ETag: part.eTag, - PartNumber: part.partNumber, - })), + async delete(objectNames: string[]): Promise { + await Promise.all( + R.chunk(objectNames, 1000).map((chunkedObjectNames) => + this.s3.send( + new DeleteObjectsCommand({ + Bucket: this.bucket, + Delete: { + Objects: chunkedObjectNames.map((name) => ({ Key: this.addBaseFolderPrefix(name) })), + Quiet: true, }, }), - ) - }, - async uploadPart({ objectName, uploadId, partNumber, data }) { - const buffer = await streamToBuffer(data) - if (buffer.length === 0) return { eTag: null } - - const res = await s3.send( - new UploadPartCommand({ - Bucket: options.STORAGE_S3_BUCKET, - Key: getObjectKey(objectName), - UploadId: uploadId, - PartNumber: partNumber, - Body: buffer, - }), - ) - return { - eTag: res.ETag ?? null, - } - }, - async download({ objectName }) { - const response = await s3.send( - new GetObjectCommand({ - Bucket: options.STORAGE_S3_BUCKET, - Key: getObjectKey(objectName), - }), - ) + ), + ), + ) + } - return response.Body as ReadableStream + async createReadStream(objectName: string) { + const response = await this.s3.send( + new GetObjectCommand({ + Bucket: this.bucket, + Key: this.addBaseFolderPrefix(objectName), + }), + ) + + return response.Body as ReadableStream + } + async createDownloadUrl(objectName: string) { + return getSignedUrl( + this.s3, + new GetObjectCommand({ + Bucket: this.bucket, + Key: this.addBaseFolderPrefix(objectName), + }), + { + expiresIn: 5 * 60 * 1000, // 5 minutes }, - async createDownloadUrl({ objectName }) { - return getSignedUrl( - s3, - new GetObjectCommand({ - Bucket: options.STORAGE_S3_BUCKET, - Key: getObjectKey(objectName), + ) + } + + async uploadPart(opts: { uploadId: string; partNumber: number; data: ReadableStream }) { + await this.s3.send( + new PutObjectCommand({ + Bucket: this.bucket, + Key: this.getUploadPartObjectName({ + uploadId: opts.uploadId, + partNumber: opts.partNumber, + }), + Body: await streamToBuffer(opts.data), + }), + ) + } + + async completeMultipartUpload(opts: { + finalOutputObjectName: string + uploadId: string + partNumbers: number[] + }) { + const tempDir = await createTempDir() + const outputTempFilePath = path.join(tempDir, 'output') + + await fs.writeFile(outputTempFilePath, '') + const outputTempFile = await fs.open(outputTempFilePath, 'r+') + + let currentChunk = 0 + for (const partNumber of opts.partNumbers) { + const part = await this.s3.send( + new GetObjectCommand({ + Bucket: this.bucket, + Key: this.getUploadPartObjectName({ + partNumber, + uploadId: opts.uploadId, }), - { - expiresIn: 5 * 60 * 1000, // 5 minutes - }, - ) - }, - async delete({ objectNames }) { - await Promise.all( - R.chunk(objectNames, 1000).map((chunkedObjectNames) => - s3.send( - new DeleteObjectsCommand({ - Bucket: options.STORAGE_S3_BUCKET, - Delete: { - Objects: chunkedObjectNames.map((name) => ({ Key: getObjectKey(name) })), - Quiet: true, - }, - }), - ), - ), - ) - }, + }), + ) + + if (!part.Body) throw new Error(`Part ${partNumber} is missing`) + + const partStream = part.Body.transformToWebStream() + const bufferWriteStream = new WritableStream({ + async write(chunk) { + const start = currentChunk + currentChunk += chunk.length + await outputTempFile.write(chunk, 0, chunk.length, start) + }, + }) + await partStream.pipeTo(bufferWriteStream) } - }, -}) + + const readStream = createReadStream(outputTempFilePath) + await this.s3.send( + new PutObjectCommand({ + Bucket: this.bucket, + Key: this.addBaseFolderPrefix(opts.finalOutputObjectName), + Body: readStream, + }), + ) + + await Promise.all([ + this.cleanupMultipartUpload(opts.uploadId), + fs.rm(outputTempFilePath, { force: true }), + ]) + } + + async cleanupMultipartUpload(uploadId: string) { + const objectNames = await this.listObjectsByPrefix(this.getUploadFolderPrefix(uploadId)) + await this.delete(objectNames) + } + + async listObjectsByPrefix(prefix: string) { + const objects: string[] = [] + let continuationToken: string | undefined + + do { + const response = await this.s3.send( + new ListObjectsV2Command({ + Bucket: this.bucket, + Prefix: prefix, + ContinuationToken: continuationToken, + }), + ) + + if (response.Contents) { + for (const object of response.Contents) { + if (object.Key) { + objects.push(object.Key) + } + } + } + + continuationToken = response.NextContinuationToken + } while (continuationToken) + + return objects + } +} diff --git a/lib/storage/index.ts b/lib/storage/index.ts index ca8d6a9..d759d9b 100644 --- a/lib/storage/index.ts +++ b/lib/storage/index.ts @@ -1,9 +1,9 @@ import type { Buffer } from 'node:buffer' -import type { Readable } from 'node:stream' import cluster from 'node:cluster' import { randomBytes, randomInt } from 'node:crypto' +import { createSingletonPromise } from '@antfu/utils' import consola from 'consola' import { findKeyMatch, @@ -15,274 +15,218 @@ import { useDB, } from '~/lib/db' import { ENV } from '~/lib/env' -import { logger } from '~/lib/logger' +import { logger } from '~/lib/logger' import { getStorageDriver } from '~/lib/storage/drivers' import { getObjectNameFromKey } from '~/lib/utils' -export interface Storage { - getCacheEntry: ( - keys: string[], - version: string, - ) => Promise<{ - cacheKey: string - archiveLocation: string - } | null> - download: (objectName: string) => Promise - uploadChunk: (opts: { - uploadId: number - chunkStream: ReadableStream - chunkStart: number - chunkIndex: number - }) => Promise - commitCache: (uploadId: number | string, size: number) => Promise - reserveCache: ( - key: string, - version: string, - cacheSize?: number, - ) => Promise<{ - cacheId: number | null - }> - pruneCaches: (olderThanDays?: number) => Promise - pruneUploads: (olderThanDate: Date) => Promise -} - -let storage: Storage -let initializationPromise: Promise | undefined - -export async function initializeStorage() { - if (initializationPromise) return initializationPromise - - // eslint-disable-next-line unicorn/consistent-function-scoping - const init = async () => { - try { - const driverName = ENV.STORAGE_DRIVER - const driverSetup = getStorageDriver(driverName) - if (!driverSetup) { - consola.error(`No storage driver found for ${driverName}`) - // eslint-disable-next-line unicorn/no-process-exit - process.exit(1) - } - if (cluster.isPrimary) logger.info(`Using storage driver: ${driverName}`) +export const useStorageAdapter = createSingletonPromise(async () => { + try { + const driverName = ENV.STORAGE_DRIVER + const driverClass = getStorageDriver(driverName) + if (!driverClass) { + consola.error(`No storage driver found for ${driverName}`) + // eslint-disable-next-line unicorn/no-process-exit + process.exit(1) + } + if (cluster.isPrimary) logger.info(`Using storage driver: ${driverName}`) - const driver = await driverSetup() - const db = await useDB() + const driver = await driverClass.create() + const db = await useDB() - storage = { - async reserveCache(key, version, totalSize) { - logger.debug('Reserve:', { key, version }) + return { + async reserveCache({ key, version }: { key: string; version: string }) { + logger.debug('Reserve:', { key, version }) - if (await getUpload(db, { key, version })) { - logger.debug(`Reserve: Already reserved. Ignoring...`, { key, version }) - return { - cacheId: null, - } + if (await getUpload(db, { key, version })) { + logger.debug(`Reserve: Already reserved. Ignoring...`, { key, version }) + return { + cacheId: null, } + } - const driverUploadId = await driver.initiateMultiPartUpload({ - objectName: getObjectNameFromKey(key, version), - totalSize: totalSize ?? 0, - }) - const uploadId = randomInt(1_000_000_000, 9_999_999_999) - - await db - .insertInto('uploads') - .values({ - created_at: new Date().toISOString(), - driver_upload_id: driverUploadId, - id: uploadId.toString(), - key, - version, - }) - .execute() + const uploadId = randomInt(1_000_000_000, 9_999_999_999) - logger.debug(`Reserve:`, { + await db + .insertInto('uploads') + .values({ + created_at: new Date().toISOString(), + id: uploadId.toString(), key, version, - driverUploadId, + }) + .execute() + + logger.debug(`Reserve:`, { + key, + version, + uploadId, + }) + + return { + cacheId: uploadId, + } + }, + async uploadChunk({ + uploadId, + chunkStream, + chunkStart, + chunkIndex, + }: { + uploadId: number + chunkStream: ReadableStream + chunkStart: number + chunkIndex: number + }) { + const upload = await db + .selectFrom('uploads') + .selectAll() + .where('id', '=', uploadId.toString()) + .executeTakeFirst() + if (!upload) { + logger.debug(`Upload: Upload not found. Ignoring...`, { uploadId, }) + return + } - return { - cacheId: uploadId, - } - }, - async uploadChunk({ uploadId, chunkStream, chunkStart, chunkIndex }) { - const upload = await db - .selectFrom('uploads') - .selectAll() - .where('id', '=', uploadId.toString()) - .executeTakeFirst() - if (!upload) { - logger.debug(`Upload: Upload not found. Ignoring...`, { - uploadId, - }) - return - } - - const partNumber = chunkIndex + 1 + const partNumber = chunkIndex + 1 - const objectName = getObjectNameFromKey(upload.key, upload.version) - try { - const { eTag } = await driver.uploadPart({ - objectName, - uploadId: upload.driver_upload_id, - partNumber, - data: chunkStream, - chunkStart, + try { + await driver.uploadPart({ + uploadId: upload.id, + partNumber, + data: chunkStream, + }) + await db + .insertInto('upload_parts') + .values({ + part_number: partNumber, + upload_id: uploadId.toString(), }) - await db - .insertInto('upload_parts') - .values({ - part_number: partNumber, - upload_id: uploadId.toString(), - e_tag: eTag, - }) - .execute() - } catch (err) { - logger.debug( - 'Upload: Error', - { - driverUploadId: upload.driver_upload_id, - uploadId, - chunkStart, - partNumber, - }, - err, - ) - throw err - } - - logger.debug('Upload:', { uploadId, chunkStart, partNumber }) - }, - async commitCache(uploadId) { - const upload = await db - .selectFrom('uploads') - .selectAll() - .where('id', '=', uploadId.toString()) - .executeTakeFirst() - - if (!upload) { - logger.debug('Commit: Upload not found. Ignoring...') - return - } - - const parts = await db - .selectFrom('upload_parts') - .selectAll() - .where('upload_id', '=', upload.id) - .orderBy('part_number asc') .execute() - - await db.transaction().execute(async (tx) => { - logger.debug('Commit:', uploadId) - - await tx.deleteFrom('uploads').where('id', '=', upload.id).execute() - await updateOrCreateKey(tx, { - key: upload.key, - version: upload.version, - }) - - await driver.completeMultipartUpload({ - objectName: getObjectNameFromKey(upload.key, upload.version), - uploadId: upload.driver_upload_id, - parts: parts.map((part) => ({ - partNumber: part.part_number, - eTag: part.e_tag ?? undefined, - })), - }) - }) - }, - async getCacheEntry(keys, version) { - const primaryKey = keys[0] - const restoreKeys = keys.length > 1 ? keys.slice(1) : undefined - - const cacheKey = await findKeyMatch(db, { key: primaryKey, version, restoreKeys }) - - if (!cacheKey) { - logger.debug('Get: Cache entry not found', { keys, version }) - return null - } - - await touchKey(db, { key: cacheKey.key, version: cacheKey.version }) - - const objectName = getObjectNameFromKey(cacheKey.key, cacheKey.version) - - logger.debug('Get: Found', cacheKey) - - return { - archiveLocation: - ENV.ENABLE_DIRECT_DOWNLOADS && driver.createDownloadUrl - ? await driver.createDownloadUrl({ objectName }) - : createLocalDownloadUrl(objectName), - cacheKey: cacheKey.key, - } - }, - async download(objectName) { - logger.debug('Download:', objectName) - return driver.download({ objectName }) - }, - async pruneCaches(olderThanDays) { - logger.debug('Prune:', { - olderThanDays, + } catch (err) { + logger.debug( + 'Upload: Error', + { + uploadId, + chunkStart, + partNumber, + }, + err, + ) + throw err + } + + logger.debug('Upload:', { uploadId, chunkStart, partNumber }) + }, + async commitCache(uploadId: number | string) { + const upload = await db + .selectFrom('uploads') + .selectAll() + .where('id', '=', uploadId.toString()) + .executeTakeFirst() + + if (!upload) { + logger.debug('Commit: Upload not found. Ignoring...') + return + } + + const parts = await db + .selectFrom('upload_parts') + .selectAll() + .where('upload_id', '=', upload.id) + .orderBy('part_number asc') + .execute() + + await db.transaction().execute(async (tx) => { + logger.debug('Commit:', uploadId) + + await tx.deleteFrom('uploads').where('id', '=', upload.id).execute() + await updateOrCreateKey(tx, { + key: upload.key, + version: upload.version, }) - const keys = await findStaleKeys(db, { olderThanDays }) - if (keys.length === 0) { - logger.debug('Prune: No caches to prune') - return - } - - await driver.delete({ - objectNames: keys.map((key) => getObjectNameFromKey(key.key, key.version)), + await driver.completeMultipartUpload({ + finalOutputObjectName: getObjectNameFromKey(upload.key, upload.version), + uploadId: upload.id, + partNumbers: parts.map((part) => part.part_number), }) - await pruneKeys(db, keys) - - logger.debug('Prune: Caches pruned', { - olderThanDays, + }) + }, + async getCacheEntry({ keys, version }: { keys: string[]; version: string }) { + const primaryKey = keys[0] + const restoreKeys = keys.length > 1 ? keys.slice(1) : undefined + + const cacheKey = await findKeyMatch(db, { key: primaryKey, version, restoreKeys }) + + if (!cacheKey) { + logger.debug('Get: Cache entry not found', { keys, version }) + return null + } + + await touchKey(db, { key: cacheKey.key, version: cacheKey.version }) + + const objectName = getObjectNameFromKey(cacheKey.key, cacheKey.version) + + logger.debug('Get: Found', cacheKey) + + return { + archiveLocation: + ENV.ENABLE_DIRECT_DOWNLOADS && driver.createDownloadUrl + ? await driver.createDownloadUrl(objectName) + : createLocalDownloadUrl(objectName), + cacheKey: cacheKey.key, + } + }, + async download(objectName: string) { + logger.debug('Download:', objectName) + return driver.createReadStream(objectName) + }, + async pruneCaches(olderThanDays?: number) { + logger.debug('Prune:', { + olderThanDays, + }) + + const keys = await findStaleKeys(db, { olderThanDays }) + if (keys.length === 0) { + logger.debug('Prune: No caches to prune') + return + } + + await driver.delete(keys.map((key) => getObjectNameFromKey(key.key, key.version))) + await pruneKeys(db, keys) + + logger.debug('Prune: Caches pruned', { + olderThanDays, + }) + }, + async pruneUploads(olderThanDate: Date) { + logger.debug('Prune uploads') + + // uploads older than 24 hours + const uploads = await db + .selectFrom('uploads') + .selectAll() + .where('created_at', '<', olderThanDate.toISOString()) + .execute() + + for (const upload of uploads) { + await driver.cleanupMultipartUpload(upload.id).catch(() => { + // noop }) - }, - async pruneUploads(olderThanDate) { - logger.debug('Prune uploads') - - // uploads older than 24 hours - const uploads = await db - .selectFrom('uploads') - .selectAll() - .where('created_at', '<', olderThanDate.toISOString()) - .execute() - - for (const upload of uploads) { - await driver - .abortMultipartUpload({ - uploadId: upload.driver_upload_id, - objectName: getObjectNameFromKey(upload.key, upload.version), - }) - .catch(() => { - // noop - }) - await db.deleteFrom('uploads').where('id', '=', upload.id).execute() - } - }, - } - } catch (err) { - consola.error('Failed to initialize storage driver:', err) - // eslint-disable-next-line unicorn/no-process-exit - process.exit(1) + await db.deleteFrom('uploads').where('id', '=', upload.id).execute() + } + }, } + } catch (err) { + consola.error('Failed to initialize storage driver:', err) + // eslint-disable-next-line unicorn/no-process-exit + process.exit(1) } - - initializationPromise = init() - return initializationPromise -} +}) function createLocalDownloadUrl(objectName: string) { return `${ENV.API_BASE_URL}/download/${randomBytes(64).toString('hex')}/${objectName}` } - -export async function useStorageAdapter() { - if (!storage) { - await initializeStorage() - } - return storage -} diff --git a/lib/utils.ts b/lib/utils.ts index 352cf77..87c7503 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -1,4 +1,7 @@ import { hash } from 'node:crypto' +import { promises as fs } from 'node:fs' +import path from 'node:path' +import { ENV } from './env' export async function streamToBuffer(stream: ReadableStream): Promise { const reader = stream.getReader() @@ -16,3 +19,7 @@ export async function streamToBuffer(stream: ReadableStream): Promis export function getObjectNameFromKey(key: string, version: string) { return hash('sha1', Buffer.from(`${key}-${version}`)) } + +export function createTempDir() { + return fs.mkdtemp(path.join(ENV.TEMP_DIR, 'github-actions-cache-server')) +} diff --git a/package.json b/package.json index 895689f..ab196b6 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "extends": "gh:falcondev-it/configs/changelogithub" }, "dependencies": { + "@antfu/utils": "^9.2.0", "@aws-sdk/client-s3": "^3.740.0", "@aws-sdk/s3-request-presigner": "^3.740.0", "@google-cloud/storage": "^7.15.0", @@ -33,10 +34,10 @@ "consola": "^3.4.0", "croner": "^9.0.0", "execa": "^9.5.2", - "h3": "npm:h3-nightly@1.15.1-20250222-111608-d1c00fc", + "h3": "^1.15.3", "kysely": "^0.27.5", "mysql2": "^3.12.0", - "nitropack": "npm:nitropack-nightly@2.11.0-20250301-231416.f56ead19", + "nitropack": "^2.11.13", "pg": "^8.13.1", "remeda": "^2.21.0", "typescript": "^5.7.3", diff --git a/plugins/setup.ts b/plugins/setup.ts index e905f59..d808ae7 100644 --- a/plugins/setup.ts +++ b/plugins/setup.ts @@ -1,17 +1,17 @@ import cluster from 'node:cluster' import { H3Error } from 'h3' -import { initializeDatabase, useDB } from '~/lib/db' +import { useDB } from '~/lib/db' import { ENV } from '~/lib/env' import { logger } from '~/lib/logger' -import { initializeStorage, useStorageAdapter } from '~/lib/storage' +import { useStorageAdapter } from '~/lib/storage' export default defineNitroPlugin(async (nitro) => { const version = useRuntimeConfig().version if (cluster.isPrimary) logger.info(`🚀 Starting GitHub Actions Cache Server (${version})`) - await initializeDatabase() - await initializeStorage() + await useDB() + await useStorageAdapter() nitro.hooks.hook('error', (error, { event }) => { if (!event) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7111004..b41b8b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@antfu/utils': + specifier: ^9.2.0 + version: 9.2.0 '@aws-sdk/client-s3': specifier: ^3.740.0 version: 3.740.0 @@ -36,8 +39,8 @@ importers: specifier: ^9.5.2 version: 9.5.2 h3: - specifier: npm:h3-nightly@1.15.1-20250222-111608-d1c00fc - version: h3-nightly@1.15.1-20250222-111608-d1c00fc + specifier: ^1.15.3 + version: 1.15.3 kysely: specifier: ^0.27.5 version: 0.27.5 @@ -45,8 +48,8 @@ importers: specifier: ^3.12.0 version: 3.12.0 nitropack: - specifier: npm:nitropack-nightly@2.11.0-20250301-231416.f56ead19 - version: nitropack-nightly@2.11.0-20250301-231416.f56ead19(@azure/storage-blob@12.26.0)(better-sqlite3@11.8.1)(mysql2@3.12.0)(typescript@5.7.3) + specifier: ^2.11.13 + version: 2.11.13(@azure/storage-blob@12.26.0)(better-sqlite3@11.8.1)(mysql2@3.12.0) pg: specifier: ^8.13.1 version: 8.13.1 @@ -74,7 +77,7 @@ importers: version: 4.1.1(@commitlint/cli@19.6.1(@types/node@22.13.0)(typescript@5.7.3)) '@louishaftmann/eslint-config': specifier: ^4.1.1 - version: 4.1.1(@babel/core@7.26.7)(@types/eslint@9.6.1)(@typescript-eslint/utils@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.12)(eslint@9.19.0(jiti@2.4.2))(prettier@3.4.2)(typescript@5.7.3)(vitest@3.0.4) + version: 4.1.1(@babel/core@7.26.7)(@types/eslint@9.6.1)(@typescript-eslint/utils@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.17)(eslint@9.19.0(jiti@2.4.2))(prettier@3.4.2)(typescript@5.7.3)(vitest@3.0.4) '@louishaftmann/lintstaged-config': specifier: ^4.1.1 version: 4.1.1(lint-staged@15.4.3) @@ -212,6 +215,9 @@ packages: '@antfu/install-pkg@1.0.0': resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} + '@antfu/utils@9.2.0': + resolution: {integrity: sha512-Oq1d9BGZakE/FyoEtcNeSwM7MpDO2vUBi11RWBZXf75zPsbUVWmUs03EqkRFrcgbXyKTas0BdZWC1wcuSoqSAw==} + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -474,10 +480,18 @@ packages: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.9': resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} @@ -491,6 +505,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.27.5': + resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/template@7.25.9': resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} @@ -503,6 +522,10 @@ packages: resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} engines: {node: '>=6.9.0'} + '@babel/types@7.27.6': + resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} + engines: {node: '>=6.9.0'} + '@balena/dockerignore@1.0.2': resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} @@ -512,9 +535,13 @@ packages: '@clack/prompts@0.9.1': resolution: {integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==} - '@cloudflare/kv-asset-handler@0.3.4': - resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} - engines: {node: '>=16.13'} + '@cloudflare/kv-asset-handler@0.4.0': + resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} + engines: {node: '>=18.0.0'} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} '@commitlint/cli@19.6.1': resolution: {integrity: sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ==} @@ -585,6 +612,13 @@ packages: resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} engines: {node: '>=v18'} + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@dependents/detective-less@5.0.1': + resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} + engines: {node: '>=18'} + '@es-joy/jsdoccomment@0.49.0': resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} engines: {node: '>=16'} @@ -605,6 +639,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.5': + resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.24.2': resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} engines: {node: '>=18'} @@ -617,6 +657,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.5': + resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.24.2': resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} engines: {node: '>=18'} @@ -629,6 +675,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.5': + resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.24.2': resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} engines: {node: '>=18'} @@ -641,6 +693,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.5': + resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.24.2': resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} engines: {node: '>=18'} @@ -653,6 +711,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.5': + resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.24.2': resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} engines: {node: '>=18'} @@ -665,6 +729,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.5': + resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.24.2': resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} engines: {node: '>=18'} @@ -677,6 +747,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.5': + resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.24.2': resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} engines: {node: '>=18'} @@ -689,6 +765,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.5': + resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.24.2': resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} engines: {node: '>=18'} @@ -701,6 +783,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.5': + resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.24.2': resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} engines: {node: '>=18'} @@ -713,6 +801,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.5': + resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.24.2': resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} engines: {node: '>=18'} @@ -725,6 +819,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.5': + resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.24.2': resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} engines: {node: '>=18'} @@ -737,6 +837,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.5': + resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.24.2': resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} engines: {node: '>=18'} @@ -749,6 +855,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.5': + resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.24.2': resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} engines: {node: '>=18'} @@ -761,6 +873,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.5': + resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.24.2': resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} engines: {node: '>=18'} @@ -773,6 +891,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.5': + resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.24.2': resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} engines: {node: '>=18'} @@ -785,6 +909,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.5': + resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.24.2': resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} engines: {node: '>=18'} @@ -797,6 +927,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.5': + resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.24.2': resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} engines: {node: '>=18'} @@ -809,6 +945,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.25.5': + resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.24.2': resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} engines: {node: '>=18'} @@ -821,6 +963,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.5': + resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.24.2': resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} @@ -833,6 +981,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.5': + resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.24.2': resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} engines: {node: '>=18'} @@ -845,6 +999,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.5': + resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.24.2': resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} engines: {node: '>=18'} @@ -857,6 +1017,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.5': + resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.24.2': resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} engines: {node: '>=18'} @@ -869,6 +1035,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.5': + resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.24.2': resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} engines: {node: '>=18'} @@ -881,6 +1053,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.5': + resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.24.2': resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} engines: {node: '>=18'} @@ -893,6 +1071,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.5': + resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-plugin-eslint-comments@4.4.1': resolution: {integrity: sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -950,6 +1134,9 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} + '@fastify/busboy@3.1.1': + resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} + '@github/browserslist-config@1.0.0': resolution: {integrity: sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==} @@ -1055,18 +1242,42 @@ packages: '@mdn/browser-compat-data@5.6.35': resolution: {integrity: sha512-ag7tX/vba+g1OVelqrcdUPnao+Fio0YgcIUYs07qoV3escMAqF7sNKSHH8JxXQ0psY3u8l8jqmmGx0vFPtIrtw==} - '@netlify/functions@3.0.0': - resolution: {integrity: sha512-XXf9mNw4+fkxUzukDpJtzc32bl1+YlXZwEhc5ZgMcTbJPLpgRLDs5WWSPJ4eY/Mv1ZFvtxmMwmfgoQYVt68Qog==} - engines: {node: '>=18.0.0'} + '@netlify/binary-info@1.0.0': + resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} - '@netlify/node-cookies@0.1.0': - resolution: {integrity: sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==} + '@netlify/blobs@9.1.2': + resolution: {integrity: sha512-7dMjExSH4zj4ShvLem49mE3mf0K171Tx2pV4WDWhJbRUWW3SJIR2qntz0LvUGS97N5HO1SmnzrgWUhEXCsApiw==} engines: {node: ^14.16.0 || >=16.0.0} - '@netlify/serverless-functions-api@1.30.1': - resolution: {integrity: sha512-JkbaWFeydQdeDHz1mAy4rw+E3bl9YtbCgkntfTxq+IlNX/aIMv2/b1kZnQZcil4/sPoZGL831Dq6E374qRpU1A==} + '@netlify/dev-utils@2.2.0': + resolution: {integrity: sha512-5XUvZuffe3KetyhbWwd4n2ktd7wraocCYw10tlM+/u/95iAz29GjNiuNxbCD1T6Bn1MyGc4QLVNKOWhzJkVFAw==} + engines: {node: ^14.16.0 || >=16.0.0} + + '@netlify/functions@3.1.10': + resolution: {integrity: sha512-sI93kcJ2cUoMgDRPnrEm0lZhuiDVDqM6ngS/UbHTApIH3+eg3yZM5p/0SDFQQq9Bad0/srFmgBmTdXushzY5kg==} + engines: {node: '>=14.0.0'} + + '@netlify/open-api@2.37.0': + resolution: {integrity: sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==} + engines: {node: '>=14.8.0'} + + '@netlify/runtime-utils@1.3.1': + resolution: {integrity: sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg==} + engines: {node: '>=16.0.0'} + + '@netlify/serverless-functions-api@1.41.2': + resolution: {integrity: sha512-pfCkH50JV06SGMNsNPjn8t17hOcId4fA881HeYQgMBOrewjsw4csaYgHEnCxCEu24Y5x75E2ULbFpqm9CvRCqw==} engines: {node: '>=18.0.0'} + '@netlify/serverless-functions-api@2.1.2': + resolution: {integrity: sha512-uEFA0LAcBGd3+fgDSLkTTsrgyooKqu8mN/qA+F/COS2A7NFWRcLFnjVKH/xZhxq+oQkrSa+XPS9qj2wgQosiQw==} + engines: {node: '>=18.0.0'} + + '@netlify/zip-it-and-ship-it@12.1.5': + resolution: {integrity: sha512-9XyDTOaHfuZ5wF5rkOb0wLLZF7ZzGgBhKCCLKd2dmvnTnOWtA+PrinSdT/rn6TabUwQ56T5vNWvQZ//FxTweOw==} + engines: {node: '>=18.14.0'} + hasBin: true + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -1199,8 +1410,8 @@ packages: resolution: {integrity: sha512-FA+nTU8p6OcSH4tLDY5JilGYr1bVWHpNmcLr7xmMEdbWmKHa+3QZ+DqefrXKmdjO/brHTnQZo20lLSjaO7ydog==} engines: {node: '>=18.16.0'} - '@poppinss/dumper@0.6.2': - resolution: {integrity: sha512-FhE9rY15aZ6Qp6ltQ0NZjseVRhwgWZ7+sg16343FqnjdUQvvBBi5eSeH/aZA4LF1ZOV5779DYrJXTHT42JlHNg==} + '@poppinss/dumper@0.6.3': + resolution: {integrity: sha512-iombbn8ckOixMtuV1p3f8jN6vqhXefNjJttoPaJDMeIk/yIGhkkL3OrHkEjE9SRsgoAx1vBUU2GtgggjvA5hCA==} '@poppinss/exception@1.2.0': resolution: {integrity: sha512-WLneXKQYNClhaMXccO111VQmZahSrcSRDaHRbV6KL5R4pTvK87fMn/MXLUcvOjk0X5dTHDPKF61tM7j826wrjQ==} @@ -1223,16 +1434,6 @@ packages: '@protobuf-ts/runtime@2.9.4': resolution: {integrity: sha512-vHRFWtJJB/SiogWDF0ypoKfRIZ41Kq+G9cEFj6Qm1eQaAhJ1LDFvgZ7Ja4tb3iLOQhz0PaoPnnOijF1qmEqTxg==} - '@redocly/ajv@8.11.2': - resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} - - '@redocly/config@0.20.3': - resolution: {integrity: sha512-Nyyv1Bj7GgYwj/l46O0nkH1GTKWbO3Ixe7KFcn021aZipkZd+z8Vlu1BwkhqtVgivcKaClaExtWU/lDHkjBzag==} - - '@redocly/openapi-core@1.28.0': - resolution: {integrity: sha512-jnUsOFnz8w71l14Ww34Iswlj0AI4e/R0C5+K2W4v4GaY/sUkpH/145gHLJYlG4XV0neET4lNIptd4I8+yLyEHQ==} - engines: {node: '>=18.17.0', npm: '>=10.8.2'} - '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -1242,8 +1443,8 @@ packages: rollup: optional: true - '@rollup/plugin-commonjs@28.0.2': - resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==} + '@rollup/plugin-commonjs@28.0.6': + resolution: {integrity: sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -1269,8 +1470,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@16.0.0': - resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} + '@rollup/plugin-node-resolve@16.0.1': + resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -1310,8 +1511,8 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.34.9': - resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} + '@rollup/rollup-android-arm-eabi@4.44.1': + resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==} cpu: [arm] os: [android] @@ -1320,8 +1521,8 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.34.9': - resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} + '@rollup/rollup-android-arm64@4.44.1': + resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==} cpu: [arm64] os: [android] @@ -1330,8 +1531,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.34.9': - resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} + '@rollup/rollup-darwin-arm64@4.44.1': + resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==} cpu: [arm64] os: [darwin] @@ -1340,8 +1541,8 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.9': - resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} + '@rollup/rollup-darwin-x64@4.44.1': + resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==} cpu: [x64] os: [darwin] @@ -1350,8 +1551,8 @@ packages: cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.34.9': - resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} + '@rollup/rollup-freebsd-arm64@4.44.1': + resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==} cpu: [arm64] os: [freebsd] @@ -1360,8 +1561,8 @@ packages: cpu: [x64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.34.9': - resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} + '@rollup/rollup-freebsd-x64@4.44.1': + resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==} cpu: [x64] os: [freebsd] @@ -1370,8 +1571,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.34.9': - resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': + resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==} cpu: [arm] os: [linux] @@ -1380,8 +1581,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.34.9': - resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} + '@rollup/rollup-linux-arm-musleabihf@4.44.1': + resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==} cpu: [arm] os: [linux] @@ -1390,8 +1591,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.9': - resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} + '@rollup/rollup-linux-arm64-gnu@4.44.1': + resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==} cpu: [arm64] os: [linux] @@ -1400,8 +1601,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.9': - resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} + '@rollup/rollup-linux-arm64-musl@4.44.1': + resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==} cpu: [arm64] os: [linux] @@ -1410,8 +1611,8 @@ packages: cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.9': - resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': + resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==} cpu: [loong64] os: [linux] @@ -1420,8 +1621,8 @@ packages: cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': - resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': + resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==} cpu: [ppc64] os: [linux] @@ -1430,8 +1631,13 @@ packages: cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.34.9': - resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} + '@rollup/rollup-linux-riscv64-gnu@4.44.1': + resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.44.1': + resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==} cpu: [riscv64] os: [linux] @@ -1440,8 +1646,8 @@ packages: cpu: [s390x] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.34.9': - resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} + '@rollup/rollup-linux-s390x-gnu@4.44.1': + resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==} cpu: [s390x] os: [linux] @@ -1450,8 +1656,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.9': - resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} + '@rollup/rollup-linux-x64-gnu@4.44.1': + resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==} cpu: [x64] os: [linux] @@ -1460,8 +1666,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.9': - resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} + '@rollup/rollup-linux-x64-musl@4.44.1': + resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==} cpu: [x64] os: [linux] @@ -1470,8 +1676,8 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.34.9': - resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} + '@rollup/rollup-win32-arm64-msvc@4.44.1': + resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==} cpu: [arm64] os: [win32] @@ -1480,8 +1686,8 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.34.9': - resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} + '@rollup/rollup-win32-ia32-msvc@4.44.1': + resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==} cpu: [ia32] os: [win32] @@ -1490,8 +1696,8 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.9': - resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} + '@rollup/rollup-win32-x64-msvc@4.44.1': + resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==} cpu: [x64] os: [win32] @@ -1788,8 +1994,8 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/http-proxy@1.17.16': - resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1833,12 +2039,18 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} '@types/wait-on@5.3.4': resolution: {integrity: sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw==} + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@typescript-eslint/eslint-plugin@7.18.0': resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1875,6 +2087,12 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/project-service@8.35.0': + resolution: {integrity: sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/scope-manager@7.18.0': resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1883,6 +2101,12 @@ packages: resolution: {integrity: sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.35.0': + resolution: {integrity: sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/type-utils@7.18.0': resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1908,6 +2132,10 @@ packages: resolution: {integrity: sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.35.0': + resolution: {integrity: sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@7.18.0': resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1923,6 +2151,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/typescript-estree@8.35.0': + resolution: {integrity: sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@7.18.0': resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1944,8 +2178,12 @@ packages: resolution: {integrity: sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vercel/nft@0.29.2': - resolution: {integrity: sha512-A/Si4mrTkQqJ6EXJKv5EYCDQ3NL6nJXxG8VGXePsaiQigsomHYQC9xSpX8qGk7AEZk4b1ssbYIqJ0ISQQ7bfcA==} + '@typescript-eslint/visitor-keys@8.35.0': + resolution: {integrity: sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vercel/nft@0.29.4': + resolution: {integrity: sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==} engines: {node: '>=18'} hasBin: true @@ -1996,20 +2234,40 @@ packages: '@vitest/utils@3.0.4': resolution: {integrity: sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==} - '@vue/compiler-core@3.5.12': - resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} + '@vue/compiler-core@3.5.17': + resolution: {integrity: sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==} + + '@vue/compiler-dom@3.5.17': + resolution: {integrity: sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==} + + '@vue/compiler-sfc@3.5.17': + resolution: {integrity: sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==} + + '@vue/compiler-ssr@3.5.17': + resolution: {integrity: sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==} + + '@vue/shared@3.5.17': + resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==} + + '@whatwg-node/disposablestack@0.0.6': + resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} + engines: {node: '>=18.0.0'} - '@vue/compiler-dom@3.5.12': - resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} + '@whatwg-node/fetch@0.10.8': + resolution: {integrity: sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg==} + engines: {node: '>=18.0.0'} - '@vue/compiler-sfc@3.5.12': - resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==} + '@whatwg-node/node-fetch@0.7.21': + resolution: {integrity: sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw==} + engines: {node: '>=18.0.0'} - '@vue/compiler-ssr@3.5.12': - resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==} + '@whatwg-node/promise-helpers@1.3.2': + resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} + engines: {node: '>=16.0.0'} - '@vue/shared@3.5.12': - resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} + '@whatwg-node/server@0.9.71': + resolution: {integrity: sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==} + engines: {node: '>=18.0.0'} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -2038,6 +2296,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -2052,10 +2315,6 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - ansi-escapes@7.0.0: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} @@ -2155,6 +2414,10 @@ packages: ast-metadata-inferer@0.8.1: resolution: {integrity: sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==} + ast-module-types@6.0.1: + resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} + engines: {node: '>=18'} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -2269,6 +2532,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-crc32@1.0.0: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} @@ -2297,8 +2563,8 @@ packages: resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==} engines: {node: '>=0.10.0'} - c12@3.0.2: - resolution: {integrity: sha512-6Tzk1/TNeI3WBPpK0j/Ss4+gPj3PUJYbWl/MWDJBThFvwNGNkXtd7Cz8BJtD4aRwoGHtzQD0SnxamgUiBH0/Nw==} + c12@3.0.4: + resolution: {integrity: sha512-t5FaZTYbbCtvxuZq9xxIruYydrAGsJ+8UdP0pZzMiK2xl/gNiSOy0OxhLzHUEEb0m1QXYqfzfvyIFEmz/g9lqg==} peerDependencies: magicast: ^0.3.5 peerDependenciesMeta: @@ -2321,6 +2587,9 @@ packages: resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} engines: {node: '>= 0.4'} + callsite@1.0.0: + resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -2352,9 +2621,6 @@ packages: change-case@4.1.2: resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} - change-case@5.4.4: - resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} - character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} @@ -2408,23 +2674,43 @@ packages: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@1.4.0: - resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} @@ -2440,6 +2726,9 @@ packages: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} @@ -2450,8 +2739,8 @@ packages: compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - compatx@0.1.8: - resolution: {integrity: sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==} + compatx@0.2.0: + resolution: {integrity: sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA==} compress-commons@6.0.2: resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} @@ -2468,10 +2757,17 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + consola@3.4.0: resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} engines: {node: ^14.18.0 || >=16.10.0} + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + constant-case@3.0.4: resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} @@ -2494,10 +2790,17 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie-es@2.0.0: + resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} + cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} + copy-file@11.0.0: + resolution: {integrity: sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==} + engines: {node: '>=18'} + core-js-compat@3.40.0: resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} @@ -2534,10 +2837,18 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} + cron-parser@4.9.0: + resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} + engines: {node: '>=12.0.0'} + croner@9.0.0: resolution: {integrity: sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA==} engines: {node: '>=18.0'} + croner@9.1.0: + resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==} + engines: {node: '>=18.0'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -2545,6 +2856,9 @@ packages: crossws@0.3.4: resolution: {integrity: sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==} + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -2557,6 +2871,10 @@ packages: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -2569,8 +2887,8 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - db0@0.3.1: - resolution: {integrity: sha512-3RogPLE2LLq6t4YiFCREyl572aBjkfMvfwPyN51df00TbPbryL3XqBYuJ/j6mgPssPK8AKfYdLxizaO5UG10sA==} + db0@0.3.2: + resolution: {integrity: sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw==} peerDependencies: '@electric-sql/pglite': '*' '@libsql/client': '*' @@ -2592,14 +2910,6 @@ packages: sqlite3: optional: true - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -2617,6 +2927,9 @@ packages: supports-color: optional: true + decache@4.6.2: + resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==} + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -2670,12 +2983,8 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destr@2.0.3: - resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} @@ -2686,6 +2995,49 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} + detective-amd@6.0.1: + resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==} + engines: {node: '>=18'} + hasBin: true + + detective-cjs@6.0.1: + resolution: {integrity: sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==} + engines: {node: '>=18'} + + detective-es6@5.0.1: + resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==} + engines: {node: '>=18'} + + detective-postcss@7.0.1: + resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==} + engines: {node: ^14.0.0 || >=16.0.0} + peerDependencies: + postcss: ^8.4.47 + + detective-sass@6.0.1: + resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==} + engines: {node: '>=18'} + + detective-scss@5.0.1: + resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==} + engines: {node: '>=18'} + + detective-stylus@5.0.1: + resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==} + engines: {node: '>=18'} + + detective-typescript@14.0.0: + resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} + engines: {node: '>=18'} + peerDependencies: + typescript: ^5.4.4 + + detective-vue2@2.2.0: + resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} + engines: {node: '>=18'} + peerDependencies: + typescript: ^5.4.4 + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -2732,6 +3084,10 @@ packages: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} + dotenv@16.5.0: + resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + engines: {node: '>=12'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2763,9 +3119,8 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} @@ -2786,6 +3141,10 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} @@ -2793,8 +3152,8 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - error-stack-parser-es@0.1.5: - resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} es-abstract@1.23.9: resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} @@ -2840,6 +3199,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2859,6 +3223,11 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + eslint-compat-utils@0.5.1: resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} engines: {node: '>=12'} @@ -3187,6 +3556,10 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@9.19.0: resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3205,6 +3578,11 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -3269,12 +3647,17 @@ packages: resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} engines: {node: '>=12.0.0'} - exsolve@1.0.1: - resolution: {integrity: sha512-Smf0iQtkQVJLaph8r/qS8C8SWfQkaq9Q/dFcD44MLbJj6DNhlWefVuaS21SjfqOsBbjVlKtbCj6L9ekXK6EZUg==} + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3308,6 +3691,9 @@ packages: fastq@1.19.0: resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.4.3: resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} peerDependencies: @@ -3316,6 +3702,21 @@ packages: picomatch: optional: true + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -3334,6 +3735,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + filter-obj@6.1.0: + resolution: {integrity: sha512-xdMtCAODmPloU9qtmPcdBV9Kd27NtMse+4ayThxqIHUES5Z2S6bGpap5PpdmNM56ub7y3i1eyr+vJJIIgWGKmA==} + engines: {node: '>=18'} + find-up-simple@1.0.0: resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} engines: {node: '>=18'} @@ -3357,6 +3762,9 @@ packages: flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -3382,9 +3790,13 @@ packages: resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} from@0.1.7: resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} @@ -3392,10 +3804,6 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} - engines: {node: '>=14.14'} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -3429,6 +3837,10 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-amd-module-type@6.0.1: + resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==} + engines: {node: '>=18'} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -3452,6 +3864,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -3531,6 +3947,11 @@ packages: resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} engines: {node: '>=18'} + gonzales-pe@4.3.0: + resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} + engines: {node: '>=0.6.0'} + hasBin: true + google-auth-library@9.15.1: resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} engines: {node: '>=14'} @@ -3557,11 +3978,8 @@ packages: resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - h3-nightly@1.15.1-20250222-111608-d1c00fc: - resolution: {integrity: sha512-V2DeFol/CJ4QLimURS59juWk4b+XY2qhSlyhi0U3WnqN3PKLAIpLtRn340MHQf53ldMhP4oQA/SrJG9hPOcnLA==} - - h3@1.15.1: - resolution: {integrity: sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==} + h3@1.15.3: + resolution: {integrity: sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==} has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} @@ -3599,6 +4017,10 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + html-entities@2.5.2: resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} @@ -3698,8 +4120,8 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - ioredis@5.5.0: - resolution: {integrity: sha512-7CutT89g23FfSa8MDoIFs2GYYa0PaNiW/OrT+nRyjRXHDZd17HmIgy+reOQ/yhh72NznNjGuS8kbCAcA4Ro4mw==} + ioredis@5.6.1: + resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==} engines: {node: '>=12.22.0'} iron-webcrypto@1.2.1: @@ -3712,6 +4134,9 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} @@ -3806,6 +4231,14 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -3860,6 +4293,13 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} + is-url-superb@4.0.0: + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} + engines: {node: '>=10'} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -3907,10 +4347,6 @@ packages: joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} - js-levenshtein@1.1.6: - resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} - engines: {node: '>=0.10.0'} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3965,9 +4401,6 @@ packages: resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} @@ -3976,12 +4409,20 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + junk@4.0.1: + resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} + engines: {node: '>=12.20'} + jwa@2.0.0: resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} jws@4.0.0: resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3996,6 +4437,9 @@ packages: knitwork@1.2.0: resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==} + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + ky@1.7.4: resolution: {integrity: sha512-zYEr/gh7uLW2l4su11bmQ2M9xLgQLjyvx58UyNM/6nuqyWFHPX5ktMjvpev3F8QWdjSsHUpnWew4PBCswBNuMQ==} engines: {node: '>=18'} @@ -4004,6 +4448,11 @@ packages: resolution: {integrity: sha512-s7hZHcQeSNKpzCkHRm8yA+0JPLjncSWnjb+2TIElwS2JAqYr+Kv3Ess+9KFfJS0C1xcQ1i9NkNHpWwCYpHMWsA==} engines: {node: '>=14.0.0'} + lambda-local@2.2.0: + resolution: {integrity: sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==} + engines: {node: '>=8'} + hasBin: true + language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -4047,6 +4496,10 @@ packages: resolution: {integrity: sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==} engines: {node: '>=14'} + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + engines: {node: '>=14'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4059,9 +4512,15 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} @@ -4102,6 +4561,10 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} + logform@2.7.0: + resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} + engines: {node: '>= 12.0.0'} + long@5.2.4: resolution: {integrity: sha512-qtzLbJE8hq7VabR3mISmVGtoXP8KGc2Z/AT8OuqlYD7JTR3oqrgwdjnk07wpj1twXxYmgDXgoKVWUG/fReSzHg==} @@ -4132,6 +4595,10 @@ packages: resolution: {integrity: sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==} engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} + luxon@3.6.1: + resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==} + engines: {node: '>=12'} + magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -4185,6 +4652,10 @@ packages: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} + merge-options@3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4192,6 +4663,9 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micro-api-client@3.3.0: + resolution: {integrity: sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==} + micromark-core-commonmark@2.0.2: resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==} @@ -4284,22 +4758,25 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} hasBin: true - mime@4.0.6: - resolution: {integrity: sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==} + mime@4.0.7: + resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==} engines: {node: '>=16'} hasBin: true @@ -4361,13 +4838,15 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + module-definition@6.0.1: + resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==} + engines: {node: '>=18'} + hasBin: true + mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -4382,6 +4861,11 @@ packages: nan@2.22.0: resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4397,8 +4881,12 @@ packages: resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} engines: {node: '>=18'} - nitropack-nightly@2.11.0-20250301-231416.f56ead19: - resolution: {integrity: sha512-PrN/Do7hcT96Bp9irk8cJf2KTKK7TqLpKhM+aBQEfQDbRSVkOJDTByI+30Az06rA50GFRPl7NDvBqbXPjZbtTA==} + netlify@13.3.5: + resolution: {integrity: sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg==} + engines: {node: ^14.16.0 || >=16.0.0} + + nitropack@2.11.13: + resolution: {integrity: sha512-xKng/szRZmFEsrB1Z+sFzYDhXL5KUtUkEouPCj9LiBPhJ7qV3jdOv1MSis++8H8zNI6dEurt51ZlK4VRDvedsA==} engines: {node: ^16.11.0 || >=17.0.0} hasBin: true peerDependencies: @@ -4417,6 +4905,11 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + node-fetch-native@1.6.6: resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} @@ -4429,6 +4922,10 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -4440,9 +4937,16 @@ packages: node-mock-http@1.0.0: resolution: {integrity: sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==} + node-mock-http@1.0.1: + resolution: {integrity: sha512-0gJJgENizp4ghds/Ywu2FCmcRsgBTmRQzYPZm61wy+Em2sBarSka0OhQS5huLBg6od1zkNpnWMCZloQDFVvOMQ==} + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-source-walk@7.0.1: + resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==} + engines: {node: '>=18'} + nopt@8.1.0: resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} engines: {node: ^18.17.0 || >=20.5.0} @@ -4451,6 +4955,14 @@ packages: normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -4513,8 +5025,8 @@ packages: ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} - ohash@2.0.9: - resolution: {integrity: sha512-ljz2sybhXrRpBW9LleuJPP9uxbMKW8qxFz9lLOHW2QEel78rJ1sUgaX2cBNDt49w+JleNSkhYkVOCx6RgkKn0Q==} + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} @@ -4523,6 +5035,9 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -4539,12 +5054,6 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openapi-typescript@7.6.1: - resolution: {integrity: sha512-F7RXEeo/heF3O9lOXo2bNjCOtfp7u+D6W3a3VNEH2xE6v+fxLtn5nq0uvUcA1F5aT+CMhNeC5Uqtg5tlXFX/ag==} - hasBin: true - peerDependencies: - typescript: ^5.x - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -4553,6 +5062,10 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -4577,10 +5090,22 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + p-wait-for@5.0.2: + resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==} + engines: {node: '>=12'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -4678,6 +5203,9 @@ packages: pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -4746,8 +5274,8 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.0.1: - resolution: {integrity: sha512-LdDk/hlFeVBoEZqlkJ2bsxwq5fjKQg7i422zu78IC16CSR2XBe7kYxxBx0mkU8kLX6nh50Zp80lZHveKnsHTpQ==} + pkg-types@2.1.1: + resolution: {integrity: sha512-eY0QFb6eSwc9+0d/5D2lFFUq+A3n3QNGSy/X2Nvp+6MfzGw2u6EbA7S80actgjY1lkvvI0pqB+a4hioMh443Ew==} pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} @@ -4761,10 +5289,20 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} + postcss-values-parser@6.0.2: + resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} + engines: {node: '>=10'} + peerDependencies: + postcss: ^8.2.9 + postcss@8.5.1: resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -4805,6 +5343,11 @@ packages: engines: {node: '>=10'} hasBin: true + precinct@12.2.0: + resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} + engines: {node: '>=18'} + hasBin: true + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4918,9 +5461,19 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quote-unquote@1.0.0: + resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} + radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -4941,6 +5494,10 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} + read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -4949,6 +5506,10 @@ packages: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -5006,6 +5567,9 @@ packages: remeda@2.21.0: resolution: {integrity: sha512-ANFqOts3BsvW1MrKOv9SVHG3ly0MzzLa0HIu5qLkiRuEPGPuH9ny3sgd7VdHvC2VOUSN/7RkmabPlAda6JtGgg==} + remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -5014,6 +5578,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-package-name@2.0.1: + resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -5061,12 +5628,12 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rollup-plugin-visualizer@5.14.0: - resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} + rollup-plugin-visualizer@6.0.3: + resolution: {integrity: sha512-ZU41GwrkDcCpVoffviuM9Clwjy5fcUxlz0oMoTXTYsK+tcIFzbdacnrr2n8TXcHxbGKKXtOdjxM2HUS4HjkwIw==} engines: {node: '>=18'} hasBin: true peerDependencies: - rolldown: 1.x + rolldown: 1.x || ^1.0.0-beta rollup: 2.x || 3.x || 4.x peerDependenciesMeta: rolldown: @@ -5079,8 +5646,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.34.9: - resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} + rollup@4.44.1: + resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -5108,6 +5675,10 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -5134,14 +5705,14 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} @@ -5155,9 +5726,9 @@ packages: serve-placeholder@2.0.2: resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==} - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} @@ -5218,6 +5789,9 @@ packages: simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sirv@3.0.0: resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} engines: {node: '>=18'} @@ -5304,6 +5878,9 @@ packages: stable-hash@0.0.4: resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -5322,6 +5899,9 @@ packages: std-env@3.8.0: resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stream-combiner@0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} @@ -5436,10 +6016,6 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-color@9.4.0: - resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} - engines: {node: '>=12'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -5502,6 +6078,9 @@ packages: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -5515,8 +6094,8 @@ packages: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} - tinyglobby@0.2.12: - resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} tinypool@1.0.2: @@ -5531,6 +6110,9 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + tmp@0.2.3: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} @@ -5547,6 +6129,9 @@ packages: resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -5558,6 +6143,10 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + ts-api-utils@1.4.3: resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} @@ -5570,6 +6159,12 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-pattern@5.6.2: resolution: {integrity: sha512-d4IxJUXROL5NCa3amvMg6VQW2HVtZYmUTPfvVtO7zJWGYLJ+mry9v2OmYm+z67aniQoQ8/yFNadiEwtNS9qQiw==} @@ -5668,8 +6263,11 @@ packages: ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - ultrahtml@1.5.3: - resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + ultrahtml@1.6.0: + resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} @@ -5691,8 +6289,8 @@ packages: resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} engines: {node: '>=14.0'} - unenv@2.0.0-rc.9: - resolution: {integrity: sha512-hVp42Cp9bqE8NRxdUIrmWNi+NJ50dtzrZBeNUEKDYLwa3WB6bkroqu8WnFrdMo1bZslErerwLi0MwFdk/xoMcw==} + unenv@2.0.0-rc.18: + resolution: {integrity: sha512-O0oVQVJ2X3Q8H4HITJr4e2cWxMYBeZ+p8S25yoKCxVCgDWtIJDcgwWNonYz12tI3ylVQCRyPV/Bdq0KJeXo7AA==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -5702,8 +6300,8 @@ packages: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} - unimport@4.1.2: - resolution: {integrity: sha512-oVUL7PSlyVV3QRhsdcyYEMaDX8HJyS/CnUonEJTYA3//bWO+o/4gG8F7auGWWWkrrxBQBYOO8DKe+C53ktpRXw==} + unimport@5.0.1: + resolution: {integrity: sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ==} engines: {node: '>=18.12.0'} unist-util-is@6.0.0: @@ -5718,9 +6316,9 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} unplugin-utils@0.2.4: resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} @@ -5730,16 +6328,16 @@ packages: resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} engines: {node: '>=14.0.0'} - unplugin@2.1.2: - resolution: {integrity: sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==} - engines: {node: '>=18.12.0'} - unplugin@2.2.0: resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==} engines: {node: '>=18.12.0'} - unstorage@1.15.0: - resolution: {integrity: sha512-m40eHdGY/gA6xAPqo8eaxqXgBuzQTlAKfmB1iF7oCKXE1HfwHwzDJBywK+qQGn52dta+bPlZluPF7++yR3p/bg==} + unplugin@2.3.5: + resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==} + engines: {node: '>=18.12.0'} + + unstorage@1.16.0: + resolution: {integrity: sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==} peerDependencies: '@azure/app-configuration': ^1.8.0 '@azure/cosmos': ^4.2.0 @@ -5747,7 +6345,7 @@ packages: '@azure/identity': ^4.6.0 '@azure/keyvault-secrets': ^4.9.0 '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6.0.3 + '@capacitor/preferences': ^6.0.3 || ^7.0.0 '@deno/kv': '>=0.9.0' '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 '@planetscale/database': ^1.19.0 @@ -5823,18 +6421,22 @@ packages: uqr@0.1.2: resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} - uri-js-replace@1.0.1: - resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} - uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + urlpattern-polyfill@10.1.0: + resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + urlpattern-polyfill@8.0.2: resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -5930,6 +6532,10 @@ packages: engines: {node: '>=12.0.0'} hasBin: true + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -5965,6 +6571,14 @@ packages: engines: {node: '>=8'} hasBin: true + winston-transport@4.9.0: + resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} + engines: {node: '>= 12.0.0'} + + winston@3.17.0: + resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} + engines: {node: '>= 12.0.0'} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -5984,6 +6598,10 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + write-file-atomic@6.0.0: + resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} + engines: {node: ^18.17.0 || >=20.5.0} + xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -6011,9 +6629,6 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml-ast-parser@0.0.43: - resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} - yaml-eslint-parser@1.2.3: resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} engines: {node: ^14.17.0 || >=16.0.0} @@ -6035,6 +6650,9 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -6047,13 +6665,13 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} - youch-core@0.3.1: - resolution: {integrity: sha512-KOAmtABz17fgK+uBBJYIzaPpIgX+JgTRgY4t3zXH18akc5rRtFkRmcNTMCuSxLdbOJDY9+T/O3nyA/EQuN4EWA==} - engines: {node: '>=20.6.0'} + youch-core@0.3.2: + resolution: {integrity: sha512-fusrlIMLeRvTFYLUjJ9KzlGC3N+6MOPJ68HNj/yJv2nz7zq8t4HEviLms2gkdRPUS7F5rZ5n+pYx9r88m6IE1g==} + engines: {node: '>=18'} - youch@4.1.0-beta.4: - resolution: {integrity: sha512-sknU8tgzmqx7PJBEqAdqBYjleLjHfNnFBTi3HwQTh6I+4OoJaIHkezxxUJ/ta7cpfgdG87bdYPCucVZV+GzhRA==} - engines: {node: '>=20.6.0'} + youch@4.1.0-beta.8: + resolution: {integrity: sha512-rY2A2lSF7zC+l7HH9Mq+83D1dLlsPnEvy8jTouzaptDZM6geqZ3aJe/b7ULCwRURPtWV3vbDjA2DDMdoBol0HQ==} + engines: {node: '>=18'} zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} @@ -6111,7 +6729,7 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/eslint-config@4.1.0(@typescript-eslint/utils@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.12)(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)(vitest@3.0.4)': + '@antfu/eslint-config@4.1.0(@typescript-eslint/utils@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.17)(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)(vitest@3.0.4)': dependencies: '@antfu/install-pkg': 1.0.0 '@clack/prompts': 0.9.1 @@ -6139,7 +6757,7 @@ snapshots: eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2)) eslint-plugin-vue: 9.32.0(eslint@9.19.0(jiti@2.4.2)) eslint-plugin-yml: 1.16.0(eslint@9.19.0(jiti@2.4.2)) - eslint-processor-vue-blocks: 1.0.0(@vue/compiler-sfc@3.5.12)(eslint@9.19.0(jiti@2.4.2)) + eslint-processor-vue-blocks: 1.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.19.0(jiti@2.4.2)) globals: 15.14.0 jsonc-eslint-parser: 2.4.0 local-pkg: 1.0.0 @@ -6162,6 +6780,8 @@ snapshots: package-manager-detector: 0.2.9 tinyexec: 0.3.2 + '@antfu/utils@9.2.0': {} + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 @@ -6691,7 +7311,7 @@ snapshots: '@azure/core-util': 1.11.0 '@azure/logger': 1.1.4 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6(supports-color@9.4.0) + https-proxy-agent: 7.0.6 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -6766,7 +7386,7 @@ snapshots: '@babel/traverse': 7.26.7 '@babel/types': 7.26.7 convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -6821,8 +7441,12 @@ snapshots: '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-option@7.25.9': {} '@babel/helpers@7.26.7': @@ -6834,6 +7458,10 @@ snapshots: dependencies: '@babel/types': 7.26.7 + '@babel/parser@7.27.5': + dependencies: + '@babel/types': 7.27.6 + '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 @@ -6847,7 +7475,7 @@ snapshots: '@babel/parser': 7.26.7 '@babel/template': 7.25.9 '@babel/types': 7.26.7 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -6857,6 +7485,11 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.27.6': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@balena/dockerignore@1.0.2': {} '@clack/core@0.4.1': @@ -6870,10 +7503,12 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@cloudflare/kv-asset-handler@0.3.4': + '@cloudflare/kv-asset-handler@0.4.0': dependencies: mime: 3.0.0 + '@colors/colors@1.6.0': {} + '@commitlint/cli@19.6.1(@types/node@22.13.0)(typescript@5.7.3)': dependencies: '@commitlint/format': 19.5.0 @@ -6984,6 +7619,17 @@ snapshots: '@types/conventional-commits-parser': 5.0.1 chalk: 5.4.1 + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@dependents/detective-less@5.0.1': + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + '@es-joy/jsdoccomment@0.49.0': dependencies: comment-parser: 1.4.1 @@ -7005,150 +7651,225 @@ snapshots: '@esbuild/aix-ppc64@0.25.0': optional: true + '@esbuild/aix-ppc64@0.25.5': + optional: true + '@esbuild/android-arm64@0.24.2': optional: true '@esbuild/android-arm64@0.25.0': optional: true + '@esbuild/android-arm64@0.25.5': + optional: true + '@esbuild/android-arm@0.24.2': optional: true '@esbuild/android-arm@0.25.0': optional: true + '@esbuild/android-arm@0.25.5': + optional: true + '@esbuild/android-x64@0.24.2': optional: true '@esbuild/android-x64@0.25.0': optional: true + '@esbuild/android-x64@0.25.5': + optional: true + '@esbuild/darwin-arm64@0.24.2': optional: true '@esbuild/darwin-arm64@0.25.0': optional: true + '@esbuild/darwin-arm64@0.25.5': + optional: true + '@esbuild/darwin-x64@0.24.2': optional: true '@esbuild/darwin-x64@0.25.0': optional: true + '@esbuild/darwin-x64@0.25.5': + optional: true + '@esbuild/freebsd-arm64@0.24.2': optional: true '@esbuild/freebsd-arm64@0.25.0': optional: true + '@esbuild/freebsd-arm64@0.25.5': + optional: true + '@esbuild/freebsd-x64@0.24.2': optional: true '@esbuild/freebsd-x64@0.25.0': optional: true + '@esbuild/freebsd-x64@0.25.5': + optional: true + '@esbuild/linux-arm64@0.24.2': optional: true '@esbuild/linux-arm64@0.25.0': optional: true + '@esbuild/linux-arm64@0.25.5': + optional: true + '@esbuild/linux-arm@0.24.2': optional: true '@esbuild/linux-arm@0.25.0': optional: true + '@esbuild/linux-arm@0.25.5': + optional: true + '@esbuild/linux-ia32@0.24.2': optional: true '@esbuild/linux-ia32@0.25.0': optional: true + '@esbuild/linux-ia32@0.25.5': + optional: true + '@esbuild/linux-loong64@0.24.2': optional: true '@esbuild/linux-loong64@0.25.0': optional: true + '@esbuild/linux-loong64@0.25.5': + optional: true + '@esbuild/linux-mips64el@0.24.2': optional: true '@esbuild/linux-mips64el@0.25.0': optional: true + '@esbuild/linux-mips64el@0.25.5': + optional: true + '@esbuild/linux-ppc64@0.24.2': optional: true '@esbuild/linux-ppc64@0.25.0': optional: true + '@esbuild/linux-ppc64@0.25.5': + optional: true + '@esbuild/linux-riscv64@0.24.2': optional: true '@esbuild/linux-riscv64@0.25.0': optional: true + '@esbuild/linux-riscv64@0.25.5': + optional: true + '@esbuild/linux-s390x@0.24.2': optional: true '@esbuild/linux-s390x@0.25.0': optional: true + '@esbuild/linux-s390x@0.25.5': + optional: true + '@esbuild/linux-x64@0.24.2': optional: true '@esbuild/linux-x64@0.25.0': optional: true + '@esbuild/linux-x64@0.25.5': + optional: true + '@esbuild/netbsd-arm64@0.24.2': optional: true '@esbuild/netbsd-arm64@0.25.0': optional: true + '@esbuild/netbsd-arm64@0.25.5': + optional: true + '@esbuild/netbsd-x64@0.24.2': optional: true '@esbuild/netbsd-x64@0.25.0': optional: true + '@esbuild/netbsd-x64@0.25.5': + optional: true + '@esbuild/openbsd-arm64@0.24.2': optional: true '@esbuild/openbsd-arm64@0.25.0': optional: true + '@esbuild/openbsd-arm64@0.25.5': + optional: true + '@esbuild/openbsd-x64@0.24.2': optional: true '@esbuild/openbsd-x64@0.25.0': optional: true + '@esbuild/openbsd-x64@0.25.5': + optional: true + '@esbuild/sunos-x64@0.24.2': optional: true '@esbuild/sunos-x64@0.25.0': optional: true + '@esbuild/sunos-x64@0.25.5': + optional: true + '@esbuild/win32-arm64@0.24.2': optional: true '@esbuild/win32-arm64@0.25.0': optional: true + '@esbuild/win32-arm64@0.25.5': + optional: true + '@esbuild/win32-ia32@0.24.2': optional: true '@esbuild/win32-ia32@0.25.0': optional: true + '@esbuild/win32-ia32@0.25.5': + optional: true + '@esbuild/win32-x64@0.24.2': optional: true '@esbuild/win32-x64@0.25.0': optional: true + '@esbuild/win32-x64@0.25.5': + optional: true + '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.19.0(jiti@2.4.2))': dependencies: escape-string-regexp: 4.0.0 @@ -7169,7 +7890,7 @@ snapshots: '@eslint/config-array@0.19.2': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -7181,7 +7902,7 @@ snapshots: '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -7213,6 +7934,8 @@ snapshots: '@fastify/busboy@2.1.1': {} + '@fastify/busboy@3.1.1': {} + '@github/browserslist-config@1.0.0': {} '@google-cloud/paginator@5.0.2': @@ -7306,12 +8029,12 @@ snapshots: '@commitlint/cli': 19.6.1(@types/node@22.13.0)(typescript@5.7.3) '@commitlint/config-conventional': 19.6.0 - '@louishaftmann/eslint-config@4.1.1(@babel/core@7.26.7)(@types/eslint@9.6.1)(@typescript-eslint/utils@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.12)(eslint@9.19.0(jiti@2.4.2))(prettier@3.4.2)(typescript@5.7.3)(vitest@3.0.4)': + '@louishaftmann/eslint-config@4.1.1(@babel/core@7.26.7)(@types/eslint@9.6.1)(@typescript-eslint/utils@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.17)(eslint@9.19.0(jiti@2.4.2))(prettier@3.4.2)(typescript@5.7.3)(vitest@3.0.4)': dependencies: - '@antfu/eslint-config': 4.1.0(@typescript-eslint/utils@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.12)(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)(vitest@3.0.4) + '@antfu/eslint-config': 4.1.0(@typescript-eslint/utils@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.17)(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)(vitest@3.0.4) '@eslint/compat': 1.2.6(eslint@9.19.0(jiti@2.4.2)) '@eslint/eslintrc': 3.2.0 - '@nuxt/eslint-config': 0.7.6(@vue/compiler-sfc@3.5.12)(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@nuxt/eslint-config': 0.7.6(@vue/compiler-sfc@3.5.17)(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) '@shopify/eslint-plugin': 46.0.0(@babel/core@7.26.7)(@types/eslint@9.6.1)(eslint@9.19.0(jiti@2.4.2))(prettier@3.4.2)(typescript@5.7.3) eslint: 9.19.0(jiti@2.4.2) eslint-config-prettier: 10.0.1(eslint@9.19.0(jiti@2.4.2)) @@ -7375,12 +8098,12 @@ snapshots: '@mapbox/node-pre-gyp@2.0.0': dependencies: - consola: 3.4.0 + consola: 3.4.2 detect-libc: 2.0.3 - https-proxy-agent: 7.0.6(supports-color@9.4.0) + https-proxy-agent: 7.0.6 node-fetch: 2.7.0 nopt: 8.1.0 - semver: 7.7.1 + semver: 7.7.2 tar: 7.4.3 transitivePeerDependencies: - encoding @@ -7388,16 +8111,93 @@ snapshots: '@mdn/browser-compat-data@5.6.35': {} - '@netlify/functions@3.0.0': + '@netlify/binary-info@1.0.0': {} + + '@netlify/blobs@9.1.2': + dependencies: + '@netlify/dev-utils': 2.2.0 + '@netlify/runtime-utils': 1.3.1 + + '@netlify/dev-utils@2.2.0': dependencies: - '@netlify/serverless-functions-api': 1.30.1 + '@whatwg-node/server': 0.9.71 + chokidar: 4.0.3 + decache: 4.6.2 + dot-prop: 9.0.0 + env-paths: 3.0.0 + find-up: 7.0.0 + lodash.debounce: 4.0.8 + netlify: 13.3.5 + parse-gitignore: 2.0.0 + uuid: 11.1.0 + write-file-atomic: 6.0.0 + + '@netlify/functions@3.1.10(rollup@4.44.1)': + dependencies: + '@netlify/blobs': 9.1.2 + '@netlify/dev-utils': 2.2.0 + '@netlify/serverless-functions-api': 1.41.2 + '@netlify/zip-it-and-ship-it': 12.1.5(rollup@4.44.1) + cron-parser: 4.9.0 + decache: 4.6.2 + extract-zip: 2.0.1 + is-stream: 4.0.1 + jwt-decode: 4.0.0 + lambda-local: 2.2.0 + read-package-up: 11.0.0 + source-map-support: 0.5.21 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + '@netlify/open-api@2.37.0': {} + + '@netlify/runtime-utils@1.3.1': {} + + '@netlify/serverless-functions-api@1.41.2': {} - '@netlify/node-cookies@0.1.0': {} + '@netlify/serverless-functions-api@2.1.2': {} - '@netlify/serverless-functions-api@1.30.1': + '@netlify/zip-it-and-ship-it@12.1.5(rollup@4.44.1)': dependencies: - '@netlify/node-cookies': 0.1.0 + '@babel/parser': 7.26.7 + '@babel/types': 7.27.6 + '@netlify/binary-info': 1.0.0 + '@netlify/serverless-functions-api': 2.1.2 + '@vercel/nft': 0.29.4(rollup@4.44.1) + archiver: 7.0.1 + common-path-prefix: 3.0.0 + copy-file: 11.0.0 + es-module-lexer: 1.6.0 + esbuild: 0.25.5 + execa: 8.0.1 + fast-glob: 3.3.3 + filter-obj: 6.1.0 + find-up: 7.0.0 + is-builtin-module: 3.2.1 + is-path-inside: 4.0.0 + junk: 4.0.1 + locate-path: 7.2.0 + merge-options: 3.0.4 + minimatch: 9.0.5 + normalize-path: 3.0.0 + p-map: 7.0.3 + path-exists: 5.0.0 + precinct: 12.2.0 + require-package-name: 2.0.1 + resolve: 2.0.0-next.5 + semver: 7.7.2 + tmp-promise: 3.0.3 + toml: 3.0.0 + unixify: 1.0.0 urlpattern-polyfill: 8.0.2 + yargs: 17.7.2 + zod: 3.24.1 + transitivePeerDependencies: + - encoding + - rollup + - supports-color '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: @@ -7415,7 +8215,7 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.0 - '@nuxt/eslint-config@0.7.6(@vue/compiler-sfc@3.5.12)(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + '@nuxt/eslint-config@0.7.6(@vue/compiler-sfc@3.5.17)(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@antfu/install-pkg': 1.0.0 '@clack/prompts': 0.9.1 @@ -7433,7 +8233,7 @@ snapshots: eslint-plugin-regexp: 2.7.0(eslint@9.19.0(jiti@2.4.2)) eslint-plugin-unicorn: 56.0.1(eslint@9.19.0(jiti@2.4.2)) eslint-plugin-vue: 9.32.0(eslint@9.19.0(jiti@2.4.2)) - eslint-processor-vue-blocks: 1.0.0(@vue/compiler-sfc@3.5.12)(eslint@9.19.0(jiti@2.4.2)) + eslint-processor-vue-blocks: 1.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.19.0(jiti@2.4.2)) globals: 15.14.0 local-pkg: 1.0.0 pathe: 2.0.2 @@ -7528,7 +8328,7 @@ snapshots: dependencies: kleur: 4.1.5 - '@poppinss/dumper@0.6.2': + '@poppinss/dumper@0.6.3': dependencies: '@poppinss/colors': 4.1.4 '@sindresorhus/is': 7.0.1 @@ -7557,36 +8357,13 @@ snapshots: '@protobuf-ts/runtime@2.9.4': {} - '@redocly/ajv@8.11.2': - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js-replace: 1.0.1 - - '@redocly/config@0.20.3': {} - - '@redocly/openapi-core@1.28.0(supports-color@9.4.0)': - dependencies: - '@redocly/ajv': 8.11.2 - '@redocly/config': 0.20.3 - colorette: 1.4.0 - https-proxy-agent: 7.0.6(supports-color@9.4.0) - js-levenshtein: 1.1.6 - js-yaml: 4.1.0 - minimatch: 5.1.6 - pluralize: 8.0.0 - yaml-ast-parser: 0.0.43 - transitivePeerDependencies: - - supports-color - - '@rollup/plugin-alias@5.1.1(rollup@4.34.9)': + '@rollup/plugin-alias@5.1.1(rollup@4.44.1)': optionalDependencies: - rollup: 4.34.9 + rollup: 4.44.1 - '@rollup/plugin-commonjs@28.0.2(rollup@4.34.9)': + '@rollup/plugin-commonjs@28.0.6(rollup@4.44.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.4.3(picomatch@4.0.2) @@ -7594,167 +8371,170 @@ snapshots: magic-string: 0.30.17 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.9 + rollup: 4.44.1 - '@rollup/plugin-inject@5.0.5(rollup@4.34.9)': + '@rollup/plugin-inject@5.0.5(rollup@4.44.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) estree-walker: 2.0.2 magic-string: 0.30.17 optionalDependencies: - rollup: 4.34.9 + rollup: 4.44.1 - '@rollup/plugin-json@6.1.0(rollup@4.34.9)': + '@rollup/plugin-json@6.1.0(rollup@4.44.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) optionalDependencies: - rollup: 4.34.9 + rollup: 4.44.1 - '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.9)': + '@rollup/plugin-node-resolve@16.0.1(rollup@4.44.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.34.9 + rollup: 4.44.1 - '@rollup/plugin-replace@6.0.2(rollup@4.34.9)': + '@rollup/plugin-replace@6.0.2(rollup@4.44.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) magic-string: 0.30.17 optionalDependencies: - rollup: 4.34.9 + rollup: 4.44.1 - '@rollup/plugin-terser@0.4.4(rollup@4.34.9)': + '@rollup/plugin-terser@0.4.4(rollup@4.44.1)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.37.0 optionalDependencies: - rollup: 4.34.9 + rollup: 4.44.1 - '@rollup/pluginutils@5.1.4(rollup@4.34.9)': + '@rollup/pluginutils@5.1.4(rollup@4.44.1)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.9 + rollup: 4.44.1 '@rollup/rollup-android-arm-eabi@4.34.0': optional: true - '@rollup/rollup-android-arm-eabi@4.34.9': + '@rollup/rollup-android-arm-eabi@4.44.1': optional: true '@rollup/rollup-android-arm64@4.34.0': optional: true - '@rollup/rollup-android-arm64@4.34.9': + '@rollup/rollup-android-arm64@4.44.1': optional: true '@rollup/rollup-darwin-arm64@4.34.0': optional: true - '@rollup/rollup-darwin-arm64@4.34.9': + '@rollup/rollup-darwin-arm64@4.44.1': optional: true '@rollup/rollup-darwin-x64@4.34.0': optional: true - '@rollup/rollup-darwin-x64@4.34.9': + '@rollup/rollup-darwin-x64@4.44.1': optional: true '@rollup/rollup-freebsd-arm64@4.34.0': optional: true - '@rollup/rollup-freebsd-arm64@4.34.9': + '@rollup/rollup-freebsd-arm64@4.44.1': optional: true '@rollup/rollup-freebsd-x64@4.34.0': optional: true - '@rollup/rollup-freebsd-x64@4.34.9': + '@rollup/rollup-freebsd-x64@4.44.1': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.34.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': optional: true '@rollup/rollup-linux-arm-musleabihf@4.34.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.34.9': + '@rollup/rollup-linux-arm-musleabihf@4.44.1': optional: true '@rollup/rollup-linux-arm64-gnu@4.34.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.9': + '@rollup/rollup-linux-arm64-gnu@4.44.1': optional: true '@rollup/rollup-linux-arm64-musl@4.34.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.9': + '@rollup/rollup-linux-arm64-musl@4.44.1': optional: true '@rollup/rollup-linux-loongarch64-gnu@4.34.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': optional: true '@rollup/rollup-linux-powerpc64le-gnu@4.34.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': optional: true '@rollup/rollup-linux-riscv64-gnu@4.34.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.34.9': + '@rollup/rollup-linux-riscv64-gnu@4.44.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.44.1': optional: true '@rollup/rollup-linux-s390x-gnu@4.34.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.34.9': + '@rollup/rollup-linux-s390x-gnu@4.44.1': optional: true '@rollup/rollup-linux-x64-gnu@4.34.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.9': + '@rollup/rollup-linux-x64-gnu@4.44.1': optional: true '@rollup/rollup-linux-x64-musl@4.34.0': optional: true - '@rollup/rollup-linux-x64-musl@4.34.9': + '@rollup/rollup-linux-x64-musl@4.44.1': optional: true '@rollup/rollup-win32-arm64-msvc@4.34.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.9': + '@rollup/rollup-win32-arm64-msvc@4.44.1': optional: true '@rollup/rollup-win32-ia32-msvc@4.34.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.34.9': + '@rollup/rollup-win32-ia32-msvc@4.44.1': optional: true '@rollup/rollup-win32-x64-msvc@4.34.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.9': + '@rollup/rollup-win32-x64-msvc@4.44.1': optional: true '@rtsao/scc@1.1.0': {} @@ -7765,7 +8545,7 @@ snapshots: dependencies: '@babel/eslint-parser': 7.26.5(@babel/core@7.26.7)(eslint@9.19.0(jiti@2.4.2)) '@babel/eslint-plugin': 7.25.9(@babel/eslint-parser@7.26.5(@babel/core@7.26.7)(eslint@9.19.0(jiti@2.4.2)))(eslint@9.19.0(jiti@2.4.2)) - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/parser': 7.18.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) change-case: 4.1.2 common-tags: 1.8.2 @@ -8212,9 +8992,7 @@ snapshots: '@types/estree@1.0.6': {} - '@types/http-proxy@1.17.16': - dependencies: - '@types/node': 22.13.0 + '@types/estree@1.0.8': {} '@types/json-schema@7.0.15': {} @@ -8266,16 +9044,23 @@ snapshots: '@types/tough-cookie@4.0.5': {} + '@types/triple-beam@1.3.5': {} + '@types/unist@3.0.3': {} '@types/wait-on@5.3.4': dependencies: '@types/node': 22.13.0 - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.13.0 + optional: true + + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 7.18.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/type-utils': 7.18.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/utils': 7.18.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) @@ -8313,7 +9098,7 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 eslint: 9.19.0(jiti@2.4.2) optionalDependencies: typescript: 5.7.3 @@ -8326,12 +9111,21 @@ snapshots: '@typescript-eslint/types': 8.22.0 '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.22.0 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 eslint: 9.19.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.35.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.7.3) + '@typescript-eslint/types': 8.35.0 + debug: 4.4.0 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@7.18.0': dependencies: '@typescript-eslint/types': 7.18.0 @@ -8342,11 +9136,15 @@ snapshots: '@typescript-eslint/types': 8.22.0 '@typescript-eslint/visitor-keys': 8.22.0 + '@typescript-eslint/tsconfig-utils@8.35.0(typescript@5.7.3)': + dependencies: + typescript: 5.7.3 + '@typescript-eslint/type-utils@7.18.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3) '@typescript-eslint/utils': 7.18.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 eslint: 9.19.0(jiti@2.4.2) ts-api-utils: 1.4.3(typescript@5.7.3) optionalDependencies: @@ -8358,7 +9156,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) '@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 eslint: 9.19.0(jiti@2.4.2) ts-api-utils: 2.0.0(typescript@5.7.3) typescript: 5.7.3 @@ -8369,11 +9167,13 @@ snapshots: '@typescript-eslint/types@8.22.0': {} + '@typescript-eslint/types@8.35.0': {} + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -8388,7 +9188,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.22.0 '@typescript-eslint/visitor-keys': 8.22.0 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -8398,6 +9198,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.35.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/project-service': 8.35.0(typescript@5.7.3) + '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.7.3) + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/visitor-keys': 8.35.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@7.18.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.2)) @@ -8430,10 +9246,15 @@ snapshots: '@typescript-eslint/types': 8.22.0 eslint-visitor-keys: 4.2.0 - '@vercel/nft@0.29.2(rollup@4.34.9)': + '@typescript-eslint/visitor-keys@8.35.0': + dependencies: + '@typescript-eslint/types': 8.35.0 + eslint-visitor-keys: 4.2.1 + + '@vercel/nft@0.29.4(rollup@4.44.1)': dependencies: '@mapbox/node-pre-gyp': 2.0.0 - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) acorn: 8.14.0 acorn-import-attributes: 1.9.5(acorn@8.14.0) async-sema: 3.1.1 @@ -8508,37 +9329,65 @@ snapshots: loupe: 3.1.3 tinyrainbow: 2.0.0 - '@vue/compiler-core@3.5.12': + '@vue/compiler-core@3.5.17': dependencies: - '@babel/parser': 7.26.7 - '@vue/shared': 3.5.12 + '@babel/parser': 7.27.5 + '@vue/shared': 3.5.17 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.12': + '@vue/compiler-dom@3.5.17': dependencies: - '@vue/compiler-core': 3.5.12 - '@vue/shared': 3.5.12 + '@vue/compiler-core': 3.5.17 + '@vue/shared': 3.5.17 - '@vue/compiler-sfc@3.5.12': + '@vue/compiler-sfc@3.5.17': dependencies: - '@babel/parser': 7.26.7 - '@vue/compiler-core': 3.5.12 - '@vue/compiler-dom': 3.5.12 - '@vue/compiler-ssr': 3.5.12 - '@vue/shared': 3.5.12 + '@babel/parser': 7.27.5 + '@vue/compiler-core': 3.5.17 + '@vue/compiler-dom': 3.5.17 + '@vue/compiler-ssr': 3.5.17 + '@vue/shared': 3.5.17 estree-walker: 2.0.2 magic-string: 0.30.17 - postcss: 8.5.1 + postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.12': + '@vue/compiler-ssr@3.5.17': + dependencies: + '@vue/compiler-dom': 3.5.17 + '@vue/shared': 3.5.17 + + '@vue/shared@3.5.17': {} + + '@whatwg-node/disposablestack@0.0.6': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@whatwg-node/fetch@0.10.8': + dependencies: + '@whatwg-node/node-fetch': 0.7.21 + urlpattern-polyfill: 10.1.0 + + '@whatwg-node/node-fetch@0.7.21': + dependencies: + '@fastify/busboy': 3.1.1 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@whatwg-node/promise-helpers@1.3.2': dependencies: - '@vue/compiler-dom': 3.5.12 - '@vue/shared': 3.5.12 + tslib: 2.8.1 - '@vue/shared@3.5.12': {} + '@whatwg-node/server@0.9.71': + dependencies: + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.8 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 JSONStream@1.3.5: dependencies: @@ -8561,9 +9410,11 @@ snapshots: acorn@8.14.0: {} + acorn@8.15.0: {} + agent-base@6.0.2: dependencies: - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -8583,8 +9434,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ansi-colors@4.1.3: {} - ansi-escapes@7.0.0: dependencies: environment: 1.1.0 @@ -8712,6 +9561,8 @@ snapshots: dependencies: '@mdn/browser-compat-data': 5.6.35 + ast-module-types@6.0.1: {} + ast-types-flow@0.0.8: {} async-function@1.0.0: {} @@ -8826,6 +9677,8 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) + buffer-crc32@0.2.13: {} + buffer-crc32@1.0.0: {} buffer-equal-constant-time@1.0.1: {} @@ -8849,19 +9702,19 @@ snapshots: byline@5.0.0: {} - c12@3.0.2(magicast@0.3.5): + c12@3.0.4(magicast@0.3.5): dependencies: chokidar: 4.0.3 - confbox: 0.1.8 + confbox: 0.2.2 defu: 6.1.4 - dotenv: 16.4.7 - exsolve: 1.0.1 + dotenv: 16.5.0 + exsolve: 1.0.7 giget: 2.0.0 jiti: 2.4.2 - ohash: 2.0.9 + ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 1.0.0 - pkg-types: 2.0.1 + pkg-types: 2.1.1 rc9: 2.1.2 optionalDependencies: magicast: 0.3.5 @@ -8885,6 +9738,8 @@ snapshots: call-bind-apply-helpers: 1.0.1 get-intrinsic: 1.2.7 + callsite@1.0.0: {} + callsites@3.1.0: {} camel-case@4.1.2: @@ -8932,8 +9787,6 @@ snapshots: snake-case: 3.0.4 tslib: 2.8.1 - change-case@5.4.4: {} - character-entities@2.0.2: {} check-error@2.1.1: {} @@ -8952,7 +9805,7 @@ snapshots: citty@0.1.6: dependencies: - consola: 3.4.0 + consola: 3.4.2 clean-regexp@1.0.0: dependencies: @@ -8981,20 +9834,43 @@ snapshots: cluster-key-slot@1.1.2: {} + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} - colorette@1.4.0: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 colorette@2.0.20: {} + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + commander@10.0.1: {} + + commander@12.1.0: {} + commander@13.1.0: {} commander@2.20.3: {} @@ -9003,6 +9879,8 @@ snapshots: comment-parser@1.4.1: {} + common-path-prefix@3.0.0: {} + common-tags@1.8.2: {} commondir@1.0.1: {} @@ -9012,7 +9890,7 @@ snapshots: array-ify: 1.0.0 dot-prop: 5.3.0 - compatx@0.1.8: {} + compatx@0.2.0: {} compress-commons@6.0.2: dependencies: @@ -9036,8 +9914,12 @@ snapshots: confbox@0.1.8: {} + confbox@0.2.2: {} + consola@3.4.0: {} + consola@3.4.2: {} + constant-case@3.0.4: dependencies: no-case: 3.0.4 @@ -9063,8 +9945,15 @@ snapshots: cookie-es@1.2.2: {} + cookie-es@2.0.0: {} + cookie@1.0.2: {} + copy-file@11.0.0: + dependencies: + graceful-fs: 4.2.11 + p-event: 6.0.1 + core-js-compat@3.40.0: dependencies: browserslist: 4.24.4 @@ -9100,8 +9989,14 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.7.0 + cron-parser@4.9.0: + dependencies: + luxon: 3.6.1 + croner@9.0.0: {} + croner@9.1.0: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -9112,12 +10007,18 @@ snapshots: dependencies: uncrypto: 0.1.3 + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + cssesc@3.0.0: {} damerau-levenshtein@1.0.8: {} dargs@8.1.0: {} + data-uri-to-buffer@4.0.1: {} + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.3 @@ -9136,24 +10037,22 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - db0@0.3.1(better-sqlite3@11.8.1)(mysql2@3.12.0): + db0@0.3.2(better-sqlite3@11.8.1)(mysql2@3.12.0): optionalDependencies: better-sqlite3: 11.8.1 mysql2: 3.12.0 - debug@2.6.9: - dependencies: - ms: 2.0.0 - debug@3.2.7: dependencies: ms: 2.1.3 - debug@4.4.0(supports-color@9.4.0): + debug@4.4.0: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 9.4.0 + + decache@4.6.2: + dependencies: + callsite: 1.0.0 decode-named-character-reference@1.0.2: dependencies: @@ -9195,14 +10094,68 @@ snapshots: dequal@2.0.3: {} - destr@2.0.3: {} - - destroy@1.2.0: {} + destr@2.0.5: {} detect-libc@1.0.3: {} detect-libc@2.0.3: {} + detective-amd@6.0.1: + dependencies: + ast-module-types: 6.0.1 + escodegen: 2.1.0 + get-amd-module-type: 6.0.1 + node-source-walk: 7.0.1 + + detective-cjs@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + detective-es6@5.0.1: + dependencies: + node-source-walk: 7.0.1 + + detective-postcss@7.0.1(postcss@8.5.1): + dependencies: + is-url: 1.2.4 + postcss: 8.5.1 + postcss-values-parser: 6.0.2(postcss@8.5.1) + + detective-sass@6.0.1: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + detective-scss@5.0.1: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + detective-stylus@5.0.1: {} + + detective-typescript@14.0.0(typescript@5.7.3): + dependencies: + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.7.3) + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + detective-vue2@2.2.0(typescript@5.7.3): + dependencies: + '@dependents/detective-less': 5.0.1 + '@vue/compiler-sfc': 3.5.17 + detective-es6: 5.0.1 + detective-sass: 6.0.1 + detective-scss: 5.0.1 + detective-stylus: 5.0.1 + detective-typescript: 14.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + devlop@1.1.0: dependencies: dequal: 2.0.3 @@ -9217,7 +10170,7 @@ snapshots: docker-modem@3.0.8: dependencies: - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 readable-stream: 3.6.2 split-ca: 1.0.1 ssh2: 1.16.0 @@ -9260,6 +10213,8 @@ snapshots: dotenv@16.4.7: {} + dotenv@16.5.0: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.1 @@ -9291,7 +10246,7 @@ snapshots: emoji-regex@9.2.2: {} - encodeurl@1.0.2: {} + enabled@2.0.0: {} encodeurl@2.0.0: {} @@ -9308,13 +10263,15 @@ snapshots: env-paths@2.2.1: {} + env-paths@3.0.0: {} + environment@1.1.0: {} error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - error-stack-parser-es@0.1.5: {} + error-stack-parser-es@1.0.5: {} es-abstract@1.23.9: dependencies: @@ -9471,6 +10428,35 @@ snapshots: '@esbuild/win32-arm64': 0.25.0 '@esbuild/win32-ia32': 0.25.0 '@esbuild/win32-x64': 0.25.0 + optional: true + + esbuild@0.25.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.5 + '@esbuild/android-arm': 0.25.5 + '@esbuild/android-arm64': 0.25.5 + '@esbuild/android-x64': 0.25.5 + '@esbuild/darwin-arm64': 0.25.5 + '@esbuild/darwin-x64': 0.25.5 + '@esbuild/freebsd-arm64': 0.25.5 + '@esbuild/freebsd-x64': 0.25.5 + '@esbuild/linux-arm': 0.25.5 + '@esbuild/linux-arm64': 0.25.5 + '@esbuild/linux-ia32': 0.25.5 + '@esbuild/linux-loong64': 0.25.5 + '@esbuild/linux-mips64el': 0.25.5 + '@esbuild/linux-ppc64': 0.25.5 + '@esbuild/linux-riscv64': 0.25.5 + '@esbuild/linux-s390x': 0.25.5 + '@esbuild/linux-x64': 0.25.5 + '@esbuild/netbsd-arm64': 0.25.5 + '@esbuild/netbsd-x64': 0.25.5 + '@esbuild/openbsd-arm64': 0.25.5 + '@esbuild/openbsd-x64': 0.25.5 + '@esbuild/sunos-x64': 0.25.5 + '@esbuild/win32-arm64': 0.25.5 + '@esbuild/win32-ia32': 0.25.5 + '@esbuild/win32-x64': 0.25.5 escalade@3.2.0: {} @@ -9482,6 +10468,14 @@ snapshots: escape-string-regexp@5.0.0: {} + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + eslint-compat-utils@0.5.1(eslint@9.19.0(jiti@2.4.2)): dependencies: eslint: 9.19.0(jiti@2.4.2) @@ -9648,7 +10642,7 @@ snapshots: '@types/doctrine': 0.0.9 '@typescript-eslint/scope-manager': 8.22.0 '@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 doctrine: 3.0.0 enhanced-resolve: 5.18.0 eslint: 9.19.0(jiti@2.4.2) @@ -9730,7 +10724,7 @@ snapshots: '@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.19.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) transitivePeerDependencies: - supports-color - typescript @@ -9740,7 +10734,7 @@ snapshots: '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 escape-string-regexp: 4.0.0 eslint: 9.19.0(jiti@2.4.2) espree: 10.3.0 @@ -9886,7 +10880,7 @@ snapshots: eslint-plugin-toml@0.12.0(eslint@9.19.0(jiti@2.4.2)): dependencies: - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 eslint: 9.19.0(jiti@2.4.2) eslint-compat-utils: 0.6.4(eslint@9.19.0(jiti@2.4.2)) lodash: 4.17.21 @@ -9936,7 +10930,7 @@ snapshots: eslint-plugin-yml@1.16.0(eslint@9.19.0(jiti@2.4.2)): dependencies: - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 eslint: 9.19.0(jiti@2.4.2) eslint-compat-utils: 0.6.4(eslint@9.19.0(jiti@2.4.2)) lodash: 4.17.21 @@ -9945,9 +10939,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@1.0.0(@vue/compiler-sfc@3.5.12)(eslint@9.19.0(jiti@2.4.2)): + eslint-processor-vue-blocks@1.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.19.0(jiti@2.4.2)): dependencies: - '@vue/compiler-sfc': 3.5.12 + '@vue/compiler-sfc': 3.5.17 eslint: 9.19.0(jiti@2.4.2) eslint-rule-composer@0.3.0: {} @@ -9981,6 +10975,8 @@ snapshots: eslint-visitor-keys@4.2.0: {} + eslint-visitor-keys@4.2.1: {} + eslint@9.19.0(jiti@2.4.2): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.2)) @@ -9998,7 +10994,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 eslint-visitor-keys: 4.2.0 @@ -10034,6 +11030,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 + esprima@4.0.1: {} + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -10115,10 +11113,20 @@ snapshots: expect-type@1.1.0: {} - exsolve@1.0.1: {} + exsolve@1.0.7: {} extend@3.0.2: {} + extract-zip@2.0.1: + dependencies: + debug: 4.4.0 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -10151,10 +11159,25 @@ snapshots: dependencies: reusify: 1.0.4 + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + fdir@6.4.3(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 + fdir@6.4.6(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fecha@4.2.3: {} + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + fflate@0.8.2: {} figures@6.1.0: @@ -10171,6 +11194,8 @@ snapshots: dependencies: to-regex-range: 5.0.1 + filter-obj@6.1.0: {} + find-up-simple@1.0.0: {} find-up@4.1.0: @@ -10196,9 +11221,11 @@ snapshots: flatted@3.3.2: {} + fn.name@1.1.0: {} + follow-redirects@1.15.9(debug@4.4.0): optionalDependencies: - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 for-each@0.3.4: dependencies: @@ -10222,18 +11249,16 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 - fresh@0.5.2: {} + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + fresh@2.0.0: {} from@0.1.7: {} fs-constants@1.0.0: {} - fs-extra@11.3.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -10255,7 +11280,7 @@ snapshots: gaxios@6.7.1: dependencies: extend: 3.0.2 - https-proxy-agent: 7.0.6(supports-color@9.4.0) + https-proxy-agent: 7.0.6 is-stream: 2.0.1 node-fetch: 2.7.0 uuid: 9.0.1 @@ -10278,6 +11303,11 @@ snapshots: gensync@1.0.0-beta.2: {} + get-amd-module-type@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + get-caller-file@2.0.5: {} get-east-asian-width@1.3.0: {} @@ -10304,6 +11334,10 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + get-stream@6.0.1: {} get-stream@8.0.1: {} @@ -10326,7 +11360,7 @@ snapshots: giget@2.0.0: dependencies: citty: 0.1.6 - consola: 3.4.0 + consola: 3.4.2 defu: 6.1.4 node-fetch-native: 1.6.6 nypm: 0.6.0 @@ -10403,6 +11437,10 @@ snapshots: slash: 5.1.0 unicorn-magic: 0.3.0 + gonzales-pe@4.3.0: + dependencies: + minimist: 1.2.8 + google-auth-library@9.15.1: dependencies: base64-js: 1.5.1 @@ -10435,28 +11473,16 @@ snapshots: dependencies: duplexer: 0.1.2 - h3-nightly@1.15.1-20250222-111608-d1c00fc: - dependencies: - cookie-es: 1.2.2 - crossws: 0.3.4 - defu: 6.1.4 - destr: 2.0.3 - iron-webcrypto: 1.2.1 - node-mock-http: 1.0.0 - radix3: 1.1.2 - ufo: 1.5.4 - uncrypto: 0.1.3 - - h3@1.15.1: + h3@1.15.3: dependencies: cookie-es: 1.2.2 crossws: 0.3.4 defu: 6.1.4 - destr: 2.0.3 + destr: 2.0.5 iron-webcrypto: 1.2.1 node-mock-http: 1.0.0 radix3: 1.1.2 - ufo: 1.5.4 + ufo: 1.6.1 uncrypto: 0.1.3 has-bigints@1.1.0: {} @@ -10490,6 +11516,10 @@ snapshots: hosted-git-info@2.8.9: {} + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + html-entities@2.5.2: {} http-errors@2.0.0: @@ -10504,14 +11534,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -10520,14 +11550,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6(supports-color@9.4.0): + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -10581,11 +11611,11 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 - ioredis@5.5.0: + ioredis@5.6.1: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -10605,6 +11635,8 @@ snapshots: is-arrayish@0.2.1: {} + is-arrayish@0.3.2: {} + is-async-function@2.1.1: dependencies: async-function: 1.0.0 @@ -10689,6 +11721,10 @@ snapshots: is-obj@2.0.0: {} + is-path-inside@4.0.0: {} + + is-plain-obj@2.1.0: {} + is-plain-obj@4.1.0: {} is-property@1.0.2: {} @@ -10737,6 +11773,10 @@ snapshots: is-unicode-supported@2.1.0: {} + is-url-superb@4.0.0: {} + + is-url@1.2.4: {} + is-weakmap@2.0.2: {} is-weakref@1.1.0: @@ -10791,8 +11831,6 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 - js-levenshtein@1.1.6: {} - js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -10834,12 +11872,6 @@ snapshots: espree: 9.6.1 semver: 7.7.0 - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - jsonparse@1.3.1: {} jsx-ast-utils@3.3.5: @@ -10849,6 +11881,8 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 + junk@4.0.1: {} + jwa@2.0.0: dependencies: buffer-equal-constant-time: 1.0.1 @@ -10860,6 +11894,8 @@ snapshots: jwa: 2.0.0 safe-buffer: 5.2.1 + jwt-decode@4.0.0: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -10870,10 +11906,18 @@ snapshots: knitwork@1.2.0: {} + kuler@2.0.0: {} + ky@1.7.4: {} kysely@0.27.5: {} + lambda-local@2.2.0: + dependencies: + commander: 10.0.1 + dotenv: 16.4.7 + winston: 3.17.0 + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -10899,7 +11943,7 @@ snapshots: dependencies: chalk: 5.4.1 commander: 13.1.0 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 execa: 8.0.1 lilconfig: 3.1.3 listr2: 8.2.5 @@ -10916,18 +11960,18 @@ snapshots: '@parcel/watcher-wasm': 2.5.1 citty: 0.1.6 clipboardy: 4.0.0 - consola: 3.4.0 - crossws: 0.3.4 + consola: 3.4.2 + crossws: 0.3.5 defu: 6.1.4 get-port-please: 3.1.2 - h3: 1.15.1 + h3: 1.15.3 http-shutdown: 1.2.2 jiti: 2.4.2 mlly: 1.7.4 node-forge: 1.3.1 pathe: 1.1.2 - std-env: 3.8.0 - ufo: 1.5.4 + std-env: 3.9.0 + ufo: 1.6.1 untun: 0.1.3 uqr: 0.1.2 @@ -10945,6 +11989,12 @@ snapshots: mlly: 1.7.4 pkg-types: 1.3.1 + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.1.1 + quansync: 0.2.10 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -10957,8 +12007,12 @@ snapshots: dependencies: p-locate: 6.0.0 + lodash-es@4.17.21: {} + lodash.camelcase@4.3.0: {} + lodash.debounce@4.0.8: {} + lodash.defaults@4.2.0: {} lodash.isarguments@3.1.0: {} @@ -10991,6 +12045,15 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 9.0.0 + logform@2.7.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 + long@5.2.4: {} longest-streak@3.1.0: {} @@ -11015,6 +12078,8 @@ snapshots: lru.min@1.1.1: {} + luxon@3.6.1: {} + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -11135,10 +12200,16 @@ snapshots: meow@12.1.1: {} + merge-options@3.0.4: + dependencies: + is-plain-obj: 2.1.0 + merge-stream@2.0.0: {} merge2@1.4.1: {} + micro-api-client@3.3.0: {} + micromark-core-commonmark@2.0.2: dependencies: decode-named-character-reference: 1.0.2 @@ -11311,7 +12382,7 @@ snapshots: micromark@4.0.1: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.2 @@ -11337,15 +12408,19 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - mime@1.6.0: {} + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 mime@3.0.0: {} - mime@4.0.6: {} + mime@4.0.7: {} mimic-fn@2.1.0: {} @@ -11391,9 +12466,12 @@ snapshots: pkg-types: 1.3.1 ufo: 1.5.4 - mrmime@2.0.0: {} + module-definition@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 - ms@2.0.0: {} + mrmime@2.0.0: {} ms@2.1.3: {} @@ -11416,6 +12494,8 @@ snapshots: nan@2.22.0: optional: true + nanoid@3.3.11: {} + nanoid@3.3.8: {} napi-build-utils@2.0.0: {} @@ -11424,82 +12504,88 @@ snapshots: natural-orderby@5.0.0: {} - nitropack-nightly@2.11.0-20250301-231416.f56ead19(@azure/storage-blob@12.26.0)(better-sqlite3@11.8.1)(mysql2@3.12.0)(typescript@5.7.3): - dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@netlify/functions': 3.0.0 - '@rollup/plugin-alias': 5.1.1(rollup@4.34.9) - '@rollup/plugin-commonjs': 28.0.2(rollup@4.34.9) - '@rollup/plugin-inject': 5.0.5(rollup@4.34.9) - '@rollup/plugin-json': 6.1.0(rollup@4.34.9) - '@rollup/plugin-node-resolve': 16.0.0(rollup@4.34.9) - '@rollup/plugin-replace': 6.0.2(rollup@4.34.9) - '@rollup/plugin-terser': 0.4.4(rollup@4.34.9) - '@types/http-proxy': 1.17.16 - '@vercel/nft': 0.29.2(rollup@4.34.9) + netlify@13.3.5: + dependencies: + '@netlify/open-api': 2.37.0 + lodash-es: 4.17.21 + micro-api-client: 3.3.0 + node-fetch: 3.3.2 + p-wait-for: 5.0.2 + qs: 6.14.0 + + nitropack@2.11.13(@azure/storage-blob@12.26.0)(better-sqlite3@11.8.1)(mysql2@3.12.0): + dependencies: + '@cloudflare/kv-asset-handler': 0.4.0 + '@netlify/functions': 3.1.10(rollup@4.44.1) + '@rollup/plugin-alias': 5.1.1(rollup@4.44.1) + '@rollup/plugin-commonjs': 28.0.6(rollup@4.44.1) + '@rollup/plugin-inject': 5.0.5(rollup@4.44.1) + '@rollup/plugin-json': 6.1.0(rollup@4.44.1) + '@rollup/plugin-node-resolve': 16.0.1(rollup@4.44.1) + '@rollup/plugin-replace': 6.0.2(rollup@4.44.1) + '@rollup/plugin-terser': 0.4.4(rollup@4.44.1) + '@vercel/nft': 0.29.4(rollup@4.44.1) archiver: 7.0.1 - c12: 3.0.2(magicast@0.3.5) + c12: 3.0.4(magicast@0.3.5) chokidar: 4.0.3 citty: 0.1.6 - compatx: 0.1.8 - confbox: 0.1.8 - consola: 3.4.0 - cookie-es: 1.2.2 - croner: 9.0.0 - crossws: 0.3.4 - db0: 0.3.1(better-sqlite3@11.8.1)(mysql2@3.12.0) + compatx: 0.2.0 + confbox: 0.2.2 + consola: 3.4.2 + cookie-es: 2.0.0 + croner: 9.1.0 + crossws: 0.3.5 + db0: 0.3.2(better-sqlite3@11.8.1)(mysql2@3.12.0) defu: 6.1.4 - destr: 2.0.3 + destr: 2.0.5 dot-prop: 9.0.0 - esbuild: 0.25.0 + esbuild: 0.25.5 escape-string-regexp: 5.0.0 etag: 1.8.1 - exsolve: 1.0.1 - fs-extra: 11.3.0 + exsolve: 1.0.7 globby: 14.1.0 gzip-size: 7.0.0 - h3: h3-nightly@1.15.1-20250222-111608-d1c00fc + h3: 1.15.3 hookable: 5.5.3 httpxy: 0.1.7 - ioredis: 5.5.0 + ioredis: 5.6.1 jiti: 2.4.2 klona: 2.0.6 knitwork: 1.2.0 listhen: 1.9.0 magic-string: 0.30.17 magicast: 0.3.5 - mime: 4.0.6 + mime: 4.0.7 mlly: 1.7.4 node-fetch-native: 1.6.6 - node-mock-http: 1.0.0 + node-mock-http: 1.0.1 ofetch: 1.4.1 - ohash: 2.0.9 - openapi-typescript: 7.6.1(typescript@5.7.3) + ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 1.0.0 - pkg-types: 2.0.1 + pkg-types: 2.1.1 pretty-bytes: 6.1.1 radix3: 1.1.2 - rollup: 4.34.9 - rollup-plugin-visualizer: 5.14.0(rollup@4.34.9) + rollup: 4.44.1 + rollup-plugin-visualizer: 6.0.3(rollup@4.44.1) scule: 1.3.0 - semver: 7.7.1 + semver: 7.7.2 serve-placeholder: 2.0.2 - serve-static: 1.16.2 + serve-static: 2.2.0 source-map: 0.7.4 - std-env: 3.8.0 - ufo: 1.5.4 - ultrahtml: 1.5.3 + std-env: 3.9.0 + ufo: 1.6.1 + ultrahtml: 1.6.0 uncrypto: 0.1.3 unctx: 2.4.1 - unenv: 2.0.0-rc.9 - unimport: 4.1.2 + unenv: 2.0.0-rc.18 + unimport: 5.0.1 unplugin-utils: 0.2.4 - unstorage: 1.15.0(@azure/storage-blob@12.26.0)(db0@0.3.1(better-sqlite3@11.8.1)(mysql2@3.12.0))(ioredis@5.5.0) + unstorage: 1.16.0(@azure/storage-blob@12.26.0)(db0@0.3.2(better-sqlite3@11.8.1)(mysql2@3.12.0))(ioredis@5.6.1) untyped: 2.0.0 unwasm: 0.3.9 - youch: 4.1.0-beta.4 - youch-core: 0.3.1 + youch: 4.1.0-beta.8 + youch-core: 0.3.2 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11525,7 +12611,6 @@ snapshots: - rolldown - sqlite3 - supports-color - - typescript - uploadthing no-case@3.0.4: @@ -11539,20 +12624,34 @@ snapshots: node-addon-api@7.1.1: {} + node-domexception@1.0.0: {} + node-fetch-native@1.6.6: {} node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + node-forge@1.3.1: {} node-gyp-build@4.8.4: {} node-mock-http@1.0.0: {} + node-mock-http@1.0.1: {} + node-releases@2.0.19: {} + node-source-walk@7.0.1: + dependencies: + '@babel/parser': 7.26.7 + nopt@8.1.0: dependencies: abbrev: 3.0.0 @@ -11564,6 +12663,16 @@ snapshots: semver: 5.7.2 validate-npm-package-license: 3.0.4 + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + + normalize-path@2.1.1: + dependencies: + remove-trailing-separator: 1.1.0 + normalize-path@3.0.0: {} npm-run-path@4.0.1: @@ -11586,9 +12695,9 @@ snapshots: nypm@0.6.0: dependencies: citty: 0.1.6 - consola: 3.4.0 + consola: 3.4.2 pathe: 2.0.3 - pkg-types: 2.0.1 + pkg-types: 2.1.1 tinyexec: 0.3.2 object-assign@4.1.1: {} @@ -11636,11 +12745,11 @@ snapshots: ofetch@1.4.1: dependencies: - destr: 2.0.3 + destr: 2.0.5 node-fetch-native: 1.6.6 - ufo: 1.5.4 + ufo: 1.6.1 - ohash@2.0.9: {} + ohash@2.0.11: {} on-finished@2.4.1: dependencies: @@ -11650,6 +12759,10 @@ snapshots: dependencies: wrappy: 1.0.2 + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -11668,16 +12781,6 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openapi-typescript@7.6.1(typescript@5.7.3): - dependencies: - '@redocly/openapi-core': 1.28.0(supports-color@9.4.0) - ansi-colors: 4.1.3 - change-case: 5.4.4 - parse-json: 8.1.0 - supports-color: 9.4.0 - typescript: 5.7.3 - yargs-parser: 21.1.1 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -11693,6 +12796,10 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + p-event@6.0.1: + dependencies: + p-timeout: 6.1.4 + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -11717,8 +12824,16 @@ snapshots: dependencies: p-limit: 4.0.0 + p-map@7.0.3: {} + + p-timeout@6.1.4: {} + p-try@2.2.0: {} + p-wait-for@5.0.2: + dependencies: + p-timeout: 6.1.4 + package-json-from-dist@1.0.1: {} package-manager-detector@0.2.9: {} @@ -11801,6 +12916,8 @@ snapshots: dependencies: through: 2.3.8 + pend@1.2.0: {} + perfect-debounce@1.0.0: {} pg-cloudflare@1.1.1: @@ -11868,10 +12985,10 @@ snapshots: mlly: 1.7.4 pathe: 2.0.2 - pkg-types@2.0.1: + pkg-types@2.1.1: dependencies: - confbox: 0.1.8 - exsolve: 1.0.1 + confbox: 0.2.2 + exsolve: 1.0.7 pathe: 2.0.3 pluralize@8.0.0: {} @@ -11883,12 +13000,25 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-values-parser@6.0.2(postcss@8.5.1): + dependencies: + color-name: 1.1.4 + is-url-superb: 4.0.0 + postcss: 8.5.1 + quote-unquote: 1.0.0 + postcss@8.5.1: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postgres-array@2.0.0: {} postgres-array@3.0.2: {} @@ -11926,6 +13056,26 @@ snapshots: tar-fs: 2.1.2 tunnel-agent: 0.6.0 + precinct@12.2.0: + dependencies: + '@dependents/detective-less': 5.0.1 + commander: 12.1.0 + detective-amd: 6.0.1 + detective-cjs: 6.0.1 + detective-es6: 5.0.1 + detective-postcss: 7.0.1(postcss@8.5.1) + detective-sass: 6.0.1 + detective-scss: 5.0.1 + detective-stylus: 5.0.1 + detective-typescript: 14.0.0(typescript@5.7.3) + detective-vue2: 2.2.0(typescript@5.7.3) + module-definition: 6.0.1 + node-source-walk: 7.0.1 + postcss: 8.5.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.0: @@ -11979,8 +13129,16 @@ snapshots: punycode@2.3.1: {} + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.10: {} + queue-microtask@1.2.3: {} + quote-unquote@1.0.0: {} + radix3@1.1.2: {} randombytes@2.1.0: @@ -11992,7 +13150,7 @@ snapshots: rc9@2.1.2: dependencies: defu: 6.1.4 - destr: 2.0.3 + destr: 2.0.5 rc@1.2.8: dependencies: @@ -12003,6 +13161,12 @@ snapshots: react-is@16.13.1: {} + read-package-up@11.0.0: + dependencies: + find-up-simple: 1.0.0 + read-pkg: 9.0.1 + type-fest: 4.36.0 + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 @@ -12016,6 +13180,14 @@ snapshots: parse-json: 5.2.0 type-fest: 0.6.0 + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.1.0 + type-fest: 4.36.0 + unicorn-magic: 0.1.0 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -12093,10 +13265,14 @@ snapshots: dependencies: type-fest: 4.36.0 + remove-trailing-separator@1.1.0: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} + require-package-name@2.0.1: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -12141,14 +13317,14 @@ snapshots: dependencies: glob: 10.4.5 - rollup-plugin-visualizer@5.14.0(rollup@4.34.9): + rollup-plugin-visualizer@6.0.3(rollup@4.44.1): dependencies: open: 8.4.2 picomatch: 4.0.2 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.34.9 + rollup: 4.44.1 rollup@4.34.0: dependencies: @@ -12175,29 +13351,30 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.0 fsevents: 2.3.3 - rollup@4.34.9: + rollup@4.44.1: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.9 - '@rollup/rollup-android-arm64': 4.34.9 - '@rollup/rollup-darwin-arm64': 4.34.9 - '@rollup/rollup-darwin-x64': 4.34.9 - '@rollup/rollup-freebsd-arm64': 4.34.9 - '@rollup/rollup-freebsd-x64': 4.34.9 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 - '@rollup/rollup-linux-arm-musleabihf': 4.34.9 - '@rollup/rollup-linux-arm64-gnu': 4.34.9 - '@rollup/rollup-linux-arm64-musl': 4.34.9 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 - '@rollup/rollup-linux-riscv64-gnu': 4.34.9 - '@rollup/rollup-linux-s390x-gnu': 4.34.9 - '@rollup/rollup-linux-x64-gnu': 4.34.9 - '@rollup/rollup-linux-x64-musl': 4.34.9 - '@rollup/rollup-win32-arm64-msvc': 4.34.9 - '@rollup/rollup-win32-ia32-msvc': 4.34.9 - '@rollup/rollup-win32-x64-msvc': 4.34.9 + '@rollup/rollup-android-arm-eabi': 4.44.1 + '@rollup/rollup-android-arm64': 4.44.1 + '@rollup/rollup-darwin-arm64': 4.44.1 + '@rollup/rollup-darwin-x64': 4.44.1 + '@rollup/rollup-freebsd-arm64': 4.44.1 + '@rollup/rollup-freebsd-x64': 4.44.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.1 + '@rollup/rollup-linux-arm-musleabihf': 4.44.1 + '@rollup/rollup-linux-arm64-gnu': 4.44.1 + '@rollup/rollup-linux-arm64-musl': 4.44.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-musl': 4.44.1 + '@rollup/rollup-linux-s390x-gnu': 4.44.1 + '@rollup/rollup-linux-x64-gnu': 4.44.1 + '@rollup/rollup-linux-x64-musl': 4.44.1 + '@rollup/rollup-win32-arm64-msvc': 4.44.1 + '@rollup/rollup-win32-ia32-msvc': 4.44.1 + '@rollup/rollup-win32-x64-msvc': 4.44.1 fsevents: 2.3.3 run-parallel@1.2.0: @@ -12231,6 +13408,8 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 + safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} sax@1.4.1: {} @@ -12249,19 +13428,17 @@ snapshots: semver@7.7.0: {} - semver@7.7.1: {} + semver@7.7.2: {} - send@0.19.0: + send@1.2.0: dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 + debug: 4.4.0 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - fresh: 0.5.2 + fresh: 2.0.0 http-errors: 2.0.0 - mime: 1.6.0 + mime-types: 3.0.1 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 @@ -12285,12 +13462,12 @@ snapshots: dependencies: defu: 6.1.4 - serve-static@1.16.2: + serve-static@2.2.0: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.0 + send: 1.2.0 transitivePeerDependencies: - supports-color @@ -12368,6 +13545,10 @@ snapshots: once: 1.4.0 simple-concat: 1.0.1 + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + sirv@3.0.0: dependencies: '@polka/url': 1.0.0-next.28 @@ -12454,6 +13635,8 @@ snapshots: stable-hash@0.0.4: {} + stack-trace@0.0.10: {} + stackback@0.0.2: {} standard-as-callback@2.1.0: {} @@ -12463,7 +13646,7 @@ snapshots: arg: 5.0.2 bluebird: 3.7.2 check-more-types: 2.24.0 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 execa: 5.1.1 lazy-ass: 1.6.0 ps-tree: 1.2.0 @@ -12475,6 +13658,8 @@ snapshots: std-env@3.8.0: {} + std-env@3.9.0: {} + stream-combiner@0.0.4: dependencies: duplexer: 0.1.2 @@ -12612,8 +13797,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-color@9.4.0: {} - supports-preserve-symlinks-flag@1.0.0: {} svg-element-attributes@1.3.1: {} @@ -12703,7 +13886,7 @@ snapshots: archiver: 7.0.1 async-lock: 1.4.1 byline: 5.0.0 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 docker-compose: 0.24.8 dockerode: 3.3.5 get-port: 5.1.1 @@ -12723,6 +13906,8 @@ snapshots: text-extensions@2.4.0: {} + text-hex@1.0.0: {} + through@2.3.8: {} tinybench@2.9.0: {} @@ -12734,9 +13919,9 @@ snapshots: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 - tinyglobby@0.2.12: + tinyglobby@0.2.14: dependencies: - fdir: 6.4.3(picomatch@4.0.2) + fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 tinypool@1.0.2: {} @@ -12745,6 +13930,10 @@ snapshots: tinyspy@3.0.2: {} + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.3 + tmp@0.2.3: {} to-regex-range@5.0.1: @@ -12757,12 +13946,16 @@ snapshots: dependencies: eslint-visitor-keys: 3.4.3 + toml@3.0.0: {} + totalist@3.0.1: {} tr46@0.0.3: {} tree-kill@1.2.2: {} + triple-beam@1.4.1: {} + ts-api-utils@1.4.3(typescript@5.7.3): dependencies: typescript: 5.7.3 @@ -12771,6 +13964,10 @@ snapshots: dependencies: typescript: 5.7.3 + ts-api-utils@2.1.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + ts-pattern@5.6.2: {} ts-poet@4.15.0: @@ -12877,7 +14074,9 @@ snapshots: ufo@1.5.4: {} - ultrahtml@1.5.3: {} + ufo@1.6.1: {} + + ultrahtml@1.6.0: {} unbox-primitive@1.1.0: dependencies: @@ -12893,7 +14092,7 @@ snapshots: acorn: 8.14.0 estree-walker: 3.0.3 magic-string: 0.30.17 - unplugin: 2.1.2 + unplugin: 2.2.0 undici-types@5.26.5: {} @@ -12903,33 +14102,33 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 - unenv@2.0.0-rc.9: + unenv@2.0.0-rc.18: dependencies: defu: 6.1.4 - exsolve: 1.0.1 - ohash: 2.0.9 + exsolve: 1.0.7 + ohash: 2.0.11 pathe: 2.0.3 - ufo: 1.5.4 + ufo: 1.6.1 unicorn-magic@0.1.0: {} unicorn-magic@0.3.0: {} - unimport@4.1.2: + unimport@5.0.1: dependencies: - acorn: 8.14.0 + acorn: 8.15.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 - local-pkg: 1.0.0 + local-pkg: 1.1.1 magic-string: 0.30.17 mlly: 1.7.4 pathe: 2.0.3 picomatch: 4.0.2 - pkg-types: 1.3.1 + pkg-types: 2.1.1 scule: 1.3.0 strip-literal: 3.0.0 - tinyglobby: 0.2.12 - unplugin: 2.2.0 + tinyglobby: 0.2.14 + unplugin: 2.3.5 unplugin-utils: 0.2.4 unist-util-is@6.0.0: @@ -12951,7 +14150,9 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - universalify@2.0.1: {} + unixify@1.0.0: + dependencies: + normalize-path: 2.1.1 unplugin-utils@0.2.4: dependencies: @@ -12963,35 +14164,36 @@ snapshots: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 - unplugin@2.1.2: + unplugin@2.2.0: dependencies: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 - unplugin@2.2.0: + unplugin@2.3.5: dependencies: - acorn: 8.14.0 + acorn: 8.15.0 + picomatch: 4.0.2 webpack-virtual-modules: 0.6.2 - unstorage@1.15.0(@azure/storage-blob@12.26.0)(db0@0.3.1(better-sqlite3@11.8.1)(mysql2@3.12.0))(ioredis@5.5.0): + unstorage@1.16.0(@azure/storage-blob@12.26.0)(db0@0.3.2(better-sqlite3@11.8.1)(mysql2@3.12.0))(ioredis@5.6.1): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 - destr: 2.0.3 - h3: 1.15.1 + destr: 2.0.5 + h3: 1.15.3 lru-cache: 10.4.3 node-fetch-native: 1.6.6 ofetch: 1.4.1 - ufo: 1.5.4 + ufo: 1.6.1 optionalDependencies: '@azure/storage-blob': 12.26.0 - db0: 0.3.1(better-sqlite3@11.8.1)(mysql2@3.12.0) - ioredis: 5.5.0 + db0: 0.3.2(better-sqlite3@11.8.1)(mysql2@3.12.0) + ioredis: 5.6.1 untun@0.1.3: dependencies: citty: 0.1.6 - consola: 3.4.0 + consola: 3.4.2 pathe: 1.1.2 untyped@2.0.0: @@ -13027,16 +14229,18 @@ snapshots: uqr@0.1.2: {} - uri-js-replace@1.0.1: {} - uri-js@4.4.1: dependencies: punycode: 2.3.1 + urlpattern-polyfill@10.1.0: {} + urlpattern-polyfill@8.0.2: {} util-deprecate@1.0.2: {} + uuid@11.1.0: {} + uuid@8.3.2: {} uuid@9.0.1: {} @@ -13049,7 +14253,7 @@ snapshots: vite-node@3.0.4(@types/node@22.13.0)(jiti@2.4.2)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0): dependencies: cac: 6.7.14 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.2 vite: 6.0.11(@types/node@22.13.0)(jiti@2.4.2)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0) @@ -13090,7 +14294,7 @@ snapshots: '@vitest/spy': 3.0.4 '@vitest/utils': 3.0.4 chai: 5.1.2 - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 expect-type: 1.1.0 magic-string: 0.30.17 pathe: 2.0.2 @@ -13122,7 +14326,7 @@ snapshots: vue-eslint-parser@9.4.3(eslint@9.19.0(jiti@2.4.2)): dependencies: - debug: 4.4.0(supports-color@9.4.0) + debug: 4.4.0 eslint: 9.19.0(jiti@2.4.2) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 @@ -13143,6 +14347,8 @@ snapshots: transitivePeerDependencies: - debug + web-streams-polyfill@3.3.3: {} + webidl-conversions@3.0.1: {} webpack-virtual-modules@0.6.2: {} @@ -13201,6 +14407,26 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + winston-transport@4.9.0: + dependencies: + logform: 2.7.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.17.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.6 + is-stream: 2.0.1 + logform: 2.7.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.9.0 + word-wrap@1.2.5: {} wrap-ansi@7.0.0: @@ -13223,6 +14449,11 @@ snapshots: wrappy@1.0.2: {} + write-file-atomic@6.0.0: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + xml-name-validator@4.0.0: {} xml2js@0.5.0: @@ -13240,8 +14471,6 @@ snapshots: yallist@5.0.0: {} - yaml-ast-parser@0.0.43: {} - yaml-eslint-parser@1.2.3: dependencies: eslint-visitor-keys: 3.4.3 @@ -13264,23 +14493,29 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + yocto-queue@0.1.0: {} yocto-queue@1.1.1: {} yoctocolors@2.1.1: {} - youch-core@0.3.1: + youch-core@0.3.2: dependencies: '@poppinss/exception': 1.2.0 - error-stack-parser-es: 0.1.5 + error-stack-parser-es: 1.0.5 - youch@4.1.0-beta.4: + youch@4.1.0-beta.8: dependencies: - '@poppinss/dumper': 0.6.2 + '@poppinss/colors': 4.1.4 + '@poppinss/dumper': 0.6.3 '@speed-highlight/core': 1.2.7 cookie: 1.0.2 - youch-core: 0.3.1 + youch-core: 0.3.2 zip-stream@6.0.1: dependencies: diff --git a/routes/_apis/artifactcache/cache.get.ts b/routes/_apis/artifactcache/cache.get.ts index 1e69515..7853449 100644 --- a/routes/_apis/artifactcache/cache.get.ts +++ b/routes/_apis/artifactcache/cache.get.ts @@ -21,7 +21,7 @@ export default defineEventHandler(async (event) => { const { keys, version } = parsedQuery.data const adapter = await useStorageAdapter() - const storageEntry = await adapter.getCacheEntry(keys, version) + const storageEntry = await adapter.getCacheEntry({ keys, version }) if (!storageEntry) { setResponseStatus(event, 204) diff --git a/routes/_apis/artifactcache/caches/[cacheId].post.ts b/routes/_apis/artifactcache/caches/[cacheId].post.ts index 06b762a..a4494fa 100644 --- a/routes/_apis/artifactcache/caches/[cacheId].post.ts +++ b/routes/_apis/artifactcache/caches/[cacheId].post.ts @@ -6,10 +6,6 @@ const pathParamsSchema = z.object({ cacheId: z.coerce.number(), }) -const bodySchema = z.object({ - size: z.number().positive(), -}) - export default defineEventHandler(async (event) => { const parsedPathParams = pathParamsSchema.safeParse(event.context.params) if (!parsedPathParams.success) @@ -20,16 +16,6 @@ export default defineEventHandler(async (event) => { const { cacheId } = parsedPathParams.data - const body = (await readBody(event)) as unknown - const parsedBody = bodySchema.safeParse(body) - if (!parsedBody.success) - throw createError({ - statusCode: 400, - statusMessage: `Invalid body: ${parsedBody.error.message}`, - }) - - const { size } = parsedBody.data - const adapter = await useStorageAdapter() - await adapter.commitCache(cacheId, size) + await adapter.commitCache(cacheId) }) diff --git a/routes/_apis/artifactcache/caches/index.post.ts b/routes/_apis/artifactcache/caches/index.post.ts index 12bb437..76bdb10 100644 --- a/routes/_apis/artifactcache/caches/index.post.ts +++ b/routes/_apis/artifactcache/caches/index.post.ts @@ -5,7 +5,6 @@ import { useStorageAdapter } from '~/lib/storage' const bodySchema = z.object({ key: z.string().min(1), version: z.string(), - cacheSize: z.number().positive().nullish(), }) export default defineEventHandler(async (event) => { @@ -17,8 +16,8 @@ export default defineEventHandler(async (event) => { statusMessage: `Invalid body: ${parsedBody.error.message}`, }) - const { cacheSize, key, version } = parsedBody.data + const { key, version } = parsedBody.data const adapter = await useStorageAdapter() - return adapter.reserveCache(key, version, cacheSize ?? undefined) + return adapter.reserveCache({ key, version }) }) diff --git a/routes/twirp/github.actions.results.api.v1.CacheService/CreateCacheEntry.post.ts b/routes/twirp/github.actions.results.api.v1.CacheService/CreateCacheEntry.post.ts index 6e6c438..9a99feb 100644 --- a/routes/twirp/github.actions.results.api.v1.CacheService/CreateCacheEntry.post.ts +++ b/routes/twirp/github.actions.results.api.v1.CacheService/CreateCacheEntry.post.ts @@ -19,7 +19,7 @@ export default defineEventHandler(async (event) => { const { key, version } = parsedBody.data const adapter = await useStorageAdapter() - const reservation = await adapter.reserveCache(key, version) + const reservation = await adapter.reserveCache({ key, version }) if (!reservation.cacheId) return { ok: false, diff --git a/routes/twirp/github.actions.results.api.v1.CacheService/FinalizeCacheEntryUpload.ts b/routes/twirp/github.actions.results.api.v1.CacheService/FinalizeCacheEntryUpload.ts index fee483e..060a03a 100644 --- a/routes/twirp/github.actions.results.api.v1.CacheService/FinalizeCacheEntryUpload.ts +++ b/routes/twirp/github.actions.results.api.v1.CacheService/FinalizeCacheEntryUpload.ts @@ -4,7 +4,6 @@ import { useStorageAdapter } from '~/lib/storage' const bodySchema = z.object({ key: z.string(), - size_bytes: z.coerce.number(), version: z.string(), }) @@ -16,7 +15,7 @@ export default defineEventHandler(async (event) => { statusMessage: `Invalid body: ${parsedBody.error.message}`, }) - const { key, size_bytes, version } = parsedBody.data + const { key, version } = parsedBody.data const db = await useDB() const adapter = await useStorageAdapter() @@ -27,7 +26,7 @@ export default defineEventHandler(async (event) => { statusMessage: 'Upload not found', }) - await adapter.commitCache(upload.id, size_bytes) + await adapter.commitCache(upload.id) return { ok: true, diff --git a/routes/twirp/github.actions.results.api.v1.CacheService/GetCacheEntryDownloadURL.post.ts b/routes/twirp/github.actions.results.api.v1.CacheService/GetCacheEntryDownloadURL.post.ts index 67bb6c0..d5add8f 100644 --- a/routes/twirp/github.actions.results.api.v1.CacheService/GetCacheEntryDownloadURL.post.ts +++ b/routes/twirp/github.actions.results.api.v1.CacheService/GetCacheEntryDownloadURL.post.ts @@ -17,7 +17,10 @@ export default defineEventHandler(async (event) => { const { key, restore_keys, version } = parsedBody.data const adapter = await useStorageAdapter() - const storageEntry = await adapter.getCacheEntry([key, ...(restore_keys ?? [])], version) + const storageEntry = await adapter.getCacheEntry({ + keys: [key, ...(restore_keys ?? [])], + version, + }) if (!storageEntry) return { diff --git a/tests/cleanup.test.ts b/tests/cleanup.test.ts index a1e12ce..cf21990 100644 --- a/tests/cleanup.test.ts +++ b/tests/cleanup.test.ts @@ -3,19 +3,18 @@ import { beforeEach, describe, expect, test } from 'vitest' import { findKeyMatch, findStaleKeys, - initializeDatabase, pruneKeys, touchKey, updateOrCreateKey, useDB, } from '~/lib/db' -import { initializeStorage } from '~/lib/storage' +import { useStorageAdapter } from '~/lib/storage' describe('setting last accessed date', async () => { const db = await useDB() beforeEach(async () => { - await initializeStorage() - await initializeDatabase() + await useStorageAdapter() + await useDB() await pruneKeys(db) }) diff --git a/tests/e2e.test.ts b/tests/e2e.test.ts index 3919eb0..5ba84a5 100644 --- a/tests/e2e.test.ts +++ b/tests/e2e.test.ts @@ -26,7 +26,7 @@ for (const version of versions) { delete process.env.ACTIONS_RUNTIME_TOKEN }) - for (const size of [5 * MB, 50 * MB, 500 * MB, 1024 * MB]) + for (const size of [1, 5 * MB, 50 * MB, 500 * MB, 1024 * MB]) test(`${size} Bytes`, { timeout: 90_000 }, async () => { // save const expectedContents = crypto.randomBytes(size) diff --git a/tests/key-matching.test.ts b/tests/key-matching.test.ts index fce92c6..47c3010 100644 --- a/tests/key-matching.test.ts +++ b/tests/key-matching.test.ts @@ -1,14 +1,14 @@ import { beforeEach, describe, expect, test } from 'vitest' -import { findKeyMatch, initializeDatabase, pruneKeys, updateOrCreateKey, useDB } from '~/lib/db' -import { initializeStorage } from '~/lib/storage' +import { findKeyMatch, pruneKeys, updateOrCreateKey, useDB } from '~/lib/db' +import { useStorageAdapter } from '~/lib/storage' import { sleep } from '~/tests/utils' describe('key matching', async () => { const db = await useDB() beforeEach(async () => { - await initializeStorage() - await initializeDatabase() + await useStorageAdapter() + await useDB() await pruneKeys(db) })