From 34b4d505354e31af5b7d025137b162a2be6f828c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 23:33:21 +0000 Subject: [PATCH 1/5] chore(deps): update nock to v14 --- package.json | 2 +- pnpm-lock.yaml | 62 ++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index beddf438a..3e89e7d3f 100644 --- a/package.json +++ b/package.json @@ -172,7 +172,7 @@ "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "mini-css-extract-plugin": "2.9.2", - "nock": "13.5.6", + "nock": "14.0.1", "postcss": "8.5.2", "postcss-loader": "8.1.1", "rimraf": "6.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 574d43a38..a7b7a11a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -124,8 +124,8 @@ importers: specifier: 2.9.2 version: 2.9.2(webpack@5.98.0) nock: - specifier: 13.5.6 - version: 13.5.6 + specifier: 14.0.1 + version: 14.0.1 postcss: specifier: 8.5.2 version: 8.5.2 @@ -616,6 +616,10 @@ packages: resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} engines: {node: '>= 10.0.0'} + '@mswjs/interceptors@0.37.6': + resolution: {integrity: sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==} + engines: {node: '>=18'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -640,6 +644,15 @@ packages: '@oddbird/popover-polyfill@0.3.8': resolution: {integrity: sha512-+aK7EHL3VggfsWGVqUwvtli2+kP5OWyseAsrefhzR2XWoi2oALUCeoDn63i5WS3ZOmLiXHRNBwHPeta8w+aM1g==} + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -2452,6 +2465,9 @@ packages: is-lambda@1.0.1: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3149,9 +3165,9 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - nock@13.5.6: - resolution: {integrity: sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==} - engines: {node: '>= 10.13'} + nock@14.0.1: + resolution: {integrity: sha512-IJN4O9pturuRdn60NjQ7YkFt6Rwei7ZKaOwb1tvUIIqTgeD0SDDAX3vrqZD4wcXczeEy/AsUXxpGpP/yHqV7xg==} + engines: {node: '>=18.20.0 <20 || >=20.12.1'} node-abi@3.67.0: resolution: {integrity: sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==} @@ -3221,6 +3237,9 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -3924,6 +3943,9 @@ packages: resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} engines: {node: '>= 6'} + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -5037,6 +5059,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@mswjs/interceptors@0.37.6': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5061,6 +5092,15 @@ snapshots: '@oddbird/popover-polyfill@0.3.8': {} + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -7157,6 +7197,8 @@ snapshots: is-lambda@1.0.1: {} + is-node-process@1.2.0: {} + is-number@7.0.0: {} is-plain-obj@4.1.0: {} @@ -8101,13 +8143,11 @@ snapshots: lower-case: 2.0.2 tslib: 2.6.2 - nock@13.5.6: + nock@14.0.1: dependencies: - debug: 4.3.4 + '@mswjs/interceptors': 0.37.6 json-stringify-safe: 5.0.1 propagate: 2.0.1 - transitivePeerDependencies: - - supports-color node-abi@3.67.0: dependencies: @@ -8191,6 +8231,8 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + outvariant@1.4.3: {} + p-cancelable@2.1.1: {} p-limit@2.3.0: @@ -8878,6 +8920,8 @@ snapshots: stat-mode@1.0.0: {} + strict-event-emitter@0.5.1: {} + string-length@4.0.2: dependencies: char-regex: 1.0.2 From 78345764a159e5dec8bc36b595dfb2b752c4f986 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 14 Feb 2025 10:09:29 -0600 Subject: [PATCH 2/5] test: switch from jest to vitest Signed-off-by: Adam Setch --- CONTRIBUTING.md | 6 +- jest.config.ts | 17 - package.json | 13 +- pnpm-lock.yaml | 2874 ++++++----------- src/main/menu.test.ts | 6 +- .../{jest.setup.ts => vitest.setup.ts} | 12 - src/renderer/__mocks__/@electron/remote.js | 16 +- src/renderer/__mocks__/electron.js | 20 +- src/renderer/__mocks__/utils.ts | 2 +- src/renderer/components/Sidebar.test.tsx | 16 +- .../__snapshots__/AllRead.test.tsx.snap | 6 +- .../__snapshots__/Oops.test.tsx.snap | 6 +- .../__snapshots__/Sidebar.test.tsx.snap | 10 +- .../AvatarWithFallback.test.tsx.snap | 14 +- .../components/fields/Checkbox.test.tsx | 2 +- .../components/fields/RadioGroup.test.tsx | 2 +- .../__snapshots__/Checkbox.test.tsx.snap | 16 +- .../__snapshots__/FieldLabel.test.tsx.snap | 4 +- .../__snapshots__/RadioGroup.test.tsx.snap | 6 +- .../__snapshots__/Tooltip.test.tsx.snap | 8 +- .../components/filters/ReasonFilter.test.tsx | 2 +- .../filters/UserHandleFilter.test.tsx | 4 +- .../filters/UserTypeFilter.test.tsx | 2 +- .../__snapshots__/ReasonFilter.test.tsx.snap | 8 +- .../UserHandleFilter.test.tsx.snap | 6 +- .../UserTypeFilter.test.tsx.snap | 10 +- .../components/icons/LogoIcon.test.tsx | 2 +- .../__snapshots__/LogoIcon.test.tsx.snap | 12 +- .../__snapshots__/Centered.test.tsx.snap | 6 +- .../__snapshots__/Contents.test.tsx.snap | 4 +- .../__snapshots__/EmojiSplash.test.tsx.snap | 6 +- .../layout/__snapshots__/Page.test.tsx.snap | 4 +- .../__snapshots__/MetricGroup.test.tsx.snap | 20 +- .../__snapshots__/MetricPill.test.tsx.snap | 6 +- .../AccountNotifications.test.tsx | 14 +- .../notifications/NotificationFooter.test.tsx | 36 +- .../notifications/NotificationHeader.test.tsx | 6 +- .../notifications/NotificationRow.test.tsx | 36 +- .../RepositoryNotifications.test.tsx | 12 +- .../AccountNotifications.test.tsx.snap | 12 +- .../NotificationFooter.test.tsx.snap | 12 +- .../NotificationHeader.test.tsx.snap | 10 +- .../NotificationRow.test.tsx.snap | 8 +- .../RepositoryNotifications.test.tsx.snap | 8 +- .../components/primitives/Header.test.tsx | 10 +- .../primitives/HoverButton.test.tsx | 4 +- .../__snapshots__/EmojiText.test.tsx.snap | 4 +- .../__snapshots__/Footer.test.tsx.snap | 6 +- .../__snapshots__/Header.test.tsx.snap | 4 +- .../__snapshots__/HoverButton.test.tsx.snap | 6 +- .../__snapshots__/HoverGroup.test.tsx.snap | 4 +- .../__snapshots__/Title.test.tsx.snap | 6 +- .../settings/AppearanceSettings.test.tsx | 12 +- .../settings/NotificationSettings.test.tsx | 8 +- .../settings/SettingsFooter.test.tsx | 14 +- .../settings/SettingsReset.test.tsx | 8 +- .../settings/SystemSettings.test.tsx | 4 +- .../SettingsFooter.test.tsx.snap | 7 +- src/renderer/context/App.test.tsx | 56 +- src/renderer/hooks/useNotifications.test.ts | 2 +- src/renderer/routes/Accounts.test.tsx | 38 +- src/renderer/routes/Filters.test.tsx | 12 +- src/renderer/routes/Login.test.tsx | 12 +- .../routes/LoginWithOAuthApp.test.tsx | 14 +- .../LoginWithPersonalAccessToken.test.tsx | 14 +- src/renderer/routes/Notifications.test.tsx | 6 +- src/renderer/routes/Settings.test.tsx | 10 +- .../__snapshots__/Accounts.test.tsx.snap | 8 +- .../__snapshots__/Filters.test.tsx.snap | 4 +- .../routes/__snapshots__/Login.test.tsx.snap | 4 +- .../LoginWithOAuthApp.test.tsx.snap | 4 +- ...LoginWithPersonalAccessToken.test.tsx.snap | 4 +- .../__snapshots__/Notifications.test.tsx.snap | 18 +- .../__snapshots__/Settings.test.tsx.snap | 1387 -------- .../utils/__snapshots__/emojis.test.ts.snap | 4 +- .../utils/__snapshots__/icons.test.ts.snap | 66 - .../utils/__snapshots__/reason.test.ts.snap | 34 +- .../api/__snapshots__/client.test.ts.snap | 54 +- .../api/__snapshots__/request.test.ts.snap | 14 +- src/renderer/utils/api/client.test.ts | 10 +- src/renderer/utils/api/request.test.ts | 6 +- src/renderer/utils/auth/utils.test.ts | 57 +- src/renderer/utils/comms.test.ts | 14 +- src/renderer/utils/helpers.test.ts | 6 +- src/renderer/utils/links.test.ts | 31 +- .../notifications/filters/filter.test.ts | 2 +- .../notifications/filters/userType.test.ts | 4 - .../utils/notifications/native.test.ts | 30 +- .../utils/notifications/notifications.test.ts | 2 +- src/renderer/utils/storage.test.ts | 13 +- src/renderer/utils/subject.test.ts | 2 +- src/shared/logger.test.ts | 6 +- tsconfig.json | 3 +- vitest.config.ts | 13 + 94 files changed, 1550 insertions(+), 3813 deletions(-) delete mode 100644 jest.config.ts rename src/renderer/__helpers__/{jest.setup.ts => vitest.setup.ts} (52%) delete mode 100644 src/renderer/routes/__snapshots__/Settings.test.tsx.snap delete mode 100644 src/renderer/utils/__snapshots__/icons.test.ts.snap create mode 100644 vitest.config.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6d4e578de..599a9cead 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -36,7 +36,7 @@ To reload the app with the changes that `pnpm watch` has detected, you can use t There are 2 checks: 1. linter & formatter with [biome][biome-website] -2. unit tests with [jest][jest-website] +2. unit tests with [vitest][vitest-website] ```shell # Run biome to check linting and formatting @@ -45,7 +45,7 @@ pnpm lint:check # Run unit tests with coverage pnpm test -# Update jest snapshots +# Update test snapshots pnpm test -u ``` @@ -95,5 +95,5 @@ This project is a tool for monitoring new notifications from Github. It's not me [github-new-release]: https://github.com/gitify-app/gitify/releases/new [github-octicons]: https://primer.style/foundations/icons [homebrew-cask-autobump-workflow]: https://github.com/Homebrew/homebrew-cask/actions/workflows/autobump.yml -[jest-website]: https://jestjs.io/ +[vitest-website]: https://vitest.dev/ diff --git a/jest.config.ts b/jest.config.ts deleted file mode 100644 index 89f63907d..000000000 --- a/jest.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { Config } from 'jest'; - -const config: Config = { - preset: 'ts-jest', - setupFiles: ['/src/renderer/__helpers__/jest.setup.ts'], - testEnvironment: 'jsdom', - collectCoverage: true, - collectCoverageFrom: ['src/**/*', '!**/__snapshots__/**'], - moduleNameMapper: { - // Force CommonJS build for http adapter to be available. - // via https://github.com/axios/axios/issues/5101#issuecomment-1276572468 - '^axios$': require.resolve('axios'), - }, - modulePathIgnorePatterns: ['/build', '/node_modules'], -}; - -module.exports = config; diff --git a/package.json b/package.json index 3e89e7d3f..b4fa5189d 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "package:win": "electron-builder --win", "lint:check": "biome check", "lint": "biome check --fix", - "test": "jest", + "test": "vitest -u", "start": "electron . --enable-logging", "prepare": "husky" }, @@ -150,12 +150,12 @@ "@primer/react": "36.27.0", "@tailwindcss/postcss": "4.0.6", "@testing-library/react": "16.2.0", - "@types/jest": "29.5.14", "@types/node": "22.13.2", "@types/react": "19.0.8", "@types/react-dom": "19.0.3", "@types/react-router-dom": "5.3.3", "@types/semver": "7.5.8", + "@vitest/ui": "^3.0.5", "axios": "1.7.9", "clsx": "2.1.1", "concurrently": "9.1.2", @@ -169,8 +169,6 @@ "graphql-tag": "2.12.6", "html-webpack-plugin": "5.6.3", "husky": "9.1.7", - "jest": "29.7.0", - "jest-environment-jsdom": "29.7.0", "mini-css-extract-plugin": "2.9.2", "nock": "14.0.1", "postcss": "8.5.2", @@ -181,10 +179,10 @@ "tailwind-merge": "3.0.1", "tailwindcss": "4.0.6", "terser-webpack-plugin": "5.3.11", - "ts-jest": "29.2.5", "ts-loader": "9.5.2", "ts-node": "10.9.2", "typescript": "5.7.3", + "vitest": "3.0.5", "webpack": "5.98.0", "webpack-cli": "6.0.1", "webpack-merge": "6.0.1" @@ -192,6 +190,9 @@ "packageManager": "pnpm@10.3.0", "lint-staged": { "*": "biome check --fix --no-errors-on-unmatched", - "*.{js,ts,tsx}": "pnpm test -- --findRelatedTests -u --passWithNoTests" + "*.{js,ts,tsx}": "pnpm test" + }, + "pnpm": { + "onlyBuiltDependencies": ["@biomejs/biome", "electron", "esbuild"] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a7b7a11a9..51da408f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,9 +57,6 @@ importers: '@testing-library/react': specifier: 16.2.0 version: 16.2.0(@testing-library/dom@10.0.0)(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@types/jest': - specifier: 29.5.14 - version: 29.5.14 '@types/node': specifier: 22.13.2 version: 22.13.2 @@ -75,6 +72,9 @@ importers: '@types/semver': specifier: 7.5.8 version: 7.5.8 + '@vitest/ui': + specifier: ^3.0.5 + version: 3.0.5(vitest@3.0.5) axios: specifier: 1.7.9 version: 1.7.9 @@ -92,7 +92,7 @@ importers: version: 7.1.2(webpack@5.98.0) css-minimizer-webpack-plugin: specifier: 7.0.0 - version: 7.0.0(webpack@5.98.0) + version: 7.0.0(lightningcss@1.29.1)(webpack@5.98.0) date-fns: specifier: 4.1.0 version: 4.1.0 @@ -114,12 +114,6 @@ importers: husky: specifier: 9.1.7 version: 9.1.7 - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)) - jest-environment-jsdom: - specifier: 29.7.0 - version: 29.7.0 mini-css-extract-plugin: specifier: 2.9.2 version: 2.9.2(webpack@5.98.0) @@ -150,9 +144,6 @@ importers: terser-webpack-plugin: specifier: 5.3.11 version: 5.3.11(webpack@5.98.0) - ts-jest: - specifier: 29.2.5 - version: 29.2.5(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)))(typescript@5.7.3) ts-loader: specifier: 9.5.2 version: 9.5.2(typescript@5.7.3)(webpack@5.98.0) @@ -162,6 +153,9 @@ importers: typescript: specifier: 5.7.3 version: 5.7.3 + vitest: + specifier: ^3.0.5 + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.2)(@vitest/ui@3.0.5)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.1)(terser@5.37.0) webpack: specifier: 5.98.0 version: 5.98.0(webpack-cli@6.0.1) @@ -181,181 +175,22 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@babel/code-frame@7.24.2': resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.1': - resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.3': - resolution: {integrity: sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.24.1': - resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.23.6': - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-environment-visitor@7.22.20': - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.23.0': - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.22.5': - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.3': - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.23.3': - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.24.0': - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-simple-access@7.22.5': - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.22.6': - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.1': - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.23.5': - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.24.1': - resolution: {integrity: sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==} - engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.2': resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.1': - resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.24.1': - resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.24.1': - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/runtime@7.24.1': resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.0': - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.24.1': - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.24.0': - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} @@ -478,6 +313,156 @@ packages: '@emotion/unitless@0.8.1': resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} @@ -500,76 +485,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/types@29.6.3': resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -592,6 +511,9 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -657,6 +579,9 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@primer/behaviors@1.8.0': resolution: {integrity: sha512-ZUfhWVY4ZBKc2Fh3fIa2Qwwa3SnOi914lY5wcmN+UNtsBxeXsjWNwpohJbwRwWZm+nJ3C1n9qJFWpHuBlDVU1A==} @@ -693,6 +618,101 @@ packages: '@types/styled-components': optional: true + '@rollup/rollup-android-arm-eabi@4.34.7': + resolution: {integrity: sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.7': + resolution: {integrity: sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.7': + resolution: {integrity: sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.7': + resolution: {integrity: sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.7': + resolution: {integrity: sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.7': + resolution: {integrity: sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.7': + resolution: {integrity: sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.7': + resolution: {integrity: sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.7': + resolution: {integrity: sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.7': + resolution: {integrity: sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.7': + resolution: {integrity: sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.7': + resolution: {integrity: sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.7': + resolution: {integrity: sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.7': + resolution: {integrity: sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.7': + resolution: {integrity: sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.7': + resolution: {integrity: sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.7': + resolution: {integrity: sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.7': + resolution: {integrity: sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.7': + resolution: {integrity: sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==} + cpu: [x64] + os: [win32] + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -704,12 +724,6 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@styled-system/background@5.1.2': resolution: {integrity: sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==} @@ -880,18 +894,6 @@ packages: '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.5': - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} - '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} @@ -913,9 +915,6 @@ packages: '@types/fs-extra@9.0.13': resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} @@ -937,12 +936,6 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jest@29.5.14': - resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} - - '@types/jsdom@20.0.1': - resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -990,9 +983,6 @@ packages: '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/styled-system@5.1.23': resolution: {integrity: sha512-mIwCCdhDa2ifdQCEm8ZeD8m4UEbFsokqEoT9YNOUv4alUJ8jbMKxvpr+oOwfuZgwqLh5HjWuEzwnX7DzWvjFBg==} @@ -1005,9 +995,6 @@ packages: '@types/stylis@4.2.5': resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -1023,6 +1010,40 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@vitest/expect@3.0.5': + resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} + + '@vitest/mocker@3.0.5': + resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.0.5': + resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} + + '@vitest/runner@3.0.5': + resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==} + + '@vitest/snapshot@3.0.5': + resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} + + '@vitest/spy@3.0.5': + resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} + + '@vitest/ui@3.0.5': + resolution: {integrity: sha512-gw2noso6WI+2PeMVCZFntdATS6xl9qhQcbhkPQ9sOmx/Xn0f4Bx4KDSbD90jpJPF0l5wOzSoGCmKyVR3W612mg==} + peerDependencies: + vitest: 3.0.5 + + '@vitest/utils@3.0.5': + resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -1167,10 +1188,6 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1195,10 +1212,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - app-builder-bin@4.0.0: resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} @@ -1242,9 +1255,6 @@ packages: arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1255,6 +1265,10 @@ packages: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -1276,31 +1290,6 @@ packages: axios@1.7.9: resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - babel-preset-current-node-syntax@1.0.1: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -1341,13 +1330,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -1375,6 +1357,10 @@ packages: builder-util@25.1.7: resolution: {integrity: sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==} + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + cacache@16.1.3: resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -1394,14 +1380,6 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} @@ -1411,6 +1389,10 @@ packages: caniuse-lite@1.0.30001676: resolution: {integrity: sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==} + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1419,13 +1401,13 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -1441,9 +1423,6 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - clean-css@5.3.3: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} @@ -1487,13 +1466,6 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -1571,9 +1543,6 @@ packages: console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} @@ -1611,11 +1580,6 @@ packages: crc@3.8.0: resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -1747,6 +1711,15 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -1757,13 +1730,9 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} @@ -1804,17 +1773,9 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -1930,10 +1891,6 @@ packages: engines: {node: '>= 12.20.55'} hasBin: true - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1987,9 +1944,17 @@ packages: es-module-lexer@1.5.0: resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1998,10 +1963,6 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2032,6 +1993,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -2040,17 +2004,9 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} @@ -2087,12 +2043,20 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} @@ -2112,6 +2076,9 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + focus-visible@5.2.1: resolution: {integrity: sha512-8Bx950VD1bWTQJEH/AM6SpEk+SU55aVnp4Ujhuuxy3eMEBCRwBnTBnVXr9YAPvZL3/CNjCa8u4IWfNmEO53whA==} @@ -2174,10 +2141,6 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -2186,18 +2149,10 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - github-url-to-object@4.0.6: resolution: {integrity: sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==} @@ -2234,10 +2189,6 @@ packages: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} engines: {node: '>=10.0'} - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -2310,9 +2261,6 @@ packages: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - html-minifier-terser@6.1.0: resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} engines: {node: '>=12'} @@ -2356,10 +2304,6 @@ packages: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} @@ -2450,10 +2394,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2483,10 +2423,6 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -2495,183 +2431,39 @@ packages: resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - - isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - - isbinaryfile@5.0.2: - resolution: {integrity: sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==} - engines: {node: '>= 18.0.0'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@6.0.2: - resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} - engines: {node: '>=10'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jackspeak@4.0.1: - resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} - engines: {node: 20 || >=22} - - jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true - - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-jsdom@29.7.0: - resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + isbinaryfile@5.0.2: + resolution: {integrity: sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==} + engines: {node: '>= 18.0.0'} - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jackspeak@4.0.1: + resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} + engines: {node: 20 || >=22} - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -2680,16 +2472,6 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true @@ -2701,10 +2483,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -2721,11 +2499,6 @@ packages: canvas: optional: true - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -2762,10 +2535,6 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -2777,10 +2546,6 @@ packages: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - lightningcss-darwin-arm64@1.29.1: resolution: {integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==} engines: {node: '>= 12.0.0'} @@ -2905,6 +2670,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -2920,9 +2688,6 @@ packages: resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==} engines: {node: 20 || >=22} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -2935,9 +2700,8 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -2946,9 +2710,6 @@ packages: resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - matcher@3.0.0: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} @@ -3144,17 +2905,21 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -3184,9 +2949,6 @@ packages: engines: {node: ^12.13 || ^14.13 || >=16} hasBin: true - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -3203,10 +2965,6 @@ packages: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -3311,6 +3069,13 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + pe-library@0.4.1: resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} engines: {node: '>=12', npm: '>=6'} @@ -3325,9 +3090,9 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} @@ -3562,10 +3327,6 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -3585,10 +3346,6 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -3612,9 +3369,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -3746,10 +3500,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -3783,6 +3533,11 @@ packages: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} + rollup@4.34.7: + resolution: {integrity: sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -3866,6 +3621,9 @@ packages: shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -3877,12 +3635,9 @@ packages: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + sirv@3.0.0: + resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + engines: {node: '>=18'} slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} @@ -3908,9 +3663,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -3925,9 +3677,6 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} @@ -3935,21 +3684,19 @@ packages: resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} stat-mode@1.0.0: resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} engines: {node: '>= 6'} + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3972,18 +3719,6 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -4081,13 +3816,31 @@ packages: engines: {node: '>=10'} hasBin: true - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - tiny-typed-emitter@2.1.0: resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} @@ -4095,17 +3848,14 @@ packages: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} @@ -4127,30 +3877,6 @@ packages: truncate-utf8-bytes@1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - ts-jest@29.2.5: - resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - ts-loader@9.5.2: resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} engines: {node: '>=12.0.0'} @@ -4178,18 +3904,10 @@ packages: turbo-stream@2.4.0: resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - typescript@5.7.3: resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} @@ -4278,10 +3996,6 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} - engines: {node: '>=10.12.0'} - verror@1.10.1: resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} engines: {node: '>=0.6.0'} @@ -4292,13 +4006,83 @@ packages: vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vite-node@3.0.5: + resolution: {integrity: sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@6.1.0: + resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + 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 + 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 + + vitest@3.0.5: + resolution: {integrity: sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.5 + '@vitest/ui': 3.0.5 + 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 + w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - watchpack@2.4.1: resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} @@ -4359,6 +4143,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} @@ -4376,10 +4165,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -4407,9 +4192,6 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -4421,235 +4203,44 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zip-stream@4.1.1: - resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} - engines: {node: '>= 10'} - -snapshots: - - 7zip-bin@5.2.0: {} - - '@alloc/quick-lru@5.2.0': {} - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.24.2': - dependencies: - '@babel/highlight': 7.24.2 - picocolors: 1.1.1 - - '@babel/compat-data@7.24.1': {} - - '@babel/core@7.24.3': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) - '@babel/helpers': 7.24.1 - '@babel/parser': 7.24.1 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.24.1': - dependencies: - '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-compilation-targets@7.23.6': - dependencies: - '@babel/compat-data': 7.24.1 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.24.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-environment-visitor@7.22.20': {} - - '@babel/helper-function-name@7.23.0': - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 - - '@babel/helper-hoist-variables@7.22.5': - dependencies: - '@babel/types': 7.24.0 - - '@babel/helper-module-imports@7.24.3': - dependencies: - '@babel/types': 7.24.0 - - '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - - '@babel/helper-plugin-utils@7.24.0': {} - - '@babel/helper-simple-access@7.22.5': - dependencies: - '@babel/types': 7.24.0 - - '@babel/helper-split-export-declaration@7.22.6': - dependencies: - '@babel/types': 7.24.0 - - '@babel/helper-string-parser@7.24.1': {} - - '@babel/helper-validator-identifier@7.22.20': {} - - '@babel/helper-validator-option@7.23.5': {} - - '@babel/helpers@7.24.1': - dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 - transitivePeerDependencies: - - supports-color - - '@babel/highlight@7.24.2': - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/parser@7.24.1': - dependencies: - '@babel/types': 7.24.0 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 +snapshots: - '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + 7zip-bin@5.2.0: {} - '@babel/runtime@7.24.1': - dependencies: - regenerator-runtime: 0.14.1 + '@alloc/quick-lru@5.2.0': {} - '@babel/template@7.24.0': + '@babel/code-frame@7.24.2': dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 + '@babel/highlight': 7.24.2 + picocolors: 1.1.1 - '@babel/traverse@7.24.1': - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/helper-validator-identifier@7.22.20': {} - '@babel/types@7.24.0': + '@babel/highlight@7.24.2': dependencies: - '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@bcoe/v8-coverage@0.2.3': {} + '@babel/runtime@7.24.1': + dependencies: + regenerator-runtime: 0.14.1 '@biomejs/biome@1.9.4': optionalDependencies: @@ -4726,7 +4317,7 @@ snapshots: '@electron/notarize@2.2.1': dependencies: - debug: 4.3.4 + debug: 4.4.0 fs-extra: 9.1.0 promise-retry: 2.0.1 transitivePeerDependencies: @@ -4743,7 +4334,7 @@ snapshots: '@electron/osx-sign@1.0.5': dependencies: compare-version: 0.1.2 - debug: 4.3.4 + debug: 4.4.0 fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 @@ -4790,7 +4381,7 @@ snapshots: dependencies: '@electron/asar': 3.2.9 '@malept/cross-spawn-promise': 1.1.1 - debug: 4.3.4 + debug: 4.4.0 dir-compare: 3.3.0 fs-extra: 9.1.0 minimatch: 3.1.2 @@ -4818,6 +4409,81 @@ snapshots: '@emotion/unitless@0.8.1': {} + '@esbuild/aix-ppc64@0.24.2': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + + '@esbuild/android-arm@0.24.2': + optional: true + + '@esbuild/android-x64@0.24.2': + optional: true + + '@esbuild/darwin-arm64@0.24.2': + optional: true + + '@esbuild/darwin-x64@0.24.2': + optional: true + + '@esbuild/freebsd-arm64@0.24.2': + optional: true + + '@esbuild/freebsd-x64@0.24.2': + optional: true + + '@esbuild/linux-arm64@0.24.2': + optional: true + + '@esbuild/linux-arm@0.24.2': + optional: true + + '@esbuild/linux-ia32@0.24.2': + optional: true + + '@esbuild/linux-loong64@0.24.2': + optional: true + + '@esbuild/linux-mips64el@0.24.2': + optional: true + + '@esbuild/linux-ppc64@0.24.2': + optional: true + + '@esbuild/linux-riscv64@0.24.2': + optional: true + + '@esbuild/linux-s390x@0.24.2': + optional: true + + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': + optional: true + + '@esbuild/netbsd-x64@0.24.2': + optional: true + + '@esbuild/openbsd-arm64@0.24.2': + optional: true + + '@esbuild/openbsd-x64@0.24.2': + optional: true + + '@esbuild/sunos-x64@0.24.2': + optional: true + + '@esbuild/win32-arm64@0.24.2': + optional: true + + '@esbuild/win32-ia32@0.24.2': + optional: true + + '@esbuild/win32-x64@0.24.2': + optional: true + '@gar/promisify@1.1.3': {} '@github/combobox-nav@2.3.1': {} @@ -4839,169 +4505,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.3': {} - - '@jest/console@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.13.2 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.2 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.2 - jest-mock: 29.7.0 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - - '@jest/expect@29.7.0': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.13.2 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/globals@29.7.0': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/reporters@29.7.0': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.13.2 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.2.0 - transitivePeerDependencies: - - supports-color - '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 - '@jest/source-map@29.6.3': - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - - '@jest/test-sequencer@29.7.0': - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.24.3 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 @@ -5028,6 +4535,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -5104,6 +4613,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@polka/url@1.0.0-next.28': {} + '@primer/behaviors@1.8.0': {} '@primer/live-region-element@0.7.1': @@ -5159,20 +4670,69 @@ snapshots: transitivePeerDependencies: - supports-color + '@rollup/rollup-android-arm-eabi@4.34.7': + optional: true + + '@rollup/rollup-android-arm64@4.34.7': + optional: true + + '@rollup/rollup-darwin-arm64@4.34.7': + optional: true + + '@rollup/rollup-darwin-x64@4.34.7': + optional: true + + '@rollup/rollup-freebsd-arm64@4.34.7': + optional: true + + '@rollup/rollup-freebsd-x64@4.34.7': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.34.7': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.34.7': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.34.7': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-x64-musl@4.34.7': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.34.7': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.34.7': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.34.7': + optional: true + '@sinclair/typebox@0.27.8': {} '@sindresorhus/is@4.6.0': {} '@sindresorhus/merge-streams@2.3.0': {} - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - '@styled-system/background@5.1.2': dependencies: '@styled-system/core': 5.1.2 @@ -5335,27 +4895,6 @@ snapshots: '@types/aria-query@5.0.4': {} - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 - - '@types/babel__generator@7.6.8': - dependencies: - '@babel/types': 7.24.0 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 - - '@types/babel__traverse@7.20.5': - dependencies: - '@babel/types': 7.24.0 - '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 @@ -5385,10 +4924,6 @@ snapshots: dependencies: '@types/node': 22.13.2 - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 22.13.2 - '@types/hast@2.3.10': dependencies: '@types/unist': 2.0.11 @@ -5409,17 +4944,6 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jest@29.5.14': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - - '@types/jsdom@20.0.1': - dependencies: - '@types/node': 22.13.2 - '@types/tough-cookie': 4.0.5 - parse5: 7.1.2 - '@types/json-schema@7.0.15': {} '@types/keyv@3.1.4': @@ -5477,8 +5001,6 @@ snapshots: '@types/semver@7.5.8': {} - '@types/stack-utils@2.0.3': {} - '@types/styled-system@5.1.23': dependencies: csstype: 3.1.3 @@ -5491,23 +5013,72 @@ snapshots: '@types/stylis@4.2.5': {} - '@types/tough-cookie@4.0.5': {} + '@types/unist@2.0.11': {} + + '@types/verror@1.10.10': + optional: true + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.32': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.13.2 + optional: true + + '@vitest/expect@3.0.5': + dependencies: + '@vitest/spy': 3.0.5 + '@vitest/utils': 3.0.5 + chai: 5.1.2 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.0.5(vite@6.1.0(@types/node@22.13.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0))': + dependencies: + '@vitest/spy': 3.0.5 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 6.1.0(@types/node@22.13.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0) + + '@vitest/pretty-format@3.0.5': + dependencies: + tinyrainbow: 2.0.0 - '@types/unist@2.0.11': {} + '@vitest/runner@3.0.5': + dependencies: + '@vitest/utils': 3.0.5 + pathe: 2.0.3 - '@types/verror@1.10.10': - optional: true + '@vitest/snapshot@3.0.5': + dependencies: + '@vitest/pretty-format': 3.0.5 + magic-string: 0.30.17 + pathe: 2.0.3 - '@types/yargs-parser@21.0.3': {} + '@vitest/spy@3.0.5': + dependencies: + tinyspy: 3.0.2 - '@types/yargs@17.0.32': + '@vitest/ui@3.0.5(vitest@3.0.5)': dependencies: - '@types/yargs-parser': 21.0.3 + '@vitest/utils': 3.0.5 + fflate: 0.8.2 + flatted: 3.3.2 + pathe: 2.0.3 + sirv: 3.0.0 + tinyglobby: 0.2.10 + tinyrainbow: 2.0.0 + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.2)(@vitest/ui@3.0.5)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.1)(terser@5.37.0) - '@types/yauzl@2.10.3': + '@vitest/utils@3.0.5': dependencies: - '@types/node': 22.13.2 - optional: true + '@vitest/pretty-format': 3.0.5 + loupe: 3.1.3 + tinyrainbow: 2.0.0 '@webassemblyjs/ast@1.14.1': dependencies: @@ -5606,7 +5177,8 @@ snapshots: '@xtuc/long@4.2.2': {} - abab@2.0.6: {} + abab@2.0.6: + optional: true abbrev@1.1.1: {} @@ -5614,6 +5186,7 @@ snapshots: dependencies: acorn: 8.14.0 acorn-walk: 8.3.2 + optional: true acorn-walk@8.3.2: {} @@ -5669,10 +5242,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -5689,11 +5258,6 @@ snapshots: ansi-styles@6.2.1: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - app-builder-bin@4.0.0: {} app-builder-bin@5.0.0-alpha.10: {} @@ -5711,7 +5275,7 @@ snapshots: builder-util: 24.13.1 builder-util-runtime: 9.2.4 chromium-pickle-js: 0.2.0 - debug: 4.3.4 + debug: 4.4.0 dmg-builder: 25.1.8(electron-builder-squirrel-windows@24.13.3) ejs: 3.1.10 electron-builder-squirrel-windows: 24.13.3(dmg-builder@25.1.8) @@ -5817,10 +5381,6 @@ snapshots: arg@4.1.3: {} - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - argparse@2.0.1: {} aria-query@5.3.0: @@ -5830,6 +5390,8 @@ snapshots: assert-plus@1.0.0: optional: true + assertion-error@2.0.1: {} + astral-regex@2.0.0: optional: true @@ -5849,58 +5411,6 @@ snapshots: transitivePeerDependencies: - debug - babel-jest@29.7.0(@babel/core@7.24.3): - dependencies: - '@babel/core': 7.24.3 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.3) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.24.0 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.5 - - babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.3): - dependencies: - '@babel/core': 7.24.3 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.3) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.3) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.3) - - babel-preset-jest@29.6.3(@babel/core@7.24.3): - dependencies: - '@babel/core': 7.24.3 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.3) - bail@2.0.2: {} balanced-match@1.0.2: {} @@ -5944,14 +5454,6 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - buffer-crc32@0.2.13: {} buffer-equal@1.0.1: {} @@ -5972,7 +5474,7 @@ snapshots: builder-util-runtime@9.2.4: dependencies: - debug: 4.3.4 + debug: 4.4.0 sax: 1.3.0 transitivePeerDependencies: - supports-color @@ -5986,7 +5488,7 @@ snapshots: builder-util-runtime: 9.2.4 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.4 + debug: 4.4.0 fs-extra: 10.1.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 @@ -6019,6 +5521,8 @@ snapshots: transitivePeerDependencies: - supports-color + cac@6.7.14: {} + cacache@16.1.3: dependencies: '@npmcli/fs': 2.1.2 @@ -6061,10 +5565,6 @@ snapshots: pascal-case: 3.1.2 tslib: 2.6.2 - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - camelize@1.0.1: {} caniuse-api@3.0.0: @@ -6076,6 +5576,14 @@ snapshots: caniuse-lite@1.0.30001676: {} + chai@5.1.2: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -6087,10 +5595,10 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - char-regex@1.0.2: {} - character-entities@2.0.2: {} + check-error@2.1.1: {} + chownr@2.0.0: {} chrome-trace-event@1.0.3: {} @@ -6099,8 +5607,6 @@ snapshots: ci-info@3.9.0: {} - cjs-module-lexer@1.2.3: {} - clean-css@5.3.3: dependencies: source-map: 0.6.1 @@ -6141,10 +5647,6 @@ snapshots: clsx@2.1.1: {} - co@4.6.0: {} - - collect-v8-coverage@1.0.2: {} - color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -6214,8 +5716,6 @@ snapshots: console-control-strings@1.1.0: {} - convert-source-map@2.0.0: {} - cookie@1.0.2: {} copy-webpack-plugin@12.0.2(webpack@5.98.0): @@ -6254,21 +5754,6 @@ snapshots: buffer: 5.7.1 optional: true - create-jest@29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - create-require@1.1.1: {} cross-spawn@7.0.6: @@ -6296,7 +5781,7 @@ snapshots: optionalDependencies: webpack: 5.98.0(webpack-cli@6.0.1) - css-minimizer-webpack-plugin@7.0.0(webpack@5.98.0): + css-minimizer-webpack-plugin@7.0.0(lightningcss@1.29.1)(webpack@5.98.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 cssnano: 7.0.6(postcss@8.5.2) @@ -6305,6 +5790,8 @@ snapshots: schema-utils: 4.2.0 serialize-javascript: 6.0.2 webpack: 5.98.0(webpack-cli@6.0.1) + optionalDependencies: + lightningcss: 1.29.1 css-select@4.3.0: dependencies: @@ -6390,13 +5877,16 @@ snapshots: dependencies: css-tree: 2.2.1 - cssom@0.3.8: {} + cssom@0.3.8: + optional: true - cssom@0.5.0: {} + cssom@0.5.0: + optional: true cssstyle@2.3.0: dependencies: cssom: 0.3.8 + optional: true csstype@3.1.3: {} @@ -6405,6 +5895,7 @@ snapshots: abab: 2.0.6 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 + optional: true date-fns@4.1.0: {} @@ -6412,7 +5903,12 @@ snapshots: dependencies: ms: 2.1.2 - decimal.js@10.4.3: {} + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decimal.js@10.4.3: + optional: true decode-named-character-reference@1.0.2: dependencies: @@ -6422,7 +5918,7 @@ snapshots: dependencies: mimic-response: 3.1.0 - dedent@1.5.1: {} + deep-eql@5.0.2: {} deepmerge@4.3.1: {} @@ -6456,13 +5952,9 @@ snapshots: detect-libc@2.0.3: {} - detect-newline@3.1.0: {} - detect-node@2.1.0: optional: true - diff-sequences@29.6.3: {} - diff@4.0.2: {} diff@5.2.0: {} @@ -6527,6 +6019,7 @@ snapshots: domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 + optional: true domhandler@4.3.1: dependencies: @@ -6647,8 +6140,6 @@ snapshots: transitivePeerDependencies: - supports-color - emittery@0.13.1: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -6696,15 +6187,43 @@ snapshots: es-module-lexer@1.5.0: {} + es-module-lexer@1.6.0: {} + es6-error@4.1.1: optional: true + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: optional: true @@ -6715,13 +6234,15 @@ snapshots: esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 + optional: true eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - esprima@4.0.1: {} + esprima@4.0.1: + optional: true esrecurse@4.3.0: dependencies: @@ -6731,31 +6252,16 @@ snapshots: estraverse@5.3.0: {} - esutils@2.0.3: {} - - events@3.3.0: {} - - execa@5.1.1: + estree-walker@3.0.3: dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 + '@types/estree': 1.0.6 - exit@0.1.2: {} + esutils@2.0.3: + optional: true - expect@29.7.0: - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 + events@3.3.0: {} + + expect-type@1.1.0: {} exponential-backoff@3.1.1: {} @@ -6794,14 +6300,16 @@ snapshots: dependencies: reusify: 1.0.4 - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - fd-slicer@1.1.0: dependencies: pend: 1.2.0 + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fflate@0.8.2: {} + filelist@1.0.4: dependencies: minimatch: 5.1.6 @@ -6821,6 +6329,8 @@ snapshots: flat@5.0.2: {} + flatted@3.3.2: {} + focus-visible@5.2.1: {} follow-redirects@1.15.6: {} @@ -6887,8 +6397,6 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 - gensync@1.0.0-beta.2: {} - get-caller-file@2.0.5: {} get-intrinsic@1.2.4: @@ -6900,14 +6408,10 @@ snapshots: hasown: 2.0.2 optional: true - get-package-type@0.1.0: {} - get-stream@5.2.0: dependencies: pump: 3.0.0 - get-stream@6.0.1: {} - github-url-to-object@4.0.6: dependencies: is-url: 1.2.4 @@ -6967,8 +6471,6 @@ snapshots: serialize-error: 7.0.1 optional: true - globals@11.12.0: {} - globalthis@1.0.3: dependencies: define-properties: 1.2.1 @@ -7047,8 +6549,7 @@ snapshots: html-encoding-sniffer@3.0.0: dependencies: whatwg-encoding: 2.0.0 - - html-escaper@2.0.2: {} + optional: true html-minifier-terser@6.1.0: dependencies: @@ -7113,8 +6614,6 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@2.1.0: {} - humanize-ms@1.2.1: dependencies: ms: 2.1.2 @@ -7183,383 +6682,63 @@ snapshots: dependencies: hasown: 2.0.2 - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-generator-fn@2.1.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-interactive@1.0.0: {} - - is-lambda@1.0.1: {} - - is-node-process@1.2.0: {} - - is-number@7.0.0: {} - - is-plain-obj@4.1.0: {} - - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 - - is-potential-custom-element-name@1.0.1: {} - - is-stream@2.0.1: {} - - is-unicode-supported@0.1.0: {} - - is-url@1.2.4: {} - - isarray@1.0.0: {} - - isbinaryfile@4.0.10: {} - - isbinaryfile@5.0.2: {} - - isexe@2.0.0: {} - - isobject@3.0.1: {} - - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.24.3 - '@babel/parser': 7.24.1 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-instrument@6.0.2: - dependencies: - '@babel/core': 7.24.3 - '@babel/parser': 7.24.1 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.7.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@4.0.1: - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.7: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jackspeak@4.0.1: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jake@10.8.7: - dependencies: - async: 3.2.5 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - jest-changed-files@29.7.0: - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - - jest-circus@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.2 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.5.1 - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.1.0 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)) - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-config@29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)): - dependencies: - '@babel/core': 7.24.3 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.3) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.13.2 - ts-node: 10.9.2(@types/node@22.13.2)(typescript@5.7.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-docblock@29.7.0: - dependencies: - detect-newline: 3.1.0 - - jest-each@29.7.0: - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - - jest-environment-jsdom@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/jsdom': 20.0.1 - '@types/node': 22.13.2 - jest-mock: 29.7.0 - jest-util: 29.7.0 - jsdom: 20.0.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.2 - jest-mock: 29.7.0 - jest-util: 29.7.0 + is-extglob@2.1.1: {} - jest-get-type@29.6.3: {} + is-fullwidth-code-point@3.0.0: {} - jest-haste-map@29.7.0: + is-glob@4.0.3: dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 22.13.2 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 + is-extglob: 2.1.1 - jest-leak-detector@29.7.0: - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + is-interactive@1.0.0: {} - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + is-lambda@1.0.1: {} - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.24.2 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 + is-node-process@1.2.0: {} + + is-number@7.0.0: {} + + is-plain-obj@4.1.0: {} - jest-mock@29.7.0: + is-plain-object@2.0.4: dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.13.2 - jest-util: 29.7.0 + isobject: 3.0.1 - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: - jest-resolve: 29.7.0 + is-potential-custom-element-name@1.0.1: + optional: true - jest-regex-util@29.6.3: {} + is-unicode-supported@0.1.0: {} - jest-resolve-dependencies@29.7.0: - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color + is-url@1.2.4: {} - jest-resolve@29.7.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.8 - resolve.exports: 2.0.2 - slash: 3.0.0 + isarray@1.0.0: {} + + isbinaryfile@4.0.10: {} + + isbinaryfile@5.0.2: {} + + isexe@2.0.0: {} + + isobject@3.0.1: {} - jest-runner@29.7.0: + jackspeak@3.4.3: dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.2 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 - jest-runtime@29.7.0: + jackspeak@4.0.1: dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.2 - chalk: 4.1.2 - cjs-module-lexer: 1.2.3 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 - jest-snapshot@29.7.0: + jake@10.8.7: dependencies: - '@babel/core': 7.24.3 - '@babel/generator': 7.24.1 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.3) - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.3) - '@babel/types': 7.24.0 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.3) + async: 3.2.5 chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.7.1 - transitivePeerDependencies: - - supports-color + filelist: 1.0.4 + minimatch: 3.1.2 jest-util@29.7.0: dependencies: @@ -7570,26 +6749,6 @@ snapshots: graceful-fs: 4.2.11 picomatch: 2.3.1 - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-watcher@29.7.0: - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.2 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - jest-worker@27.5.1: dependencies: '@types/node': 22.13.2 @@ -7603,29 +6762,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)) - '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jiti@1.21.0: {} jiti@2.4.2: {} js-tokens@4.0.0: {} - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -7635,7 +6777,7 @@ snapshots: jsdom@20.0.3: dependencies: abab: 2.0.6 - acorn: 8.11.3 + acorn: 8.14.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -7664,8 +6806,7 @@ snapshots: - bufferutil - supports-color - utf-8-validate - - jsesc@2.5.2: {} + optional: true json-buffer@3.0.1: {} @@ -7701,8 +6842,6 @@ snapshots: kind-of@6.0.3: {} - kleur@3.0.3: {} - kleur@4.1.5: {} lazy-val@1.0.5: {} @@ -7711,8 +6850,6 @@ snapshots: dependencies: readable-stream: 2.3.8 - leven@3.1.0: {} - lightningcss-darwin-arm64@1.29.1: optional: true @@ -7801,6 +6938,8 @@ snapshots: dependencies: js-tokens: 4.0.0 + loupe@3.1.3: {} + lower-case@2.0.2: dependencies: tslib: 2.6.2 @@ -7811,10 +6950,6 @@ snapshots: lru-cache@11.0.0: {} - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -7823,9 +6958,9 @@ snapshots: lz-string@1.5.0: {} - make-dir@4.0.0: + magic-string@0.30.17: dependencies: - semver: 7.7.1 + '@jridgewell/sourcemap-codec': 1.5.0 make-error@1.3.6: {} @@ -7851,10 +6986,6 @@ snapshots: - bluebird - supports-color - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 @@ -8128,11 +7259,13 @@ snapshots: mri@1.2.0: {} + mrmime@2.0.0: {} + ms@2.1.2: {} - nanoid@3.3.8: {} + ms@2.1.3: {} - natural-compare@1.4.0: {} + nanoid@3.3.8: {} negotiator@0.6.3: {} @@ -8177,8 +7310,6 @@ snapshots: - bluebird - supports-color - node-int64@0.4.0: {} - node-releases@2.0.18: {} nopt@6.0.0: @@ -8189,10 +7320,6 @@ snapshots: normalize-url@6.1.0: {} - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - npmlog@6.0.2: dependencies: are-we-there-yet: 3.0.1 @@ -8204,7 +7331,8 @@ snapshots: dependencies: boolbase: 1.0.0 - nwsapi@2.2.7: {} + nwsapi@2.2.7: + optional: true object-assign@4.1.1: {} @@ -8274,6 +7402,7 @@ snapshots: parse5@7.1.2: dependencies: entities: 4.5.0 + optional: true pascal-case@3.1.2: dependencies: @@ -8300,6 +7429,10 @@ snapshots: path-type@5.0.0: {} + pathe@2.0.3: {} + + pathval@2.0.0: {} + pe-library@0.4.1: {} pend@1.2.0: {} @@ -8308,7 +7441,7 @@ snapshots: picomatch@2.3.1: {} - pirates@4.0.6: {} + picomatch@4.0.2: {} pkg-dir@4.2.0: dependencies: @@ -8536,12 +7669,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.2.0 - process-nextick-args@2.0.1: {} progress@2.0.3: {} @@ -8553,11 +7680,6 @@ snapshots: err-code: 2.0.3 retry: 0.12.0 - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -8570,7 +7692,8 @@ snapshots: proxy-from-env@1.1.0: {} - psl@1.9.0: {} + psl@1.9.0: + optional: true pump@3.0.0: dependencies: @@ -8579,9 +7702,8 @@ snapshots: punycode@2.3.1: {} - pure-rand@6.1.0: {} - - querystringify@2.2.0: {} + querystringify@2.2.0: + optional: true queue-microtask@1.2.3: {} @@ -8718,7 +7840,8 @@ snapshots: require-from-string@2.0.2: {} - requires-port@1.0.0: {} + requires-port@1.0.0: + optional: true resedit@1.7.1: dependencies: @@ -8734,8 +7857,6 @@ snapshots: resolve-from@5.0.0: {} - resolve.exports@2.0.2: {} - resolve@1.22.8: dependencies: is-core-module: 2.13.1 @@ -8774,6 +7895,31 @@ snapshots: sprintf-js: 1.1.3 optional: true + rollup@4.34.7: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.7 + '@rollup/rollup-android-arm64': 4.34.7 + '@rollup/rollup-darwin-arm64': 4.34.7 + '@rollup/rollup-darwin-x64': 4.34.7 + '@rollup/rollup-freebsd-arm64': 4.34.7 + '@rollup/rollup-freebsd-x64': 4.34.7 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.7 + '@rollup/rollup-linux-arm-musleabihf': 4.34.7 + '@rollup/rollup-linux-arm64-gnu': 4.34.7 + '@rollup/rollup-linux-arm64-musl': 4.34.7 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.7 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.7 + '@rollup/rollup-linux-riscv64-gnu': 4.34.7 + '@rollup/rollup-linux-s390x-gnu': 4.34.7 + '@rollup/rollup-linux-x64-gnu': 4.34.7 + '@rollup/rollup-linux-x64-musl': 4.34.7 + '@rollup/rollup-win32-arm64-msvc': 4.34.7 + '@rollup/rollup-win32-ia32-msvc': 4.34.7 + '@rollup/rollup-win32-x64-msvc': 4.34.7 + fsevents: 2.3.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -8801,6 +7947,7 @@ snapshots: saxes@6.0.0: dependencies: xmlchars: 2.2.0 + optional: true scheduler@0.25.0: {} @@ -8852,6 +7999,8 @@ snapshots: shell-quote@1.8.1: {} + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -8860,9 +8009,11 @@ snapshots: dependencies: semver: 7.7.1 - sisteransi@1.0.5: {} - - slash@3.0.0: {} + sirv@3.0.0: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 slash@5.1.0: {} @@ -8890,11 +8041,6 @@ snapshots: source-map-js@1.2.1: {} - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -8906,26 +8052,19 @@ snapshots: space-separated-tokens@2.0.2: {} - sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} ssri@9.0.1: dependencies: minipass: 3.3.6 - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 + stackback@0.0.2: {} stat-mode@1.0.0: {} - strict-event-emitter@0.5.1: {} + std-env@3.8.0: {} - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 + strict-event-emitter@0.5.1: {} string-width@4.2.3: dependencies: @@ -8955,12 +8094,6 @@ snapshots: dependencies: ansi-regex: 6.0.1 - strip-bom@4.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-json-comments@3.1.1: {} - style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 @@ -9033,7 +8166,8 @@ snapshots: csso: 5.0.5 picocolors: 1.1.1 - symbol-tree@3.2.4: {} + symbol-tree@3.2.4: + optional: true tailwind-merge@3.0.1: {} @@ -9086,13 +8220,22 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - test-exclude@6.0.0: + tiny-typed-emitter@2.1.0: {} + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.10: dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 - tiny-typed-emitter@2.1.0: {} + tinypool@1.0.2: {} + + tinyrainbow@2.0.0: {} + + tinyspy@3.0.2: {} tmp-promise@3.0.3: dependencies: @@ -9100,24 +8243,24 @@ snapshots: tmp@0.2.3: {} - tmpl@1.0.5: {} - - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + totalist@3.0.1: {} + tough-cookie@4.1.3: dependencies: psl: 1.9.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 + optional: true tr46@3.0.0: dependencies: punycode: 2.3.1 + optional: true tree-kill@1.2.2: {} @@ -9129,25 +8272,6 @@ snapshots: dependencies: utf8-byte-length: 1.0.4 - ts-jest@29.2.5(@babel/core@7.24.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.3))(jest@29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)))(typescript@5.7.3): - dependencies: - bs-logger: 0.2.6 - ejs: 3.1.10 - fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.13.2)(ts-node@10.9.2(@types/node@22.13.2)(typescript@5.7.3)) - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.1 - typescript: 5.7.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.24.3 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.3) - ts-loader@9.5.2(typescript@5.7.3)(webpack@5.98.0): dependencies: chalk: 4.1.2 @@ -9180,13 +8304,9 @@ snapshots: turbo-stream@2.4.0: {} - type-detect@4.0.8: {} - type-fest@0.13.1: optional: true - type-fest@0.21.3: {} - typescript@5.7.3: {} undici-types@6.19.8: {} @@ -9240,7 +8360,8 @@ snapshots: universalify@0.1.2: {} - universalify@0.2.0: {} + universalify@0.2.0: + optional: true universalify@2.0.1: {} @@ -9263,6 +8384,7 @@ snapshots: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 + optional: true utf8-byte-length@1.0.4: {} @@ -9279,12 +8401,6 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - v8-to-istanbul@9.2.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - verror@1.10.1: dependencies: assert-plus: 1.0.0 @@ -9304,13 +8420,84 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - w3c-xmlserializer@4.0.0: + vite-node@3.0.5(@types/node@22.13.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0): dependencies: - xml-name-validator: 4.0.0 + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 6.1.0(@types/node@22.13.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@6.1.0(@types/node@22.13.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0): + dependencies: + esbuild: 0.24.2 + postcss: 8.5.2 + rollup: 4.34.7 + optionalDependencies: + '@types/node': 22.13.2 + fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.29.1 + terser: 5.37.0 + + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.2)(@vitest/ui@3.0.5)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.1)(terser@5.37.0): + dependencies: + '@vitest/expect': 3.0.5 + '@vitest/mocker': 3.0.5(vite@6.1.0(@types/node@22.13.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0)) + '@vitest/pretty-format': 3.0.5 + '@vitest/runner': 3.0.5 + '@vitest/snapshot': 3.0.5 + '@vitest/spy': 3.0.5 + '@vitest/utils': 3.0.5 + chai: 5.1.2 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.1.0(@types/node@22.13.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0) + vite-node: 3.0.5(@types/node@22.13.2)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.37.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 22.13.2 + '@vitest/ui': 3.0.5(vitest@3.0.5) + jsdom: 20.0.3 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml - walker@1.0.8: + w3c-xmlserializer@4.0.0: dependencies: - makeerror: 1.0.12 + xml-name-validator: 4.0.0 + optional: true watchpack@2.4.1: dependencies: @@ -9321,7 +8508,8 @@ snapshots: dependencies: defaults: 1.0.4 - webidl-conversions@7.0.0: {} + webidl-conversions@7.0.0: + optional: true webpack-cli@6.0.1(webpack@5.98.0): dependencies: @@ -9383,18 +8571,26 @@ snapshots: whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 + optional: true - whatwg-mimetype@3.0.0: {} + whatwg-mimetype@3.0.0: + optional: true whatwg-url@11.0.0: dependencies: tr46: 3.0.0 webidl-conversions: 7.0.0 + optional: true which@2.0.2: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + wide-align@1.1.5: dependencies: string-width: 4.2.3 @@ -9415,23 +8611,19 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - - ws@8.18.0: {} + ws@8.18.0: + optional: true - xml-name-validator@4.0.0: {} + xml-name-validator@4.0.0: + optional: true xmlbuilder@15.1.1: {} - xmlchars@2.2.0: {} + xmlchars@2.2.0: + optional: true y18n@5.0.8: {} - yallist@3.1.1: {} - yallist@4.0.0: {} yargs-parser@21.1.1: {} diff --git a/src/main/menu.test.ts b/src/main/menu.test.ts index dfea5a3f3..7a5317e7c 100644 --- a/src/main/menu.test.ts +++ b/src/main/menu.test.ts @@ -2,11 +2,11 @@ import { Menu, MenuItem } from 'electron'; import type { Menubar } from 'menubar'; import MenuBuilder from './menu'; -jest.mock('electron', () => ({ +vi.mock('electron', () => ({ Menu: { - buildFromTemplate: jest.fn(), + buildFromTemplate: vi.fn(), }, - MenuItem: jest.fn(), + MenuItem: vi.fn(), })); describe('main/menu.ts', () => { diff --git a/src/renderer/__helpers__/jest.setup.ts b/src/renderer/__helpers__/vitest.setup.ts similarity index 52% rename from src/renderer/__helpers__/jest.setup.ts rename to src/renderer/__helpers__/vitest.setup.ts index 658eb3613..2c75ef372 100644 --- a/src/renderer/__helpers__/jest.setup.ts +++ b/src/renderer/__helpers__/vitest.setup.ts @@ -1,15 +1,3 @@ -import { TextDecoder, TextEncoder } from 'node:util'; - -if (!global.TextEncoder || !global.TextDecoder) { - /** - * Prevent the following errors with jest: - * - ReferenceError: TextEncoder is not defined - * - ReferenceError: TextDecoder is not defined - */ - global.TextEncoder = TextEncoder; - global.TextDecoder = TextDecoder; -} - // Mock OAuth client ID and secret process.env.OAUTH_CLIENT_ID = 'FAKE_CLIENT_ID_123'; process.env.OAUTH_CLIENT_SECRET = 'FAKE_CLIENT_SECRET_123'; diff --git a/src/renderer/__mocks__/@electron/remote.js b/src/renderer/__mocks__/@electron/remote.js index 6e148d15c..c3a9798fd 100644 --- a/src/renderer/__mocks__/@electron/remote.js +++ b/src/renderer/__mocks__/@electron/remote.js @@ -8,29 +8,29 @@ class BrowserWindow { // biome-ignore lint/correctness/noConstructorReturn: This is a mock class return instance; } - loadURL = jest.fn(); + loadURL = vi.fn(); webContents = { on: () => {}, session: { - clearStorageData: jest.fn(), + clearStorageData: vi.fn(), }, }; on() {} - close = jest.fn(); - hide = jest.fn(); - destroy = jest.fn(); + close = vi.fn(); + hide = vi.fn(); + destroy = vi.fn(); } const dialog = { - showErrorBox: jest.fn(), + showErrorBox: vi.fn(), }; module.exports = { BrowserWindow: BrowserWindow, dialog: dialog, app: { - getLoginItemSettings: jest.fn(), + getLoginItemSettings: vi.fn(), setLoginItemSettings: () => {}, }, - getCurrentWindow: jest.fn(() => instance || new BrowserWindow()), + getCurrentWindow: vi.fn(() => instance || new BrowserWindow()), }; diff --git a/src/renderer/__mocks__/electron.js b/src/renderer/__mocks__/electron.js index 2a8783e58..70796163b 100644 --- a/src/renderer/__mocks__/electron.js +++ b/src/renderer/__mocks__/electron.js @@ -5,7 +5,7 @@ window.Notification = function (title) { this.title = title; return { - onclick: jest.fn(), + onclick: vi.fn(), }; }; @@ -27,17 +27,17 @@ window.localStorage = { setItem: function (key, item) { this.store[key] = item; }, - removeItem: jest.fn(), + removeItem: vi.fn(), }; -window.alert = jest.fn(); +window.alert = vi.fn(); module.exports = { ipcRenderer: { - send: jest.fn(), - on: jest.fn(), - sendSync: jest.fn(), - invoke: jest.fn((channel, ..._args) => { + send: vi.fn(), + on: vi.fn(), + sendSync: vi.fn(), + invoke: vi.fn((channel, ..._args) => { switch (channel) { case 'get-platform': return Promise.resolve('darwin'); @@ -53,10 +53,10 @@ module.exports = { }), }, shell: { - openExternal: jest.fn(), + openExternal: vi.fn(), }, webFrame: { - setZoomLevel: jest.fn(), - getZoomLevel: jest.fn(), + setZoomLevel: vi.fn(), + getZoomLevel: vi.fn(), }, }; diff --git a/src/renderer/__mocks__/utils.ts b/src/renderer/__mocks__/utils.ts index 2b832d466..8db70715c 100644 --- a/src/renderer/__mocks__/utils.ts +++ b/src/renderer/__mocks__/utils.ts @@ -2,5 +2,5 @@ * Ensure stable snapshots for our randomized emoji use-cases */ export function ensureStableEmojis() { - global.Math.random = jest.fn(() => 0.1); + global.Math.random = vi.fn(() => 0.1); } diff --git a/src/renderer/components/Sidebar.test.tsx b/src/renderer/components/Sidebar.test.tsx index cb80eb6e1..fe75316f6 100644 --- a/src/renderer/components/Sidebar.test.tsx +++ b/src/renderer/components/Sidebar.test.tsx @@ -6,20 +6,20 @@ import { AppContext } from '../context/App'; import * as comms from '../utils/comms'; import { Sidebar } from './Sidebar'; -const mockNavigate = jest.fn(); -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), +const mockNavigate = vi.fn(); +vi.mock('react-router-dom', async () => ({ + ...(await vi.importActual('react-router-dom')), useNavigate: () => mockNavigate, })); describe('renderer/components/Sidebar.tsx', () => { - const fetchNotifications = jest.fn(); - const openExternalLinkMock = jest + const fetchNotifications = vi.fn(); + const openExternalLinkMock = vi .spyOn(comms, 'openExternalLink') - .mockImplementation(); + .mockImplementation(vi.fn()); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('should render itself & its children (logged in)', () => { @@ -332,7 +332,7 @@ describe('renderer/components/Sidebar.tsx', () => { }); it('should quit the app', () => { - const quitAppMock = jest.spyOn(comms, 'quitApp'); + const quitAppMock = vi.spyOn(comms, 'quitApp'); render( should render itself & its children - no filters 1`] = ` { "asFragment": [Function], "baseElement": @@ -151,7 +151,7 @@ exports[`renderer/components/AllRead.tsx should render itself & its children - n } `; -exports[`renderer/components/AllRead.tsx should render itself & its children - with filters 1`] = ` +exports[`renderer/components/AllRead.tsx > should render itself & its children - with filters 1`] = ` { "asFragment": [Function], "baseElement": diff --git a/src/renderer/components/__snapshots__/Oops.test.tsx.snap b/src/renderer/components/__snapshots__/Oops.test.tsx.snap index 6a5f779a7..88f6a9851 100644 --- a/src/renderer/components/__snapshots__/Oops.test.tsx.snap +++ b/src/renderer/components/__snapshots__/Oops.test.tsx.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`renderer/components/Oops.tsx should render itself & its children - fallback to unknown error 1`] = ` +exports[`renderer/components/Oops.tsx > should render itself & its children - fallback to unknown error 1`] = ` { "asFragment": [Function], "baseElement": @@ -161,7 +161,7 @@ exports[`renderer/components/Oops.tsx should render itself & its children - fall } `; -exports[`renderer/components/Oops.tsx should render itself & its children - specified error 1`] = ` +exports[`renderer/components/Oops.tsx > should render itself & its children - specified error 1`] = ` { "asFragment": [Function], "baseElement": diff --git a/src/renderer/components/__snapshots__/Sidebar.test.tsx.snap b/src/renderer/components/__snapshots__/Sidebar.test.tsx.snap index d487e1002..620edbeb5 100644 --- a/src/renderer/components/__snapshots__/Sidebar.test.tsx.snap +++ b/src/renderer/components/__snapshots__/Sidebar.test.tsx.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`renderer/components/Sidebar.tsx notifications icon renders correct icon when there are no notifications 1`] = ` +exports[`renderer/components/Sidebar.tsx > notifications icon > renders correct icon when there are no notifications 1`] = ` diff --git a/src/renderer/context/App.test.tsx b/src/renderer/context/App.test.tsx index 237117517..7a6410766 100644 --- a/src/renderer/context/App.test.tsx +++ b/src/renderer/context/App.test.tsx @@ -11,7 +11,7 @@ import * as notifications from '../utils/notifications/notifications'; import * as storage from '../utils/storage'; import { AppContext, AppProvider, defaultSettings } from './App'; -jest.mock('../hooks/useNotifications'); +vi.mock('../hooks/useNotifications'); const customRender = ( ui, @@ -27,25 +27,25 @@ const customRender = ( describe('renderer/context/App.tsx', () => { beforeEach(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); - jest.clearAllMocks(); + vi.clearAllTimers(); + vi.clearAllMocks(); }); describe('notification methods', () => { - const getNotificationCountMock = jest.spyOn( + const getNotificationCountMock = vi.spyOn( notifications, 'getNotificationCount', ); getNotificationCountMock.mockReturnValue(1); - const fetchNotificationsMock = jest.fn(); - const markNotificationsAsReadMock = jest.fn(); - const markNotificationsAsDoneMock = jest.fn(); - const unsubscribeNotificationMock = jest.fn(); + const fetchNotificationsMock = vi.fn(); + const markNotificationsAsReadMock = vi.fn(); + const markNotificationsAsDoneMock = vi.fn(); + const unsubscribeNotificationMock = vi.fn(); const mockDefaultState = { auth: { accounts: [] }, @@ -53,7 +53,7 @@ describe('renderer/context/App.tsx', () => { }; beforeEach(() => { - (useNotifications as jest.Mock).mockReturnValue({ + (useNotifications as vi.Mock).mockReturnValue({ fetchNotifications: fetchNotificationsMock, markNotificationsAsRead: markNotificationsAsReadMock, markNotificationsAsDone: markNotificationsAsDoneMock, @@ -62,7 +62,7 @@ describe('renderer/context/App.tsx', () => { }); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('fetch notifications every minute', async () => { @@ -75,19 +75,19 @@ describe('renderer/context/App.tsx', () => { ); act(() => { - jest.advanceTimersByTime(Constants.FETCH_NOTIFICATIONS_INTERVAL); + vi.advanceTimersByTime(Constants.FETCH_NOTIFICATIONS_INTERVAL); return; }); expect(fetchNotificationsMock).toHaveBeenCalledTimes(2); act(() => { - jest.advanceTimersByTime(Constants.FETCH_NOTIFICATIONS_INTERVAL); + vi.advanceTimersByTime(Constants.FETCH_NOTIFICATIONS_INTERVAL); return; }); expect(fetchNotificationsMock).toHaveBeenCalledTimes(3); act(() => { - jest.advanceTimersByTime(Constants.FETCH_NOTIFICATIONS_INTERVAL); + vi.advanceTimersByTime(Constants.FETCH_NOTIFICATIONS_INTERVAL); return; }); expect(fetchNotificationsMock).toHaveBeenCalledTimes(4); @@ -190,11 +190,11 @@ describe('renderer/context/App.tsx', () => { }); describe('authentication methods', () => { - const apiRequestAuthMock = jest.spyOn(apiRequests, 'apiRequestAuth'); - const fetchNotificationsMock = jest.fn(); + const apiRequestAuthMock = vi.spyOn(apiRequests, 'apiRequestAuth'); + const fetchNotificationsMock = vi.fn(); beforeEach(() => { - (useNotifications as jest.Mock).mockReturnValue({ + (useNotifications as vi.Mock).mockReturnValue({ fetchNotifications: fetchNotificationsMock, }); }); @@ -243,18 +243,18 @@ describe('renderer/context/App.tsx', () => { }); describe('settings methods', () => { - const fetchNotificationsMock = jest.fn(); + const fetchNotificationsMock = vi.fn(); beforeEach(() => { - (useNotifications as jest.Mock).mockReturnValue({ + (useNotifications as vi.Mock).mockReturnValue({ fetchNotifications: fetchNotificationsMock, }); }); it('should call updateSetting', async () => { - const saveStateMock = jest + const saveStateMock = vi .spyOn(storage, 'saveState') - .mockImplementation(jest.fn()); + .mockImplementation(vi.fn()); const TestComponent = () => { const { updateSetting } = useContext(AppContext); @@ -287,10 +287,10 @@ describe('renderer/context/App.tsx', () => { }); it('should call updateSetting and set auto launch(openAtStartup)', async () => { - const setAutoLaunchMock = jest.spyOn(comms, 'setAutoLaunch'); - const saveStateMock = jest + const setAutoLaunchMock = vi.spyOn(comms, 'setAutoLaunch'); + const saveStateMock = vi .spyOn(storage, 'saveState') - .mockImplementation(jest.fn()); + .mockImplementation(vi.fn()); const TestComponent = () => { const { updateSetting } = useContext(AppContext); @@ -325,9 +325,9 @@ describe('renderer/context/App.tsx', () => { }); it('should clear filters back to default', async () => { - const saveStateMock = jest + const saveStateMock = vi .spyOn(storage, 'saveState') - .mockImplementation(jest.fn()); + .mockImplementation(vi.fn()); const TestComponent = () => { const { clearFilters } = useContext(AppContext); @@ -360,9 +360,9 @@ describe('renderer/context/App.tsx', () => { }); it('should call resetSettings', async () => { - const saveStateMock = jest + const saveStateMock = vi .spyOn(storage, 'saveState') - .mockImplementation(jest.fn()); + .mockImplementation(vi.fn()); const TestComponent = () => { const { resetSettings } = useContext(AppContext); diff --git a/src/renderer/hooks/useNotifications.test.ts b/src/renderer/hooks/useNotifications.test.ts index be6a26e48..7b173addf 100644 --- a/src/renderer/hooks/useNotifications.test.ts +++ b/src/renderer/hooks/useNotifications.test.ts @@ -17,7 +17,7 @@ import { Errors } from '../utils/errors'; import { useNotifications } from './useNotifications'; describe('renderer/hooks/useNotifications.ts', () => { - const logErrorSpy = jest.spyOn(logger, 'logError').mockImplementation(); + const logErrorSpy = vi.spyOn(logger, 'logError').mockImplementation(); beforeEach(() => { // axios will default to using the XHR adapter which can't be intercepted diff --git a/src/renderer/routes/Accounts.test.tsx b/src/renderer/routes/Accounts.test.tsx index e3ed4afbc..52d226351 100644 --- a/src/renderer/routes/Accounts.test.tsx +++ b/src/renderer/routes/Accounts.test.tsx @@ -23,15 +23,15 @@ import * as links from '../utils/links'; import * as storage from '../utils/storage'; import { AccountsRoute } from './Accounts'; -const mockNavigate = jest.fn(); -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), +const mockNavigate = vi.fn(); +vi.mock('react-router-dom', async () => ({ + ...(await vi.importActual('react-router-dom')), useNavigate: () => mockNavigate, })); describe('renderer/routes/Accounts.tsx', () => { afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); describe('General', () => { @@ -84,9 +84,9 @@ describe('renderer/routes/Accounts.tsx', () => { describe('Account interactions', () => { it('open profile in external browser', async () => { - const openAccountProfileMock = jest + const openAccountProfileMock = vi .spyOn(links, 'openAccountProfile') - .mockImplementation(); + .mockImplementation(vi.fn()); await act(async () => { render( @@ -114,9 +114,9 @@ describe('renderer/routes/Accounts.tsx', () => { }); it('open host in external browser', async () => { - const openExternalLinkMock = jest + const openExternalLinkMock = vi .spyOn(comms, 'openExternalLink') - .mockImplementation(); + .mockImplementation(vi.fn()); await act(async () => { render( @@ -142,9 +142,9 @@ describe('renderer/routes/Accounts.tsx', () => { }); it('open developer settings in external browser', async () => { - const openExternalLinkMock = jest + const openExternalLinkMock = vi .spyOn(comms, 'openExternalLink') - .mockImplementation(); + .mockImplementation(vi.fn()); await act(async () => { render( @@ -172,9 +172,9 @@ describe('renderer/routes/Accounts.tsx', () => { }); it('should render with PAT scopes warning', async () => { - const openExternalLinkMock = jest + const openExternalLinkMock = vi .spyOn(comms, 'openExternalLink') - .mockImplementation(); + .mockImplementation(vi.fn()); await act(async () => { render( @@ -211,9 +211,9 @@ describe('renderer/routes/Accounts.tsx', () => { }); it('should set account as primary account', async () => { - const saveStateMock = jest + const saveStateMock = vi .spyOn(storage, 'saveState') - .mockImplementation(); + .mockImplementation(vi.fn()); await act(async () => { render( @@ -244,7 +244,7 @@ describe('renderer/routes/Accounts.tsx', () => { }); it('should refresh account', async () => { - const apiRequestAuthMock = jest.spyOn(apiRequests, 'apiRequestAuth'); + const apiRequestAuthMock = vi.spyOn(apiRequests, 'apiRequestAuth'); await act(async () => { render( @@ -279,9 +279,9 @@ describe('renderer/routes/Accounts.tsx', () => { }); it('should logout', async () => { - const logoutFromAccountMock = jest.fn(); - const updateTrayIconMock = jest.spyOn(comms, 'updateTrayIcon'); - const updateTrayTitleMock = jest.spyOn(comms, 'updateTrayTitle'); + const logoutFromAccountMock = vi.fn(); + const updateTrayIconMock = vi.spyOn(comms, 'updateTrayIcon'); + const updateTrayTitleMock = vi.spyOn(comms, 'updateTrayTitle'); await act(async () => { render( @@ -315,7 +315,7 @@ describe('renderer/routes/Accounts.tsx', () => { describe('Add new accounts', () => { it('should show login with github app', async () => { - const mockLoginWithGitHubApp = jest.fn(); + const mockLoginWithGitHubApp = vi.fn(); await act(async () => { render( diff --git a/src/renderer/routes/Filters.test.tsx b/src/renderer/routes/Filters.test.tsx index 982fb9e62..d54303232 100644 --- a/src/renderer/routes/Filters.test.tsx +++ b/src/renderer/routes/Filters.test.tsx @@ -4,18 +4,18 @@ import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; import { FiltersRoute } from './Filters'; -const mockNavigate = jest.fn(); -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), +const mockNavigate = vi.fn(); +vi.mock('react-router-dom', async () => ({ + ...(await vi.importActual('react-router-dom')), useNavigate: () => mockNavigate, })); describe('renderer/routes/Filters.tsx', () => { - const clearFilters = jest.fn(); - const fetchNotifications = jest.fn(); + const clearFilters = vi.fn(); + const fetchNotifications = vi.fn(); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); describe('General', () => { diff --git a/src/renderer/routes/Login.test.tsx b/src/renderer/routes/Login.test.tsx index 5f83e6c32..5e7de22ff 100644 --- a/src/renderer/routes/Login.test.tsx +++ b/src/renderer/routes/Login.test.tsx @@ -4,15 +4,15 @@ import { AppContext } from '../context/App'; import * as comms from '../utils/comms'; import { LoginRoute } from './Login'; -const mockNavigate = jest.fn(); -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), +const mockNavigate = vi.fn(); +vi.mock('react-router-dom', async () => ({ + ...(await vi.importActual('react-router-dom')), useNavigate: () => mockNavigate, })); describe('renderer/routes/Login.tsx', () => { afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('should render itself & its children', () => { @@ -26,7 +26,7 @@ describe('renderer/routes/Login.tsx', () => { }); it('should redirect to notifications once logged in', () => { - const showWindowMock = jest.spyOn(comms, 'showWindow'); + const showWindowMock = vi.spyOn(comms, 'showWindow'); const { rerender } = render( @@ -49,7 +49,7 @@ describe('renderer/routes/Login.tsx', () => { }); it('should login with github', () => { - const mockLoginWithGitHubApp = jest.fn(); + const mockLoginWithGitHubApp = vi.fn(); render( ({ - ...jest.requireActual('react-router-dom'), +const mockNavigate = vi.fn(); +vi.mock('react-router-dom', async () => ({ + ...(await vi.importActual('react-router-dom')), useNavigate: () => mockNavigate, })); describe('renderer/routes/LoginWithOAuthApp.tsx', () => { - const mockLoginWithOAuthApp = jest.fn(); + const mockLoginWithOAuthApp = vi.fn(); - const openExternalLinkMock = jest + const openExternalLinkMock = vi .spyOn(comms, 'openExternalLink') - .mockImplementation(); + .mockImplementation(vi.fn()); const mockAuth: AuthState = { accounts: [], }; afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('renders correctly', () => { diff --git a/src/renderer/routes/LoginWithPersonalAccessToken.test.tsx b/src/renderer/routes/LoginWithPersonalAccessToken.test.tsx index a797413f8..9d4bfc959 100644 --- a/src/renderer/routes/LoginWithPersonalAccessToken.test.tsx +++ b/src/renderer/routes/LoginWithPersonalAccessToken.test.tsx @@ -7,20 +7,20 @@ import { validateForm, } from './LoginWithPersonalAccessToken'; -const mockNavigate = jest.fn(); -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), +const mockNavigate = vi.fn(); +vi.mock('react-router-dom', async () => ({ + ...(await vi.importActual('react-router-dom')), useNavigate: () => mockNavigate, })); describe('renderer/routes/LoginWithPersonalAccessToken.tsx', () => { - const mockLoginWithPersonalAccessToken = jest.fn(); - const openExternalLinkMock = jest + const mockLoginWithPersonalAccessToken = vi.fn(); + const openExternalLinkMock = vi .spyOn(comms, 'openExternalLink') - .mockImplementation(); + .mockImplementation(vi.fn()); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('renders correctly', () => { diff --git a/src/renderer/routes/Notifications.test.tsx b/src/renderer/routes/Notifications.test.tsx index f18b7c416..7c4bc8eaf 100644 --- a/src/renderer/routes/Notifications.test.tsx +++ b/src/renderer/routes/Notifications.test.tsx @@ -5,15 +5,15 @@ import { AppContext } from '../context/App'; import { Errors } from '../utils/errors'; import { NotificationsRoute } from './Notifications'; -jest.mock('../components/notifications/AccountNotifications', () => ({ +vi.mock('../components/notifications/AccountNotifications', () => ({ AccountNotifications: () =>

AccountNotifications

, })); -jest.mock('../components/AllRead', () => ({ +vi.mock('../components/AllRead', () => ({ AllRead: () =>

AllRead

, })); -jest.mock('../components/Oops', () => ({ +vi.mock('../components/Oops', () => ({ Oops: () =>

Oops

, })); diff --git a/src/renderer/routes/Settings.test.tsx b/src/renderer/routes/Settings.test.tsx index 6cbe069d3..efda21164 100644 --- a/src/renderer/routes/Settings.test.tsx +++ b/src/renderer/routes/Settings.test.tsx @@ -4,17 +4,17 @@ import { mockAuth, mockSettings } from '../__mocks__/state-mocks'; import { AppContext } from '../context/App'; import { SettingsRoute } from './Settings'; -const mockNavigate = jest.fn(); -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), +const mockNavigate = vi.fn(); +vi.mock('react-router-dom', async () => ({ + ...(await vi.importActual('react-router-dom')), useNavigate: () => mockNavigate, })); describe('renderer/routes/Settings.tsx', () => { - const fetchNotifications = jest.fn(); + const fetchNotifications = vi.fn(); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('should render itself & its children', async () => { diff --git a/src/renderer/routes/__snapshots__/Accounts.test.tsx.snap b/src/renderer/routes/__snapshots__/Accounts.test.tsx.snap index 98f87b3ce..ab07fb898 100644 --- a/src/renderer/routes/__snapshots__/Accounts.test.tsx.snap +++ b/src/renderer/routes/__snapshots__/Accounts.test.tsx.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`renderer/routes/Accounts.tsx Account interactions should render with PAT scopes warning 1`] = ` +exports[`renderer/routes/Accounts.tsx > Account interactions > should render with PAT scopes warning 1`] = `
`; -exports[`renderer/routes/Accounts.tsx Account interactions should set account as primary account 1`] = ` +exports[`renderer/routes/Accounts.tsx > Account interactions > should set account as primary account 1`] = `
`; -exports[`renderer/routes/Accounts.tsx General should render itself & its children 1`] = ` +exports[`renderer/routes/Accounts.tsx > General > should render itself & its children 1`] = `
General > should render itself & its children 1`] = `
should render itself & its children 1`] = ` { "asFragment": [Function], "baseElement": diff --git a/src/renderer/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap b/src/renderer/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap index 66e1e0673..d45ac0e5e 100644 --- a/src/renderer/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap +++ b/src/renderer/routes/__snapshots__/LoginWithOAuthApp.test.tsx.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`renderer/routes/LoginWithOAuthApp.tsx renders correctly 1`] = ` +exports[`renderer/routes/LoginWithOAuthApp.tsx > renders correctly 1`] = ` { "asFragment": [Function], "baseElement": diff --git a/src/renderer/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap b/src/renderer/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap index 2ddc00ac8..b99fb7ca5 100644 --- a/src/renderer/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap +++ b/src/renderer/routes/__snapshots__/LoginWithPersonalAccessToken.test.tsx.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`renderer/routes/LoginWithPersonalAccessToken.tsx renders correctly 1`] = ` +exports[`renderer/routes/LoginWithPersonalAccessToken.tsx > renders correctly 1`] = ` { "asFragment": [Function], "baseElement": diff --git a/src/renderer/routes/__snapshots__/Notifications.test.tsx.snap b/src/renderer/routes/__snapshots__/Notifications.test.tsx.snap index 05d667890..64a2958c5 100644 --- a/src/renderer/routes/__snapshots__/Notifications.test.tsx.snap +++ b/src/renderer/routes/__snapshots__/Notifications.test.tsx.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`renderer/routes/Notifications.tsx should render itself & its children (all read notifications) 1`] = ` +exports[`renderer/routes/Notifications.tsx > should render itself & its children (all read notifications) 1`] = ` { "asFragment": [Function], "baseElement": @@ -69,7 +69,7 @@ exports[`renderer/routes/Notifications.tsx should render itself & its children ( } `; -exports[`renderer/routes/Notifications.tsx should render itself & its children (error conditions - oops) bad credentials 1`] = ` +exports[`renderer/routes/Notifications.tsx > should render itself & its children (error conditions - oops) > bad credentials 1`] = ` { "asFragment": [Function], "baseElement": @@ -138,7 +138,7 @@ exports[`renderer/routes/Notifications.tsx should render itself & its children ( } `; -exports[`renderer/routes/Notifications.tsx should render itself & its children (error conditions - oops) default error 1`] = ` +exports[`renderer/routes/Notifications.tsx > should render itself & its children (error conditions - oops) > default error 1`] = ` { "asFragment": [Function], "baseElement": @@ -207,7 +207,7 @@ exports[`renderer/routes/Notifications.tsx should render itself & its children ( } `; -exports[`renderer/routes/Notifications.tsx should render itself & its children (error conditions - oops) missing scopes 1`] = ` +exports[`renderer/routes/Notifications.tsx > should render itself & its children (error conditions - oops) > missing scopes 1`] = ` { "asFragment": [Function], "baseElement": @@ -276,7 +276,7 @@ exports[`renderer/routes/Notifications.tsx should render itself & its children ( } `; -exports[`renderer/routes/Notifications.tsx should render itself & its children (error conditions - oops) rate limited 1`] = ` +exports[`renderer/routes/Notifications.tsx > should render itself & its children (error conditions - oops) > rate limited 1`] = ` { "asFragment": [Function], "baseElement": @@ -345,7 +345,7 @@ exports[`renderer/routes/Notifications.tsx should render itself & its children ( } `; -exports[`renderer/routes/Notifications.tsx should render itself & its children (error conditions - oops) unknown error 1`] = ` +exports[`renderer/routes/Notifications.tsx > should render itself & its children (error conditions - oops) > unknown error 1`] = ` { "asFragment": [Function], "baseElement": @@ -414,7 +414,7 @@ exports[`renderer/routes/Notifications.tsx should render itself & its children ( } `; -exports[`renderer/routes/Notifications.tsx should render itself & its children (show account header) 1`] = ` +exports[`renderer/routes/Notifications.tsx > should render itself & its children (show account header) 1`] = ` { "asFragment": [Function], "baseElement": @@ -493,7 +493,7 @@ exports[`renderer/routes/Notifications.tsx should render itself & its children ( } `; -exports[`renderer/routes/Notifications.tsx should render itself & its children (with notifications) 1`] = ` +exports[`renderer/routes/Notifications.tsx > should render itself & its children (with notifications) 1`] = ` { "asFragment": [Function], "baseElement": diff --git a/src/renderer/routes/__snapshots__/Settings.test.tsx.snap b/src/renderer/routes/__snapshots__/Settings.test.tsx.snap deleted file mode 100644 index 9945f806d..000000000 --- a/src/renderer/routes/__snapshots__/Settings.test.tsx.snap +++ /dev/null @@ -1,1387 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`renderer/routes/Settings.tsx should render itself & its children 1`] = ` -
-
-
- - -
-
- -

- Settings -

-
-
-
-
-
-
-
-
- -
-
- -

- Appearance -

-
-
-
-
-
- - - - - -
-
- -
- - - - -
-
-
- - -
- -
-
-
-
-
- -
-
- -

- Notifications -

-
-
-
-
-
- -
- - -
-
- - -
-
-
- - -
- -
-
-
- - -
- -
-
-
-
-
- - -
- -
-
-
- - -
- -
-
-
-
-
- - -
- -
-
-
- - -
- -
-
-
- - -
- -
-
-
- - -
- -
-
-
-
-
- -
-
- -

- System -

-
-
-
-
-
- -
- - -
-
- - -
-
-
- - -
- -
-
-
- - -
-
- - -
-
- - -
-
- - -
- -
-
-
- - -
-
-
-
- -
-
-
- -
-`; diff --git a/src/renderer/utils/__snapshots__/emojis.test.ts.snap b/src/renderer/utils/__snapshots__/emojis.test.ts.snap index b44d00299..0eb86b3e4 100644 --- a/src/renderer/utils/__snapshots__/emojis.test.ts.snap +++ b/src/renderer/utils/__snapshots__/emojis.test.ts.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`renderer/utils/emojis.ts emoji svg filenames 1`] = ` +exports[`renderer/utils/emojis.ts > emoji svg filenames 1`] = ` [ "1f389.svg", "1f38a.svg", diff --git a/src/renderer/utils/__snapshots__/icons.test.ts.snap b/src/renderer/utils/__snapshots__/icons.test.ts.snap deleted file mode 100644 index 01486ff86..000000000 --- a/src/renderer/utils/__snapshots__/icons.test.ts.snap +++ /dev/null @@ -1,66 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` 1`] = ` -{ - "$$typeof": Symbol(react.forward_ref), - "render": [Function], -} -`; - -exports[` 2`] = ` -{ - "$$typeof": Symbol(react.forward_ref), - "render": [Function], -} -`; - -exports[` 3`] = ` -{ - "$$typeof": Symbol(react.forward_ref), - "render": [Function], -} -`; - -exports[` 4`] = ` -{ - "$$typeof": Symbol(react.forward_ref), - "render": [Function], -} -`; - -exports[` 5`] = ` -{ - "$$typeof": Symbol(react.forward_ref), - "render": [Function], -} -`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for check suite 1`] = `"text-gitify-icon-muted"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for check suite 2`] = `"text-gitify-icon-closed"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for check suite 3`] = `"text-gitify-icon-muted"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for check suite 4`] = `"text-gitify-icon-open"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for check suite 5`] = `"text-gitify-icon-muted"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for state 1`] = `"text-gitify-icon-open"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for state 2`] = `"text-gitify-icon-closed"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for state 3`] = `"text-gitify-icon-done"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for state 4`] = `"text-gitify-icon-muted"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for state 5`] = `"text-gitify-icon-done"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for state 6`] = `"text-gitify-icon-muted"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for state 7`] = `"text-gitify-icon-open"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for state 8`] = `"text-gitify-icon-open"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for state 9`] = `"text-gitify-icon-done"`; - -exports[`renderer/utils/icons.ts getNotificationTypeIconColor should format the notification color for state 10`] = `"text-gitify-icon-muted"`; diff --git a/src/renderer/utils/__snapshots__/reason.test.ts.snap b/src/renderer/utils/__snapshots__/reason.test.ts.snap index 726de77f3..e892f1ebd 100644 --- a/src/renderer/utils/__snapshots__/reason.test.ts.snap +++ b/src/renderer/utils/__snapshots__/reason.test.ts.snap @@ -1,111 +1,111 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 1`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 1`] = ` { "description": "You were requested to review and approve a deployment.", "title": "Approval Requested", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 2`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 2`] = ` { "description": "You were assigned to the issue.", "title": "Assigned", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 3`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 3`] = ` { "description": "You created the thread.", "title": "Authored", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 4`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 4`] = ` { "description": "A GitHub Actions workflow run was triggered for your repository.", "title": "Workflow Run Completed", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 5`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 5`] = ` { "description": "You commented on the thread.", "title": "Commented", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 6`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 6`] = ` { "description": "You accepted an invitation to contribute to the repository.", "title": "Invitation Received", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 7`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 7`] = ` { "description": "You subscribed to the thread (via an issue or pull request).", "title": "Updated", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 8`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 8`] = ` { "description": "Organization members have requested to enable a feature such as Draft Pull Requests or Copilot.", "title": "Member Feature Requested", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 9`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 9`] = ` { "description": "You were specifically @mentioned in the content.", "title": "Mentioned", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 10`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 10`] = ` { "description": "You, or a team you're a member of, were requested to review a pull request.", "title": "Review Requested", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 11`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 11`] = ` { "description": "You were credited for contributing to a security advisory.", "title": "Security Advisory Credit Received", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 12`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 12`] = ` { "description": "GitHub discovered a security vulnerability in your repository.", "title": "Security Alert Received", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 13`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 13`] = ` { "description": "You changed the thread state (for example, closing an issue or merging a pull request).", "title": "State Changed", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 14`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 14`] = ` { "description": "You're watching the repository.", "title": "Updated", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 15`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 15`] = ` { "description": "You were on a team that was mentioned.", "title": "Team Mentioned", } `; -exports[`renderer/utils/reason.ts getReasonDetails - should get details for notification reason 16`] = ` +exports[`renderer/utils/reason.ts > getReasonDetails - should get details for notification reason 16`] = ` { "description": "The reason for this notification is not supported by the app.", "title": "Unknown", diff --git a/src/renderer/utils/api/__snapshots__/client.test.ts.snap b/src/renderer/utils/api/__snapshots__/client.test.ts.snap index 0157f3a70..c0716c67e 100644 --- a/src/renderer/utils/api/__snapshots__/client.test.ts.snap +++ b/src/renderer/utils/api/__snapshots__/client.test.ts.snap @@ -1,117 +1,117 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`renderer/utils/api/client.ts getAuthenticatedUser should fetch authenticated user - enterprise 1`] = ` +exports[`renderer/utils/api/client.ts > getAuthenticatedUser > should fetch authenticated user - enterprise 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts getAuthenticatedUser should fetch authenticated user - github 1`] = ` +exports[`renderer/utils/api/client.ts > getAuthenticatedUser > should fetch authenticated user - github 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts headNotifications should fetch notifications head - enterprise 1`] = ` +exports[`renderer/utils/api/client.ts > headNotifications > should fetch notifications head - enterprise 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "no-cache", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts headNotifications should fetch notifications head - github 1`] = ` +exports[`renderer/utils/api/client.ts > headNotifications > should fetch notifications head - github 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "no-cache", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts ignoreNotificationThreadSubscription should ignore notification thread subscription - enterprise 1`] = ` +exports[`renderer/utils/api/client.ts > ignoreNotificationThreadSubscription > should ignore notification thread subscription - enterprise 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts ignoreNotificationThreadSubscription should ignore notification thread subscription - github 1`] = ` +exports[`renderer/utils/api/client.ts > ignoreNotificationThreadSubscription > should ignore notification thread subscription - github 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts listNotificationsForAuthenticatedUser should list notifications for user - github cloud - fetchAllNotifications false 1`] = ` +exports[`renderer/utils/api/client.ts > listNotificationsForAuthenticatedUser > should list notifications for user - github cloud - fetchAllNotifications false 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "no-cache", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts listNotificationsForAuthenticatedUser should list notifications for user - github cloud - fetchAllNotifications true 1`] = ` +exports[`renderer/utils/api/client.ts > listNotificationsForAuthenticatedUser > should list notifications for user - github cloud - fetchAllNotifications true 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "no-cache", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts listNotificationsForAuthenticatedUser should list notifications for user - github enterprise server 1`] = ` +exports[`renderer/utils/api/client.ts > listNotificationsForAuthenticatedUser > should list notifications for user - github enterprise server 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token 1234568790", "Cache-Control": "no-cache", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts markNotificationThreadAsDone should mark notification thread as done - enterprise 1`] = ` +exports[`renderer/utils/api/client.ts > markNotificationThreadAsDone > should mark notification thread as done - enterprise 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts markNotificationThreadAsDone should mark notification thread as done - github 1`] = ` +exports[`renderer/utils/api/client.ts > markNotificationThreadAsDone > should mark notification thread as done - github 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts markNotificationThreadAsRead should mark notification thread as read - enterprise 1`] = ` +exports[`renderer/utils/api/client.ts > markNotificationThreadAsRead > should mark notification thread as read - enterprise 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/client.ts markNotificationThreadAsRead should mark notification thread as read - github 1`] = ` +exports[`renderer/utils/api/client.ts > markNotificationThreadAsRead > should mark notification thread as read - github 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token token-123-456", "Cache-Control": "", "Content-Type": "application/json", } diff --git a/src/renderer/utils/api/__snapshots__/request.test.ts.snap b/src/renderer/utils/api/__snapshots__/request.test.ts.snap index 4af54e921..76927f05d 100644 --- a/src/renderer/utils/api/__snapshots__/request.test.ts.snap +++ b/src/renderer/utils/api/__snapshots__/request.test.ts.snap @@ -1,24 +1,24 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`apiRequestAuth should make an authenticated request with the correct parameters 1`] = ` +exports[`apiRequestAuth > should make an authenticated request with the correct parameters 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token yourAuthToken", "Cache-Control": "", "Content-Type": "application/json", } `; -exports[`apiRequestAuth should make an authenticated request with the correct parameters and default data 1`] = ` +exports[`apiRequestAuth > should make an authenticated request with the correct parameters and default data 1`] = ` { "Accept": "application/json", - "Authorization": "token decrypted", + "Authorization": "token yourAuthToken", "Cache-Control": "", "Content-Type": "application/json", } `; -exports[`renderer/utils/api/request.ts should make a request with the correct parameters 1`] = ` +exports[`renderer/utils/api/request.ts > should make a request with the correct parameters 1`] = ` { "Accept": "application/json", "Cache-Control": "no-cache", @@ -26,7 +26,7 @@ exports[`renderer/utils/api/request.ts should make a request with the correct pa } `; -exports[`renderer/utils/api/request.ts should make a request with the correct parameters and default data 1`] = ` +exports[`renderer/utils/api/request.ts > should make a request with the correct parameters and default data 1`] = ` { "Accept": "application/json", "Cache-Control": "no-cache", diff --git a/src/renderer/utils/api/client.test.ts b/src/renderer/utils/api/client.test.ts index f7b9acbd2..801a5ae4e 100644 --- a/src/renderer/utils/api/client.test.ts +++ b/src/renderer/utils/api/client.test.ts @@ -17,7 +17,7 @@ import { } from './client'; import * as apiRequests from './request'; -jest.mock('axios'); +vi.mock('axios'); const mockGitHubHostname = 'github.com' as Hostname; const mockEnterpriseHostname = 'example.com' as Hostname; @@ -25,7 +25,7 @@ const mockThreadId = '1234'; describe('renderer/utils/api/client.ts', () => { afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); describe('getAuthenticatedUser', () => { @@ -245,7 +245,7 @@ describe('renderer/utils/api/client.ts', () => { describe('getHtmlUrl', () => { it('should return the HTML URL', async () => { - const apiRequestAuthMock = jest.spyOn(apiRequests, 'apiRequestAuth'); + const apiRequestAuthMock = vi.spyOn(apiRequests, 'apiRequestAuth'); const requestPromise = new Promise((resolve) => resolve({ @@ -268,9 +268,9 @@ describe('renderer/utils/api/client.ts', () => { }); it('should handle error', async () => { - const logErrorSpy = jest.spyOn(logger, 'logError').mockImplementation(); + const logErrorSpy = vi.spyOn(logger, 'logError').mockImplementation(); - const apiRequestAuthMock = jest.spyOn(apiRequests, 'apiRequestAuth'); + const apiRequestAuthMock = vi.spyOn(apiRequests, 'apiRequestAuth'); const mockError = new Error('Test error'); diff --git a/src/renderer/utils/api/request.test.ts b/src/renderer/utils/api/request.test.ts index 13cca1661..d1cd76fd5 100644 --- a/src/renderer/utils/api/request.test.ts +++ b/src/renderer/utils/api/request.test.ts @@ -2,14 +2,14 @@ import axios from 'axios'; import type { Link, Token } from '../../types'; import { apiRequest, apiRequestAuth } from './request'; -jest.mock('axios'); +vi.mock('axios'); const url = 'https://example.com' as Link; const method = 'get'; describe('renderer/utils/api/request.ts', () => { afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('should make a request with the correct parameters', async () => { @@ -44,7 +44,7 @@ describe('apiRequestAuth', () => { const token = 'yourAuthToken' as Token; afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('should make an authenticated request with the correct parameters', async () => { diff --git a/src/renderer/utils/auth/utils.test.ts b/src/renderer/utils/auth/utils.test.ts index 9e38b5ff6..30f1169af 100644 --- a/src/renderer/utils/auth/utils.test.ts +++ b/src/renderer/utils/auth/utils.test.ts @@ -24,22 +24,22 @@ import { getNewOAuthAppURL, getNewTokenURL } from './utils'; describe('renderer/utils/auth/utils.ts', () => { describe('authGitHub', () => { - const openExternalLinkMock = jest + const openExternalLinkMock = vi .spyOn(comms, 'openExternalLink') - .mockImplementation(); + .mockImplementation(vi.fn()); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('should call authGitHub - success auth flow', async () => { - const mockIpcRendererOn = ( - jest.spyOn(ipcRenderer, 'on') as jest.Mock - ).mockImplementation((event, callback) => { - if (event === 'gitify:auth-callback') { - callback(null, 'gitify://auth?code=123-456'); - } - }); + const mockIpcRendererOn = vi + .spyOn(ipcRenderer, 'on') + .mockImplementation((event, callback) => { + if (event === 'gitify:auth-callback') { + callback(null, 'gitify://auth?code=123-456'); + } + }); const res = await auth.authGitHub(); @@ -59,13 +59,14 @@ describe('renderer/utils/auth/utils.ts', () => { }); it('should call authGitHub - success oauth flow', async () => { - const mockIpcRendererOn = ( - jest.spyOn(ipcRenderer, 'on') as jest.Mock - ).mockImplementation((event, callback) => { - if (event === 'gitify:auth-callback') { - callback(null, 'gitify://oauth?code=123-456'); - } - }); + const mockIpcRendererOn = vi + .spyOn(ipcRenderer, 'on') + .mockImplementation((event, callback) => { + if (event === 'gitify:auth-callback') { + callback(null, 'gitify://oauth?code=123-456'); + } + return ipcRenderer; + }); const res = await auth.authGitHub({ clientId: 'BYO_CLIENT_ID' as ClientID, @@ -89,16 +90,16 @@ describe('renderer/utils/auth/utils.ts', () => { }); it('should call authGitHub - failure', async () => { - const mockIpcRendererOn = ( - jest.spyOn(ipcRenderer, 'on') as jest.Mock - ).mockImplementation((event, callback) => { - if (event === 'gitify:auth-callback') { - callback( - null, - 'gitify://auth?error=invalid_request&error_description=The+redirect_uri+is+missing+or+invalid.&error_uri=https://docs.github.com/en/developers/apps/troubleshooting-oauth-errors', - ); - } - }); + const mockIpcRendererOn = vi + .spyOn(ipcRenderer, 'on') + .mockImplementation((event, callback) => { + if (event === 'gitify:auth-callback') { + callback( + null, + 'gitify://auth?error=invalid_request&error_description=The+redirect_uri+is+missing+or+invalid.&error_uri=https://docs.github.com/en/developers/apps/troubleshooting-oauth-errors', + ); + } + }); await expect(async () => await auth.authGitHub()).rejects.toEqual( new Error( @@ -121,7 +122,7 @@ describe('renderer/utils/auth/utils.ts', () => { describe('getToken', () => { const authCode = '123-456' as AuthCode; - const apiRequestMock = jest.spyOn(apiRequests, 'apiRequest'); + const apiRequestMock = vi.spyOn(apiRequests, 'apiRequest'); it('should get a token - success', async () => { const requestPromise = new Promise((resolve) => diff --git a/src/renderer/utils/comms.test.ts b/src/renderer/utils/comms.test.ts index cc090e496..406e126c2 100644 --- a/src/renderer/utils/comms.test.ts +++ b/src/renderer/utils/comms.test.ts @@ -21,19 +21,19 @@ import * as storage from './storage'; describe('renderer/utils/comms.ts', () => { beforeEach(() => { - jest.spyOn(ipcRenderer, 'send'); - jest.spyOn(ipcRenderer, 'invoke'); + vi.spyOn(ipcRenderer, 'send'); + vi.spyOn(ipcRenderer, 'invoke'); }); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); describe('openExternalLink', () => { it('should open an external link', () => { - jest - .spyOn(storage, 'loadState') - .mockReturnValue({ settings: mockSettings }); + vi.spyOn(storage, 'loadState').mockReturnValue({ + settings: mockSettings, + }); openExternalLink('https://www.gitify.io/' as Link); expect(shell.openExternal).toHaveBeenCalledTimes(1); @@ -46,7 +46,7 @@ describe('renderer/utils/comms.ts', () => { }); it('should use default open preference if user settings not found', () => { - jest.spyOn(storage, 'loadState').mockReturnValue({ settings: null }); + vi.spyOn(storage, 'loadState').mockReturnValue({ settings: null }); openExternalLink('https://www.gitify.io/' as Link); expect(shell.openExternal).toHaveBeenCalledTimes(1); diff --git a/src/renderer/utils/helpers.test.ts b/src/renderer/utils/helpers.test.ts index ffaa1e939..d6efb5de3 100644 --- a/src/renderer/utils/helpers.test.ts +++ b/src/renderer/utils/helpers.test.ts @@ -76,10 +76,10 @@ describe('renderer/utils/helpers.ts', () => { 'https://github.com/gitify-app/notifications-test/issues/785'; const mockNotificationReferrer = 'notification_referrer_id=MDE4Ok5vdGlmaWNhdGlvblRocmVhZDEzODY2MTA5NjoxMjM0NTY3ODk%3D'; - const apiRequestAuthMock = jest.spyOn(apiRequests, 'apiRequestAuth'); + const apiRequestAuthMock = vi.spyOn(apiRequests, 'apiRequestAuth'); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('Subject Latest Comment Url: when not null, fetch latest comment html url', async () => { @@ -485,7 +485,7 @@ describe('renderer/utils/helpers.ts', () => { }); it('defaults when exception handled during specialized html enrichment process', async () => { - const logErrorSpy = jest.spyOn(logger, 'logError').mockImplementation(); + const logErrorSpy = vi.spyOn(logger, 'logError').mockImplementation(); const subject = { title: 'generate github web url unit tests', diff --git a/src/renderer/utils/links.test.ts b/src/renderer/utils/links.test.ts index 7ec918363..6cb3d456a 100644 --- a/src/renderer/utils/links.test.ts +++ b/src/renderer/utils/links.test.ts @@ -22,16 +22,17 @@ import { } from './links'; describe('renderer/utils/links.ts', () => { - const openExternalLinkMock = jest + const openExternalLinkMock = vi .spyOn(comms, 'openExternalLink') - .mockImplementation(); + .mockImplementation(vi.fn()); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('openGitifyReleaseNotes', () => { openGitifyReleaseNotes('v1.0.0'); + expect(openExternalLinkMock).toHaveBeenCalledWith( 'https://github.com/gitify-app/gitify/releases/tag/v1.0.0', ); @@ -39,6 +40,7 @@ describe('renderer/utils/links.ts', () => { it('openGitHubNotifications', () => { openGitHubNotifications(mockGitHubCloudAccount.hostname); + expect(openExternalLinkMock).toHaveBeenCalledWith( 'https://github.com/notifications', ); @@ -46,6 +48,7 @@ describe('renderer/utils/links.ts', () => { it('openGitHubIssues', () => { openGitHubIssues(mockGitHubCloudAccount.hostname); + expect(openExternalLinkMock).toHaveBeenCalledWith( 'https://github.com/issues', ); @@ -53,6 +56,7 @@ describe('renderer/utils/links.ts', () => { it('openGitHubPulls', () => { openGitHubPulls(mockGitHubCloudAccount.hostname); + expect(openExternalLinkMock).toHaveBeenCalledWith( 'https://github.com/pulls', ); @@ -60,6 +64,7 @@ describe('renderer/utils/links.ts', () => { it('openAccountProfile', () => { openAccountProfile(mockGitHubCloudAccount); + expect(openExternalLinkMock).toHaveBeenCalledWith( 'https://github.com/octocat', ); @@ -67,7 +72,9 @@ describe('renderer/utils/links.ts', () => { it('openUserProfile', () => { const mockUser = partialMockUser('mock-user'); + openUserProfile(mockUser); + expect(openExternalLinkMock).toHaveBeenCalledWith( 'https://github.com/mock-user', ); @@ -75,22 +82,23 @@ describe('renderer/utils/links.ts', () => { it('openHost', () => { openHost('github.com' as Hostname); + expect(openExternalLinkMock).toHaveBeenCalledWith('https://github.com'); }); it('openDeveloperSettings', () => { const mockSettingsURL = 'https://github.com/settings/tokens' as Link; + vi.spyOn(authUtils, 'getDeveloperSettingsURL').mockReturnValue( + mockSettingsURL, + ); - jest - .spyOn(authUtils, 'getDeveloperSettingsURL') - .mockReturnValue(mockSettingsURL); openDeveloperSettings(mockGitHubCloudAccount); + expect(openExternalLinkMock).toHaveBeenCalledWith(mockSettingsURL); }); it('openRepository', () => { const mockHtmlUrl = 'https://github.com/gitify-app/gitify'; - const repo = { html_url: mockHtmlUrl, } as Repository; @@ -101,15 +109,18 @@ describe('renderer/utils/links.ts', () => { it('openNotification', async () => { const mockNotificationUrl = mockSingleNotification.repository.html_url; - jest - .spyOn(helpers, 'generateGitHubWebUrl') - .mockResolvedValue(mockNotificationUrl); + vi.spyOn(helpers, 'generateGitHubWebUrl').mockResolvedValue( + mockNotificationUrl, + ); + await openNotification(mockSingleNotification); + expect(openExternalLinkMock).toHaveBeenCalledWith(mockNotificationUrl); }); it('openParticipatingDocs', () => { openGitHubParticipatingDocs(); + expect(openExternalLinkMock).toHaveBeenCalledWith( Constants.GITHUB_DOCS.PARTICIPATING_URL, ); diff --git a/src/renderer/utils/notifications/filters/filter.test.ts b/src/renderer/utils/notifications/filters/filter.test.ts index 4c2c3d58a..0904c6198 100644 --- a/src/renderer/utils/notifications/filters/filter.test.ts +++ b/src/renderer/utils/notifications/filters/filter.test.ts @@ -6,7 +6,7 @@ import { filterNotifications, hasAnyFiltersSet } from './filter'; describe('renderer/utils/notifications/filters/filter.ts', () => { afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); describe('filterNotifications', () => { diff --git a/src/renderer/utils/notifications/filters/userType.test.ts b/src/renderer/utils/notifications/filters/userType.test.ts index 6d19be2bf..1d3f587c2 100644 --- a/src/renderer/utils/notifications/filters/userType.test.ts +++ b/src/renderer/utils/notifications/filters/userType.test.ts @@ -1,10 +1,6 @@ import { isNonHumanUser } from './userType'; describe('renderer/utils/notifications/filters/userType.ts', () => { - afterEach(() => { - jest.clearAllMocks(); - }); - it('isNonHumanUser', () => { expect(isNonHumanUser('User')).toBe(false); expect(isNonHumanUser('EnterpriseUserAccount')).toBe(false); diff --git a/src/renderer/utils/notifications/native.test.ts b/src/renderer/utils/notifications/native.test.ts index f30cc9c8f..089559bd5 100644 --- a/src/renderer/utils/notifications/native.test.ts +++ b/src/renderer/utils/notifications/native.test.ts @@ -1,3 +1,5 @@ +import { vi } from 'vitest'; + import { mockAccountNotifications, mockSingleAccountNotifications, @@ -12,7 +14,7 @@ import * as native from './native'; describe('renderer/utils/notifications/native.ts', () => { afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); describe('triggerNativeNotifications', () => { @@ -23,8 +25,8 @@ describe('renderer/utils/notifications/native.ts', () => { showNotifications: true, }; - jest.spyOn(native, 'raiseNativeNotification'); - jest.spyOn(native, 'raiseSoundNotification'); + vi.spyOn(native, 'raiseNativeNotification'); + vi.spyOn(native, 'raiseSoundNotification'); native.triggerNativeNotifications([], mockAccountNotifications, { auth: mockAuth, @@ -42,8 +44,8 @@ describe('renderer/utils/notifications/native.ts', () => { showNotifications: false, }; - jest.spyOn(native, 'raiseNativeNotification'); - jest.spyOn(native, 'raiseSoundNotification'); + vi.spyOn(native, 'raiseNativeNotification'); + vi.spyOn(native, 'raiseSoundNotification'); native.triggerNativeNotifications([], mockAccountNotifications, { auth: mockAuth, @@ -61,8 +63,8 @@ describe('renderer/utils/notifications/native.ts', () => { showNotifications: true, }; - jest.spyOn(native, 'raiseNativeNotification'); - jest.spyOn(native, 'raiseSoundNotification'); + vi.spyOn(native, 'raiseNativeNotification'); + vi.spyOn(native, 'raiseSoundNotification'); native.triggerNativeNotifications( mockSingleAccountNotifications, @@ -81,8 +83,8 @@ describe('renderer/utils/notifications/native.ts', () => { showNotifications: true, }; - jest.spyOn(native, 'raiseNativeNotification'); - jest.spyOn(native, 'raiseSoundNotification'); + vi.spyOn(native, 'raiseNativeNotification'); + vi.spyOn(native, 'raiseSoundNotification'); native.triggerNativeNotifications([], [], { auth: mockAuth, @@ -100,8 +102,8 @@ describe('renderer/utils/notifications/native.ts', () => { describe('raiseNativeNotification', () => { it('should click on a native notification (with 1 notification)', () => { - const hideWindowMock = jest.spyOn(comms, 'hideWindow'); - jest.spyOn(links, 'openNotification'); + const hideWindowMock = vi.spyOn(comms, 'hideWindow'); + vi.spyOn(links, 'openNotification'); const nativeNotification: Notification = native.raiseNativeNotification([ mockGitHubNotifications[0], @@ -116,7 +118,7 @@ describe('renderer/utils/notifications/native.ts', () => { }); it('should click on a native notification (with more than 1 notification)', () => { - const showWindowMock = jest.spyOn(comms, 'showWindow'); + const showWindowMock = vi.spyOn(comms, 'showWindow'); const nativeNotification = native.raiseNativeNotification( mockGitHubNotifications, @@ -129,8 +131,10 @@ describe('renderer/utils/notifications/native.ts', () => { describe('raiseSoundNotification', () => { it('should play a sound', () => { - jest.spyOn(window.Audio.prototype, 'play'); + vi.spyOn(window.Audio.prototype, 'play'); + native.raiseSoundNotification(); + expect(window.Audio.prototype.play).toHaveBeenCalledTimes(1); }); }); diff --git a/src/renderer/utils/notifications/notifications.test.ts b/src/renderer/utils/notifications/notifications.test.ts index 9c789c5f6..27eb52a25 100644 --- a/src/renderer/utils/notifications/notifications.test.ts +++ b/src/renderer/utils/notifications/notifications.test.ts @@ -3,7 +3,7 @@ import { getNotificationCount } from './notifications'; describe('renderer/utils/notifications/notifications.ts', () => { afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('getNotificationCount', () => { diff --git a/src/renderer/utils/storage.test.ts b/src/renderer/utils/storage.test.ts index 0203a03c6..f6ece16a8 100644 --- a/src/renderer/utils/storage.test.ts +++ b/src/renderer/utils/storage.test.ts @@ -1,3 +1,4 @@ +import { vi } from 'vitest'; import { mockSettings } from '../__mocks__/state-mocks'; import type { Token } from '../types'; import { Constants } from './constants'; @@ -5,7 +6,7 @@ import { clearState, loadState, saveState } from './storage'; describe('renderer/utils/storage.ts', () => { it('should load the state from localstorage - existing', () => { - jest.spyOn(localStorage.__proto__, 'getItem').mockReturnValueOnce( + vi.spyOn(localStorage.__proto__, 'getItem').mockReturnValueOnce( JSON.stringify({ auth: { accounts: [ @@ -36,9 +37,9 @@ describe('renderer/utils/storage.ts', () => { }); it('should load the state from localstorage - empty', () => { - jest - .spyOn(localStorage.__proto__, 'getItem') - .mockReturnValueOnce(JSON.stringify({})); + vi.spyOn(localStorage.__proto__, 'getItem').mockReturnValueOnce( + JSON.stringify({}), + ); const result = loadState(); expect(result.auth).toBeUndefined(); expect(result.auth).toBeUndefined(); @@ -46,7 +47,7 @@ describe('renderer/utils/storage.ts', () => { }); it('should save the state to localstorage', () => { - jest.spyOn(localStorage.__proto__, 'setItem'); + vi.spyOn(localStorage.__proto__, 'setItem'); saveState({ auth: { accounts: [ @@ -65,7 +66,7 @@ describe('renderer/utils/storage.ts', () => { }); it('should clear the state from localstorage', () => { - jest.spyOn(localStorage.__proto__, 'clear'); + vi.spyOn(localStorage.__proto__, 'clear'); clearState(); expect(localStorage.clear).toHaveBeenCalledTimes(1); }); diff --git a/src/renderer/utils/subject.test.ts b/src/renderer/utils/subject.test.ts index 9a2576c02..bd415f2a9 100644 --- a/src/renderer/utils/subject.test.ts +++ b/src/renderer/utils/subject.test.ts @@ -1166,7 +1166,7 @@ describe('renderer/utils/subject.ts', () => { describe('Error', () => { it('catches error and logs message', async () => { - const logErrorSpy = jest.spyOn(logger, 'logError').mockImplementation(); + const logErrorSpy = vi.spyOn(logger, 'logError').mockImplementation(); const mockError = new Error('Test error'); const mockNotification = partialMockNotification({ diff --git a/src/shared/logger.test.ts b/src/shared/logger.test.ts index 468741f2f..2677113f1 100644 --- a/src/shared/logger.test.ts +++ b/src/shared/logger.test.ts @@ -4,9 +4,9 @@ import { mockSingleNotification } from '../renderer/utils/api/__mocks__/response import { logError, logInfo, logWarn } from './logger'; describe('renderer/utils/logger.ts', () => { - const logInfoSpy = jest.spyOn(log, 'info').mockImplementation(); - const logWarnSpy = jest.spyOn(log, 'warn').mockImplementation(); - const logErrorSpy = jest.spyOn(log, 'error').mockImplementation(); + const logInfoSpy = vi.spyOn(log, 'info').mockImplementation(); + const logWarnSpy = vi.spyOn(log, 'warn').mockImplementation(); + const logErrorSpy = vi.spyOn(log, 'error').mockImplementation(); const mockError = new Error('baz'); diff --git a/tsconfig.json b/tsconfig.json index b169760db..a52bcda7e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,8 @@ "allowJs": true, "noUnusedLocals": true, "skipLibCheck": true, - "outDir": "./build/" + "outDir": "./build/", + "types": ["vitest/globals"] }, "include": ["src/**/*.js", "src/**/*.ts", "src/**/*.tsx"] } diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..ff821a41f --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite'; + +export default defineConfig({ + test: { + environment: 'jsdom', + globals: true, + setupFiles: ['./src/renderer/__helpers__/vitest.setup.ts'], + coverage: { + reporter: ['lcov', 'text'], + }, + outputFile: 'coverage/sonar-report.xml', + }, +}); From d051e52d788abb00aa64479cda6c5c738e167116 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 14 Feb 2025 10:12:03 -0600 Subject: [PATCH 3/5] test: switch from jest to vitest Signed-off-by: Adam Setch --- pnpm-lock.yaml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 51da408f4..7f23c853f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -154,7 +154,7 @@ importers: specifier: 5.7.3 version: 5.7.3 vitest: - specifier: ^3.0.5 + specifier: 3.0.5 version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.2)(@vitest/ui@3.0.5)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.1)(terser@5.37.0) webpack: specifier: 5.98.0 @@ -4345,7 +4345,7 @@ snapshots: '@electron/osx-sign@1.3.1': dependencies: compare-version: 0.1.2 - debug: 4.3.4 + debug: 4.4.0 fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 @@ -4357,7 +4357,7 @@ snapshots: dependencies: '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 - debug: 4.3.4 + debug: 4.4.0 detect-libc: 2.0.3 fs-extra: 10.1.0 got: 11.8.6 @@ -4393,7 +4393,7 @@ snapshots: dependencies: '@electron/asar': 3.2.9 '@malept/cross-spawn-promise': 2.0.0 - debug: 4.3.4 + debug: 4.4.0 dir-compare: 4.2.0 fs-extra: 11.2.0 minimatch: 9.0.5 @@ -4521,7 +4521,7 @@ snapshots: '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} @@ -4561,7 +4561,7 @@ snapshots: '@malept/flatpak-bundler@0.4.0': dependencies: - debug: 4.3.4 + debug: 4.4.0 fs-extra: 9.1.0 lodash: 4.17.21 tmp-promise: 3.0.3 @@ -5196,13 +5196,13 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.4 + debug: 4.4.0 transitivePeerDependencies: - supports-color agent-base@7.1.1: dependencies: - debug: 4.3.4 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -6584,14 +6584,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.4.0 transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.3.4 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -6603,20 +6603,20 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.4.0 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.4 + debug: 4.4.0 transitivePeerDependencies: - supports-color humanize-ms@1.2.1: dependencies: - ms: 2.1.2 + ms: 2.1.3 husky@9.1.7: {} @@ -7156,7 +7156,7 @@ snapshots: micromark@3.2.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.4 + debug: 4.4.0 decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -7772,7 +7772,7 @@ snapshots: read-binary-file-arch@1.0.6: dependencies: - debug: 4.3.4 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -8029,7 +8029,7 @@ snapshots: socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.4.0 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -8138,7 +8138,7 @@ snapshots: sumchecker@3.0.1: dependencies: - debug: 4.3.4 + debug: 4.4.0 transitivePeerDependencies: - supports-color From 532bc9b64bfcb7917a434eee2824b39f17a7ae22 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 14 Feb 2025 10:14:04 -0600 Subject: [PATCH 4/5] test: switch from jest to vitest Signed-off-by: Adam Setch --- package.json | 1 - pnpm-lock.yaml | 25 ++++++++++++++++--------- vitest.config.ts | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index b4fa5189d..a6426ae2c 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,6 @@ "@types/react-dom": "19.0.3", "@types/react-router-dom": "5.3.3", "@types/semver": "7.5.8", - "@vitest/ui": "^3.0.5", "axios": "1.7.9", "clsx": "2.1.1", "concurrently": "9.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7f23c853f..926691d65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,9 +72,6 @@ importers: '@types/semver': specifier: 7.5.8 version: 7.5.8 - '@vitest/ui': - specifier: ^3.0.5 - version: 3.0.5(vitest@3.0.5) axios: specifier: 1.7.9 version: 1.7.9 @@ -4613,7 +4610,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@polka/url@1.0.0-next.28': {} + '@polka/url@1.0.0-next.28': + optional: true '@primer/behaviors@1.8.0': {} @@ -5073,6 +5071,7 @@ snapshots: tinyglobby: 0.2.10 tinyrainbow: 2.0.0 vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.2)(@vitest/ui@3.0.5)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.1)(terser@5.37.0) + optional: true '@vitest/utils@3.0.5': dependencies: @@ -6307,8 +6306,10 @@ snapshots: fdir@6.4.3(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 + optional: true - fflate@0.8.2: {} + fflate@0.8.2: + optional: true filelist@1.0.4: dependencies: @@ -6329,7 +6330,8 @@ snapshots: flat@5.0.2: {} - flatted@3.3.2: {} + flatted@3.3.2: + optional: true focus-visible@5.2.1: {} @@ -7259,7 +7261,8 @@ snapshots: mri@1.2.0: {} - mrmime@2.0.0: {} + mrmime@2.0.0: + optional: true ms@2.1.2: {} @@ -7441,7 +7444,8 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.2: + optional: true pkg-dir@4.2.0: dependencies: @@ -8014,6 +8018,7 @@ snapshots: '@polka/url': 1.0.0-next.28 mrmime: 2.0.0 totalist: 3.0.1 + optional: true slash@5.1.0: {} @@ -8230,6 +8235,7 @@ snapshots: dependencies: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 + optional: true tinypool@1.0.2: {} @@ -8247,7 +8253,8 @@ snapshots: dependencies: is-number: 7.0.0 - totalist@3.0.1: {} + totalist@3.0.1: + optional: true tough-cookie@4.1.3: dependencies: diff --git a/vitest.config.ts b/vitest.config.ts index ff821a41f..befca412a 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -6,7 +6,7 @@ export default defineConfig({ globals: true, setupFiles: ['./src/renderer/__helpers__/vitest.setup.ts'], coverage: { - reporter: ['lcov', 'text'], + reporter: ['lcov', 'text', 'html'], }, outputFile: 'coverage/sonar-report.xml', }, From 1125473d8c34a52f25d6c7b93395e8936b62d3f7 Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 14 Feb 2025 17:15:58 -0600 Subject: [PATCH 5/5] test: switch from jest to vitest Signed-off-by: Adam Setch --- vitest.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vitest.config.ts b/vitest.config.ts index befca412a..0848757e7 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,4 +1,4 @@ -import { defineConfig } from 'vite'; +import { defineConfig } from 'vitest/config'; export default defineConfig({ test: {