Type winamp-eqf

This commit is contained in:
Jordan Eldredge 2025-07-06 17:17:55 -07:00
parent f2fd00b65b
commit dbf54596e4
19 changed files with 661 additions and 98 deletions

View file

@ -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

View file

@ -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"
}
}
```

View file

@ -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}'"
},

View file

@ -10,10 +10,12 @@ module.exports = {
"\\.css$": "<rootDir>/js/__mocks__/styleMock.js",
"\\.wsz$": "<rootDir>/js/__mocks__/fileMock.js",
"\\.mp3$": "<rootDir>/js/__mocks__/fileMock.js",
"^winamp-eqf$": "<rootDir>/../winamp-eqf/built/index.js",
},
transform: {
"^.+\\.(t|j)sx?$": ["@swc/jest"],
},
extensionsToTreatAsEsm: [".ts", ".tsx"],
testPathIgnorePatterns: ["/node_modules/"],
testEnvironment: "jsdom",
};

View file

@ -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",

View file

@ -1,4 +0,0 @@
declare module "winamp-eqf" {
import { parser, creator } from "winamp-eqf";
export { parser, creator };
}

View file

@ -155,6 +155,6 @@
"reselect": "^3.0.1",
"strtok3": "^10.3.1",
"tinyqueue": "^1.2.3",
"winamp-eqf": "^1.0.0"
"winamp-eqf": "workspace:*"
}
}

View file

@ -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);

23
packages/winamp-eqf/.gitignore vendored Normal file
View file

@ -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

View file

@ -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`

View file

@ -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"
}

View file

@ -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];

View file

@ -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); // <ctrl-z>
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;
}

View file

@ -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<R> {
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);
});
});

View file

@ -0,0 +1,4 @@
export { parser } from "./parser.js";
export { creator } from "./creator.js";
export * from "./types.js";
export * from "./constants.js";

View file

@ -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 "<ctrl-z>!--"
i += 4;
// Get the presets
while (i < arr.length) {
const preset: Partial<EqfPreset> = {};
// 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;
}

View file

@ -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;
}
>;
}

View file

@ -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"
]
}

368
pnpm-lock.yaml generated
View file

@ -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