From f386f506129429f2adc1ec771ba96df28f826c76 Mon Sep 17 00:00:00 2001 From: tamarafinogina Date: Thu, 22 Jan 2026 11:13:35 +0100 Subject: [PATCH 1/2] remove keystore api --- src/index.ts | 1 - src/keystore-service/api.ts | 135 -------------- src/keystore-service/index.ts | 1 - tests/keystore-crypto/keyService.test.ts | 133 -------------- tests/keystore-service/api.test.ts | 213 ----------------------- 5 files changed, 483 deletions(-) delete mode 100644 src/keystore-service/api.ts delete mode 100644 src/keystore-service/index.ts delete mode 100644 tests/keystore-crypto/keyService.test.ts delete mode 100644 tests/keystore-service/api.test.ts diff --git a/src/index.ts b/src/index.ts index 55fcfc6..67ca621 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,7 +5,6 @@ export * as emailSearch from './email-search'; export * as hash from './hash'; export * as keyWrapper from './key-wrapper'; export * as keystoreCrypto from './keystore-crypto'; -export * as keystoreService from './keystore-service'; export * as pq from './post-quantum-crypto'; export * as storage from './storage-service'; export * as symmetric from './symmetric-crypto'; diff --git a/src/keystore-service/api.ts b/src/keystore-service/api.ts deleted file mode 100644 index d0f8cb6..0000000 --- a/src/keystore-service/api.ts +++ /dev/null @@ -1,135 +0,0 @@ -import axios, { AxiosResponse, AxiosError } from 'axios'; -import { KeystoreType, EncryptedKeystore, PublicKeys, PublicKeysBase64 } from '../types'; -import { base64ToPublicKey } from '../utils'; - -export class KeyServiceAPI { - private readonly baseUrl: string; - - constructor(baseUrl: string) { - this.baseUrl = baseUrl; - } - - /** - * Converts the specific client error into a proprietary error for our apps - * @param error - * @private - */ - private normalizeError(error: AxiosError) { - let errorMessage: string; - if (error.response?.status === 401) { - errorMessage = 'Unauthorized: Invalid or expired token'; - } else if (error.response?.status === 403) { - errorMessage = 'Forbidden: Insufficient permissions'; - } else if (error.response?.status === 404) { - errorMessage = 'Keystore not found for the specified user'; - } else { - errorMessage = 'AxiosError:' + (error.message ?? 'Unknown error'); - } - - throw new Error(errorMessage); - } - - /** - * Sends a user's encrypted keystore to the server - * @param keystore - The encrypted keystore - * @param url - The user specific part of the url - * @returns Server response - */ - async uploadKeystoreToServer(encryptedKeystore: EncryptedKeystore): Promise { - try { - const url = `${this.baseUrl}/uploadKeystore`; - const response = await axios.post( - url, - { encryptedKeystore }, - { - withCredentials: true, - headers: { - 'Content-Type': 'application/json', - }, - }, - ); - return response; - } catch (error) { - if (axios.isAxiosError(error)) { - this.normalizeError(error); - } - throw new Error('Failed to send keystore', { cause: error }); - } - } - - /** - * Requests a user's encrypted keystore from the server - * @param url - The user-specific part of the url - * @returns The user's encrypted keystore as base64 string - */ - async getKeystoreFromServer(userID: string, keystoreType: KeystoreType): Promise { - try { - const url = `${this.baseUrl}/downloadKeystore`; - const response = await axios.get(url, { - params: { userID, keystoreType }, - withCredentials: true, - headers: { - 'Content-Type': 'application/json', - }, - }); - return response.data; - } catch (error) { - if (axios.isAxiosError(error)) { - this.normalizeError(error); - } - - throw new Error('Failed to retrive keystore', { cause: error }); - } - } - - /** - * Obtains recipients public keys from the server - * - * @param emails - The recipients' emails - * @returns The list of recipients' public keys - */ - async getRecipientsPublicKeysFromServer(emails: string[]): Promise { - try { - const url = `${this.baseUrl}/getPublicKeys`; - const response = await axios.get(url, { - params: { - emails: emails, - }, - withCredentials: true, - headers: { - 'Content-Type': 'application/json', - }, - }); - return response.data; - } catch (error) { - if (axios.isAxiosError(error)) { - this.normalizeError(error); - } - throw new Error('Failed to retrieve public keys', { cause: error }); - } - } - - /** - * Obtains the recipient public keys from the server - * - * @param email - The recipients' emails - * @returns The list of recipients' public keys - */ - async getRecipientsPublicKeys(emails: string[]): Promise { - try { - const publicKeysBase64: PublicKeysBase64[] = await this.getRecipientsPublicKeysFromServer(emails); - const result: PublicKeys[] = []; - for (const keyBase64 of publicKeysBase64) { - const publicKeys = await base64ToPublicKey(keyBase64); - result.push(publicKeys); - } - return result; - } catch (error) { - throw new Error('Failed to get recipients public keys', { cause: error }); - } - } -} - -export function getKeyServiceAPI(baseUrl: string): KeyServiceAPI { - return new KeyServiceAPI(baseUrl); -} diff --git a/src/keystore-service/index.ts b/src/keystore-service/index.ts deleted file mode 100644 index b1c13e7..0000000 --- a/src/keystore-service/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './api'; diff --git a/tests/keystore-crypto/keyService.test.ts b/tests/keystore-crypto/keyService.test.ts deleted file mode 100644 index 1d532e4..0000000 --- a/tests/keystore-crypto/keyService.test.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { describe, it, expect, vi, beforeEach } from 'vitest'; -import axios from 'axios'; -import { publicKeyToBase64 } from '../../src/utils'; -import { PublicKeys } from '../../src/types'; -import { generateEccKeys } from '../../src/asymmetric-crypto'; -import { generateKyberKeys } from '../../src/post-quantum-crypto'; -import { getKeyServiceAPI } from '../../src/keystore-service'; - -vi.mock('axios'); - -describe('Test key service functions', async () => { - beforeEach(() => { - vi.clearAllMocks(); - }); - - const mockEmail = 'user-email'; - const eccKeyPair = await generateEccKeys(); - const kyberKeyPair = generateKyberKeys(); - const keyService = getKeyServiceAPI('/api'); - - const pk: PublicKeys = { - eccPublicKey: eccKeyPair.publicKey, - kyberPublicKey: kyberKeyPair.publicKey, - }; - - const pkBase64 = await publicKeyToBase64(pk); - - it('should successfully return recipient public keys with valid parameters', async () => { - const mockResponse = { - data: [pkBase64], - status: 200, - statusText: 'OK', - headers: {}, - config: {}, - }; - - vi.mocked(axios.get).mockResolvedValue(mockResponse); - - const result = await keyService.getRecipientsPublicKeys([mockEmail]); - - expect(axios.get).toHaveBeenCalledWith('/api/getPublicKeys', { - params: { - emails: [mockEmail], - }, - withCredentials: true, - headers: { - 'Content-Type': 'application/json', - }, - }); - - expect(result).toStrictEqual([pk]); - }); - - it('should handle 401 unauthorized error', async () => { - const unauthorizedError = { - isAxiosError: true, - response: { - status: 401, - data: { message: 'Unauthorized' }, - }, - }; - - vi.mocked(axios.get).mockRejectedValueOnce(unauthorizedError); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(keyService.getRecipientsPublicKeys([mockEmail])).rejects.toThrow( - 'Failed to get recipients public keys', - ); - }); - - it('should handle 403 forbidden error', async () => { - const forbiddenError = { - isAxiosError: true, - response: { - status: 403, - data: { message: 'Forbidden' }, - }, - }; - - vi.mocked(axios.get).mockRejectedValueOnce(forbiddenError); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(keyService.getRecipientsPublicKeys([mockEmail])).rejects.toThrow( - 'Failed to get recipients public keys', - ); - }); - - it('should handle 404 not found error', async () => { - const notFoundError = { - isAxiosError: true, - response: { - status: 404, - data: { message: 'Not Found' }, - }, - }; - - vi.mocked(axios.get).mockRejectedValueOnce(notFoundError); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(keyService.getRecipientsPublicKeys([mockEmail])).rejects.toThrow( - 'Failed to get recipients public keys', - ); - }); - - it('should handle network errors', async () => { - const networkError = new Error('Network Error'); - vi.mocked(axios.get).mockRejectedValueOnce(networkError); - - await expect(keyService.getRecipientsPublicKeys([mockEmail])).rejects.toThrow( - 'Failed to get recipients public keys', - ); - }); - - it('should handle axios errors with an empty response', async () => { - const errorWithoutResponce = { - isAxiosError: true, - }; - - vi.mocked(axios.get).mockRejectedValueOnce(errorWithoutResponce); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(keyService.getRecipientsPublicKeys([mockEmail])).rejects.toThrow( - 'Failed to get recipients public keys', - ); - }); - - it('should handle non-Error thrown values', async () => { - vi.mocked(axios.get).mockRejectedValueOnce('Something went wrong'); - await expect(keyService.getRecipientsPublicKeys([mockEmail])).rejects.toThrowError( - /Failed to get recipients public keys/, - ); - }); -}); diff --git a/tests/keystore-service/api.test.ts b/tests/keystore-service/api.test.ts deleted file mode 100644 index 85db35e..0000000 --- a/tests/keystore-service/api.test.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { describe, it, expect, vi, beforeEach } from 'vitest'; -import axios from 'axios'; -import { KeystoreType, EncryptedKeystore } from '../../src/types'; -import { getKeyServiceAPI } from '../../src/keystore-service'; - -vi.mock('axios'); - -describe('Test keystore send/get functions', () => { - beforeEach(() => { - vi.clearAllMocks(); - }); - - const mockUserEmail = 'mock email'; - const mockType = KeystoreType.ENCRYPTION; - const mockEncryptedKeys = { - publicKeys: { - eccPublicKeyBase64: 'mock ecc public key base64', - kyberPublicKeyBase64: 'mock kyber public key base64', - }, - privateKeys: { - eccPrivateKeyBase64: 'mock ecc private key base64', - kyberPrivateKeyBase64: 'mock kyber private key base64', - }, - }; - - const mockEncryptedKeystore: EncryptedKeystore = { - userEmail: mockUserEmail, - encryptedKeys: mockEncryptedKeys, - type: mockType, - }; - const service = getKeyServiceAPI('test-base-url'); - - describe('sendKeystore', () => { - const url = 'test-base-url/uploadKeystore'; - - it('should successfully send keystore with valid parameters', async () => { - const mockResponse = { - data: { success: true, message: 'Keystore uploaded successfully' }, - status: 200, - statusText: 'OK', - headers: {}, - config: {}, - }; - - vi.mocked(axios.post).mockResolvedValue(mockResponse); - - const result = await service.uploadKeystoreToServer(mockEncryptedKeystore); - - expect(axios.post).toHaveBeenCalledWith( - url, - { - encryptedKeystore: mockEncryptedKeystore, - }, - { - withCredentials: true, - headers: { - 'Content-Type': 'application/json', - }, - }, - ); - expect(result).toEqual(mockResponse); - }); - - it('should handle 401 unauthorized error', async () => { - const unauthorizedError = { - isAxiosError: true, - response: { - status: 401, - data: { message: 'Unauthorized' }, - }, - }; - - vi.mocked(axios.post).mockRejectedValueOnce(unauthorizedError); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(service.uploadKeystoreToServer(mockEncryptedKeystore)).rejects.toThrow( - 'Unauthorized: Invalid or expired token', - ); - }); - - it('should handle 403 forbidden error', async () => { - const forbiddenError = { - isAxiosError: true, - response: { - status: 403, - data: { message: 'Forbidden' }, - }, - }; - - vi.mocked(axios.post).mockRejectedValueOnce(forbiddenError); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(service.uploadKeystoreToServer(mockEncryptedKeystore)).rejects.toThrow( - 'Forbidden: Insufficient permissions', - ); - }); - - it('should handle network errors', async () => { - const networkError = new Error('Network Error'); - vi.mocked(axios.post).mockRejectedValueOnce(networkError); - - await expect(service.uploadKeystoreToServer(mockEncryptedKeystore)).rejects.toThrow(/Failed to send keystore/); - }); - it('should handle axios errors with an empty response', async () => { - const errorWithNoResponse = { - isAxiosError: true, - }; - - vi.mocked(axios.post).mockRejectedValueOnce(errorWithNoResponse); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(service.uploadKeystoreToServer(mockEncryptedKeystore)).rejects.toThrow(/AxiosError/); - }); - }); - - describe('getKeystore', () => { - const url = '/downloadKeystore'; - - it('should successfully retrieve keystore with valid parameters', async () => { - const mockResponse = { - data: mockEncryptedKeystore, - status: 200, - statusText: 'OK', - headers: {}, - config: {}, - }; - - vi.mocked(axios.get).mockResolvedValueOnce(mockResponse); - - const result = await service.getKeystoreFromServer(mockUserEmail, mockType); - - expect(axios.get).toHaveBeenCalledWith('test-base-url' + url, { - withCredentials: true, - params: { userID: mockUserEmail, keystoreType: mockType }, - headers: { - 'Content-Type': 'application/json', - }, - }); - expect(result).toEqual(mockEncryptedKeystore); - }); - - it('should handle 401 unauthorized error', async () => { - const unauthorizedError = { - isAxiosError: true, - response: { - status: 401, - data: { message: 'Unauthorized' }, - }, - }; - - vi.mocked(axios.get).mockRejectedValueOnce(unauthorizedError); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(service.getKeystoreFromServer(mockUserEmail, mockType)).rejects.toThrow( - 'Unauthorized: Invalid or expired token', - ); - }); - - it('should handle 403 forbidden error', async () => { - const forbiddenError = { - isAxiosError: true, - response: { - status: 403, - data: { message: 'Forbidden' }, - }, - }; - - vi.mocked(axios.get).mockRejectedValueOnce(forbiddenError); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(service.getKeystoreFromServer(mockUserEmail, mockType)).rejects.toThrow( - 'Forbidden: Insufficient permissions', - ); - }); - - it('should handle 404 not found error', async () => { - const notFoundError = { - isAxiosError: true, - response: { - status: 404, - data: { message: 'Not Found' }, - }, - }; - - vi.mocked(axios.get).mockRejectedValueOnce(notFoundError); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(service.getKeystoreFromServer(mockUserEmail, mockType)).rejects.toThrow( - 'Keystore not found for the specified user', - ); - }); - - it('should handle network errors', async () => { - const networkError = new Error('Network Error'); - vi.mocked(axios.get).mockRejectedValueOnce(networkError); - - await expect(service.getKeystoreFromServer(mockUserEmail, mockType)).rejects.toThrow( - /Failed to retrive keystore/, - ); - }); - - it('should handle axios errors with an empty response', async () => { - const errorWithoutResponce = { - isAxiosError: true, - }; - - vi.mocked(axios.get).mockRejectedValueOnce(errorWithoutResponce); - vi.mocked(axios.isAxiosError).mockReturnValueOnce(true); - - await expect(service.getKeystoreFromServer(mockUserEmail, mockType)).rejects.toThrow(/AxiosError/); - }); - }); -}); From 14f7cab56eec65ba16913acd6f4fd1056e65d69f Mon Sep 17 00:00:00 2001 From: tamarafinogina Date: Thu, 22 Jan 2026 11:24:25 +0100 Subject: [PATCH 2/2] do clean up with knip --- package.json | 10 +- yarn.lock | 440 +++++++++++++++++++++++++++------------------------ 2 files changed, 237 insertions(+), 213 deletions(-) diff --git a/package.json b/package.json index 19d3f4f..25b1db8 100644 --- a/package.json +++ b/package.json @@ -17,18 +17,16 @@ "test:coverage": "vitest run --coverage", "format": "prettier \"{src,tests}/**/*.{ts,tsx}\" --write", "lint:ts": "eslint \"./{src,tests}/**/*.{ts,tsx}\"", - "lint:fix": "yarn run lint:ts --fix" + "lint:fix": "yarn run lint:ts --fix", + "unused": "knip" }, "devDependencies": { "@internxt/eslint-config-internxt": "2.0.1", "@internxt/prettier-config": "https://github.com/internxt/prettier-config.git#v1.0.2", - "@types/flexsearch": "^0.7.42", - "@vitest/browser": "^4.0.10", "@vitest/browser-playwright": "^4.0.10", "@vitest/coverage-istanbul": "^4.0.10", "eslint": "^9.34.0", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", + "knip": "^5.82.1", "lint-staged": "^16.1.4", "playwright": "^1.54.1", "prettier": "^3.6.2", @@ -37,11 +35,9 @@ "vitest": "^4.0.0" }, "dependencies": { - "@emailjs/browser": "^4.4.1", "@noble/hashes": "^2.0.1", "@noble/post-quantum": "^0.5.2", "@scure/bip39": "^2.0.1", - "axios": "^1.11.0", "flexsearch": "^0.8.205", "hash-wasm": "^4.12.0", "husky": "^9.1.7", diff --git a/yarn.lock b/yarn.lock index ddfe2b8..c873da9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -141,10 +141,27 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@emailjs/browser@^4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@emailjs/browser/-/browser-4.4.1.tgz#ad5684af5a912c0ab415202184845eb3270c4c81" - integrity sha512-DGSlP9sPvyFba3to2A50kDtZ+pXVp/0rhmqs2LmbMS3I5J8FSOgLwzY2Xb4qfKlOVHh29EAutLYwe5yuEZmEFg== +"@emnapi/core@^1.7.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.8.1.tgz#fd9efe721a616288345ffee17a1f26ac5dd01349" + integrity sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg== + dependencies: + "@emnapi/wasi-threads" "1.1.0" + tslib "^2.4.0" + +"@emnapi/runtime@^1.7.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.8.1.tgz#550fa7e3c0d49c5fb175a116e8cd70614f9a22a5" + integrity sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf" + integrity sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ== + dependencies: + tslib "^2.4.0" "@esbuild/aix-ppc64@0.25.12": version "0.25.12" @@ -418,6 +435,15 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@napi-rs/wasm-runtime@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz#c3705ab549d176b8dc5172723d6156c3dc426af2" + integrity sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A== + dependencies: + "@emnapi/core" "^1.7.1" + "@emnapi/runtime" "^1.7.1" + "@tybys/wasm-util" "^0.10.1" + "@noble/curves@~2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-2.0.1.tgz#64ba8bd5e8564a02942655602515646df1cdb3ad" @@ -459,10 +485,107 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@pkgr/core@^0.2.9": - version "0.2.9" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" - integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== +"@oxc-resolver/binding-android-arm-eabi@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.16.3.tgz#536ad397111ac45b95327a437973aec68da31c0b" + integrity sha512-CVyWHu6ACDqDcJxR4nmGiG8vDF4TISJHqRNzac5z/gPQycs/QrP/1pDsJBy0MD7jSw8nVq2E5WqeHQKabBG/Jg== + +"@oxc-resolver/binding-android-arm64@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.16.3.tgz#19a9c43aafad93e2121263ffa87e6664b1b0a9f5" + integrity sha512-tTIoB7plLeh2o6Ay7NnV5CJb6QUXdxI7Shnsp2ECrLSV81k+oVE3WXYrQSh4ltWL75i0OgU5Bj3bsuyg5SMepw== + +"@oxc-resolver/binding-darwin-arm64@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.16.3.tgz#14f90192349cfee3b5107cdd214fdf17746d6119" + integrity sha512-OXKVH7uwYd3Rbw1s2yJZd6/w+6b01iaokZubYhDAq4tOYArr+YCS+lr81q1hsTPPRZeIsWE+rJLulmf1qHdYZA== + +"@oxc-resolver/binding-darwin-x64@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.16.3.tgz#890da8ec9c95e09c4647d135ced9da63e814f1a6" + integrity sha512-WwjQ4WdnCxVYZYd3e3oY5XbV3JeLy9pPMK+eQQ2m8DtqUtbxnvPpAYC2Knv/2bS6q5JiktqOVJ2Hfia3OSo0/A== + +"@oxc-resolver/binding-freebsd-x64@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.16.3.tgz#260ee462b9466219190cf7fb62c22ebba136b079" + integrity sha512-4OHKFGJBBfOnuJnelbCS4eBorI6cj54FUxcZJwEXPeoLc8yzORBoJ2w+fQbwjlQcUUZLEg92uGhKCRiUoqznjg== + +"@oxc-resolver/binding-linux-arm-gnueabihf@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.16.3.tgz#89b32eaf88eda78f79e9f3f974e64e0d90dabfe5" + integrity sha512-OM3W0NLt9u7uKwG/yZbeXABansZC0oZeDF1nKgvcZoRw4/Yak6/l4S0onBfDFeYMY94eYeAt2bl60e30lgsb5A== + +"@oxc-resolver/binding-linux-arm-musleabihf@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.16.3.tgz#d099644276c0651d4af127f7e73a3b38634bfe64" + integrity sha512-MRs7D7i1t7ACsAdTuP81gLZES918EpBmiUyEl8fu302yQB+4L7L7z0Ui8BWnthUTQd3nAU9dXvENLK/SqRVH8A== + +"@oxc-resolver/binding-linux-arm64-gnu@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.16.3.tgz#8643f63382345c7fb6927b4965362567fae869c3" + integrity sha512-0eVYZxSceNqGADzhlV4ZRqkHF0fjWxRXQOB7Qwl5y1gN/XYUDvMfip+ngtzj4dM7zQT4U97hUhJ7PUKSy/JIGQ== + +"@oxc-resolver/binding-linux-arm64-musl@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.16.3.tgz#1436757f6b802180173743941d2332d575c34387" + integrity sha512-B1BvLeZbgDdVN0FvU40l5Q7lej8310WlabCBaouk8jY7H7xbI8phtomTtk3Efmevgfy5hImaQJu6++OmcFb2NQ== + +"@oxc-resolver/binding-linux-ppc64-gnu@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.16.3.tgz#73dad74401544058b82c5ef69ff5bb04019cc2cc" + integrity sha512-q7khglic3Jqak7uDgA3MFnjDeI7krQT595GDZpvFq785fmFYSx8rlTkoHzmhQtUisYtl4XG7WUscwsoidFUI4w== + +"@oxc-resolver/binding-linux-riscv64-gnu@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.16.3.tgz#82e13b33295dcfa3cbb786d6517dfa13e46c513d" + integrity sha512-aFRNmQNPzDgQEbw2s3c8yJYRimacSDI+u9df8rn5nSKzTVitHmbEpZqfxpwNLCKIuLSNmozHR1z1OT+oZVeYqg== + +"@oxc-resolver/binding-linux-riscv64-musl@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.16.3.tgz#5b511719119f4d59e473329d9f618d4c617384d4" + integrity sha512-vZI85SvSMADcEL9G1TIrV0Rlkc1fY5Mup0DdlVC5EHPysZB4hXXHpr+h09pjlK5y+5om5foIzDRxE1baUCaWOA== + +"@oxc-resolver/binding-linux-s390x-gnu@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.16.3.tgz#c8b20ba45c6bc4fa8c41fb67b6a6f274a49423cf" + integrity sha512-xiLBnaUlddFEzRHiHiSGEMbkg8EwZY6VD8F+3GfnFsiK3xg/4boaUV2bwXd+nUzl3UDQOMW1QcZJ4jJSb0qiJA== + +"@oxc-resolver/binding-linux-x64-gnu@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.16.3.tgz#9eb948696848a97bdafe7d70264ac07ff0baaa61" + integrity sha512-6y0b05wIazJJgwu7yU/AYGFswzQQudYJBOb/otDhiDacp1+6ye8egoxx63iVo9lSpDbipL++54AJQFlcOHCB+g== + +"@oxc-resolver/binding-linux-x64-musl@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.16.3.tgz#ab7e588b752dfbd6d29df8ca3ff6278c6d8487c3" + integrity sha512-RmMgwuMa42c9logS7Pjprf5KCp8J1a1bFiuBFtG9/+yMu0BhY2t+0VR/um7pwtkNFvIQqAVh6gDOg/PnoKRcdQ== + +"@oxc-resolver/binding-openharmony-arm64@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-openharmony-arm64/-/binding-openharmony-arm64-11.16.3.tgz#0995907ca0d11648bad7115aaad8fea7f5ab0c14" + integrity sha512-/7AYRkjjW7xu1nrHgWUFy99Duj4/ydOBVaHtODie9/M6fFngo+8uQDFFnzmr4q//sd/cchIerISp/8CQ5TsqIA== + +"@oxc-resolver/binding-wasm32-wasi@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.16.3.tgz#070aed480e966182576355d9471d6872c15c0d84" + integrity sha512-urM6aIPbi5di4BSlnpd/TWtDJgG6RD06HvLBuNM+qOYuFtY1/xPbzQ2LanBI2ycpqIoIZwsChyplALwAMdyfCQ== + dependencies: + "@napi-rs/wasm-runtime" "^1.1.1" + +"@oxc-resolver/binding-win32-arm64-msvc@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.16.3.tgz#aca846d2ca636c00b8a03c573a8f35c712e6acec" + integrity sha512-QuvLqGKf7frxWHQ5TnrcY0C/hJpANsaez99Q4dAk1hen7lDTD4FBPtBzPnntLFXeaVG3PnSmnVjlv0vMILwU7Q== + +"@oxc-resolver/binding-win32-ia32-msvc@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.16.3.tgz#77a0e7d920511d23214b1bb3f67ed6524b0489c2" + integrity sha512-QR/witXK6BmYTlEP8CCjC5fxeG5U9A6a50pNpC1nLnhAcJjtzFG8KcQ5etVy/XvCLiDc7fReaAWRNWtCaIhM8Q== + +"@oxc-resolver/binding-win32-x64-msvc@11.16.3": + version "11.16.3" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.16.3.tgz#7e2befaecbb8d1cfb0673aba5d7b298d383c5f0d" + integrity sha512-bFuJRKOscsDAEZ/a8BezcTMAe2BQ/OBRfuMLFUuINfTR5qGVcm4a3xBIrQVepBaPxFj16SJdRjGe05vDiwZmFw== "@polka/url@^1.0.0-next.24": version "1.0.0-next.29" @@ -597,6 +720,13 @@ resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.0.0.tgz#f193b73dc316c4170f2e82a881da0f550d551b9c" integrity sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA== +"@tybys/wasm-util@^0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" + integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== + dependencies: + tslib "^2.4.0" + "@types/chai@^5.2.2": version "5.2.3" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.3.tgz#8e9cd9e1c3581fa6b341a5aed5588eb285be0b4a" @@ -615,13 +745,6 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== -"@types/flexsearch@^0.7.42": - version "0.7.42" - resolved "https://registry.yarnpkg.com/@types/flexsearch/-/flexsearch-0.7.42.tgz#4c3a551f4c78db330a9a1d9e419eb8f100f80bbb" - integrity sha512-FdKaw3dPgcCvqU9w8SGgqx8PrxFF2EKySRhEj1nc45HNe/2cBLff3pF52C67hzeUbNhq49t7XRIIibBd41vcIg== - dependencies: - flexsearch "*" - "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -734,7 +857,7 @@ "@vitest/mocker" "4.0.10" tinyrainbow "^3.0.3" -"@vitest/browser@4.0.10", "@vitest/browser@^4.0.10": +"@vitest/browser@4.0.10": version "4.0.10" resolved "https://registry.yarnpkg.com/@vitest/browser/-/browser-4.0.10.tgz#b910ae0ecc63bc6bb51185e5b90b22ec44c4ecb2" integrity sha512-irO+aGxYx/rAhjEBLsGPO4JQ8dA+A43enIST0j4xQ2kYHatHi9tUcxkRRGpClGuUVU42mi+iQsFFzd4xxpoV3g== @@ -875,20 +998,6 @@ assertion-error@^2.0.1: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axios@^1.11.0: - version "1.13.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687" - integrity sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.4" - proxy-from-env "^1.1.0" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -932,14 +1041,6 @@ browserslist@^4.24.0: node-releases "^2.0.27" update-browserslist-db "^1.1.4" -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -995,13 +1096,6 @@ colorette@^2.0.20: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - commander@^14.0.1: version "14.0.2" resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.2.tgz#b71fd37fe4069e4c3c7c13925252ada4eba14e8e" @@ -1038,20 +1132,6 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - electron-to-chromium@^1.5.249: version "1.5.256" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.256.tgz#f07f78de0893ab060f60ac897195c029a3b50d1a" @@ -1067,38 +1147,11 @@ environment@^1.0.0: resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== -es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - es-module-lexer@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - esbuild@^0.25.0: version "0.25.12" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" @@ -1146,14 +1199,6 @@ eslint-config-prettier@^10.1.8: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== -eslint-plugin-prettier@^5.5.4: - version "5.5.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz#9d61c4ea11de5af704d4edf108c82ccfa7f2e61c" - integrity sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.11.7" - eslint-scope@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" @@ -1267,12 +1312,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.3.2: +fast-glob@^3.3.2, fast-glob@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -1300,6 +1340,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fd-package-json@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fd-package-json/-/fd-package-json-2.0.0.tgz#03f53ce5a0af552c2f4faf703a24e526310a2411" + integrity sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ== + dependencies: + walk-up-path "^4.0.0" + fdir@^6.5.0: version "6.5.0" resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" @@ -1340,26 +1387,17 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -flexsearch@*, flexsearch@^0.8.205: +flexsearch@^0.8.205: version "0.8.212" resolved "https://registry.yarnpkg.com/flexsearch/-/flexsearch-0.8.212.tgz#b9509af778a991b938292e36fe0809a4ece4b940" integrity sha512-wSyJr1GUWoOOIISRu+X2IXiOcVfg9qqBRyCPRUdLMIGJqPzMo+jMRlvE83t14v1j0dRMEaBbER/adQjp6Du2pw== -follow-redirects@^1.15.6: - version "1.15.11" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" - integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== - -form-data@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" - integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== +formatly@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/formatly/-/formatly-0.3.0.tgz#5bb3b4e692f5a8c74ad8fe26154dd0a74aac6819" + integrity sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - hasown "^2.0.2" - mime-types "^2.1.12" + fd-package-json "^2.0.0" fsevents@2.3.2: version "2.3.2" @@ -1371,11 +1409,6 @@ fsevents@~2.3.2, fsevents@~2.3.3: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -1386,30 +1419,6 @@ get-east-asian-width@^1.0.0, get-east-asian-width@^1.3.0, get-east-asian-width@^ resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz#9bc4caa131702b4b61729cb7e42735bc550c9ee6" integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q== -get-intrinsic@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1429,11 +1438,6 @@ globals@^14.0.0: resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -1444,30 +1448,11 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - hash-wasm@^4.12.0: version "4.12.0" resolved "https://registry.yarnpkg.com/hash-wasm/-/hash-wasm-4.12.0.tgz#f9f1a9f9121e027a9acbf6db5d59452ace1ef9bb" integrity sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ== -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -1577,12 +1562,17 @@ istanbul-reports@^3.2.0: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jiti@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.0: +js-yaml@^4.1.0, js-yaml@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== @@ -1621,6 +1611,24 @@ keyv@^4.5.4: dependencies: json-buffer "3.0.1" +knip@^5.82.1: + version "5.82.1" + resolved "https://registry.yarnpkg.com/knip/-/knip-5.82.1.tgz#f92a0e1f74da6d529f1313598c3a4d82fd6eb287" + integrity sha512-1nQk+5AcnkqL40kGQXfouzAEXkTR+eSrgo/8m1d0BMei4eAzFwghoXC4gOKbACgBiCof7hE8wkBVDsEvznf85w== + dependencies: + "@nodelib/fs.walk" "^1.2.3" + fast-glob "^3.3.3" + formatly "^0.3.0" + jiti "^2.6.0" + js-yaml "^4.1.1" + minimist "^1.2.8" + oxc-resolver "^11.15.0" + picocolors "^1.1.1" + picomatch "^4.0.1" + smol-toml "^1.5.2" + strip-json-comments "5.0.3" + zod "^4.1.11" + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -1707,11 +1715,6 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -1725,18 +1728,6 @@ micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - mimic-function@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" @@ -1756,6 +1747,11 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" +minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + mrmime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" @@ -1805,6 +1801,32 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" +oxc-resolver@^11.15.0: + version "11.16.3" + resolved "https://registry.yarnpkg.com/oxc-resolver/-/oxc-resolver-11.16.3.tgz#79b538ac74438f8f28eaff423b465080e821ac07" + integrity sha512-goLOJH3x69VouGWGp5CgCIHyksmOZzXr36lsRmQz1APg3SPFORrvV2q7nsUHMzLVa6ZJgNwkgUSJFsbCpAWkCA== + optionalDependencies: + "@oxc-resolver/binding-android-arm-eabi" "11.16.3" + "@oxc-resolver/binding-android-arm64" "11.16.3" + "@oxc-resolver/binding-darwin-arm64" "11.16.3" + "@oxc-resolver/binding-darwin-x64" "11.16.3" + "@oxc-resolver/binding-freebsd-x64" "11.16.3" + "@oxc-resolver/binding-linux-arm-gnueabihf" "11.16.3" + "@oxc-resolver/binding-linux-arm-musleabihf" "11.16.3" + "@oxc-resolver/binding-linux-arm64-gnu" "11.16.3" + "@oxc-resolver/binding-linux-arm64-musl" "11.16.3" + "@oxc-resolver/binding-linux-ppc64-gnu" "11.16.3" + "@oxc-resolver/binding-linux-riscv64-gnu" "11.16.3" + "@oxc-resolver/binding-linux-riscv64-musl" "11.16.3" + "@oxc-resolver/binding-linux-s390x-gnu" "11.16.3" + "@oxc-resolver/binding-linux-x64-gnu" "11.16.3" + "@oxc-resolver/binding-linux-x64-musl" "11.16.3" + "@oxc-resolver/binding-openharmony-arm64" "11.16.3" + "@oxc-resolver/binding-wasm32-wasi" "11.16.3" + "@oxc-resolver/binding-win32-arm64-msvc" "11.16.3" + "@oxc-resolver/binding-win32-ia32-msvc" "11.16.3" + "@oxc-resolver/binding-win32-x64-msvc" "11.16.3" + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -1851,7 +1873,7 @@ picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.3: +picomatch@^4.0.1, picomatch@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== @@ -1901,23 +1923,11 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - prettier@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393" integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -2038,6 +2048,11 @@ slice-ansi@^7.1.0: ansi-styles "^6.2.1" is-fullwidth-code-point "^5.0.0" +smol-toml@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/smol-toml/-/smol-toml-1.6.0.tgz#7911830b47bb3e87be536f939453e10c9e1dfd36" + integrity sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw== + source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" @@ -2082,6 +2097,11 @@ strip-ansi@^7.1.0: dependencies: ansi-regex "^6.0.1" +strip-json-comments@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-5.0.3.tgz#b7304249dd402ee67fd518ada993ab3593458bcf" + integrity sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw== + strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -2094,13 +2114,6 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -synckit@^0.11.7: - version "0.11.11" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0" - integrity sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw== - dependencies: - "@pkgr/core" "^0.2.9" - tinybench@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" @@ -2141,6 +2154,11 @@ ts-api-utils@^2.1.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== +tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -2223,6 +2241,11 @@ vitest@^4.0.0: vite "^6.0.0 || ^7.0.0" why-is-node-running "^2.3.0" +walk-up-path@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-4.0.0.tgz#590666dcf8146e2d72318164f1f2ac6ef51d4198" + integrity sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A== + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -2271,3 +2294,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^4.1.11: + version "4.3.5" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.3.5.tgz#aeb269a6f9fc259b1212c348c7c5432aaa474d2a" + integrity sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==