From d027adc73402d2a7e35b1ce5a71adaa205ffdd4e Mon Sep 17 00:00:00 2001 From: Julian Dominguez-Schatz Date: Sat, 19 Apr 2025 23:43:25 -0400 Subject: [PATCH] Move sync-server to vitest (#4840) * Move sync-server to vitest * Add release notes * Add comment * Remove extraneous console.log * Empty commit to bump CI --- eslint.config.mjs | 30 + packages/sync-server/jest.config.json | 19 - packages/sync-server/jest.global-teardown.js | 6 - packages/sync-server/package.json | 8 +- .../banks/tests/integration_bank.spec.js | 4 +- ...spk_marburg_biedenkopf_heladef1mar.spec.js | 5 +- .../tests/ssk_dusseldorf_dussdeddxxx.spec.js | 4 +- .../services/tests/gocardless-service.spec.js | 116 ++-- .../tests/services/files-service.test.js | 9 +- packages/sync-server/tsconfig.json | 3 +- packages/sync-server/vitest.config.ts | 18 + ....global-setup.js => vitest.globalSetup.js} | 7 +- upcoming-release-notes/4840.md | 6 + yarn.lock | 558 +++++++++++++++++- 14 files changed, 683 insertions(+), 110 deletions(-) delete mode 100644 packages/sync-server/jest.config.json delete mode 100644 packages/sync-server/jest.global-teardown.js create mode 100644 packages/sync-server/vitest.config.ts rename packages/sync-server/{jest.global-setup.js => vitest.globalSetup.js} (96%) create mode 100644 upcoming-release-notes/4840.md diff --git a/eslint.config.mjs b/eslint.config.mjs index 816b5b96c3..61ecab1f24 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -117,6 +117,26 @@ export default [ '.github/*', ], }, + { + // Temporary until the sync-server is migrated to TypeScript + files: [ + 'packages/sync-server/**/*.spec.js?(x)', + 'packages/sync-server/**/*.test.js?(x)', + ], + languageOptions: { + globals: { + vi: true, + describe: true, + expect: true, + it: true, + beforeAll: true, + beforeEach: true, + afterAll: true, + afterEach: true, + test: true, + }, + }, + }, { linterOptions: { reportUnusedDisableDirectives: true, @@ -752,6 +772,16 @@ export default [ 'import/no-unresolved': 'off', }, }, + + // Allow configuring vitest with default exports (recommended as per vitest docs) + { + files: ['**/vitest.config.ts', '**/vitest.web.config.ts'], + rules: { + 'import/no-anonymous-default-export': 'off', + 'import/no-default-export': 'off', + }, + }, + {}, { // TODO: fix the issues in these files diff --git a/packages/sync-server/jest.config.json b/packages/sync-server/jest.config.json deleted file mode 100644 index 3f599c3d14..0000000000 --- a/packages/sync-server/jest.config.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "globalSetup": "./jest.global-setup.js", - "globalTeardown": "./jest.global-teardown.js", - "testPathIgnorePatterns": ["dist", "/node_modules/", "/build/"], - "roots": [""], - "moduleFileExtensions": ["ts", "js", "json"], - "testEnvironment": "node", - "collectCoverage": true, - "collectCoverageFrom": ["**/*.{js,ts,tsx}"], - "coveragePathIgnorePatterns": [ - "dist", - "/node_modules/", - "/build/", - "/coverage/" - ], - "coverageReporters": ["html", "lcov", "text", "text-summary"], - "resetMocks": true, - "restoreMocks": true -} diff --git a/packages/sync-server/jest.global-teardown.js b/packages/sync-server/jest.global-teardown.js deleted file mode 100644 index bb08df663b..0000000000 --- a/packages/sync-server/jest.global-teardown.js +++ /dev/null @@ -1,6 +0,0 @@ -import { run as runMigrations } from './src/migrations.js'; - -// eslint-disable-next-line import/no-default-export -export default async function teardown() { - await runMigrations('down'); -} diff --git a/packages/sync-server/package.json b/packages/sync-server/package.json index f302f0692f..31f7fcd46e 100644 --- a/packages/sync-server/package.json +++ b/packages/sync-server/package.json @@ -20,7 +20,7 @@ "start": "node app", "start-monitor": "nodemon app", "build": "tsc", - "test": "NODE_ENV=test NODE_OPTIONS='--experimental-vm-modules --trace-warnings' jest --coverage", + "test": "NODE_ENV=test NODE_OPTIONS='--experimental-vm-modules --trace-warnings' vitest", "db:migrate": "NODE_ENV=development node src/run-migrations.js up", "db:downgrade": "NODE_ENV=development node src/run-migrations.js down", "db:test-migrate": "NODE_ENV=test node src/run-migrations.js up", @@ -62,14 +62,14 @@ "@types/cors": "^2.8.17", "@types/express": "^5.0.0", "@types/express-actuator": "^1.8.3", - "@types/jest": "^29.5.14", "@types/node": "^22.14.0", "@types/supertest": "^2.0.16", "@types/uuid": "^9.0.8", + "@vitest/coverage-v8": "3.1.1", "http-proxy-middleware": "^3.0.5", - "jest": "^29.7.0", "nodemon": "^3.1.9", "supertest": "^6.3.4", - "typescript": "^5.8.2" + "typescript": "^5.8.2", + "vitest": "^3.0.2" } } diff --git a/packages/sync-server/src/app-gocardless/banks/tests/integration_bank.spec.js b/packages/sync-server/src/app-gocardless/banks/tests/integration_bank.spec.js index d41d7c8902..f24890244d 100644 --- a/packages/sync-server/src/app-gocardless/banks/tests/integration_bank.spec.js +++ b/packages/sync-server/src/app-gocardless/banks/tests/integration_bank.spec.js @@ -1,5 +1,3 @@ -import { jest } from '@jest/globals'; - import { mockExtendAccountsAboutInstitutions, mockInstitution, @@ -10,7 +8,7 @@ describe('IntegrationBank', () => { let consoleSpy; beforeEach(() => { - consoleSpy = jest.spyOn(console, 'debug'); + consoleSpy = vi.spyOn(console, 'debug'); }); describe('normalizeAccount', () => { diff --git a/packages/sync-server/src/app-gocardless/banks/tests/spk_marburg_biedenkopf_heladef1mar.spec.js b/packages/sync-server/src/app-gocardless/banks/tests/spk_marburg_biedenkopf_heladef1mar.spec.js index 62b4ee6f65..abd244dce3 100644 --- a/packages/sync-server/src/app-gocardless/banks/tests/spk_marburg_biedenkopf_heladef1mar.spec.js +++ b/packages/sync-server/src/app-gocardless/banks/tests/spk_marburg_biedenkopf_heladef1mar.spec.js @@ -201,9 +201,8 @@ describe('SpkMarburgBiedenkopfHeladef1mar', () => { normalizeTransactions[a] = normalizeTransactions[b]; normalizeTransactions[b] = swap; }; - swap(1, 4); - swap(3, 6); - swap(0, 7); + swap(1, 3); + swap(0, 2); const sortedTransactions = SpkMarburgBiedenkopfHeladef1mar.sortTransactions(normalizeTransactions); expect(sortedTransactions).toEqual(originalOrder); diff --git a/packages/sync-server/src/app-gocardless/banks/tests/ssk_dusseldorf_dussdeddxxx.spec.js b/packages/sync-server/src/app-gocardless/banks/tests/ssk_dusseldorf_dussdeddxxx.spec.js index 68bf929976..9ed699f416 100644 --- a/packages/sync-server/src/app-gocardless/banks/tests/ssk_dusseldorf_dussdeddxxx.spec.js +++ b/packages/sync-server/src/app-gocardless/banks/tests/ssk_dusseldorf_dussdeddxxx.spec.js @@ -1,12 +1,10 @@ -import { jest } from '@jest/globals'; - import SskDusseldorfDussdeddxxx from '../ssk_dusseldorf_dussdeddxxx.js'; describe('ssk_dusseldorf_dussdeddxxx', () => { let consoleSpy; beforeEach(() => { - consoleSpy = jest.spyOn(console, 'debug'); + consoleSpy = vi.spyOn(console, 'debug'); }); afterEach(() => { diff --git a/packages/sync-server/src/app-gocardless/services/tests/gocardless-service.spec.js b/packages/sync-server/src/app-gocardless/services/tests/gocardless-service.spec.js index 3ba2267988..92c0d941e1 100644 --- a/packages/sync-server/src/app-gocardless/services/tests/gocardless-service.spec.js +++ b/packages/sync-server/src/app-gocardless/services/tests/gocardless-service.spec.js @@ -1,5 +1,3 @@ -import { jest } from '@jest/globals'; - import { AccessDeniedError, AccountNotLinkedToRequisition, @@ -51,29 +49,29 @@ describe('goCardlessService', () => { let setTokenSpy; beforeEach(() => { - getInstitutionsSpy = jest.spyOn(client, 'getInstitutions'); - getInstitutionSpy = jest.spyOn(client, 'getInstitutionById'); - getRequisitionsSpy = jest.spyOn(client, 'getRequisitionById'); - deleteRequisitionsSpy = jest.spyOn(client, 'deleteRequisition'); - createRequisitionSpy = jest.spyOn(client, 'initSession'); - getBalancesSpy = jest.spyOn(client, 'getBalances'); - getTransactionsSpy = jest.spyOn(client, 'getTransactions'); - getDetailsSpy = jest.spyOn(client, 'getDetails'); - getMetadataSpy = jest.spyOn(client, 'getMetadata'); - setTokenSpy = jest.spyOn(goCardlessService, 'setToken'); + getInstitutionsSpy = vi.spyOn(client, 'getInstitutions'); + getInstitutionSpy = vi.spyOn(client, 'getInstitutionById'); + getRequisitionsSpy = vi.spyOn(client, 'getRequisitionById'); + deleteRequisitionsSpy = vi.spyOn(client, 'deleteRequisition'); + createRequisitionSpy = vi.spyOn(client, 'initSession'); + getBalancesSpy = vi.spyOn(client, 'getBalances'); + getTransactionsSpy = vi.spyOn(client, 'getTransactions'); + getDetailsSpy = vi.spyOn(client, 'getDetails'); + getMetadataSpy = vi.spyOn(client, 'getMetadata'); + setTokenSpy = vi.spyOn(goCardlessService, 'setToken'); }); afterEach(() => { - jest.resetAllMocks(); + vi.resetAllMocks(); }); describe('#getLinkedRequisition', () => { it('returns requisition', async () => { setTokenSpy.mockResolvedValue(); - jest - .spyOn(goCardlessService, 'getRequisition') - .mockResolvedValue(mockRequisition); + vi.spyOn(goCardlessService, 'getRequisition').mockResolvedValue( + mockRequisition, + ); expect( await goCardlessService.getLinkedRequisition(requisitionId), @@ -83,9 +81,10 @@ describe('goCardlessService', () => { it('throws RequisitionNotLinked error if requisition status is different than LN', async () => { setTokenSpy.mockResolvedValue(); - jest - .spyOn(goCardlessService, 'getRequisition') - .mockResolvedValue({ ...mockRequisition, status: 'ER' }); + vi.spyOn(goCardlessService, 'getRequisition').mockResolvedValue({ + ...mockRequisition, + status: 'ER', + }); await expect(() => goCardlessService.getLinkedRequisition(requisitionId), @@ -95,30 +94,31 @@ describe('goCardlessService', () => { describe('#getRequisitionWithAccounts', () => { it('returns combined data', async () => { - jest - .spyOn(goCardlessService, 'getRequisition') - .mockResolvedValue(mockRequisitionWithExampleAccounts); - jest - .spyOn(goCardlessService, 'getDetailedAccount') - .mockResolvedValueOnce(mockDetailedAccountExample1); - jest - .spyOn(goCardlessService, 'getDetailedAccount') - .mockResolvedValueOnce(mockDetailedAccountExample2); - jest - .spyOn(goCardlessService, 'getInstitution') - .mockResolvedValue(mockInstitution); - jest - .spyOn(goCardlessService, 'extendAccountsAboutInstitutions') - .mockResolvedValue([ - { - ...mockExtendAccountsAboutInstitutions[0], - institution_id: 'NEWONE', - }, - { - ...mockExtendAccountsAboutInstitutions[1], - institution_id: 'NEWONE', - }, - ]); + vi.spyOn(goCardlessService, 'getRequisition').mockResolvedValue( + mockRequisitionWithExampleAccounts, + ); + vi.spyOn(goCardlessService, 'getDetailedAccount').mockResolvedValueOnce( + mockDetailedAccountExample1, + ); + vi.spyOn(goCardlessService, 'getDetailedAccount').mockResolvedValueOnce( + mockDetailedAccountExample2, + ); + vi.spyOn(goCardlessService, 'getInstitution').mockResolvedValue( + mockInstitution, + ); + vi.spyOn( + goCardlessService, + 'extendAccountsAboutInstitutions', + ).mockResolvedValue([ + { + ...mockExtendAccountsAboutInstitutions[0], + institution_id: 'NEWONE', + }, + { + ...mockExtendAccountsAboutInstitutions[1], + institution_id: 'NEWONE', + }, + ]); const response = await goCardlessService.getRequisitionWithAccounts( mockRequisitionWithExampleAccounts.id, @@ -146,18 +146,18 @@ describe('goCardlessService', () => { describe('#getTransactionsWithBalance', () => { const requisitionId = mockRequisition.id; it('returns transaction with starting balance', async () => { - jest - .spyOn(goCardlessService, 'getLinkedRequisition') - .mockResolvedValue(mockRequisition); - jest - .spyOn(goCardlessService, 'getAccountMetadata') - .mockResolvedValue(mockAccountMetaData); - jest - .spyOn(goCardlessService, 'getTransactions') - .mockResolvedValue(mockTransactions); - jest - .spyOn(goCardlessService, 'getBalances') - .mockResolvedValue(mockedBalances); + vi.spyOn(goCardlessService, 'getLinkedRequisition').mockResolvedValue( + mockRequisition, + ); + vi.spyOn(goCardlessService, 'getAccountMetadata').mockResolvedValue( + mockAccountMetaData, + ); + vi.spyOn(goCardlessService, 'getTransactions').mockResolvedValue( + mockTransactions, + ); + vi.spyOn(goCardlessService, 'getBalances').mockResolvedValue( + mockedBalances, + ); expect( await goCardlessService.getTransactionsWithBalance( @@ -216,9 +216,9 @@ describe('goCardlessService', () => { }); it('throws AccountNotLinkedToRequisition error if requisition accounts not includes requested account', async () => { - jest - .spyOn(goCardlessService, 'getLinkedRequisition') - .mockResolvedValue(mockRequisition); + vi.spyOn(goCardlessService, 'getLinkedRequisition').mockResolvedValue( + mockRequisition, + ); await expect(() => goCardlessService.getTransactionsWithBalance({ diff --git a/packages/sync-server/src/app-sync/tests/services/files-service.test.js b/packages/sync-server/src/app-sync/tests/services/files-service.test.js index e2183b3746..bd889c88eb 100644 --- a/packages/sync-server/src/app-sync/tests/services/files-service.test.js +++ b/packages/sync-server/src/app-sync/tests/services/files-service.test.js @@ -33,20 +33,17 @@ describe('FilesService', () => { accountDb.mutate('DELETE FROM files'); }; - beforeAll(done => { + beforeAll(() => { accountDb = getAccountDb(); filesService = new FilesService(accountDb); - done(); }); - beforeEach(done => { + beforeEach(() => { insertToyExampleData(); - done(); }); - afterEach(done => { + afterEach(() => { clearDatabase(); - done(); }); test('get should return a file', () => { diff --git a/packages/sync-server/tsconfig.json b/packages/sync-server/tsconfig.json index 07b7b720f1..73c81b9687 100644 --- a/packages/sync-server/tsconfig.json +++ b/packages/sync-server/tsconfig.json @@ -14,7 +14,8 @@ "allowJs": true, "moduleResolution": "node16", "module": "node16", - "outDir": "build" + "outDir": "build", + "types": ["vite/client", "vitest/globals"] }, "include": ["src/**/*.js", "types/global.d.ts"], "exclude": ["node_modules", "build", "./app-plaid.js", "coverage"] diff --git a/packages/sync-server/vitest.config.ts b/packages/sync-server/vitest.config.ts new file mode 100644 index 0000000000..284db513c8 --- /dev/null +++ b/packages/sync-server/vitest.config.ts @@ -0,0 +1,18 @@ +export default { + test: { + exclude: ['**/node_modules/**', '**/dist/**', '**/build/**'], + globalSetup: ['./vitest.globalSetup.js'], + globals: true, + coverage: { + enabled: true, + include: ['**/*.{js,ts,tsx}'], + exclude: [ + '**/node_modules/**', + '**/dist/**', + '**/build/**', + '**/coverage/**', + ], + reporter: ['html', 'lcov', 'text', 'text-summary'], + }, + }, +}; diff --git a/packages/sync-server/jest.global-setup.js b/packages/sync-server/vitest.globalSetup.js similarity index 96% rename from packages/sync-server/jest.global-setup.js rename to packages/sync-server/vitest.globalSetup.js index e518f7d8c4..e728c7e73a 100644 --- a/packages/sync-server/jest.global-setup.js +++ b/packages/sync-server/vitest.globalSetup.js @@ -60,8 +60,7 @@ const setSessionUser = (userId, token = 'valid-token') => { } }; -// eslint-disable-next-line import/no-default-export -export default async function setup() { +export async function setup() { const NEVER_EXPIRES = -1; // or consider using a far future timestamp await runMigrations(); @@ -99,3 +98,7 @@ export default async function setup() { createUser(GENERIC_USER_ID, 'user', BASIC_ROLE_ID, 1); } + +export async function teardown() { + await runMigrations('down'); +} diff --git a/upcoming-release-notes/4840.md b/upcoming-release-notes/4840.md new file mode 100644 index 0000000000..bdeb8fd767 --- /dev/null +++ b/upcoming-release-notes/4840.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [jfdoming] +--- + +Move sync-server to vitest diff --git a/yarn.lock b/yarn.lock index a4a0415008..a60a185dae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -98,10 +98,10 @@ __metadata: "@types/cors": "npm:^2.8.17" "@types/express": "npm:^5.0.0" "@types/express-actuator": "npm:^1.8.3" - "@types/jest": "npm:^29.5.14" "@types/node": "npm:^22.14.0" "@types/supertest": "npm:^2.0.16" "@types/uuid": "npm:^9.0.8" + "@vitest/coverage-v8": "npm:3.1.1" bcrypt: "npm:^5.1.1" better-sqlite3: "npm:^11.9.1" body-parser: "npm:^1.20.3" @@ -115,7 +115,6 @@ __metadata: express-response-size: "npm:^0.0.3" express-winston: "npm:^4.2.0" http-proxy-middleware: "npm:^3.0.5" - jest: "npm:^29.7.0" jws: "npm:^4.0.0" migrate: "npm:^2.1.0" nodemon: "npm:^3.1.9" @@ -125,6 +124,7 @@ __metadata: supertest: "npm:^6.3.4" typescript: "npm:^5.8.2" uuid: "npm:^9.0.1" + vitest: "npm:^3.0.2" winston: "npm:^3.17.0" bin: actual-server: ./bin/actual-server.js @@ -226,6 +226,16 @@ __metadata: languageName: node linkType: hard +"@ampproject/remapping@npm:^2.3.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10/f3451525379c68a73eb0a1e65247fbf28c0cccd126d93af21c75fceff77773d43c0d4a2d51978fb131aff25b5f2cb41a9fe48cc296e61ae65e679c4f6918b0ab + languageName: node + linkType: hard + "@apideck/better-ajv-errors@npm:^0.3.1": version: 0.3.6 resolution: "@apideck/better-ajv-errors@npm:0.3.6" @@ -542,6 +552,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.25.4": + version: 7.27.0 + resolution: "@babel/parser@npm:7.27.0" + dependencies: + "@babel/types": "npm:^7.27.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10/0fee9f05c6db753882ca9d10958301493443da9f6986d7020ebd7a696b35886240016899bc0b47d871aea2abcafd64632343719742e87432c8145e0ec2af2a03 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3" @@ -1583,6 +1604,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.25.4, @babel/types@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/types@npm:7.27.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10/2c322bce107c8a534dc4a23be60d570e6a4cc7ca2e44d4f0eee08c0b626104eb7e60ab8de03463bc5da1773a2f69f1e6edec1648d648d65461d6520a7f3b0770 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1590,6 +1621,13 @@ __metadata: languageName: node linkType: hard +"@bcoe/v8-coverage@npm:^1.0.2": + version: 1.0.2 + resolution: "@bcoe/v8-coverage@npm:1.0.2" + checksum: 10/46600b2dde460269b07a8e4f12b72e418eae1337b85c979f43af3336c9a1c65b04e42508ab6b245f1e0e3c64328e1c38d8cd733e4a7cebc4fbf9cf65c6e59937 + languageName: node + linkType: hard + "@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": version: 1.6.0 resolution: "@colors/colors@npm:1.6.0" @@ -2780,6 +2818,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10/4ed6123217569a1484419ac53f6ea0d9f3b57e5b57ab30d7c267bdb27792a27eb0e4b08e84a2680aa55cc2f2b411ffd6ec3db01c44fdc6dc43aca4b55f8374fd + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:0.3.9": version: 0.3.9 resolution: "@jridgewell/trace-mapping@npm:0.3.9" @@ -2790,7 +2835,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: @@ -6584,6 +6629,32 @@ __metadata: languageName: node linkType: hard +"@vitest/coverage-v8@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/coverage-v8@npm:3.1.1" + dependencies: + "@ampproject/remapping": "npm:^2.3.0" + "@bcoe/v8-coverage": "npm:^1.0.2" + debug: "npm:^4.4.0" + istanbul-lib-coverage: "npm:^3.2.2" + istanbul-lib-report: "npm:^3.0.1" + istanbul-lib-source-maps: "npm:^5.0.6" + istanbul-reports: "npm:^3.1.7" + magic-string: "npm:^0.30.17" + magicast: "npm:^0.3.5" + std-env: "npm:^3.8.1" + test-exclude: "npm:^7.0.1" + tinyrainbow: "npm:^2.0.0" + peerDependencies: + "@vitest/browser": 3.1.1 + vitest: 3.1.1 + peerDependenciesMeta: + "@vitest/browser": + optional: true + checksum: 10/855c3fb8b19ef71f0235d68b5311b0ae4e7bdaa37a616c565cd8c7cbd287e6069a786e91696c3f437d2760a052b179f91672899dfa4ae035b3c8e33c3a8490e5 + languageName: node + linkType: hard + "@vitest/expect@npm:1.6.1": version: 1.6.1 resolution: "@vitest/expect@npm:1.6.1" @@ -6595,6 +6666,46 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/expect@npm:3.1.1" + dependencies: + "@vitest/spy": "npm:3.1.1" + "@vitest/utils": "npm:3.1.1" + chai: "npm:^5.2.0" + tinyrainbow: "npm:^2.0.0" + checksum: 10/79754e35fb505f6ee9636e49f78961299b99b12cebf6fd7ea6455a05d9a9589a65fa5d4537a7b4f6b837a41988ab629a6ff76252a4a5accf77f9462dbf3570c8 + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/mocker@npm:3.1.1" + dependencies: + "@vitest/spy": "npm:3.1.1" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10/18b72593071b4416b096c2c09899e9213804ec5e0fc90f6c5464ebd9645f34de9c2d0ecb09cbc7f3d44fbcf897fca2921ba114b185fc86a70050ccee1c6d6cc8 + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:3.1.1, @vitest/pretty-format@npm:^3.1.1": + version: 3.1.1 + resolution: "@vitest/pretty-format@npm:3.1.1" + dependencies: + tinyrainbow: "npm:^2.0.0" + checksum: 10/d1bc6a6c687d686194ef19ebc748894c543bc520d79db5e86d53ac97f004d13d5b364592a21e151031bf76bf8865ce25e60fc71cc02ca0d513d20bc0c600a63f + languageName: node + linkType: hard + "@vitest/runner@npm:1.6.1": version: 1.6.1 resolution: "@vitest/runner@npm:1.6.1" @@ -6606,6 +6717,16 @@ __metadata: languageName: node linkType: hard +"@vitest/runner@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/runner@npm:3.1.1" + dependencies: + "@vitest/utils": "npm:3.1.1" + pathe: "npm:^2.0.3" + checksum: 10/652a351e59d2f615f3b3de0bb47bfb7875117dd3e57a62c031d8f385614513dbe77847a39037aedb79818a3fde1d957bb82e2f3a5c74651d27721553ed8b4668 + languageName: node + linkType: hard + "@vitest/snapshot@npm:1.6.1": version: 1.6.1 resolution: "@vitest/snapshot@npm:1.6.1" @@ -6617,6 +6738,17 @@ __metadata: languageName: node linkType: hard +"@vitest/snapshot@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/snapshot@npm:3.1.1" + dependencies: + "@vitest/pretty-format": "npm:3.1.1" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + checksum: 10/517ad76c35bd55d2908349a9a5749f874927971c2d6f4ffb3a6f6345acb7a393fac4cc9778119a215caf9ee0c96c75dc27c9f9227a51bd3907c36da946652d43 + languageName: node + linkType: hard + "@vitest/spy@npm:1.6.1": version: 1.6.1 resolution: "@vitest/spy@npm:1.6.1" @@ -6626,6 +6758,15 @@ __metadata: languageName: node linkType: hard +"@vitest/spy@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/spy@npm:3.1.1" + dependencies: + tinyspy: "npm:^3.0.2" + checksum: 10/2b2c8cb2f13fe4ea48779b91c69140c596c8fe3a3ef283ef8b19c025cfdb59a60db7c65a320c84fa28b26655877570860bb44bc2d0e99639d097a7e042e3c604 + languageName: node + linkType: hard + "@vitest/utils@npm:1.6.1": version: 1.6.1 resolution: "@vitest/utils@npm:1.6.1" @@ -6638,6 +6779,17 @@ __metadata: languageName: node linkType: hard +"@vitest/utils@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/utils@npm:3.1.1" + dependencies: + "@vitest/pretty-format": "npm:3.1.1" + loupe: "npm:^3.1.3" + tinyrainbow: "npm:^2.0.0" + checksum: 10/05f28d3e6636966803d60d4867200d6a3a5b7bc2ebaf1583bc3d5a2fc024e024c4958237eca73e420349faf326a8f62c3ae00b2cc2edb42d601b79a759f21b8f + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": version: 1.14.1 resolution: "@webassemblyjs/ast@npm:1.14.1" @@ -7377,6 +7529,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10/a0789dd882211b87116e81e2648ccb7f60340b34f19877dd020b39ebb4714e475eb943e14ba3e22201c221ef6645b7bfe10297e76b6ac95b48a9898c1211ce66 + languageName: node + linkType: hard + "ast-types-flow@npm:^0.0.8": version: 0.0.8 resolution: "ast-types-flow@npm:0.0.8" @@ -8148,6 +8307,19 @@ __metadata: languageName: node linkType: hard +"chai@npm:^5.2.0": + version: 5.2.0 + resolution: "chai@npm:5.2.0" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10/2ce03671c159c6a567bf1912756daabdbb7c075f3c0078f1b59d61da8d276936367ee696dfe093b49e1479d9ba93a6074c8e55d49791dddd8061728cdcad249e + languageName: node + linkType: hard + "chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -8237,6 +8409,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^2.1.1": + version: 2.1.1 + resolution: "check-error@npm:2.1.1" + checksum: 10/d785ed17b1d4a4796b6e75c765a9a290098cf52ff9728ce0756e8ffd4293d2e419dd30c67200aee34202463b474306913f2fcfaf1890641026d9fc6966fea27a + languageName: node + linkType: hard + "cheerio-select@npm:^2.1.0": version: 2.1.0 resolution: "cheerio-select@npm:2.1.0" @@ -9374,6 +9553,13 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10/a529b81e2ef8821621d20a36959a0328873a3e49d393ad11f8efe8559f31239494c2eb889b80342808674c475802ba95b9d6c4c27641b9a029405104c1b59fcf + languageName: node + linkType: hard + "deep-equal@npm:^2.2.3": version: 2.2.3 resolution: "deep-equal@npm:2.2.3" @@ -10187,6 +10373,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.6.0": + version: 1.6.0 + resolution: "es-module-lexer@npm:1.6.0" + checksum: 10/807ee7020cc46a9c970c78cad1f2f3fc139877e5ebad7f66dbfbb124d451189ba1c48c1c632bd5f8ce1b8af2caef3fca340ba044a410fa890d17b080a59024bb + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -10991,6 +11184,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^1.2.0": + version: 1.2.1 + resolution: "expect-type@npm:1.2.1" + checksum: 10/d121d90f4f3f705ca0b656e36f28c0ba91483d0cddf2876e64e23c3dea2f2d5853e9c0c9a4e90eb4b3e4663bf09c2c02e9729c339dcd308c70b2107188e6b286 + languageName: node + linkType: hard + "expect@npm:^29.0.0, expect@npm:^29.7.0": version: 29.7.0 resolution: "expect@npm:29.7.0" @@ -11932,6 +12132,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.4.1": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10/698dfe11828b7efd0514cd11e573eaed26b2dff611f0400907281ce3eab0c1e56143ef9b35adc7c77ecc71fba74717b510c7c223d34ca8a98ec81777b293d4ac + languageName: node + linkType: hard + "glob@npm:^7.0.5, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -13342,6 +13558,13 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-coverage@npm:^3.2.2": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 10/40bbdd1e937dfd8c830fa286d0f665e81b7a78bdabcd4565f6d5667c99828bda3db7fb7ac6b96a3e2e8a2461ddbc5452d9f8bc7d00cb00075fa6a3e99f5b6a81 + languageName: node + linkType: hard + "istanbul-lib-instrument@npm:^5.0.4": version: 5.2.1 resolution: "istanbul-lib-instrument@npm:5.2.1" @@ -13379,6 +13602,17 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-report@npm:^3.0.1": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 10/86a83421ca1cf2109a9f6d193c06c31ef04a45e72a74579b11060b1e7bb9b6337a4e6f04abfb8857e2d569c271273c65e855ee429376a0d7c91ad91db42accd1 + languageName: node + linkType: hard + "istanbul-lib-source-maps@npm:^4.0.0": version: 4.0.1 resolution: "istanbul-lib-source-maps@npm:4.0.1" @@ -13390,6 +13624,17 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-source-maps@npm:^5.0.6": + version: 5.0.6 + resolution: "istanbul-lib-source-maps@npm:5.0.6" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.23" + debug: "npm:^4.1.1" + istanbul-lib-coverage: "npm:^3.0.0" + checksum: 10/569dd0a392ee3464b1fe1accbaef5cc26de3479eacb5b91d8c67ebb7b425d39fd02247d85649c3a0e9c29b600809fa60b5af5a281a75a89c01f385b1e24823a2 + languageName: node + linkType: hard + "istanbul-reports@npm:^3.1.3": version: 3.1.5 resolution: "istanbul-reports@npm:3.1.5" @@ -13400,6 +13645,16 @@ __metadata: languageName: node linkType: hard +"istanbul-reports@npm:^3.1.7": + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: 10/f1faaa4684efaf57d64087776018d7426312a59aa6eeb4e0e3a777347d23cd286ad18f427e98f0e3dee666103d7404c9d7abc5f240406a912fa16bd6695437fa + languageName: node + linkType: hard + "isurl@npm:^1.0.0-alpha5": version: 1.0.0 resolution: "isurl@npm:1.0.0" @@ -13437,6 +13692,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10/96f8786eaab98e4bf5b2a5d6d9588ea46c4d06bbc4f2eb861fdd7b6b182b16f71d8a70e79820f335d52653b16d4843b29dd9cdcf38ae80406756db9199497cf3 + languageName: node + linkType: hard + "jake@npm:^10.8.5": version: 10.8.5 resolution: "jake@npm:10.8.5" @@ -14632,6 +14900,13 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^3.1.0, loupe@npm:^3.1.3": + version: 3.1.3 + resolution: "loupe@npm:3.1.3" + checksum: 10/9e98c34daf0eba48ccc603595e51f2ae002110982d84879cf78c51de2c632f0c571dfe82ce4210af60c32203d06b443465c269bda925076fe6d9b612cc65c321 + languageName: node + linkType: hard + "lower-case@npm:^2.0.2": version: 2.0.2 resolution: "lower-case@npm:2.0.2" @@ -14655,6 +14930,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a + languageName: node + linkType: hard + "lru-cache@npm:^11.0.2": version: 11.0.2 resolution: "lru-cache@npm:11.0.2" @@ -14722,6 +15004,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.17": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10/2f71af2b0afd78c2e9012a29b066d2c8ba45a9cd0c8070f7fd72de982fb1c403b4e3afdb1dae00691d56885ede66b772ef6bedf765e02e3a7066208fe2fec4aa + languageName: node + linkType: hard + "magic-string@npm:^0.30.3, magic-string@npm:^0.30.5": version: 0.30.5 resolution: "magic-string@npm:0.30.5" @@ -14731,6 +15022,17 @@ __metadata: languageName: node linkType: hard +"magicast@npm:^0.3.5": + version: 0.3.5 + resolution: "magicast@npm:0.3.5" + dependencies: + "@babel/parser": "npm:^7.25.4" + "@babel/types": "npm:^7.25.4" + source-map-js: "npm:^1.2.0" + checksum: 10/3a2dba6b0bdde957797361d09c7931ebdc1b30231705360eeb40ed458d28e1c3112841c3ed4e1b87ceb28f741e333c7673cd961193aa9fdb4f4946b202e6205a + languageName: node + linkType: hard + "make-dir@npm:^1.0.0": version: 1.3.0 resolution: "make-dir@npm:1.3.0" @@ -14749,6 +15051,15 @@ __metadata: languageName: node linkType: hard +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 10/bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + languageName: node + linkType: hard + "make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" @@ -15702,6 +16013,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10/c25f0ee8196d8e6036661104bacd743785b2599a21de5c516b32b3fa2b83113ac89a2358465bc04956baab37ffb956ae43be679b2262bf7be15fce467ccd7950 + languageName: node + linkType: hard + "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" @@ -15805,7 +16123,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.7": +"nanoid@npm:^3.3.7, nanoid@npm:^3.3.8": version: 3.3.11 resolution: "nanoid@npm:3.3.11" bin: @@ -16558,6 +16876,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10/58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + "pako@npm:~1.0.5": version: 1.0.11 resolution: "pako@npm:1.0.11" @@ -16712,6 +17037,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10/5e8845c159261adda6f09814d7725683257fcc85a18f329880ab4d7cc1d12830967eae5d5894e453f341710d5484b8fdbbd4d75181b4d6e1eb2f4dc7aeadc434 + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.12": version: 0.1.12 resolution: "path-to-regexp@npm:0.1.12" @@ -16742,6 +17077,13 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10/01e9a69928f39087d96e1751ce7d6d50da8c39abf9a12e0ac2389c42c83bc76f78c45a475bd9026a02e6a6f79be63acc75667df855862fe567d99a00a540d23d + languageName: node + linkType: hard + "pathval@npm:^1.1.1": version: 1.1.1 resolution: "pathval@npm:1.1.1" @@ -16749,6 +17091,13 @@ __metadata: languageName: node linkType: hard +"pathval@npm:^2.0.0": + version: 2.0.0 + resolution: "pathval@npm:2.0.0" + checksum: 10/b91575bf9cdf01757afd7b5e521eb8a0b874a49bc972d08e0047cfea0cd3c019f5614521d4bc83d2855e3fcc331db6817dfd533dd8f3d90b16bc76fad2450fc1 + languageName: node + linkType: hard + "peggy@npm:3.0.2": version: 3.0.2 resolution: "peggy@npm:3.0.2" @@ -16943,6 +17292,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.5.3": + version: 8.5.3 + resolution: "postcss@npm:8.5.3" + dependencies: + nanoid: "npm:^3.3.8" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10/6d7e21a772e8b05bf102636918654dac097bac013f0dc8346b72ac3604fc16829646f94ea862acccd8f82e910b00e2c11c1f0ea276543565d278c7ca35516a7c + languageName: node + linkType: hard + "prebuild-install@npm:^7.1.1": version: 7.1.1 resolution: "prebuild-install@npm:7.1.1" @@ -19040,7 +19400,7 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 @@ -19228,6 +19588,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.8.1": + version: 3.9.0 + resolution: "std-env@npm:3.9.0" + checksum: 10/3044b2c54a74be4f460db56725571241ab3ac89a91f39c7709519bc90fa37148784bc4cd7d3a301aa735f43bd174496f263563f76703ce3e81370466ab7c235b + languageName: node + linkType: hard + "stop-iteration-iterator@npm:^1.0.0": version: 1.0.0 resolution: "stop-iteration-iterator@npm:1.0.0" @@ -19877,6 +20244,17 @@ __metadata: languageName: node linkType: hard +"test-exclude@npm:^7.0.1": + version: 7.0.1 + resolution: "test-exclude@npm:7.0.1" + dependencies: + "@istanbuljs/schema": "npm:^0.1.2" + glob: "npm:^10.4.1" + minimatch: "npm:^9.0.4" + checksum: 10/e6f6f4e1df2e7810e082e8d7dfc53be51a931e6e87925f5e1c2ef92cc1165246ba3bf2dae6b5d86251c16925683dba906bd41e40169ebc77120a2d1b5a0dbbe0 + languageName: node + linkType: hard + "text-decoder@npm:^1.1.0": version: 1.1.1 resolution: "text-decoder@npm:1.1.1" @@ -19931,6 +20309,20 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10/cfa1e1418e91289219501703c4693c70708c91ffb7f040fd318d24aef419fb5a43e0c0160df9471499191968b2451d8da7f8087b08c3133c251c40d24aced06c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10/b9d5fed3166fb1acd1e7f9a89afcd97ccbe18b9c1af0278e429455f6976d69271ba2d21797e7c36d57d6b05025e525d2882d88c2ab435b60d1ddf2fea361de57 + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.0, tinyglobby@npm:^0.2.12": version: 0.2.12 resolution: "tinyglobby@npm:0.2.12" @@ -19948,6 +20340,20 @@ __metadata: languageName: node linkType: hard +"tinypool@npm:^1.0.2": + version: 1.0.2 + resolution: "tinypool@npm:1.0.2" + checksum: 10/6109322f14b3763f65c8fa49fddab72cd3edd96b82dd50e05e63de74867329ff5353bff4377281ec963213d9314f37f4a353e9ee34bbac85fd4c1e4a568d6076 + languageName: node + linkType: hard + +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 10/94d4e16246972614a5601eeb169ba94f1d49752426312d3cf8cc4f2cc663a2e354ffc653aa4de4eebccbf9eeebdd0caef52d1150271fdfde65d7ae7f3dcb9eb5 + languageName: node + linkType: hard + "tinyspy@npm:^2.2.0": version: 2.2.0 resolution: "tinyspy@npm:2.2.0" @@ -19955,6 +20361,13 @@ __metadata: languageName: node linkType: hard +"tinyspy@npm:^3.0.2": + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 10/5db671b2ff5cd309de650c8c4761ca945459d7204afb1776db9a04fb4efa28a75f08517a8620c01ee32a577748802231ad92f7d5b194dc003ee7f987a2a06337 + languageName: node + linkType: hard + "tmp-promise@npm:^3.0.2": version: 3.0.3 resolution: "tmp-promise@npm:3.0.3" @@ -20998,6 +21411,21 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:3.1.1": + version: 3.1.1 + resolution: "vite-node@npm:3.1.1" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.4.0" + es-module-lexer: "npm:^1.6.0" + pathe: "npm:^2.0.3" + vite: "npm:^5.0.0 || ^6.0.0" + bin: + vite-node: vite-node.mjs + checksum: 10/8243cbc2d83f7862d7882c982e85f3e45a654908de380591edd419338c4c75a7991bd22d12b290ad892b9ea102419e81fde92c87296ec7554f89d2ff2034d5e3 + languageName: node + linkType: hard + "vite-plugin-pwa@npm:^0.20.5": version: 0.20.5 resolution: "vite-plugin-pwa@npm:0.20.5" @@ -21078,6 +21506,61 @@ __metadata: languageName: node linkType: hard +"vite@npm:^5.0.0 || ^6.0.0": + version: 6.3.2 + resolution: "vite@npm:6.3.2" + dependencies: + esbuild: "npm:^0.25.0" + fdir: "npm:^6.4.3" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.2" + postcss: "npm:^8.5.3" + rollup: "npm:^4.34.9" + tinyglobby: "npm:^0.2.12" + peerDependencies: + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: ">=1.21.0" + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10/05ea5e03d86d950e53af6b11e444b31846bccdc44e45b8d693d06eba7d3a4fe2e8003a6948cdbcf7e54779f7ca851f29e96be6369e9c9413d34de7539ad6af8c + languageName: node + linkType: hard + "vite@npm:^5.4.18": version: 5.4.18 resolution: "vite@npm:5.4.18" @@ -21171,6 +21654,59 @@ __metadata: languageName: node linkType: hard +"vitest@npm:^3.0.2": + version: 3.1.1 + resolution: "vitest@npm:3.1.1" + dependencies: + "@vitest/expect": "npm:3.1.1" + "@vitest/mocker": "npm:3.1.1" + "@vitest/pretty-format": "npm:^3.1.1" + "@vitest/runner": "npm:3.1.1" + "@vitest/snapshot": "npm:3.1.1" + "@vitest/spy": "npm:3.1.1" + "@vitest/utils": "npm:3.1.1" + chai: "npm:^5.2.0" + debug: "npm:^4.4.0" + expect-type: "npm:^1.2.0" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + std-env: "npm:^3.8.1" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.2" + tinypool: "npm:^1.0.2" + tinyrainbow: "npm:^2.0.0" + vite: "npm:^5.0.0 || ^6.0.0" + vite-node: "npm:3.1.1" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.1.1 + "@vitest/ui": 3.1.1 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/debug": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10/9dc54ef6854f877ad524667a0f3798b6c97c8138bee15a3dbad76557a45e3a3e42d438140df7a9eeaa10e5da7b5eb74ba854f06ffd233fa3c9e5936f6ae42e97 + languageName: node + linkType: hard + "void-elements@npm:3.1.0": version: 3.1.0 resolution: "void-elements@npm:3.1.0" @@ -21547,6 +22083,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10/0de6e6cd8f2f94a8b5ca44e84cf1751eadcac3ebedcdc6e5fbbe6c8011904afcbc1a2777c53496ec02ced7b81f2e7eda61e76bf8262a8bc3ceaa1f6040508051 + languageName: node + linkType: hard + "wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5"