From 5be050811f5eea4d8305facac55561c439adfcc1 Mon Sep 17 00:00:00 2001 From: alina sireneva Date: Sat, 1 Mar 2025 13:07:55 +0300 Subject: [PATCH] chore: use vitest directly for bun and deno --- .config/deno-import-map.json | 24 + .../tests => .config}/deno-shims/node-test.js | 0 .config/deno-shims/tl-reader-compat.js | 5 + .../tests => .config}/deno-shims/tl-reader.js | 2 +- {e2e/tests => .config}/deno-shims/tl-rsa.js | 2 +- .../tests => .config}/deno-shims/tl-writer.js | 2 +- {e2e/tests => .config}/deno-shims/tl.js | 2 +- .../vite-utils/collect-test-entrypoints.ts | 27 - .config/vite-utils/package-json.js | 172 --- .config/vite-utils/polyfills-bun.ts | 30 - .config/vite-utils/polyfills-deno.ts | 59 - .config/vite-utils/polyfills.ts | 90 -- .config/vite-utils/test-setup-plugin.ts | 22 - .config/vite.browser.ts | 23 +- .config/vite.bun.ts | 101 -- .config/vite.deno.ts | 81 -- .config/vite.ts | 34 +- .forgejo/workflows/test.yaml | 19 +- e2e/deno.json | 24 +- e2e/deno.lock | 3 - e2e/tests/deno-shims/tl-reader-compat.js | 5 - package.json | 19 +- .../src/utils/crypto/miller-rabin.test.ts | 5 +- packages/test/src/crypto.ts | 4 +- pnpm-lock.yaml | 1028 ++++++++++++++++- 25 files changed, 1069 insertions(+), 714 deletions(-) create mode 100644 .config/deno-import-map.json rename {e2e/tests => .config}/deno-shims/node-test.js (100%) create mode 100644 .config/deno-shims/tl-reader-compat.js rename {e2e/tests => .config}/deno-shims/tl-reader.js (53%) rename {e2e/tests => .config}/deno-shims/tl-rsa.js (51%) rename {e2e/tests => .config}/deno-shims/tl-writer.js (53%) rename {e2e/tests => .config}/deno-shims/tl.js (57%) delete mode 100644 .config/vite-utils/collect-test-entrypoints.ts delete mode 100644 .config/vite-utils/package-json.js delete mode 100644 .config/vite-utils/polyfills-bun.ts delete mode 100644 .config/vite-utils/polyfills-deno.ts delete mode 100644 .config/vite-utils/polyfills.ts delete mode 100644 .config/vite-utils/test-setup-plugin.ts delete mode 100644 .config/vite.bun.ts delete mode 100644 .config/vite.deno.ts delete mode 100644 e2e/tests/deno-shims/tl-reader-compat.js diff --git a/.config/deno-import-map.json b/.config/deno-import-map.json new file mode 100644 index 00000000..6787a03c --- /dev/null +++ b/.config/deno-import-map.json @@ -0,0 +1,24 @@ +{ + "imports": { + "@fuman/utils": "jsr:@fuman/utils@0.0.10", + "chai": "https://esm.sh/chai@5.1.2?pin=v135", + "node:test": "./deno-shims/node-test.js", + "mtcute": "../packages/deno/src/index.ts", + "mtcute/utils.js": "../packages/deno/src/utils.ts", + "@mtcute/core": "../packages/core/src/index.ts", + "@mtcute/core/client.js": "../packages/core/src/highlevel/client.ts", + "@mtcute/core/methods.js": "../packages/core/src/highlevel/methods.ts", + "@mtcute/core/utils.js": "../packages/core/src/utils/index.ts", + "@mtcute/core/worker.js": "../packages/core/src/highlevel/worker/index.ts", + "@mtcute/markdown-parser": "../packages/markdown-parser/src/index.ts", + "@mtcute/html-parser": "../packages/html-parser/src/index.ts", + "@mtcute/file-id": "../packages/file-id/src/index.ts", + "@mtcute/tl-runtime": "../packages/tl-runtime/src/index.ts", + "@mtcute/wasm": "../packages/wasm/src/index.ts", + "@mtcute/tl": "./deno-shims/tl.js", + "@mtcute/tl/binary/rsa-keys.js": "./deno-shims/tl-rsa.js", + "@mtcute/tl/binary/reader.js": "./deno-shims/tl-reader.js", + "@mtcute/tl/compat/reader.js": "./deno-shims/tl-reader-compat.js", + "@mtcute/tl/binary/writer.js": "./deno-shims/tl-writer.js" + } +} \ No newline at end of file diff --git a/e2e/tests/deno-shims/node-test.js b/.config/deno-shims/node-test.js similarity index 100% rename from e2e/tests/deno-shims/node-test.js rename to .config/deno-shims/node-test.js diff --git a/.config/deno-shims/tl-reader-compat.js b/.config/deno-shims/tl-reader-compat.js new file mode 100644 index 00000000..4989fa5b --- /dev/null +++ b/.config/deno-shims/tl-reader-compat.js @@ -0,0 +1,5 @@ +import { createRequire } from 'node:module' + +const require = createRequire(import.meta.url) + +export const { __tlReaderMapCompat } = require('../../packages/tl/compat/reader.js') diff --git a/e2e/tests/deno-shims/tl-reader.js b/.config/deno-shims/tl-reader.js similarity index 53% rename from e2e/tests/deno-shims/tl-reader.js rename to .config/deno-shims/tl-reader.js index 3f4bd0a7..ccd67e8f 100644 --- a/e2e/tests/deno-shims/tl-reader.js +++ b/.config/deno-shims/tl-reader.js @@ -2,4 +2,4 @@ import { createRequire } from 'node:module' const require = createRequire(import.meta.url) -export const { __tlReaderMap } = require('../../../packages/tl/binary/reader.js') +export const { __tlReaderMap } = require('../../packages/tl/binary/reader.js') diff --git a/e2e/tests/deno-shims/tl-rsa.js b/.config/deno-shims/tl-rsa.js similarity index 51% rename from e2e/tests/deno-shims/tl-rsa.js rename to .config/deno-shims/tl-rsa.js index 7be0398d..425a3816 100644 --- a/e2e/tests/deno-shims/tl-rsa.js +++ b/.config/deno-shims/tl-rsa.js @@ -2,4 +2,4 @@ import { createRequire } from 'node:module' const require = createRequire(import.meta.url) -export const { __publicKeyIndex } = require('../../../packages/tl/binary/rsa-keys.js') +export const { __publicKeyIndex } = require('../../packages/tl/binary/rsa-keys.js') diff --git a/e2e/tests/deno-shims/tl-writer.js b/.config/deno-shims/tl-writer.js similarity index 53% rename from e2e/tests/deno-shims/tl-writer.js rename to .config/deno-shims/tl-writer.js index b2882e45..c0db0a46 100644 --- a/e2e/tests/deno-shims/tl-writer.js +++ b/.config/deno-shims/tl-writer.js @@ -2,4 +2,4 @@ import { createRequire } from 'node:module' const require = createRequire(import.meta.url) -export const { __tlWriterMap } = require('../../../packages/tl/binary/writer.js') +export const { __tlWriterMap } = require('../../packages/tl/binary/writer.js') diff --git a/e2e/tests/deno-shims/tl.js b/.config/deno-shims/tl.js similarity index 57% rename from e2e/tests/deno-shims/tl.js rename to .config/deno-shims/tl.js index 7d0486d4..38c3151e 100644 --- a/e2e/tests/deno-shims/tl.js +++ b/.config/deno-shims/tl.js @@ -2,4 +2,4 @@ import { createRequire } from 'node:module' const require = createRequire(import.meta.url) -export const { tl, mtp } = require('../../../packages/tl/index.js') +export const { tl, mtp } = require('../../packages/tl/index.js') diff --git a/.config/vite-utils/collect-test-entrypoints.ts b/.config/vite-utils/collect-test-entrypoints.ts deleted file mode 100644 index 33623065..00000000 --- a/.config/vite-utils/collect-test-entrypoints.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as fs from 'node:fs' -import { join, resolve } from 'node:path' - -import { globSync } from 'glob' - -export function collectTestEntrypoints(params: { skipPackages: string[], skipTests: string[] }) { - const files: string[] = [] - - const packages = resolve(__dirname, '../../packages') - - const skipTests = params.skipTests.map(path => resolve(packages, path)) - - for (const dir of fs.readdirSync(packages)) { - if (dir.startsWith('.') || params.skipPackages.includes(dir)) continue - if (!fs.statSync(resolve(packages, dir)).isDirectory()) continue - - const fullDir = resolve(packages, dir) - - for (const file of globSync(join(fullDir, '**/*.test.ts'))) { - if (skipTests.includes(file)) continue - if (file.match(/\/(node_modules|dist)\//)) continue - files.push(file) - } - } - - return files -} diff --git a/.config/vite-utils/package-json.js b/.config/vite-utils/package-json.js deleted file mode 100644 index 57a74cfc..00000000 --- a/.config/vite-utils/package-json.js +++ /dev/null @@ -1,172 +0,0 @@ -import { readFileSync } from 'node:fs' -import { resolve } from 'node:path' -import { fileURLToPath } from 'node:url' - -const rootPackageJson = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf-8')) -const packagesDir = fileURLToPath(new URL('../../packages', import.meta.url)) -const IS_JSR = process.env.JSR === '1' - -export function getPackageVersion(name) { - const json = JSON.parse(readFileSync(resolve(packagesDir, name, 'package.json'), 'utf-8')) - return json.version -} - -export function processPackageJson(packageDir) { - const packageJsonOrig = JSON.parse(readFileSync(resolve(packageDir, 'package.json'), 'utf-8')) - const packageJson = structuredClone(packageJsonOrig) - const entrypoints = {} - - // copy common fields from root - for (const field of ['license', 'author', 'contributors', 'homepage', 'repository', 'bugs']) { - if (rootPackageJson[field]) { - packageJson[field] = rootPackageJson[field] - } - } - - const newScripts = {} - - if (packageJson.keepScripts) { - for (const script of packageJson.keepScripts) { - newScripts[script] = packageJson.scripts[script] - } - delete packageJson.keepScripts - } - packageJson.scripts = newScripts - delete packageJson.devDependencies - delete packageJson.private - - if (packageJson.distOnlyFields) { - Object.assign(packageJson, packageJson.distOnlyFields) - delete packageJson.distOnlyFields - } - - if (packageJson.jsrOnlyFields) { - if (IS_JSR) { - Object.assign(packageJson, packageJson.jsrOnlyFields) - } - delete packageJson.jsrOnlyFields - } - - function replaceWorkspaceDependencies(field) { - if (!packageJson[field]) return - - const dependencies = packageJson[field] - - for (const name of Object.keys(dependencies)) { - if (name.startsWith('@fuman/')) { - delete dependencies[name] // fuman is bundled with vite for now - continue - } - - const value = dependencies[name] - - if (value.startsWith('workspace:')) { - if (value !== 'workspace:^' && value !== 'workspace:*') { - throw new Error( - `Cannot replace workspace dependency ${name} with ${value} - only workspace:^ and * are supported`, - ) - } - if (!name.startsWith('@mtcute/')) { - throw new Error(`Cannot replace workspace dependency ${name} - only @mtcute/* is supported`) - } - - // note: pnpm replaces workspace:* with the current version, unlike this script - const depVersion = value === 'workspace:*' ? '*' : `^${getPackageVersion(name.slice(8))}` - dependencies[name] = depVersion - } - } - } - - replaceWorkspaceDependencies('dependencies') - replaceWorkspaceDependencies('devDependencies') - replaceWorkspaceDependencies('peerDependencies') - replaceWorkspaceDependencies('optionalDependencies') - - delete packageJson.typedoc - - if (packageJson.browser) { - function maybeFixPath(p, repl) { - if (!p) return p - - if (p.startsWith('./src/')) { - return repl + p.slice(6) - } - - if (p.startsWith('./')) { - return repl + p.slice(2) - } - - return p - } - - for (const key of Object.keys(packageJson.browser)) { - if (!key.startsWith('./src/')) continue - - const path = key.slice(6) - packageJson.browser[`./esm/${path}`] = maybeFixPath(packageJson.browser[key], './esm/') - - delete packageJson.browser[key] - } - } - - if (packageJson.exports) { - let exports = packageJson.exports - if (typeof exports === 'string') { - exports = { '.': exports } - } - if (typeof exports !== 'object') { - throw new TypeError('package.json exports must be an object') - } - - const newExports = {} - for (const [key, value] of Object.entries(exports)) { - if (typeof value !== 'string') { - throw new TypeError(`package.json exports value must be a string: ${key}`) - } - if (value.endsWith('.wasm')) { - newExports[key] = value - continue - } - - let entrypointName = key.replace(/^\.(\/|$)/, '').replace(/\.js$/, '') - if (entrypointName === '') entrypointName = 'index' - - entrypoints[entrypointName] = value - newExports[key] = { - import: { - types: `./${entrypointName}.d.ts`, - default: `./${entrypointName}.js`, - }, - require: { - types: `./${entrypointName}.d.cts`, - default: `./${entrypointName}.cjs`, - }, - } - } - - packageJson.exports = newExports - } - - if (typeof packageJson.bin === 'object') { - const newBin = {} - for (const [key, value] of Object.entries(packageJson.bin)) { - if (typeof value !== 'string') { - throw new TypeError(`package.json bin value must be a string: ${key}`) - } - - let entrypointName = key.replace(/^\.(\/|$)/, '').replace(/\.js$/, '') - if (entrypointName === '') entrypointName = 'index' - - entrypoints[entrypointName] = value - newBin[key] = `./${entrypointName}.js` - } - - packageJson.bin = newBin - } - - return { - packageJsonOrig, - packageJson, - entrypoints, - } -} diff --git a/.config/vite-utils/polyfills-bun.ts b/.config/vite-utils/polyfills-bun.ts deleted file mode 100644 index c94942f6..00000000 --- a/.config/vite-utils/polyfills-bun.ts +++ /dev/null @@ -1,30 +0,0 @@ -import * as vitestExpect from '@vitest/expect' -import * as vitestSpy from '@vitest/spy' -import { afterAll, afterEach, beforeAll, beforeEach, vi as bunVi, it, jest } from 'bun:test' -import * as chai from 'chai' - -import { setupChai, stubGlobal, unstubAllGlobals, waitFor } from './polyfills' - -setupChai(chai, vitestExpect) - -export { afterAll, afterEach, beforeAll, beforeEach, it } -export const expect = chai.expect - -export const vi = { - ...jest, - ...bunVi, - ...vitestSpy, - mocked: fn => fn, - stubGlobal, - unstubAllGlobals, - waitFor, - ...['setSystemTime', 'advanceTimersByTimeAsync', 'advanceTimersByTime', 'doMock'].reduce( - (acc, name) => ({ - ...acc, - [name]: () => { - throw new Error(name) - }, - }), - {}, - ), -} diff --git a/.config/vite-utils/polyfills-deno.ts b/.config/vite-utils/polyfills-deno.ts deleted file mode 100644 index bbbcf29b..00000000 --- a/.config/vite-utils/polyfills-deno.ts +++ /dev/null @@ -1,59 +0,0 @@ -import util from 'node:util' - -// @ts-expect-error no typings -import { describe as _describe, afterAll, afterEach, beforeAll, beforeEach, it } from 'jsr:@std/testing/bdd' -// @ts-expect-error no typings -import * as vitestExpect from 'npm:@vitest/expect@1.4.0' -// @ts-expect-error no typings -import * as vitestSpy from 'npm:@vitest/spy@1.4.0' -// @ts-expect-error no typings -import * as chai from 'npm:chai' - -import { setupChai, stubGlobal, unstubAllGlobals, waitFor } from './polyfills' - -export { afterAll, afterEach, beforeAll, beforeEach, it } - -setupChai(chai, vitestExpect) - -// https://github.com/denoland/deno_std/issues/2213 -Object.defineProperty(it, 'each', { - // eslint-disable-next-line ts/no-unsafe-function-type - value: (items: any[][]) => (name: string, fn: Function) => { - return items.map((item) => { - return it(`${util.format(name, ...item)}`, () => fn(...item)) - }) - }, -}) - -// https://github.com/denoland/deno_std/issues/4634 -export function describe(...args) { - const fn = args.find(arg => typeof arg === 'function') - if (fn.toString().startsWith('async')) { - return - } - - return _describe(...args) -} -describe.skip = _describe.skip -describe.only = _describe.only -describe.ignore = _describe.ignore - -export const expect = chai.expect - -export const vi = { - ...vitestSpy, - mocked: (fn: any) => fn, - stubGlobal, - unstubAllGlobals, - waitFor, - // todo use @sinonjs/fake-timers (see https://github.com/vitest-dev/vitest/blob/main/packages/vitest/src/integrations/mock/timers.ts) - ...['setSystemTime', 'advanceTimersByTimeAsync', 'advanceTimersByTime', 'doMock'].reduce( - (acc, name) => ({ - ...acc, - [name]: () => { - throw new Error(name) - }, - }), - {}, - ), -} diff --git a/.config/vite-utils/polyfills.ts b/.config/vite-utils/polyfills.ts deleted file mode 100644 index 85710032..00000000 --- a/.config/vite-utils/polyfills.ts +++ /dev/null @@ -1,90 +0,0 @@ -export function setupChai(chai: any, vitestExpect: any) { - chai.use(vitestExpect.JestExtend) - chai.use(vitestExpect.JestChaiExpect) - chai.use(vitestExpect.JestAsymmetricMatchers) - chai.use((chai: any, utils: any) => { - utils.addMethod( - chai.Assertion.prototype, - 'toMatchInlineSnapshot', - function (properties?: object, inlineSnapshot?: string) { - // based on https://github.com/vitest-dev/vitest/blob/main/packages/vitest/src/integrations/snapshot/chai.ts - - const received = utils.flag(this, 'object') - if (typeof properties === 'string') { - inlineSnapshot = properties - properties = undefined - } - - if (typeof inlineSnapshot !== 'string') { - throw new TypeError('toMatchInlineSnapshot requires a string argument') - } - - // todo use @vitest/snapshot - if (typeof received === 'string') { - const snapshot = `"${received}"` - return chai.expect(snapshot).eql(inlineSnapshot.trim()) - } else { - // eslint-disable-next-line no-eval - const obj = eval(`(${inlineSnapshot})`) // idc lol - return chai.expect(received).eql(obj) - } - }, - ) - - utils.addMethod(chai.Assertion.prototype, 'toMatchSnapshot', () => { - // todo use @vitest/snapshot - }) - }) - - vitestExpect.setState( - { - assertionCalls: 0, - isExpectingAssertions: false, - isExpectingAssertionsError: null, - expectedAssertionsNumber: null, - expectedAssertionsNumberErrorGen: null, - environment: 'deno', - testPath: 'deno-test.ts', - currentTestName: 'deno-test', - }, - chai.expect, - ) - Object.defineProperty(globalThis, vitestExpect.GLOBAL_EXPECT, { - value: chai.expect, - writable: true, - configurable: true, - }) - - chai.expect.addEqualityTesters = customTesters => vitestExpect.addCustomEqualityTesters(customTesters) -} - -const stubbedGlobal = new Map() -export function stubGlobal(name: string, value: any) { - stubbedGlobal.set(name, globalThis[name]) - globalThis[name] = value -} - -export function unstubAllGlobals() { - for (const [name, value] of stubbedGlobal) { - globalThis[name] = value - } - stubbedGlobal.clear() -} - -// eslint-disable-next-line ts/no-unsafe-function-type -export async function waitFor(fn: Function) { - // less customizations than vi.waitFor but it's good enough for now - const timeout = Date.now() + 5000 - - let lastError: unknown - while (Date.now() < timeout) { - try { - return await fn() - } catch (e) { - lastError = e - await new Promise(resolve => setTimeout(resolve, 10)) - } - } - - throw lastError -} diff --git a/.config/vite-utils/test-setup-plugin.ts b/.config/vite-utils/test-setup-plugin.ts deleted file mode 100644 index 421d444c..00000000 --- a/.config/vite-utils/test-setup-plugin.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Plugin } from 'vite' - -import { fileURLToPath } from 'node:url' - -const setupFile = fileURLToPath(new URL('./test-setup.ts', import.meta.url)) - -export function testSetup(params?: { additionalCode?: string }): Plugin { - const { additionalCode = '' } = params || {} - - return { - name: 'test-setup', - async transform(code, id) { - if (!id.match(/\.test\.m?[tj]s/)) return - - return { - code: `import '${setupFile}'\n${additionalCode}${code}`, - map: null, - } - }, - apply: 'build', - } -} diff --git a/.config/vite.browser.ts b/.config/vite.browser.ts index d8a6c1d2..48c41c60 100644 --- a/.config/vite.browser.ts +++ b/.config/vite.browser.ts @@ -1,7 +1,7 @@ -/// -import { mergeConfig } from 'vite' -import { nodePolyfills } from 'vite-plugin-node-polyfills' +/// +import { nodePolyfills } from 'vite-plugin-node-polyfills' +import { mergeConfig } from 'vitest/config' import { fixupCjs } from './vite-utils/fixup-cjs' import baseConfig from './vite.js' @@ -9,9 +9,14 @@ export default mergeConfig(baseConfig, { test: { browser: { enabled: true, - name: 'chromium', provider: 'playwright', slowHijackESM: false, + headless: Boolean(process.env.CI), + instances: [ + { browser: 'chromium' }, + { browser: 'firefox' }, + { browser: 'webkit' }, + ], }, fakeTimers: { toFake: ['setTimeout', 'clearTimeout', 'setInterval', 'clearInterval', 'Date'], @@ -30,8 +35,9 @@ export default mergeConfig(baseConfig, { include: ['stream', 'path', 'zlib', 'util', 'events'], globals: { Buffer: false, - global: false, - process: false, + // for WHATEVER REASON browserify-zlib uses `global` and `process` and it dies in browser lol + global: true, + process: true, }, }), ], @@ -45,10 +51,7 @@ export default mergeConfig(baseConfig, { }, optimizeDeps: { esbuildOptions: { - // for WHATEVER REASON browserify-zlib uses `global` and it dies in browser lol - define: { - global: 'globalThis', - }, + target: 'esnext', }, }, }) diff --git a/.config/vite.bun.ts b/.config/vite.bun.ts deleted file mode 100644 index 183e89d9..00000000 --- a/.config/vite.bun.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { resolve } from 'node:path' - -import { defineConfig } from 'vite' - -import { collectTestEntrypoints } from './vite-utils/collect-test-entrypoints' -import { fixupCjs } from './vite-utils/fixup-cjs' -import { testSetup } from './vite-utils/test-setup-plugin' - -const POLYFILLS = resolve(__dirname, 'vite-utils/polyfills-bun.ts') - -export default defineConfig({ - build: { - lib: { - entry: process.env.ENTRYPOINT - ? [process.env.ENTRYPOINT] - : collectTestEntrypoints({ - // https://github.com/oven-sh/bun/issues/4145 prevents us from using vitest directly - // so we have to use bun's native test runner - skipPackages: ['create-bot'], - // bun:test doesn't support certain features of vitest, so we'll skip them for now - // https://github.com/oven-sh/bun/issues/1825 - skipTests: [ - // uses timers - 'core/src/network/config-manager.test.ts', - 'core/src/network/persistent-connection.test.ts', - // use fixtures - 'convert/src/tdesktop/tdata.test.ts', - 'convert/src/gramjs/store-session.test.ts', - ], - }), - formats: ['es'], - }, - rollupOptions: { - external: [ - /^(node|bun):.*/, - 'vitest', - ], - output: { - chunkFileNames: 'chunk-[hash].js', - entryFileNames: '[name]-[hash].test.js', - minifyInternalExports: false, - }, - treeshake: false, - }, - commonjsOptions: { - ignoreDynamicRequires: true, - }, - outDir: process.env.OUT_DIR || 'dist/tests', - emptyOutDir: true, - target: 'esnext', - minify: false, - }, - plugins: [ - fixupCjs(), - { - name: 'polyfills', - transform(code) { - if (!code.includes('vitest')) return code - code = code.replace(/^import \{([^}]+)\} from ['"]vitest['"];?$/gm, (_, names) => { - const namesParsed = names.split(',').map(name => name.trim()) - - const namesFromFixup: string[] = [] - const newNames = namesParsed - .map((name) => { - if (['expect', 'vi', 'it'].includes(name)) { - namesFromFixup.push(name) - return '' - } - return name - }) - .filter(Boolean) - - let code = `import {${newNames.join(', ')}} from 'bun:test'` - - if (namesFromFixup.length) { - code += `\nimport { ${namesFromFixup.join(', ')} } from '${POLYFILLS}'` - } - return code - }) - return code - }, - }, - { - name: 'fix-wasm-load', - async transform(code) { - if (code.includes('@mtcute/wasm/mtcute.wasm')) { - return code.replace('@mtcute/wasm/mtcute.wasm', resolve(__dirname, '../packages/wasm/src/mtcute.wasm')) - } - if (code.includes('./mtcute.wasm')) { - return code.replace(/\.?\.\/mtcute\.wasm/, resolve(__dirname, '../packages/wasm/src/mtcute.wasm')) - } - - return code - }, - }, - testSetup(), - ], - define: { - 'import.meta.env.TEST_ENV': '"bun"', - }, -}) diff --git a/.config/vite.deno.ts b/.config/vite.deno.ts deleted file mode 100644 index 21a35a65..00000000 --- a/.config/vite.deno.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { resolve } from 'node:path' - -import { defineConfig } from 'vite' - -import { collectTestEntrypoints } from './vite-utils/collect-test-entrypoints' -import { fixupCjs } from './vite-utils/fixup-cjs' -import { testSetup } from './vite-utils/test-setup-plugin' - -const POLYFILLS = resolve(__dirname, 'vite-utils/polyfills-deno.ts') - -export default defineConfig({ - build: { - lib: { - entry: process.env.ENTRYPOINT - ? [process.env.ENTRYPOINT] - : collectTestEntrypoints({ - // these packages rely on node apis and are not meant to be run under deno - skipPackages: ['create-bot', 'bun', 'node'], - skipTests: [ - // uses timers - 'core/src/network/config-manager.test.ts', - 'core/src/network/persistent-connection.test.ts', - // https://github.com/denoland/deno/issues/22470 - 'wasm/tests/gunzip.test.ts', - 'wasm/tests/zlib.test.ts', - // use fixtures - 'convert/src/tdesktop/tdata.test.ts', - 'convert/src/gramjs/store-session.test.ts', - ], - }), - formats: ['es'], - }, - rollupOptions: { - external: [ - /^(jsr|npm|node|https?):/, - ], - output: { - chunkFileNames: 'chunk-[hash].js', - entryFileNames: '[name]-[hash].test.js', - minifyInternalExports: false, - }, - treeshake: false, - }, - commonjsOptions: { - ignoreDynamicRequires: true, - }, - outDir: process.env.OUT_DIR || 'dist/tests', - emptyOutDir: true, - target: 'esnext', - minify: false, - }, - plugins: [ - fixupCjs(), - { - name: 'polyfills', - transform(code) { - if (!code.includes('vitest')) return code - code = code.replace(/^import \{([^}]+)\} from ['"]vitest['"];?$/gm, (_, names) => { - const namesParsed = names.split(',').map(name => name.trim()) - - return `import {${namesParsed.join(', ')}} from '${POLYFILLS}'` - }) - return code - }, - }, - { - name: 'fix-wasm-load', - async transform(code) { - if (code.includes('./mtcute.wasm')) { - return code.replace(/\.?\.\/mtcute\.wasm/, resolve(__dirname, '../packages/wasm/src/mtcute.wasm')) - } - - return code - }, - }, - testSetup(), - ], - define: { - 'import.meta.env.TEST_ENV': '"deno"', - }, -}) diff --git a/.config/vite.ts b/.config/vite.ts index 281d2373..dc0ded55 100644 --- a/.config/vite.ts +++ b/.config/vite.ts @@ -1,5 +1,29 @@ -/// -import { defineConfig } from 'vite' +import type { ViteUserConfig } from 'vitest/config' +import { defineConfig } from 'vitest/config' + +// https://github.com/oven-sh/bun/issues/4145#issuecomment-2551246135 +let runtime = 'node' +if ('bun' in process.versions) runtime = 'bun' +if ('deno' in process.versions) runtime = 'deno' + +const poolOptions: ViteUserConfig['test'] = runtime === 'node' + ? { + pool: 'threads', + poolOptions: { + threads: { + singleThread: true, + minThreads: 2, + maxThreads: 10, + }, + }, + } + : { + pool: 'vitest-in-process-pool', + coverage: { + enabled: false, + }, + reporters: [['default', { summary: false }]], + } export default defineConfig({ test: { @@ -22,8 +46,12 @@ export default defineConfig({ setupFiles: [ './.config/vite-utils/test-setup.ts', ], + ...poolOptions, + }, + esbuild: { + target: 'esnext', }, define: { - 'import.meta.env.TEST_ENV': '"node"', + 'import.meta.env.TEST_ENV': JSON.stringify(runtime), }, }) diff --git a/.forgejo/workflows/test.yaml b/.forgejo/workflows/test.yaml index ae00b5cc..17230423 100644 --- a/.forgejo/workflows/test.yaml +++ b/.forgejo/workflows/test.yaml @@ -43,13 +43,11 @@ jobs: steps: - uses: actions/checkout@v4 - uses: ./.forgejo/actions/init - - uses: oven-sh/setup-bun@v1 + - uses: oven-sh/setup-bun@v2 with: - bun-version: '1.1.4' - - name: 'Build tests' - run: pnpm exec vite build -c .config/vite.bun.ts + bun-version: '1.2.4' - name: 'Run tests' - run: cd dist/tests && bun test + run: pnpm run test:bun test-deno: runs-on: node22 @@ -58,19 +56,14 @@ jobs: - uses: ./.forgejo/actions/init - uses: https://github.com/denoland/setup-deno@v1 with: - deno-version: '2.0' - - name: 'Build tests' - run: pnpm exec vite build -c .config/vite.deno.ts + deno-version: '2.2.2' - name: 'Run tests' - run: cd dist/tests && deno test -A --unstable-ffi --node-modules-dir=false + run: pnpm run test:deno test-web: runs-on: docker container: mcr.microsoft.com/playwright:v1.42.1 - strategy: - matrix: - browser: [chromium, firefox] steps: - uses: actions/checkout@v4 - run: apt-get update && apt-get install -y make gcc g++ @@ -82,7 +75,7 @@ jobs: with: max_attempts: 3 timeout_minutes: 30 - command: pnpm run test:browser --browser.name=${{ matrix.browser }} + command: pnpm run test:browser e2e: runs-on: node22 diff --git a/e2e/deno.json b/e2e/deno.json index ac2843c8..175ffd64 100644 --- a/e2e/deno.json +++ b/e2e/deno.json @@ -1,28 +1,6 @@ { - "imports": { - "@fuman/utils": "jsr:@fuman/utils@0.0.1", - "chai": "https://esm.sh/chai@5.1.2?pin=v135", - "node:test": "./tests/deno-shims/node-test.js", - "mtcute": "../packages/deno/src/index.ts", - "mtcute/utils.js": "../packages/deno/src/utils.ts", - "@mtcute/core": "../packages/core/src/index.ts", - "@mtcute/core/client.js": "../packages/core/src/highlevel/client.ts", - "@mtcute/core/methods.js": "../packages/core/src/highlevel/methods.ts", - "@mtcute/core/utils.js": "../packages/core/src/utils/index.ts", - "@mtcute/core/worker.js": "../packages/core/src/highlevel/worker/index.ts", - "@mtcute/markdown-parser": "../packages/markdown-parser/src/index.ts", - "@mtcute/html-parser": "../packages/html-parser/src/index.ts", - "@mtcute/file-id": "../packages/file-id/src/index.ts", - "@mtcute/tl-runtime": "../packages/tl-runtime/src/index.ts", - "@mtcute/wasm": "../packages/wasm/src/index.ts", - "@mtcute/tl": "./tests/deno-shims/tl.js", - "@mtcute/tl/binary/rsa-keys.js": "./tests/deno-shims/tl-rsa.js", - "@mtcute/tl/binary/reader.js": "./tests/deno-shims/tl-reader.js", - "@mtcute/tl/compat/reader.js": "./tests/deno-shims/tl-reader-compat.js", - "@mtcute/tl/binary/writer.js": "./tests/deno-shims/tl-writer.js" - }, "tasks": { - "test": "deno test -A --unstable-ffi --trace-leaks --unstable-sloppy-imports --no-check --env-file=.env --unstable-detect-cjs", + "test": "deno test -A --unstable-ffi --trace-leaks --unstable-sloppy-imports --no-check --env-file=.env --unstable-detect-cjs --import-map=../.config/deno-import-map.json", "test:all": "deno task test tests/*.e2e.ts" } } \ No newline at end of file diff --git a/e2e/deno.lock b/e2e/deno.lock index ed035a21..0cef88a4 100644 --- a/e2e/deno.lock +++ b/e2e/deno.lock @@ -156,9 +156,6 @@ "https://esm.sh/v135/chai@5.1.2/denonext/chai.mjs": "05cc6071c804cf39d4325a2c93807727623019abedca6ed1cb6534137bd4f65e" }, "workspace": { - "dependencies": [ - "jsr:@fuman/utils@0.0.1" - ], "packageJson": { "dependencies": [ "npm:@fuman/utils@0.0.1", diff --git a/e2e/tests/deno-shims/tl-reader-compat.js b/e2e/tests/deno-shims/tl-reader-compat.js deleted file mode 100644 index d37d4b4a..00000000 --- a/e2e/tests/deno-shims/tl-reader-compat.js +++ /dev/null @@ -1,5 +0,0 @@ -import { createRequire } from 'node:module' - -const require = createRequire(import.meta.url) - -export const { __tlReaderMapCompat } = require('../../../packages/tl/compat/reader.js') diff --git a/package.json b/package.json index 016c52b3..9271bd23 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,8 @@ "test:ci": "vitest --config .config/vite.ts run --coverage.enabled --coverage.reporter=json", "test:browser": "vitest --config .config/vite.browser.ts run", "test:browser:dev": "vitest --config .config/vite.browser.ts watch", + "test:bun": "bun --bun run test", + "test:deno": "deno run -A --unstable-ffi --unstable-sloppy-imports --no-check --unstable-detect-cjs --import-map=.config/deno-import-map.json npm:vitest@3.0.7 --config .config/vite.ts", "lint": "eslint", "lint:ci": "CI=1 NODE_OPTIONS=\\\"--max_old_space_size=8192\\\" eslint", "lint:tsc": "pnpm -r --workspace-concurrency=4 exec tsc", @@ -50,11 +52,11 @@ "@types/deno": "npm:@teidesu/deno-types@1.46.3", "@types/node": "22.13.1", "@types/ws": "8.5.4", - "@vitest/browser": "2.0.5", - "@vitest/coverage-v8": "2.0.5", - "@vitest/expect": "2.0.5", - "@vitest/spy": "2.0.5", - "@vitest/ui": "2.0.5", + "@vitest/browser": "3.0.7", + "@vitest/coverage-v8": "3.0.7", + "@vitest/expect": "3.0.7", + "@vitest/spy": "3.0.7", + "@vitest/ui": "3.0.7", "chai": "5.1.0", "cjs-module-lexer": "1.2.3", "dotenv-flow": "4.1.0", @@ -70,10 +72,11 @@ "tsx": "4.17.0", "typedoc": "0.27.6", "typescript": "5.5.4", - "vite": "5.4.2", + "vite": "6.2.0", "vite-plugin-dts": "4.0.3", - "vite-plugin-node-polyfills": "0.22.0", - "vitest": "2.0.5" + "vite-plugin-node-polyfills": "0.23.0", + "vitest": "3.0.7", + "vitest-in-process-pool": "^2.0.0" }, "pnpm": { "overrides": { diff --git a/packages/core/src/utils/crypto/miller-rabin.test.ts b/packages/core/src/utils/crypto/miller-rabin.test.ts index b2729d41..28ff0f05 100644 --- a/packages/core/src/utils/crypto/miller-rabin.test.ts +++ b/packages/core/src/utils/crypto/miller-rabin.test.ts @@ -5,6 +5,8 @@ import { millerRabin } from './miller-rabin.js' describe( 'miller-rabin test', + // since miller-rabin factorization relies on RNG, it may take a while (or may not!) + { timeout: 10000 }, () => { // miller-rabin factorization relies on RNG, so we should use a real random number generator const c = defaultCryptoProvider @@ -139,5 +141,4 @@ describe( testMillerRabin(BigInt(`0x${telegramDhPrime.replace(/ /g, '')}`), true) }) }, - { timeout: 10000 }, -) // since miller-rabin factorization relies on RNG, it may take a while (or may not!) +) diff --git a/packages/test/src/crypto.ts b/packages/test/src/crypto.ts index f5b292bb..44cc0273 100644 --- a/packages/test/src/crypto.ts +++ b/packages/test/src/crypto.ts @@ -188,6 +188,8 @@ export function testCryptoProvider(c: ICryptoProvider): void { it( 'should decompose PQ to prime factors P and Q', + // since PQ factorization relies on RNG, it may take a while (or may not!) + { timeout: 10000 }, async () => { const testFactorization = async (pq: string, p_: string, q: string) => { const [p1, q1] = await c.factorizePQ(hex.decode(pq)) @@ -200,8 +202,6 @@ export function testCryptoProvider(c: ICryptoProvider): void { // random example await testFactorization('14fcab4dfc861f45', '494c5c99', '494c778d') }, - // since PQ factorization relies on RNG, it may take a while (or may not!) - { timeout: 10000 }, ) it('should correctly gzip', () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be85cbc7..1c4f4e16 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,10 +13,10 @@ importers: devDependencies: '@antfu/eslint-config': specifier: ^3.11.2 - version: 3.11.2(@typescript-eslint/utils@8.17.0(eslint@9.9.0)(typescript@5.5.4))(@vue/compiler-sfc@3.5.13)(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5) + version: 3.11.2(@typescript-eslint/utils@8.17.0(eslint@9.9.0)(typescript@5.5.4))(@vue/compiler-sfc@3.5.13)(eslint@9.9.0)(typescript@5.5.4)(vitest@3.0.7) '@fuman/build': specifier: https://pkg.pr.new/teidesu/fuman/@fuman/build@0b7fee1 - version: https://pkg.pr.new/teidesu/fuman/@fuman/build@0b7fee1(tough-cookie@4.1.4)(typedoc@0.27.6(typescript@5.5.4))(typescript@5.5.4)(vite@5.4.2(@types/node@22.13.1)) + version: https://pkg.pr.new/teidesu/fuman/@fuman/build@0b7fee1(tough-cookie@4.1.4)(typedoc@0.27.6(typescript@5.5.4))(typescript@5.5.4)(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1)) '@fuman/utils': specifier: 0.0.4 version: 0.0.4 @@ -33,20 +33,20 @@ importers: specifier: 8.5.4 version: 8.5.4 '@vitest/browser': - specifier: 2.0.5 - version: 2.0.5(@types/node@22.13.1)(playwright@1.42.1)(typescript@5.5.4)(vitest@2.0.5) + specifier: 3.0.7 + version: 3.0.7(@types/node@22.13.1)(playwright@1.42.1)(typescript@5.5.4)(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1))(vitest@3.0.7) '@vitest/coverage-v8': - specifier: 2.0.5 - version: 2.0.5(vitest@2.0.5) + specifier: 3.0.7 + version: 3.0.7(@vitest/browser@3.0.7)(vitest@3.0.7) '@vitest/expect': - specifier: 2.0.5 - version: 2.0.5 + specifier: 3.0.7 + version: 3.0.7 '@vitest/spy': - specifier: 2.0.5 - version: 2.0.5 + specifier: 3.0.7 + version: 3.0.7 '@vitest/ui': - specifier: 2.0.5 - version: 2.0.5(vitest@2.0.5) + specifier: 3.0.7 + version: 3.0.7(vitest@3.0.7) chai: specifier: 5.1.0 version: 5.1.0 @@ -76,7 +76,7 @@ importers: version: 6.0.1 rollup-plugin-node-externals: specifier: 7.1.3 - version: 7.1.3(rollup@4.27.2) + version: 7.1.3(rollup@4.34.9) semver: specifier: 7.5.1 version: 7.5.1 @@ -93,17 +93,20 @@ importers: specifier: 5.5.4 version: 5.5.4 vite: - specifier: 5.4.2 - version: 5.4.2(@types/node@22.13.1) + specifier: 6.2.0 + version: 6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1) vite-plugin-dts: specifier: 4.0.3 - version: 4.0.3(@types/node@22.13.1)(rollup@4.27.2)(typescript@5.5.4)(vite@5.4.2(@types/node@22.13.1)) + version: 4.0.3(@types/node@22.13.1)(rollup@4.34.9)(typescript@5.5.4)(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1)) vite-plugin-node-polyfills: - specifier: 0.22.0 - version: 0.22.0(rollup@4.27.2)(vite@5.4.2(@types/node@22.13.1)) + specifier: 0.23.0 + version: 0.23.0(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1)) vitest: - specifier: 2.0.5 - version: 2.0.5(@types/node@22.13.1)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5) + specifier: 3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.1)(@vitest/browser@3.0.7)(@vitest/ui@3.0.7)(msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.6.1) + vitest-in-process-pool: + specifier: ^2.0.0 + version: 2.0.0(vitest@3.0.7) e2e: dependencies: @@ -583,8 +586,9 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} '@bundled-es-modules/cookie@2.0.1': resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} @@ -630,6 +634,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.0': + resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} @@ -648,6 +658,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.0': + resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} @@ -666,6 +682,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.0': + resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} @@ -684,6 +706,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.0': + resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} @@ -702,6 +730,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.0': + resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} @@ -720,6 +754,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.0': + resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} @@ -738,6 +778,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.0': + resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} @@ -756,6 +802,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.0': + resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} @@ -774,6 +826,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.0': + resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} @@ -792,6 +850,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.0': + resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} @@ -810,6 +874,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.0': + resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} @@ -828,6 +898,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.0': + resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} @@ -846,6 +922,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.0': + resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} @@ -864,6 +946,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.0': + resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} @@ -882,6 +970,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.0': + resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} @@ -900,6 +994,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.0': + resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} @@ -918,6 +1018,18 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.0': + resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.0': + resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} @@ -936,6 +1048,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.0': + resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.23.0': resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} engines: {node: '>=18'} @@ -948,6 +1066,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.0': + resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} @@ -966,6 +1090,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.0': + resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} @@ -984,6 +1114,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.0': + resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} @@ -1002,6 +1138,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.0': + resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} @@ -1020,6 +1162,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.0': + resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} @@ -1038,6 +1186,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.0': + resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} + 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} @@ -1359,91 +1513,186 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.34.9': + resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.27.2': resolution: {integrity: sha512-xsPeJgh2ThBpUqlLgRfiVYBEf/P1nWlWvReG+aBWfNv3XEBpa6ZCmxSVnxJgLgkNz4IbxpLy64h2gCmAAQLneQ==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.34.9': + resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.27.2': resolution: {integrity: sha512-KnXU4m9MywuZFedL35Z3PuwiTSn/yqRIhrEA9j+7OSkji39NzVkgxuxTYg5F8ryGysq4iFADaU5osSizMXhU2A==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.34.9': + resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.27.2': resolution: {integrity: sha512-Hj77A3yTvUeCIx/Vi+4d4IbYhyTwtHj07lVzUgpUq9YpJSEiGJj4vXMKwzJ3w5zp5v3PFvpJNgc/J31smZey6g==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.34.9': + resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.27.2': resolution: {integrity: sha512-RjgKf5C3xbn8gxvCm5VgKZ4nn0pRAIe90J0/fdHUsgztd3+Zesb2lm2+r6uX4prV2eUByuxJNdt647/1KPRq5g==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.34.9': + resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.27.2': resolution: {integrity: sha512-duq21FoXwQtuws+V9H6UZ+eCBc7fxSpMK1GQINKn3fAyd9DFYKPJNcUhdIKOrMFjLEJgQskoMoiuizMt+dl20g==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.34.9': + resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.27.2': resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.27.2': resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.34.9': + resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.27.2': resolution: {integrity: sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.34.9': + resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.27.2': resolution: {integrity: sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.34.9': + resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': resolution: {integrity: sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.27.2': resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.34.9': + resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.27.2': resolution: {integrity: sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.34.9': + resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.27.2': resolution: {integrity: sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.34.9': + resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.27.2': resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.34.9': + resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.27.2': resolution: {integrity: sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.34.9': + resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.27.2': resolution: {integrity: sha512-RsnE6LQkUHlkC10RKngtHNLxb7scFykEbEwOFDjr3CeCMG+Rr+cKqlkKc2/wJ1u4u990urRHCbjz31x84PBrSQ==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.34.9': + resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.27.2': resolution: {integrity: sha512-foJM5vv+z2KQmn7emYdDLyTbkoO5bkHZE1oth2tWbQNGW7mX32d46Hz6T0MqXdWS2vBZhaEtHqdy9WYwGfiliA==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.34.9': + resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} + cpu: [x64] + os: [win32] + '@rushstack/node-core-library@5.5.1': resolution: {integrity: sha512-ZutW56qIzH8xIOlfyaLQJFx+8IBqdbVCZdnj+XT1MorQ1JqqxHse8vbCpEM+2MjsrqcbxcgDIbfggB1ZSQ2A3g==} peerDependencies: @@ -1494,6 +1743,12 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@types/argparse@1.0.38': resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} @@ -1679,10 +1934,29 @@ packages: webdriverio: optional: true - '@vitest/coverage-v8@2.0.5': - resolution: {integrity: sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==} + '@vitest/browser@3.0.7': + resolution: {integrity: sha512-TDzZtnbe37KZLSLhvlO1pUkeRSRzW3rOhPLsshX8agGoPELMlG7EvS4z9GfsdaCxsP7oWLBJpFjNJwLS458Bzg==} peerDependencies: - vitest: 2.0.5 + playwright: '*' + safaridriver: '*' + vitest: 3.0.7 + webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0 + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + '@vitest/coverage-v8@3.0.7': + resolution: {integrity: sha512-Av8WgBJLTrfLOer0uy3CxjlVuWK4CzcLBndW1Nm2vI+3hZ2ozHututkfc7Blu1u6waeQ7J8gzPK/AsBRnWA5mQ==} + peerDependencies: + '@vitest/browser': 3.0.7 + vitest: 3.0.7 + peerDependenciesMeta: + '@vitest/browser': + optional: true '@vitest/eslint-plugin@1.1.14': resolution: {integrity: sha512-ej0cT5rUt7uvwxuu7Qxkm7fI+eaOq8vD34qGpuRoXCdvOybOlE5GDqtgvVCYbxLANkcRJfm5VDU1TnJmQRHi9g==} @@ -1700,29 +1974,63 @@ packages: '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + '@vitest/expect@3.0.7': + resolution: {integrity: sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw==} + + '@vitest/mocker@3.0.7': + resolution: {integrity: sha512-qui+3BLz9Eonx4EAuR/i+QlCX6AUZ35taDQgwGkK/Tw6/WgwodSrjN1X2xf69IA/643ZX5zNKIn2svvtZDrs4w==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@2.0.5': resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} '@vitest/pretty-format@2.1.5': resolution: {integrity: sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==} + '@vitest/pretty-format@3.0.7': + resolution: {integrity: sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==} + '@vitest/runner@2.0.5': resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} + '@vitest/runner@3.0.7': + resolution: {integrity: sha512-WeEl38Z0S2ZcuRTeyYqaZtm4e26tq6ZFqh5y8YD9YxfWuu0OFiGFUbnxNynwLjNRHPsXyee2M9tV7YxOTPZl2g==} + '@vitest/snapshot@2.0.5': resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} + '@vitest/snapshot@3.0.7': + resolution: {integrity: sha512-eqTUryJWQN0Rtf5yqCGTQWsCFOQe4eNz5Twsu21xYEcnFJtMU5XvmG0vgebhdLlrHQTSq5p8vWHJIeJQV8ovsA==} + '@vitest/spy@2.0.5': resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + '@vitest/spy@3.0.7': + resolution: {integrity: sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==} + '@vitest/ui@2.0.5': resolution: {integrity: sha512-m+ZpVt/PVi/nbeRKEjdiYeoh0aOfI9zr3Ria9LO7V2PlMETtAXJS3uETEZkc8Be2oOl8mhd7Ew+5SRBXRYncNw==} peerDependencies: vitest: 2.0.5 + '@vitest/ui@3.0.7': + resolution: {integrity: sha512-bogkkSaVdSTRj02TfypjrqrLCeEc/tA5V4gAVM843Rp5JtIub3xaij+qjsSnS6CseLQJUSdDCFaFqPMmymRJKQ==} + peerDependencies: + vitest: 3.0.7 + '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + '@vitest/utils@3.0.7': + resolution: {integrity: sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==} + '@volar/language-core@2.4.10': resolution: {integrity: sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==} @@ -1961,6 +2269,10 @@ packages: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2136,6 +2448,15 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -2281,6 +2602,9 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -2296,6 +2620,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.0: + resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2517,6 +2846,10 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} + expect-type@1.2.0: + resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} + engines: {node: '>=12.0.0'} + external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -2545,6 +2878,14 @@ packages: picomatch: optional: true + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -2582,6 +2923,9 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -2987,6 +3331,9 @@ packages: loupe@3.1.2: resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -3008,6 +3355,9 @@ packages: magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -3226,6 +3576,16 @@ packages: typescript: optional: true + msw@2.7.3: + resolution: {integrity: sha512-+mycXv8l2fEAjFZ5sjrtjJDmm2ceKGjrNbBr1durRg6VkU9fNUE/gsmQ51hWbHqs+l35W1iM+ZsmOD9Fd6lspw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: 5.5.4 + peerDependenciesMeta: + typescript: + optional: true + muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} @@ -3242,6 +3602,11 @@ packages: 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} + hasBin: true + napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} @@ -3411,6 +3776,9 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} @@ -3466,6 +3834,10 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + prebuild-install@7.1.2: resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} engines: {node: '>=10'} @@ -3616,6 +3988,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.34.9: + resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-async@3.0.0: resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} engines: {node: '>=0.12.0'} @@ -3701,6 +4078,10 @@ packages: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} + sirv@3.0.1: + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + engines: {node: '>=18'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -3845,10 +4226,17 @@ packages: tinyexec@0.3.1: resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyglobby@0.2.10: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -3857,6 +4245,10 @@ packages: resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + tinyspy@3.0.2: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} @@ -4017,6 +4409,11 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-node@3.0.7: + resolution: {integrity: sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + vite-plugin-dts@4.0.3: resolution: {integrity: sha512-+xnTsaONwU2kV6zhRjtbRJSGN41uFR/whqmcb4k4fftLFDJElxthp0PP5Fq8gMeM9ytWMt1yk5gGgekLREWYQQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -4027,10 +4424,10 @@ packages: vite: optional: true - vite-plugin-node-polyfills@0.22.0: - resolution: {integrity: sha512-F+G3LjiGbG8QpbH9bZ//GSBr9i1InSTkaulfUHFa9jkLqVGORFBoqc2A/Yu5Mmh1kNAbiAeKeK+6aaQUf3x0JA==} + vite-plugin-node-polyfills@0.23.0: + resolution: {integrity: sha512-4n+Ys+2bKHQohPBKigFlndwWQ5fFKwaGY6muNDMTb0fSQLyBzS+jjUNRZG9sKF0S/Go4ApG6LFnUGopjkILg3w==} peerDependencies: - vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 vite@5.4.2: resolution: {integrity: sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==} @@ -4063,6 +4460,51 @@ packages: terser: optional: true + vite@6.2.0: + resolution: {integrity: sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest-in-process-pool@2.0.0: + resolution: {integrity: sha512-pPHWYUt4+EDHczQdRrYmxSW/urMY7maaSX73+m221E4PxlODbsPy2ySsHiUnFxavZXRLOWcf7g4XpqQ0YiU+Dw==} + peerDependencies: + vitest: '>=3.0.0' + vitest@2.0.5: resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4088,6 +4530,34 @@ packages: jsdom: optional: true + vitest@3.0.7: + resolution: {integrity: sha512-IP7gPK3LS3Fvn44x30X1dM9vtawm0aesAa2yBIZ9vQf+qB69NXC5776+Qmcr7ohUXIQuLhk7xQR0aSUIDPqavg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.7 + '@vitest/ui': 3.0.7 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} @@ -4169,6 +4639,18 @@ packages: utf-8-validate: optional: true + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -4227,7 +4709,7 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/eslint-config@3.11.2(@typescript-eslint/utils@8.17.0(eslint@9.9.0)(typescript@5.5.4))(@vue/compiler-sfc@3.5.13)(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5)': + '@antfu/eslint-config@3.11.2(@typescript-eslint/utils@8.17.0(eslint@9.9.0)(typescript@5.5.4))(@vue/compiler-sfc@3.5.13)(eslint@9.9.0)(typescript@5.5.4)(vitest@3.0.7)': dependencies: '@antfu/install-pkg': 0.5.0 '@clack/prompts': 0.8.2 @@ -4236,7 +4718,7 @@ snapshots: '@stylistic/eslint-plugin': 2.11.0(eslint@9.9.0)(typescript@5.5.4) '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) '@typescript-eslint/parser': 8.17.0(eslint@9.9.0)(typescript@5.5.4) - '@vitest/eslint-plugin': 1.1.14(@typescript-eslint/utils@8.17.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5) + '@vitest/eslint-plugin': 1.1.14(@typescript-eslint/utils@8.17.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)(vitest@3.0.7) eslint: 9.9.0 eslint-config-flat-gitignore: 0.3.0(eslint@9.9.0) eslint-flat-config-utils: 0.4.0 @@ -4303,7 +4785,7 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@bcoe/v8-coverage@0.2.3': {} + '@bcoe/v8-coverage@1.0.2': {} '@bundled-es-modules/cookie@2.0.1': dependencies: @@ -4352,6 +4834,9 @@ snapshots: '@esbuild/aix-ppc64@0.24.0': optional: true + '@esbuild/aix-ppc64@0.25.0': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true @@ -4361,6 +4846,9 @@ snapshots: '@esbuild/android-arm64@0.24.0': optional: true + '@esbuild/android-arm64@0.25.0': + optional: true + '@esbuild/android-arm@0.21.5': optional: true @@ -4370,6 +4858,9 @@ snapshots: '@esbuild/android-arm@0.24.0': optional: true + '@esbuild/android-arm@0.25.0': + optional: true + '@esbuild/android-x64@0.21.5': optional: true @@ -4379,6 +4870,9 @@ snapshots: '@esbuild/android-x64@0.24.0': optional: true + '@esbuild/android-x64@0.25.0': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true @@ -4388,6 +4882,9 @@ snapshots: '@esbuild/darwin-arm64@0.24.0': optional: true + '@esbuild/darwin-arm64@0.25.0': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true @@ -4397,6 +4894,9 @@ snapshots: '@esbuild/darwin-x64@0.24.0': optional: true + '@esbuild/darwin-x64@0.25.0': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true @@ -4406,6 +4906,9 @@ snapshots: '@esbuild/freebsd-arm64@0.24.0': optional: true + '@esbuild/freebsd-arm64@0.25.0': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true @@ -4415,6 +4918,9 @@ snapshots: '@esbuild/freebsd-x64@0.24.0': optional: true + '@esbuild/freebsd-x64@0.25.0': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true @@ -4424,6 +4930,9 @@ snapshots: '@esbuild/linux-arm64@0.24.0': optional: true + '@esbuild/linux-arm64@0.25.0': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true @@ -4433,6 +4942,9 @@ snapshots: '@esbuild/linux-arm@0.24.0': optional: true + '@esbuild/linux-arm@0.25.0': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true @@ -4442,6 +4954,9 @@ snapshots: '@esbuild/linux-ia32@0.24.0': optional: true + '@esbuild/linux-ia32@0.25.0': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true @@ -4451,6 +4966,9 @@ snapshots: '@esbuild/linux-loong64@0.24.0': optional: true + '@esbuild/linux-loong64@0.25.0': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true @@ -4460,6 +4978,9 @@ snapshots: '@esbuild/linux-mips64el@0.24.0': optional: true + '@esbuild/linux-mips64el@0.25.0': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true @@ -4469,6 +4990,9 @@ snapshots: '@esbuild/linux-ppc64@0.24.0': optional: true + '@esbuild/linux-ppc64@0.25.0': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true @@ -4478,6 +5002,9 @@ snapshots: '@esbuild/linux-riscv64@0.24.0': optional: true + '@esbuild/linux-riscv64@0.25.0': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true @@ -4487,6 +5014,9 @@ snapshots: '@esbuild/linux-s390x@0.24.0': optional: true + '@esbuild/linux-s390x@0.25.0': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true @@ -4496,6 +5026,12 @@ snapshots: '@esbuild/linux-x64@0.24.0': optional: true + '@esbuild/linux-x64@0.25.0': + optional: true + + '@esbuild/netbsd-arm64@0.25.0': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true @@ -4505,12 +5041,18 @@ snapshots: '@esbuild/netbsd-x64@0.24.0': optional: true + '@esbuild/netbsd-x64@0.25.0': + optional: true + '@esbuild/openbsd-arm64@0.23.0': optional: true '@esbuild/openbsd-arm64@0.24.0': optional: true + '@esbuild/openbsd-arm64@0.25.0': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true @@ -4520,6 +5062,9 @@ snapshots: '@esbuild/openbsd-x64@0.24.0': optional: true + '@esbuild/openbsd-x64@0.25.0': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true @@ -4529,6 +5074,9 @@ snapshots: '@esbuild/sunos-x64@0.24.0': optional: true + '@esbuild/sunos-x64@0.25.0': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true @@ -4538,6 +5086,9 @@ snapshots: '@esbuild/win32-arm64@0.24.0': optional: true + '@esbuild/win32-arm64@0.25.0': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true @@ -4547,6 +5098,9 @@ snapshots: '@esbuild/win32-ia32@0.24.0': optional: true + '@esbuild/win32-ia32@0.25.0': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true @@ -4556,6 +5110,9 @@ snapshots: '@esbuild/win32-x64@0.24.0': optional: true + '@esbuild/win32-x64@0.25.0': + optional: true + '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.9.0)': dependencies: escape-string-regexp: 4.0.0 @@ -4612,7 +5169,7 @@ snapshots: dependencies: levn: 0.4.1 - '@fuman/build@https://pkg.pr.new/teidesu/fuman/@fuman/build@0b7fee1(tough-cookie@4.1.4)(typedoc@0.27.6(typescript@5.5.4))(typescript@5.5.4)(vite@5.4.2(@types/node@22.13.1))': + '@fuman/build@https://pkg.pr.new/teidesu/fuman/@fuman/build@0b7fee1(tough-cookie@4.1.4)(typedoc@0.27.6(typescript@5.5.4))(typescript@5.5.4)(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1))': dependencies: '@drizzle-team/brocli': 0.10.2 '@fuman/fetch': 0.0.10(tough-cookie@4.1.4)(zod@3.23.8) @@ -4627,7 +5184,7 @@ snapshots: semver: 7.6.3 tinyglobby: 0.2.10 typescript: 5.5.4 - vite: 5.4.2(@types/node@22.13.1) + vite: 6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1) zod: 3.23.8 optionalDependencies: typedoc: 0.27.6(typescript@5.5.4) @@ -4912,76 +5469,133 @@ snapshots: '@polka/url@1.0.0-next.28': {} - '@rollup/plugin-inject@5.0.5(rollup@4.27.2)': + '@rollup/plugin-inject@5.0.5(rollup@4.34.9)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.27.2) + '@rollup/pluginutils': 5.1.3(rollup@4.34.9) estree-walker: 2.0.2 magic-string: 0.30.12 optionalDependencies: - rollup: 4.27.2 + rollup: 4.34.9 - '@rollup/pluginutils@5.1.3(rollup@4.27.2)': + '@rollup/pluginutils@5.1.3(rollup@4.34.9)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.27.2 + rollup: 4.34.9 '@rollup/rollup-android-arm-eabi@4.27.2': optional: true + '@rollup/rollup-android-arm-eabi@4.34.9': + optional: true + '@rollup/rollup-android-arm64@4.27.2': optional: true + '@rollup/rollup-android-arm64@4.34.9': + optional: true + '@rollup/rollup-darwin-arm64@4.27.2': optional: true + '@rollup/rollup-darwin-arm64@4.34.9': + optional: true + '@rollup/rollup-darwin-x64@4.27.2': optional: true + '@rollup/rollup-darwin-x64@4.34.9': + optional: true + '@rollup/rollup-freebsd-arm64@4.27.2': optional: true + '@rollup/rollup-freebsd-arm64@4.34.9': + optional: true + '@rollup/rollup-freebsd-x64@4.27.2': optional: true + '@rollup/rollup-freebsd-x64@4.34.9': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.27.2': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.27.2': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.34.9': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.27.2': optional: true + '@rollup/rollup-linux-arm64-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-arm64-musl@4.27.2': optional: true + '@rollup/rollup-linux-arm64-musl@4.34.9': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.27.2': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.27.2': optional: true + '@rollup/rollup-linux-s390x-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-x64-gnu@4.27.2': optional: true + '@rollup/rollup-linux-x64-gnu@4.34.9': + optional: true + '@rollup/rollup-linux-x64-musl@4.27.2': optional: true + '@rollup/rollup-linux-x64-musl@4.34.9': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.27.2': optional: true + '@rollup/rollup-win32-arm64-msvc@4.34.9': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.27.2': optional: true + '@rollup/rollup-win32-ia32-msvc@4.34.9': + optional: true + '@rollup/rollup-win32-x64-msvc@4.27.2': optional: true + '@rollup/rollup-win32-x64-msvc@4.34.9': + optional: true + '@rushstack/node-core-library@5.5.1(@types/node@22.13.1)': dependencies: ajv: 8.13.0 @@ -5056,6 +5670,11 @@ snapshots: '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': dependencies: '@testing-library/dom': 10.4.0 + optional: true + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 '@types/argparse@1.0.38': {} @@ -5265,7 +5884,7 @@ snapshots: '@testing-library/dom': 10.4.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/utils': 2.0.5 - magic-string: 0.30.12 + magic-string: 0.30.17 msw: 2.6.5(@types/node@22.13.1)(typescript@5.5.4) sirv: 2.0.4 vitest: 2.0.5(@types/node@22.13.1)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5) @@ -5277,32 +5896,56 @@ snapshots: - bufferutil - typescript - utf-8-validate + optional: true - '@vitest/coverage-v8@2.0.5(vitest@2.0.5)': + '@vitest/browser@3.0.7(@types/node@22.13.1)(playwright@1.42.1)(typescript@5.5.4)(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1))(vitest@3.0.7)': + dependencies: + '@testing-library/dom': 10.4.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/mocker': 3.0.7(msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4))(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1)) + '@vitest/utils': 3.0.7 + magic-string: 0.30.17 + msw: 2.7.3(@types/node@22.13.1)(typescript@5.5.4) + sirv: 3.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.1)(@vitest/browser@3.0.7)(@vitest/ui@3.0.7)(msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.6.1) + ws: 8.18.1 + optionalDependencies: + playwright: 1.42.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - typescript + - utf-8-validate + - vite + + '@vitest/coverage-v8@3.0.7(@vitest/browser@3.0.7)(vitest@3.0.7)': dependencies: '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.7 + '@bcoe/v8-coverage': 1.0.2 + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 - magic-string: 0.30.12 + magic-string: 0.30.17 magicast: 0.3.5 std-env: 3.8.0 test-exclude: 7.0.1 - tinyrainbow: 1.2.0 - vitest: 2.0.5(@types/node@22.13.1)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5) + tinyrainbow: 2.0.0 + vitest: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.1)(@vitest/browser@3.0.7)(@vitest/ui@3.0.7)(msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.6.1) + optionalDependencies: + '@vitest/browser': 3.0.7(@types/node@22.13.1)(playwright@1.42.1)(typescript@5.5.4)(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1))(vitest@3.0.7) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.1.14(@typescript-eslint/utils@8.17.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5)': + '@vitest/eslint-plugin@1.1.14(@typescript-eslint/utils@8.17.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)(vitest@3.0.7)': dependencies: '@typescript-eslint/utils': 8.17.0(eslint@9.9.0)(typescript@5.5.4) eslint: 9.9.0 optionalDependencies: typescript: 5.5.4 - vitest: 2.0.5(@types/node@22.13.1)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5) + vitest: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.1)(@vitest/browser@3.0.7)(@vitest/ui@3.0.7)(msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.6.1) '@vitest/expect@2.0.5': dependencies: @@ -5311,6 +5954,22 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 + '@vitest/expect@3.0.7': + dependencies: + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.0.7(msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4))(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1))': + dependencies: + '@vitest/spy': 3.0.7 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.3(@types/node@22.13.1)(typescript@5.5.4) + vite: 6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1) + '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 @@ -5319,21 +5978,40 @@ snapshots: dependencies: tinyrainbow: 1.2.0 + '@vitest/pretty-format@3.0.7': + dependencies: + tinyrainbow: 2.0.0 + '@vitest/runner@2.0.5': dependencies: '@vitest/utils': 2.0.5 pathe: 1.1.2 + '@vitest/runner@3.0.7': + dependencies: + '@vitest/utils': 3.0.7 + pathe: 2.0.3 + '@vitest/snapshot@2.0.5': dependencies: '@vitest/pretty-format': 2.0.5 magic-string: 0.30.12 pathe: 1.1.2 + '@vitest/snapshot@3.0.7': + dependencies: + '@vitest/pretty-format': 3.0.7 + magic-string: 0.30.17 + pathe: 2.0.3 + '@vitest/spy@2.0.5': dependencies: tinyspy: 3.0.2 + '@vitest/spy@3.0.7': + dependencies: + tinyspy: 3.0.2 + '@vitest/ui@2.0.5(vitest@2.0.5)': dependencies: '@vitest/utils': 2.0.5 @@ -5344,6 +6022,18 @@ snapshots: sirv: 2.0.4 tinyrainbow: 1.2.0 vitest: 2.0.5(@types/node@22.13.1)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5) + optional: true + + '@vitest/ui@3.0.7(vitest@3.0.7)': + dependencies: + '@vitest/utils': 3.0.7 + fflate: 0.8.2 + flatted: 3.3.3 + pathe: 2.0.3 + sirv: 3.0.1 + tinyglobby: 0.2.12 + tinyrainbow: 2.0.0 + vitest: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.1)(@vitest/browser@3.0.7)(@vitest/ui@3.0.7)(msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.6.1) '@vitest/utils@2.0.5': dependencies: @@ -5352,6 +6042,12 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 + '@vitest/utils@3.0.7': + dependencies: + '@vitest/pretty-format': 3.0.7 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + '@volar/language-core@2.4.10': dependencies: '@volar/source-map': 2.4.10 @@ -5385,8 +6081,8 @@ snapshots: '@vue/compiler-ssr': 3.5.13 '@vue/shared': 3.5.13 estree-walker: 2.0.2 - magic-string: 0.30.12 - postcss: 8.4.49 + magic-string: 0.30.17 + postcss: 8.5.3 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.13': @@ -5658,6 +6354,14 @@ snapshots: loupe: 3.1.2 pathval: 2.0.0 + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 + pathval: 2.0.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -5832,6 +6536,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 @@ -5987,6 +6695,8 @@ snapshots: es-module-lexer@1.5.4: {} + es-module-lexer@1.6.0: {} + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -6067,6 +6777,34 @@ snapshots: '@esbuild/win32-ia32': 0.24.0 '@esbuild/win32-x64': 0.24.0 + esbuild@0.25.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.0 + '@esbuild/android-arm': 0.25.0 + '@esbuild/android-arm64': 0.25.0 + '@esbuild/android-x64': 0.25.0 + '@esbuild/darwin-arm64': 0.25.0 + '@esbuild/darwin-x64': 0.25.0 + '@esbuild/freebsd-arm64': 0.25.0 + '@esbuild/freebsd-x64': 0.25.0 + '@esbuild/linux-arm': 0.25.0 + '@esbuild/linux-arm64': 0.25.0 + '@esbuild/linux-ia32': 0.25.0 + '@esbuild/linux-loong64': 0.25.0 + '@esbuild/linux-mips64el': 0.25.0 + '@esbuild/linux-ppc64': 0.25.0 + '@esbuild/linux-riscv64': 0.25.0 + '@esbuild/linux-s390x': 0.25.0 + '@esbuild/linux-x64': 0.25.0 + '@esbuild/netbsd-arm64': 0.25.0 + '@esbuild/netbsd-x64': 0.25.0 + '@esbuild/openbsd-arm64': 0.25.0 + '@esbuild/openbsd-x64': 0.25.0 + '@esbuild/sunos-x64': 0.25.0 + '@esbuild/win32-arm64': 0.25.0 + '@esbuild/win32-ia32': 0.25.0 + '@esbuild/win32-x64': 0.25.0 + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} @@ -6383,6 +7121,8 @@ snapshots: expand-template@2.0.3: {} + expect-type@1.2.0: {} + external-editor@3.1.0: dependencies: chardet: 0.7.0 @@ -6411,6 +7151,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + fflate@0.8.2: {} figures@5.0.0: @@ -6447,6 +7191,8 @@ snapshots: flatted@3.3.1: {} + flatted@3.3.3: {} + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -6721,7 +7467,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.7 + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -6838,6 +7584,8 @@ snapshots: loupe@3.1.2: {} + loupe@3.1.3: {} + lru-cache@10.4.3: {} lru-cache@11.0.2: {} @@ -6854,6 +7602,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + magicast@0.3.5: dependencies: '@babel/parser': 7.26.2 @@ -7259,6 +8011,32 @@ snapshots: typescript: 5.5.4 transitivePeerDependencies: - '@types/node' + optional: true + + msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.0.2(@types/node@22.13.1) + '@mswjs/interceptors': 0.37.0 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.9.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.27.0 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - '@types/node' muggle-string@0.4.1: {} @@ -7268,6 +8046,8 @@ snapshots: nanoid@3.3.7: {} + nanoid@3.3.8: {} + napi-build-utils@1.0.2: {} natural-compare@1.4.0: {} @@ -7468,6 +8248,8 @@ snapshots: pathe@1.1.2: {} + pathe@2.0.3: {} + pathval@1.1.1: {} pathval@2.0.0: {} @@ -7519,6 +8301,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.3: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prebuild-install@7.1.2: dependencies: detect-libc: 2.0.3 @@ -7677,9 +8465,9 @@ snapshots: hash-base: 3.0.4 inherits: 2.0.4 - rollup-plugin-node-externals@7.1.3(rollup@4.27.2): + rollup-plugin-node-externals@7.1.3(rollup@4.34.9): dependencies: - rollup: 4.27.2 + rollup: 4.34.9 rollup@4.27.2: dependencies: @@ -7705,6 +8493,31 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.27.2 fsevents: 2.3.3 + rollup@4.34.9: + dependencies: + '@types/estree': 1.0.6 + 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 + fsevents: 2.3.3 + run-async@3.0.0: {} run-parallel@1.2.0: @@ -7787,6 +8600,13 @@ snapshots: '@polka/url': 1.0.0-next.28 mrmime: 2.0.0 totalist: 3.0.1 + optional: true + + sirv@3.0.1: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 sisteransi@1.0.5: {} @@ -7931,15 +8751,24 @@ snapshots: tinyexec@0.3.1: {} + tinyexec@0.3.2: {} + tinyglobby@0.2.10: dependencies: fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + tinypool@1.0.2: {} tinyrainbow@1.2.0: {} + tinyrainbow@2.0.0: {} + tinyspy@3.0.2: {} tmp@0.0.33: @@ -8105,10 +8934,31 @@ snapshots: - supports-color - terser - vite-plugin-dts@4.0.3(@types/node@22.13.1)(rollup@4.27.2)(typescript@5.5.4)(vite@5.4.2(@types/node@22.13.1)): + vite-node@3.0.7(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-plugin-dts@4.0.3(@types/node@22.13.1)(rollup@4.34.9)(typescript@5.5.4)(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1)): dependencies: '@microsoft/api-extractor': 7.47.4(@types/node@22.13.1) - '@rollup/pluginutils': 5.1.3(rollup@4.27.2) + '@rollup/pluginutils': 5.1.3(rollup@4.34.9) '@volar/typescript': 2.4.10 '@vue/language-core': 2.0.29(typescript@5.5.4) compare-versions: 6.1.1 @@ -8119,17 +8969,17 @@ snapshots: typescript: 5.5.4 vue-tsc: 2.0.29(typescript@5.5.4) optionalDependencies: - vite: 5.4.2(@types/node@22.13.1) + vite: 6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-node-polyfills@0.22.0(rollup@4.27.2)(vite@5.4.2(@types/node@22.13.1)): + vite-plugin-node-polyfills@0.23.0(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1)): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.27.2) + '@rollup/plugin-inject': 5.0.5(rollup@4.34.9) node-stdlib-browser: 1.2.1 - vite: 5.4.2(@types/node@22.13.1) + vite: 6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1) transitivePeerDependencies: - rollup @@ -8142,6 +8992,22 @@ snapshots: '@types/node': 22.13.1 fsevents: 2.3.3 + vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1): + dependencies: + esbuild: 0.25.0 + postcss: 8.5.3 + rollup: 4.34.9 + optionalDependencies: + '@types/node': 22.13.1 + fsevents: 2.3.3 + tsx: 4.17.0 + yaml: 2.6.1 + + vitest-in-process-pool@2.0.0(vitest@3.0.7): + dependencies: + micromatch: 4.0.8 + vitest: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.1)(@vitest/browser@3.0.7)(@vitest/ui@3.0.7)(msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.6.1) + vitest@2.0.5(@types/node@22.13.1)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5): dependencies: '@ampproject/remapping': 2.3.0 @@ -8177,6 +9043,47 @@ snapshots: - supports-color - terser + vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.1)(@vitest/browser@3.0.7)(@vitest/ui@3.0.7)(msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.6.1): + dependencies: + '@vitest/expect': 3.0.7 + '@vitest/mocker': 3.0.7(msw@2.7.3(@types/node@22.13.1)(typescript@5.5.4))(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1)) + '@vitest/pretty-format': 3.0.7 + '@vitest/runner': 3.0.7 + '@vitest/snapshot': 3.0.7 + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.2.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1) + vite-node: 3.0.7(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 22.13.1 + '@vitest/browser': 3.0.7(@types/node@22.13.1)(playwright@1.42.1)(typescript@5.5.4)(vite@6.2.0(@types/node@22.13.1)(tsx@4.17.0)(yaml@2.6.1))(vitest@3.0.7) + '@vitest/ui': 3.0.7(vitest@3.0.7) + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vm-browserify@1.1.2: {} vscode-uri@3.0.8: {} @@ -8248,7 +9155,10 @@ snapshots: ws@8.13.0: {} - ws@8.18.0: {} + ws@8.18.0: + optional: true + + ws@8.18.1: {} xml-name-validator@4.0.0: {}