From dbf54596e496a7f0ed95eaa688ca91464905a41c Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Sun, 6 Jul 2025 17:17:55 -0700 Subject: [PATCH] Type winamp-eqf --- .github/workflows/ci.yml | 2 + docs/typescript-checking.md | 5 +- package.json | 2 +- packages/webamp/config/jest.unit.js | 2 + packages/webamp/js/selectors.ts | 15 +- packages/webamp/js/winamp-eqf.d.ts | 4 - packages/webamp/package.json | 2 +- packages/webamp/scripts/parsePresetFiles.js | 10 +- packages/winamp-eqf/.gitignore | 23 ++ packages/winamp-eqf/README.md | 26 +- packages/winamp-eqf/package.json | 27 +- packages/winamp-eqf/src/constants.ts | 17 + packages/winamp-eqf/src/creator.ts | 43 +++ packages/winamp-eqf/src/index.test.ts | 101 ++++++ packages/winamp-eqf/src/index.ts | 4 + packages/winamp-eqf/src/parser.ts | 51 +++ packages/winamp-eqf/src/types.ts | 31 ++ packages/winamp-eqf/tsconfig.json | 26 ++ pnpm-lock.yaml | 368 ++++++++++++++++---- 19 files changed, 661 insertions(+), 98 deletions(-) delete mode 100644 packages/webamp/js/winamp-eqf.d.ts create mode 100644 packages/winamp-eqf/.gitignore create mode 100644 packages/winamp-eqf/src/constants.ts create mode 100644 packages/winamp-eqf/src/creator.ts create mode 100644 packages/winamp-eqf/src/index.test.ts create mode 100644 packages/winamp-eqf/src/index.ts create mode 100644 packages/winamp-eqf/src/parser.ts create mode 100644 packages/winamp-eqf/src/types.ts create mode 100644 packages/winamp-eqf/tsconfig.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 18460af7..5cf0e2f7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,6 +55,7 @@ jobs: # Set CI environment variable for optimized builds export CI=true pnpm --filter ani-cursor build + pnpm --filter winamp-eqf build pnpm --filter webamp build env: NODE_ENV: production @@ -88,6 +89,7 @@ jobs: # Set CI environment variable for optimized builds export CI=true pnpm --filter ani-cursor build + pnpm --filter winamp-eqf build pnpm --filter webamp build-library env: NODE_ENV: production diff --git a/docs/typescript-checking.md b/docs/typescript-checking.md index 51d1a0c6..5eec4f49 100644 --- a/docs/typescript-checking.md +++ b/docs/typescript-checking.md @@ -6,7 +6,7 @@ This document describes the TypeScript checking convention established for the W Each TypeScript-enabled package in the monorepo now has a consistent `type-check` script that performs type checking without emitting files. -**Progress: 4 out of 5 packages now passing! 🎉** +**Progress: 5 out of 6 packages now passing! 🎉** ### Package Status @@ -16,6 +16,7 @@ Each TypeScript-enabled package in the monorepo now has a consistent `type-check - **ani-cursor**: Clean TypeScript compilation - **skin-database**: Clean TypeScript compilation (fixed JSZip types, Jest types, and Buffer compatibility issues) - **webamp-docs**: Clean TypeScript compilation +- **winamp-eqf**: Clean TypeScript compilation (ES module with full type definitions) #### ❌ Failing Packages (Need fixes) @@ -44,7 +45,7 @@ The root package.json contains a centralized script that runs type checking for ```json { "scripts": { - "type-check": "pnpm --filter webamp type-check && pnpm --filter ani-cursor type-check && pnpm --filter skin-database type-check && pnpm --filter webamp-docs type-check" + "type-check": "pnpm --filter webamp type-check && pnpm --filter ani-cursor type-check && pnpm --filter skin-database type-check && pnpm --filter webamp-docs type-check && pnpm --filter winamp-eqf type-check" } } ``` diff --git a/package.json b/package.json index 99e6e7f5..4c2f89a6 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "scripts": { "test": "jest", "lint": "eslint . --ext ts,tsx,js,jsx --rulesdir=packages/webamp-modern/tools/eslint-rules", - "type-check": "pnpm --filter webamp type-check && pnpm --filter ani-cursor type-check && pnpm --filter skin-database type-check && pnpm --filter webamp-docs type-check", + "type-check": "pnpm --filter webamp type-check && pnpm --filter ani-cursor type-check && pnpm --filter skin-database type-check && pnpm --filter webamp-docs type-check && pnpm --filter winamp-eqf type-check", "deploy": "sh deploy.sh", "format": "prettier --write '**/*.{js,ts,tsx}'" }, diff --git a/packages/webamp/config/jest.unit.js b/packages/webamp/config/jest.unit.js index e072af60..ece5eb96 100644 --- a/packages/webamp/config/jest.unit.js +++ b/packages/webamp/config/jest.unit.js @@ -10,10 +10,12 @@ module.exports = { "\\.css$": "/js/__mocks__/styleMock.js", "\\.wsz$": "/js/__mocks__/fileMock.js", "\\.mp3$": "/js/__mocks__/fileMock.js", + "^winamp-eqf$": "/../winamp-eqf/built/index.js", }, transform: { "^.+\\.(t|j)sx?$": ["@swc/jest"], }, + extensionsToTreatAsEsm: [".ts", ".tsx"], testPathIgnorePatterns: ["/node_modules/"], testEnvironment: "jsdom", }; diff --git a/packages/webamp/js/selectors.ts b/packages/webamp/js/selectors.ts index adcc0923..2f776d01 100644 --- a/packages/webamp/js/selectors.ts +++ b/packages/webamp/js/selectors.ts @@ -45,13 +45,20 @@ import { SerializedStateV1 } from "./serializedStates/v1Types"; export const getSliders = (state: AppState) => state.equalizer.sliders; export const getEqfData = createSelector(getSliders, (sliders) => { - const preset: { [key: string]: number | string } = { + const preset = { name: "Entry1", preamp: Utils.denormalizeEqBand(sliders.preamp), + hz60: Utils.denormalizeEqBand(sliders[60]), + hz170: Utils.denormalizeEqBand(sliders[170]), + hz310: Utils.denormalizeEqBand(sliders[310]), + hz600: Utils.denormalizeEqBand(sliders[600]), + hz1000: Utils.denormalizeEqBand(sliders[1000]), + hz3000: Utils.denormalizeEqBand(sliders[3000]), + hz6000: Utils.denormalizeEqBand(sliders[6000]), + hz12000: Utils.denormalizeEqBand(sliders[12000]), + hz14000: Utils.denormalizeEqBand(sliders[14000]), + hz16000: Utils.denormalizeEqBand(sliders[16000]), }; - BANDS.forEach((band) => { - preset[`hz${band}`] = Utils.denormalizeEqBand(sliders[band]); - }); const eqfData = { presets: [preset], type: "Winamp EQ library file v1.1", diff --git a/packages/webamp/js/winamp-eqf.d.ts b/packages/webamp/js/winamp-eqf.d.ts deleted file mode 100644 index 6964e5d7..00000000 --- a/packages/webamp/js/winamp-eqf.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module "winamp-eqf" { - import { parser, creator } from "winamp-eqf"; - export { parser, creator }; -} diff --git a/packages/webamp/package.json b/packages/webamp/package.json index 81780582..4ed514d0 100644 --- a/packages/webamp/package.json +++ b/packages/webamp/package.json @@ -155,6 +155,6 @@ "reselect": "^3.0.1", "strtok3": "^10.3.1", "tinyqueue": "^1.2.3", - "winamp-eqf": "^1.0.0" + "winamp-eqf": "workspace:*" } } diff --git a/packages/webamp/scripts/parsePresetFiles.js b/packages/webamp/scripts/parsePresetFiles.js index af13120b..e4718039 100755 --- a/packages/webamp/scripts/parsePresetFiles.js +++ b/packages/webamp/scripts/parsePresetFiles.js @@ -1,6 +1,10 @@ -const fs = require("fs"); -const path = require("path"); -const { parser } = require("winamp-eqf"); +import fs from "fs"; +import path from "path"; +import { parser } from "winamp-eqf"; +import { fileURLToPath } from "url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); const presetsPath = path.join(__dirname, "../presets/winamp.q1"); const content = fs.readFileSync(presetsPath); diff --git a/packages/winamp-eqf/.gitignore b/packages/winamp-eqf/.gitignore new file mode 100644 index 00000000..514ade6c --- /dev/null +++ b/packages/winamp-eqf/.gitignore @@ -0,0 +1,23 @@ +# Build output +built/ + +# Node modules +node_modules/ + +# npm/pnpm +npm-debug.log* +yarn-debug.log* +yarn-error.log* +package-lock.json + +# TypeScript +*.tsbuildinfo + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db diff --git a/packages/winamp-eqf/README.md b/packages/winamp-eqf/README.md index cc0121bb..53020ba8 100644 --- a/packages/winamp-eqf/README.md +++ b/packages/winamp-eqf/README.md @@ -1,23 +1,31 @@ # Winamp Equalizer Preset Parser -Winamp allows you to save your equalizser settings to `.eqf` file. This package allows you to parse these files. +Winamp allows you to save your equalizer settings to `.eqf` file. This package allows you to parse these files. ## Installation - npm install --save winamp-eqf +```bash +npm install --save winamp-eqf +``` -## Ussage +## Usage - import {parser, creator} from 'winamp-eqf'; +```typescript +import { parser, creator, EqfData, CreateEqfData } from 'winamp-eqf'; - // ... Get your .eqf or .q1 file as an ArrayBuffer - const eqf = parser(eqfArrayBuffer); +// ... Get your .eqf or .q1 file as an ArrayBuffer +const eqf: EqfData = parser(eqfArrayBuffer); - const eqfArrayBuffer = creator(eqf); +const eqfArrayBuffer: ArrayBuffer = creator(eqf); +``` + +This package is an ES module and requires Node.js 14+ or a modern bundler that supports ES modules. ## API -### `parser(ArrayBuffer)` +This package is written in TypeScript and provides full type definitions. + +### `parser(ArrayBuffer): EqfData` #### Return value @@ -44,7 +52,7 @@ Winamp allows you to save your equalizser settings to `.eqf` file. This package } ``` -### `creator(eqfObject)` +### `creator(eqfObject: CreateEqfData): ArrayBuffer` #### Return Value: `ArrayBuffer` diff --git a/packages/winamp-eqf/package.json b/packages/winamp-eqf/package.json index a1a73108..78bc8095 100644 --- a/packages/winamp-eqf/package.json +++ b/packages/winamp-eqf/package.json @@ -2,7 +2,15 @@ "name": "winamp-eqf", "version": "1.0.0", "description": "Parse and create Winamp .EQF files which describe equalizer settings", - "main": "index.js", + "type": "module", + "main": "built/index.js", + "types": "built/index.d.ts", + "exports": { + ".": { + "import": "./built/index.js", + "types": "./built/index.d.ts" + } + }, "repository": { "type": "git", "url": "https://github.com/captbaritone/webamp.git", @@ -12,15 +20,30 @@ "url": "https://github.com/captbaritone/webamp/issues" }, "homepage": "https://github.com/captbaritone/webamp/tree/master/packages/winamp-eqf", + "scripts": { + "build": "tsc", + "prepublishOnly": "npm run build", + "type-check": "tsc --noEmit" + }, + "files": [ + "built/**/*", + "README.md", + "LICENSE" + ], "keywords": [ "winamp", "equalizer", "parse", "create" ], - "author": "Jordan Eldgredge", + "author": "Jordan Eldredge", "license": "ISC", + "engines": { + "node": ">=14.0.0" + }, "devDependencies": { + "@types/jest": "^30.0.0", + "@types/node": "^24.0.10", "buffer-to-arraybuffer": "0.0.4", "typescript": "^5.3.3" } diff --git a/packages/winamp-eqf/src/constants.ts b/packages/winamp-eqf/src/constants.ts new file mode 100644 index 00000000..af90f969 --- /dev/null +++ b/packages/winamp-eqf/src/constants.ts @@ -0,0 +1,17 @@ +export const PRESET_VALUES = [ + "hz60", + "hz170", + "hz310", + "hz600", + "hz1000", + "hz3000", + "hz6000", + "hz12000", + "hz14000", + "hz16000", + "preamp", +] as const; + +export const HEADER = "Winamp EQ library file v1.1"; + +export type PresetValueKey = (typeof PRESET_VALUES)[number]; diff --git a/packages/winamp-eqf/src/creator.ts b/packages/winamp-eqf/src/creator.ts new file mode 100644 index 00000000..1888dda0 --- /dev/null +++ b/packages/winamp-eqf/src/creator.ts @@ -0,0 +1,43 @@ +import { HEADER, PRESET_VALUES } from "./constants.js"; +import { CreateEqfData } from "./types.js"; + +const PRESET_LENGTH = 257; + +export function creator(data: CreateEqfData): ArrayBuffer { + const buffer: number[] = []; + + // Add header + for (let i = 0; i < HEADER.length; i++) { + buffer.push(HEADER.charCodeAt(i)); + } + + // Add control character and ending + buffer.push(26); // + const ending = "!--"; + for (let i = 0; i < ending.length; i++) { + buffer.push(ending.charCodeAt(i)); + } + + if (!data.presets) { + throw new Error("Eqf data is missing presets"); + } + + data.presets.forEach((preset) => { + // Add preset name + let k = 0; + for (; k < preset.name.length; k++) { + buffer.push(preset.name.charCodeAt(k)); + } + // Pad name to fixed length + for (; k < PRESET_LENGTH; k++) { + buffer.push(0); + } + + // Add preset values + PRESET_VALUES.forEach((valueName) => { + buffer.push(64 - preset[valueName]); // Adjust for inverse values + }); + }); + + return new Uint8Array(buffer).buffer; +} diff --git a/packages/winamp-eqf/src/index.test.ts b/packages/winamp-eqf/src/index.test.ts new file mode 100644 index 00000000..cd1e4dcb --- /dev/null +++ b/packages/winamp-eqf/src/index.test.ts @@ -0,0 +1,101 @@ +import { join } from "path"; +import { readFileSync } from "fs"; +import { parser, creator } from "../src"; +import * as bufferToArrayBuffer from "buffer-to-arraybuffer"; + +// TODO: Abstract this into its own library. +declare global { + namespace jest { + interface Matchers { + arrayBufferToEqual(expected: ArrayBuffer): R; + } + } +} + +expect.extend({ + arrayBufferToEqual(received: ArrayBuffer, argument: ArrayBuffer) { + if (received.byteLength !== argument.byteLength) { + return { + message: () => + `ArrayBuffers do not match. Expected length ${received.byteLength} but got ${argument.byteLength}`, + pass: false, + }; + } + const a = new Uint8Array(received); + const b = new Uint8Array(argument); + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { + return { + message: () => + `ArrayBuffers do not match. Expected ${a[i]} to equal ${b[i]} at index ${i}`, + pass: false, + }; + } + } + return { + message: () => `ArrayBuffers are equal.`, + pass: true, + }; + }, +}); + +const fixtures = [ + // All bands max, preamp mid + "max.EQF", + // All bands min, preamp mid + "min.EQF", + // All bands mid, preamp mid + "midline.EQF", + // All bands mid, preamp max + "preampMax.EQF", + // All bands mid, preamp min + "preampMin.EQF", + "random.EQF", + "winamp_sample.q1", + "winamp.q1", +]; + +describe("parser", () => { + fixtures.forEach((fileName) => { + const buffer = readFileSync(join(__dirname, "../sample_data", fileName)); + const arrayBuffer = bufferToArrayBuffer(buffer); + test(`${fileName}`, () => { + expect(() => parser(arrayBuffer)).not.toThrow(); + }); + }); + + test("parsed file snapshot", () => { + const buffer = readFileSync(join(__dirname, "../sample_data/random.EQF")); + const arrayBuffer = bufferToArrayBuffer(buffer); + expect(parser(arrayBuffer)).toMatchSnapshot(); + }); +}); + +describe("creator", () => { + fixtures.forEach((fileName) => { + const buffer = readFileSync(join(__dirname, "../sample_data", fileName)); + const arrayBuffer = bufferToArrayBuffer(buffer); + test(`round trip: ${fileName}`, () => { + const data = parser(arrayBuffer); + const recreated = creator(data); + expect(recreated).arrayBufferToEqual(arrayBuffer); + }); + }); +}); + +describe("integration", () => { + test("can parse and recreate Winamp's sample file", () => { + const buffer = readFileSync( + join(__dirname, "../sample_data/winamp_sample.q1") + ); + const arrayBuffer = bufferToArrayBuffer(buffer); + const data = parser(arrayBuffer); + expect(data.presets).toHaveLength(3); + expect(data.presets[0].name).toEqual("Classical"); + expect(data.presets[1].name).toEqual("Club"); + expect(data.presets[2].name).toEqual("Dance"); + + const recreated = creator(data); + expect(recreated).arrayBufferToEqual(arrayBuffer); + }); +}); diff --git a/packages/winamp-eqf/src/index.ts b/packages/winamp-eqf/src/index.ts new file mode 100644 index 00000000..88f0f567 --- /dev/null +++ b/packages/winamp-eqf/src/index.ts @@ -0,0 +1,4 @@ +export { parser } from "./parser.js"; +export { creator } from "./creator.js"; +export * from "./types.js"; +export * from "./constants.js"; diff --git a/packages/winamp-eqf/src/parser.ts b/packages/winamp-eqf/src/parser.ts new file mode 100644 index 00000000..4f4a334e --- /dev/null +++ b/packages/winamp-eqf/src/parser.ts @@ -0,0 +1,51 @@ +import { HEADER, PRESET_VALUES } from "./constants.js"; +import { EqfData, EqfPreset } from "./types.js"; + +export function parser(arrayBuffer: ArrayBuffer): EqfData { + const data: EqfData = { + type: "", + presets: [], + }; + let i = 0; + const arr = new Int8Array(arrayBuffer); + + // Parse header + data.type = String.fromCharCode.apply( + null, + Array.from(arr.slice(i, HEADER.length)) + ); + if (data.type !== HEADER) { + throw new Error("Invalid .eqf file."); + } + i += HEADER.length; + + // Skip "!--" + i += 4; + + // Get the presets + while (i < arr.length) { + const preset: Partial = {}; + + // Get the name + const nameStart = i; + const nameEnd = nameStart + 257; // Str is fixed length + // Str is null terminated + while (arr[i] !== 0 && i <= nameEnd) { + i++; + } + preset.name = String.fromCharCode.apply( + null, + Array.from(arr.slice(nameStart, i)) + ); + i = nameEnd; // Skip over any unused bytes + + // Get the levels + PRESET_VALUES.forEach((valueName) => { + (preset as any)[valueName] = 64 - arr[i++]; // Adjust for inverse values + }); + + data.presets.push(preset as EqfPreset); + } + + return data; +} diff --git a/packages/winamp-eqf/src/types.ts b/packages/winamp-eqf/src/types.ts new file mode 100644 index 00000000..65201772 --- /dev/null +++ b/packages/winamp-eqf/src/types.ts @@ -0,0 +1,31 @@ +import { PresetValueKey } from "./constants.js"; + +export interface EqfPreset { + name: string; + hz60: number; + hz170: number; + hz310: number; + hz600: number; + hz1000: number; + hz3000: number; + hz6000: number; + hz12000: number; + hz14000: number; + hz16000: number; + preamp: number; +} + +export interface EqfData { + type: string; + presets: EqfPreset[]; +} + +export interface CreateEqfData { + presets: Array< + { + [K in PresetValueKey]: number; + } & { + name: string; + } + >; +} diff --git a/packages/winamp-eqf/tsconfig.json b/packages/winamp-eqf/tsconfig.json new file mode 100644 index 00000000..61511ca3 --- /dev/null +++ b/packages/winamp-eqf/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ES2018", + "lib": ["ES2018"], + "module": "ES2020", + "moduleResolution": "node", + "declaration": true, + "declarationMap": true, + "outDir": "./built", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "types": ["jest", "node"] + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "built", + "src/**/*.test.ts" + ] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d87ef3a..d2a7f00d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,7 +98,7 @@ importers: dependencies: '@next/third-parties': specifier: ^15.3.3 - version: 15.3.3(next@15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) + version: 15.3.3(next@15.3.3(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) '@sentry/node': specifier: ^5.27.3 version: 5.30.0 @@ -164,7 +164,7 @@ importers: version: 2.3.0 next: specifier: ^15.3.3 - version: 15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 15.3.3(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) node-fetch: specifier: ^2.6.7 version: 2.7.0(encoding@0.1.13) @@ -339,8 +339,8 @@ importers: specifier: ^1.2.3 version: 1.2.3 winamp-eqf: - specifier: ^1.0.0 - version: 1.0.0 + specifier: workspace:* + version: link:../winamp-eqf devDependencies: '@babel/plugin-proposal-class-properties': specifier: ^7.18.6 @@ -580,7 +580,7 @@ importers: version: 5.1.1 jest: specifier: ^28.1.0 - version: 28.1.3(@types/node@20.12.4)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)) + version: 28.1.3(@types/node@24.0.10)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)) puppeteer: specifier: ^14.1.1 version: 14.4.1(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -589,19 +589,28 @@ importers: version: 3.8.8 ts-jest: specifier: ^28.0.2 - version: 28.0.8(@babel/core@7.27.4)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.27.4))(jest@28.1.3(@types/node@20.12.4)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)))(typescript@5.6.3) + version: 28.0.8(@babel/core@7.27.4)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.27.4))(jest@28.1.3(@types/node@24.0.10)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)))(typescript@5.6.3) tsup: specifier: ^4.12.5 - version: 4.14.0(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3))(typescript@5.6.3) + version: 4.14.0(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3))(typescript@5.6.3) typescript: specifier: ^5.3.3 version: 5.6.3 packages/winamp-eqf: devDependencies: + '@types/jest': + specifier: ^30.0.0 + version: 30.0.0 + '@types/node': + specifier: ^24.0.10 + version: 24.0.10 buffer-to-arraybuffer: specifier: 0.0.4 version: 0.0.4 + esbuild: + specifier: ^0.23.0 + version: 0.23.1 typescript: specifier: ^5.3.3 version: 5.6.3 @@ -1984,6 +1993,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.16.3': resolution: {integrity: sha512-RolFVeinkeraDvN/OoRf1F/lP0KUfGNb5jxy/vkIMeRRChkrX/HTYN6TYZosRJs3a1+8wqpxAo5PI5hFmxyPRg==} engines: {node: '>=12'} @@ -2002,6 +2017,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.16.3': resolution: {integrity: sha512-mueuEoh+s1eRbSJqq9KNBQwI4QhQV6sRXIfTyLXSHGMpyew61rOK4qY21uKbXl1iBoMb0AdL1deWFCQVlN2qHA==} engines: {node: '>=12'} @@ -2020,6 +2041,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.16.3': resolution: {integrity: sha512-SFpTUcIT1bIJuCCBMCQWq1bL2gPTjWoLZdjmIhjdcQHaUfV41OQfho6Ici5uvvkMmZRXIUGpM3GxysP/EU7ifQ==} engines: {node: '>=12'} @@ -2038,6 +2065,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.16.3': resolution: {integrity: sha512-DO8WykMyB+N9mIDfI/Hug70Dk1KipavlGAecxS3jDUwAbTpDXj0Lcwzw9svkhxfpCagDmpaTMgxWK8/C/XcXvw==} engines: {node: '>=12'} @@ -2056,6 +2089,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.16.3': resolution: {integrity: sha512-uEqZQ2omc6BvWqdCiyZ5+XmxuHEi1SPzpVxXCSSV2+Sh7sbXbpeNhHIeFrIpRjAs0lI1FmA1iIOxFozKBhKgRQ==} engines: {node: '>=12'} @@ -2074,6 +2113,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.16.3': resolution: {integrity: sha512-nJansp3sSXakNkOD5i5mIz2Is/HjzIhFs49b1tjrPrpCmwgBmH9SSzhC/Z1UqlkivqMYkhfPwMw1dGFUuwmXhw==} engines: {node: '>=12'} @@ -2092,6 +2137,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.16.3': resolution: {integrity: sha512-TfoDzLw+QHfc4a8aKtGSQ96Wa+6eimljjkq9HKR0rHlU83vw8aldMOUSJTUDxbcUdcgnJzPaX8/vGWm7vyV7ug==} engines: {node: '>=12'} @@ -2110,6 +2161,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.16.3': resolution: {integrity: sha512-7I3RlsnxEFCHVZNBLb2w7unamgZ5sVwO0/ikE2GaYvYuUQs9Qte/w7TqWcXHtCwxvZx/2+F97ndiUQAWs47ZfQ==} engines: {node: '>=12'} @@ -2128,6 +2185,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.16.3': resolution: {integrity: sha512-VwswmSYwVAAq6LysV59Fyqk3UIjbhuc6wb3vEcJ7HEJUtFuLK9uXWuFoH1lulEbE4+5GjtHi3MHX+w1gNHdOWQ==} engines: {node: '>=12'} @@ -2146,6 +2209,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.16.3': resolution: {integrity: sha512-X8FDDxM9cqda2rJE+iblQhIMYY49LfvW4kaEjoFbTTQ4Go8G96Smj2w3BRTwA8IHGoi9dPOPGAX63dhuv19UqA==} engines: {node: '>=12'} @@ -2164,6 +2233,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.16.3': resolution: {integrity: sha512-hIbeejCOyO0X9ujfIIOKjBjNAs9XD/YdJ9JXAy1lHA+8UXuOqbFe4ErMCqMr8dhlMGBuvcQYGF7+kO7waj2KHw==} engines: {node: '>=12'} @@ -2182,6 +2257,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.16.3': resolution: {integrity: sha512-znFRzICT/V8VZQMt6rjb21MtAVJv/3dmKRMlohlShrbVXdBuOdDrGb+C2cZGQAR8RFyRe7HS6klmHq103WpmVw==} engines: {node: '>=12'} @@ -2200,6 +2281,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.16.3': resolution: {integrity: sha512-EV7LuEybxhXrVTDpbqWF2yehYRNz5e5p+u3oQUS2+ZFpknyi1NXxr8URk4ykR8Efm7iu04//4sBg249yNOwy5Q==} engines: {node: '>=12'} @@ -2218,6 +2305,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.16.3': resolution: {integrity: sha512-uDxqFOcLzFIJ+r/pkTTSE9lsCEaV/Y6rMlQjUI9BkzASEChYL/aSQjZjchtEmdnVxDKETnUAmsaZ4pqK1eE5BQ==} engines: {node: '>=12'} @@ -2236,6 +2329,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.16.3': resolution: {integrity: sha512-NbeREhzSxYwFhnCAQOQZmajsPYtX71Ufej3IQ8W2Gxskfz9DK58ENEju4SbpIj48VenktRASC52N5Fhyf/aliQ==} engines: {node: '>=12'} @@ -2254,6 +2353,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.16.3': resolution: {integrity: sha512-SDiG0nCixYO9JgpehoKgScwic7vXXndfasjnD5DLbp1xltANzqZ425l7LSdHynt19UWOcDjG9wJJzSElsPvk0w==} engines: {node: '>=12'} @@ -2272,6 +2377,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.16.3': resolution: {integrity: sha512-AzbsJqiHEq1I/tUvOfAzCY15h4/7Ivp3ff/o1GpP16n48JMNAtbW0qui2WCgoIZArEHD0SUQ95gvR0oSO7ZbdA==} engines: {node: '>=12'} @@ -2290,6 +2401,18 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.16.3': resolution: {integrity: sha512-gSABi8qHl8k3Cbi/4toAzHiykuBuWLZs43JomTcXkjMZVkp0gj3gg9mO+9HJW/8GB5H89RX/V0QP4JGL7YEEVg==} engines: {node: '>=12'} @@ -2308,6 +2431,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.16.3': resolution: {integrity: sha512-SF9Kch5Ete4reovvRO6yNjMxrvlfT0F0Flm+NPoUw5Z4Q3r1d23LFTgaLwm3Cp0iGbrU/MoUI+ZqwCv5XJijCw==} engines: {node: '>=12'} @@ -2326,6 +2455,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.16.3': resolution: {integrity: sha512-u5aBonZIyGopAZyOnoPAA6fGsDeHByZ9CnEzyML9NqntK6D/xl5jteZUKm/p6nD09+v3pTM6TuUIqSPcChk5gg==} engines: {node: '>=12'} @@ -2344,6 +2479,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.16.3': resolution: {integrity: sha512-GlgVq1WpvOEhNioh74TKelwla9KDuAaLZrdxuuUgsP2vayxeLgVc+rbpIv0IYF4+tlIzq2vRhofV+KGLD+37EQ==} engines: {node: '>=12'} @@ -2362,6 +2503,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.16.3': resolution: {integrity: sha512-5/JuTd8OWW8UzEtyf19fbrtMJENza+C9JoPIkvItgTBQ1FO2ZLvjbPO6Xs54vk0s5JB5QsfieUEshRQfu7ZHow==} engines: {node: '>=12'} @@ -2380,6 +2527,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6835,6 +6988,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.9.7: resolution: {integrity: sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==} hasBin: true @@ -14086,9 +14244,6 @@ packages: wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - winamp-eqf@1.0.0: - resolution: {integrity: sha512-yUIb4+lTYBKP4L6nPXdDj1CQBXlJ+/PrNAkT1VbTAgeFjX8lPxAthsUE5NxQP4s8SO4YMJemsrErZ49Bh+/Veg==} - winston-transport@4.7.0: resolution: {integrity: sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==} engines: {node: '>= 12.0.0'} @@ -16509,6 +16664,9 @@ snapshots: '@esbuild/aix-ppc64@0.20.2': optional: true + '@esbuild/aix-ppc64@0.23.1': + optional: true + '@esbuild/android-arm64@0.16.3': optional: true @@ -16518,6 +16676,9 @@ snapshots: '@esbuild/android-arm64@0.20.2': optional: true + '@esbuild/android-arm64@0.23.1': + optional: true + '@esbuild/android-arm@0.16.3': optional: true @@ -16527,6 +16688,9 @@ snapshots: '@esbuild/android-arm@0.20.2': optional: true + '@esbuild/android-arm@0.23.1': + optional: true + '@esbuild/android-x64@0.16.3': optional: true @@ -16536,6 +16700,9 @@ snapshots: '@esbuild/android-x64@0.20.2': optional: true + '@esbuild/android-x64@0.23.1': + optional: true + '@esbuild/darwin-arm64@0.16.3': optional: true @@ -16545,6 +16712,9 @@ snapshots: '@esbuild/darwin-arm64@0.20.2': optional: true + '@esbuild/darwin-arm64@0.23.1': + optional: true + '@esbuild/darwin-x64@0.16.3': optional: true @@ -16554,6 +16724,9 @@ snapshots: '@esbuild/darwin-x64@0.20.2': optional: true + '@esbuild/darwin-x64@0.23.1': + optional: true + '@esbuild/freebsd-arm64@0.16.3': optional: true @@ -16563,6 +16736,9 @@ snapshots: '@esbuild/freebsd-arm64@0.20.2': optional: true + '@esbuild/freebsd-arm64@0.23.1': + optional: true + '@esbuild/freebsd-x64@0.16.3': optional: true @@ -16572,6 +16748,9 @@ snapshots: '@esbuild/freebsd-x64@0.20.2': optional: true + '@esbuild/freebsd-x64@0.23.1': + optional: true + '@esbuild/linux-arm64@0.16.3': optional: true @@ -16581,6 +16760,9 @@ snapshots: '@esbuild/linux-arm64@0.20.2': optional: true + '@esbuild/linux-arm64@0.23.1': + optional: true + '@esbuild/linux-arm@0.16.3': optional: true @@ -16590,6 +16772,9 @@ snapshots: '@esbuild/linux-arm@0.20.2': optional: true + '@esbuild/linux-arm@0.23.1': + optional: true + '@esbuild/linux-ia32@0.16.3': optional: true @@ -16599,6 +16784,9 @@ snapshots: '@esbuild/linux-ia32@0.20.2': optional: true + '@esbuild/linux-ia32@0.23.1': + optional: true + '@esbuild/linux-loong64@0.16.3': optional: true @@ -16608,6 +16796,9 @@ snapshots: '@esbuild/linux-loong64@0.20.2': optional: true + '@esbuild/linux-loong64@0.23.1': + optional: true + '@esbuild/linux-mips64el@0.16.3': optional: true @@ -16617,6 +16808,9 @@ snapshots: '@esbuild/linux-mips64el@0.20.2': optional: true + '@esbuild/linux-mips64el@0.23.1': + optional: true + '@esbuild/linux-ppc64@0.16.3': optional: true @@ -16626,6 +16820,9 @@ snapshots: '@esbuild/linux-ppc64@0.20.2': optional: true + '@esbuild/linux-ppc64@0.23.1': + optional: true + '@esbuild/linux-riscv64@0.16.3': optional: true @@ -16635,6 +16832,9 @@ snapshots: '@esbuild/linux-riscv64@0.20.2': optional: true + '@esbuild/linux-riscv64@0.23.1': + optional: true + '@esbuild/linux-s390x@0.16.3': optional: true @@ -16644,6 +16844,9 @@ snapshots: '@esbuild/linux-s390x@0.20.2': optional: true + '@esbuild/linux-s390x@0.23.1': + optional: true + '@esbuild/linux-x64@0.16.3': optional: true @@ -16653,6 +16856,9 @@ snapshots: '@esbuild/linux-x64@0.20.2': optional: true + '@esbuild/linux-x64@0.23.1': + optional: true + '@esbuild/netbsd-x64@0.16.3': optional: true @@ -16662,6 +16868,12 @@ snapshots: '@esbuild/netbsd-x64@0.20.2': optional: true + '@esbuild/netbsd-x64@0.23.1': + optional: true + + '@esbuild/openbsd-arm64@0.23.1': + optional: true + '@esbuild/openbsd-x64@0.16.3': optional: true @@ -16671,6 +16883,9 @@ snapshots: '@esbuild/openbsd-x64@0.20.2': optional: true + '@esbuild/openbsd-x64@0.23.1': + optional: true + '@esbuild/sunos-x64@0.16.3': optional: true @@ -16680,6 +16895,9 @@ snapshots: '@esbuild/sunos-x64@0.20.2': optional: true + '@esbuild/sunos-x64@0.23.1': + optional: true + '@esbuild/win32-arm64@0.16.3': optional: true @@ -16689,6 +16907,9 @@ snapshots: '@esbuild/win32-arm64@0.20.2': optional: true + '@esbuild/win32-arm64@0.23.1': + optional: true + '@esbuild/win32-ia32@0.16.3': optional: true @@ -16698,6 +16919,9 @@ snapshots: '@esbuild/win32-ia32@0.20.2': optional: true + '@esbuild/win32-ia32@0.23.1': + optional: true + '@esbuild/win32-x64@0.16.3': optional: true @@ -16707,6 +16931,9 @@ snapshots: '@esbuild/win32-x64@0.20.2': optional: true + '@esbuild/win32-x64@0.23.1': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@7.32.0)': dependencies: eslint: 7.32.0 @@ -16951,21 +17178,21 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@28.1.3(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3))': + '@jest/core@28.1.3(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3))': dependencies: '@jest/console': 28.1.3 '@jest/reporters': 28.1.3 '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 20.12.4 + '@types/node': 24.0.10 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 28.1.3 - jest-config: 28.1.3(@types/node@20.12.4)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)) + jest-config: 28.1.3(@types/node@24.0.10)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)) jest-haste-map: 28.1.3 jest-message-util: 28.1.3 jest-regex-util: 28.0.2 @@ -17265,7 +17492,7 @@ snapshots: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.4 + '@types/node': 24.0.10 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -17506,9 +17733,9 @@ snapshots: '@next/swc-win32-x64-msvc@15.3.3': optional: true - '@next/third-parties@15.3.3(next@15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': + '@next/third-parties@15.3.3(next@15.3.3(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': dependencies: - next: 15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.3.3(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 third-party-capital: 1.0.20 @@ -17647,15 +17874,13 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.15) '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/logger': 2.12.0 '@parcel/utils': 2.12.0 lmdb: 2.8.5 - transitivePeerDependencies: - - '@swc/helpers' '@parcel/cache@2.7.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: @@ -17727,7 +17952,7 @@ snapshots: '@parcel/core@2.12.0(@swc/helpers@0.5.15)': dependencies: '@mischnic/json-sourcemap': 0.1.1 - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/diagnostic': 2.12.0 '@parcel/events': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) @@ -18216,7 +18441,7 @@ snapshots: '@parcel/types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': dependencies: - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/diagnostic': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) @@ -19039,7 +19264,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.12.4 + '@types/node': 24.0.10 '@types/graceful-fs@4.1.9': dependencies: @@ -19277,7 +19502,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.12.4 + '@types/node': 24.0.10 optional: true '@types/yoga-layout@1.9.2': {} @@ -22409,6 +22634,33 @@ snapshots: '@esbuild/win32-ia32': 0.20.2 '@esbuild/win32-x64': 0.20.2 + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + esbuild@0.9.7: {} escalade@3.2.0: {} @@ -22924,7 +23176,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 20.12.4 + '@types/node': 24.0.10 require-like: 0.1.2 event-emitter@0.3.5: @@ -24988,16 +25240,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@28.1.3(@types/node@20.12.4)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)): + jest-cli@28.1.3(@types/node@24.0.10)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)): dependencies: - '@jest/core': 28.1.3(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)) + '@jest/core': 28.1.3(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)) '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 28.1.3(@types/node@20.12.4)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)) + jest-config: 28.1.3(@types/node@24.0.10)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)) jest-util: 28.1.3 jest-validate: 28.1.3 prompts: 2.4.2 @@ -25026,7 +25278,7 @@ snapshots: - supports-color - ts-node - jest-config@28.1.3(@types/node@20.12.4)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)): + jest-config@28.1.3(@types/node@24.0.10)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)): dependencies: '@babel/core': 7.27.4 '@jest/test-sequencer': 28.1.3 @@ -25051,8 +25303,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.12.4 - ts-node: 10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3) + '@types/node': 24.0.10 + ts-node: 10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3) transitivePeerDependencies: - supports-color @@ -25562,7 +25814,7 @@ snapshots: jest-util@28.1.3: dependencies: '@jest/types': 28.1.3 - '@types/node': 20.12.4 + '@types/node': 24.0.10 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -25645,12 +25897,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@28.1.3(@types/node@20.12.4)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)): + jest@28.1.3(@types/node@24.0.10)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)): dependencies: - '@jest/core': 28.1.3(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)) + '@jest/core': 28.1.3(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)) '@jest/types': 28.1.3 import-local: 3.1.0 - jest-cli: 28.1.3(@types/node@20.12.4)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)) + jest-cli: 28.1.3(@types/node@24.0.10)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)) transitivePeerDependencies: - '@types/node' - supports-color @@ -27382,7 +27634,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.3.3(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@next/env': 15.3.3 '@swc/counter': 0.1.3 @@ -27392,7 +27644,7 @@ snapshots: postcss: 8.4.31 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(react@19.1.0) + styled-jsx: 5.1.6(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react@19.1.0) optionalDependencies: '@next/swc-darwin-arm64': 15.3.3 '@next/swc-darwin-x64': 15.3.3 @@ -28395,14 +28647,6 @@ snapshots: '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 - postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)): - dependencies: - lilconfig: 2.1.0 - yaml: 1.10.2 - optionalDependencies: - postcss: 8.5.6 - ts-node: 10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3) - postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)): dependencies: lilconfig: 2.1.0 @@ -30684,10 +30928,13 @@ snapshots: '@babel/core': 7.27.4 babel-plugin-macros: 3.1.0 - styled-jsx@5.1.6(react@19.1.0): + styled-jsx@5.1.6(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react@19.1.0): dependencies: client-only: 0.0.1 react: 19.1.0 + optionalDependencies: + '@babel/core': 7.27.4 + babel-plugin-macros: 3.1.0 stylehacks@5.1.1(postcss@8.5.6): dependencies: @@ -31000,11 +31247,11 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@28.0.8(@babel/core@7.27.4)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.27.4))(jest@28.1.3(@types/node@20.12.4)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)))(typescript@5.6.3): + ts-jest@28.0.8(@babel/core@7.27.4)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.27.4))(jest@28.1.3(@types/node@24.0.10)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)))(typescript@5.6.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 28.1.3(@types/node@20.12.4)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)) + jest: 28.1.3(@types/node@24.0.10)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)) jest-util: 28.1.3 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -31063,27 +31310,6 @@ snapshots: '@swc/core': 1.4.12(@swc/helpers@0.5.15) optional: true - ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.4 - acorn: 8.15.0 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.6.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.4.12(@swc/helpers@0.5.15) - optional: true - ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -31125,7 +31351,7 @@ snapshots: tsscmp@1.0.6: {} - tsup@4.14.0(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3))(typescript@5.6.3): + tsup@4.14.0(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3))(typescript@5.6.3): dependencies: cac: 6.7.14 chalk: 4.1.2 @@ -31135,7 +31361,7 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@20.12.4)(typescript@5.6.3)) + postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.4.12(@swc/helpers@0.5.15))(@types/node@24.0.10)(typescript@5.6.3)) resolve-from: 5.0.0 rollup: 2.79.1 sucrase: 3.35.0 @@ -31910,8 +32136,6 @@ snapshots: wildcard@2.0.1: {} - winamp-eqf@1.0.0: {} - winston-transport@4.7.0: dependencies: logform: 2.6.0