From 9e3e379c25fb3238009697ff8d0c106c96fb6f2a Mon Sep 17 00:00:00 2001 From: alina sireneva Date: Sat, 16 Nov 2024 16:00:12 +0300 Subject: [PATCH] chore: moved build to @fuman/build --- .../vite-utils/collect-test-entrypoints.ts | 1 - .config/vite.build.ts | 79 +- .config/vite.bun.ts | 10 - .config/vite.deno.ts | 1 - .npmrc | 1 + build.config.js | 68 + eslint.config.js | 1 + package.json | 9 +- packages/bun/build.config.js | 13 +- packages/bun/package.json | 14 +- packages/bun/src/client.ts | 3 +- packages/bun/src/utils/crypto.ts | 13 +- packages/bun/src/worker.ts | 2 +- packages/convert/package.json | 7 +- packages/convert/src/pyrogram/serialize.ts | 18 +- packages/convert/src/telethon/serialize.ts | 14 +- packages/core/build.config.js | 5 +- packages/core/package.json | 7 +- packages/core/scripts/generate-client.cjs | 8 +- packages/core/src/highlevel/base.test.ts | 2 +- packages/core/src/highlevel/base.ts | 13 +- packages/core/src/highlevel/client.ts | 6 - packages/core/src/highlevel/client.types.ts | 3 +- .../highlevel/managers/app-config-manager.ts | 39 +- packages/core/src/highlevel/methods/_init.ts | 1 + .../core/src/highlevel/methods/auth/run.ts | 4 +- .../src/highlevel/methods/auth/sign-in-qr.ts | 24 +- .../highlevel/methods/files/upload-file.ts | 4 +- .../highlevel/storage/service/current-user.ts | 3 +- .../src/highlevel/storage/service/updates.ts | 6 +- .../core/src/highlevel/types/conversation.ts | 6 +- .../core/src/highlevel/updates/manager.ts | 14 +- .../core/src/highlevel/utils/voice-utils.ts | 4 +- packages/core/src/highlevel/worker/port.ts | 45 +- .../core/src/highlevel/worker/protocol.ts | 2 +- packages/core/src/highlevel/worker/worker.ts | 10 +- packages/core/src/network/auth-key.ts | 2 +- packages/core/src/network/authorization.ts | 6 +- .../core/src/network/config-manager.test.ts | 28 +- packages/core/src/network/config-manager.ts | 20 +- .../core/src/network/middlewares/on-method.ts | 2 +- packages/core/src/network/mtproto-session.ts | 3 +- .../core/src/network/mtproxy/_fake-tls.ts | 32 +- packages/core/src/network/mtproxy/index.ts | 2 +- .../src/network/multi-session-connection.ts | 8 +- packages/core/src/network/network-manager.ts | 27 +- .../core/src/network/session-connection.ts | 3 +- .../network/transports/intermediate.test.ts | 4 +- .../src/network/transports/obfuscated.test.ts | 4 +- packages/core/src/types/utils.ts | 5 +- packages/core/src/utils/crypto/abstract.ts | 4 +- packages/core/src/utils/crypto/password.ts | 2 +- packages/core/src/utils/early-timer.ts | 14 +- packages/core/src/utils/index.ts | 4 - packages/core/src/utils/timers.ts | 62 +- packages/create-bot/build.config.js | 11 +- packages/create-bot/package.json | 4 +- packages/crypto-node/build.config.js | 5 +- packages/crypto-node/package.json | 8 +- packages/deno/build.config.js | 3 +- packages/deno/package.json | 14 +- packages/deno/src/client.ts | 3 +- packages/deno/src/utils/proxies.ts | 1 + packages/deno/src/utils/tcp.ts | 1 + packages/dispatcher/package.json | 3 +- packages/dispatcher/src/dispatcher.ts | 7 +- packages/dispatcher/src/state/service.ts | 4 +- packages/file-id/package.json | 5 +- packages/file-id/src/serialize.ts | 4 +- packages/html-parser/package.json | 3 - packages/i18n/package.json | 9 - packages/markdown-parser/package.json | 3 - packages/node/build.config.js | 12 +- packages/node/package.json | 12 +- packages/node/src/client.ts | 3 +- .../node/src/methods/download-node-stream.ts | 4 +- packages/node/src/utils/normalize-file.ts | 6 +- packages/test/build.config.js | 11 +- packages/test/package.json | 10 +- packages/test/src/client.ts | 10 +- packages/test/src/stub.ts | 7 +- packages/tl-runtime/package.json | 6 +- packages/tl-utils/package.json | 4 - packages/tl-utils/src/patch.ts | 2 +- packages/tl/package.json | 9 +- packages/tl/scripts/build-package.ts | 107 + packages/wasm/build.config.js | 7 +- packages/wasm/package.json | 7 +- packages/wasm/src/index.ts | 1 - packages/web/package.json | 6 +- pnpm-lock.yaml | 3028 ++++++++--------- pnpm-workspace.yaml | 1 - scripts/build-package-jsr.js | 210 -- scripts/build-package-vite.js | 22 - scripts/build-package.js | 117 - scripts/bump-version.js | 86 - scripts/find-updated-packages.js | 111 - scripts/gen-deps-graph.js | 38 - scripts/generate-changelog.js | 74 - scripts/git-utils.js | 76 - scripts/{publish.js => publish.ts} | 106 +- scripts/utils.js | 28 - scripts/validate-deps-versions.js | 59 - 103 files changed, 1926 insertions(+), 3034 deletions(-) create mode 100644 build.config.js create mode 100644 packages/tl/scripts/build-package.ts delete mode 100644 scripts/build-package-jsr.js delete mode 100644 scripts/build-package-vite.js delete mode 100644 scripts/build-package.js delete mode 100644 scripts/bump-version.js delete mode 100644 scripts/find-updated-packages.js delete mode 100644 scripts/gen-deps-graph.js delete mode 100644 scripts/generate-changelog.js delete mode 100644 scripts/git-utils.js rename scripts/{publish.js => publish.ts} (62%) delete mode 100644 scripts/utils.js delete mode 100644 scripts/validate-deps-versions.js diff --git a/.config/vite-utils/collect-test-entrypoints.ts b/.config/vite-utils/collect-test-entrypoints.ts index 0864f5d1..c9a10ab1 100644 --- a/.config/vite-utils/collect-test-entrypoints.ts +++ b/.config/vite-utils/collect-test-entrypoints.ts @@ -6,7 +6,6 @@ import { globSync } from 'glob' export function collectTestEntrypoints(params: { skipPackages: string[], skipTests: string[] }) { const files: string[] = [] - // eslint-disable-next-line no-restricted-globals const packages = resolve(__dirname, '../../packages') const skipTests = params.skipTests.map(path => resolve(packages, path)) diff --git a/.config/vite.build.ts b/.config/vite.build.ts index ffe60001..af6aa900 100644 --- a/.config/vite.build.ts +++ b/.config/vite.build.ts @@ -1,14 +1,14 @@ /// -import { cpSync, existsSync, writeFileSync } from 'node:fs' -import { relative, resolve } from 'node:path' +import { readFileSync } from 'node:fs' +import { join } from 'node:path' import { fileURLToPath } from 'node:url' +// todo +import { fumanBuild } from '@fuman/build/vite' import type { ConfigEnv, UserConfig } from 'vite' import { nodeExternals } from 'rollup-plugin-node-externals' import dts from 'vite-plugin-dts' -import { processPackageJson } from './vite-utils/package-json' - const rootDir = fileURLToPath(new URL('..', import.meta.url)) export default async (env: ConfigEnv): Promise => { @@ -16,15 +16,7 @@ export default async (env: ConfigEnv): Promise => { throw new Error('This config is only for building') } - const { packageJson, entrypoints } = processPackageJson(process.cwd()) - - let customConfig: any - try { - const mod = await import(resolve(process.cwd(), 'build.config.js')) - customConfig = await mod.default() - } catch (e) { - if (e.code !== 'ERR_MODULE_NOT_FOUND') throw e - } + const packageJson = JSON.parse(readFileSync(join(rootDir, 'package.json'), 'utf8')) const CJS_DEPRECATION_WARNING = ` if (typeof globalThis !== 'undefined' && !globalThis._MTCUTE_CJS_DEPRECATION_WARNED) { @@ -34,69 +26,19 @@ if (typeof globalThis !== 'undefined' && !globalThis._MTCUTE_CJS_DEPRECATION_WAR } `.trim() - if (customConfig?.preBuild) { - await customConfig.preBuild() - } - return { build: { rollupOptions: { plugins: [ - ...(customConfig?.rollupPluginsPre ?? []), - nodeExternals({ - builtinsPrefix: 'ignore', - exclude: /^@fuman\//, - }), { - name: 'mtcute-finalize', + name: 'mtcute-cjs-deprecated', renderChunk(code, chunk, options) { if (options.format !== 'cjs') return null return `${CJS_DEPRECATION_WARNING}\n${code}` }, - async closeBundle() { - const packageDir = process.cwd() - const outDir = resolve(packageDir, 'dist') - - customConfig?.finalPackageJson?.(packageJson) - - writeFileSync(resolve(outDir, 'package.json'), JSON.stringify(packageJson, null, 4)) - cpSync(resolve(rootDir, 'LICENSE'), resolve(outDir, 'LICENSE')) - cpSync(resolve(process.cwd(), 'README.md'), resolve(outDir, 'README.md')) - - if (existsSync(resolve(outDir, 'chunks/cjs'))) { - // write {"type":"commonjs"} into chunks/cjs so that node doesn't complain - const cjsFile = resolve(outDir, 'chunks/cjs/package.json') - writeFileSync(cjsFile, JSON.stringify({ type: 'commonjs' }, null, 4)) - } - - for (const [name, entry] of Object.entries(entrypoints)) { - const dTsFile = resolve(outDir, `${name}.d.ts`) - if (!existsSync(dTsFile)) { - const entryTypings = resolve(outDir, entry.replace('/src/', '/').replace(/\.ts$/, '.d.ts')) - if (!existsSync(entryTypings)) continue - - const relativePath = relative(outDir, entryTypings) - writeFileSync(dTsFile, `export * from './${relativePath.replace(/\.d\.ts$/, '.js')}'`) - } - - cpSync(dTsFile, dTsFile.replace(/\.d\.ts$/, '.d.cts')) - } - - await customConfig?.final?.({ outDir, packageDir }) - }, }, - ...(customConfig?.rollupPluginsPost ?? []), ], - output: { - minifyInternalExports: false, - chunkFileNames: 'chunks/[format]/[hash].js', - }, - external: customConfig?.external, - }, - lib: { - entry: entrypoints as any, - formats: customConfig?.buildCjs === false ? ['es'] : ['es', 'cjs'], }, minify: false, outDir: 'dist', @@ -104,10 +46,17 @@ if (typeof globalThis !== 'undefined' && !globalThis._MTCUTE_CJS_DEPRECATION_WAR target: 'es2022', }, plugins: [ - ...(customConfig?.vitePlugins ?? []), + nodeExternals({ + builtinsPrefix: 'ignore', + }), + fumanBuild({ + root: rootDir, + autoSideEffectsFalse: true, + }), dts({ // broken; see https://github.com/qmhc/vite-plugin-dts/issues/321, https://github.com/microsoft/rushstack/issues/3557 // rollupTypes: true, + insertTypesEntry: true, }), ], } diff --git a/.config/vite.bun.ts b/.config/vite.bun.ts index 7f7cfef7..5d1b6327 100644 --- a/.config/vite.bun.ts +++ b/.config/vite.bun.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-restricted-globals */ import { resolve } from 'node:path' import { defineConfig } from 'vite' @@ -78,15 +77,6 @@ export default defineConfig({ return code }, }, - { - name: 'fix-events', - transform(code) { - if (!code.includes('events')) return code - return code.replace(/^import (.+?) from ['"]events['"]/gms, (_, name) => { - return `import ${name} from 'node:events'` - }) - }, - }, { name: 'fix-wasm-load', async transform(code) { diff --git a/.config/vite.deno.ts b/.config/vite.deno.ts index 1d202639..bc7a717c 100644 --- a/.config/vite.deno.ts +++ b/.config/vite.deno.ts @@ -6,7 +6,6 @@ import { fixupCjs } from './vite-utils/fixup-cjs' import { testSetup } from './vite-utils/test-setup-plugin' import { collectTestEntrypoints } from './vite-utils/collect-test-entrypoints' -// eslint-disable-next-line no-restricted-globals const POLYFILLS = resolve(__dirname, 'vite-utils/polyfills-deno.ts') export default defineConfig({ diff --git a/.npmrc b/.npmrc index 41583e36..b98d11ca 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ @jsr:registry=https://npm.jsr.io +@fuman:registry=https://npm.tei.su diff --git a/build.config.js b/build.config.js new file mode 100644 index 00000000..a88b449e --- /dev/null +++ b/build.config.js @@ -0,0 +1,68 @@ +/** @type {import('@fuman/build').RootConfig} */ +export default { + jsr: { + exclude: ['**/*.{test,bench,test-utils}.ts', '**/__fixtures__/**'], + sourceDir: 'src', + transformCode: (path, code) => { + // add shims for node-specific APIs and replace NodeJS.* types + // pretty fragile, but it works for now + // todo: remove this god awfulness and use `declare const` in-place instead + + const typesToReplace = { + 'NodeJS\\.Timeout': 'number', + 'NodeJS\\.Immediate': 'number', + } + const nodeSpecificApis = { + setImmediate: '(cb: (...args: any[]) => void, ...args: any[]) => number', + clearImmediate: '(id: number) => void', + Buffer: + '{ ' + + 'concat: (...args: any[]) => Uint8Array, ' + + 'from: (data: any, encoding?: string) => { toString(encoding?: string): string }, ' + + ' }', + SharedWorker: ['type', 'never'], + WorkerGlobalScope: + '{ ' + + ' new (): typeof WorkerGlobalScope, ' + + ' postMessage: (message: any, transfer?: Transferable[]) => void, ' + + ' addEventListener: (type: "message", listener: (ev: MessageEvent) => void) => void, ' + + ' }', + process: '{ ' + 'hrtime: { bigint: () => bigint }, ' + '}', + } + + for (const [name, decl_] of Object.entries(nodeSpecificApis)) { + if (code.includes(name)) { + if (name === 'Buffer' && code.includes('node:buffer')) continue + + const isType = Array.isArray(decl_) && decl_[0] === 'type' + const decl = isType ? decl_[1] : decl_ + + if (isType) { + code = `declare type ${name} = ${decl};\n${code}` + } else { + code = `declare const ${name}: ${decl};\n${code}` + } + } + } + + for (const [oldType, newType] of Object.entries(typesToReplace)) { + if (code.match(oldType)) { + code = code.replace(new RegExp(oldType, 'g'), newType) + } + } + + return code + }, + }, + versioning: { + exclude: [ + '**/*.test.ts', + '**/*.test-utils.ts', + '**/__fixtures__/**', + '**/*.md', + 'typedoc.cjs', + '{scripts,dist,tests,private}/**', + ], + }, + viteConfig: '.config/vite.build.ts', +} diff --git a/eslint.config.js b/eslint.config.js index ccfaef2e..dccdf0a9 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -87,6 +87,7 @@ export default antfu({ 'ts/switch-exhaustiveness-check': 'off', 'ts/restrict-template-expressions': 'off', 'ts/method-signature-style': 'off', + 'style/indent-binary-ops': 'off', }, }, { ignores: [ diff --git a/package.json b/package.json index a5c8eb44..1f67b102 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "homepage": "https://mtcute.dev", "repository": { "type": "git", - "url": "https://github.com/mtcute/mtcute" + "url": "git+https://github.com/mtcute/mtcute.git" }, "keywords": [ "telegram", @@ -26,7 +26,7 @@ "packages/*" ], "scripts": { - "postinstall": "node scripts/validate-deps-versions.js && node scripts/remove-jsr-sourcefiles.js", + "postinstall": "fuman-build validate-workspace-deps && node scripts/remove-jsr-sourcefiles.js", "test": "vitest --config .config/vite.ts run", "test:dev": "vitest --config .config/vite.ts watch", "test:ui": "vitest --config .config/vite.ts --ui", @@ -42,12 +42,13 @@ "lint:fix": "eslint --fix .", "publish-all": "node scripts/publish.js all", "docs": "typedoc --options .config/typedoc/config.cjs", - "build-package": "node scripts/build-package.js", + "build-package": "tsx scripts/build-package.js", "build-package-vite": "node scripts/build-package-vite.js" }, "devDependencies": { "@antfu/eslint-config": "2.26.0", - "@fuman/jsr": "workspace:^", + "@fuman/build": "0.0.1", + "@fuman/utils": "0.0.1", "@types/deno": "npm:@teidesu/deno-types@1.46.3", "@types/node": "20.10.0", "@types/ws": "8.5.4", diff --git a/packages/bun/build.config.js b/packages/bun/build.config.js index a039873e..ec8ff221 100644 --- a/packages/bun/build.config.js +++ b/packages/bun/build.config.js @@ -1,4 +1,13 @@ +/** @type {import('@fuman/build/vite').CustomBuildConfig} */ export default () => ({ - buildCjs: false, - external: ['bun', 'bun:sqlite'], + viteConfig: { + build: { + lib: { + formats: ['es'], + }, + rollupOptions: { + external: ['bun', 'bun:sqlite'], + }, + }, + }, }) diff --git a/packages/bun/package.json b/packages/bun/package.json index b47f133d..2864fc21 100644 --- a/packages/bun/package.json +++ b/packages/bun/package.json @@ -12,20 +12,20 @@ "./utils.js": "./src/utils.ts", "./methods.js": "./src/methods.ts" }, - "scripts": { - "docs": "typedoc", - "build": "pnpm run -w build-package bun" - }, "dependencies": { "@mtcute/core": "workspace:^", "@mtcute/html-parser": "workspace:^", "@mtcute/markdown-parser": "workspace:^", "@mtcute/wasm": "workspace:^", - "@fuman/bun": "workspace:^", - "@fuman/net": "workspace:^", - "@fuman/io": "workspace:^" + "@fuman/utils": "0.0.1", + "@fuman/bun": "0.0.1", + "@fuman/net": "0.0.1", + "@fuman/io": "0.0.1" }, "devDependencies": { "@mtcute/test": "workspace:^" + }, + "fuman": { + "jsr": "skip" } } diff --git a/packages/bun/src/client.ts b/packages/bun/src/client.ts index 88b0254a..fce0d6ad 100644 --- a/packages/bun/src/client.ts +++ b/packages/bun/src/client.ts @@ -11,6 +11,7 @@ import { BaseTelegramClient as BaseTelegramClientBase, TelegramClient as TelegramClientBase, } from '@mtcute/core/client.js' +import { unknownToError } from '@fuman/utils' import { downloadToFile } from './methods/download-file.js' import { downloadAsNodeStream } from './methods/download-node-stream.js' @@ -127,7 +128,7 @@ export class TelegramClient extends TelegramClientBase { this.start(params) .then(then) - .catch(err => this.emitError(err)) + .catch(err => this.onError.emit(unknownToError(err))) } downloadToFile( diff --git a/packages/bun/src/utils/crypto.ts b/packages/bun/src/utils/crypto.ts index 02fd327c..b1887219 100644 --- a/packages/bun/src/utils/crypto.ts +++ b/packages/bun/src/utils/crypto.ts @@ -12,6 +12,7 @@ import { ige256Encrypt, initSync, } from '@mtcute/wasm' +import { u8 } from '@fuman/utils' // we currently prefer wasm for ctr because bun mostly uses browserify polyfills for node:crypto // which are slow AND semi-broken @@ -52,20 +53,20 @@ export class BunCryptoProvider extends BaseCryptoProvider implements ICryptoProv algo = 'sha512', ): Promise { return new Promise((resolve, reject) => - pbkdf2(password, salt, iterations, keylen, algo, (err: Error | null, buf: Uint8Array) => - err !== null ? reject(err) : resolve(buf)), + pbkdf2(password, salt, iterations, keylen, algo, (err: Error | null, buf: Buffer) => + err !== null ? reject(err) : resolve(buf as unknown as Uint8Array)), ) } sha1(data: Uint8Array): Uint8Array { - const res = new Uint8Array(Bun.SHA1.byteLength) + const res = u8.alloc(Bun.SHA1.byteLength) Bun.SHA1.hash(data, res) return res } sha256(data: Uint8Array): Uint8Array { - const res = new Uint8Array(Bun.SHA256.byteLength) + const res = u8.alloc(Bun.SHA256.byteLength) Bun.SHA256.hash(data, res) return res @@ -90,7 +91,7 @@ export class BunCryptoProvider extends BaseCryptoProvider implements ICryptoProv // telegram accepts both zlib and gzip, but zlib is faster and has less overhead, so we use it here return deflateSync(data, { maxOutputLength: maxSize, - }) + }) as unknown as Uint8Array // hot path, avoid additional runtime checks } catch (e: any) { if (e.code === 'ERR_BUFFER_TOO_LARGE') { @@ -102,7 +103,7 @@ export class BunCryptoProvider extends BaseCryptoProvider implements ICryptoProv } gunzip(data: Uint8Array): Uint8Array { - return gunzipSync(data) + return gunzipSync(data) as unknown as Uint8Array } randomFill(buf: Uint8Array): void { diff --git a/packages/bun/src/worker.ts b/packages/bun/src/worker.ts index a3edd1a3..0d7360cc 100644 --- a/packages/bun/src/worker.ts +++ b/packages/bun/src/worker.ts @@ -14,7 +14,7 @@ import { TelegramWorkerPort as TelegramWorkerPortBase, } from '@mtcute/core/worker.js' -import { BunPlatform } from './platform' +import { BunPlatform } from './platform.js' export type { TelegramWorkerOptions, WorkerCustomMethods } diff --git a/packages/convert/package.json b/packages/convert/package.json index 7a4b2f4d..66a0000f 100644 --- a/packages/convert/package.json +++ b/packages/convert/package.json @@ -8,13 +8,10 @@ "license": "MIT", "sideEffects": false, "exports": "./src/index.ts", - "scripts": { - "build": "pnpm run -w build-package convert" - }, "dependencies": { "@mtcute/core": "workspace:^", - "@fuman/utils": "workspace:^", - "@fuman/net": "workspace:^" + "@fuman/utils": "0.0.1", + "@fuman/net": "0.0.1" }, "devDependencies": { "@mtcute/test": "workspace:^" diff --git a/packages/convert/src/pyrogram/serialize.ts b/packages/convert/src/pyrogram/serialize.ts index 19e1184c..9d073a45 100644 --- a/packages/convert/src/pyrogram/serialize.ts +++ b/packages/convert/src/pyrogram/serialize.ts @@ -1,5 +1,5 @@ import { Long, MtArgumentError } from '@mtcute/core' -import { base64, typed } from '@fuman/utils' +import { base64, typed, u8 } from '@fuman/utils' import type { PyrogramSession } from './types.js' @@ -13,32 +13,32 @@ export function serializePyrogramSession(session: PyrogramSession): string { const userIdLong = Long.fromNumber(session.userId, true) - let u8: Uint8Array + let buf: Uint8Array if (session.apiId === undefined) { // old format - u8 = new Uint8Array(SESSION_STRING_SIZE_OLD) - const dv = typed.toDataView(u8) + buf = u8.alloc(SESSION_STRING_SIZE_OLD) + const dv = typed.toDataView(buf) dv.setUint8(0, session.dcId) dv.setUint8(1, session.isTest ? 1 : 0) - u8.set(session.authKey, 2) + buf.set(session.authKey, 2) dv.setUint32(258, userIdLong.high) dv.setUint32(262, userIdLong.low) dv.setUint8(266, session.isBot ? 1 : 0) } else { - u8 = new Uint8Array(SESSION_STRING_SIZE) - const dv = typed.toDataView(u8) + buf = u8.alloc(SESSION_STRING_SIZE) + const dv = typed.toDataView(buf) dv.setUint8(0, session.dcId) dv.setUint32(1, session.apiId) dv.setUint8(5, session.isTest ? 1 : 0) - u8.set(session.authKey, 6) + buf.set(session.authKey, 6) dv.setUint32(262, userIdLong.high) dv.setUint32(266, userIdLong.low) dv.setUint8(270, session.isBot ? 1 : 0) } - return base64.encode(u8, true) + return base64.encode(buf, true) } diff --git a/packages/convert/src/telethon/serialize.ts b/packages/convert/src/telethon/serialize.ts index 8bb5a27b..133375b3 100644 --- a/packages/convert/src/telethon/serialize.ts +++ b/packages/convert/src/telethon/serialize.ts @@ -1,5 +1,5 @@ import { MtArgumentError } from '@mtcute/core' -import { base64, typed } from '@fuman/utils' +import { base64, typed, u8 } from '@fuman/utils' import { ip } from '@fuman/net' import type { TelethonSession } from './types.js' @@ -10,26 +10,26 @@ export function serializeTelethonSession(session: TelethonSession): string { } const ipSize = session.ipv6 ? 16 : 4 - const u8 = new Uint8Array(259 + ipSize) - const dv = typed.toDataView(u8) + const buf = u8.alloc(259 + ipSize) + const dv = typed.toDataView(buf) dv.setUint8(0, session.dcId) let pos if (session.ipv6) { - u8.subarray(1, 17).set(ip.toBytesV6(ip.parseV6(session.ipAddress))) + buf.subarray(1, 17).set(ip.toBytesV6(ip.parseV6(session.ipAddress))) pos = 17 } else { - u8.subarray(1, 5).set(ip.parseV4(session.ipAddress).parts) + buf.subarray(1, 5).set(ip.parseV4(session.ipAddress).parts) pos = 5 } dv.setUint16(pos, session.port) pos += 2 - u8.set(session.authKey, pos) + buf.set(session.authKey, pos) - let b64 = base64.encode(u8, true) + let b64 = base64.encode(buf, true) while (b64.length % 4 !== 0) b64 += '=' // for some reason telethon uses padding return `1${b64}` diff --git a/packages/core/build.config.js b/packages/core/build.config.js index 430ffc71..957cddcc 100644 --- a/packages/core/build.config.js +++ b/packages/core/build.config.js @@ -5,6 +5,7 @@ import * as fs from 'node:fs' const KNOWN_DECORATORS = ['memoizeGetters', 'makeInspectable'] +/** @type {import('@fuman/build/vite').CustomBuildConfig} */ export default () => { const networkManagerId = fileURLToPath(new URL('./src/network/network-manager.ts', import.meta.url)) const highlevelTypesDir = fileURLToPath(new URL('./src/highlevel/types', import.meta.url)) @@ -18,7 +19,7 @@ export default () => { ) return { - rollupPluginsPre: [ + pluginsPre: [ { name: 'mtcute-core-build-plugin', transform(code, id) { @@ -70,7 +71,7 @@ export default () => { }, }, ], - finalJsr({ outDir }) { + finalizeJsr({ outDir }) { const networkMgrFile = resolve(outDir, 'network/network-manager.ts') const code = fs.readFileSync(networkMgrFile, 'utf8') diff --git a/packages/core/package.json b/packages/core/package.json index 067763f3..4e4e1ff6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -15,14 +15,13 @@ "./methods.js": "./src/highlevel/methods.ts" }, "scripts": { - "build": "pnpm run -w build-package core", "gen-client": "node ./scripts/generate-client.cjs", "gen-updates": "node ./scripts/generate-updates.cjs" }, "dependencies": { - "@fuman/io": "workspace:^", - "@fuman/net": "workspace:^", - "@fuman/utils": "workspace:^", + "@fuman/io": "0.0.1", + "@fuman/net": "0.0.1", + "@fuman/utils": "0.0.1", "@mtcute/file-id": "workspace:^", "@mtcute/tl": "workspace:^", "@mtcute/tl-runtime": "workspace:^", diff --git a/packages/core/scripts/generate-client.cjs b/packages/core/scripts/generate-client.cjs index 53f222cb..abd994d2 100644 --- a/packages/core/scripts/generate-client.cjs +++ b/packages/core/scripts/generate-client.cjs @@ -579,8 +579,10 @@ withParams(params: RpcCallOptions): this\n`) it.type = { kind: ts.SyntaxKind.StringKeyword } } else if ( it.initializer.kind === ts.SyntaxKind.NumericLiteral - || (it.initializer.kind === ts.SyntaxKind.Identifier - && (it.initializer.escapedText === 'NaN' || it.initializer.escapedText === 'Infinity')) + || ( + it.initializer.kind === ts.SyntaxKind.Identifier + && (it.initializer.escapedText === 'NaN' || it.initializer.escapedText === 'Infinity') + ) ) { it.type = { kind: ts.SyntaxKind.NumberKeyword } } else { @@ -723,8 +725,6 @@ withParams(params: RpcCallOptions): this\n`) 'call', 'importSession', 'exportSession', - 'onError', - 'emitError', 'handleClientUpdate', 'getApiCrenetials', 'getPoolSize', diff --git a/packages/core/src/highlevel/base.test.ts b/packages/core/src/highlevel/base.test.ts index 02df3604..5d509110 100644 --- a/packages/core/src/highlevel/base.test.ts +++ b/packages/core/src/highlevel/base.test.ts @@ -8,7 +8,7 @@ describe('BaseTelegramClient', () => { const session = await client.exportSession() expect(session).toMatchInlineSnapshot( - `"AwQAAAAXAgIADjE0OS4xNTQuMTY3LjUwALsBAAAXAgICDzE0OS4xNTQuMTY3LjIyMrsBAAD-AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"`, + '"AwQAAAAXAgIADjE0OS4xNTQuMTY3LjUwALsBAAAXAgICDzE0OS4xNTQuMTY3LjIyMrsBAAD-AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"', ) }) }) diff --git a/packages/core/src/highlevel/base.ts b/packages/core/src/highlevel/base.ts index b4b8f62c..ffb8904a 100644 --- a/packages/core/src/highlevel/base.ts +++ b/packages/core/src/highlevel/base.ts @@ -290,18 +290,7 @@ export class BaseTelegramClient implements ITelegramClient { }) } - /** - * Register an error handler for the client - * - * @param handler Error handler. - */ - onError(handler: (err: unknown) => void): void { - this.mt.onError(handler) - } - - emitError(err: unknown): void { - this.mt.emitError(err) - } + onError: Emitter = new Emitter() handleClientUpdate(updates: tl.TypeUpdates, noDispatch?: boolean): void { this.updates?.handleClientUpdate(updates, noDispatch) diff --git a/packages/core/src/highlevel/client.ts b/packages/core/src/highlevel/client.ts index 49d46408..cbb4ff1a 100644 --- a/packages/core/src/highlevel/client.ts +++ b/packages/core/src/highlevel/client.ts @@ -6584,12 +6584,6 @@ TelegramClient.prototype.importSession = function (...args) { TelegramClient.prototype.exportSession = function (...args) { return this._client.exportSession(...args) } -TelegramClient.prototype.onError = function (...args) { - return this._client.onError(...args) -} -TelegramClient.prototype.emitError = function (...args) { - return this._client.emitError(...args) -} TelegramClient.prototype.handleClientUpdate = function (...args) { return this._client.handleClientUpdate(...args) } diff --git a/packages/core/src/highlevel/client.types.ts b/packages/core/src/highlevel/client.types.ts index cd014f5a..531451e4 100644 --- a/packages/core/src/highlevel/client.types.ts +++ b/packages/core/src/highlevel/client.types.ts @@ -52,13 +52,12 @@ export interface ITelegramClient { ): Promise importSession(session: string | StringSessionData, force?: boolean): Promise exportSession(): Promise - onError(handler: (err: unknown) => void): void - emitError(err: unknown): void handleClientUpdate(updates: tl.TypeUpdates, noDispatch?: boolean): void onServerUpdate: Emitter onRawUpdate: Emitter onConnectionState: Emitter + onError: Emitter getApiCrenetials(): Promise<{ id: number, hash: string }> // todo - this is only used for file dl/ul, which should probably be moved diff --git a/packages/core/src/highlevel/managers/app-config-manager.ts b/packages/core/src/highlevel/managers/app-config-manager.ts index fe1bfcdd..101c5bf0 100644 --- a/packages/core/src/highlevel/managers/app-config-manager.ts +++ b/packages/core/src/highlevel/managers/app-config-manager.ts @@ -1,36 +1,41 @@ import type { tl } from '@mtcute/tl' +import { AsyncResource, asNonNull } from '@fuman/utils' import { MtTypeAssertionError } from '../../types/errors.js' -import { Reloadable } from '../../utils/reloadable.js' import { tlJsonToJson } from '../../utils/tl-json.js' import type { BaseTelegramClient } from '../base.js' import type { AppConfigSchema } from '../types/misc/app-config.js' export class AppConfigManager { - constructor(private client: BaseTelegramClient) {} + private _resource + constructor(private client: BaseTelegramClient) { + this._resource = new AsyncResource({ + fetcher: async ({ current }) => { + const res = await this.client.call({ + _: 'help.getAppConfig', + hash: current?.hash ?? 0, + }) - private _reloadable = new Reloadable({ - reload: this._reload.bind(this), - getExpiresAt: () => 3_600_000, - disableAutoReload: true, - }) + if (res._ === 'help.appConfigNotModified') { + return { + data: asNonNull(current), + expiresIn: 3_600_000, + } + } - private async _reload(old?: tl.help.RawAppConfig) { - const res = await this.client.call({ - _: 'help.getAppConfig', - hash: old?.hash ?? 0, + return { + data: res, + expiresIn: 3_600_000, + } + }, }) - - if (res._ === 'help.appConfigNotModified') return old! - - return res } private _object?: AppConfigSchema async get(): Promise { - if (!this._reloadable.isStale && this._object) return this._object + if (!this._resource.isStale && this._object) return this._object - const obj = tlJsonToJson((await this._reloadable.get()).config) + const obj = tlJsonToJson((await this._resource.get()).config) if (!obj || typeof obj !== 'object') { throw new MtTypeAssertionError('appConfig', 'object', typeof obj) diff --git a/packages/core/src/highlevel/methods/_init.ts b/packages/core/src/highlevel/methods/_init.ts index a9c1b44a..2d0e4a3d 100644 --- a/packages/core/src/highlevel/methods/_init.ts +++ b/packages/core/src/highlevel/methods/_init.ts @@ -67,6 +67,7 @@ function _initializeClient(this: TelegramClient, opts: TelegramClientOptions) { Object.defineProperty(this, 'onServerUpdate', { value: this._client.onServerUpdate }) Object.defineProperty(this, 'onRawUpdate', { value: this._client.onServerUpdate }) Object.defineProperty(this, 'onConnectionState', { value: this._client.onConnectionState }) + Object.defineProperty(this, 'onError', { value: this._client.onError }) if (!opts.disableUpdates) { const skipConversationUpdates = opts.skipConversationUpdates ?? true diff --git a/packages/core/src/highlevel/methods/auth/run.ts b/packages/core/src/highlevel/methods/auth/run.ts index a1e8e33c..f4649f19 100644 --- a/packages/core/src/highlevel/methods/auth/run.ts +++ b/packages/core/src/highlevel/methods/auth/run.ts @@ -1,3 +1,5 @@ +import { unknownToError } from '@fuman/utils' + import type { ITelegramClient } from '../../client.types.js' import type { User } from '../../types/index.js' @@ -22,5 +24,5 @@ export function run( ): void { start(client, params) .then(then) - .catch(err => client.emitError(err)) + .catch(err => client.onError.emit(unknownToError(err))) } diff --git a/packages/core/src/highlevel/methods/auth/sign-in-qr.ts b/packages/core/src/highlevel/methods/auth/sign-in-qr.ts index 15307768..b0be5a39 100644 --- a/packages/core/src/highlevel/methods/auth/sign-in-qr.ts +++ b/packages/core/src/highlevel/methods/auth/sign-in-qr.ts @@ -4,10 +4,11 @@ import { Deferred, base64 } from '@fuman/utils' import type { MaybePromise } from '../../../types/utils.js' import { sleepWithAbort } from '../../../utils/misc-utils.js' import { assertTypeIs } from '../../../utils/type-assertions.js' -import type { ITelegramClient, ServerUpdateHandler } from '../../client.types.js' +import type { ITelegramClient } from '../../client.types.js' import type { MaybeDynamic } from '../../types/index.js' import { User } from '../../types/index.js' import { resolveMaybeDynamic } from '../../utils/misc-utils.js' +import type { RawUpdateInfo } from '../../updates/types.js' import { checkPassword } from './check-password.js' @@ -53,26 +54,19 @@ export async function signInQr( let waiter: Deferred | undefined - // crutch – we need to wait for the updateLoginToken update. - // we replace the server update handler temporarily because: - // - updates manager may be disabled, in which case `onUpdate` will never be called - // - even if the updates manager is enabled, it won't start until we're logged in - // - // todo: how can we make this more clean? - const originalHandler = client.getServerUpdateHandler() - - const onUpdate: ServerUpdateHandler = (upd) => { - if (upd._ === 'updateShort' && upd.update._ === 'updateLoginToken') { + // todo: we should probably make this into an await-able function + const onUpdate = ({ update }: RawUpdateInfo) => { + if (update._ === 'updateLoginToken') { onQrScanned?.() waiter?.resolve() - client.onServerUpdate(originalHandler) + client.onRawUpdate.remove(onUpdate) } } - client.onServerUpdate(onUpdate) + client.onRawUpdate.add(onUpdate) abortSignal?.addEventListener('abort', () => { - client.onServerUpdate(originalHandler) + client.onRawUpdate.remove(onUpdate) waiter?.reject(abortSignal.reason) }) @@ -180,6 +174,6 @@ export async function signInQr( return new User(self) } finally { - client.onServerUpdate(originalHandler) + client.onRawUpdate.remove(onUpdate) } } diff --git a/packages/core/src/highlevel/methods/files/upload-file.ts b/packages/core/src/highlevel/methods/files/upload-file.ts index f29b5211..7fe5aeb3 100644 --- a/packages/core/src/highlevel/methods/files/upload-file.ts +++ b/packages/core/src/highlevel/methods/files/upload-file.ts @@ -1,6 +1,6 @@ import type { tl } from '@mtcute/tl' import type { IReadable } from '@fuman/io' -import { read } from '@fuman/io' +import { read, webReadableToFuman } from '@fuman/io' import { AsyncLock } from '@fuman/utils' import { MtArgumentError } from '../../../types/errors.js' @@ -175,7 +175,7 @@ export async function uploadFile( } if (file instanceof ReadableStream) { - file = read.async.fromWeb(file) + file = webReadableToFuman(file) } else if (!(typeof file === 'object' && 'read' in file)) { // IReadable throw new MtArgumentError('Could not convert input `file` to stream!') } diff --git a/packages/core/src/highlevel/storage/service/current-user.ts b/packages/core/src/highlevel/storage/service/current-user.ts index 9d3cf159..a5ff38b2 100644 --- a/packages/core/src/highlevel/storage/service/current-user.ts +++ b/packages/core/src/highlevel/storage/service/current-user.ts @@ -1,5 +1,6 @@ import type { tl } from '@mtcute/tl' import { TlBinaryReader, TlBinaryWriter, TlSerializationCounter } from '@mtcute/tl-runtime' +import { u8 } from '@fuman/utils' import type { IKeyValueRepository } from '../../../storage/repository/key-value.js' import type { ServiceOptions } from '../../../storage/service/base.js' @@ -18,7 +19,7 @@ export interface CurrentUserInfo { const KV_CURRENT_USER = 'current_user' function serialize(info: CurrentUserInfo | null): Uint8Array { - if (!info) return new Uint8Array(0) + if (!info) return u8.alloc(0) const hasUsernames = info.usernames.length > 0 diff --git a/packages/core/src/highlevel/storage/service/updates.ts b/packages/core/src/highlevel/storage/service/updates.ts index 38181a31..2a475102 100644 --- a/packages/core/src/highlevel/storage/service/updates.ts +++ b/packages/core/src/highlevel/storage/service/updates.ts @@ -1,4 +1,4 @@ -import { typed } from '@fuman/utils' +import { typed, u8 } from '@fuman/utils' import type { IKeyValueRepository } from '../../../storage/repository/key-value.js' import type { ServiceOptions } from '../../../storage/service/base.js' @@ -28,7 +28,7 @@ export class UpdatesStateService extends BaseService { } private async _setInt(key: string, val: number): Promise { - const buf = new Uint8Array(4) + const buf = u8.alloc(4) typed.toDataView(buf).setInt32(0, val, true) await this._kv.set(key, buf) @@ -73,7 +73,7 @@ export class UpdatesStateService extends BaseService { } async setChannelPts(channelId: number, pts: number): Promise { - const buf = new Uint8Array(4) + const buf = u8.alloc(4) typed.toDataView(buf).setUint32(0, pts, true) await this._kv.set(KV_CHANNEL_PREFIX + channelId, buf) diff --git a/packages/core/src/highlevel/types/conversation.ts b/packages/core/src/highlevel/types/conversation.ts index c99fe3b6..8eb2e2ee 100644 --- a/packages/core/src/highlevel/types/conversation.ts +++ b/packages/core/src/highlevel/types/conversation.ts @@ -1,5 +1,5 @@ import type { tl } from '@mtcute/tl' -import { AsyncLock, Deferred, Deque, timers } from '@fuman/utils' +import { AsyncLock, Deferred, Deque, timers, unknownToError } from '@fuman/utils' import { MtArgumentError, MtTimeoutError } from '../../types/errors.js' import type { MaybePromise } from '../../types/utils.js' @@ -564,7 +564,7 @@ export class Conversation { this._queuedNewMessage.popFront() } } catch (e: unknown) { - this.client.emitError(e) + this.client.onError.emit(unknownToError(e)) } this._lastMessage = this._lastReceivedMessage = msg.id @@ -594,7 +594,7 @@ export class Conversation { this._pendingEditMessage.delete(msg.id) } })().catch((e) => { - this.client.emitError(e) + this.client.onError.emit(unknownToError(e)) }) } diff --git a/packages/core/src/highlevel/updates/manager.ts b/packages/core/src/highlevel/updates/manager.ts index e73b46db..ee2c2e08 100644 --- a/packages/core/src/highlevel/updates/manager.ts +++ b/packages/core/src/highlevel/updates/manager.ts @@ -1,6 +1,6 @@ import { tl } from '@mtcute/tl' import Long from 'long' -import { AsyncLock, ConditionVariable, Deque, timers } from '@fuman/utils' +import { AsyncLock, ConditionVariable, Deque, timers, unknownToError } from '@fuman/utils' import { MtArgumentError } from '../../types/errors.js' import type { MaybePromise } from '../../types/utils.js' @@ -195,7 +195,7 @@ export class UpdatesManager { notifyLoggedIn(self: CurrentUserInfo): void { this.auth = self - this.startLoop().catch(err => this.client.emitError(err)) + this.startLoop().catch(err => this.client.onError.emit(unknownToError(err))) } notifyLoggedOut(): void { @@ -238,7 +238,7 @@ export class UpdatesManager { this.updatesLoopActive = true timers.clearInterval(this.keepAliveInterval) this.keepAliveInterval = timers.setInterval(this._onKeepAlive, KEEP_ALIVE_INTERVAL) - this._loop().catch(err => this.client.emitError(err)) + this._loop().catch(err => this.client.onError.emit(unknownToError(err))) if (this.catchUpOnStart) { this.catchUp() @@ -1245,20 +1245,20 @@ export class UpdatesManager { // we just needed to apply new pts values return case 'updateDcOptions': { - const config = client.mt.network.config.getNow() + const config = client.mt.network.config.getCached() if (config) { client.mt.network.config.setData({ ...config, dcOptions: upd.dcOptions, - }) + }, config.expires * 1000) } else { - client.mt.network.config.update(true).catch(err => client.emitError(err)) + client.mt.network.config.update(true).catch(err => client.onError.emit(unknownToError(err))) } break } case 'updateConfig': - client.mt.network.config.update(true).catch(err => client.emitError(err)) + client.mt.network.config.update(true).catch(err => client.onError.emit(unknownToError(err))) break case 'updateUserName': // todo diff --git a/packages/core/src/highlevel/utils/voice-utils.ts b/packages/core/src/highlevel/utils/voice-utils.ts index 8243efee..7162671c 100644 --- a/packages/core/src/highlevel/utils/voice-utils.ts +++ b/packages/core/src/highlevel/utils/voice-utils.ts @@ -1,4 +1,4 @@ -import { typed } from '@fuman/utils' +import { typed, u8 } from '@fuman/utils' /** * Decode 5-bit encoded voice message waveform into @@ -49,7 +49,7 @@ export function decodeWaveform(wf: Uint8Array): number[] { export function encodeWaveform(wf: number[]): Uint8Array { const bitsCount = wf.length * 5 const bytesCount = ~~((bitsCount + 7) / 8) - const result = new Uint8Array(bytesCount + 1) + const result = u8.alloc(bytesCount + 1) const dv = typed.toDataView(result) // Write each 0-31 unsigned char as 5 bit to result. diff --git a/packages/core/src/highlevel/worker/port.ts b/packages/core/src/highlevel/worker/port.ts index 8c2688ba..3b321eb4 100644 --- a/packages/core/src/highlevel/worker/port.ts +++ b/packages/core/src/highlevel/worker/port.ts @@ -1,18 +1,20 @@ import type { tl } from '@mtcute/tl' +import { Emitter } from '@fuman/utils' import type { RpcCallOptions } from '../../network/network-manager.js' import type { MustEqual } from '../../types/utils.js' import { LogManager } from '../../utils/logger.js' -import type { ConnectionState, ITelegramClient, ServerUpdateHandler } from '../client.types.js' +import type { ConnectionState, ITelegramClient } from '../client.types.js' import { PeersIndex } from '../types/peers/peers-index.js' -import type { RawUpdateHandler } from '../updates/types.js' import type { ICorePlatform } from '../../types/platform' +import type { RawUpdateInfo } from '../updates/types.js' import { AppConfigManagerProxy } from './app-config.js' import { WorkerInvoker } from './invoker.js' import type { ClientMessageHandler, SendFn, SomeWorker, WorkerCustomMethods } from './protocol.js' import { deserializeResult } from './protocol.js' import { TelegramStorageProxy } from './storage.js' +import { deserializeError } from './errors.js' export interface TelegramWorkerPortOptions { worker: SomeWorker @@ -104,33 +106,10 @@ export abstract class TelegramWorkerPort imp abstract connectToWorker(worker: SomeWorker, handler: ClientMessageHandler): [SendFn, () => void] - private _serverUpdatesHandler: ServerUpdateHandler = () => {} - onServerUpdate(handler: ServerUpdateHandler): void { - this._serverUpdatesHandler = handler - } - - getServerUpdateHandler(): ServerUpdateHandler { - return this._serverUpdatesHandler - } - - private _errorHandler: (err: unknown) => void = () => {} - onError(handler: (err: unknown) => void): void { - this._errorHandler = handler - } - - emitError(err: unknown): void { - this._errorHandler(err) - } - - private _updateHandler: RawUpdateHandler = () => {} - onUpdate(handler: RawUpdateHandler): void { - this._updateHandler = handler - } - - private _connectionStateHandler: (state: ConnectionState) => void = () => {} - onConnectionState(handler: (state: ConnectionState) => void): void { - this._connectionStateHandler = handler - } + onServerUpdate: Emitter = new Emitter() + onRawUpdate: Emitter = new Emitter() + onConnectionState: Emitter = new Emitter() + onError: Emitter = new Emitter() private _onMessage: ClientMessageHandler = (message) => { switch (message.type) { @@ -138,22 +117,22 @@ export abstract class TelegramWorkerPort imp this.log.handler(message.color, message.level, message.tag, message.fmt, message.args) break case 'server_update': - this._serverUpdatesHandler(deserializeResult(message.update)) + this.onServerUpdate.emit(deserializeResult(message.update)) break case 'conn_state': - this._connectionStateHandler(message.state) + this.onConnectionState.emit(message.state) break case 'update': { const peers = new PeersIndex(deserializeResult(message.users), deserializeResult(message.chats)) peers.hasMin = message.hasMin - this._updateHandler(deserializeResult(message.update), peers) + this.onRawUpdate.emit({ update: deserializeResult(message.update), peers }) break } case 'result': this._invoker.handleResult(message) break case 'error': - this.emitError(message.error) + this.onError.emit(deserializeError(message.error)) break case 'stop': this._abortController.abort() diff --git a/packages/core/src/highlevel/worker/protocol.ts b/packages/core/src/highlevel/worker/protocol.ts index b4a6d5e0..346302d8 100644 --- a/packages/core/src/highlevel/worker/protocol.ts +++ b/packages/core/src/highlevel/worker/protocol.ts @@ -31,7 +31,7 @@ export type WorkerOutboundMessage = chats: SerializedResult> hasMin: boolean } - | { type: 'error', error: unknown } + | { type: 'error', error: SerializedError } | { type: 'stop' } | { type: 'conn_state', state: ConnectionState } | { diff --git a/packages/core/src/highlevel/worker/worker.ts b/packages/core/src/highlevel/worker/worker.ts index c2acaa55..03c5fda0 100644 --- a/packages/core/src/highlevel/worker/worker.ts +++ b/packages/core/src/highlevel/worker/worker.ts @@ -55,13 +55,13 @@ export abstract class TelegramWorker { fmt, args, }) - client.onError(err => + client.onError.add(err => this.broadcast({ type: 'error', - error: err, + error: serializeError(err), }), ) - client.onConnectionState(state => + client.onConnectionState.add(state => this.broadcast({ type: 'conn_state', state, @@ -70,7 +70,7 @@ export abstract class TelegramWorker { client.stopSignal.addEventListener('abort', () => this.broadcast({ type: 'stop' })) if (client.updates) { - client.onUpdate((update, peers) => + client.onRawUpdate.add(({ update, peers }) => this.broadcast({ type: 'update', update: serializeResult(update), @@ -80,7 +80,7 @@ export abstract class TelegramWorker { }), ) } else { - client.onServerUpdate(update => + client.onServerUpdate.add(update => this.broadcast({ type: 'server_update', update: serializeResult(update), diff --git a/packages/core/src/network/auth-key.ts b/packages/core/src/network/auth-key.ts index 323d9de8..40733e02 100644 --- a/packages/core/src/network/auth-key.ts +++ b/packages/core/src/network/auth-key.ts @@ -44,7 +44,7 @@ export class AuthKey { let padding = (16 /* header size */ + message.length + 12) /* min padding */ % 16 padding = 12 + (padding ? 16 - padding : 0) - const buf = new Uint8Array(16 + message.length + padding) + const buf = u8.alloc(16 + message.length + padding) const dv = typed.toDataView(buf) dv.setInt32(0, serverSalt.low, true) diff --git a/packages/core/src/network/authorization.ts b/packages/core/src/network/authorization.ts index 651a0cf1..822f5bb1 100644 --- a/packages/core/src/network/authorization.ts +++ b/packages/core/src/network/authorization.ts @@ -128,13 +128,13 @@ function rsaPad(data: Uint8Array, crypto: ICryptoProvider, key: TlPublicKey): Ui throw new MtArgumentError('Failed to pad: too big data') } - const dataPadded = new Uint8Array(192) + const dataPadded = u8.alloc(192) dataPadded.set(data, 0) crypto.randomFill(dataPadded.subarray(data.length)) data = dataPadded for (;;) { - const aesIv = new Uint8Array(32) + const aesIv = u8.alloc(32) const aesKey = crypto.randomBytes(32) @@ -417,7 +417,7 @@ export async function doAuthorization( } if (dhGen._ === 'mt_dh_gen_retry') { - const expectedHash = crypto.sha1(u8.concat3(newNonce, new Uint8Array([2]), authKeyAuxHash)) + const expectedHash = crypto.sha1(u8.concat3(newNonce, [2], authKeyAuxHash)) if (!typed.equal(expectedHash.subarray(4, 20), dhGen.newNonceHash2)) { throw new MtSecurityError('Step 4: invalid retry nonce hash from server') diff --git a/packages/core/src/network/config-manager.test.ts b/packages/core/src/network/config-manager.test.ts index 56ea4bb7..1b397339 100644 --- a/packages/core/src/network/config-manager.test.ts +++ b/packages/core/src/network/config-manager.test.ts @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { createStub } from '@mtcute/test' import type { tl } from '@mtcute/tl' +import type { AsyncResourceContext } from '@fuman/utils' import { ConfigManager } from './config-manager.js' @@ -9,13 +10,20 @@ describe('ConfigManager', () => { expires: 300, }) const getConfig = vi.fn() + const fakePerfNow = vi.fn(() => Date.now()) beforeEach(() => { vi.useFakeTimers() vi.setSystemTime(0) + vi.stubGlobal('performance', { + now: fakePerfNow, + }) getConfig.mockClear().mockImplementation(() => Promise.resolve(config)) }) - afterEach(() => void vi.useRealTimers()) + afterEach(() => { + vi.useRealTimers() + vi.unstubAllGlobals() + }) it('should fetch initial config', async () => { const cm = new ConfigManager(getConfig) @@ -24,7 +32,7 @@ describe('ConfigManager', () => { expect(getConfig).toHaveBeenCalledTimes(1) expect(fetchedConfig).toEqual(config) - expect(cm.getNow()).toEqual(config) + expect(cm.getCached()).toEqual(config) }) it('should automatically update config', async () => { @@ -47,7 +55,7 @@ describe('ConfigManager', () => { const cm = new ConfigManager(getConfig) expect(cm.isStale).toBe(true) - cm.setData(config) + cm.setData(config, config.expires * 1000) expect(cm.isStale).toBe(false) vi.setSystemTime(300_000) @@ -84,15 +92,23 @@ describe('ConfigManager', () => { it('should call listeners on config update', async () => { const cm = new ConfigManager(getConfig) const listener = vi.fn() - cm.onReload(listener) + cm.onUpdated.add(listener) + await cm.update() + const call = structuredClone(listener.mock.calls[0][0]) as AsyncResourceContext vi.setSystemTime(300_000) - cm.onReload(listener) + cm.onUpdated.remove(listener) await cm.update() expect(listener).toHaveBeenCalledOnce() - expect(listener).toHaveBeenCalledWith(config) + expect(call).toEqual({ + abort: {}, + current: config, + currentExpiresAt: 300_000, + currentFetchedAt: 0, + isBackground: false, + }) }) it('should correctly destroy', async () => { diff --git a/packages/core/src/network/config-manager.ts b/packages/core/src/network/config-manager.ts index 839d5e08..287b604e 100644 --- a/packages/core/src/network/config-manager.ts +++ b/packages/core/src/network/config-manager.ts @@ -1,18 +1,24 @@ +import { AsyncResource } from '@fuman/utils' import type { tl } from '@mtcute/tl' -import { Reloadable } from '../utils/reloadable.js' - /** * Config manager is responsible for keeping * the current server configuration up-to-date * and providing methods to find the best DC * option for the current session. */ -export class ConfigManager extends Reloadable { +export class ConfigManager extends AsyncResource { constructor(update: () => Promise) { super({ - reload: update, - getExpiresAt: data => data.expires * 1000, + fetcher: async () => { + const res = await update() + + return { + data: res, + expiresIn: res.expires * 1000 - Date.now(), + } + }, + autoReload: true, }) } @@ -26,7 +32,9 @@ export class ConfigManager extends Reloadable { }): Promise { if (this.isStale) await this.update() - const options = this._data!.dcOptions.filter((opt) => { + const data = this.getCached()! + + const options = data.dcOptions.filter((opt) => { if (opt.tcpoOnly) return false // unsupported if (opt.ipv6 && !params.allowIpv6) return false if (opt.mediaOnly && !params.allowMedia) return false diff --git a/packages/core/src/network/middlewares/on-method.ts b/packages/core/src/network/middlewares/on-method.ts index cebc7ba9..f23ab296 100644 --- a/packages/core/src/network/middlewares/on-method.ts +++ b/packages/core/src/network/middlewares/on-method.ts @@ -1,6 +1,6 @@ import type { tl } from '@mtcute/tl' +import type { Middleware } from '@fuman/utils' -import type { Middleware } from '../../utils/composer.js' import type { RpcCallMiddleware, RpcCallMiddlewareContext } from '../network-manager.js' /** diff --git a/packages/core/src/network/mtproto-session.ts b/packages/core/src/network/mtproto-session.ts index a48eb146..7f86a566 100644 --- a/packages/core/src/network/mtproto-session.ts +++ b/packages/core/src/network/mtproto-session.ts @@ -2,7 +2,7 @@ import Long from 'long' import type { mtp, tl } from '@mtcute/tl' import type { TlBinaryWriter, TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime' import { TlSerializationCounter } from '@mtcute/tl-runtime' -import { type Deferred, Deque, LruSet } from '@fuman/utils' +import { type Deferred, Deque, LruSet, timers } from '@fuman/utils' import { MtcuteError } from '../types/index.js' import type { @@ -16,7 +16,6 @@ import { compareLongs, getRandomInt, randomLong, - timers, } from '../utils/index.js' import { AuthKey } from './auth-key.js' diff --git a/packages/core/src/network/mtproxy/_fake-tls.ts b/packages/core/src/network/mtproxy/_fake-tls.ts index 52afd11a..9e482631 100644 --- a/packages/core/src/network/mtproxy/_fake-tls.ts +++ b/packages/core/src/network/mtproxy/_fake-tls.ts @@ -47,32 +47,32 @@ function _isQuadraticResidue(a: bigint): boolean { } function executeTlsOperations(h: TlsHelloWriter): void { - h.string(new Uint8Array([0x16, 0x03, 0x01, 0x02, 0x00, 0x01, 0x00, 0x01, 0xFC, 0x03, 0x03])) + h.string([0x16, 0x03, 0x01, 0x02, 0x00, 0x01, 0x00, 0x01, 0xFC, 0x03, 0x03]) h.zero(32) - h.string(new Uint8Array([0x20])) + h.string([0x20]) h.random(32) - h.string(new Uint8Array([0x00, 0x20])) + h.string([0x00, 0x20]) h.grease(0) /* eslint-disable antfu/consistent-list-newline */ - h.string(new Uint8Array([ + h.string([ 0x13, 0x01, 0x13, 0x02, 0x13, 0x03, 0xC0, 0x2B, 0xC0, 0x2F, 0xC0, 0x2C, 0xC0, 0x30, 0xCC, 0xA9, 0xCC, 0xA8, 0xC0, 0x13, 0xC0, 0x14, 0x00, 0x9C, 0x00, 0x9D, 0x00, 0x2F, 0x00, 0x35, 0x01, 0x00, 0x01, 0x93, - ])) + ]) h.grease(2) - h.string(new Uint8Array([0x00, 0x00, 0x00, 0x00])) + h.string([0x00, 0x00, 0x00, 0x00]) h.beginScope() h.beginScope() - h.string(new Uint8Array([0x00])) + h.string([0x00]) h.beginScope() h.domain() h.endScope() h.endScope() h.endScope() - h.string(new Uint8Array([0x00, 0x17, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x08])) + h.string([0x00, 0x17, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x08]) h.grease(4) h.string( - new Uint8Array([ + [ 0x00, 0x1D, 0x00, 0x17, 0x00, 0x18, 0x00, 0x0B, 0x00, 0x02, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0E, 0x00, 0x0C, 0x02, 0x68, 0x32, 0x08, 0x68, 0x74, 0x74, 0x70, 0x2F, 0x31, 0x2E, 0x31, 0x00, 0x05, @@ -80,16 +80,16 @@ function executeTlsOperations(h: TlsHelloWriter): void { 0x10, 0x04, 0x03, 0x08, 0x04, 0x04, 0x01, 0x05, 0x03, 0x08, 0x05, 0x05, 0x01, 0x08, 0x06, 0x06, 0x01, 0x00, 0x12, 0x00, 0x00, 0x00, 0x33, 0x00, 0x2B, 0x00, 0x29, - ]), + ], ) h.grease(4) - h.string(new Uint8Array([0x00, 0x01, 0x00, 0x00, 0x1D, 0x00, 0x20])) + h.string([0x00, 0x01, 0x00, 0x00, 0x1D, 0x00, 0x20]) h.key() - h.string(new Uint8Array([0x00, 0x2D, 0x00, 0x02, 0x01, 0x01, 0x00, 0x2B, 0x00, 0x0B, 0x0A])) + h.string([0x00, 0x2D, 0x00, 0x02, 0x01, 0x01, 0x00, 0x2B, 0x00, 0x0B, 0x0A]) h.grease(6) - h.string(new Uint8Array([0x03, 0x04, 0x03, 0x03, 0x03, 0x02, 0x03, 0x01, 0x00, 0x1B, 0x00, 0x03, 0x02, 0x00, 0x02])) + h.string([0x03, 0x04, 0x03, 0x03, 0x03, 0x02, 0x03, 0x01, 0x00, 0x1B, 0x00, 0x03, 0x02, 0x00, 0x02]) h.grease(3) - h.string(new Uint8Array([0x00, 0x01, 0x00, 0x00, 0x15])) + h.string([0x00, 0x01, 0x00, 0x00, 0x15]) /* eslint-enable */ } @@ -124,12 +124,12 @@ class TlsHelloWriter { domain: Uint8Array, ) { this._domain = domain - this.buf = new Uint8Array(size) + this.buf = u8.alloc(size) this.dv = typed.toDataView(this.buf) this._grease = initGrease(this.crypto, 7) } - string(buf: Uint8Array) { + string(buf: ArrayLike) { this.buf.set(buf, this.pos) this.pos += buf.length } diff --git a/packages/core/src/network/mtproxy/index.ts b/packages/core/src/network/mtproxy/index.ts index 17c774bb..d85ecaf6 100644 --- a/packages/core/src/network/mtproxy/index.ts +++ b/packages/core/src/network/mtproxy/index.ts @@ -167,7 +167,7 @@ export abstract class BaseMtProxyTransport implements TelegramTransport { u8.concat([ helloRand, respBuf.slice(0, 11), - new Uint8Array(32), + u8.alloc(32), respBuf.slice(11 + 32), ]), this._rawSecret, diff --git a/packages/core/src/network/multi-session-connection.ts b/packages/core/src/network/multi-session-connection.ts index b3f820f7..93797a3d 100644 --- a/packages/core/src/network/multi-session-connection.ts +++ b/packages/core/src/network/multi-session-connection.ts @@ -1,5 +1,5 @@ import type { mtp, tl } from '@mtcute/tl' -import { Deferred, Emitter } from '@fuman/utils' +import { Deferred, Emitter, unknownToError } from '@fuman/utils' import type { Logger } from '../utils/index.js' @@ -151,7 +151,7 @@ export class MultiSessionConnection { }) }) .catch((err) => { - this.onError.emit(err) + this.onError.emit(unknownToError(err)) }) } @@ -342,8 +342,8 @@ export class MultiSessionConnection { } } - changeTransport(factory: TelegramTransport): void { - this._connections.forEach(conn => conn.changeTransport(factory)) + async changeTransport(factory: TelegramTransport): Promise { + await Promise.all(this._connections.map(conn => conn.changeTransport(factory))) } getPoolSize(): number { diff --git a/packages/core/src/network/network-manager.ts b/packages/core/src/network/network-manager.ts index b829be97..ecf879ae 100644 --- a/packages/core/src/network/network-manager.ts +++ b/packages/core/src/network/network-manager.ts @@ -2,12 +2,11 @@ import type { mtp, tl } from '@mtcute/tl' import type { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime' import type Long from 'long' import { type ReconnectionStrategy, defaultReconnectionStrategy } from '@fuman/net' -import { Deferred } from '@fuman/utils' +import type { AsyncResourceContext, ComposedMiddleware, Middleware } from '@fuman/utils' +import { Deferred, composeMiddlewares } from '@fuman/utils' import type { StorageManager } from '../storage/storage.js' import { MtArgumentError, MtUnsupportedError, MtcuteError } from '../types/index.js' -import type { ComposedMiddleware, Middleware } from '../utils/composer.js' -import { composeMiddlewares } from '../utils/composer.js' import type { DcOptions, ICryptoProvider, Logger } from '../utils/index.js' import { assertTypeIs, isTlRpcError } from '../utils/type-assertions.js' import type { ICorePlatform } from '../types/platform' @@ -279,7 +278,7 @@ export class DcConnectionManager { mainCount = this._mainCountOverride if (mainCount === 0) { - mainCount = this.manager.config.getNow()?.tmpSessions ?? 1 + mainCount = this.manager.config.getCached()?.tmpSessions ?? 1 } } else { mainCount = 1 @@ -519,7 +518,7 @@ export class NetworkManager { this.call = this._composeCall(params.middlewares) this._onConfigChanged = this._onConfigChanged.bind(this) - config.onReload(this._onConfigChanged) + config.onUpdated.add(this._onConfigChanged) this._log = params.log.create('network') this._storage = params.storage @@ -749,9 +748,9 @@ export class NetworkManager { dc.downloadSmall.resetSessions() } - private _onConfigChanged(config: tl.RawConfig): void { - if (config.tmpSessions) { - this._primaryDc?.setMainConnectionCount(config.tmpSessions) + private _onConfigChanged({ current }: AsyncResourceContext): void { + if (current?.tmpSessions) { + this._primaryDc?.setMainConnectionCount(current.tmpSessions) } } @@ -866,12 +865,12 @@ export class NetworkManager { return res } - changeTransport(transport: TelegramTransport): void { + async changeTransport(transport: TelegramTransport): Promise { for (const dc of this._dcConnections.values()) { - dc.main.changeTransport(transport) - dc.upload.changeTransport(transport) - dc.download.changeTransport(transport) - dc.downloadSmall.changeTransport(transport) + await dc.main.changeTransport(transport) + await dc.upload.changeTransport(transport) + await dc.download.changeTransport(transport) + await dc.downloadSmall.changeTransport(transport) } } @@ -902,7 +901,7 @@ export class NetworkManager { await dc.destroy() } this._dcConnections.clear() - this.config.offReload(this._onConfigChanged) + this.config.onUpdated.remove(this._onConfigChanged) this._resetOnNetworkChange?.() } diff --git a/packages/core/src/network/session-connection.ts b/packages/core/src/network/session-connection.ts index e0a1c7dd..d39b804e 100644 --- a/packages/core/src/network/session-connection.ts +++ b/packages/core/src/network/session-connection.ts @@ -3,7 +3,7 @@ import type { mtp } from '@mtcute/tl' import { tl } from '@mtcute/tl' import type { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime' import { TlBinaryReader, TlBinaryWriter, TlSerializationCounter } from '@mtcute/tl-runtime' -import { Deferred, Emitter, u8 } from '@fuman/utils' +import { Deferred, Emitter, timers, u8 } from '@fuman/utils' import { MtArgumentError, MtTimeoutError, MtcuteError } from '../types/index.js' import { createAesIgeForMessageOld } from '../utils/crypto/mtproto.js' @@ -13,7 +13,6 @@ import { longFromBuffer, randomLong, removeFromLongArray, - timers, } from '../utils/index.js' import type { ICorePlatform } from '../types/platform' diff --git a/packages/core/src/network/transports/intermediate.test.ts b/packages/core/src/network/transports/intermediate.test.ts index 4ef9924c..2f2e4146 100644 --- a/packages/core/src/network/transports/intermediate.test.ts +++ b/packages/core/src/network/transports/intermediate.test.ts @@ -4,8 +4,8 @@ import { defaultTestCryptoProvider, useFakeMathRandom } from '@mtcute/test' import { hex } from '@fuman/utils' import { Bytes, write } from '@fuman/io' -import { IntermediatePacketCodec, PaddedIntermediatePacketCodec } from './intermediate' -import { TransportError } from './abstract' +import { IntermediatePacketCodec, PaddedIntermediatePacketCodec } from './intermediate.js' +import { TransportError } from './abstract.js' describe('IntermediatePacketCodec', () => { it('should return correct tag', () => { diff --git a/packages/core/src/network/transports/obfuscated.test.ts b/packages/core/src/network/transports/obfuscated.test.ts index 9d6fdd47..0e7309a5 100644 --- a/packages/core/src/network/transports/obfuscated.test.ts +++ b/packages/core/src/network/transports/obfuscated.test.ts @@ -179,8 +179,8 @@ describe('ObfuscatedPacketCodec', () => { await codec.tag() - expect(codec.decode(Bytes.from(hex.decode(msg1)), false)).rejects.toThrow(TransportError) - expect(codec.decode(Bytes.from(hex.decode(msg2)), false)).rejects.toThrow(TransportError) + await expect(codec.decode(Bytes.from(hex.decode(msg1)), false)).rejects.toThrow(TransportError) + await expect(codec.decode(Bytes.from(hex.decode(msg2)), false)).rejects.toThrow(TransportError) }) it('should correctly reset', async () => { diff --git a/packages/core/src/types/utils.ts b/packages/core/src/types/utils.ts index 510aa230..2267a642 100644 --- a/packages/core/src/types/utils.ts +++ b/packages/core/src/types/utils.ts @@ -1,10 +1,9 @@ -export type MaybePromise = T | Promise +export type { MaybeArray, MaybePromise } from '@fuman/utils' + export type PartialExcept = Partial> & Pick export type PartialOnly = Partial> & Omit export type AnyToNever = any extends T ? never : T -export type MaybeArray = T | T[] - export type MustEqual = (() => T) extends () => V ? ((() => V) extends () => T ? T : V) : V export type PublicPart = { [K in keyof T]: T[K] } diff --git a/packages/core/src/utils/crypto/abstract.ts b/packages/core/src/utils/crypto/abstract.ts index bcf8223e..c26eac44 100644 --- a/packages/core/src/utils/crypto/abstract.ts +++ b/packages/core/src/utils/crypto/abstract.ts @@ -1,3 +1,5 @@ +import { u8 } from '@fuman/utils' + import type { MaybePromise } from '../../types/index.js' import { factorizePQSync } from './factorization.js' @@ -50,7 +52,7 @@ export abstract class BaseCryptoProvider { } randomBytes(size: number): Uint8Array { - const buf = new Uint8Array(size) + const buf = u8.alloc(size) this.randomFill(buf) return buf diff --git a/packages/core/src/utils/crypto/password.ts b/packages/core/src/utils/crypto/password.ts index 197c64cb..3467b0fc 100644 --- a/packages/core/src/utils/crypto/password.ts +++ b/packages/core/src/utils/crypto/password.ts @@ -42,7 +42,7 @@ export async function computeNewPasswordHash( ): Promise { assertTypeIs('account.getPassword', algo, 'passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow') - const salt1 = new Uint8Array(algo.salt1.length + 32) + const salt1 = u8.alloc(algo.salt1.length + 32) salt1.set(algo.salt1) crypto.randomFill(salt1.subarray(algo.salt1.length)) ;(algo as tl.Mutable).salt1 = salt1 diff --git a/packages/core/src/utils/early-timer.ts b/packages/core/src/utils/early-timer.ts index 20bda802..74471940 100644 --- a/packages/core/src/utils/early-timer.ts +++ b/packages/core/src/utils/early-timer.ts @@ -6,7 +6,6 @@ import { timers } from '@fuman/utils' */ export class EarlyTimer { private _timeout?: timers.Timer - private _immediate?: timers.Immediate private _timeoutTs?: number private _handler: () => void = () => {} @@ -20,13 +19,11 @@ export class EarlyTimer { * (basically `setImmediate()`) */ emitWhenIdle(): void { - if (this._immediate) return - timers.clearTimeout(this._timeout) this._timeoutTs = Date.now() - if (typeof timers.setImmediate !== 'undefined') { - this._immediate = timers.setImmediate(this.emitNow) + if (typeof queueMicrotask !== 'undefined') { + queueMicrotask(this.emitNow) } else { this._timeout = timers.setTimeout(this.emitNow, 0) } @@ -68,12 +65,7 @@ export class EarlyTimer { * Cancel the timer */ reset(): void { - if (this._immediate) { - timers.clearImmediate(this._immediate) - this._immediate = undefined - } else { - timers.clearTimeout(this._timeout) - } + timers.clearTimeout(this._timeout) this._timeoutTs = undefined } diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts index db307cdb..fa037d6b 100644 --- a/packages/core/src/utils/index.ts +++ b/packages/core/src/utils/index.ts @@ -1,5 +1,3 @@ -import * as timers from './timers.js' - export * from '../highlevel/utils/index.js' // todo: remove after 1.0.0 export * from '../highlevel/storage/service/current-user.js' @@ -8,7 +6,6 @@ export * from '../storage/service/base.js' export * from '../storage/service/default-dcs.js' // end todo export * from './bigint-utils.js' -export * from './composer.js' export * from './crypto/index.js' export * from './dcs.js' export * from './early-timer.js' @@ -23,4 +20,3 @@ export * from './sorted-array.js' export * from './tl-json.js' export * from './type-assertions.js' export * from '@mtcute/tl-runtime' -export { timers } diff --git a/packages/core/src/utils/timers.ts b/packages/core/src/utils/timers.ts index 16ab7e43..910c2dd1 100644 --- a/packages/core/src/utils/timers.ts +++ b/packages/core/src/utils/timers.ts @@ -1,61 +1 @@ -/* eslint-disable no-restricted-globals, ts/no-implied-eval */ - -// timers typings are mixed up across different runtimes, which leads -// to the globals being typed incorrectly. -// instead, we can treat the timers as opaque objects, and expose -// them through the `timers` esm namespace. -// this has near-zero runtime cost, but makes everything type-safe -// -// NB: we are using wrapper functions instead of... -// - directly exposing the globals because the standard doesn't allow that -// - .bind()-ing because it makes it harder to mock the timer globals - -export interface Timer { readonly __type: 'Timer' } -export interface Interval { readonly __type: 'Interval' } -export interface Immediate { readonly __type: 'Immediate' } - -const setTimeoutWrap = ( - (...args: Parameters) => setTimeout(...args) -) as unknown as any>( - fn: T, ms: number, ...args: Parameters -) => Timer -const setIntervalWrap = ( - (...args: Parameters) => setInterval(...args) -) as unknown as any>( - fn: T, ms: number, ...args: Parameters -) => Interval - -let setImmediateWrap: any -if (typeof setImmediate !== 'undefined') { - setImmediateWrap = (...args: Parameters) => setImmediate(...args) -} else { - // eslint-disable-next-line - setImmediateWrap = (fn: (...args: any[]) => void, ...args: any[]) => setTimeout(fn, 0, ...args) -} -const setImmediateWrapExported = setImmediateWrap as any>( - fn: T, ...args: Parameters -) => Immediate - -const clearTimeoutWrap = ( - (...args: Parameters) => clearTimeout(...args) -) as unknown as (timer?: Timer) => void -const clearIntervalWrap = ( - (...args: Parameters) => clearInterval(...args) -) as unknown as (timer?: Interval) => void - -let clearImmediateWrap: any -if (typeof clearImmediate !== 'undefined') { - clearImmediateWrap = (...args: Parameters) => clearImmediate(...args) -} else { - clearImmediateWrap = (timer: number) => clearTimeout(timer) -} -const clearImmediateWrapExported = clearImmediateWrap as (timer?: Immediate) => void - -export { - setTimeoutWrap as setTimeout, - setIntervalWrap as setInterval, - setImmediateWrapExported as setImmediate, - clearTimeoutWrap as clearTimeout, - clearIntervalWrap as clearInterval, - clearImmediateWrapExported as clearImmediate, -} +export { timers } from '@fuman/utils' diff --git a/packages/create-bot/build.config.js b/packages/create-bot/build.config.js index cb97650e..415e3f7d 100644 --- a/packages/create-bot/build.config.js +++ b/packages/create-bot/build.config.js @@ -1,9 +1,16 @@ import { resolve } from 'node:path' import { cpSync } from 'node:fs' +/** @type {import('@fuman/build/vite').CustomBuildConfig} */ export default () => ({ - buildCjs: false, - final({ outDir, packageDir }) { + viteConfig: { + build: { + lib: { + formats: ['es'], + }, + }, + }, + finalize({ outDir, packageDir }) { cpSync(resolve(packageDir, 'template'), resolve(outDir, 'template'), { recursive: true }) }, }) diff --git a/packages/create-bot/package.json b/packages/create-bot/package.json index 1293a480..4e5acf81 100644 --- a/packages/create-bot/package.json +++ b/packages/create-bot/package.json @@ -10,7 +10,6 @@ "create-bot": "./src/main.ts" }, "scripts": { - "build": "pnpm run -w build-package create-bot", "run": "tsx src/main.ts", "run:deno": "node scripts/generate-import-map.js && deno run --import-map=./scripts/import-map.json -A --unstable-sloppy-imports src/main.ts" }, @@ -26,5 +25,8 @@ "@types/cross-spawn": "^6.0.6", "@types/inquirer": "^9.0.6", "@types/openurl": "^1.0.3" + }, + "fuman": { + "jsr": "skip" } } diff --git a/packages/crypto-node/build.config.js b/packages/crypto-node/build.config.js index 4cef5521..3bbe7582 100644 --- a/packages/crypto-node/build.config.js +++ b/packages/crypto-node/build.config.js @@ -1,4 +1,4 @@ -/* eslint-disable import/no-relative-packages, no-console, no-restricted-globals */ +/* eslint-disable no-console, no-restricted-globals */ import { createHash } from 'node:crypto' import path from 'node:path' import * as fs from 'node:fs' @@ -155,8 +155,9 @@ async function extractArtifacts(artifacts) { ) } +/** @type {import('@fuman/build/vite').CustomBuildConfig} */ export default () => ({ - async final({ packageDir, outDir }) { + async finalize({ packageDir, outDir }) { const libDir = path.resolve(packageDir, 'lib') if (!SKIP_PREBUILT) { diff --git a/packages/crypto-node/package.json b/packages/crypto-node/package.json index 6f351c59..a192b1ff 100644 --- a/packages/crypto-node/package.json +++ b/packages/crypto-node/package.json @@ -12,19 +12,19 @@ "./native.js": "./src/native.cjs" }, "scripts": { - "build": "pnpm run -w build-package crypto-node", "install": "node-gyp-build", "rebuild": "node-gyp configure && node-gyp -j 16 rebuild", "clean": "node-gyp clean" }, - "keepScripts": [ - "install" - ], "dependencies": { "@mtcute/node": "workspace:^", "node-gyp-build": "4.8.1" }, "devDependencies": { "@mtcute/test": "workspace:^" + }, + "fuman": { + "jsr": "skip", + "keepScripts": ["install"] } } diff --git a/packages/deno/build.config.js b/packages/deno/build.config.js index 7eed9821..e951e602 100644 --- a/packages/deno/build.config.js +++ b/packages/deno/build.config.js @@ -1,7 +1,8 @@ import * as fs from 'node:fs' +/** @type {import('@fuman/build/vite').CustomBuildConfig} */ export default () => ({ - finalJsr({ outDir }) { + finalizeJsr({ outDir }) { // jsr doesn't support symlinks, so we need to copy the files manually const real = fs.realpathSync(`${outDir}/common-internals-web`) fs.unlinkSync(`${outDir}/common-internals-web`) diff --git a/packages/deno/package.json b/packages/deno/package.json index b07534a7..2b2c3304 100644 --- a/packages/deno/package.json +++ b/packages/deno/package.json @@ -12,16 +12,11 @@ "./utils.js": "./src/utils.ts", "./methods.js": "./src/methods.ts" }, - "main": "src/index.ts", - "scripts": { - "docs": "typedoc", - "build": "pnpm run -w build-package deno" - }, "dependencies": { "@db/sqlite": "npm:@jsr/db__sqlite@0.12.0", - "@fuman/deno": "workspace:^", - "@fuman/net": "workspace:^", - "@fuman/io": "workspace:^", + "@fuman/utils": "0.0.1", + "@fuman/net": "0.0.1", + "@fuman/io": "0.0.1", "@mtcute/core": "workspace:^", "@mtcute/html-parser": "workspace:^", "@mtcute/markdown-parser": "workspace:^", @@ -30,5 +25,8 @@ }, "devDependencies": { "@mtcute/test": "workspace:^" + }, + "fuman": { + "jsr": "only" } } diff --git a/packages/deno/src/client.ts b/packages/deno/src/client.ts index 25f88268..cb2e6af4 100644 --- a/packages/deno/src/client.ts +++ b/packages/deno/src/client.ts @@ -11,6 +11,7 @@ import { BaseTelegramClient as BaseTelegramClientBase, TelegramClient as TelegramClientBase, } from '@mtcute/core/client.js' +import { unknownToError } from '@fuman/utils' import { downloadToFile } from './methods/download-file.js' import { DenoPlatform } from './platform.js' @@ -128,7 +129,7 @@ export class TelegramClient extends TelegramClientBase { this.start(params) .then(then) - .catch(err => this.emitError(err)) + .catch(err => this.onError.emit(unknownToError(err))) } downloadToFile( diff --git a/packages/deno/src/utils/proxies.ts b/packages/deno/src/utils/proxies.ts index 240ca5ea..9a752747 100644 --- a/packages/deno/src/utils/proxies.ts +++ b/packages/deno/src/utils/proxies.ts @@ -1,5 +1,6 @@ import type { HttpProxySettings as FumanHttpProxySettings, ITcpConnection, SocksProxySettings, TcpEndpoint } from '@fuman/net' import { performHttpProxyHandshake, performSocksHandshake } from '@fuman/net' +// @ts-expect-error wip import { connectTcp, connectTls } from '@fuman/deno' import { BaseMtProxyTransport, type ITelegramConnection, IntermediatePacketCodec, type TelegramTransport } from '@mtcute/core' import type { BasicDcOption } from '@mtcute/core/utils.js' diff --git a/packages/deno/src/utils/tcp.ts b/packages/deno/src/utils/tcp.ts index e79cc2bd..eba2dc09 100644 --- a/packages/deno/src/utils/tcp.ts +++ b/packages/deno/src/utils/tcp.ts @@ -1,3 +1,4 @@ +// @ts-expect-error wip import { connectTcp } from '@fuman/deno' import type { ITcpConnection } from '@fuman/net' import { IntermediatePacketCodec, type TelegramTransport } from '@mtcute/core' diff --git a/packages/dispatcher/package.json b/packages/dispatcher/package.json index aa036730..cadc1df5 100644 --- a/packages/dispatcher/package.json +++ b/packages/dispatcher/package.json @@ -9,12 +9,11 @@ "sideEffects": false, "exports": "./src/index.ts", "scripts": { - "build": "pnpm run -w build-package dispatcher", "gen-updates": "node ./scripts/generate.cjs" }, "dependencies": { "@mtcute/core": "workspace:^", - "@fuman/utils": "workspace:^", + "@fuman/utils": "0.0.1", "events": "3.2.0" }, "devDependencies": { diff --git a/packages/dispatcher/src/dispatcher.ts b/packages/dispatcher/src/dispatcher.ts index a09c3a0f..6398490c 100644 --- a/packages/dispatcher/src/dispatcher.ts +++ b/packages/dispatcher/src/dispatcher.ts @@ -29,6 +29,7 @@ import { MtArgumentError, } from '@mtcute/core' import type { TelegramClient } from '@mtcute/core/client.js' +import { unknownToError } from '@fuman/utils' import type { UpdateContext } from './context/base.js' import type { BusinessMessageContext } from './context/business-message.js' @@ -328,7 +329,8 @@ export class Dispatcher { // order does not matter in the dispatcher, // so we can handle each update in its own task - this.dispatchRawUpdateNow(update, peers).catch(err => this._client!.emitError(err)) + this.dispatchRawUpdateNow(update, peers) + .catch(err => this._client!.onError.emit(unknownToError(err))) } /** @@ -400,7 +402,8 @@ export class Dispatcher { // order does not matter in the dispatcher, // so we can handle each update in its own task - this.dispatchUpdateNow(update).catch(err => this._client!.emitError(err)) + this.dispatchUpdateNow(update) + .catch(err => this._client!.onError.emit(unknownToError(err))) } /** diff --git a/packages/dispatcher/src/state/service.ts b/packages/dispatcher/src/state/service.ts index 5bf4454d..518d0cde 100644 --- a/packages/dispatcher/src/state/service.ts +++ b/packages/dispatcher/src/state/service.ts @@ -1,6 +1,6 @@ -import { asyncResettable, timers } from '@mtcute/core/utils.js' +import { asyncResettable } from '@mtcute/core/utils.js' import type { MaybePromise } from '@mtcute/core' -import { LruMap } from '@fuman/utils' +import { LruMap, timers } from '@fuman/utils' import type { IStateStorageProvider } from './provider.js' diff --git a/packages/file-id/package.json b/packages/file-id/package.json index 3b7e5008..a2312b8e 100644 --- a/packages/file-id/package.json +++ b/packages/file-id/package.json @@ -10,12 +10,9 @@ "exports": { ".": "./src/index.ts" }, - "scripts": { - "build": "pnpm run -w build-package file-id" - }, "dependencies": { "@mtcute/tl-runtime": "workspace:^", - "@fuman/utils": "workspace:^", + "@fuman/utils": "0.0.1", "long": "5.2.3" } } diff --git a/packages/file-id/src/serialize.ts b/packages/file-id/src/serialize.ts index 2342bd6f..bf1af443 100644 --- a/packages/file-id/src/serialize.ts +++ b/packages/file-id/src/serialize.ts @@ -1,5 +1,5 @@ import { TlBinaryWriter } from '@mtcute/tl-runtime' -import { base64, utf8 } from '@fuman/utils' +import { base64, u8, utf8 } from '@fuman/utils' import { tdFileId as td } from './types.js' import { assertNever, telegramRleEncode } from './utils.js' @@ -105,7 +105,7 @@ export function toFileId(location: Omit): str } const result = telegramRleEncode(writer.result()) - const withSuffix = new Uint8Array(result.length + SUFFIX.length) + const withSuffix = u8.alloc(result.length + SUFFIX.length) withSuffix.set(result) withSuffix.set(SUFFIX, result.length) diff --git a/packages/html-parser/package.json b/packages/html-parser/package.json index c34e5869..3bc0cf5b 100644 --- a/packages/html-parser/package.json +++ b/packages/html-parser/package.json @@ -8,9 +8,6 @@ "license": "MIT", "sideEffects": false, "exports": "./src/index.ts", - "scripts": { - "build": "pnpm run -w build-package html-parser" - }, "dependencies": { "@mtcute/core": "workspace:^", "htmlparser2": "^6.0.1", diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 5b59963f..7da38e3d 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -8,17 +8,8 @@ "license": "MIT", "sideEffects": false, "exports": "./src/index.ts", - "scripts": { - "build": "pnpm run -w build-package i18n" - }, "devDependencies": { "@mtcute/core": "workspace:^", "@mtcute/dispatcher": "workspace:^" - }, - "jsrOnlyFields": { - "dependencies": { - "@mtcute/core": "workspace:^", - "@mtcute/dispatcher": "workspace:^" - } } } diff --git a/packages/markdown-parser/package.json b/packages/markdown-parser/package.json index c4f70f7e..ae5fdffe 100644 --- a/packages/markdown-parser/package.json +++ b/packages/markdown-parser/package.json @@ -8,9 +8,6 @@ "license": "MIT", "sideEffects": false, "exports": "./src/index.ts", - "scripts": { - "build": "pnpm run -w build-package markdown-parser" - }, "dependencies": { "@mtcute/core": "workspace:^", "long": "5.2.3" diff --git a/packages/node/build.config.js b/packages/node/build.config.js index ffef134f..06d4a781 100644 --- a/packages/node/build.config.js +++ b/packages/node/build.config.js @@ -1,12 +1,18 @@ import { fileURLToPath } from 'node:url' +/** @type {import('@fuman/build/vite').CustomBuildConfig} */ export default () => { const clientId = fileURLToPath(new URL('./src/client.ts', import.meta.url)) - // const buildingCjs = false return { - external: ['@mtcute/crypto-node'], - rollupPluginsPre: [ + viteConfig: { + build: { + rollupOptions: { + external: ['@mtcute/crypto-node'], + }, + }, + }, + pluginsPre: [ { // very much a crutch, but it works // i couldn't figure out a way to hook into the esm->cjs transform, diff --git a/packages/node/package.json b/packages/node/package.json index fc79b9a3..ac025c80 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -12,21 +12,21 @@ "./utils.js": "./src/utils.ts", "./methods.js": "./src/methods.ts" }, - "scripts": { - "docs": "typedoc", - "build": "pnpm run -w build-package node" - }, "dependencies": { "@mtcute/core": "workspace:^", "@mtcute/html-parser": "workspace:^", "@mtcute/markdown-parser": "workspace:^", "@mtcute/wasm": "workspace:^", - "@fuman/net": "workspace:^", - "@fuman/node": "workspace:^", + "@fuman/utils": "0.0.1", + "@fuman/net": "0.0.1", + "@fuman/node": "0.0.1", "better-sqlite3": "11.3.0" }, "devDependencies": { "@mtcute/test": "workspace:^", "@types/better-sqlite3": "7.6.4" + }, + "fuman": { + "jsr": "skip" } } diff --git a/packages/node/src/client.ts b/packages/node/src/client.ts index 58fde073..6801faa3 100644 --- a/packages/node/src/client.ts +++ b/packages/node/src/client.ts @@ -11,6 +11,7 @@ import { BaseTelegramClient as BaseTelegramClientBase, TelegramClient as TelegramClientBase, } from '@mtcute/core/client.js' +import { unknownToError } from '@fuman/utils' import { downloadToFile } from './methods/download-file.js' import { downloadAsNodeStream } from './methods/download-node-stream.js' @@ -139,7 +140,7 @@ export class TelegramClient extends TelegramClientBase { this.start(params) .then(then) - .catch(err => this.emitError(err)) + .catch(err => this.onError.emit(unknownToError(err))) } downloadToFile( diff --git a/packages/node/src/methods/download-node-stream.ts b/packages/node/src/methods/download-node-stream.ts index a68d5bbc..bba9a9d6 100644 --- a/packages/node/src/methods/download-node-stream.ts +++ b/packages/node/src/methods/download-node-stream.ts @@ -2,7 +2,7 @@ import type { Readable } from 'node:stream' import type { FileDownloadLocation, FileDownloadParameters, ITelegramClient } from '@mtcute/core' import { downloadAsStream } from '@mtcute/core/methods.js' -import { webStreamToNode } from '@fuman/node' +import { webReadableToNode } from '@fuman/node' /** * Download a remote file as a Node.js Readable stream. @@ -14,5 +14,5 @@ export function downloadAsNodeStream( location: FileDownloadLocation, params?: FileDownloadParameters, ): Readable { - return webStreamToNode(downloadAsStream(client, location, params)) + return webReadableToNode(downloadAsStream(client, location, params)) } diff --git a/packages/node/src/utils/normalize-file.ts b/packages/node/src/utils/normalize-file.ts index b69ec94d..fe3d288c 100644 --- a/packages/node/src/utils/normalize-file.ts +++ b/packages/node/src/utils/normalize-file.ts @@ -4,7 +4,7 @@ import { basename } from 'node:path' import { Readable } from 'node:stream' import type { UploadFileLike } from '@mtcute/core' -import { nodeStreamToWeb } from '@fuman/node' +import { nodeReadableToFuman } from '@fuman/node' export async function normalizeFile(file: UploadFileLike): Promise<{ file: UploadFileLike @@ -20,7 +20,7 @@ export async function normalizeFile(file: UploadFileLike): Promise<{ const fileSize = await stat(file.path.toString()).then(stat => stat.size) return { - file: nodeStreamToWeb(file), + file: nodeReadableToFuman(file), fileName, fileSize, } @@ -28,7 +28,7 @@ export async function normalizeFile(file: UploadFileLike): Promise<{ if (file instanceof Readable) { return { - file: nodeStreamToWeb(file), + file: nodeReadableToFuman(file), } } diff --git a/packages/test/build.config.js b/packages/test/build.config.js index afe05088..ccf320bd 100644 --- a/packages/test/build.config.js +++ b/packages/test/build.config.js @@ -1 +1,10 @@ -export default () => ({ buildCjs: false }) +/** @type {import('@fuman/build/vite').CustomBuildConfig} */ +export default () => ({ + viteConfig: { + build: { + lib: { + formats: ['es'], + }, + }, + }, +}) diff --git a/packages/test/package.json b/packages/test/package.json index b41fbf55..c35b50af 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -8,9 +8,6 @@ "license": "MIT", "sideEffects": false, "exports": "./src/index.ts", - "scripts": { - "build": "pnpm run -w build-package test" - }, "peerDependencies": { "@mtcute/core": "workspace:^", "@mtcute/node": "workspace:^", @@ -28,13 +25,16 @@ }, "dependencies": { "long": "5.2.3", - "@fuman/utils": "workspace:^", - "@fuman/net": "workspace:^" + "@fuman/utils": "0.0.1", + "@fuman/net": "0.0.1" }, "devDependencies": { "@mtcute/tl-utils": "workspace:^" }, "browser": { "./src/platform.js": "./src/platform.web.js" + }, + "fuman": { + "jsr": "skip" } } diff --git a/packages/test/src/client.ts b/packages/test/src/client.ts index 04046caf..30374763 100644 --- a/packages/test/src/client.ts +++ b/packages/test/src/client.ts @@ -33,7 +33,7 @@ export class StubTelegramClient extends BaseTelegramClient { onMessage: (data, dcId) => { if (!this._onRawMessage) { if (this._responders.size) { - this.emitError(new Error('Unexpected outgoing message')) + this.onError.emit(new Error('Unexpected outgoing message')) } return @@ -288,9 +288,11 @@ export class StubTelegramClient extends BaseTelegramClient { let error: unknown - this.onError((err) => { + const handler = (err: Error) => { error = err - }) + } + + this.onError.add(handler) try { await fn() @@ -300,6 +302,8 @@ export class StubTelegramClient extends BaseTelegramClient { await this.close() + this.onError.remove(handler) + if (error) { throw error } diff --git a/packages/test/src/stub.ts b/packages/test/src/stub.ts index b2318926..f0fef84e 100644 --- a/packages/test/src/stub.ts +++ b/packages/test/src/stub.ts @@ -1,6 +1,7 @@ import Long from 'long' import type { tl } from '@mtcute/tl' import type { TlArgument } from '@mtcute/tl-utils' +import { u8 } from '@fuman/utils' import { getEntriesMap } from './schema.js' @@ -21,13 +22,13 @@ function getDefaultFor(arg: TlArgument): unknown { case 'long': return Long.ZERO case 'int128': - return new Uint8Array(16) + return u8.alloc(16) case 'int256': - return new Uint8Array(32) + return u8.alloc(32) case 'string': return '' case 'bytes': - return new Uint8Array(0) + return u8.alloc(0) case 'Bool': case 'bool': return false diff --git a/packages/tl-runtime/package.json b/packages/tl-runtime/package.json index 787e7787..8624474f 100644 --- a/packages/tl-runtime/package.json +++ b/packages/tl-runtime/package.json @@ -10,12 +10,8 @@ "exports": { ".": "./src/index.ts" }, - "scripts": { - "docs": "typedoc", - "build": "pnpm run -w build-package tl-runtime" - }, "dependencies": { "long": "5.2.3", - "@fuman/utils": "workspace:^" + "@fuman/utils": "0.0.1" } } diff --git a/packages/tl-utils/package.json b/packages/tl-utils/package.json index 3e120ea9..f3a955db 100644 --- a/packages/tl-utils/package.json +++ b/packages/tl-utils/package.json @@ -11,10 +11,6 @@ ".": "./src/index.ts", "./json.js": "./src/json/index.ts" }, - "scripts": { - "docs": "typedoc", - "build": "pnpm run -w build-package tl-utils" - }, "dependencies": { "@mtcute/tl-runtime": "workspace:^", "crc-32": "1.2.0" diff --git a/packages/tl-utils/src/patch.ts b/packages/tl-utils/src/patch.ts index 00c1ad26..ef5f2160 100644 --- a/packages/tl-utils/src/patch.ts +++ b/packages/tl-utils/src/patch.ts @@ -5,7 +5,7 @@ import { generateWriterCodeForTlEntries } from './codegen/writer.js' import { parseTlToEntries } from './parse.js' function evalForResult(js: string): T { - // eslint-disable-next-line ts/no-implied-eval, no-new-func + // eslint-disable-next-line ts/no-implied-eval, no-new-func, ts/no-unsafe-call return new Function(js)() as T } diff --git a/packages/tl/package.json b/packages/tl/package.json index cef465f6..1aa33bb6 100644 --- a/packages/tl/package.json +++ b/packages/tl/package.json @@ -13,7 +13,8 @@ "gen-code": "tsx scripts/gen-code.ts", "gen-rsa": "tsx scripts/gen-rsa-keys.ts", "fetch-and-gen": "pnpm run fetch-api && pnpm run gen-code", - "build": "pnpm run -w build-package tl" + "build": "tsx scripts/build-package.ts", + "build:jsr": "JSR=1 tsx scripts/build-package.ts" }, "dependencies": { "long": "5.2.3" @@ -22,7 +23,7 @@ "@mtcute/core": "workspace:^", "@mtcute/node": "workspace:^", "@mtcute/tl-utils": "workspace:^", - "@fuman/utils": "workspace:^", + "@fuman/utils": "0.0.1", "@types/js-yaml": "^4.0.5", "cheerio": "1.0.0-rc.12", "csv-parse": "^5.5.0", @@ -31,7 +32,7 @@ "typedoc": { "entryPoint": "index.d.ts" }, - "jsrOnlyFields": { - "exports": {} + "fuman": { + "ownVersioning": true } } \ No newline at end of file diff --git a/packages/tl/scripts/build-package.ts b/packages/tl/scripts/build-package.ts new file mode 100644 index 00000000..3d44b0d6 --- /dev/null +++ b/packages/tl/scripts/build-package.ts @@ -0,0 +1,107 @@ +import * as fsp from 'node:fs/promises' +import { fileURLToPath } from 'node:url' +import { resolve } from 'node:path' + +import { parsePackageJsonFile, processPackageJson } from '@fuman/build' +import { packageJsonToDeno } from '@fuman/build/jsr' + +async function transformFile(file: string, transform: (content: string, file: string) => string) { + const content = await fsp.readFile(file, 'utf8') + const res = transform(content, file) + if (res != null) await fsp.writeFile(file, res) +} + +// create package by copying all the needed files +const packageDir = fileURLToPath(new URL('../', import.meta.url)) +const outDir = process.env.FUMAN_BUILD_OUT ?? fileURLToPath(new URL('../dist', import.meta.url)) + +await fsp.rm(outDir, { recursive: true, force: true }) + +const files = [ + 'binary/reader.d.ts', + 'binary/reader.js', + 'binary/rsa-keys.d.ts', + 'binary/rsa-keys.js', + 'binary/writer.d.ts', + 'binary/writer.js', + 'index.d.ts', + 'index.js', + 'raw-errors.json', + 'mtp-schema.json', + 'api-schema.json', + 'app-config.json', + 'README.md', +] + +await fsp.mkdir(resolve(outDir, 'binary'), { recursive: true }) + +for (const f of files) { + await fsp.copyFile(resolve(packageDir, f), resolve(outDir, f)) +} + +await fsp.cp(new URL('../../../LICENSE', import.meta.url), resolve(outDir, 'LICENSE'), { recursive: true }) + +const { packageJson, packageJsonOrig } = processPackageJson({ + packageJson: await parsePackageJsonFile(resolve(packageDir, 'package.json')), + workspaceVersions: {}, + rootPackageJson: await parsePackageJsonFile(resolve(packageDir, '../../package.json')), +}) + +if (process.env.JSR) { + // jsr doesn't support cjs, so we'll need to add some shims + // todo: remove this god awfulness when tl esm rewrite + await transformFile(resolve(outDir, 'index.js'), (content) => { + return [ + '/// ', + 'const exports = {};', + content, + 'export const tl = exports.tl;', + 'export const mtp = exports.mtp;', + ].join('\n') + }) + await transformFile(resolve(outDir, 'binary/reader.js'), (content) => { + return [ + '/// ', + 'const exports = {};', + content, + 'export const __tlReaderMap = exports.__tlReaderMap;', + ].join('\n') + }) + await transformFile(resolve(outDir, 'binary/writer.js'), (content) => { + return [ + '/// ', + 'const exports = {};', + content, + 'export const __tlWriterMap = exports.__tlWriterMap;', + ].join('\n') + }) + await transformFile(resolve(outDir, 'binary/rsa-keys.js'), (content) => { + return [ + '/// ', + 'const exports = {};', + content, + 'export const __publicKeyIndex = exports.__publicKeyIndex;', + ].join('\n') + }) + + // patch deno.json to add some export maps + const denoJson = packageJsonToDeno({ + packageJson, + packageJsonOrig, + workspaceVersions: {}, + buildDirName: 'dist', + }) + denoJson.exports = {} + + for (const f of files) { + if (!f.match(/\.js(?:on)?$/)) continue + if (f === 'index.js') { + denoJson.exports['.'] = './index.js' + } else { + denoJson.exports[`./${f}`] = `./${f}` + } + } + await fsp.writeFile(resolve(outDir, 'deno.json'), JSON.stringify(denoJson, null, 2)) +} else { + await fsp.writeFile(resolve(outDir, 'package.json'), JSON.stringify(packageJson, null, 2)) +} diff --git a/packages/wasm/build.config.js b/packages/wasm/build.config.js index 8bd8326b..c8b9251b 100644 --- a/packages/wasm/build.config.js +++ b/packages/wasm/build.config.js @@ -1,11 +1,12 @@ import { resolve } from 'node:path' import * as fs from 'node:fs' +/** @type {import('@fuman/build/vite').CustomBuildConfig} */ export default () => ({ - finalPackageJson(pkg) { - pkg.exports['./mtcute.wasm'] = './mtcute.wasm' + finalizePackageJson({ packageJson }) { + packageJson.exports['./mtcute.wasm'] = './mtcute.wasm' }, - final({ packageDir, outDir }) { + finalize({ packageDir, outDir }) { fs.cpSync(resolve(packageDir, 'src/mtcute.wasm'), resolve(outDir, 'mtcute.wasm')) }, }) diff --git a/packages/wasm/package.json b/packages/wasm/package.json index cc46ea43..8437156f 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -12,17 +12,12 @@ "./mtcute.wasm": "./src/mtcute.wasm" }, "scripts": { - "docs": "typedoc", - "build": "pnpm run -w build-package wasm", "build:wasm": "docker build --output=lib --target=binaries lib" }, "devDependencies": { "@mtcute/core": "workspace:^", "@mtcute/node": "workspace:^", "@mtcute/web": "workspace:^", - "@fuman/utils": "workspace:^" - }, - "jsrOnlyFields": { - "exports": "./src/index.ts" + "@fuman/utils": "0.0.1" } } diff --git a/packages/wasm/src/index.ts b/packages/wasm/src/index.ts index 0e09a8ad..d46f5585 100644 --- a/packages/wasm/src/index.ts +++ b/packages/wasm/src/index.ts @@ -51,7 +51,6 @@ export function initSync(module: SyncInitInput): void { module = new WebAssembly.Instance(module) } - // eslint-disable-next-line wasm = (module as unknown as WebAssembly.Instance).exports as unknown as MtcuteWasmModule initCommon() } diff --git a/packages/web/package.json b/packages/web/package.json index 61a4c5ce..2b57c6b1 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -12,14 +12,10 @@ "./utils.js": "./src/utils.ts", "./methods.js": "./src/methods.ts" }, - "scripts": { - "docs": "typedoc", - "build": "pnpm run -w build-package web" - }, "dependencies": { "@mtcute/core": "workspace:^", "@mtcute/wasm": "workspace:^", - "@fuman/net": "workspace:^", + "@fuman/net": "0.0.1", "events": "3.2.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 464f08df..4947b199 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,10 +13,13 @@ importers: devDependencies: '@antfu/eslint-config': specifier: 2.26.0 - version: 2.26.0(@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4))(@vue/compiler-sfc@3.4.37)(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5)) - '@fuman/jsr': - specifier: workspace:^ - version: link:private/fuman/packages/jsr + version: 2.26.0(@typescript-eslint/utils@8.14.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(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5)) + '@fuman/build': + specifier: 0.0.1 + version: 0.0.1(tough-cookie@4.1.4)(typescript@5.5.4)(vite@5.4.2(@types/node@20.10.0)) + '@fuman/utils': + specifier: 0.0.1 + version: 0.0.1 '@types/deno': specifier: npm:@teidesu/deno-types@1.46.3 version: '@teidesu/deno-types@1.46.3' @@ -28,7 +31,7 @@ importers: version: 8.5.4 '@vitest/browser': specifier: 2.0.5 - version: 2.0.5(playwright@1.42.1)(typescript@5.5.4)(vitest@2.0.5) + version: 2.0.5(@types/node@20.10.0)(playwright@1.42.1)(typescript@5.5.4)(vitest@2.0.5) '@vitest/coverage-v8': specifier: 2.0.5 version: 2.0.5(vitest@2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5)) @@ -43,7 +46,7 @@ importers: version: 2.0.5(vitest@2.0.5) bun-types: specifier: ^1.1.24 - version: 1.1.24 + version: 1.1.34 chai: specifier: 5.1.0 version: 5.1.0 @@ -73,7 +76,7 @@ importers: version: 6.0.1 rollup-plugin-node-externals: specifier: 7.1.3 - version: 7.1.3(rollup@4.21.0) + version: 7.1.3(rollup@4.27.2) semver: specifier: 7.5.1 version: 7.5.1 @@ -91,10 +94,10 @@ importers: version: 5.4.2(@types/node@20.10.0) vite-plugin-dts: specifier: 4.0.3 - version: 4.0.3(@types/node@20.10.0)(rollup@4.21.0)(typescript@5.5.4)(vite@5.4.2(@types/node@20.10.0)) + version: 4.0.3(@types/node@20.10.0)(rollup@4.27.2)(typescript@5.5.4)(vite@5.4.2(@types/node@20.10.0)) vite-plugin-node-polyfills: specifier: 0.22.0 - version: 0.22.0(rollup@4.21.0)(vite@5.4.2(@types/node@20.10.0)) + version: 0.22.0(rollup@4.27.2)(vite@5.4.2(@types/node@20.10.0)) vitest: specifier: 2.0.5 version: 2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5) @@ -102,14 +105,17 @@ importers: packages/bun: dependencies: '@fuman/bun': - specifier: workspace:^ - version: link:../../private/fuman/packages/bun + specifier: 0.0.1 + version: 0.0.1 '@fuman/io': - specifier: workspace:^ - version: link:../../private/fuman/packages/io + specifier: 0.0.1 + version: 0.0.1 '@fuman/net': - specifier: workspace:^ - version: link:../../private/fuman/packages/net + specifier: 0.0.1 + version: 0.0.1 + '@fuman/utils': + specifier: 0.0.1 + version: 0.0.1 '@mtcute/core': specifier: workspace:^ version: link:../core @@ -130,11 +136,11 @@ importers: packages/convert: dependencies: '@fuman/net': - specifier: workspace:^ - version: link:../../private/fuman/packages/net + specifier: 0.0.1 + version: 0.0.1 '@fuman/utils': - specifier: workspace:^ - version: link:../../private/fuman/packages/utils + specifier: 0.0.1 + version: 0.0.1 '@mtcute/core': specifier: workspace:^ version: link:../core @@ -146,14 +152,14 @@ importers: packages/core: dependencies: '@fuman/io': - specifier: workspace:^ - version: link:../../private/fuman/packages/io + specifier: 0.0.1 + version: 0.0.1 '@fuman/net': - specifier: workspace:^ - version: link:../../private/fuman/packages/net + specifier: 0.0.1 + version: 0.0.1 '@fuman/utils': - specifier: workspace:^ - version: link:../../private/fuman/packages/utils + specifier: 0.0.1 + version: 0.0.1 '@mtcute/file-id': specifier: workspace:^ version: link:../file-id @@ -209,7 +215,7 @@ importers: version: 6.0.6 '@types/inquirer': specifier: ^9.0.6 - version: 9.0.6 + version: 9.0.7 '@types/openurl': specifier: ^1.0.3 version: 1.0.3 @@ -232,15 +238,15 @@ importers: '@db/sqlite': specifier: npm:@jsr/db__sqlite@0.12.0 version: '@jsr/db__sqlite@0.12.0' - '@fuman/deno': - specifier: workspace:^ - version: link:../../private/fuman/packages/deno '@fuman/io': - specifier: workspace:^ - version: link:../../private/fuman/packages/io + specifier: 0.0.1 + version: 0.0.1 '@fuman/net': - specifier: workspace:^ - version: link:../../private/fuman/packages/net + specifier: 0.0.1 + version: 0.0.1 + '@fuman/utils': + specifier: 0.0.1 + version: 0.0.1 '@mtcute/core': specifier: workspace:^ version: link:../core @@ -264,8 +270,8 @@ importers: packages/dispatcher: dependencies: '@fuman/utils': - specifier: workspace:^ - version: link:../../private/fuman/packages/utils + specifier: 0.0.1 + version: 0.0.1 '@mtcute/core': specifier: workspace:^ version: link:../core @@ -280,8 +286,8 @@ importers: packages/file-id: dependencies: '@fuman/utils': - specifier: workspace:^ - version: link:../../private/fuman/packages/utils + specifier: 0.0.1 + version: 0.0.1 '@mtcute/tl-runtime': specifier: workspace:^ version: link:../tl-runtime @@ -322,11 +328,14 @@ importers: packages/node: dependencies: '@fuman/net': - specifier: workspace:^ - version: link:../../private/fuman/packages/net + specifier: 0.0.1 + version: 0.0.1 '@fuman/node': - specifier: workspace:^ - version: link:../../private/fuman/packages/node + specifier: 0.0.1 + version: 0.0.1 + '@fuman/utils': + specifier: 0.0.1 + version: 0.0.1 '@mtcute/core': specifier: workspace:^ version: link:../core @@ -353,11 +362,11 @@ importers: packages/test: dependencies: '@fuman/net': - specifier: workspace:^ - version: link:../../private/fuman/packages/net + specifier: 0.0.1 + version: 0.0.1 '@fuman/utils': - specifier: workspace:^ - version: link:../../private/fuman/packages/utils + specifier: 0.0.1 + version: 0.0.1 '@mtcute/core': specifier: workspace:^ version: link:../core @@ -388,8 +397,8 @@ importers: version: 5.2.3 devDependencies: '@fuman/utils': - specifier: workspace:^ - version: link:../../private/fuman/packages/utils + specifier: 0.0.1 + version: 0.0.1 '@mtcute/core': specifier: workspace:^ version: link:../core @@ -401,13 +410,13 @@ importers: version: link:../tl-utils '@types/js-yaml': specifier: ^4.0.5 - version: 4.0.5 + version: 4.0.9 cheerio: specifier: 1.0.0-rc.12 version: 1.0.0-rc.12 csv-parse: specifier: ^5.5.0 - version: 5.5.0 + version: 5.5.6 js-yaml: specifier: 4.1.0 version: 4.1.0 @@ -415,8 +424,8 @@ importers: packages/tl-runtime: dependencies: '@fuman/utils': - specifier: workspace:^ - version: link:../../private/fuman/packages/utils + specifier: 0.0.1 + version: 0.0.1 long: specifier: 5.2.3 version: 5.2.3 @@ -433,8 +442,8 @@ importers: packages/wasm: devDependencies: '@fuman/utils': - specifier: workspace:^ - version: link:../../private/fuman/packages/utils + specifier: 0.0.1 + version: 0.0.1 '@mtcute/core': specifier: workspace:^ version: link:../core @@ -448,8 +457,8 @@ importers: packages/web: dependencies: '@fuman/net': - specifier: workspace:^ - version: link:../../private/fuman/packages/net + specifier: 0.0.1 + version: 0.0.1 '@mtcute/core': specifier: workspace:^ version: link:../core @@ -466,10 +475,6 @@ importers: packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -526,52 +531,36 @@ packages: '@antfu/utils@0.7.10': resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.23.4': - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.3': - resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/runtime@7.25.0': - resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.0': - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@bundled-es-modules/cookie@2.0.0': - resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} + '@bundled-es-modules/cookie@2.0.1': + resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} '@bundled-es-modules/statuses@1.0.1': resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} @@ -587,19 +576,16 @@ packages: bundledDependencies: - is-unicode-supported - '@es-joy/jsdoccomment@0.43.1': - resolution: {integrity: sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==} - engines: {node: '>=16'} + '@drizzle-team/brocli@0.10.2': + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} '@es-joy/jsdoccomment@0.48.0': resolution: {integrity: sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==} engines: {node: '>=16'} - '@esbuild/aix-ppc64@0.19.12': - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] + '@es-joy/jsdoccomment@0.49.0': + resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} + engines: {node: '>=16'} '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} @@ -613,12 +599,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.19.12': - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} @@ -631,12 +611,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.19.12': - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} @@ -649,12 +623,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.19.12': - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} @@ -667,12 +635,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.19.12': - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} @@ -685,12 +647,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.19.12': - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} @@ -703,12 +659,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.19.12': - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} @@ -721,12 +671,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.12': - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} @@ -739,12 +683,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.19.12': - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} @@ -757,12 +695,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.19.12': - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} @@ -775,12 +707,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.19.12': - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} @@ -793,12 +719,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.19.12': - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} @@ -811,12 +731,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.19.12': - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} @@ -829,12 +743,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.19.12': - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} @@ -847,12 +755,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.19.12': - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} @@ -865,12 +767,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.19.12': - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} @@ -883,12 +779,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.19.12': - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} @@ -901,12 +791,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.19.12': - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} @@ -925,12 +809,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.19.12': - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} @@ -943,12 +821,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.19.12': - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} @@ -961,12 +833,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.19.12': - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} @@ -979,12 +845,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.19.12': - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} @@ -997,12 +857,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.19.12': - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} @@ -1015,28 +869,28 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-plugin-eslint-comments@4.4.0': - resolution: {integrity: sha512-yljsWl5Qv3IkIRmJ38h3NrHXFCm4EUl55M8doGTF6hvzvFF8kRpextgSrg2dwHev9lzBZyafCr9RelGIyQm6fw==} + '@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} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.0': - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/config-array@0.17.1': resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.1.0': - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@9.9.0': @@ -1047,29 +901,72 @@ packages: resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fuman/build@0.0.1': + resolution: {integrity: sha512-+1Yj/yuY9xeNWqiyyKBEx/8LLuBPET7BxbUf84eQd+z3GvN5cwciB7aeSAfVgJrfRQJM0GsBpy4Iv0MGDbt+pw==} + hasBin: true + peerDependencies: + typescript: 5.5.4 + vite: ^5.4.0 + + '@fuman/bun@0.0.1': + resolution: {integrity: sha512-a2qael4OQNAv8bXgkH3ZtAC+slsXafVyetf33yFXGiI/g6xkH0lIY6ymbXkT6WVtkhfrNj0gBnIl/catUWkHoQ==} + + '@fuman/fetch@0.0.1': + resolution: {integrity: sha512-cQVkw0QUbNlUzC5bfA4Vh65q0aeLfnu02W0dsuLNNzIW8fLzoVmwjVAKPL3CwSiZGEx51gAJmXuNyq0hOjaFSA==} + peerDependencies: + tough-cookie: ^5.0.0 || ^4.0.0 + valibot: ^0.42.0 + yup: ^1.0.0 + zod: ^3.0.0 + peerDependenciesMeta: + tough-cookie: + optional: true + valibot: + optional: true + yup: + optional: true + zod: + optional: true + + '@fuman/io@0.0.1': + resolution: {integrity: sha512-CHMOH2btU7FiIJvjv1Uu31+KiRU1Il4dcmN5QL+udaOoR37ZJIsFAmFjv/lqKAkltnj/2XI68L/KPi8s0PPYlA==} + + '@fuman/net@0.0.1': + resolution: {integrity: sha512-rPXOrZYPzOGLCrm3C1o+nRyL5UsQFMbVcgIW6M783SgzNjSutjiF/gL/Zvx84vnbRleFE8BRSf7lcfF5zPLdQQ==} + + '@fuman/node@0.0.1': + resolution: {integrity: sha512-V/MNkRGBElAcTr4v2DBnxDn99AfG7hZnBl183narj/q2uYBjP/T8aN5BIeIJXK+Mqj+r5JZQhTw6z1hDSqXDFQ==} + + '@fuman/utils@0.0.1': + resolution: {integrity: sha512-OJxfzheaRw1+EY4hAv1IyjyorGW+V9MmiH7JRXZTcCzIJ/gxWPLGRu2nSFuRgQVD/bzziV0iuggnI+gYZlydkQ==} + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.0': - resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@inquirer/confirm@3.1.22': - resolution: {integrity: sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==} + '@inquirer/confirm@5.0.2': + resolution: {integrity: sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/core@10.1.0': + resolution: {integrity: sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==} engines: {node: '>=18'} - '@inquirer/core@9.0.10': - resolution: {integrity: sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA==} + '@inquirer/figures@1.0.8': + resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==} engines: {node: '>=18'} - '@inquirer/figures@1.0.5': - resolution: {integrity: sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==} - engines: {node: '>=18'} - - '@inquirer/type@1.5.2': - resolution: {integrity: sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==} + '@inquirer/type@3.0.1': + resolution: {integrity: sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==} engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -1091,9 +988,6 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -1117,10 +1011,10 @@ packages: resolution: {integrity: sha512-Y+nGzU7AiBuMGt9i7lwADiJ5ZpSwYr1f3ee3dnUIkUF9BuzX+sMJf6v2QGYDOOfo1EdNZCslQZlj3x62mwnw9w==, tarball: https://npm.jsr.io/~/11/@jsr/std__assert/0.221.0.tgz} '@jsr/std__assert@0.223.0': - resolution: {integrity: sha512-9FWOoAQN1uF5SliWw3IgdXmk2usz5txvausX4sLAASHfQMbUSCe1akcD7HgFV01J/2Mr9TfCjPvsSUzuuASouQ==, tarball: https://npm.jsr.io/~/8/@jsr/std__assert/0.223.0.tgz} + resolution: {integrity: sha512-qcx+Oe/fdwQu3+XXTFXN6j7bLlEbgHDXvqokSCdJknqOz8bOdzMT5TW1bJbKhInUx2M8Kiz80HLm8VuMaOx6Xw==, tarball: https://npm.jsr.io/~/11/@jsr/std__assert/0.223.0.tgz} '@jsr/std__bytes@0.223.0': - resolution: {integrity: sha512-BBjhj0uFlB3+AVEmaPygEwY5CL5mj3vSZlusC8xxjCRNWDYGukfQT/F5GOTTfjeaq7njduk7TYe6e5cDg659yg==, tarball: https://npm.jsr.io/~/8/@jsr/std__bytes/0.223.0.tgz} + resolution: {integrity: sha512-6bhkazZZPE8iYa3unUKEd0Nk4o0k9pWe4VAjyQVqgx+hbMjLCWQHhdNCW9ySbWUbqBVuI/V+FdWGzxdfAk/HjQ==, tarball: https://npm.jsr.io/~/11/@jsr/std__bytes/0.223.0.tgz} '@jsr/std__encoding@0.221.0': resolution: {integrity: sha512-fWvwcY1zzMTPt97PVRwHaM5Vyh27NsAeX6yxy9YSLbXjDnW6zjMGmQC5qJqDAz7d8IWq/uUTPZ+A1kr1ps2eUA==, tarball: https://npm.jsr.io/~/11/@jsr/std__encoding/0.221.0.tgz} @@ -1132,13 +1026,13 @@ packages: resolution: {integrity: sha512-PErSfwKu1c9yl0a4J1U3f6PR1eZFU451Meok3d4i6OnuM8YCwqndfK/KzdIr7eYykkvB2ln/6JnF/wV37zil4A==, tarball: https://npm.jsr.io/~/11/@jsr/std__fmt/0.221.0.tgz} '@jsr/std__fmt@0.223.0': - resolution: {integrity: sha512-J6SVTw/l3C4hOwEuqnZ4ZHD1jVIIZt09fb5LP9CMGyVGNnoW8/lxJvCNhIOv+3ZXC1ErGlIzW4bgYSxHwbvSaQ==, tarball: https://npm.jsr.io/~/8/@jsr/std__fmt/0.223.0.tgz} + resolution: {integrity: sha512-iuviJIMnAxlrQaDhe6vuYVyENvN8I1YUfjv8if7SeCc1sE+K820Jaqe6J2K+UivIkXnh0Qh3Wh/PBIvdK9sI5g==, tarball: https://npm.jsr.io/~/11/@jsr/std__fmt/0.223.0.tgz} '@jsr/std__fs@0.221.0': resolution: {integrity: sha512-abz06JVR6M2YduJXDnsw3mHzUix85gpJquLbNUAjPe74XYH19BP85beNKH+xNQDYrRaQSN9zCIaQvg2Dmd+csQ==, tarball: https://npm.jsr.io/~/11/@jsr/std__fs/0.221.0.tgz} '@jsr/std__io@0.223.0': - resolution: {integrity: sha512-K+OXJHsIf9227aYgNTaapEkpphHrI+oYVkl14UV+le+Fk9MzkJmebU0XAU6krgVS283mW7VPJsXVV3gD5JWvJw==, tarball: https://npm.jsr.io/~/8/@jsr/std__io/0.223.0.tgz} + resolution: {integrity: sha512-VUPpfHeLvhooQFyujLSj6/KDCqgF+joBpb6eO9dg+JJWvy5wHj1Nl2EMRQe6Pl8nNVUwjt+ZraydkGTdlDS1jw==, tarball: https://npm.jsr.io/~/11/@jsr/std__io/0.223.0.tgz} '@jsr/std__path@0.217.0': resolution: {integrity: sha512-KoqEpZX9CE8zyyr4+X6AROOGYv95AysnJni2E5g9pqG+IGUUuNjOC3yRTvHnsB5tJ6uQs6DwET5chIdUPcylIQ==, tarball: https://npm.jsr.io/~/11/@jsr/std__path/0.217.0.tgz} @@ -1146,8 +1040,8 @@ packages: '@jsr/std__path@0.221.0': resolution: {integrity: sha512-O8iaP3yhg7nBXkoFsJS8KtL3kLESehM04YbkHEmW3hT93f1citXvR1chYVr7tlSyAcQSzc9WVvcLlX/T19XNhA==, tarball: https://npm.jsr.io/~/11/@jsr/std__path/0.221.0.tgz} - '@ljharb/through@2.3.11': - resolution: {integrity: sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==} + '@ljharb/through@2.3.13': + resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} engines: {node: '>= 0.4'} '@microsoft/api-extractor-model@7.29.4': @@ -1163,8 +1057,8 @@ packages: '@microsoft/tsdoc@0.15.0': resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} - '@mswjs/interceptors@0.29.1': - resolution: {integrity: sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==} + '@mswjs/interceptors@0.37.0': + resolution: {integrity: sha512-lDiHQMCBV9qz8c7+zxaNFQtWWaSogTYkqJ3Pg+FGYYC76nsfSxkMQ0df8fojyz16E+w4vp57NLjN2muNG7LugQ==} engines: {node: '>=18'} '@nodelib/fs.scandir@2.1.5': @@ -1196,8 +1090,8 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@polka/url@1.0.0-next.25': - resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} '@rollup/plugin-inject@5.0.5': resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} @@ -1208,8 +1102,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1217,148 +1111,93 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.13.0': - resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} + '@rollup/rollup-android-arm-eabi@4.27.2': + resolution: {integrity: sha512-Tj+j7Pyzd15wAdSJswvs5CJzJNV+qqSUcr/aCD+jpQSBtXvGnV0pnrjoc8zFTe9fcKCatkpFpOO7yAzpO998HA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.21.0': - resolution: {integrity: sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.13.0': - resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==} + '@rollup/rollup-android-arm64@4.27.2': + resolution: {integrity: sha512-xsPeJgh2ThBpUqlLgRfiVYBEf/P1nWlWvReG+aBWfNv3XEBpa6ZCmxSVnxJgLgkNz4IbxpLy64h2gCmAAQLneQ==} cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.21.0': - resolution: {integrity: sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.13.0': - resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==} + '@rollup/rollup-darwin-arm64@4.27.2': + resolution: {integrity: sha512-KnXU4m9MywuZFedL35Z3PuwiTSn/yqRIhrEA9j+7OSkji39NzVkgxuxTYg5F8ryGysq4iFADaU5osSizMXhU2A==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.21.0': - resolution: {integrity: sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.13.0': - resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==} + '@rollup/rollup-darwin-x64@4.27.2': + resolution: {integrity: sha512-Hj77A3yTvUeCIx/Vi+4d4IbYhyTwtHj07lVzUgpUq9YpJSEiGJj4vXMKwzJ3w5zp5v3PFvpJNgc/J31smZey6g==} cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.21.0': - resolution: {integrity: sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==} + '@rollup/rollup-freebsd-arm64@4.27.2': + resolution: {integrity: sha512-RjgKf5C3xbn8gxvCm5VgKZ4nn0pRAIe90J0/fdHUsgztd3+Zesb2lm2+r6uX4prV2eUByuxJNdt647/1KPRq5g==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.27.2': + resolution: {integrity: sha512-duq21FoXwQtuws+V9H6UZ+eCBc7fxSpMK1GQINKn3fAyd9DFYKPJNcUhdIKOrMFjLEJgQskoMoiuizMt+dl20g==} cpu: [x64] - os: [darwin] + os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.13.0': - resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.27.2': + resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.21.0': - resolution: {integrity: sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==} + '@rollup/rollup-linux-arm-musleabihf@4.27.2': + resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.21.0': - resolution: {integrity: sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.13.0': - resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==} + '@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.21.0': - resolution: {integrity: sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==} + '@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.13.0': - resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.21.0': - resolution: {integrity: sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': - resolution: {integrity: sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==} + '@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-riscv64-gnu@4.13.0': - resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==} + '@rollup/rollup-linux-riscv64-gnu@4.27.2': + resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.21.0': - resolution: {integrity: sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.21.0': - resolution: {integrity: sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==} + '@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-x64-gnu@4.13.0': - resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==} + '@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.21.0': - resolution: {integrity: sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==} + '@rollup/rollup-linux-x64-musl@4.27.2': + resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.13.0': - resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.21.0': - resolution: {integrity: sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.13.0': - resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==} + '@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.21.0': - resolution: {integrity: sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.13.0': - resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==} + '@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.21.0': - resolution: {integrity: sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.13.0': - resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.21.0': - resolution: {integrity: sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==} + '@rollup/rollup-win32-x64-msvc@4.27.2': + resolution: {integrity: sha512-foJM5vv+z2KQmn7emYdDLyTbkoO5bkHZE1oth2tWbQNGW7mX32d46Hz6T0MqXdWS2vBZhaEtHqdy9WYwGfiliA==} cpu: [x64] os: [win32] @@ -1384,34 +1223,23 @@ packages: '@rushstack/ts-command-line@4.22.3': resolution: {integrity: sha512-edMpWB3QhFFZ4KtSzS8WNjBgR4PXPPOVrOHMbb7kNpmQ1UFS9HdVtjCXg1H5fG+xYAbeE+TMPcVPUyX2p84STA==} - '@shikijs/core@1.12.1': - resolution: {integrity: sha512-biCz/mnkMktImI6hMfMX3H9kOeqsInxWEyCHbSlL8C/2TR1FqfmGxTLRNwYCKsyCyxWLbB8rEqXRVZuyxuLFmA==} + '@shikijs/core@1.23.0': + resolution: {integrity: sha512-J4Fo22oBlfRHAXec+1AEzcowv+Qdf4ZQkuP/X/UHYH9+KA9LvyFXSXyS+HxuBRFfon+u7bsmKdRBjoZlbDVRkQ==} - '@stylistic/eslint-plugin-js@2.6.4': - resolution: {integrity: sha512-kx1hS3xTvzxZLdr/DCU/dLBE++vcP97sHeEFX2QXhk1Ipa4K1rzPOLw1HCbf4mU3s+7kHP5eYpDe+QteEOFLug==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=8.40.0' + '@shikijs/engine-javascript@1.23.0': + resolution: {integrity: sha512-CcrppseWShG+8Efp1iil9divltuXVdCaU4iu+CKvzTGZO5RmXyAiSx668M7VbX8+s/vt1ZKu75Vn/jWi8O3G/Q==} - '@stylistic/eslint-plugin-jsx@2.6.4': - resolution: {integrity: sha512-bIvVhdtjmyu3S10V7QRIuawtCZSq9gRmzAX23ucjCOdSFzEwlq+di0IM0riBAvvQerrJL4SM6G3xgyPs8BSXIA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=8.40.0' + '@shikijs/engine-oniguruma@1.23.0': + resolution: {integrity: sha512-gS8bZLqVvmZXX+E5JUMJICsBp+kx6gj79MH/UEpKHKIqnUzppgbmEn6zLa6mB5D+sHse2gFei3YYJxQe1EzZXQ==} - '@stylistic/eslint-plugin-plus@2.6.4': - resolution: {integrity: sha512-EuRvtxhf7Hv8OoMIePulP/6rBJIgPTu1l5GAm1780WcF1Cl8bOZXIn84Pdac5pNv6lVlzCOFm8MD3VE+2YROuA==} - peerDependencies: - eslint: '*' + '@shikijs/types@1.23.0': + resolution: {integrity: sha512-HiwzsihRao+IbPk7FER/EQT/D0dEEK3n5LAtHDzL5iRT+JMblA7y9uitUnjEnHeLkKigNM+ZplrP7MuEyyc5kA==} - '@stylistic/eslint-plugin-ts@2.6.4': - resolution: {integrity: sha512-yxL8Hj6WkObw1jfiLpBzKy5yfxY6vwlwO4miq34ySErUjUecPV5jxfVbOe4q1QDPKemQGPq93v7sAQS5PzM8lA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=8.40.0' + '@shikijs/vscode-textmate@9.3.0': + resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} - '@stylistic/eslint-plugin@2.6.4': - resolution: {integrity: sha512-euUGnjzH8EOqEYTGk9dB2OBINp0FX1nuO7/k4fO82zNRBIKZgJoDwTLM4Ce+Om6W1Qmh1PrZjCr4jh4tMEXGPQ==} + '@stylistic/eslint-plugin@2.10.1': + resolution: {integrity: sha512-U+4yzNXElTf9q0kEfnloI9XbOyD4cnEQCxjUI94q0+W++0GAEQvJ/slwEj9lwjDHfGADRSr+Tco/z0XJvmDfCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' @@ -1444,14 +1272,11 @@ packages: '@types/cross-spawn@6.0.6': resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} - '@types/eslint@8.56.11': - resolution: {integrity: sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==} + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/eslint@9.6.0': - resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} - - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/events@3.0.0': resolution: {integrity: sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==} @@ -1459,20 +1284,20 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/inquirer@9.0.6': - resolution: {integrity: sha512-1Go1AAP/yOy3Pth5Xf1DC3nfZ03cJLCPx6E2YnSN/5I3w1jHBVH4170DkZ+JxfmA7c9kL9+bf9z3FRGa4kNAqg==} + '@types/inquirer@9.0.7': + resolution: {integrity: sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==} - '@types/js-yaml@4.0.5': - resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - '@types/json-schema@7.0.12': - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - '@types/mute-stream@0.0.4': - resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} '@types/node@20.10.0': resolution: {integrity: sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==} @@ -1480,9 +1305,6 @@ packages: '@types/node@20.12.14': resolution: {integrity: sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg==} - '@types/node@22.2.0': - resolution: {integrity: sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==} - '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1492,29 +1314,26 @@ packages: '@types/statuses@2.0.5': resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} - '@types/through@0.0.32': - resolution: {integrity: sha512-7XsfXIsjdfJM2wFDRAtEWp3zb2aVPk5QeyZxGlVK57q4u26DczMHhJmlhr0Jqv0THwxam/L8REXkj8M2I/lcvw==} + '@types/through@0.0.33': + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - '@types/unist@2.0.10': - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@types/unist@3.0.2': - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/wrap-ansi@3.0.0': - resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - - '@types/ws@8.5.10': - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + '@types/ws@8.5.13': + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} '@types/ws@8.5.4': resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} - '@typescript-eslint/eslint-plugin@8.1.0': - resolution: {integrity: sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==} + '@typescript-eslint/eslint-plugin@8.14.0': + resolution: {integrity: sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -1524,8 +1343,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.1.0': - resolution: {integrity: sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==} + '@typescript-eslint/parser@8.14.0': + resolution: {integrity: sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1538,12 +1357,12 @@ packages: resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.1.0': - resolution: {integrity: sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==} + '@typescript-eslint/scope-manager@8.14.0': + resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.1.0': - resolution: {integrity: sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==} + '@typescript-eslint/type-utils@8.14.0': + resolution: {integrity: sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1555,8 +1374,8 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.1.0': - resolution: {integrity: sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==} + '@typescript-eslint/types@8.14.0': + resolution: {integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.18.0': @@ -1568,8 +1387,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.1.0': - resolution: {integrity: sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==} + '@typescript-eslint/typescript-estree@8.14.0': + resolution: {integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1583,8 +1402,8 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.1.0': - resolution: {integrity: sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==} + '@typescript-eslint/utils@8.14.0': + resolution: {integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1593,10 +1412,13 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.1.0': - resolution: {integrity: sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==} + '@typescript-eslint/visitor-keys@8.14.0': + resolution: {integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@vitest/browser@2.0.5': resolution: {integrity: sha512-VbOYtu/6R3d7ASZREcrJmRY/sQuRFO9wMVsEDqfYbWiJRh2fDNi8CL1Csn7Ux31pOcPmmM5QvzFCMpiojvVh8g==} peerDependencies: @@ -1617,16 +1439,14 @@ packages: peerDependencies: vitest: 2.0.5 - '@vitest/eslint-plugin@1.0.3': - resolution: {integrity: sha512-7hTONh+lqN+TEimHy2aWVdHVqYohcxLGD4yYBwSVvhyiti/j9CqBNMQvOa6xLoVcEtaWAoCCDbYgvxwNqA4lsA==} + '@vitest/eslint-plugin@1.1.10': + resolution: {integrity: sha512-uScH5Kz5v32vvtQYB2iodpoPg2mGASK+VKpjlc2IUgE0+16uZKqVKi2vQxjxJ6sMCQLBs4xhBFZlmZBszsmfKQ==} peerDependencies: '@typescript-eslint/utils': '>= 8.0' eslint: '>= 8.57.0' typescript: 5.5.4 vitest: '*' peerDependenciesMeta: - '@typescript-eslint/utils': - optional: true typescript: optional: true vitest: @@ -1638,6 +1458,9 @@ packages: '@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/runner@2.0.5': resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} @@ -1655,26 +1478,26 @@ packages: '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - '@volar/language-core@2.4.0': - resolution: {integrity: sha512-FTla+khE+sYK0qJP+6hwPAAUwiNHVMph4RUXpxf/FIPKUP61NFrVZorml4mjFShnueR2y9/j8/vnh09YwVdH7A==} + '@volar/language-core@2.4.10': + resolution: {integrity: sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==} - '@volar/source-map@2.4.0': - resolution: {integrity: sha512-2ceY8/NEZvN6F44TXw2qRP6AQsvCYhV2bxaBPWxV9HqIfkbRydSksTFObCF1DBDNBfKiZTS8G/4vqV6cvjdOIQ==} + '@volar/source-map@2.4.10': + resolution: {integrity: sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==} - '@volar/typescript@2.4.0': - resolution: {integrity: sha512-9zx3lQWgHmVd+JRRAHUSRiEhe4TlzL7U7e6ulWXOxHH/WNYxzKwCvZD7WYWEZFdw4dHfTD9vUR0yPQO6GilCaQ==} + '@volar/typescript@2.4.10': + resolution: {integrity: sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==} - '@vue/compiler-core@3.4.37': - resolution: {integrity: sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==} + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} - '@vue/compiler-dom@3.4.37': - resolution: {integrity: sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==} + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} - '@vue/compiler-sfc@3.4.37': - resolution: {integrity: sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==} + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} - '@vue/compiler-ssr@3.4.37': - resolution: {integrity: sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==} + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} @@ -1687,16 +1510,16 @@ packages: typescript: optional: true - '@vue/shared@3.4.37': - resolution: {integrity: sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==} + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -1733,14 +1556,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1780,8 +1599,8 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} balanced-match@1.0.2: @@ -1799,8 +1618,8 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} @@ -1814,8 +1633,8 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} brorand@1.1.0: @@ -1833,8 +1652,9 @@ packages: browserify-des@1.0.2: resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} - browserify-rsa@4.1.0: - resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + browserify-rsa@4.1.1: + resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} + engines: {node: '>= 0.10'} browserify-sign@4.2.3: resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} @@ -1843,8 +1663,8 @@ packages: browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1861,16 +1681,13 @@ packages: builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - bun-types@1.1.24: - resolution: {integrity: sha512-UNEcYawHWOVw9GYQdOgjJvTQduYlPckmRMqpBqfkWpUzeK2CZfEP/JOYBH6SMypyfkNg/Zsqf0olN6vMrSPg3w==} + bun-types@1.1.34: + resolution: {integrity: sha512-br5QygTEL/TwB4uQOb96Ky22j4Gq2WxWH/8Oqv20fk5HagwKXo/akB+LiYgSfzexCt6kkcUaVm+bKiPl71xPvw==} cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} - call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -1882,21 +1699,20 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001651: - resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + caniuse-lite@1.0.30001680: + resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} chai@5.1.0: resolution: {integrity: sha512-kDZ7MZyM6Q1DhR9jy7dalKohXQ2yrlXkk59CR52aRKxJrobmlBNqnFQxX9xOX8w+4mz8SYlKJa/7D7ddltFXCw==} engines: {node: '>=12'} - chai@5.1.1: - resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -1905,9 +1721,15 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + character-entities-legacy@1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + character-entities@1.2.4: resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} @@ -1917,10 +1739,6 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - check-error@2.0.0: - resolution: {integrity: sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==} - engines: {node: '>= 16'} - check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -1935,8 +1753,8 @@ packages: chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - ci-info@4.0.0: - resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + ci-info@4.1.0: + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} engines: {node: '>=8'} cipher-base@1.0.4: @@ -1953,10 +1771,6 @@ packages: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} - cli-spinners@2.9.1: - resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} - engines: {node: '>=6'} - cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} @@ -1973,22 +1787,19 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} @@ -2002,8 +1813,8 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.7: - resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} console-browserify@1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} @@ -2011,12 +1822,12 @@ packages: constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - core-js-compat@3.38.0: - resolution: {integrity: sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==} + core-js-compat@3.39.0: + resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2042,8 +1853,9 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - crypto-browserify@3.12.0: - resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + crypto-browserify@3.12.1: + resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} + engines: {node: '>= 0.10'} css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} @@ -2057,8 +1869,8 @@ packages: engines: {node: '>=4'} hasBin: true - csv-parse@5.5.0: - resolution: {integrity: sha512-RxruSK3M4XgzcD7Trm2wEN+SJ26ChIb903+IWxNOcB5q4jT2Cs+hFr6QP39J05EohshRFEvyzEBoZ/466S2sbw==} + csv-parse@5.5.6: + resolution: {integrity: sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==} de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} @@ -2071,8 +1883,8 @@ packages: supports-color: optional: true - debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -2084,8 +1896,8 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - deep-eql@5.0.1: - resolution: {integrity: sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} deep-extend@0.6.0: @@ -2102,10 +1914,6 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} - engines: {node: '>= 0.4'} - define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -2117,10 +1925,17 @@ packages: des.js@1.1.0: resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} - detect-libc@2.0.1: - resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} @@ -2177,11 +1992,14 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.6: - resolution: {integrity: sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==} + electron-to-chromium@1.5.62: + resolution: {integrity: sha512-t8c+zLmJHa9dJy96yBZRXGQYoiCEnHYgFwn1asvSPZSUdVxnB62A4RASd7k41ytG3ErFBA0TpHlKg9D9SQBmLg==} - elliptic@6.5.5: - resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2203,10 +2021,6 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@5.0.0: - resolution: {integrity: sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==} - engines: {node: '>=0.12'} - error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -2221,11 +2035,6 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -2236,12 +2045,8 @@ packages: engines: {node: '>=18'} hasBin: true - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-string-regexp@1.0.5: @@ -2262,27 +2067,44 @@ packages: peerDependencies: eslint: '>=6.0.0' + eslint-compat-utils@0.6.0: + resolution: {integrity: sha512-1vVBdI/HLS6HTHVQCJGlN+LOF0w1Rs/WB9se23mQr84cRM0iMM8PulMFFhQdQ1BvS0cGwjpis4xziI91Rk0l6g==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + eslint-config-flat-gitignore@0.1.8: resolution: {integrity: sha512-OEUbS2wzzYtUfshjOqzFo4Bl4lHykXUdM08TCnYNl7ki+niW4Q1R0j0FDFDr0vjVsI5ZFOz5LvluxOP+Ew+dYw==} - eslint-flat-config-utils@0.3.0: - resolution: {integrity: sha512-FaFQLUunAl6YK7aU/pT23DXYVWg/cEHbSfxwAxpCGT6Su8H9RfkmzKLh1G2bba46p6dTlQeA4VTiV5//0SeToQ==} + eslint-flat-config-utils@0.3.1: + resolution: {integrity: sha512-eFT3EaoJN1hlN97xw4FIEX//h0TiFUobgl2l5uLkIwhVN9ahGq95Pbs+i1/B5UACA78LO3rco3JzuvxLdTUOPA==} eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-json-compat-utils@0.2.1: + resolution: {integrity: sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==} + engines: {node: '>=12'} + peerDependencies: + '@eslint/json': '*' + eslint: '*' + jsonc-eslint-parser: ^2.4.0 + peerDependenciesMeta: + '@eslint/json': + optional: true + eslint-merge-processors@0.1.0: resolution: {integrity: sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==} peerDependencies: eslint: '*' - eslint-plugin-antfu@2.3.5: - resolution: {integrity: sha512-q3S9q7O176sd5VyPKksN1WGtB0l8W1jeWs61xWAmbM5JdZN8q9e0Vmm+tY/YOygHfn1eK9uE4/MGyZBebdtgLA==} + eslint-plugin-antfu@2.7.0: + resolution: {integrity: sha512-gZM3jq3ouqaoHmUNszb1Zo2Ux7RckSvkGksjLWz9ipBYGSv1EwwBETN6AdiUXn+RpVHXTbEMPAPlXJazcA6+iA==} peerDependencies: eslint: '*' - eslint-plugin-command@0.2.3: - resolution: {integrity: sha512-1bBYNfjZg60N2ZpLV5ATYSYyueIJ+zl5yKrTs0UFDdnyu07dNSZ7Xplnc+Wb6SXTdc1sIaoIrnuyhvztcltX6A==} + eslint-plugin-command@0.2.6: + resolution: {integrity: sha512-T0bHZ1oblW1xUHUVoBKZJR2osSNNGkfZuK4iqboNwuNS/M7tdp3pmURaJtTi/XDzitxaQ02lvOdFH0mUd5QLvQ==} peerDependencies: eslint: '*' @@ -2298,14 +2120,14 @@ packages: peerDependencies: eslint: ^8.56.0 || ^9.0.0-0 - eslint-plugin-jsdoc@50.2.2: - resolution: {integrity: sha512-i0ZMWA199DG7sjxlzXn5AeYZxpRfMJjDPUl7lL9eJJX8TPRoIaxJU4ys/joP5faM5AXE1eqW/dslCj3uj4Nqpg==} + eslint-plugin-jsdoc@50.5.0: + resolution: {integrity: sha512-xTkshfZrUbiSHXBwZ/9d5ulZ2OcHXxSvm/NPo494H/hadLRJwOq5PMV0EUpMqsb9V+kQo+9BAgi6Z7aJtdBp2A==} engines: {node: '>=18'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-jsonc@2.16.0: - resolution: {integrity: sha512-Af/ZL5mgfb8FFNleH6KlO4/VdmDuTqmM+SPnWcdoWywTetv7kq+vQe99UyQb9XO3b0OWLVuTH7H0d/PXYCMdSg==} + eslint-plugin-jsonc@2.18.1: + resolution: {integrity: sha512-6qY8zDpxOwPQNcr8eZ+RxwGX6IPHws5/Qef7aBEjER8rB9+UMB6zQWVIVcbP7xzFmEMHAesNFPe/sIlU4c78dg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -2316,8 +2138,8 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-n@17.10.2: - resolution: {integrity: sha512-e+s4eAf5NtJaxPhTNu3qMO0Iz40WANS93w9LQgYcvuljgvDmWi/a3rh+OrNyMHeng6aOWGJO0rCg5lH4zi8yTw==} + eslint-plugin-n@17.13.2: + resolution: {integrity: sha512-MhBAKkT01h8cOXcTBTlpuR7bxH5OBUNpUXefsvwSVEy46cY4m/Kzr2osUCQvA3zJFD6KuCeNNDv0+HDuWk/OcA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' @@ -2326,14 +2148,14 @@ packages: resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} engines: {node: '>=5.0.0'} - eslint-plugin-perfectionist@3.2.0: - resolution: {integrity: sha512-cX1aztMbSfRWPKJH8CD+gadrbkS+RNH1OGWuNGws8J6rHzYYhawxWTU/yzMYjq2IRJCpBCfhgfa7BHRXQYxLHA==} + eslint-plugin-perfectionist@3.9.1: + resolution: {integrity: sha512-9WRzf6XaAxF4Oi5t/3TqKP5zUjERhasHmLFHin2Yw6ZAp/EP/EVA2dr3BhQrrHWCm5SzTMZf0FcjDnBkO2xFkA==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: astro-eslint-parser: ^1.0.2 eslint: '>=8.0.0' svelte: '>=3.0.0' - svelte-eslint-parser: ^0.41.0 + svelte-eslint-parser: ^0.41.1 vue-eslint-parser: '>=9.0.0' peerDependenciesMeta: astro-eslint-parser: @@ -2345,8 +2167,8 @@ packages: vue-eslint-parser: optional: true - eslint-plugin-regexp@2.6.0: - resolution: {integrity: sha512-FCL851+kislsTEQEMioAlpDuK5+E5vs0hi1bF8cFlPlHcEjeRhuAzEsGikXRreE+0j4WhW2uO54MqTjXtYOi3A==} + eslint-plugin-regexp@2.7.0: + resolution: {integrity: sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==} engines: {node: ^18 || >=20} peerDependencies: eslint: '>=8.44.0' @@ -2363,8 +2185,8 @@ packages: peerDependencies: eslint: '>=8.56.0' - eslint-plugin-unused-imports@4.1.3: - resolution: {integrity: sha512-lqrNZIZjFMUr7P06eoKtQLwyVRibvG7N+LtfKtObYGizAAGrcqLkc3tDx+iAik2z7q0j/XI3ihjupIqxhFabFA==} + eslint-plugin-unused-imports@4.1.4: + resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} peerDependencies: '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 eslint: ^9.0.0 || ^8.0.0 @@ -2372,14 +2194,14 @@ packages: '@typescript-eslint/eslint-plugin': optional: true - eslint-plugin-vue@9.27.0: - resolution: {integrity: sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==} + eslint-plugin-vue@9.31.0: + resolution: {integrity: sha512-aYMUCgivhz1o4tLkRHj5oq9YgYPM4/EJc0M7TAKRLCUA5OYxRLAhYEVD2nLtTwLyixEFI+/QXSvKU9ESZFgqjQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-yml@1.14.0: - resolution: {integrity: sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==} + eslint-plugin-yml@1.15.0: + resolution: {integrity: sha512-leC8APYVOsKyWUlvRwVhewytK5wS70BfMqIaUplFstRfzCoVp0YoEroV4cUEvQrBj93tQ3M9LcjO/ewr6D4kjA==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -2394,16 +2216,16 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.0.2: - resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint@9.9.0: @@ -2416,18 +2238,14 @@ packages: jiti: optional: true - espree@10.1.0: - resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -2486,8 +2304,16 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -2503,8 +2329,8 @@ packages: file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} find-up-simple@1.0.0: @@ -2529,15 +2355,15 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} fs-extra@7.0.1: @@ -2554,9 +2380,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -2564,12 +2387,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - - get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -2578,8 +2395,8 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-tsconfig@4.7.6: - resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} @@ -2609,8 +2426,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.9.0: - resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} + globals@15.12.0: + resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==} engines: {node: '>=18'} globby@11.1.0: @@ -2620,8 +2437,8 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -2635,44 +2452,29 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - hash-base@3.0.4: resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} engines: {node: '>=4'} - hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} - hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} @@ -2680,6 +2482,12 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -2696,6 +2504,9 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} @@ -2716,10 +2527,6 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2771,8 +2578,9 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} is-decimal@1.0.4: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} @@ -2819,8 +2627,8 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} is-unicode-supported@0.1.0: @@ -2860,8 +2668,8 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.0.1: - resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} + jackspeak@4.0.2: + resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} engines: {node: 20 || >=22} jju@1.4.0: @@ -2874,10 +2682,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsdoc-type-pratt-parser@4.0.0: - resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} - engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@4.1.0: resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} @@ -2957,18 +2761,14 @@ packages: long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - loupe@3.1.0: - resolution: {integrity: sha512-qKl+FrLXUhFuHUoDJG7f8P8gEMHq9NFS0c6ghXG1J0rldmZFQZoNVv/vyirE9qwCIhWZDsvEFd1sbFu3GvRQFg==} + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} - loupe@3.1.1: - resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} - engines: {node: 14 || >=16.14} - - lru-cache@11.0.0: - resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==} + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} engines: {node: 20 || >=22} lru-cache@6.0.0: @@ -2982,15 +2782,11 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.11: - resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} - magic-string@0.30.8: - resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} - engines: {node: '>=12'} - - magicast@0.3.4: - resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -3006,6 +2802,9 @@ packages: mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdast-util-to-string@2.0.0: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} @@ -3019,11 +2818,26 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.1: + resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} + micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} miller-rabin@4.0.1: @@ -3066,8 +2880,8 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.6: - resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} @@ -3076,21 +2890,18 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mlly@1.7.1: - resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + mlly@1.7.3: + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.3.5: - resolution: {integrity: sha512-+GUI4gX5YC5Bv33epBrD+BGdmDvBg2XGruiWnI3GbIbRmMMBeZ5gs3mJ51OWSGHgJKztZ8AtZeYMMNMVrje2/Q==} + msw@2.6.5: + resolution: {integrity: sha512-PnlnTpUlOrj441kYQzzFhzMzMCGFT6a2jKUBG7zSpLkYS5oh8Arrbc0dL8/rNAtxaoBy0EVs2mFqj2qdmWK7lQ==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -3106,6 +2917,10 @@ packages: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3123,8 +2938,8 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - node-abi@3.15.0: - resolution: {integrity: sha512-Ic6z/j6I9RLm4ov7npo1I48UQr2BEyFCqh6p7S1dhEx9jPO0GPGq/e2Rb7x7DroQrmiVMz/Bw1vJm9sPAl2nxA==} + node-abi@3.71.0: + resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} engines: {node: '>=10'} node-gyp-build@4.8.1: @@ -3134,8 +2949,8 @@ packages: node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - node-stdlib-browser@1.2.0: - resolution: {integrity: sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==} + node-stdlib-browser@1.2.1: + resolution: {integrity: sha512-dZezG3D88Lg22DwyjsDuUs7cCT/XGr8WwJgg/S3ZnkcWuPet2Tt/W1d2Eytb1Z73JpZv+XVCDI5TWv6UMRq0Gg==} engines: {node: '>=10'} normalize-package-data@2.5.0: @@ -3145,14 +2960,12 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nth-check@2.0.1: - resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} @@ -3162,8 +2975,8 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} once@1.4.0: @@ -3177,11 +2990,14 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + oniguruma-to-es@0.1.2: + resolution: {integrity: sha512-sBYKVJlIMB0WPO+tSu/NNB1ytSFeHyyJZ3Ayxfx3f/QUuXu0lvZk0VB4K7npmdlHSC0ldqanzh/sUSlAbgCTfw==} + openurl@1.1.1: resolution: {integrity: sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==} - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} ora@5.4.1: @@ -3218,8 +3034,8 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -3239,19 +3055,19 @@ packages: resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} engines: {node: '>=14'} - parse-imports@2.1.1: - resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} + parse-imports@2.2.1: + resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==} engines: {node: '>= 18'} parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse5-htmlparser2-tree-adapter@7.0.0: - resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -3279,8 +3095,8 @@ packages: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} - path-to-regexp@6.2.2: - resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -3297,11 +3113,8 @@ packages: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -3315,8 +3128,8 @@ packages: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} - pkg-types@1.1.3: - resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} playwright-core@1.42.1: resolution: {integrity: sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==} @@ -3332,20 +3145,20 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} - postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.41: - resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} - engines: {node: ^10 || ^12 || >=14} - - prebuild-install@7.1.1: - resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + prebuild-install@7.1.2: + resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} engines: {node: '>=10'} hasBin: true @@ -3369,14 +3182,17 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + psl@1.10.0: + resolution: {integrity: sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==} public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} - pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} @@ -3385,12 +3201,12 @@ packages: punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - punycode@2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.12.0: - resolution: {integrity: sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} querystring-es3@0.2.1: @@ -3427,8 +3243,8 @@ packages: readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} refa@0.12.1: @@ -3438,6 +3254,15 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regex-recursion@4.2.1: + resolution: {integrity: sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@4.4.0: + resolution: {integrity: sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==} + regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -3468,8 +3293,8 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true restore-cursor@3.1.0: @@ -3494,13 +3319,8 @@ packages: peerDependencies: rollup: ^3.0.0 || ^4.0.0 - rollup@4.13.0: - resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rollup@4.21.0: - resolution: {integrity: sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==} + rollup@4.27.2: + resolution: {integrity: sha512-KreA+PzWmk2yaFmZVwe6GB2uBD86nXl86OsDkt1bJS9p3vqWuEQ6HnJJ+j/mZi/q0920P99/MVRlB4L3crpF5w==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3565,8 +3385,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.12.1: - resolution: {integrity: sha512-nwmjbHKnOYYAe1aaQyEBHvQymJgfm86ZSS7fT8OaPRr4sbAcBNz7PbfAikMEFSDQ6se2j2zobkXvVKcBOm0ysg==} + shiki@1.23.0: + resolution: {integrity: sha512-xfdu9DqPkIpExH29cmiTlgo0/jBki5la1Tkfhsv+Wu5TT3APLNHslR1acxuKJOCWqVdSc+pIbs/2ozjVRGppdg==} side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} @@ -3578,10 +3398,6 @@ packages: signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} - engines: {node: '>=14'} - signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -3606,18 +3422,17 @@ packages: slashes@3.0.12: resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} - source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -3630,8 +3445,8 @@ packages: spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} + spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -3646,8 +3461,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} @@ -3676,6 +3491,9 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3700,10 +3518,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3720,8 +3534,8 @@ packages: resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} engines: {node: '>=12.20'} - synckit@0.9.1: - resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} tapable@2.2.1: @@ -3749,26 +3563,26 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinypool@1.0.0: - resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + 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} tinyrainbow@1.2.0: resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} - tinyspy@3.0.0: - resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==} + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3785,14 +3599,17 @@ packages: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + ts-api-utils@1.4.0: + resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} engines: {node: '>=16'} peerDependencies: typescript: 5.5.4 - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} tsx@4.17.0: resolution: {integrity: sha512-eN4mnDA5UMKDt4YZixo9tBioibaMBpoxBkD+rIPAjVmYERSG0/dWEY1CEFuV89CgASlKL499q8AhmkMnnjtOJg==} @@ -3829,8 +3646,8 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@4.24.0: - resolution: {integrity: sha512-spAaHzc6qre0TlZQQ2aA/nGMe+2Z/wyGk5Z+Ru2VUfdNwT6kWO6TjevOlpebsATEG1EIQ2sOiDszud3lO5mt/Q==} + type-fest@4.27.0: + resolution: {integrity: sha512-3IMSWgP7C5KSQqmo1wjhKrwsvXAtF33jO3QY+Uy++ia7hqvgSK6iXbbg5PbDBc1P2ZbNEDgejOrN4YooXvhwCw==} engines: {node: '>=16'} typedoc@0.26.5: @@ -3851,20 +3668,32 @@ packages: ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@6.13.0: - resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==} + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -3873,12 +3702,12 @@ packages: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} - universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -3889,8 +3718,9 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - url@0.11.3: - resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} + url@0.11.4: + resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} + engines: {node: '>= 0.4'} util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -3901,6 +3731,12 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-node@2.0.5: resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==} engines: {node: ^18.0.0 || >=20.0.0} @@ -3921,34 +3757,6 @@ packages: peerDependencies: vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - vite@5.1.6: - resolution: {integrity: sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - vite@5.4.2: resolution: {integrity: sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4026,8 +3834,8 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} which@2.0.2: @@ -4040,6 +3848,10 @@ packages: engines: {node: '>=8'} hasBin: true + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -4101,8 +3913,8 @@ packages: resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} engines: {node: ^14.17.0 || >=16.0.0} - yaml@2.5.0: - resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + yaml@2.6.0: + resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} engines: {node: '>= 14'} hasBin: true @@ -4122,54 +3934,59 @@ packages: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} -snapshots: + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - '@aashutoshrathi/word-wrap@1.2.6': {} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/eslint-config@2.26.0(@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4))(@vue/compiler-sfc@3.4.37)(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5))': + '@antfu/eslint-config@2.26.0(@typescript-eslint/utils@8.14.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(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5))': dependencies: '@antfu/install-pkg': 0.3.5 '@clack/prompts': 0.7.0 - '@eslint-community/eslint-plugin-eslint-comments': 4.4.0(eslint@9.9.0) - '@stylistic/eslint-plugin': 2.6.4(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/eslint-plugin': 8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/parser': 8.1.0(eslint@9.9.0)(typescript@5.5.4) - '@vitest/eslint-plugin': 1.0.3(@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5)) + '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.9.0) + '@stylistic/eslint-plugin': 2.10.1(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/parser': 8.14.0(eslint@9.9.0)(typescript@5.5.4) + '@vitest/eslint-plugin': 1.1.10(@typescript-eslint/utils@8.14.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5)) eslint: 9.9.0 eslint-config-flat-gitignore: 0.1.8 - eslint-flat-config-utils: 0.3.0 + eslint-flat-config-utils: 0.3.1 eslint-merge-processors: 0.1.0(eslint@9.9.0) - eslint-plugin-antfu: 2.3.5(eslint@9.9.0) - eslint-plugin-command: 0.2.3(eslint@9.9.0) + eslint-plugin-antfu: 2.7.0(eslint@9.9.0) + eslint-plugin-command: 0.2.6(eslint@9.9.0) eslint-plugin-import-x: 3.1.0(eslint@9.9.0)(typescript@5.5.4) - eslint-plugin-jsdoc: 50.2.2(eslint@9.9.0) - eslint-plugin-jsonc: 2.16.0(eslint@9.9.0) + eslint-plugin-jsdoc: 50.5.0(eslint@9.9.0) + eslint-plugin-jsonc: 2.18.1(eslint@9.9.0) eslint-plugin-markdown: 5.1.0(eslint@9.9.0) - eslint-plugin-n: 17.10.2(eslint@9.9.0) + eslint-plugin-n: 17.13.2(eslint@9.9.0) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-perfectionist: 3.2.0(eslint@9.9.0)(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.9.0)) - eslint-plugin-regexp: 2.6.0(eslint@9.9.0) + eslint-plugin-perfectionist: 3.9.1(eslint@9.9.0)(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.9.0)) + eslint-plugin-regexp: 2.7.0(eslint@9.9.0) eslint-plugin-toml: 0.11.1(eslint@9.9.0) eslint-plugin-unicorn: 55.0.0(eslint@9.9.0) - eslint-plugin-unused-imports: 4.1.3(@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0) - eslint-plugin-vue: 9.27.0(eslint@9.9.0) - eslint-plugin-yml: 1.14.0(eslint@9.9.0) - eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.4.37)(eslint@9.9.0) - globals: 15.9.0 + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0) + eslint-plugin-vue: 9.31.0(eslint@9.9.0) + eslint-plugin-yml: 1.15.0(eslint@9.9.0) + eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.9.0) + globals: 15.12.0 jsonc-eslint-parser: 2.4.0 local-pkg: 0.5.0 parse-gitignore: 2.0.0 - picocolors: 1.0.1 + picocolors: 1.1.1 toml-eslint-parser: 0.10.0 vue-eslint-parser: 9.4.3(eslint@9.9.0) yaml-eslint-parser: 1.2.3 yargs: 17.7.2 transitivePeerDependencies: + - '@eslint/json' - '@typescript-eslint/utils' - '@vue/compiler-sfc' - supports-color @@ -4183,51 +4000,34 @@ snapshots: '@antfu/utils@0.7.10': {} - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.26.2': dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.0 - - '@babel/helper-string-parser@7.23.4': {} - - '@babel/helper-string-parser@7.24.8': {} - - '@babel/helper-validator-identifier@7.22.20': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 + '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.1.1 - '@babel/parser@7.25.3': + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/parser@7.26.2': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.26.0 - '@babel/runtime@7.25.0': + '@babel/runtime@7.26.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/types@7.24.0': + '@babel/types@7.26.0': dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - '@babel/types@7.25.2': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 '@bcoe/v8-coverage@0.2.3': {} - '@bundled-es-modules/cookie@2.0.0': + '@bundled-es-modules/cookie@2.0.1': dependencies: - cookie: 0.5.0 + cookie: 0.7.2 '@bundled-es-modules/statuses@1.0.1': dependencies: @@ -4240,23 +4040,16 @@ snapshots: '@clack/core@0.3.4': dependencies: - picocolors: 1.0.1 + picocolors: 1.1.1 sisteransi: 1.0.5 '@clack/prompts@0.7.0': dependencies: '@clack/core': 0.3.4 - picocolors: 1.0.1 + picocolors: 1.1.1 sisteransi: 1.0.5 - '@es-joy/jsdoccomment@0.43.1': - dependencies: - '@types/eslint': 8.56.11 - '@types/estree': 1.0.5 - '@typescript-eslint/types': 7.18.0 - comment-parser: 1.4.1 - esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.0.0 + '@drizzle-team/brocli@0.10.2': {} '@es-joy/jsdoccomment@0.48.0': dependencies: @@ -4264,8 +4057,11 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@esbuild/aix-ppc64@0.19.12': - optional: true + '@es-joy/jsdoccomment@0.49.0': + dependencies: + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.1.0 '@esbuild/aix-ppc64@0.21.5': optional: true @@ -4273,153 +4069,102 @@ snapshots: '@esbuild/aix-ppc64@0.23.0': optional: true - '@esbuild/android-arm64@0.19.12': - optional: true - '@esbuild/android-arm64@0.21.5': optional: true '@esbuild/android-arm64@0.23.0': optional: true - '@esbuild/android-arm@0.19.12': - optional: true - '@esbuild/android-arm@0.21.5': optional: true '@esbuild/android-arm@0.23.0': optional: true - '@esbuild/android-x64@0.19.12': - optional: true - '@esbuild/android-x64@0.21.5': optional: true '@esbuild/android-x64@0.23.0': optional: true - '@esbuild/darwin-arm64@0.19.12': - optional: true - '@esbuild/darwin-arm64@0.21.5': optional: true '@esbuild/darwin-arm64@0.23.0': optional: true - '@esbuild/darwin-x64@0.19.12': - optional: true - '@esbuild/darwin-x64@0.21.5': optional: true '@esbuild/darwin-x64@0.23.0': optional: true - '@esbuild/freebsd-arm64@0.19.12': - optional: true - '@esbuild/freebsd-arm64@0.21.5': optional: true '@esbuild/freebsd-arm64@0.23.0': optional: true - '@esbuild/freebsd-x64@0.19.12': - optional: true - '@esbuild/freebsd-x64@0.21.5': optional: true '@esbuild/freebsd-x64@0.23.0': optional: true - '@esbuild/linux-arm64@0.19.12': - optional: true - '@esbuild/linux-arm64@0.21.5': optional: true '@esbuild/linux-arm64@0.23.0': optional: true - '@esbuild/linux-arm@0.19.12': - optional: true - '@esbuild/linux-arm@0.21.5': optional: true '@esbuild/linux-arm@0.23.0': optional: true - '@esbuild/linux-ia32@0.19.12': - optional: true - '@esbuild/linux-ia32@0.21.5': optional: true '@esbuild/linux-ia32@0.23.0': optional: true - '@esbuild/linux-loong64@0.19.12': - optional: true - '@esbuild/linux-loong64@0.21.5': optional: true '@esbuild/linux-loong64@0.23.0': optional: true - '@esbuild/linux-mips64el@0.19.12': - optional: true - '@esbuild/linux-mips64el@0.21.5': optional: true '@esbuild/linux-mips64el@0.23.0': optional: true - '@esbuild/linux-ppc64@0.19.12': - optional: true - '@esbuild/linux-ppc64@0.21.5': optional: true '@esbuild/linux-ppc64@0.23.0': optional: true - '@esbuild/linux-riscv64@0.19.12': - optional: true - '@esbuild/linux-riscv64@0.21.5': optional: true '@esbuild/linux-riscv64@0.23.0': optional: true - '@esbuild/linux-s390x@0.19.12': - optional: true - '@esbuild/linux-s390x@0.21.5': optional: true '@esbuild/linux-s390x@0.23.0': optional: true - '@esbuild/linux-x64@0.19.12': - optional: true - '@esbuild/linux-x64@0.21.5': optional: true '@esbuild/linux-x64@0.23.0': optional: true - '@esbuild/netbsd-x64@0.19.12': - optional: true - '@esbuild/netbsd-x64@0.21.5': optional: true @@ -4429,79 +4174,64 @@ snapshots: '@esbuild/openbsd-arm64@0.23.0': optional: true - '@esbuild/openbsd-x64@0.19.12': - optional: true - '@esbuild/openbsd-x64@0.21.5': optional: true '@esbuild/openbsd-x64@0.23.0': optional: true - '@esbuild/sunos-x64@0.19.12': - optional: true - '@esbuild/sunos-x64@0.21.5': optional: true '@esbuild/sunos-x64@0.23.0': optional: true - '@esbuild/win32-arm64@0.19.12': - optional: true - '@esbuild/win32-arm64@0.21.5': optional: true '@esbuild/win32-arm64@0.23.0': optional: true - '@esbuild/win32-ia32@0.19.12': - optional: true - '@esbuild/win32-ia32@0.21.5': optional: true '@esbuild/win32-ia32@0.23.0': optional: true - '@esbuild/win32-x64@0.19.12': - optional: true - '@esbuild/win32-x64@0.21.5': optional: true '@esbuild/win32-x64@0.23.0': optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.4.0(eslint@9.9.0)': + '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.9.0)': dependencies: escape-string-regexp: 4.0.0 eslint: 9.9.0 ignore: 5.3.2 - '@eslint-community/eslint-utils@4.4.0(eslint@9.9.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.9.0)': dependencies: eslint: 9.9.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.0': {} + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.17.1': dependencies: '@eslint/object-schema': 2.1.4 - debug: 4.3.6 + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.1.0': + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.3.6 - espree: 10.1.0 + debug: 4.3.7 + espree: 10.3.0 globals: 14.0.0 - ignore: 5.2.4 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -4513,36 +4243,86 @@ snapshots: '@eslint/object-schema@2.1.4': {} + '@fuman/build@0.0.1(tough-cookie@4.1.4)(typescript@5.5.4)(vite@5.4.2(@types/node@20.10.0))': + dependencies: + '@drizzle-team/brocli': 0.10.2 + '@fuman/fetch': 0.0.1(tough-cookie@4.1.4)(zod@3.23.8) + '@fuman/io': 0.0.1 + '@fuman/node': 0.0.1 + '@fuman/utils': 0.0.1 + cross-spawn: 7.0.3 + detect-indent: 7.0.1 + js-yaml: 4.1.0 + picomatch: 4.0.2 + semver: 7.6.3 + tinyglobby: 0.2.10 + typescript: 5.5.4 + vite: 5.4.2(@types/node@20.10.0) + zod: 3.23.8 + transitivePeerDependencies: + - tough-cookie + - valibot + - yup + + '@fuman/bun@0.0.1': + dependencies: + '@fuman/io': 0.0.1 + '@fuman/net': 0.0.1 + '@fuman/utils': 0.0.1 + + '@fuman/fetch@0.0.1(tough-cookie@4.1.4)(zod@3.23.8)': + dependencies: + '@fuman/utils': 0.0.1 + optionalDependencies: + tough-cookie: 4.1.4 + zod: 3.23.8 + + '@fuman/io@0.0.1': + dependencies: + '@fuman/utils': 0.0.1 + + '@fuman/net@0.0.1': + dependencies: + '@fuman/io': 0.0.1 + '@fuman/utils': 0.0.1 + + '@fuman/node@0.0.1': + dependencies: + '@fuman/io': 0.0.1 + '@fuman/net': 0.0.1 + '@fuman/utils': 0.0.1 + + '@fuman/utils@0.0.1': {} + '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.0': {} + '@humanwhocodes/retry@0.3.1': {} - '@inquirer/confirm@3.1.22': + '@inquirer/confirm@5.0.2(@types/node@20.10.0)': dependencies: - '@inquirer/core': 9.0.10 - '@inquirer/type': 1.5.2 + '@inquirer/core': 10.1.0(@types/node@20.10.0) + '@inquirer/type': 3.0.1(@types/node@20.10.0) + '@types/node': 20.10.0 - '@inquirer/core@9.0.10': + '@inquirer/core@10.1.0(@types/node@20.10.0)': dependencies: - '@inquirer/figures': 1.0.5 - '@inquirer/type': 1.5.2 - '@types/mute-stream': 0.0.4 - '@types/node': 22.2.0 - '@types/wrap-ansi': 3.0.0 + '@inquirer/figures': 1.0.8 + '@inquirer/type': 3.0.1(@types/node@20.10.0) ansi-escapes: 4.3.2 - cli-spinners: 2.9.2 cli-width: 4.1.0 - mute-stream: 1.0.0 + mute-stream: 2.0.0 signal-exit: 4.1.0 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 + transitivePeerDependencies: + - '@types/node' - '@inquirer/figures@1.0.5': {} + '@inquirer/figures@1.0.8': {} - '@inquirer/type@1.5.2': + '@inquirer/type@3.0.1(@types/node@20.10.0)': dependencies: - mute-stream: 1.0.0 + '@types/node': 20.10.0 '@isaacs/cliui@8.0.2': dependencies: @@ -4558,21 +4338,19 @@ snapshots: '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} - '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jsdevtools/ez-spawn@3.0.4': dependencies: @@ -4633,9 +4411,9 @@ snapshots: dependencies: '@jsr/std__assert': 0.221.0 - '@ljharb/through@2.3.11': + '@ljharb/through@2.3.13': dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 '@microsoft/api-extractor-model@7.29.4(@types/node@20.10.0)': dependencies: @@ -4656,7 +4434,7 @@ snapshots: '@rushstack/ts-command-line': 4.22.3(@types/node@20.10.0) lodash: 4.17.21 minimatch: 3.0.8 - resolve: 1.22.4 + resolve: 1.22.8 semver: 7.5.4 source-map: 0.6.1 typescript: 5.5.4 @@ -4668,11 +4446,11 @@ snapshots: '@microsoft/tsdoc': 0.15.0 ajv: 8.12.0 jju: 1.4.0 - resolve: 1.22.4 + resolve: 1.22.8 '@microsoft/tsdoc@0.15.0': {} - '@mswjs/interceptors@0.29.1': + '@mswjs/interceptors@0.37.0': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -4691,7 +4469,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 + fastq: 1.17.1 '@open-draft/deferred-promise@2.2.0': {} @@ -4707,109 +4485,76 @@ snapshots: '@pkgr/core@0.1.1': {} - '@polka/url@1.0.0-next.25': {} + '@polka/url@1.0.0-next.28': {} - '@rollup/plugin-inject@5.0.5(rollup@4.21.0)': + '@rollup/plugin-inject@5.0.5(rollup@4.27.2)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.0) + '@rollup/pluginutils': 5.1.3(rollup@4.27.2) estree-walker: 2.0.2 - magic-string: 0.30.8 + magic-string: 0.30.12 optionalDependencies: - rollup: 4.21.0 + rollup: 4.27.2 - '@rollup/pluginutils@5.1.0(rollup@4.21.0)': + '@rollup/pluginutils@5.1.3(rollup@4.27.2)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 4.0.2 optionalDependencies: - rollup: 4.21.0 + rollup: 4.27.2 - '@rollup/rollup-android-arm-eabi@4.13.0': + '@rollup/rollup-android-arm-eabi@4.27.2': optional: true - '@rollup/rollup-android-arm-eabi@4.21.0': + '@rollup/rollup-android-arm64@4.27.2': optional: true - '@rollup/rollup-android-arm64@4.13.0': + '@rollup/rollup-darwin-arm64@4.27.2': optional: true - '@rollup/rollup-android-arm64@4.21.0': + '@rollup/rollup-darwin-x64@4.27.2': optional: true - '@rollup/rollup-darwin-arm64@4.13.0': + '@rollup/rollup-freebsd-arm64@4.27.2': optional: true - '@rollup/rollup-darwin-arm64@4.21.0': + '@rollup/rollup-freebsd-x64@4.27.2': optional: true - '@rollup/rollup-darwin-x64@4.13.0': + '@rollup/rollup-linux-arm-gnueabihf@4.27.2': optional: true - '@rollup/rollup-darwin-x64@4.21.0': + '@rollup/rollup-linux-arm-musleabihf@4.27.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.13.0': + '@rollup/rollup-linux-arm64-gnu@4.27.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.21.0': + '@rollup/rollup-linux-arm64-musl@4.27.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.21.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.13.0': + '@rollup/rollup-linux-riscv64-gnu@4.27.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.21.0': + '@rollup/rollup-linux-s390x-gnu@4.27.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.13.0': + '@rollup/rollup-linux-x64-gnu@4.27.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.21.0': + '@rollup/rollup-linux-x64-musl@4.27.2': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': + '@rollup/rollup-win32-arm64-msvc@4.27.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.13.0': + '@rollup/rollup-win32-ia32-msvc@4.27.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.21.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.21.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.13.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.21.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.13.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.21.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.13.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.21.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.13.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.21.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.13.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.21.0': + '@rollup/rollup-win32-x64-msvc@4.27.2': optional: true '@rushstack/node-core-library@5.5.1(@types/node@20.10.0)': @@ -4820,14 +4565,14 @@ snapshots: fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.4 + resolve: 1.22.8 semver: 7.5.4 optionalDependencies: '@types/node': 20.10.0 '@rushstack/rig-package@0.5.3': dependencies: - resolve: 1.22.4 + resolve: 1.22.8 strip-json-comments: 3.1.1 '@rushstack/terminal@0.13.3(@types/node@20.10.0)': @@ -4846,51 +4591,41 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@shikijs/core@1.12.1': + '@shikijs/core@1.23.0': dependencies: + '@shikijs/engine-javascript': 1.23.0 + '@shikijs/engine-oniguruma': 1.23.0 + '@shikijs/types': 1.23.0 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 + + '@shikijs/engine-javascript@1.23.0': + dependencies: + '@shikijs/types': 1.23.0 + '@shikijs/vscode-textmate': 9.3.0 + oniguruma-to-es: 0.1.2 + + '@shikijs/engine-oniguruma@1.23.0': + dependencies: + '@shikijs/types': 1.23.0 + '@shikijs/vscode-textmate': 9.3.0 + + '@shikijs/types@1.23.0': + dependencies: + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - '@stylistic/eslint-plugin-js@2.6.4(eslint@9.9.0)': - dependencies: - '@types/eslint': 9.6.0 - acorn: 8.12.1 - eslint: 9.9.0 - eslint-visitor-keys: 4.0.0 - espree: 10.1.0 + '@shikijs/vscode-textmate@9.3.0': {} - '@stylistic/eslint-plugin-jsx@2.6.4(eslint@9.9.0)': + '@stylistic/eslint-plugin@2.10.1(eslint@9.9.0)(typescript@5.5.4)': dependencies: - '@stylistic/eslint-plugin-js': 2.6.4(eslint@9.9.0) - '@types/eslint': 9.6.0 + '@typescript-eslint/utils': 8.14.0(eslint@9.9.0)(typescript@5.5.4) eslint: 9.9.0 - eslint-visitor-keys: 4.0.0 - espree: 10.1.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 estraverse: 5.3.0 picomatch: 4.0.2 - - '@stylistic/eslint-plugin-plus@2.6.4(eslint@9.9.0)': - dependencies: - '@types/eslint': 9.6.0 - eslint: 9.9.0 - - '@stylistic/eslint-plugin-ts@2.6.4(eslint@9.9.0)(typescript@5.5.4)': - dependencies: - '@stylistic/eslint-plugin-js': 2.6.4(eslint@9.9.0) - '@types/eslint': 9.6.0 - '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) - eslint: 9.9.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@stylistic/eslint-plugin@2.6.4(eslint@9.9.0)(typescript@5.5.4)': - dependencies: - '@stylistic/eslint-plugin-js': 2.6.4(eslint@9.9.0) - '@stylistic/eslint-plugin-jsx': 2.6.4(eslint@9.9.0) - '@stylistic/eslint-plugin-plus': 2.6.4(eslint@9.9.0) - '@stylistic/eslint-plugin-ts': 2.6.4(eslint@9.9.0)(typescript@5.5.4) - '@types/eslint': 9.6.0 - eslint: 9.9.0 transitivePeerDependencies: - supports-color - typescript @@ -4899,8 +4634,8 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.25.0 + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.0 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -4926,40 +4661,35 @@ snapshots: dependencies: '@types/node': 20.10.0 - '@types/eslint@8.56.11': + '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.12 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 - '@types/eslint@9.6.0': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.12 - - '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} '@types/events@3.0.0': {} '@types/hast@3.0.4': dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 - '@types/inquirer@9.0.6': + '@types/inquirer@9.0.7': dependencies: - '@types/through': 0.0.32 + '@types/through': 0.0.33 rxjs: 7.8.1 - '@types/js-yaml@4.0.5': {} + '@types/js-yaml@4.0.9': {} - '@types/json-schema@7.0.12': {} + '@types/json-schema@7.0.15': {} '@types/mdast@3.0.15': dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 - '@types/mute-stream@0.0.4': + '@types/mdast@4.0.4': dependencies: - '@types/node': 20.10.0 + '@types/unist': 3.0.3 '@types/node@20.10.0': dependencies: @@ -4969,10 +4699,6 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@22.2.0': - dependencies: - undici-types: 6.13.0 - '@types/normalize-package-data@2.4.4': {} '@types/openurl@1.0.3': @@ -4981,19 +4707,17 @@ snapshots: '@types/statuses@2.0.5': {} - '@types/through@0.0.32': + '@types/through@0.0.33': dependencies: '@types/node': 20.10.0 '@types/tough-cookie@4.0.5': {} - '@types/unist@2.0.10': {} + '@types/unist@2.0.11': {} - '@types/unist@3.0.2': {} + '@types/unist@3.0.3': {} - '@types/wrap-ansi@3.0.0': {} - - '@types/ws@8.5.10': + '@types/ws@8.5.13': dependencies: '@types/node': 20.10.0 @@ -5001,31 +4725,31 @@ snapshots: dependencies: '@types/node': 20.10.0 - '@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)': dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.1.0(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 8.1.0 - '@typescript-eslint/type-utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.1.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.14.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.14.0 + '@typescript-eslint/type-utils': 8.14.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/utils': 8.14.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.14.0 eslint: 9.9.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.4.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/parser@8.14.0(eslint@9.9.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 8.1.0 - '@typescript-eslint/types': 8.1.0 - '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.1.0 - debug: 4.3.6 + '@typescript-eslint/scope-manager': 8.14.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.14.0 + debug: 4.3.7 eslint: 9.9.0 optionalDependencies: typescript: 5.5.4 @@ -5037,17 +4761,17 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@8.1.0': + '@typescript-eslint/scope-manager@8.14.0': dependencies: - '@typescript-eslint/types': 8.1.0 - '@typescript-eslint/visitor-keys': 8.1.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/visitor-keys': 8.14.0 - '@typescript-eslint/type-utils@8.1.0(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/type-utils@8.14.0(eslint@9.9.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) - debug: 4.3.6 - ts-api-utils: 1.3.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.14.0(eslint@9.9.0)(typescript@5.5.4) + debug: 4.3.7 + ts-api-utils: 1.4.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -5056,33 +4780,33 @@ snapshots: '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.1.0': {} + '@typescript-eslint/types@8.14.0': {} '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.6 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.4.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.1.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.14.0(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 8.1.0 - '@typescript-eslint/visitor-keys': 8.1.0 - debug: 4.3.6 - globby: 11.1.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/visitor-keys': 8.14.0 + debug: 4.3.7 + fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.4.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -5090,7 +4814,7 @@ snapshots: '@typescript-eslint/utils@7.18.0(eslint@9.9.0)(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.9.0) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) @@ -5099,12 +4823,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/utils@8.14.0(eslint@9.9.0)(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) - '@typescript-eslint/scope-manager': 8.1.0 - '@typescript-eslint/types': 8.1.0 - '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.9.0) + '@typescript-eslint/scope-manager': 8.14.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.5.4) eslint: 9.9.0 transitivePeerDependencies: - supports-color @@ -5115,24 +4839,27 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.1.0': + '@typescript-eslint/visitor-keys@8.14.0': dependencies: - '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/types': 8.14.0 eslint-visitor-keys: 3.4.3 - '@vitest/browser@2.0.5(playwright@1.42.1)(typescript@5.5.4)(vitest@2.0.5)': + '@ungap/structured-clone@1.2.0': {} + + '@vitest/browser@2.0.5(@types/node@20.10.0)(playwright@1.42.1)(typescript@5.5.4)(vitest@2.0.5)': dependencies: '@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.11 - msw: 2.3.5(typescript@5.5.4) + magic-string: 0.30.12 + msw: 2.6.5(@types/node@20.10.0)(typescript@5.5.4) sirv: 2.0.4 vitest: 2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5) ws: 8.18.0 optionalDependencies: playwright: 1.42.1 transitivePeerDependencies: + - '@types/node' - bufferutil - typescript - utf-8-validate @@ -5141,25 +4868,25 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.6 + debug: 4.3.7 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.11 - magicast: 0.3.4 - std-env: 3.7.0 + magic-string: 0.30.12 + magicast: 0.3.5 + std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 vitest: 2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.0.3(@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5))': + '@vitest/eslint-plugin@1.1.10(@typescript-eslint/utils@8.14.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)(vitest@2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5))': dependencies: + '@typescript-eslint/utils': 8.14.0(eslint@9.9.0)(typescript@5.5.4) eslint: 9.9.0 optionalDependencies: - '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) typescript: 5.5.4 vitest: 2.0.5(@types/node@20.10.0)(@vitest/browser@2.0.5)(@vitest/ui@2.0.5) @@ -5167,13 +4894,17 @@ snapshots: dependencies: '@vitest/spy': 2.0.5 '@vitest/utils': 2.0.5 - chai: 5.1.1 + chai: 5.1.2 tinyrainbow: 1.2.0 '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 + '@vitest/pretty-format@2.1.5': + dependencies: + tinyrainbow: 1.2.0 + '@vitest/runner@2.0.5': dependencies: '@vitest/utils': 2.0.5 @@ -5182,12 +4913,12 @@ snapshots: '@vitest/snapshot@2.0.5': dependencies: '@vitest/pretty-format': 2.0.5 - magic-string: 0.30.11 + magic-string: 0.30.12 pathe: 1.1.2 '@vitest/spy@2.0.5': dependencies: - tinyspy: 3.0.0 + tinyspy: 3.0.2 '@vitest/ui@2.0.5(vitest@2.0.5)': dependencies: @@ -5204,50 +4935,50 @@ snapshots: dependencies: '@vitest/pretty-format': 2.0.5 estree-walker: 3.0.3 - loupe: 3.1.1 + loupe: 3.1.2 tinyrainbow: 1.2.0 - '@volar/language-core@2.4.0': + '@volar/language-core@2.4.10': dependencies: - '@volar/source-map': 2.4.0 + '@volar/source-map': 2.4.10 - '@volar/source-map@2.4.0': {} + '@volar/source-map@2.4.10': {} - '@volar/typescript@2.4.0': + '@volar/typescript@2.4.10': dependencies: - '@volar/language-core': 2.4.0 + '@volar/language-core': 2.4.10 path-browserify: 1.0.1 vscode-uri: 3.0.8 - '@vue/compiler-core@3.4.37': + '@vue/compiler-core@3.5.13': dependencies: - '@babel/parser': 7.25.3 - '@vue/shared': 3.4.37 - entities: 5.0.0 + '@babel/parser': 7.26.2 + '@vue/shared': 3.5.13 + entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 - '@vue/compiler-dom@3.4.37': + '@vue/compiler-dom@3.5.13': dependencies: - '@vue/compiler-core': 3.4.37 - '@vue/shared': 3.4.37 + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 - '@vue/compiler-sfc@3.4.37': + '@vue/compiler-sfc@3.5.13': dependencies: - '@babel/parser': 7.25.3 - '@vue/compiler-core': 3.4.37 - '@vue/compiler-dom': 3.4.37 - '@vue/compiler-ssr': 3.4.37 - '@vue/shared': 3.4.37 + '@babel/parser': 7.26.2 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 estree-walker: 2.0.2 - magic-string: 0.30.11 - postcss: 8.4.41 - source-map-js: 1.2.0 + magic-string: 0.30.12 + postcss: 8.4.49 + source-map-js: 1.2.1 - '@vue/compiler-ssr@3.4.37': + '@vue/compiler-ssr@3.5.13': dependencies: - '@vue/compiler-dom': 3.4.37 - '@vue/shared': 3.4.37 + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 '@vue/compiler-vue2@2.7.16': dependencies: @@ -5256,10 +4987,10 @@ snapshots: '@vue/language-core@2.0.29(typescript@5.5.4)': dependencies: - '@volar/language-core': 2.4.0 - '@vue/compiler-dom': 3.4.37 + '@volar/language-core': 2.4.10 + '@vue/compiler-dom': 3.5.13 '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.4.37 + '@vue/shared': 3.5.13 computeds: 0.0.1 minimatch: 9.0.5 muggle-string: 0.4.1 @@ -5267,13 +4998,13 @@ snapshots: optionalDependencies: typescript: 5.5.4 - '@vue/shared@3.4.37': {} + '@vue/shared@3.5.13': {} - acorn-jsx@5.3.2(acorn@8.12.1): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 + acorn: 8.14.0 - acorn@8.12.1: {} + acorn@8.14.0: {} ajv-draft-04@1.0.0(ajv@8.13.0): optionalDependencies: @@ -5310,11 +5041,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 + ansi-regex@6.1.0: {} ansi-styles@4.3.0: dependencies: @@ -5340,7 +5067,7 @@ snapshots: asn1.js@4.10.1: dependencies: - bn.js: 4.12.0 + bn.js: 4.12.1 inherits: 2.0.4 minimalistic-assert: 1.0.1 @@ -5349,12 +5076,14 @@ snapshots: call-bind: 1.0.7 is-nan: 1.3.2 object-is: 1.1.6 - object.assign: 4.1.4 + object.assign: 4.1.5 util: 0.12.5 assertion-error@2.0.1: {} - available-typed-arrays@1.0.5: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 balanced-match@1.0.2: {} @@ -5363,7 +5092,7 @@ snapshots: better-sqlite3@11.3.0: dependencies: bindings: 1.5.0 - prebuild-install: 7.1.1 + prebuild-install: 7.1.2 bindings@1.5.0: dependencies: @@ -5373,9 +5102,9 @@ snapshots: dependencies: buffer: 5.7.1 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 - bn.js@4.12.0: {} + bn.js@4.12.1: {} bn.js@5.2.1: {} @@ -5390,15 +5119,15 @@ snapshots: dependencies: balanced-match: 1.0.2 - braces@3.0.2: + braces@3.0.3: dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 brorand@1.1.0: {} browser-resolve@2.0.0: dependencies: - resolve: 1.22.4 + resolve: 1.22.8 browserify-aes@1.2.0: dependencies: @@ -5422,18 +5151,19 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 - browserify-rsa@4.1.0: + browserify-rsa@4.1.1: dependencies: bn.js: 5.2.1 randombytes: 2.1.0 + safe-buffer: 5.2.1 browserify-sign@4.2.3: dependencies: bn.js: 5.2.1 - browserify-rsa: 4.1.0 + browserify-rsa: 4.1.1 create-hash: 1.2.0 create-hmac: 1.1.7 - elliptic: 6.5.5 + elliptic: 6.6.1 hash-base: 3.0.4 inherits: 2.0.4 parse-asn1: 5.1.7 @@ -5444,12 +5174,12 @@ snapshots: dependencies: pako: 1.0.11 - browserslist@4.23.3: + browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001651 - electron-to-chromium: 1.5.6 + caniuse-lite: 1.0.30001680 + electron-to-chromium: 1.5.62 node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.3) + update-browserslist-db: 1.1.1(browserslist@4.24.2) buffer-xor@1.0.3: {} @@ -5462,18 +5192,13 @@ snapshots: builtin-status-codes@3.0.0: {} - bun-types@1.1.24: + bun-types@1.1.34: dependencies: '@types/node': 20.12.14 - '@types/ws': 8.5.10 + '@types/ws': 8.5.13 cac@6.7.14: {} - call-bind@1.0.2: - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 - call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -5486,30 +5211,26 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001651: {} + caniuse-lite@1.0.30001680: {} + + ccount@2.0.1: {} chai@5.1.0: dependencies: assertion-error: 2.0.1 - check-error: 2.0.0 - deep-eql: 5.0.1 - loupe: 3.1.0 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 pathval: 2.0.0 - chai@5.1.1: + chai@5.1.2: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 - deep-eql: 5.0.1 - loupe: 3.1.0 + deep-eql: 5.0.2 + loupe: 3.1.2 pathval: 2.0.0 - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -5517,16 +5238,18 @@ snapshots: chalk@5.3.0: {} + character-entities-html4@2.1.0: {} + character-entities-legacy@1.1.4: {} + character-entities-legacy@3.0.0: {} + character-entities@1.2.4: {} character-reference-invalid@1.1.4: {} chardet@0.7.0: {} - check-error@2.0.0: {} - check-error@2.1.1: {} cheerio-select@2.1.0: @@ -5545,12 +5268,12 @@ snapshots: domhandler: 5.0.3 domutils: 3.1.0 htmlparser2: 8.0.2 - parse5: 7.1.2 - parse5-htmlparser2-tree-adapter: 7.0.0 + parse5: 7.2.1 + parse5-htmlparser2-tree-adapter: 7.1.0 chownr@1.1.4: {} - ci-info@4.0.0: {} + ci-info@4.1.0: {} cipher-base@1.0.4: dependencies: @@ -5567,8 +5290,6 @@ snapshots: dependencies: restore-cursor: 3.1.0 - cli-spinners@2.9.1: {} - cli-spinners@2.9.2: {} cli-width@4.1.0: {} @@ -5581,20 +5302,16 @@ snapshots: clone@1.0.4: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} colorette@2.0.20: {} + comma-separated-tokens@2.0.3: {} + comment-parser@1.4.1: {} compare-versions@6.1.1: {} @@ -5603,17 +5320,17 @@ snapshots: concat-map@0.0.1: {} - confbox@0.1.7: {} + confbox@0.1.8: {} console-browserify@1.2.0: {} constants-browserify@1.0.0: {} - cookie@0.5.0: {} + cookie@0.7.2: {} - core-js-compat@3.38.0: + core-js-compat@3.39.0: dependencies: - browserslist: 4.23.3 + browserslist: 4.24.2 core-util-is@1.0.3: {} @@ -5624,8 +5341,8 @@ snapshots: create-ecdh@4.0.4: dependencies: - bn.js: 4.12.0 - elliptic: 6.5.5 + bn.js: 4.12.1 + elliptic: 6.6.1 create-hash@1.2.0: dependencies: @@ -5652,7 +5369,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crypto-browserify@3.12.0: + crypto-browserify@3.12.1: dependencies: browserify-cipher: 1.0.1 browserify-sign: 4.2.3 @@ -5660,6 +5377,7 @@ snapshots: create-hash: 1.2.0 create-hmac: 1.1.7 diffie-hellman: 5.0.3 + hash-base: 3.0.4 inherits: 2.0.4 pbkdf2: 3.1.2 public-encrypt: 4.0.3 @@ -5672,13 +5390,13 @@ snapshots: css-what: 6.1.0 domhandler: 5.0.3 domutils: 3.1.0 - nth-check: 2.0.1 + nth-check: 2.1.1 css-what@6.1.0: {} cssesc@3.0.0: {} - csv-parse@5.5.0: {} + csv-parse@5.5.6: {} de-indent@1.0.2: {} @@ -5686,15 +5404,15 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.6: + debug@4.3.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - deep-eql@5.0.1: {} + deep-eql@5.0.2: {} deep-extend@0.6.0: {} @@ -5710,11 +5428,6 @@ snapshots: es-errors: 1.3.0 gopd: 1.0.1 - define-properties@1.2.0: - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -5728,11 +5441,17 @@ snapshots: inherits: 2.0.4 minimalistic-assert: 1.0.1 - detect-libc@2.0.1: {} + detect-indent@7.0.1: {} + + detect-libc@2.0.3: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 diffie-hellman@5.0.3: dependencies: - bn.js: 4.12.0 + bn.js: 4.12.1 miller-rabin: 4.0.1 randombytes: 2.1.0 @@ -5791,20 +5510,20 @@ snapshots: dpdm@3.14.0: dependencies: chalk: 4.1.2 - fs-extra: 11.1.1 + fs-extra: 11.2.0 glob: 10.4.5 ora: 5.4.1 - tslib: 2.6.2 + tslib: 2.8.1 typescript: 5.5.4 yargs: 17.7.2 eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.6: {} + electron-to-chromium@1.5.62: {} - elliptic@6.5.5: + elliptic@6.6.1: dependencies: - bn.js: 4.12.0 + bn.js: 4.12.1 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 @@ -5812,6 +5531,8 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + emoji-regex-xs@1.0.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -5822,15 +5543,13 @@ snapshots: enhanced-resolve@5.17.1: dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 tapable: 2.2.1 entities@2.2.0: {} entities@4.5.0: {} - entities@5.0.0: {} - error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -5843,32 +5562,6 @@ snapshots: es-module-lexer@1.5.4: {} - esbuild@0.19.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -5922,9 +5615,7 @@ snapshots: '@esbuild/win32-ia32': 0.23.0 '@esbuild/win32-x64': 0.23.0 - escalade@3.1.1: {} - - escalade@3.1.2: {} + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} @@ -5937,89 +5628,103 @@ snapshots: eslint: 9.9.0 semver: 7.6.3 + eslint-compat-utils@0.6.0(eslint@9.9.0): + dependencies: + eslint: 9.9.0 + semver: 7.6.3 + eslint-config-flat-gitignore@0.1.8: dependencies: find-up-simple: 1.0.0 parse-gitignore: 2.0.0 - eslint-flat-config-utils@0.3.0: + eslint-flat-config-utils@0.3.1: dependencies: - '@types/eslint': 9.6.0 + '@types/eslint': 9.6.1 pathe: 1.1.2 eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.13.0 - resolve: 1.22.4 + is-core-module: 2.15.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color + eslint-json-compat-utils@0.2.1(eslint@9.9.0)(jsonc-eslint-parser@2.4.0): + dependencies: + eslint: 9.9.0 + esquery: 1.6.0 + jsonc-eslint-parser: 2.4.0 + eslint-merge-processors@0.1.0(eslint@9.9.0): dependencies: eslint: 9.9.0 - eslint-plugin-antfu@2.3.5(eslint@9.9.0): + eslint-plugin-antfu@2.7.0(eslint@9.9.0): dependencies: '@antfu/utils': 0.7.10 eslint: 9.9.0 - eslint-plugin-command@0.2.3(eslint@9.9.0): + eslint-plugin-command@0.2.6(eslint@9.9.0): dependencies: - '@es-joy/jsdoccomment': 0.43.1 + '@es-joy/jsdoccomment': 0.48.0 eslint: 9.9.0 eslint-plugin-es-x@7.8.0(eslint@9.9.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.9.0) + '@eslint-community/regexpp': 4.12.1 eslint: 9.9.0 eslint-compat-utils: 0.5.1(eslint@9.9.0) eslint-plugin-import-x@3.1.0(eslint@9.9.0)(typescript@5.5.4): dependencies: '@typescript-eslint/utils': 7.18.0(eslint@9.9.0)(typescript@5.5.4) - debug: 4.3.6 + debug: 4.3.7 doctrine: 3.0.0 eslint: 9.9.0 eslint-import-resolver-node: 0.3.9 - get-tsconfig: 4.7.6 + get-tsconfig: 4.8.1 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 stable-hash: 0.0.4 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.2.2(eslint@9.9.0): + eslint-plugin-jsdoc@50.5.0(eslint@9.9.0): dependencies: - '@es-joy/jsdoccomment': 0.48.0 + '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.6 + debug: 4.3.7 escape-string-regexp: 4.0.0 eslint: 9.9.0 - espree: 10.1.0 + espree: 10.3.0 esquery: 1.6.0 - parse-imports: 2.1.1 + parse-imports: 2.2.1 semver: 7.6.3 spdx-expression-parse: 4.0.0 - synckit: 0.9.1 + synckit: 0.9.2 transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.16.0(eslint@9.9.0): + eslint-plugin-jsonc@2.18.1(eslint@9.9.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.9.0) eslint: 9.9.0 - eslint-compat-utils: 0.5.1(eslint@9.9.0) + eslint-compat-utils: 0.6.0(eslint@9.9.0) + eslint-json-compat-utils: 0.2.1(eslint@9.9.0)(jsonc-eslint-parser@2.4.0) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 natural-compare: 1.4.0 synckit: 0.6.2 + transitivePeerDependencies: + - '@eslint/json' eslint-plugin-markdown@5.1.0(eslint@9.9.0): dependencies: @@ -6028,26 +5733,26 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-n@17.10.2(eslint@9.9.0): + eslint-plugin-n@17.13.2(eslint@9.9.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.9.0) enhanced-resolve: 5.17.1 eslint: 9.9.0 eslint-plugin-es-x: 7.8.0(eslint@9.9.0) - get-tsconfig: 4.7.6 - globals: 15.9.0 + get-tsconfig: 4.8.1 + globals: 15.12.0 ignore: 5.3.2 minimatch: 9.0.5 semver: 7.6.3 eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-perfectionist@3.2.0(eslint@9.9.0)(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.9.0)): + eslint-plugin-perfectionist@3.9.1(eslint@9.9.0)(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.9.0)): dependencies: - '@typescript-eslint/types': 8.1.0 - '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/utils': 8.14.0(eslint@9.9.0)(typescript@5.5.4) eslint: 9.9.0 - minimatch: 10.0.1 + minimatch: 9.0.5 natural-compare-lite: 1.4.0 optionalDependencies: vue-eslint-parser: 9.4.3(eslint@9.9.0) @@ -6055,10 +5760,10 @@ snapshots: - supports-color - typescript - eslint-plugin-regexp@2.6.0(eslint@9.9.0): + eslint-plugin-regexp@2.7.0(eslint@9.9.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.9.0) + '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 eslint: 9.9.0 jsdoc-type-pratt-parser: 4.1.0 @@ -6068,7 +5773,7 @@ snapshots: eslint-plugin-toml@0.11.1(eslint@9.9.0): dependencies: - debug: 4.3.6 + debug: 4.3.7 eslint: 9.9.0 eslint-compat-utils: 0.5.1(eslint@9.9.0) lodash: 4.17.21 @@ -6078,14 +5783,14 @@ snapshots: eslint-plugin-unicorn@55.0.0(eslint@9.9.0): dependencies: - '@babel/helper-validator-identifier': 7.24.7 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) - ci-info: 4.0.0 + '@babel/helper-validator-identifier': 7.25.9 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.9.0) + ci-info: 4.1.0 clean-regexp: 1.0.0 - core-js-compat: 3.38.0 + core-js-compat: 3.39.0 eslint: 9.9.0 esquery: 1.6.0 - globals: 15.9.0 + globals: 15.12.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.0.2 @@ -6096,15 +5801,15 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-plugin-unused-imports@4.1.3(@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0): dependencies: eslint: 9.9.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) - eslint-plugin-vue@9.27.0(eslint@9.9.0): + eslint-plugin-vue@9.31.0(eslint@9.9.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.9.0) eslint: 9.9.0 globals: 13.24.0 natural-compare: 1.4.0 @@ -6116,9 +5821,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-yml@1.14.0(eslint@9.9.0): + eslint-plugin-yml@1.15.0(eslint@9.9.0): dependencies: - debug: 4.3.6 + debug: 4.3.7 eslint: 9.9.0 eslint-compat-utils: 0.5.1(eslint@9.9.0) lodash: 4.17.21 @@ -6127,9 +5832,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.4.37)(eslint@9.9.0): + eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.9.0): dependencies: - '@vue/compiler-sfc': 3.4.37 + '@vue/compiler-sfc': 3.5.13 eslint: 9.9.0 eslint-scope@7.2.2: @@ -6137,40 +5842,40 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@8.0.2: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.0.0: {} + eslint-visitor-keys@4.2.0: {} eslint@9.9.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.9.0) + '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.17.1 - '@eslint/eslintrc': 3.1.0 + '@eslint/eslintrc': 3.2.0 '@eslint/js': 9.9.0 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.0 + '@humanwhocodes/retry': 0.3.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.6 + debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint-scope: 8.0.2 - eslint-visitor-keys: 4.0.0 - espree: 10.1.0 - esquery: 1.5.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - ignore: 5.2.4 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -6179,28 +5884,24 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color - espree@10.1.0: + espree@10.3.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.0.0 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 espree@9.6.1: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -6215,7 +5916,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 esutils@2.0.3: {} @@ -6256,16 +5957,20 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} - fastq@1.13.0: + fastq@1.17.1: dependencies: reusify: 1.0.4 + fdir@6.4.2(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + fflate@0.8.2: {} figures@5.0.0: @@ -6279,7 +5984,7 @@ snapshots: file-uri-to-path@1.0.0: {} - fill-range@7.0.1: + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -6306,22 +6011,22 @@ snapshots: dependencies: is-callable: 1.2.7 - foreground-child@3.1.1: + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 - signal-exit: 4.0.2 + signal-exit: 4.1.0 fs-constants@1.0.0: {} - fs-extra@11.1.1: + fs-extra@11.2.0: dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 fs-extra@7.0.1: dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 @@ -6331,32 +6036,21 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.1: {} - function-bind@1.1.2: {} get-caller-file@2.0.5: {} - get-func-name@2.0.2: {} - - get-intrinsic@1.2.1: - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-proto: 1.0.1 - has-symbols: 1.0.3 - get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 get-stream@8.0.1: {} - get-tsconfig@4.7.6: + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -6372,20 +6066,20 @@ snapshots: glob@10.4.5: dependencies: - foreground-child: 3.1.1 + foreground-child: 3.3.0 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@11.0.0: dependencies: - foreground-child: 3.1.1 - jackspeak: 4.0.1 + foreground-child: 3.3.0 + jackspeak: 4.0.2 minimatch: 10.0.1 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 2.0.0 globals@13.24.0: @@ -6394,7 +6088,7 @@ snapshots: globals@14.0.0: {} - globals@15.9.0: {} + globals@15.12.0: {} globby@11.1.0: dependencies: @@ -6407,9 +6101,9 @@ snapshots: gopd@1.0.1: dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.4 - graceful-fs@4.2.10: {} + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -6417,48 +6111,32 @@ snapshots: handlebars@4.7.8: dependencies: - minimist: 1.2.6 + minimist: 1.2.8 neo-async: 2.6.2 source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.17.4 - - has-flag@3.0.0: {} + uglify-js: 3.19.3 has-flag@4.0.0: {} - has-property-descriptors@1.0.0: - dependencies: - get-intrinsic: 1.2.1 - has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - has-proto@1.0.1: {} + has-proto@1.0.3: {} has-symbols@1.0.3: {} - has-tostringtag@1.0.0: + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - has@1.0.3: - dependencies: - function-bind: 1.1.1 - hash-base@3.0.4: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - hash-base@3.1.0: - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.0 - safe-buffer: 5.2.1 - hash.js@1.1.7: dependencies: inherits: 2.0.4 @@ -6468,6 +6146,24 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-to-html@9.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + he@1.2.0: {} headers-polyfill@4.0.3: {} @@ -6482,6 +6178,8 @@ snapshots: html-escaper@2.0.2: {} + html-void-elements@3.0.0: {} + htmlparser2@6.1.0: dependencies: domelementtype: 2.3.0 @@ -6506,8 +6204,6 @@ snapshots: ieee754@1.2.1: {} - ignore@5.2.4: {} - ignore@5.3.2: {} import-fresh@3.3.0: @@ -6527,7 +6223,7 @@ snapshots: inquirer@9.2.11: dependencies: - '@ljharb/through': 2.3.11 + '@ljharb/through': 2.3.13 ansi-escapes: 4.3.2 chalk: 5.3.0 cli-cursor: 3.1.0 @@ -6553,7 +6249,7 @@ snapshots: is-arguments@1.1.1: dependencies: call-bind: 1.0.7 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-arrayish@0.2.1: {} @@ -6563,9 +6259,9 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.13.0: + is-core-module@2.15.1: dependencies: - has: 1.0.3 + hasown: 2.0.2 is-decimal@1.0.4: {} @@ -6575,7 +6271,7 @@ snapshots: is-generator-function@1.0.10: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-glob@4.0.3: dependencies: @@ -6598,13 +6294,9 @@ snapshots: is-stream@3.0.0: {} - is-typed-array@1.1.10: + is-typed-array@1.1.13: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 + which-typed-array: 1.1.15 is-unicode-supported@0.1.0: {} @@ -6627,7 +6319,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.6 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -6643,11 +6335,9 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.0.1: + jackspeak@4.0.2: dependencies: '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 jju@1.4.0: {} @@ -6657,8 +6347,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsdoc-type-pratt-parser@4.0.0: {} - jsdoc-type-pratt-parser@4.1.0: {} jsesc@0.5.0: {} @@ -6677,20 +6365,20 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - semver: 7.6.3 + semver: 7.5.1 jsonfile@4.0.0: optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile@6.1.0: dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 keyv@4.5.4: dependencies: @@ -6711,8 +6399,8 @@ snapshots: local-pkg@0.5.0: dependencies: - mlly: 1.7.1 - pkg-types: 1.1.3 + mlly: 1.7.3 + pkg-types: 1.2.1 locate-path@5.0.0: dependencies: @@ -6733,17 +6421,11 @@ snapshots: long@5.2.3: {} - loupe@3.1.0: - dependencies: - get-func-name: 2.0.2 + loupe@3.1.2: {} - loupe@3.1.1: - dependencies: - get-func-name: 2.0.2 + lru-cache@10.4.3: {} - lru-cache@10.2.2: {} - - lru-cache@11.0.0: {} + lru-cache@11.0.2: {} lru-cache@6.0.0: dependencies: @@ -6753,19 +6435,15 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.30.11: + magic-string@0.30.12: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.8: + magicast@0.3.5: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - - magicast@0.3.4: - dependencies: - '@babel/parser': 7.25.3 - '@babel/types': 7.24.0 - source-map-js: 1.2.0 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + source-map-js: 1.2.1 make-dir@4.0.0: dependencies: @@ -6782,7 +6460,7 @@ snapshots: md5.js@1.3.5: dependencies: - hash-base: 3.1.0 + hash-base: 3.0.4 inherits: 2.0.4 safe-buffer: 5.2.1 @@ -6796,6 +6474,18 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + mdast-util-to-string@2.0.0: {} mdurl@2.0.0: {} @@ -6804,21 +6494,38 @@ snapshots: merge2@1.4.1: {} + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.1: {} + micromark@2.11.4: dependencies: - debug: 4.3.6 + debug: 4.3.7 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color - micromatch@4.0.5: + micromatch@4.0.8: dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 miller-rabin@4.0.1: dependencies: - bn.js: 4.12.0 + bn.js: 4.12.1 brorand: 1.1.0 mimic-fn@2.1.0: {} @@ -6849,32 +6556,31 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimist@1.2.6: {} + minimist@1.2.8: {} minipass@7.1.2: {} mkdirp-classic@0.5.3: {} - mlly@1.7.1: + mlly@1.7.3: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 pathe: 1.1.2 - pkg-types: 1.1.3 + pkg-types: 1.2.1 ufo: 1.5.4 mrmime@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} - msw@2.3.5(typescript@5.5.4): + msw@2.6.5(@types/node@20.10.0)(typescript@5.5.4): dependencies: - '@bundled-es-modules/cookie': 2.0.0 + '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 3.1.22 - '@mswjs/interceptors': 0.29.1 + '@inquirer/confirm': 5.0.2(@types/node@20.10.0) + '@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 @@ -6883,17 +6589,21 @@ snapshots: headers-polyfill: 4.0.3 is-node-process: 1.2.0 outvariant: 1.4.3 - path-to-regexp: 6.2.2 + path-to-regexp: 6.3.0 strict-event-emitter: 0.5.1 - type-fest: 4.24.0 + type-fest: 4.27.0 yargs: 17.7.2 optionalDependencies: typescript: 5.5.4 + transitivePeerDependencies: + - '@types/node' muggle-string@0.4.1: {} mute-stream@1.0.0: {} + mute-stream@2.0.0: {} + nanoid@3.3.7: {} napi-build-utils@1.0.2: {} @@ -6904,15 +6614,15 @@ snapshots: neo-async@2.6.2: {} - node-abi@3.15.0: + node-abi@3.71.0: dependencies: - semver: 7.6.3 + semver: 7.5.1 node-gyp-build@4.8.1: {} node-releases@2.0.18: {} - node-stdlib-browser@1.2.0: + node-stdlib-browser@1.2.1: dependencies: assert: 2.1.0 browser-resolve: 2.0.0 @@ -6921,7 +6631,7 @@ snapshots: console-browserify: 1.2.0 constants-browserify: 1.0.0 create-require: 1.1.1 - crypto-browserify: 3.12.0 + crypto-browserify: 3.12.1 domain-browser: 4.23.0 events: 3.2.0 https-browserify: 1.0.0 @@ -6932,20 +6642,20 @@ snapshots: process: 0.11.10 punycode: 1.4.1 querystring-es3: 0.2.1 - readable-stream: 3.6.0 + readable-stream: 3.6.2 stream-browserify: 3.0.0 stream-http: 3.2.0 string_decoder: 1.3.0 timers-browserify: 2.0.12 tty-browserify: 0.0.1 - url: 0.11.3 + url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.4 + resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -6953,15 +6663,11 @@ snapshots: dependencies: path-key: 4.0.0 - nth-check@2.0.1: - dependencies: - boolbase: 1.0.0 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 - object-inspect@1.13.1: {} + object-inspect@1.13.3: {} object-is@1.1.6: dependencies: @@ -6970,10 +6676,10 @@ snapshots: object-keys@1.1.1: {} - object.assign@4.1.4: + object.assign@4.1.5: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 + call-bind: 1.0.7 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -6989,23 +6695,29 @@ snapshots: dependencies: mimic-fn: 4.0.0 + oniguruma-to-es@0.1.2: + dependencies: + emoji-regex-xs: 1.0.0 + regex: 4.4.0 + regex-recursion: 4.2.1 + openurl@1.1.1: {} - optionator@0.9.3: + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -7036,7 +6748,7 @@ snapshots: p-try@2.2.0: {} - package-json-from-dist@1.0.0: {} + package-json-from-dist@1.0.1: {} pako@1.0.11: {} @@ -7064,24 +6776,24 @@ snapshots: parse-gitignore@2.0.0: {} - parse-imports@2.1.1: + parse-imports@2.2.1: dependencies: es-module-lexer: 1.5.4 slashes: 3.0.12 parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse5-htmlparser2-tree-adapter@7.0.0: + parse5-htmlparser2-tree-adapter@7.1.0: dependencies: domhandler: 5.0.3 - parse5: 7.1.2 + parse5: 7.2.1 - parse5@7.1.2: + parse5@7.2.1: dependencies: entities: 4.5.0 @@ -7097,15 +6809,15 @@ snapshots: path-scurry@1.11.1: dependencies: - lru-cache: 10.2.2 + lru-cache: 10.4.3 minipass: 7.1.2 path-scurry@2.0.0: dependencies: - lru-cache: 11.0.0 + lru-cache: 11.0.2 minipass: 7.1.2 - path-to-regexp@6.2.2: {} + path-to-regexp@6.3.0: {} path-type@4.0.0: {} @@ -7121,9 +6833,7 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 - picocolors@1.0.0: {} - - picocolors@1.0.1: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -7133,10 +6843,10 @@ snapshots: dependencies: find-up: 5.0.0 - pkg-types@1.1.3: + pkg-types@1.2.1: dependencies: - confbox: 0.1.7 - mlly: 1.7.1 + confbox: 0.1.8 + mlly: 1.7.3 pathe: 1.1.2 playwright-core@1.42.1: {} @@ -7149,33 +6859,29 @@ snapshots: pluralize@8.0.0: {} + possible-typed-array-names@1.0.0: {} + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.4.35: + postcss@8.4.49: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 + picocolors: 1.1.1 + source-map-js: 1.2.1 - postcss@8.4.41: + prebuild-install@7.1.2: dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - - prebuild-install@7.1.1: - dependencies: - detect-libc: 2.0.1 + detect-libc: 2.0.3 expand-template: 2.0.3 github-from-package: 0.0.0 - minimist: 1.2.6 + minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.15.0 - pump: 3.0.0 + node-abi: 3.71.0 + pump: 3.0.2 rc: 1.2.8 simple-get: 4.0.1 tar-fs: 2.1.1 @@ -7195,18 +6901,22 @@ snapshots: process@0.11.10: {} - psl@1.9.0: {} + property-information@6.5.0: {} + + psl@1.10.0: + dependencies: + punycode: 2.3.1 public-encrypt@4.0.3: dependencies: - bn.js: 4.12.0 - browserify-rsa: 4.1.0 + bn.js: 4.12.1 + browserify-rsa: 4.1.1 create-hash: 1.2.0 parse-asn1: 5.1.7 randombytes: 2.1.0 safe-buffer: 5.2.1 - pump@3.0.0: + pump@3.0.2: dependencies: end-of-stream: 1.4.4 once: 1.4.0 @@ -7215,9 +6925,9 @@ snapshots: punycode@1.4.1: {} - punycode@2.1.1: {} + punycode@2.3.1: {} - qs@6.12.0: + qs@6.13.0: dependencies: side-channel: 1.0.6 @@ -7240,7 +6950,7 @@ snapshots: dependencies: deep-extend: 0.6.0 ini: 1.3.8 - minimist: 1.2.6 + minimist: 1.2.8 strip-json-comments: 2.0.1 react-is@17.0.2: {} @@ -7268,7 +6978,7 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readable-stream@3.6.0: + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 @@ -7276,13 +6986,21 @@ snapshots: refa@0.12.1: dependencies: - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/regexpp': 4.12.1 regenerator-runtime@0.14.1: {} + regex-recursion@4.2.1: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@4.4.0: {} + regexp-ast-analysis@0.7.1: dependencies: - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/regexpp': 4.12.1 refa: 0.12.1 regexp-tree@0.1.27: {} @@ -7301,9 +7019,9 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.4: + resolve@1.22.8: dependencies: - is-core-module: 2.13.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -7317,56 +7035,39 @@ snapshots: rimraf@6.0.1: dependencies: glob: 11.0.0 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 ripemd160@2.0.2: dependencies: - hash-base: 3.1.0 + hash-base: 3.0.4 inherits: 2.0.4 - rollup-plugin-node-externals@7.1.3(rollup@4.21.0): + rollup-plugin-node-externals@7.1.3(rollup@4.27.2): dependencies: - rollup: 4.21.0 + rollup: 4.27.2 - rollup@4.13.0: + rollup@4.27.2: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.13.0 - '@rollup/rollup-android-arm64': 4.13.0 - '@rollup/rollup-darwin-arm64': 4.13.0 - '@rollup/rollup-darwin-x64': 4.13.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.13.0 - '@rollup/rollup-linux-arm64-gnu': 4.13.0 - '@rollup/rollup-linux-arm64-musl': 4.13.0 - '@rollup/rollup-linux-riscv64-gnu': 4.13.0 - '@rollup/rollup-linux-x64-gnu': 4.13.0 - '@rollup/rollup-linux-x64-musl': 4.13.0 - '@rollup/rollup-win32-arm64-msvc': 4.13.0 - '@rollup/rollup-win32-ia32-msvc': 4.13.0 - '@rollup/rollup-win32-x64-msvc': 4.13.0 - fsevents: 2.3.3 - - rollup@4.21.0: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.21.0 - '@rollup/rollup-android-arm64': 4.21.0 - '@rollup/rollup-darwin-arm64': 4.21.0 - '@rollup/rollup-darwin-x64': 4.21.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.21.0 - '@rollup/rollup-linux-arm-musleabihf': 4.21.0 - '@rollup/rollup-linux-arm64-gnu': 4.21.0 - '@rollup/rollup-linux-arm64-musl': 4.21.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.21.0 - '@rollup/rollup-linux-riscv64-gnu': 4.21.0 - '@rollup/rollup-linux-s390x-gnu': 4.21.0 - '@rollup/rollup-linux-x64-gnu': 4.21.0 - '@rollup/rollup-linux-x64-musl': 4.21.0 - '@rollup/rollup-win32-arm64-msvc': 4.21.0 - '@rollup/rollup-win32-ia32-msvc': 4.21.0 - '@rollup/rollup-win32-x64-msvc': 4.21.0 + '@rollup/rollup-android-arm-eabi': 4.27.2 + '@rollup/rollup-android-arm64': 4.27.2 + '@rollup/rollup-darwin-arm64': 4.27.2 + '@rollup/rollup-darwin-x64': 4.27.2 + '@rollup/rollup-freebsd-arm64': 4.27.2 + '@rollup/rollup-freebsd-x64': 4.27.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.27.2 + '@rollup/rollup-linux-arm-musleabihf': 4.27.2 + '@rollup/rollup-linux-arm64-gnu': 4.27.2 + '@rollup/rollup-linux-arm64-musl': 4.27.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.27.2 + '@rollup/rollup-linux-riscv64-gnu': 4.27.2 + '@rollup/rollup-linux-s390x-gnu': 4.27.2 + '@rollup/rollup-linux-x64-gnu': 4.27.2 + '@rollup/rollup-linux-x64-musl': 4.27.2 + '@rollup/rollup-win32-arm64-msvc': 4.27.2 + '@rollup/rollup-win32-ia32-msvc': 4.27.2 + '@rollup/rollup-win32-x64-msvc': 4.27.2 fsevents: 2.3.3 run-async@3.0.0: {} @@ -7377,7 +7078,7 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 safe-buffer@5.1.2: {} @@ -7387,7 +7088,7 @@ snapshots: scslre@0.3.0: dependencies: - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/regexpp': 4.12.1 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -7425,9 +7126,13 @@ snapshots: shebang-regex@3.0.0: {} - shiki@1.12.1: + shiki@1.23.0: dependencies: - '@shikijs/core': 1.12.1 + '@shikijs/core': 1.23.0 + '@shikijs/engine-javascript': 1.23.0 + '@shikijs/engine-oniguruma': 1.23.0 + '@shikijs/types': 1.23.0 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 side-channel@1.0.6: @@ -7435,14 +7140,12 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.3 siginfo@2.0.0: {} signal-exit@3.0.7: {} - signal-exit@4.0.2: {} - signal-exit@4.1.0: {} simple-concat@1.0.1: {} @@ -7455,7 +7158,7 @@ snapshots: sirv@2.0.4: dependencies: - '@polka/url': 1.0.0-next.25 + '@polka/url': 1.0.0-next.28 mrmime: 2.0.0 totalist: 3.0.1 @@ -7465,30 +7168,30 @@ snapshots: slashes@3.0.12: {} - source-map-js@1.0.2: {} - - source-map-js@1.2.0: {} + source-map-js@1.2.1: {} source-map@0.6.1: {} + space-separated-tokens@2.0.2: {} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.18 + spdx-license-ids: 3.0.20 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 + spdx-license-ids: 3.0.20 spdx-expression-parse@4.0.0: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 + spdx-license-ids: 3.0.20 - spdx-license-ids@3.0.18: {} + spdx-license-ids@3.0.20: {} sprintf-js@1.0.3: {} @@ -7498,18 +7201,18 @@ snapshots: statuses@2.0.1: {} - std-env@3.7.0: {} + std-env@3.8.0: {} stream-browserify@3.0.0: dependencies: inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 stream-http@3.2.0: dependencies: builtin-status-codes: 3.0.0 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 xtend: 4.0.2 strict-event-emitter@0.5.1: {} @@ -7536,13 +7239,18 @@ snapshots: dependencies: safe-buffer: 5.2.1 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 strip-final-newline@3.0.0: {} @@ -7554,10 +7262,6 @@ snapshots: strip-json-comments@3.1.1: {} - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -7570,12 +7274,12 @@ snapshots: synckit@0.6.2: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 - synckit@0.9.1: + synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.6.2 + tslib: 2.8.1 tapable@2.2.1: {} @@ -7583,7 +7287,7 @@ snapshots: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.0 + pump: 3.0.2 tar-stream: 2.2.0 tar-stream@2.2.0: @@ -7592,7 +7296,7 @@ snapshots: end-of-stream: 1.4.4 fs-constants: 1.0.0 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 test-exclude@7.0.1: dependencies: @@ -7608,18 +7312,21 @@ snapshots: tinybench@2.9.0: {} - tinypool@1.0.0: {} + tinyglobby@0.2.10: + dependencies: + fdir: 6.4.2(picomatch@4.0.2) + picomatch: 4.0.2 + + tinypool@1.0.2: {} tinyrainbow@1.2.0: {} - tinyspy@3.0.0: {} + tinyspy@3.0.2: {} tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -7632,21 +7339,23 @@ snapshots: tough-cookie@4.1.4: dependencies: - psl: 1.9.0 - punycode: 2.1.1 + psl: 1.10.0 + punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 - ts-api-utils@1.3.0(typescript@5.5.4): + trim-lines@3.0.1: {} + + ts-api-utils@1.4.0(typescript@5.5.4): dependencies: typescript: 5.5.4 - tslib@2.6.2: {} + tslib@2.8.1: {} tsx@4.17.0: dependencies: esbuild: 0.23.0 - get-tsconfig: 4.7.6 + get-tsconfig: 4.8.1 optionalDependencies: fsevents: 2.3.3 @@ -7670,16 +7379,16 @@ snapshots: type-fest@0.8.1: {} - type-fest@4.24.0: {} + type-fest@4.27.0: {} typedoc@0.26.5(typescript@5.5.4): dependencies: lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 - shiki: 1.12.1 + shiki: 1.23.0 typescript: 5.5.4 - yaml: 2.5.0 + yaml: 2.6.0 typescript@5.5.4: {} @@ -7687,42 +7396,63 @@ snapshots: ufo@1.5.4: {} - uglify-js@3.17.4: + uglify-js@3.19.3: optional: true undici-types@5.26.5: {} - undici-types@6.13.0: {} + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 unist-util-stringify-position@2.0.3: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 universalify@0.1.2: {} universalify@0.2.0: {} - universalify@2.0.0: {} + universalify@2.0.1: {} - update-browserslist-db@1.1.0(browserslist@4.23.3): + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: - browserslist: 4.23.3 - escalade: 3.1.2 - picocolors: 1.0.1 + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 uri-js@4.4.1: dependencies: - punycode: 2.1.1 + punycode: 2.3.1 url-parse@1.5.10: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 - url@0.11.3: + url@0.11.4: dependencies: punycode: 1.4.1 - qs: 6.12.0 + qs: 6.13.0 util-deprecate@1.0.2: {} @@ -7731,18 +7461,28 @@ snapshots: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 - is-typed-array: 1.1.10 - which-typed-array: 1.1.9 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + vite-node@2.0.5(@types/node@20.10.0): dependencies: cac: 6.7.14 - debug: 4.3.6 + debug: 4.3.7 pathe: 1.1.2 tinyrainbow: 1.2.0 vite: 5.4.2(@types/node@20.10.0) @@ -7757,17 +7497,17 @@ snapshots: - supports-color - terser - vite-plugin-dts@4.0.3(@types/node@20.10.0)(rollup@4.21.0)(typescript@5.5.4)(vite@5.4.2(@types/node@20.10.0)): + vite-plugin-dts@4.0.3(@types/node@20.10.0)(rollup@4.27.2)(typescript@5.5.4)(vite@5.4.2(@types/node@20.10.0)): dependencies: '@microsoft/api-extractor': 7.47.4(@types/node@20.10.0) - '@rollup/pluginutils': 5.1.0(rollup@4.21.0) - '@volar/typescript': 2.4.0 + '@rollup/pluginutils': 5.1.3(rollup@4.27.2) + '@volar/typescript': 2.4.10 '@vue/language-core': 2.0.29(typescript@5.5.4) compare-versions: 6.1.1 - debug: 4.3.6 + debug: 4.3.7 kolorist: 1.8.0 local-pkg: 0.5.0 - magic-string: 0.30.11 + magic-string: 0.30.12 typescript: 5.5.4 vue-tsc: 2.0.29(typescript@5.5.4) optionalDependencies: @@ -7777,28 +7517,19 @@ snapshots: - rollup - supports-color - vite-plugin-node-polyfills@0.22.0(rollup@4.21.0)(vite@5.4.2(@types/node@20.10.0)): + vite-plugin-node-polyfills@0.22.0(rollup@4.27.2)(vite@5.4.2(@types/node@20.10.0)): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.21.0) - node-stdlib-browser: 1.2.0 + '@rollup/plugin-inject': 5.0.5(rollup@4.27.2) + node-stdlib-browser: 1.2.1 vite: 5.4.2(@types/node@20.10.0) transitivePeerDependencies: - rollup - vite@5.1.6(@types/node@20.10.0): - dependencies: - esbuild: 0.19.12 - postcss: 8.4.35 - rollup: 4.13.0 - optionalDependencies: - '@types/node': 20.10.0 - fsevents: 2.3.3 - vite@5.4.2(@types/node@20.10.0): dependencies: esbuild: 0.21.5 - postcss: 8.4.41 - rollup: 4.21.0 + postcss: 8.4.49 + rollup: 4.27.2 optionalDependencies: '@types/node': 20.10.0 fsevents: 2.3.3 @@ -7807,26 +7538,26 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.5 - '@vitest/pretty-format': 2.0.5 + '@vitest/pretty-format': 2.1.5 '@vitest/runner': 2.0.5 '@vitest/snapshot': 2.0.5 '@vitest/spy': 2.0.5 '@vitest/utils': 2.0.5 - chai: 5.1.1 - debug: 4.3.6 + chai: 5.1.2 + debug: 4.3.7 execa: 8.0.1 - magic-string: 0.30.11 + magic-string: 0.30.12 pathe: 1.1.2 - std-env: 3.7.0 + std-env: 3.8.0 tinybench: 2.9.0 - tinypool: 1.0.0 + tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.1.6(@types/node@20.10.0) + vite: 5.4.2(@types/node@20.10.0) vite-node: 2.0.5(@types/node@20.10.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.10.0 - '@vitest/browser': 2.0.5(playwright@1.42.1)(typescript@5.5.4)(vitest@2.0.5) + '@vitest/browser': 2.0.5(@types/node@20.10.0)(playwright@1.42.1)(typescript@5.5.4)(vitest@2.0.5) '@vitest/ui': 2.0.5(vitest@2.0.5) transitivePeerDependencies: - less @@ -7844,20 +7575,20 @@ snapshots: vue-eslint-parser@9.4.3(eslint@9.9.0): dependencies: - debug: 4.3.6 + debug: 4.3.7 eslint: 9.9.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 esquery: 1.6.0 lodash: 4.17.21 - semver: 7.6.3 + semver: 7.5.1 transitivePeerDependencies: - supports-color vue-tsc@2.0.29(typescript@5.5.4): dependencies: - '@volar/typescript': 2.4.0 + '@volar/typescript': 2.4.10 '@vue/language-core': 2.0.29(typescript@5.5.4) semver: 7.6.3 typescript: 5.5.4 @@ -7866,14 +7597,13 @@ snapshots: dependencies: defaults: 1.0.4 - which-typed-array@1.1.9: + which-typed-array@1.1.15: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 - is-typed-array: 1.1.10 + has-tostringtag: 1.0.2 which@2.0.2: dependencies: @@ -7884,6 +7614,8 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + word-wrap@1.2.5: {} + wordwrap@1.0.0: {} wrap-ansi@6.2.0: @@ -7922,16 +7654,16 @@ snapshots: dependencies: eslint-visitor-keys: 3.4.3 lodash: 4.17.21 - yaml: 2.5.0 + yaml: 2.6.0 - yaml@2.5.0: {} + yaml@2.6.0: {} yargs-parser@21.1.1: {} yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -7941,3 +7673,7 @@ snapshots: yocto-queue@0.1.0: {} yoctocolors-cjs@2.1.2: {} + + zod@3.23.8: {} + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c460967d..e6912143 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,3 @@ packages: - packages/* - - private/fuman/packages/* - '!e2e/*' diff --git a/scripts/build-package-jsr.js b/scripts/build-package-jsr.js deleted file mode 100644 index b48e65ca..00000000 --- a/scripts/build-package-jsr.js +++ /dev/null @@ -1,210 +0,0 @@ -import { fileURLToPath } from 'node:url' -import * as fs from 'node:fs' -import * as cp from 'node:child_process' -import { resolve } from 'node:path' - -import { populateFromUpstream } from '@fuman/jsr' -import * as glob from 'glob' -import ts from 'typescript' - -import { processPackageJson } from '../.config/vite-utils/package-json.js' - -export function packageJsonToDeno({ packageJson, packageJsonOrig }) { - // https://jsr.io/docs/package-configuration - - const importMap = {} - const exports = {} - - if (packageJson.dependencies) { - for (const [name, version] of Object.entries(packageJson.dependencies)) { - if (name.startsWith('@mtcute/')) { - importMap[name] = `jsr:${name}@${version}` - } else if (version.startsWith('npm:@jsr/')) { - const jsrName = version.slice(9).split('@')[0].replace('__', '/') - const jsrVersion = version.slice(9).split('@')[1] - importMap[name] = `jsr:@${jsrName}@${jsrVersion}` - } else { - importMap[name] = `npm:${name}@${version}` - } - } - } - - if (packageJsonOrig.exports) { - let tmpExports - if (typeof packageJsonOrig.exports === 'string') { - tmpExports = { '.': packageJsonOrig.exports } - } else if (typeof packageJsonOrig.exports !== 'object') { - throw new TypeError('package.json exports must be an object') - } else { - tmpExports = packageJsonOrig.exports - } - - for (const [name, value] of Object.entries(tmpExports)) { - if (typeof value !== 'string') { - throw new TypeError(`package.json exports value must be a string: ${name}`) - } - if (value.endsWith('.wasm')) continue - - exports[name] = value - .replace(/^\.\/src\//, './') - .replace(/\.js$/, '.ts') - } - } - - return { - name: packageJson.name, - version: packageJson.version, - exports, - exclude: ['**/*.test.ts', '**/*.test-utils.ts', '**/__fixtures__/**'], - imports: importMap, - publish: { - exclude: ['!../dist'], // lol - }, - ...packageJson.denoJson, - } -} - -export async function runJsrBuildSync(packageName) { - const packageDir = fileURLToPath(new URL(`../packages/${packageName}`, import.meta.url)) - const outDir = fileURLToPath(new URL(`../packages/${packageName}/dist/jsr`, import.meta.url)) - fs.rmSync(outDir, { recursive: true, force: true }) - fs.mkdirSync(outDir, { recursive: true }) - - console.log('[i] Copying sources...') - fs.cpSync(resolve(packageDir, 'src'), outDir, { recursive: true }) - - const printer = ts.createPrinter() - - for (const f of glob.sync(resolve(outDir, '**/*.ts'))) { - let fileContent = fs.readFileSync(f, 'utf8') - let changed = false - - // replace .js imports with .ts - const file = ts.createSourceFile(f, fileContent, ts.ScriptTarget.ESNext, true) - let changedTs = false - - for (const imp of file.statements) { - if (imp.kind !== ts.SyntaxKind.ImportDeclaration && imp.kind !== ts.SyntaxKind.ExportDeclaration) { - continue - } - if (imp.kind === ts.SyntaxKind.ExportDeclaration && !imp.moduleSpecifier) { - continue - } - const mod = imp.moduleSpecifier.text - - if (mod[0] === '.' && mod.endsWith('.js')) { - changedTs = true - imp.moduleSpecifier = { - kind: ts.SyntaxKind.StringLiteral, - text: `${mod.slice(0, -3)}.ts`, - } - } - } - - if (changedTs) { - fileContent = printer.printFile(file) - changed = true - } - - // add shims for node-specific APIs and replace NodeJS.* types - // pretty fragile, but it works for now - const typesToReplace = { - 'NodeJS\\.Timeout': 'number', - 'NodeJS\\.Immediate': 'number', - } - const nodeSpecificApis = { - setImmediate: '(cb: (...args: any[]) => void, ...args: any[]) => number', - clearImmediate: '(id: number) => void', - Buffer: - '{ ' - + 'concat: (...args: any[]) => Uint8Array, ' - + 'from: (data: any, encoding?: string) => { toString(encoding?: string): string }, ' - + ' }', - SharedWorker: ['type', 'never'], - WorkerGlobalScope: - '{ ' - + ' new (): typeof WorkerGlobalScope, ' - + ' postMessage: (message: any, transfer?: Transferable[]) => void, ' - + ' addEventListener: (type: "message", listener: (ev: MessageEvent) => void) => void, ' - + ' }', - process: '{ ' + 'hrtime: { bigint: () => bigint }, ' + '}', - } - - for (const [name, decl_] of Object.entries(nodeSpecificApis)) { - if (fileContent.includes(name)) { - if (name === 'Buffer' && fileContent.includes('node:buffer')) continue - - changed = true - const isType = Array.isArray(decl_) && decl_[0] === 'type' - const decl = isType ? decl_[1] : decl_ - - if (isType) { - fileContent = `declare type ${name} = ${decl};\n${fileContent}` - } else { - fileContent = `declare const ${name}: ${decl};\n${fileContent}` - } - } - } - - for (const [oldType, newType] of Object.entries(typesToReplace)) { - if (fileContent.match(oldType)) { - changed = true - fileContent = fileContent.replace(new RegExp(oldType, 'g'), newType) - } - } - - if (changed) { - fs.writeFileSync(f, fileContent) - } - } - - const { packageJson, packageJsonOrig } = processPackageJson(packageDir) - const denoJson = packageJsonToDeno({ packageJson, packageJsonOrig }) - - fs.writeFileSync(resolve(outDir, 'deno.json'), JSON.stringify(denoJson, null, 2)) - fs.cpSync(new URL('../LICENSE', import.meta.url), resolve(outDir, 'LICENSE'), { recursive: true }) - - if (process.env.E2E) { - // populate dependencies, if any - const depsToPopulate = [] - - for (const dep of Object.values(denoJson.imports)) { - if (!dep.startsWith('jsr:')) continue - if (dep.startsWith('jsr:@mtcute/')) continue - depsToPopulate.push(dep.slice(4)) - } - - if (depsToPopulate.length) { - console.log('[i] Populating %d dependencies...', depsToPopulate.length) - await populateFromUpstream({ - downstream: process.env.JSR_URL, - token: process.env.JSR_TOKEN, - unstable_createViaApi: true, - packages: depsToPopulate, - }) - } - } - - let customConfig - try { - customConfig = await (await import(resolve(packageDir, 'build.config.js'))).default() - } catch {} - - if (customConfig) { - await customConfig.finalJsr?.({ packageDir, outDir }) - } - - console.log('[i] Trying to publish with --dry-run') - cp.execSync('deno publish --dry-run --allow-dirty --quiet', { cwd: outDir, stdio: 'inherit' }) - console.log('[v] All good!') -} - -if (process.argv[1] === fileURLToPath(import.meta.url)) { - const PACKAGE_NAME = process.argv[2] - - if (!PACKAGE_NAME) { - throw new Error('package name not specified') - } - - await runJsrBuildSync(PACKAGE_NAME) -} diff --git a/scripts/build-package-vite.js b/scripts/build-package-vite.js deleted file mode 100644 index 21af1c7d..00000000 --- a/scripts/build-package-vite.js +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable node/prefer-global/process */ -import * as cp from 'node:child_process' -import { fileURLToPath } from 'node:url' - -const configPath = fileURLToPath(new URL('../.config/vite.build.ts', import.meta.url)) - -export function runViteBuildSync(packageName) { - cp.execSync(`pnpm exec vite build --config "${configPath}"`, { - stdio: 'inherit', - cwd: fileURLToPath(new URL(`../packages/${packageName}`, import.meta.url)), - }) -} - -if (process.argv[1] === fileURLToPath(import.meta.url)) { - const PACKAGE_NAME = process.argv[2] - - if (!PACKAGE_NAME) { - throw new Error('package name not specified') - } - - runViteBuildSync(PACKAGE_NAME) -} diff --git a/scripts/build-package.js b/scripts/build-package.js deleted file mode 100644 index 9dfc1b97..00000000 --- a/scripts/build-package.js +++ /dev/null @@ -1,117 +0,0 @@ -import * as fs from 'node:fs' -import { fileURLToPath } from 'node:url' -import { resolve } from 'node:path' - -import { processPackageJson } from '../.config/vite-utils/package-json.js' - -import { packageJsonToDeno, runJsrBuildSync } from './build-package-jsr.js' -import { runViteBuildSync } from './build-package-vite.js' - -if (process.argv.length < 3) { - console.log('Usage: build-package.js ') - process.exit(0) -} - -const IS_JSR = process.env.JSR === '1' - -const packageName = process.argv[2] - -function transformFile(file, transform) { - const content = fs.readFileSync(file, 'utf8') - const res = transform(content, file) - if (res != null) fs.writeFileSync(file, res) -} - -if (packageName === 'tl') { - // create package by copying all the needed files - const packageDir = fileURLToPath(new URL('../packages/tl', import.meta.url)) - let outDir = fileURLToPath(new URL('../packages/tl/dist', import.meta.url)) - if (IS_JSR) outDir = resolve(outDir, 'jsr') - - fs.rmSync(outDir, { recursive: true, force: true }) - - const files = [ - 'binary/reader.d.ts', - 'binary/reader.js', - 'binary/rsa-keys.d.ts', - 'binary/rsa-keys.js', - 'binary/writer.d.ts', - 'binary/writer.js', - 'index.d.ts', - 'index.js', - 'raw-errors.json', - 'mtp-schema.json', - 'api-schema.json', - 'app-config.json', - 'README.md', - ] - - fs.mkdirSync(resolve(outDir, 'binary'), { recursive: true }) - - for (const f of files) { - fs.copyFileSync(resolve(packageDir, f), resolve(outDir, f)) - } - - fs.cpSync(new URL('../LICENSE', import.meta.url), resolve(outDir, 'LICENSE'), { recursive: true }) - const { packageJson, packageJsonOrig } = processPackageJson(packageDir) - - if (IS_JSR) { - // jsr doesn't support cjs, so we'll need to add some shims - // todo: remove this god awfulness when tl esm rewrite - transformFile(resolve(outDir, 'index.js'), (content) => { - return [ - '/// ', - 'const exports = {};', - content, - 'export const tl = exports.tl;', - 'export const mtp = exports.mtp;', - ].join('\n') - }) - transformFile(resolve(outDir, 'binary/reader.js'), (content) => { - return [ - '/// ', - 'const exports = {};', - content, - 'export const __tlReaderMap = exports.__tlReaderMap;', - ].join('\n') - }) - transformFile(resolve(outDir, 'binary/writer.js'), (content) => { - return [ - '/// ', - 'const exports = {};', - content, - 'export const __tlWriterMap = exports.__tlWriterMap;', - ].join('\n') - }) - transformFile(resolve(outDir, 'binary/rsa-keys.js'), (content) => { - return [ - '/// ', - 'const exports = {};', - content, - 'export const __publicKeyIndex = exports.__publicKeyIndex;', - ].join('\n') - }) - - // patch deno.json to add some export maps - const denoJson = packageJsonToDeno({ packageJson, packageJsonOrig }) - denoJson.exports = {} - - for (const f of files) { - if (!f.match(/\.js(?:on)?$/)) continue - if (f === 'index.js') { - denoJson.exports['.'] = './index.js' - } else { - denoJson.exports[`./${f}`] = `./${f}` - } - } - fs.writeFileSync(resolve(outDir, 'deno.json'), JSON.stringify(denoJson, null, 2)) - } else { - fs.writeFileSync(resolve(outDir, 'package.json'), JSON.stringify(packageJson, null, 2)) - } -} else { - if (IS_JSR) { - await runJsrBuildSync(packageName) - } else { - runViteBuildSync(packageName) - } -} diff --git a/scripts/bump-version.js b/scripts/bump-version.js deleted file mode 100644 index 987e1ac2..00000000 --- a/scripts/bump-version.js +++ /dev/null @@ -1,86 +0,0 @@ -import { appendFileSync, readFileSync, readdirSync, writeFileSync } from 'node:fs' -import { EOL } from 'node:os' -import { dirname, join } from 'node:path' -import { fileURLToPath } from 'node:url' - -import { inc, rcompare } from 'semver' - -const __dirname = dirname(new URL(import.meta.url).pathname) - -function collectPackageJsons() { - return readdirSync(join(__dirname, '../packages')) - .filter(s => !s.startsWith('.')) - .map((name) => { - try { - return JSON.parse(readFileSync(join(__dirname, '../packages', name, 'package.json'), 'utf-8')) - } catch (e) { - if (e.code !== 'ENOENT') throw e - - return null - } - }) - .filter(Boolean) -} - -function bumpVersions(packages, kind) { - const pkgJsons = collectPackageJsons() - const maxVersion = pkgJsons - .filter(it => it.name !== '@mtcute/tl') - .map(it => it.version) - .sort(rcompare)[0] - - const nextVersion = inc(maxVersion, kind) - console.log('[i] Bumping versions to %s', nextVersion) - - for (const pkg of packages) { - if (pkg === 'tl') continue // own versioning - const pkgJson = pkgJsons.find(it => it.name === `@mtcute/${pkg}`) - - if (!pkgJson) { - console.error(`Package ${pkg} not found!`) - process.exit(1) - } - - pkgJson.version = nextVersion - writeFileSync( - join(__dirname, '../packages', pkg, 'package.json'), - `${JSON.stringify(pkgJson, null, 2)}\n`, - ) - } - - const rootPkgJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8')) - rootPkgJson.version = nextVersion - writeFileSync(join(__dirname, '../package.json'), `${JSON.stringify(rootPkgJson, null, 2)}\n`) - - return nextVersion -} - -if (process.argv[1] === fileURLToPath(import.meta.url)) { - const kind = process.argv[2] - const packages = process.argv[3] - - if (!packages || !kind) { - console.log('Usage: bump-version.js ') - process.exit(1) - } - - const packagesList = packages.split(',') - - if (packagesList.length === 0) { - console.error('No packages specified!') - process.exit(1) - } - - if (kind === 'major' && packagesList.length !== collectPackageJsons().length) { - console.error('Cannot bump major version only for some packages!') - process.exit(1) - } - - const ver = bumpVersions(packagesList, kind) - - if (process.env.GITHUB_OUTPUT) { - appendFileSync(process.env.GITHUB_OUTPUT, `version=${ver}${EOL}`) - } -} - -export { bumpVersions } diff --git a/scripts/find-updated-packages.js b/scripts/find-updated-packages.js deleted file mode 100644 index 447e4288..00000000 --- a/scripts/find-updated-packages.js +++ /dev/null @@ -1,111 +0,0 @@ -import { execSync } from 'node:child_process' -import { appendFileSync, existsSync } from 'node:fs' -import { EOL } from 'node:os' -import { dirname, join } from 'node:path' -import { fileURLToPath } from 'node:url' - -import { findChangedFilesSince, getLatestTag } from './git-utils.js' -import { listPackages } from './publish.js' - -getTsconfigFiles.cache = {} - -const __dirname = dirname(new URL(import.meta.url).pathname) - -function getTsconfigFiles(pkg) { - if (!existsSync(join(__dirname, `../packages/${pkg}/tsconfig.json`))) { - throw new Error(`[!] ${pkg} does not have a tsconfig.json`) - } - if (pkg in getTsconfigFiles.cache) return getTsconfigFiles.cache[pkg] - - console.log('[i] Getting tsconfig files for %s', pkg) - const res = execSync('pnpm exec tsc --showConfig', { - encoding: 'utf8', - stdio: 'pipe', - cwd: join(__dirname, `../packages/${pkg}`), - }) - - const json = JSON.parse(res) - - return (getTsconfigFiles.cache[pkg] = json.files.map(it => it.replace(/^\.\//, ''))) -} - -function isMeaningfulChange(pkg, path) { - // some magic heuristics stuff - - if (path.match(/\.(md|test(?:-utils)?\.ts)$/i)) return false - - if (getTsconfigFiles(pkg).includes(path)) { - console.log('[i] %s: %s is in tsconfig', pkg, path) - - return true - } - - if (path.match(/typedoc\.cjs$/i)) return false - if (path.match(/^(scripts|dist|tests|private)\//i)) return false - - console.log('[i] %s: %s is a meaningful change', pkg, path) - - // to be safe - return true -} - -function findChangedPackagesSince(tag, until) { - const packages = new Set(listPackages(true)) - const changedFiles = findChangedFilesSince(tag, until) - - const changedPackages = new Set() - - for (const file of changedFiles) { - const [dir, pkgname, ...rest] = file.split('/') - if (dir !== 'packages') continue - if (!packages.has(pkgname)) continue - - // already checked, no need to check again - if (changedPackages.has(pkgname)) continue - - const relpath = rest.join('/') - - if (isMeaningfulChange(pkgname, relpath)) { - changedPackages.add(pkgname) - } - } - - return Array.from(changedPackages) -} - -export { findChangedPackagesSince, getLatestTag } - -if (process.argv[1] === fileURLToPath(import.meta.url) && process.env.CI && process.env.GITHUB_OUTPUT) { - const kind = process.argv[2] - const input = process.argv[3] - - if (!input) { - // for simpler flow, one can pass all or package list as the first argument, - // and they will be returned as is, so that we can later simply - // use the outputs of this script - console.log('Usage: find-updated-packages.js ') - process.exit(1) - } - - if (kind === 'major' && input !== 'all') { - throw new Error('For major releases, all packages must be published') - } - - console.log('[i] Determining packages to publish...') - - let res - - if (input === 'all') { - res = listPackages(true) - } else if (input === 'updated') { - const tag = getLatestTag() - console.log('[i] Latest tag is %s', tag) - - res = findChangedPackagesSince(tag) - } else { - res = input.split(',') - } - - console.log('[i] Will publish:', res) - appendFileSync(process.env.GITHUB_OUTPUT, `modified=${res.join(',')}${EOL}`) -} diff --git a/scripts/gen-deps-graph.js b/scripts/gen-deps-graph.js deleted file mode 100644 index b6e0a57a..00000000 --- a/scripts/gen-deps-graph.js +++ /dev/null @@ -1,38 +0,0 @@ -// node scripts/gen-deps-graph.js | dot -Tsvg > deps.svg -import { getPackageJsons } from './utils.js' - -const packageJsons = await getPackageJsons() - -function getMtcuteName(name) { - if (!name.startsWith('@mtcute/')) return null - - return name.slice(8) -} - -const output = [] - -for (const pkg of packageJsons) { - if (!pkg) continue - - const name = getMtcuteName(pkg.name) - - if (!name) continue - - for (const dep of Object.keys(pkg.dependencies || {})) { - const depName = getMtcuteName(dep) - if (!depName) continue - - output.push(`"${name}" -> "${depName}"`) - } - - for (const dep of Object.keys(pkg.devDependencies || {})) { - const depName = getMtcuteName(dep) - if (!depName) continue - - output.push(`"${name}" -> "${depName}" [style=dashed,color=grey]`) - } -} - -console.log('digraph {') -console.log(output.join('\n')) -console.log('}') diff --git a/scripts/generate-changelog.js b/scripts/generate-changelog.js deleted file mode 100644 index 04eacd46..00000000 --- a/scripts/generate-changelog.js +++ /dev/null @@ -1,74 +0,0 @@ -import { randomUUID } from 'node:crypto' -import { appendFileSync } from 'node:fs' -import { EOL } from 'node:os' -import { fileURLToPath } from 'node:url' - -import { findChangedFilesSince, getCommitsSince, getLatestTag, parseConventionalCommit } from './git-utils.js' - -function generateChangelog(onlyPackages) { - const byPackage = {} - - for (const commit of getCommitsSince(getLatestTag())) { - const parsed = parseConventionalCommit(commit.msg) - - if (!parsed) { - console.warn('[warn] Failed to parse commit message: %s', commit.msg) - continue - } - - const { type, breaking } = parsed - - if ((!type || ['chore', 'ci', 'docs', 'test'].includes(type)) && !breaking) continue - - const changed = findChangedFilesSince(`${commit.hash}~1`, commit.hash) - - let line = `- ${commit.hash}: ${breaking ? '**❗ BREAKING** ' : ''}${commit.msg}` - - if (breaking && commit.description) { - line - += `\n${ - commit.description - .trim() - .split('\n') - .map(line => ` ${line}`) - .join('\n')}` - } - - for (const file of changed) { - if (!file.startsWith('packages/')) continue - const pkg = file.split('/')[1] - if (onlyPackages && !onlyPackages.includes(pkg)) continue - - if (!byPackage[pkg]) byPackage[pkg] = {} - byPackage[pkg][commit.hash] = line - // console.log('including %s in %s because of %s', commit.hash, pkg, file) - } - } - - let ret = '' - - for (const [pkg, lines] of Object.entries(byPackage)) { - ret += `### ${pkg}\n` - ret += Object.values(lines).join('\n') - ret += '\n\n' - } - - return ret -} - -if (process.argv[1] === fileURLToPath(import.meta.url)) { - let onlyPackages = null - - if (process.argv[2]) { - onlyPackages = process.argv[2].split(',') - } - - const res = generateChangelog(onlyPackages) - - if (process.env.CI && process.env.GITHUB_OUTPUT) { - const delim = `---${randomUUID()}---${EOL}` - appendFileSync(process.env.GITHUB_OUTPUT, `changelog<<${delim}${res}${delim}`) - } else { - console.log(res) - } -} diff --git a/scripts/git-utils.js b/scripts/git-utils.js deleted file mode 100644 index bc90be72..00000000 --- a/scripts/git-utils.js +++ /dev/null @@ -1,76 +0,0 @@ -import { execSync } from 'node:child_process' - -function getLatestTag() { - try { - const res = execSync('git describe --abbrev=0 --tags', { encoding: 'utf8', stdio: 'pipe' }).trim() - - return res - } catch (e) { - if (e.stderr.match(/^fatal: (No names found|No tags can describe)/i)) { - // no tags found, let's just return the first commit - return execSync('git rev-list --max-parents=0 HEAD', { encoding: 'utf8' }).trim() - } - - throw e - } -} - -function findChangedFilesSince(tag, until = 'HEAD') { - return execSync(`git diff --name-only ${tag} ${until}`, { encoding: 'utf8', stdio: 'pipe' }).trim().split('\n') -} - -function getCommitsSince(tag, until = 'HEAD') { - const delim = `---${Math.random().toString(36).slice(2)}---` - - const lines = execSync(`git log --pretty="format:%H %s%n%b%n${delim}" ${tag}..${until}`, { encoding: 'utf8', stdio: 'pipe' }) - .trim() - .split('\n') - - const items = [] - - let current = null - - for (const line of lines) { - if (line === delim) { - if (current) items.push(current) - current = null - } else if (current) { - if (current.description) current.description += '\n' - current.description += line - } else { - const [hash, ...msg] = line.split(' ') - current = { hash, msg: msg.join(' '), description: '' } - } - } - - if (current) items.push(current) - - return items.reverse() -} - -function getCurrentCommit() { - return execSync('git rev-parse HEAD', { encoding: 'utf8', stdio: 'pipe' }).trim() -} - -function getCurrentBranch() { - return execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8', stdio: 'pipe' }).trim() -} - -function parseConventionalCommit(msg) { - const match = msg.match(/^(\w+)(?:\(([^)]+)\))?(!?): (.+)$/) - - if (!match) return null - - const [, type, scope, breaking, subject] = match - - return { type, scope, breaking: Boolean(breaking), subject } -} - -export { - findChangedFilesSince, - getCommitsSince, - getCurrentBranch, - getCurrentCommit, - getLatestTag, - parseConventionalCommit, -} diff --git a/scripts/publish.js b/scripts/publish.ts similarity index 62% rename from scripts/publish.js rename to scripts/publish.ts index a5352369..22bd97aa 100644 --- a/scripts/publish.js +++ b/scripts/publish.ts @@ -1,15 +1,15 @@ import * as cp from 'node:child_process' -import * as fs from 'node:fs' import { createRequire } from 'node:module' import * as path from 'node:path' import { fileURLToPath } from 'node:url' -import { determinePublishOrder, jsrMaybeCreatePackage } from '@fuman/jsr' +import { jsrCheckVersion, jsrMaybeCreatePackage } from '@fuman/build/jsr' +import type { WorkspacePackage } from '@fuman/build' +import { collectPackageJsons, exec, filterPackageJsonsForPublish, npmCheckVersion, sortWorkspaceByPublishOrder, writeGithubActionsOutput } from '@fuman/build' const IS_JSR = process.env.JSR === '1' const MAIN_REGISTRY = IS_JSR ? 'https://jsr.io/' : 'https://registry.npmjs.org' let REGISTRY = process.env.REGISTRY || MAIN_REGISTRY -const EXPORTED_REGISTRY = REGISTRY const __dirname = path.dirname(new URL(import.meta.url).pathname) const require = createRequire(import.meta.url) @@ -29,50 +29,18 @@ if (IS_JSR) { process.env.JSR_URL = REGISTRY } -const JSR_EXCEPTIONS = { - 'bun': 'never', - 'create-bot': 'never', - 'crypto-node': 'never', - 'deno': 'only', - 'node': 'never', - 'http-proxy': 'never', - 'socks-proxy': 'never', - 'mtproxy': 'never', - 'test': 'never', +async function checkVersion(name: string, version: string) { + return IS_JSR + ? jsrCheckVersion({ package: `@mtcute/${name}`, version, registry: REGISTRY }) + : npmCheckVersion({ package: `@mtcute/${name}`, version, registry: REGISTRY }) } -function fetchRetry(url, init, retry = 0) { - return fetch(url, init).catch((err) => { - if (retry >= 5) throw err - - // for whatever reason this request sometimes fails with ECONNRESET - // no idea why, probably some issue in docker networking - if (err.cause?.code !== 'UND_ERR_SOCKET') { - console.log('[i] Error fetching %s:', url) - console.log(err) - } - - return new Promise(resolve => setTimeout(resolve, 1000)).then(() => fetchRetry(url, init, retry + 1)) - }) -} - -async function checkVersion(name, version) { - const registry = REGISTRY - - const url = IS_JSR ? `${registry}@mtcute/${name}/${version}_meta.json` : `${registry}@mtcute/${name}/${version}` - - return fetchRetry(url).then(r => r.status === 200) -} - -async function publishSinglePackage(name) { +async function publishSinglePackage(name: string) { const packageDir = path.join(__dirname, '../packages', name) console.log('[i] Building %s', name) - // run build script - cp.execSync(`pnpm run build-package ${name}`, { - stdio: 'inherit', - }) + await exec(['pnpm', 'run', 'build-package', name], { stdio: 'inherit' }) console.log('[i] Publishing %s', name) @@ -85,7 +53,7 @@ async function publishSinglePackage(name) { if (exists) { if (process.env.E2E && !IS_JSR) { console.log('[i] %s already exists, unpublishing..', name) - cp.execSync(`npm unpublish --registry ${REGISTRY} --force @mtcute/${name}`, { + await exec(['npm', 'unpublish', '--registry', REGISTRY, '--force', `@mtcute/${name}`], { cwd: path.join(packageDir, 'dist'), stdio: 'inherit', }) @@ -105,57 +73,29 @@ async function publishSinglePackage(name) { if (IS_JSR) { // publish to jsr const params = process.env.JSR_TOKEN ? `--token ${process.env.JSR_TOKEN}` : '' - cp.execSync(`deno publish --allow-dirty --quiet ${params}`, { - cwd: path.join(packageDir, 'dist/jsr'), + await exec(['deno', 'publish', '--allow-dirty', '--quiet', params], { + cwd: path.join(packageDir, 'dist'), stdio: 'inherit', }) } else { - // make sure dist/jsr doesn't exist (it shouldn't, but just in case) - if (fs.existsSync(path.join(packageDir, 'dist/jsr'))) { - fs.rmdirSync(path.join(packageDir, 'dist/jsr'), { recursive: true }) - } - // publish to npm const params = REGISTRY === MAIN_REGISTRY ? '--access public' : '--force' - cp.execSync(`npm publish --registry ${REGISTRY} ${params} -q`, { + await exec(['npm', 'publish', '--registry', REGISTRY, params, '-q'], { cwd: path.join(packageDir, 'dist'), stdio: 'inherit', }) } } -function listPackages(all = false) { - let packages = [] - - for (const f of fs.readdirSync(path.join(__dirname, '../packages'))) { - if (f[0] === '.') continue - - if (f === 'mtproxy' || f === 'socks-proxy' || f === 'http-proxy' || f === 'bun') { - // todo: return once we figure out fuman - continue - } - - if (!all) { - if (IS_JSR && JSR_EXCEPTIONS[f] === 'never') continue - if (!IS_JSR && JSR_EXCEPTIONS[f] === 'only') continue - } - - packages.push(f) +async function listPackages(all = false): Promise { + let packages = await collectPackageJsons(path.join(__dirname, '..')) + if (!all) { + filterPackageJsonsForPublish(packages, IS_JSR ? 'jsr' : 'npm') } if (IS_JSR) { - // we should sort them in a way that dependencies are published first. stc has a util for that - const map = {} - - for (const pkg of packages) { - const deps = require(`../packages/${pkg}/package.json`).dependencies || {} - map[pkg] = Object.keys(deps) - .filter(d => d.startsWith('@mtcute/')) - .map(d => d.slice(8)) - } - - packages = determinePublishOrder(map) - console.log('[i] Publishing order:', packages.join(', ')) + packages = sortWorkspaceByPublishOrder(packages) + console.log('[i] Publishing order:', packages.map(it => it.json.name).join(', ')) } return packages @@ -173,9 +113,9 @@ async function main(arg = process.argv[2]) { const failedPkgs = [] if (arg === 'all' || arg === 'updated') { - for (const pkg of listPackages()) { + for (const pkg of await listPackages()) { const pkgVersion = require(`../packages/${pkg}/package.json`).version - const published = await checkVersion(pkg, pkgVersion) + const published = await checkVersion(pkg.json.name!, pkgVersion) if (published && !process.env.E2E) { console.log('[i] %s is up to date', pkg) @@ -183,7 +123,7 @@ async function main(arg = process.argv[2]) { } try { - await publishSinglePackage(pkg) + await publishSinglePackage(pkg.json.name!) publishedPkgs.push(pkg) } catch (e) { console.error('[!] Failed to publish %s:', pkg) @@ -253,7 +193,7 @@ async function main(arg = process.argv[2]) { tarballs.push(path.join(dir, tar.toString().trim())) } - fs.writeFileSync(process.env.GITHUB_OUTPUT, `tarballs=${tarballs.join(',')}\n`, { flag: 'a' }) + writeGithubActionsOutput('tarballs', tarballs.join(',')) } process.exit(0) // idk why but it sometimes hangs indefinitely diff --git a/scripts/utils.js b/scripts/utils.js deleted file mode 100644 index 46e13cc2..00000000 --- a/scripts/utils.js +++ /dev/null @@ -1,28 +0,0 @@ -import { readFile, readdir } from 'node:fs/promises' -import { dirname, join } from 'node:path' -import { fileURLToPath } from 'node:url' - -export const rootDir = join(dirname(fileURLToPath(import.meta.url)), '../') - -export async function tryParsePackageJson(packageName) { - try { - const path = packageName === '$root' ? rootDir : join(rootDir, 'packages', packageName) - - return JSON.parse( - await readFile(join(path, 'package.json'), 'utf-8'), - ) - } catch (e) { - if (e.code !== 'ENOENT') throw e - - return null - } -} - -export async function getPackageJsons(includeRoot = false) { - const packages = (await readdir(join(rootDir, 'packages'))) - .filter(s => !s.startsWith('.')) - - if (includeRoot) packages.push('$root') - - return Promise.all(packages.map(tryParsePackageJson)).then(f => f.filter(Boolean)) -} diff --git a/scripts/validate-deps-versions.js b/scripts/validate-deps-versions.js deleted file mode 100644 index 4322df89..00000000 --- a/scripts/validate-deps-versions.js +++ /dev/null @@ -1,59 +0,0 @@ -import { fileURLToPath } from 'node:url' - -import semver from 'semver' - -import { getPackageJsons } from './utils.js' - -export async function validateDepsVersions() { - const packageJsons = await getPackageJsons(true) - - const versions = {} - const errors = [] - - packageJsons.forEach((json) => { - function check(key) { - const deps = json[key] - if (!deps) return - - Object.entries(deps).forEach(([depName, depVersions]) => { - // todo: remove this when fuman/net is published - if (depName.startsWith('@mtcute/') || depName.startsWith('@fuman/')) return - - if (!versions[depName]) { - versions[depName] = {} - } - - Object.entries(versions[depName]).forEach(([pkgName, pkgDepVersions]) => { - if (!semver.satisfies(depVersions, pkgDepVersions)) { - errors.push( - `- at ${json.name} -> ${key} has ${depName}@${depVersions}, but ${pkgName} has @${pkgDepVersions}`, - ) - } - }) - - versions[depName][json.name] = depVersions - }) - } - - check('dependencies') - check('devDependencies') - check('peerDependencies') - check('optionalDependencies') - }) - - if (errors.length > 0) { - console.log('⚠️ Found external dependencies mismatch:') - errors.forEach(err => console.log(err)) - process.exit(1) - } - - console.log('✅ All external dependencies match!') -} - -if (import.meta.url.startsWith('file:')) { - const modulePath = fileURLToPath(import.meta.url) - - if (process.argv[1] === modulePath) { - validateDepsVersions().catch(console.error) - } -}