diff --git a/.github/ISSUE_TEMPLATE/02-issue-nodejs.yml b/.github/ISSUE_TEMPLATE/02-issue-nodejs.yml index 9d82472c0..313eca7bd 100644 --- a/.github/ISSUE_TEMPLATE/02-issue-nodejs.yml +++ b/.github/ISSUE_TEMPLATE/02-issue-nodejs.yml @@ -1,5 +1,5 @@ name: 'Bug report (Node.js)' -description: I experience unexpected behavior using the library in Node.js (Jest/React Native/Express/etc.). +description: I experience unexpected behavior using the library in Node.js (Vitest/React Native/Express/etc.). labels: ['bug', 'scope:node', 'needs:triage'] body: - type: markdown diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1d38a6d00..aeb201b69 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,7 +7,7 @@ Hey! Thank you for deciding to contribute to Mock Service Worker! This page will Getting yourself familiar with the tools below will substantially ease your contribution experience. - [TypeScript](https://www.typescriptlang.org/) -- [Jest](https://jestjs.io/) +- [Vitest](https://vitest.dev/) - [Playwright](https://playwright.dev/) ## Dependencies @@ -74,8 +74,6 @@ Build the library with the following command: $ pnpm build ``` -[jest-url]: https://jestjs.io - ## Tests ### Testing levels @@ -269,6 +267,5 @@ $ pnpm build ``` [pnpm-url]: https://pnpm.io/ -[jest-url]: https://jestjs.io [page-with-url]: https://github.com/kettanaito/page-with [pnpm-install-guide-url]: https://pnpm.io/7.x/installation#installing-a-specific-version diff --git a/README.md b/README.md index 3ba4a5c87..829d88dc7 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ There's no such thing as Service Workers in Node.js. Instead, MSW implements a [ ### Usage example -Take a look at the example of an integration test in Jest that uses [React Testing Library](https://github.com/testing-library/react-testing-library) and Mock Service Worker: +Take a look at the example of an integration test in Vitest that uses [React Testing Library](https://github.com/testing-library/react-testing-library) and Mock Service Worker: ```js // test/Dashboard.test.js diff --git a/global.d.ts b/global.d.ts index e8970504b..05a292826 100644 --- a/global.d.ts +++ b/global.d.ts @@ -1,5 +1,3 @@ -declare const SERVICE_WORKER_CHECKSUM: string - declare module '@bundled-es-modules/cookie' { export * as default from 'cookie' } diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 6feb897fd..000000000 --- a/jest.config.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - bail: true, - roots: ['/src', '/cli'], - transform: { - '^.+\\.tsx?$': '@swc/jest', - }, - testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(j|t)sx?$', - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], - setupFiles: ['./jest.setup.js'], - moduleNameMapper: { - '^~/core(/.*)?$': '/src/core/$1', - }, -} diff --git a/jest.setup.js b/jest.setup.js deleted file mode 100644 index 318a499b0..000000000 --- a/jest.setup.js +++ /dev/null @@ -1,31 +0,0 @@ -const { TextEncoder, TextDecoder } = require('util') - -/** - * @note Temporary global polyfills for Jest because it's - * ignoring Node.js defaults. - */ -Object.defineProperties(globalThis, { - TextDecoder: { value: TextDecoder }, - TextEncoder: { value: TextEncoder }, -}) - -const { Blob } = require('buffer') -const { Request, Response, Headers, File, FormData } = require('undici') - -Object.defineProperties(globalThis, { - Headers: { value: Headers }, - Request: { value: Request }, - Response: { value: Response }, - File: { value: File }, - Blob: { value: Blob }, - FormData: { value: FormData }, -}) - -if (typeof window !== 'undefined') { - Object.defineProperty(navigator || {}, 'serviceWorker', { - writable: false, - value: { - addEventListener: () => null, - }, - }) -} diff --git a/package.json b/package.json index 3ace38222..0b6b01c0b 100644 --- a/package.json +++ b/package.json @@ -46,15 +46,14 @@ "start": "tsup --watch", "clean": "rimraf ./lib", "lint": "eslint \"{cli,config,src,test}/**/*.ts\"", - "prebuild": "rimraf ./lib", "build": "pnpm clean && cross-env NODE_ENV=production tsup && pnpm patch:dts", "patch:dts": "node \"./config/scripts/patch-ts.js\"", "check:exports": "node \"./config/scripts/validate-esm.js\"", "test": "pnpm test:unit && pnpm test:node && pnpm test:browser", - "test:unit": "cross-env BABEL_ENV=test jest --maxWorkers=3", - "test:node": "jest --config=./test/jest.config.js --forceExit", + "test:unit": "vitest", + "test:node": "vitest run --config=./test/node/vitest.config.ts", "test:browser": "playwright test -c ./test/browser/playwright.config.ts", - "test:modules:node": "jest --config=./test/modules/node/jest.config.js", + "test:modules:node": "vitest run --config=./test/modules/node/vitest.config.ts", "test:modules:browser": "playwright test -c ./test/modules/browser/playwright.config.ts", "test:ts": "ts-node test/typings/run.ts", "prepare": "pnpm simple-git-hooks init", @@ -143,11 +142,9 @@ "@ossjs/release": "^0.8.0", "@playwright/test": "^1.30.0", "@swc/core": "^1.3.35", - "@swc/jest": "^0.2.24", "@types/express": "^4.17.17", "@types/fs-extra": "^9.0.13", "@types/glob": "^8.1.0", - "@types/jest": "^29.4.0", "@types/json-bigint": "^1.0.1", "@types/node": "18.x", "@types/node-fetch": "^2.5.11", @@ -170,8 +167,7 @@ "fs-extra": "^10.0.0", "fs-teardown": "^0.3.0", "glob": "^9.3.4", - "jest": "^29.4.3", - "jest-environment-jsdom": "^29.4.3", + "jsdom": "^22.1.0", "json-bigint": "^1.0.0", "lint-staged": "^13.0.3", "page-with": "^0.6.1", @@ -184,6 +180,7 @@ "typescript": "^5.0.2", "undici": "^5.20.0", "url-loader": "^4.1.1", + "vitest": "^0.34.6", "webpack": "^5.68.0", "webpack-dev-server": "^3.11.2", "webpack-http-server": "^0.5.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 84896c459..e53b5e4db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,12 +18,10 @@ specifiers: '@ossjs/release': ^0.8.0 '@playwright/test': ^1.30.0 '@swc/core': ^1.3.35 - '@swc/jest': ^0.2.24 '@types/cookie': ^0.4.1 '@types/express': ^4.17.17 '@types/fs-extra': ^9.0.13 '@types/glob': ^8.1.0 - '@types/jest': ^29.4.0 '@types/js-levenshtein': ^1.1.1 '@types/json-bigint': ^1.0.1 '@types/node': 18.x @@ -55,9 +53,8 @@ specifiers: headers-polyfill: ^4.0.1 inquirer: ^8.2.0 is-node-process: ^1.2.0 - jest: ^29.4.3 - jest-environment-jsdom: ^29.4.3 js-levenshtein: ^1.1.6 + jsdom: ^22.1.0 json-bigint: ^1.0.0 lint-staged: ^13.0.3 node-fetch: ^2.6.7 @@ -75,6 +72,7 @@ specifiers: typescript: ^5.0.2 undici: ^5.20.0 url-loader: ^4.1.1 + vitest: ^0.34.6 webpack: ^5.68.0 webpack-dev-server: ^3.11.2 webpack-http-server: ^0.5.0 @@ -114,11 +112,9 @@ devDependencies: '@ossjs/release': 0.8.0 '@playwright/test': 1.30.0 '@swc/core': 1.3.35 - '@swc/jest': 0.2.24_@swc+core@1.3.35 '@types/express': 4.17.17 '@types/fs-extra': 9.0.13 '@types/glob': 8.1.0 - '@types/jest': 29.4.0 '@types/json-bigint': 1.0.1 '@types/node': 18.17.14 '@types/node-fetch': 2.6.2 @@ -141,8 +137,7 @@ devDependencies: fs-extra: 10.1.0 fs-teardown: 0.3.2 glob: 9.3.5 - jest: 29.4.3_v5qag4bu7yd4vl7sd6rt2doplm - jest-environment-jsdom: 29.4.3 + jsdom: 22.1.0 json-bigint: 1.0.0 lint-staged: 13.1.2 page-with: 0.6.1_mtsvlg4x4u5udzh2pohivgt4x4 @@ -155,6 +150,7 @@ devDependencies: typescript: 5.0.2 undici: 5.23.0 url-loader: 4.1.1_webpack@5.75.0 + vitest: 0.34.6_jsdom@22.1.0 webpack: 5.75.0_mtsvlg4x4u5udzh2pohivgt4x4 webpack-dev-server: 3.11.3_webpack@5.75.0 webpack-http-server: 0.5.0_mtsvlg4x4u5udzh2pohivgt4x4 @@ -691,15 +687,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.12: - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: @@ -747,15 +734,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.12: - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: @@ -765,16 +743,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.12: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -849,16 +817,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.12: - resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - dev: true - /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.12: resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} @@ -1366,10 +1324,6 @@ packages: to-fast-properties: 2.0.0 dev: true - /@bcoe/v8-coverage/0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true - /@bundled-es-modules/cookie/2.0.0: resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} dependencies: @@ -1633,6 +1587,15 @@ packages: dev: true optional: true + /@esbuild/android-arm/0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64/0.16.17: resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} engines: {node: '>=12'} @@ -1651,6 +1614,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64/0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64/0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} @@ -1669,6 +1641,15 @@ packages: dev: true optional: true + /@esbuild/android-x64/0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64/0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} @@ -1687,6 +1668,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64/0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64/0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} @@ -1705,6 +1695,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64/0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64/0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} @@ -1723,6 +1722,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64/0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64/0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} @@ -1741,6 +1749,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64/0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm/0.16.17: resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} @@ -1759,6 +1776,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm/0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64/0.16.17: resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} @@ -1777,6 +1803,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64/0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32/0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} @@ -1795,6 +1830,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32/0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64/0.16.17: resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} engines: {node: '>=12'} @@ -1813,6 +1857,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64/0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el/0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} @@ -1831,6 +1884,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el/0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64/0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} @@ -1849,6 +1911,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64/0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64/0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} @@ -1867,6 +1938,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64/0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x/0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} @@ -1885,6 +1965,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x/0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64/0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} @@ -1903,6 +1992,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64/0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64/0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} @@ -1921,6 +2019,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64/0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64/0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} @@ -1939,6 +2046,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64/0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64/0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} @@ -1957,6 +2073,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64/0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64/0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} @@ -1975,6 +2100,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64/0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32/0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} @@ -1993,6 +2127,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32/0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64/0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} @@ -2011,6 +2154,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64/0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2043,296 +2195,60 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@istanbuljs/load-nyc-config/1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + /@jest/schemas/29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.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 + '@sinclair/typebox': 0.27.8 dev: true - /@istanbuljs/schema/0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true - - /@jest/console/29.4.3: - resolution: {integrity: sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} dependencies: - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - chalk: 4.1.2 - jest-message-util: 29.4.3 - jest-util: 29.4.3 - slash: 3.0.0 + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jest/core/29.4.3_ts-node@10.9.1: - resolution: {integrity: sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==} - 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 + /@jridgewell/gen-mapping/0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} dependencies: - '@jest/console': 29.4.3 - '@jest/reporters': 29.4.3 - '@jest/test-result': 29.4.3 - '@jest/transform': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.8.0 - exit: 0.1.2 - graceful-fs: 4.2.10 - jest-changed-files: 29.4.3 - jest-config: 29.4.3_v5qag4bu7yd4vl7sd6rt2doplm - jest-haste-map: 29.4.3 - jest-message-util: 29.4.3 - jest-regex-util: 29.4.3 - jest-resolve: 29.4.3 - jest-resolve-dependencies: 29.4.3 - jest-runner: 29.4.3 - jest-runtime: 29.4.3 - jest-snapshot: 29.4.3 - jest-util: 29.4.3 - jest-validate: 29.4.3 - jest-watcher: 29.4.3 - micromatch: 4.0.5 - pretty-format: 29.4.3 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - supports-color - - ts-node + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.17 dev: true - /@jest/create-cache-key-function/27.5.1: - resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} dev: true - /@jest/environment/29.4.3: - resolution: {integrity: sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/fake-timers': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - jest-mock: 29.4.3 + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} dev: true - /@jest/expect-utils/29.4.3: - resolution: {integrity: sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /@jridgewell/source-map/0.3.2: + resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: - jest-get-type: 29.4.3 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 dev: true - /@jest/expect/29.4.3: - resolution: {integrity: sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - expect: 29.4.3 - jest-snapshot: 29.4.3 - transitivePeerDependencies: - - supports-color + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jest/fake-timers/29.4.3: - resolution: {integrity: sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.4.3 - '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.17.14 - jest-message-util: 29.4.3 - jest-mock: 29.4.3 - jest-util: 29.4.3 + /@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jest/globals/29.4.3: - resolution: {integrity: sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /@jridgewell/trace-mapping/0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: - '@jest/environment': 29.4.3 - '@jest/expect': 29.4.3 - '@jest/types': 29.4.3 - jest-mock: 29.4.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/reporters/29.4.3: - resolution: {integrity: sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==} - 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 - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.4.3 - '@jest/test-result': 29.4.3 - '@jest/transform': 29.4.3 - '@jest/types': 29.4.3 - '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.17.14 - chalk: 4.1.2 - collect-v8-coverage: 1.0.1 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.10 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.0 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 - jest-message-util: 29.4.3 - jest-util: 29.4.3 - jest-worker: 29.4.3 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.1.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/schemas/29.4.3: - resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.25.23 - dev: true - - /@jest/source-map/29.4.3: - resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jridgewell/trace-mapping': 0.3.17 - callsites: 3.1.0 - graceful-fs: 4.2.10 - dev: true - - /@jest/test-result/29.4.3: - resolution: {integrity: sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/console': 29.4.3 - '@jest/types': 29.4.3 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.1 - dev: true - - /@jest/test-sequencer/29.4.3: - resolution: {integrity: sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/test-result': 29.4.3 - graceful-fs: 4.2.10 - jest-haste-map: 29.4.3 - slash: 3.0.0 - dev: true - - /@jest/transform/29.4.3: - resolution: {integrity: sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.20.12 - '@jest/types': 29.4.3 - '@jridgewell/trace-mapping': 0.3.17 - 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.10 - jest-haste-map: 29.4.3 - jest-regex-util: 29.4.3 - jest-util: 29.4.3 - micromatch: 4.0.5 - pirates: 4.0.5 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/types/27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.17.14 - '@types/yargs': 16.0.5 - chalk: 4.1.2 - dev: true - - /@jest/types/29.4.3: - resolution: {integrity: sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.4.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.17.14 - '@types/yargs': 17.0.22 - chalk: 4.1.2 - dev: true - - /@jridgewell/gen-mapping/0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - - /@jridgewell/gen-mapping/0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 - dev: true - - /@jridgewell/resolve-uri/3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/set-array/1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/source-map/0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} - dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 - dev: true - - /@jridgewell/sourcemap-codec/1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true - - /@jridgewell/trace-mapping/0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 dev: true /@jridgewell/trace-mapping/0.3.9: @@ -2475,20 +2391,8 @@ packages: rollup: 2.79.1 dev: true - /@sinclair/typebox/0.25.23: - resolution: {integrity: sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==} - dev: true - - /@sinonjs/commons/2.0.0: - resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} - dependencies: - type-detect: 4.0.8 - dev: true - - /@sinonjs/fake-timers/10.0.2: - resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} - dependencies: - '@sinonjs/commons': 2.0.0 + /@sinclair/typebox/0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true /@socket.io/component-emitter/3.1.0: @@ -2602,17 +2506,6 @@ packages: '@swc/core-win32-x64-msvc': 1.3.35 dev: true - /@swc/jest/0.2.24_@swc+core@1.3.35: - resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} - engines: {npm: '>= 7.0.0'} - peerDependencies: - '@swc/core': '*' - dependencies: - '@jest/create-cache-key-function': 27.5.1 - '@swc/core': 1.3.35 - jsonc-parser: 3.2.0 - dev: true - /@tootallnate/once/2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -2640,40 +2533,21 @@ packages: '@types/node': 18.17.14 dev: true - /@types/babel__core/7.20.0: - resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} - dependencies: - '@babel/parser': 7.20.15 - '@babel/types': 7.20.7 - '@types/babel__generator': 7.6.4 - '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.3 - dev: true - - /@types/babel__generator/7.6.4: - resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} - dependencies: - '@babel/types': 7.20.7 - dev: true - - /@types/babel__template/7.4.1: - resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + /@types/body-parser/1.19.2: + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: - '@babel/parser': 7.20.15 - '@babel/types': 7.20.7 + '@types/connect': 3.4.35 + '@types/node': 18.17.14 dev: true - /@types/babel__traverse/7.18.3: - resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} + /@types/chai-subset/1.3.4: + resolution: {integrity: sha512-CCWNXrJYSUIojZ1149ksLl3AN9cmZ5djf+yUoVVV+NuYrtydItQVlL2ZDqyC6M6O9LWRnVf8yYDxbXHO2TfQZg==} dependencies: - '@babel/types': 7.20.7 + '@types/chai': 4.3.9 dev: true - /@types/body-parser/1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} - dependencies: - '@types/connect': 3.4.35 - '@types/node': 18.17.14 + /@types/chai/4.3.9: + resolution: {integrity: sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==} dev: true /@types/command-line-args/5.2.1: @@ -2779,12 +2653,6 @@ packages: '@types/node': 18.17.14 dev: true - /@types/graceful-fs/4.1.6: - resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} - dependencies: - '@types/node': 18.17.14 - dev: true - /@types/http-assert/1.5.3: resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} dev: true @@ -2797,41 +2665,10 @@ packages: resolution: {integrity: sha512-cdggbeJIxWoIB8CB57BvenONrQZcBuEf2uddxMRNIy2jgdcnSxnY71tQcNrxdqTG4VmQP5fdLLE9E+jCnMK0Fg==} dev: true - /@types/istanbul-lib-coverage/2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - dev: true - - /@types/istanbul-lib-report/3.0.0: - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - dev: true - - /@types/istanbul-reports/3.0.1: - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} - dependencies: - '@types/istanbul-lib-report': 3.0.0 - dev: true - - /@types/jest/29.4.0: - resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==} - dependencies: - expect: 29.4.3 - pretty-format: 29.4.3 - dev: true - /@types/js-levenshtein/1.1.1: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} dev: false - /@types/jsdom/20.0.1: - resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - dependencies: - '@types/node': 18.17.14 - '@types/tough-cookie': 4.0.2 - parse5: 7.1.2 - dev: true - /@types/json-bigint/1.0.1: resolution: {integrity: sha512-zpchZLNsNuzJHi6v64UBoFWAvQlPhch7XAi36FkH6tL1bbbmimIF+cS7vwkzY4u5RaSWMoflQfu+TshMPPw8uw==} dev: true @@ -2910,10 +2747,6 @@ packages: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} dev: true - /@types/prettier/2.7.2: - resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} - dev: true - /@types/puppeteer/5.4.7: resolution: {integrity: sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==} dependencies: @@ -2959,18 +2792,10 @@ packages: '@types/node': 18.17.14 dev: true - /@types/stack-utils/2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - dev: true - /@types/statuses/2.0.1: resolution: {integrity: sha512-vVRgv7WXbhIZzILgr58b4Ki2uqpN/dlVCUBWCMkPbMDlV1CrQrgCl5hnIoUlMrgymGcTmdfVqbs1yWj/IRIRtQ==} dev: false - /@types/tough-cookie/4.0.2: - resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} - dev: true - /@types/uuid/8.3.4: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true @@ -2985,12 +2810,6 @@ packages: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs/16.0.5: - resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} - dependencies: - '@types/yargs-parser': 21.0.0 - dev: true - /@types/yargs/17.0.22: resolution: {integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==} dependencies: @@ -3127,6 +2946,44 @@ packages: eslint-visitor-keys: 3.3.0 dev: true + /@vitest/expect/0.34.6: + resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + dependencies: + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + chai: 4.3.10 + dev: true + + /@vitest/runner/0.34.6: + resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + dependencies: + '@vitest/utils': 0.34.6 + p-limit: 4.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot/0.34.6: + resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + dependencies: + magic-string: 0.30.5 + pathe: 1.1.1 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy/0.34.6: + resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + dependencies: + tinyspy: 2.2.0 + dev: true + + /@vitest/utils/0.34.6: + resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + dependencies: + diff-sequences: 29.4.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + /@web/config-loader/0.1.3: resolution: {integrity: sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==} engines: {node: '>=10.0.0'} @@ -3345,13 +3202,6 @@ packages: negotiator: 0.6.3 dev: true - /acorn-globals/7.0.1: - resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - dependencies: - acorn: 8.8.2 - acorn-walk: 8.2.0 - dev: true - /acorn-import-assertions/1.8.0_acorn@8.8.2: resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: @@ -3379,6 +3229,12 @@ packages: hasBin: true dev: true + /acorn/8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /acorn/8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} @@ -3615,6 +3471,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + /assign-symbols/1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} @@ -3688,24 +3548,6 @@ packages: resolution: {integrity: sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==} dev: true - /babel-jest/29.4.3_@babel+core@7.20.12: - resolution: {integrity: sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.20.12 - '@jest/transform': 29.4.3 - '@types/babel__core': 7.20.0 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.4.3_@babel+core@7.20.12 - chalk: 4.1.2 - graceful-fs: 4.2.10 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /babel-loader/8.3.0_la66t7xldg4uecmyawueag5wkm: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} @@ -3736,29 +3578,6 @@ packages: - supports-color dev: true - /babel-plugin-istanbul/6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.20.2 - '@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 - dev: true - - /babel-plugin-jest-hoist/29.4.3: - resolution: {integrity: sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.20.7 - '@types/babel__core': 7.20.0 - '@types/babel__traverse': 7.18.3 - dev: true - /babel-plugin-minify-builtins/0.5.0: resolution: {integrity: sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==} dev: true @@ -3908,37 +3727,6 @@ packages: resolution: {integrity: sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==} dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.12: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - dev: true - - /babel-preset-jest/29.4.3_@babel+core@7.20.12: - resolution: {integrity: sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.20.12 - babel-plugin-jest-hoist: 29.4.3 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 - dev: true - /babel-preset-minify/0.5.2: resolution: {integrity: sha512-v4GL+kk0TfovbRIKZnC3HPbu2cAGmPAby7BsOmuPdMJfHV+4FVdsGXTH/OOGQRKYdjemBuL1+MsE6mobobhe9w==} dependencies: @@ -4114,12 +3902,6 @@ packages: update-browserslist-db: 1.0.10_browserslist@4.21.5 dev: true - /bser/2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - dependencies: - node-int64: 0.4.0 - dev: true - /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true @@ -4244,6 +4026,19 @@ packages: resolution: {integrity: sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==} dev: true + /chai/4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk-template/0.4.0: resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} engines: {node: '>=12'} @@ -4267,14 +4062,15 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 - /char-regex/1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true - /chardet/0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + /check-error/1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + /chokidar/3.4.1: resolution: {integrity: sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==} engines: {node: '>= 8.10.0'} @@ -4294,15 +4090,6 @@ packages: engines: {node: '>=6.0'} dev: true - /ci-info/3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} - dev: true - - /cjs-module-lexer/1.2.2: - resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - dev: true - /class-utils/0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} @@ -4387,10 +4174,6 @@ packages: engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /collect-v8-coverage/1.0.1: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - dev: true - /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -4615,10 +4398,6 @@ packages: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true - /convert-source-map/2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true - /cookie-signature/1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true @@ -4757,19 +4536,11 @@ packages: which: 2.0.2 dev: true - /cssom/0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true - - /cssom/0.5.0: - resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} - dev: true - - /cssstyle/2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} + /cssstyle/3.0.0: + resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} + engines: {node: '>=14'} dependencies: - cssom: 0.3.8 + rrweb-cssom: 0.6.0 dev: true /cz-conventional-changelog/3.3.0_@swc+core@1.3.35: @@ -4794,13 +4565,13 @@ packages: engines: {node: '>=8'} dev: true - /data-urls/3.0.2: - resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} - engines: {node: '>=12'} + /data-urls/4.0.0: + resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==} + engines: {node: '>=14'} dependencies: abab: 2.0.6 whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 + whatwg-url: 12.0.1 dev: true /dateformat/4.6.3: @@ -4908,6 +4679,13 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true + /deep-eql/4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + /deep-equal/1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} dev: true @@ -5032,11 +4810,6 @@ packages: engines: {node: '>=8'} dev: true - /detect-newline/3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true - /detect-node/2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true @@ -5123,11 +4896,6 @@ packages: resolution: {integrity: sha512-bz00ASIIDjcgszZKuEA1JEFhbDjqUNbQ/PEhNEl1wbixzYpeTp2H2QWjsQvAL2T1wJBdOwCF5hE896BoMwYKrA==} dev: true - /emittery/0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - dev: true - /emoji-regex/7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} dev: true @@ -5195,8 +4963,8 @@ packages: ansi-colors: 4.1.3 dev: true - /entities/4.4.0: - resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + /entities/4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} dev: true @@ -5356,6 +5124,36 @@ packages: '@esbuild/win32-x64': 0.17.19 dev: true + /esbuild/0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -5368,29 +5166,11 @@ 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'} - dev: true - /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /escodegen/2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - /eslint-config-prettier/8.6.0_eslint@7.32.0: resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true @@ -5616,11 +5396,6 @@ packages: strip-final-newline: 3.0.0 dev: true - /exit/0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true - /expand-brackets/2.1.4_supports-color@6.1.0: resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} @@ -5643,17 +5418,6 @@ packages: homedir-polyfill: 1.0.3 dev: true - /expect/29.4.3: - resolution: {integrity: sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/expect-utils': 29.4.3 - jest-get-type: 29.4.3 - jest-matcher-utils: 29.4.3 - jest-message-util: 29.4.3 - jest-util: 29.4.3 - dev: true - /express/4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} @@ -5820,12 +5584,6 @@ packages: websocket-driver: 0.7.4 dev: true - /fb-watchman/2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - dependencies: - bser: 2.1.1 - dev: true - /figures/3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -6108,6 +5866,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + /get-func-name/2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + /get-intrinsic/1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: @@ -6116,11 +5878,6 @@ packages: has-symbols: 1.0.3 dev: true - /get-package-type/0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true - /get-stream/4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} @@ -6428,10 +6185,6 @@ packages: resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} dev: true - /html-escaper/2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true - /http-assert/1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} engines: {node: '>= 0.8'} @@ -6578,15 +6331,6 @@ packages: resolve-cwd: 2.0.0 dev: true - /import-local/3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: true - /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -6822,11 +6566,6 @@ packages: engines: {node: '>=12'} dev: true - /is-generator-fn/2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true - /is-generator-function/1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -7022,481 +6761,32 @@ packages: resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} engines: {node: '>= 14.0.0'} dev: true - - /isexe/2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /isobject/2.1.0: - resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} - engines: {node: '>=0.10.0'} - dependencies: - isarray: 1.0.0 - dev: true - - /isobject/3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true - - /issue-parser/6.0.0: - resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} - engines: {node: '>=10.13'} - dependencies: - lodash.capitalize: 4.2.1 - lodash.escaperegexp: 4.1.2 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.uniqby: 4.7.0 - dev: true - - /istanbul-lib-coverage/3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: true - - /istanbul-lib-instrument/5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.20.12 - '@babel/parser': 7.20.15 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-report/3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} - dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 - supports-color: 7.2.0 - dev: true - - /istanbul-lib-source-maps/4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-reports/3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 - dev: true - - /jest-changed-files/29.4.3: - resolution: {integrity: sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - execa: 5.1.1 - p-limit: 3.1.0 - dev: true - - /jest-circus/29.4.3: - resolution: {integrity: sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.4.3 - '@jest/expect': 29.4.3 - '@jest/test-result': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - chalk: 4.1.2 - co: 4.6.0 - dedent: 0.7.0 - is-generator-fn: 2.1.0 - jest-each: 29.4.3 - jest-matcher-utils: 29.4.3 - jest-message-util: 29.4.3 - jest-runtime: 29.4.3 - jest-snapshot: 29.4.3 - jest-util: 29.4.3 - p-limit: 3.1.0 - pretty-format: 29.4.3 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-cli/29.4.3_v5qag4bu7yd4vl7sd6rt2doplm: - resolution: {integrity: sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==} - 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 - dependencies: - '@jest/core': 29.4.3_ts-node@10.9.1 - '@jest/test-result': 29.4.3 - '@jest/types': 29.4.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.10 - import-local: 3.1.0 - jest-config: 29.4.3_v5qag4bu7yd4vl7sd6rt2doplm - jest-util: 29.4.3 - jest-validate: 29.4.3 - prompts: 2.4.2 - yargs: 17.7.0 - transitivePeerDependencies: - - '@types/node' - - supports-color - - ts-node - dev: true - - /jest-config/29.4.3_v5qag4bu7yd4vl7sd6rt2doplm: - resolution: {integrity: sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==} - 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 - dependencies: - '@babel/core': 7.20.12 - '@jest/test-sequencer': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - babel-jest: 29.4.3_@babel+core@7.20.12 - chalk: 4.1.2 - ci-info: 3.8.0 - deepmerge: 4.3.0 - glob: 7.2.3 - graceful-fs: 4.2.10 - jest-circus: 29.4.3 - jest-environment-node: 29.4.3 - jest-get-type: 29.4.3 - jest-regex-util: 29.4.3 - jest-resolve: 29.4.3 - jest-runner: 29.4.3 - jest-util: 29.4.3 - jest-validate: 29.4.3 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 29.4.3 - slash: 3.0.0 - strip-json-comments: 3.1.1 - ts-node: 10.9.1_x2vjra2lmmhd46xm3mchw7ztui - transitivePeerDependencies: - - supports-color - dev: true - - /jest-diff/29.4.3: - resolution: {integrity: sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 29.4.3 - jest-get-type: 29.4.3 - pretty-format: 29.4.3 - dev: true - - /jest-docblock/29.4.3: - resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - detect-newline: 3.1.0 - dev: true - - /jest-each/29.4.3: - resolution: {integrity: sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.4.3 - chalk: 4.1.2 - jest-get-type: 29.4.3 - jest-util: 29.4.3 - pretty-format: 29.4.3 - dev: true - - /jest-environment-jsdom/29.4.3: - resolution: {integrity: sha512-rFjf8JXrw3OjUzzmSE5l0XjMj0/MSVEUMCSXBGPDkfwb1T03HZI7iJSL0cGctZApPSyJxbjyKDVxkZuyhHkuTw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - '@jest/environment': 29.4.3 - '@jest/fake-timers': 29.4.3 - '@jest/types': 29.4.3 - '@types/jsdom': 20.0.1 - '@types/node': 18.17.14 - jest-mock: 29.4.3 - jest-util: 29.4.3 - jsdom: 20.0.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /jest-environment-node/29.4.3: - resolution: {integrity: sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.4.3 - '@jest/fake-timers': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - jest-mock: 29.4.3 - jest-util: 29.4.3 - dev: true - - /jest-get-type/29.4.3: - resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /jest-haste-map/29.4.3: - resolution: {integrity: sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.4.3 - '@types/graceful-fs': 4.1.6 - '@types/node': 18.17.14 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.10 - jest-regex-util: 29.4.3 - jest-util: 29.4.3 - jest-worker: 29.4.3 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /jest-leak-detector/29.4.3: - resolution: {integrity: sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.4.3 - pretty-format: 29.4.3 - dev: true - - /jest-matcher-utils/29.4.3: - resolution: {integrity: sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 29.4.3 - jest-get-type: 29.4.3 - pretty-format: 29.4.3 - dev: true - - /jest-message-util/29.4.3: - resolution: {integrity: sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/code-frame': 7.18.6 - '@jest/types': 29.4.3 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.10 - micromatch: 4.0.5 - pretty-format: 29.4.3 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-mock/29.4.3: - resolution: {integrity: sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - jest-util: 29.4.3 - dev: true - - /jest-pnp-resolver/1.2.3_jest-resolve@29.4.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: - jest-resolve: 29.4.3 - dev: true - - /jest-regex-util/29.4.3: - resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /jest-resolve-dependencies/29.4.3: - resolution: {integrity: sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-regex-util: 29.4.3 - jest-snapshot: 29.4.3 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-resolve/29.4.3: - resolution: {integrity: sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.10 - jest-haste-map: 29.4.3 - jest-pnp-resolver: 1.2.3_jest-resolve@29.4.3 - jest-util: 29.4.3 - jest-validate: 29.4.3 - resolve: 1.22.1 - resolve.exports: 2.0.0 - slash: 3.0.0 - dev: true - - /jest-runner/29.4.3: - resolution: {integrity: sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/console': 29.4.3 - '@jest/environment': 29.4.3 - '@jest/test-result': 29.4.3 - '@jest/transform': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.10 - jest-docblock: 29.4.3 - jest-environment-node: 29.4.3 - jest-haste-map: 29.4.3 - jest-leak-detector: 29.4.3 - jest-message-util: 29.4.3 - jest-resolve: 29.4.3 - jest-runtime: 29.4.3 - jest-util: 29.4.3 - jest-watcher: 29.4.3 - jest-worker: 29.4.3 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-runtime/29.4.3: - resolution: {integrity: sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.4.3 - '@jest/fake-timers': 29.4.3 - '@jest/globals': 29.4.3 - '@jest/source-map': 29.4.3 - '@jest/test-result': 29.4.3 - '@jest/transform': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - chalk: 4.1.2 - cjs-module-lexer: 1.2.2 - collect-v8-coverage: 1.0.1 - glob: 7.2.3 - graceful-fs: 4.2.10 - jest-haste-map: 29.4.3 - jest-message-util: 29.4.3 - jest-mock: 29.4.3 - jest-regex-util: 29.4.3 - jest-resolve: 29.4.3 - jest-snapshot: 29.4.3 - jest-util: 29.4.3 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-snapshot/29.4.3: - resolution: {integrity: sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.20.12 - '@babel/generator': 7.20.14 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 - '@jest/expect-utils': 29.4.3 - '@jest/transform': 29.4.3 - '@jest/types': 29.4.3 - '@types/babel__traverse': 7.18.3 - '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 - chalk: 4.1.2 - expect: 29.4.3 - graceful-fs: 4.2.10 - jest-diff: 29.4.3 - jest-get-type: 29.4.3 - jest-haste-map: 29.4.3 - jest-matcher-utils: 29.4.3 - jest-message-util: 29.4.3 - jest-util: 29.4.3 - natural-compare: 1.4.0 - pretty-format: 29.4.3 - semver: 7.3.8 - transitivePeerDependencies: - - supports-color + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /jest-util/29.4.3: - resolution: {integrity: sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /isobject/2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} dependencies: - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - chalk: 4.1.2 - ci-info: 3.8.0 - graceful-fs: 4.2.10 - picomatch: 2.3.1 + isarray: 1.0.0 dev: true - /jest-validate/29.4.3: - resolution: {integrity: sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.4.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.4.3 - leven: 3.1.0 - pretty-format: 29.4.3 + /isobject/3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} dev: true - /jest-watcher/29.4.3: - resolution: {integrity: sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /issue-parser/6.0.0: + resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} + engines: {node: '>=10.13'} dependencies: - '@jest/test-result': 29.4.3 - '@jest/types': 29.4.3 - '@types/node': 18.17.14 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.4.3 - string-length: 4.0.2 + lodash.capitalize: 4.2.1 + lodash.escaperegexp: 4.1.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.uniqby: 4.7.0 dev: true /jest-worker/27.5.1: @@ -7508,36 +6798,6 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker/29.4.3: - resolution: {integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@types/node': 18.17.14 - jest-util: 29.4.3 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - - /jest/29.4.3_v5qag4bu7yd4vl7sd6rt2doplm: - resolution: {integrity: sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==} - 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 - dependencies: - '@jest/core': 29.4.3_ts-node@10.9.1 - '@jest/types': 29.4.3 - import-local: 3.1.0 - jest-cli: 29.4.3_v5qag4bu7yd4vl7sd6rt2doplm - transitivePeerDependencies: - - '@types/node' - - supports-color - - ts-node - dev: true - /joycon/3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -7568,9 +6828,9 @@ packages: dev: true optional: true - /jsdom/20.0.3: - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} - engines: {node: '>=14'} + /jsdom/22.1.0: + resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==} + engines: {node: '>=16'} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: @@ -7578,30 +6838,27 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.2 - acorn-globals: 7.0.1 - cssom: 0.5.0 - cssstyle: 2.3.0 - data-urls: 3.0.2 + cssstyle: 3.0.0 + data-urls: 4.0.0 decimal.js: 10.4.3 domexception: 4.0.0 - escodegen: 2.0.0 form-data: 4.0.0 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 + nwsapi: 2.2.7 parse5: 7.1.2 + rrweb-cssom: 0.6.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 + tough-cookie: 4.1.3 w3c-xmlserializer: 4.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - ws: 8.11.0 + whatwg-url: 12.0.1 + ws: 8.14.2 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -7700,11 +6957,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /kleur/3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true - /koa-compose/4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} dev: true @@ -7780,19 +7032,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /leven/3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true - - /levn/0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: true - /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -7871,6 +7110,11 @@ packages: json5: 2.2.3 dev: true + /local-pkg/0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + dev: true + /locate-path/3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -7981,6 +7225,12 @@ packages: engines: {node: '>=0.10.0'} dev: true + /loupe/2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + /lru-cache/10.0.1: resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} engines: {node: 14 || >=16.14} @@ -7999,6 +7249,13 @@ packages: yallist: 4.0.0 dev: true + /magic-string/0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -8010,12 +7267,6 @@ packages: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /makeerror/1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - dependencies: - tmpl: 1.0.5 - dev: true - /map-cache/0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} @@ -8227,6 +7478,15 @@ packages: minimist: 1.2.8 dev: true + /mlly/1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + dependencies: + acorn: 8.11.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.1 + dev: true + /mri/1.1.4: resolution: {integrity: sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==} engines: {node: '>=4'} @@ -8276,6 +7536,12 @@ packages: resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} dev: true + /nanoid/3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /nanomatch/1.2.13_supports-color@6.1.0: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} @@ -8350,10 +7616,6 @@ packages: engines: {node: '>= 6.0.0'} dev: true - /node-int64/0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true - /node-releases/2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true @@ -8402,8 +7664,8 @@ packages: path-key: 4.0.0 dev: true - /nwsapi/2.2.2: - resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} + /nwsapi/2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: true /object-assign/4.1.1: @@ -8530,18 +7792,6 @@ packages: is-wsl: 1.1.0 dev: true - /optionator/0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.3 - dev: true - /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} @@ -8594,6 +7844,13 @@ packages: yocto-queue: 0.1.0 dev: true + /p-limit/4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate/3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -8693,7 +7950,7 @@ packages: /parse5/7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: - entities: 4.4.0 + entities: 4.5.0 dev: true /parseurl/1.3.3: @@ -8765,6 +8022,14 @@ packages: engines: {node: '>=8'} dev: true + /pathe/1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: true + + /pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true @@ -8867,6 +8132,14 @@ packages: find-up: 4.1.0 dev: true + /pkg-types/1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.2 + pathe: 1.1.1 + dev: true + /playwright-core/1.30.0: resolution: {integrity: sha512-7AnRmTCf+GVYhHbLJsGUtskWTE33SwMZkybJ0v6rqR1boxq2x36U7p1vDRV7HO2IwTZgmycracLxPEJI49wu4g==} engines: {node: '>=14'} @@ -8926,9 +8199,13 @@ packages: yaml: 1.10.2 dev: true - /prelude-ls/1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} + /postcss/8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 dev: true /prelude-ls/1.2.1: @@ -8949,11 +8226,11 @@ packages: hasBin: true dev: true - /pretty-format/29.4.3: - resolution: {integrity: sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==} + /pretty-format/29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.3 + '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 dev: true @@ -8971,14 +8248,6 @@ packages: engines: {node: '>=0.4.0'} dev: true - /prompts/2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: true - /proxy-addr/2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -9242,13 +8511,6 @@ packages: resolve-from: 3.0.0 dev: true - /resolve-cwd/3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: true - /resolve-dir/1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} @@ -9292,11 +8554,6 @@ packages: deprecated: https://github.com/lydell/resolve-url#deprecated dev: true - /resolve.exports/2.0.0: - resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} - engines: {node: '>=10'} - dev: true - /resolve/1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true @@ -9362,6 +8619,10 @@ packages: fsevents: 2.3.2 dev: true + /rrweb-cssom/0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + dev: true + /run-async/2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -9636,6 +8897,10 @@ packages: object-inspect: 1.12.3 dev: true + /siginfo/2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -9645,10 +8910,6 @@ packages: requiresBuild: true dev: true - /sisteransi/1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true - /slash/3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -9778,6 +9039,11 @@ packages: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: true + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + /source-map-resolve/0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated @@ -9789,13 +9055,6 @@ packages: urix: 0.1.0 dev: true - /source-map-support/0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -9905,11 +9164,8 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /stack-utils/2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 + /stackback/0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true /static-extend/0.1.2: @@ -9929,6 +9185,10 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + /std-env/3.4.3: + resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} + dev: true + /stream-combiner2/1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: @@ -9959,14 +9219,6 @@ packages: engines: {node: '>=0.6.19'} dev: true - /string-length/4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - dev: true - /string-width/3.1.0: resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} engines: {node: '>=6'} @@ -10084,6 +9336,12 @@ packages: engines: {node: '>=8'} dev: true + /strip-literal/1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + dependencies: + acorn: 8.11.2 + dev: true + /sucrase/3.29.0: resolution: {integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==} engines: {node: '>=8'} @@ -10200,15 +9458,6 @@ packages: source-map-support: 0.5.21 dev: true - /test-exclude/6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true - /text-extensions/1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} @@ -10262,16 +9511,26 @@ packages: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true + /tinybench/2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + dev: true + + /tinypool/0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy/2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + dev: true + /tmp/0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - /tmpl/1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true - /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -10313,8 +9572,8 @@ packages: engines: {node: '>=0.6'} dev: true - /tough-cookie/4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + /tough-cookie/4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -10339,6 +9598,13 @@ packages: punycode: 2.3.0 dev: true + /tr46/4.1.1: + resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} + engines: {node: '>=14'} + dependencies: + punycode: 2.3.0 + dev: true + /traverse/0.6.7: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: true @@ -10480,13 +9746,6 @@ packages: typescript: 5.0.2 dev: true - /type-check/0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - dev: true - /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -10566,6 +9825,10 @@ packages: engines: {node: '>=12.17'} dev: true + /ufo/1.3.1: + resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} + dev: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -10732,15 +9995,6 @@ packages: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /v8-to-istanbul/9.1.0: - resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} - engines: {node: '>=10.12.0'} - dependencies: - '@jridgewell/trace-mapping': 0.3.17 - '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 - dev: true - /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -10753,6 +10007,130 @@ packages: engines: {node: '>= 0.8'} dev: true + /vite-node/0.34.6_@types+node@18.17.14: + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.2 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.5.0_@types+node@18.17.14 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite/4.5.0_@types+node@18.17.14: + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 18.17.14 + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vitest/0.34.6_jsdom@22.1.0: + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.9 + '@types/chai-subset': 1.3.4 + '@types/node': 18.17.14 + '@vitest/expect': 0.34.6 + '@vitest/runner': 0.34.6 + '@vitest/snapshot': 0.34.6 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + acorn: 8.11.2 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.10 + debug: 4.3.4 + jsdom: 22.1.0 + local-pkg: 0.4.3 + magic-string: 0.30.5 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.4.3 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.7.0 + vite: 4.5.0_@types+node@18.17.14 + vite-node: 0.34.6_@types+node@18.17.14 + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /w3c-xmlserializer/4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -10760,12 +10138,6 @@ packages: xml-name-validator: 4.0.0 dev: true - /walker/1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - dependencies: - makeerror: 1.0.12 - dev: true - /watchpack/2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} @@ -10986,6 +10358,14 @@ packages: webidl-conversions: 7.0.0 dev: true + /whatwg-url/12.0.1: + resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==} + engines: {node: '>=14'} + dependencies: + tr46: 4.1.1 + webidl-conversions: 7.0.0 + dev: true + /whatwg-url/5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -11041,6 +10421,15 @@ packages: isexe: 2.0.0 dev: true + /why-is-node-running/2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /wildcard/2.0.0: resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} dev: true @@ -11085,14 +10474,6 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /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} - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true - /ws/6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} peerDependencies: @@ -11133,6 +10514,19 @@ packages: optional: true dev: true + /ws/8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -11249,3 +10643,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /yocto-queue/1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true diff --git a/src/browser/global.browser.d.ts b/src/browser/global.browser.d.ts new file mode 100644 index 000000000..8976bba1f --- /dev/null +++ b/src/browser/global.browser.d.ts @@ -0,0 +1 @@ +declare const SERVICE_WORKER_CHECKSUM: string diff --git a/src/browser/setupWorker/setupWorker.node.test.ts b/src/browser/setupWorker/setupWorker.node.test.ts index f3cda6e42..6c3f0fb42 100644 --- a/src/browser/setupWorker/setupWorker.node.test.ts +++ b/src/browser/setupWorker/setupWorker.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { setupWorker } from './setupWorker' diff --git a/src/browser/setupWorker/start/utils/prepareStartHandler.test.ts b/src/browser/setupWorker/start/utils/prepareStartHandler.test.ts index 7ea150d96..f2c66e8d2 100644 --- a/src/browser/setupWorker/start/utils/prepareStartHandler.test.ts +++ b/src/browser/setupWorker/start/utils/prepareStartHandler.test.ts @@ -33,7 +33,7 @@ describe('resolveStartOptions', () => { describe('prepareStartHandler', () => { test('exposes resolved start options to the generated star handler', () => { - const createStartHandler = jest.fn() + const createStartHandler = vi.fn() const context: SetupWorkerInternalContext = {} as any const startHandler = prepareStartHandler(createStartHandler, context) expect(startHandler).toBeInstanceOf(Function) diff --git a/src/browser/setupWorker/start/utils/printStartMessage.test.ts b/src/browser/setupWorker/start/utils/printStartMessage.test.ts index e17494799..9098b1591 100644 --- a/src/browser/setupWorker/start/utils/printStartMessage.test.ts +++ b/src/browser/setupWorker/start/utils/printStartMessage.test.ts @@ -1,12 +1,12 @@ import { printStartMessage } from './printStartMessage' beforeEach(() => { - jest.spyOn(console, 'groupCollapsed').mockImplementation() - jest.spyOn(console, 'log').mockImplementation() + vi.spyOn(console, 'groupCollapsed').mockImplementation(() => void 0) + vi.spyOn(console, 'log').mockImplementation(() => void 0) }) afterEach(() => { - jest.restoreAllMocks() + vi.restoreAllMocks() }) test('prints out a default start message into console', () => { diff --git a/src/browser/setupWorker/stop/utils/printStopMessage.test.ts b/src/browser/setupWorker/stop/utils/printStopMessage.test.ts index eda277195..8e2b21416 100644 --- a/src/browser/setupWorker/stop/utils/printStopMessage.test.ts +++ b/src/browser/setupWorker/stop/utils/printStopMessage.test.ts @@ -1,15 +1,15 @@ import { printStopMessage } from './printStopMessage' beforeAll(() => { - jest.spyOn(global.console, 'log').mockImplementation() + vi.spyOn(global.console, 'log').mockImplementation(() => void 0) }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) afterAll(() => { - jest.restoreAllMocks() + vi.restoreAllMocks() }) test('prints a stop message to the console', () => { diff --git a/src/browser/tsconfig.browser.build.json b/src/browser/tsconfig.browser.build.json new file mode 100644 index 000000000..8887b4565 --- /dev/null +++ b/src/browser/tsconfig.browser.build.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.browser.json", + "compilerOptions": { + "composite": false + } +} diff --git a/src/browser/tsconfig.browser.json b/src/browser/tsconfig.browser.json new file mode 100644 index 000000000..e998a8e8e --- /dev/null +++ b/src/browser/tsconfig.browser.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.src.json", + "compilerOptions": { + // Expose browser-specific libraries only for the + // source code under the "src/browser" directory. + "lib": ["DOM", "WebWorker"] + }, + "include": ["../../global.d.ts", "./global.browser.d.ts", "./**/*.ts"] +} diff --git a/src/browser/tsconfig.json b/src/browser/tsconfig.json deleted file mode 100644 index 30d12be0c..000000000 --- a/src/browser/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "lib": ["dom", "WebWorker"] - }, - "include": ["./**/*.ts"] -} diff --git a/src/browser/utils/deferNetworkRequestsUntil.test.ts b/src/browser/utils/deferNetworkRequestsUntil.test.ts index c5f0e963c..ebdb9c467 100644 --- a/src/browser/utils/deferNetworkRequestsUntil.test.ts +++ b/src/browser/utils/deferNetworkRequestsUntil.test.ts @@ -1,12 +1,12 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { deferNetworkRequestsUntil } from './deferNetworkRequestsUntil' beforeAll(() => { // Stubs native `fetch` function to remove any external // asynchronicity from this test suite. - window.fetch = jest.fn().mockImplementation(() => { + window.fetch = vi.fn().mockImplementation(() => { return Promise.resolve({ json: () => ({ response: 'body', @@ -16,7 +16,7 @@ beforeAll(() => { }) afterAll(() => { - jest.restoreAllMocks() + vi.restoreAllMocks() }) test('defers any requests that happen while a given promise is pending', async () => { diff --git a/src/browser/utils/getAbsoluteWorkerUrl.test.ts b/src/browser/utils/getAbsoluteWorkerUrl.test.ts index 0ef300a70..6e2527fa5 100644 --- a/src/browser/utils/getAbsoluteWorkerUrl.test.ts +++ b/src/browser/utils/getAbsoluteWorkerUrl.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { getAbsoluteWorkerUrl } from './getAbsoluteWorkerUrl' diff --git a/src/browser/utils/pruneGetRequestBody.test.ts b/src/browser/utils/pruneGetRequestBody.test.ts index eee2932a9..46de5d4f8 100644 --- a/src/browser/utils/pruneGetRequestBody.test.ts +++ b/src/browser/utils/pruneGetRequestBody.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { TextEncoder } from 'util' import { pruneGetRequestBody } from './pruneGetRequestBody' diff --git a/src/core/HttpResponse.test.ts b/src/core/HttpResponse.test.ts index ef9ec2df7..0a917f2b4 100644 --- a/src/core/HttpResponse.test.ts +++ b/src/core/HttpResponse.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { TextEncoder } from 'util' import { HttpResponse } from './HttpResponse' diff --git a/src/core/bypass.test.ts b/src/core/bypass.test.ts index aca432070..385234d10 100644 --- a/src/core/bypass.test.ts +++ b/src/core/bypass.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { bypass } from './bypass' diff --git a/src/core/handlers/GraphQLHandler.test.ts b/src/core/handlers/GraphQLHandler.test.ts index cebac6440..01453a7a8 100644 --- a/src/core/handlers/GraphQLHandler.test.ts +++ b/src/core/handlers/GraphQLHandler.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { encodeBuffer } from '@mswjs/interceptors' import { OperationTypeNode, parse } from 'graphql' @@ -583,7 +583,7 @@ describe('isDocumentNode', () => { describe('request', () => { it('has parsed operationName', async () => { - const matchAllResolver = jest.fn() + const matchAllResolver = vi.fn() const handler = new GraphQLHandler( OperationTypeNode.QUERY, /.*/, diff --git a/src/core/handlers/HttpHandler.test.ts b/src/core/handlers/HttpHandler.test.ts index 0d0ac2d49..55f1e0c40 100644 --- a/src/core/handlers/HttpHandler.test.ts +++ b/src/core/handlers/HttpHandler.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { HttpHandler, HttpRequestResolverExtras } from './HttpHandler' import { HttpResponse } from '..' diff --git a/src/core/http.spec.ts b/src/core/http.test.ts similarity index 100% rename from src/core/http.spec.ts rename to src/core/http.test.ts diff --git a/src/core/passthrough.test.ts b/src/core/passthrough.test.ts index 631fcdaf3..06a727bd3 100644 --- a/src/core/passthrough.test.ts +++ b/src/core/passthrough.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { passthrough } from './passthrough' diff --git a/src/core/utils/handleRequest.test.ts b/src/core/utils/handleRequest.test.ts index a89bd00f3..2f49662ea 100644 --- a/src/core/utils/handleRequest.test.ts +++ b/src/core/utils/handleRequest.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { Emitter } from 'strict-event-emitter' import { LifeCycleEventsMap, SharedOptions } from '../sharedOptions' @@ -12,16 +12,16 @@ import { HttpResponse } from '../HttpResponse' import { passthrough } from '../passthrough' const options: RequiredDeep = { - onUnhandledRequest: jest.fn(), + onUnhandledRequest: vi.fn(), } const callbacks: Partial> = { - onPassthroughResponse: jest.fn(), - onMockedResponse: jest.fn(), + onPassthroughResponse: vi.fn(), + onMockedResponse: vi.fn(), } function setup() { const emitter = new Emitter() - const listener = jest.fn() + const listener = vi.fn() const createMockListener = (name: string) => { return (...args: any) => { @@ -41,11 +41,11 @@ function setup() { } beforeEach(() => { - jest.spyOn(global.console, 'warn').mockImplementation() + vi.spyOn(global.console, 'warn').mockImplementation(() => void 0) }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) test('returns undefined for a request with the "x-msw-intention" header equal to "bypass"', async () => { @@ -244,8 +244,8 @@ test('returns a transformed response if the "transformResponse" option is provid const transformResponseImpelemntation = (response: Response): Response => { return new Response('transformed', response) } - const transformResponse = jest - .fn() + const transformResponse = vi + .fn<[Response], Response>() .mockImplementation(transformResponseImpelemntation) const finalResponse = transformResponseImpelemntation(mockedResponse) const lookupResult = { diff --git a/src/core/utils/internal/getCallFrame.test.ts b/src/core/utils/internal/getCallFrame.test.ts index a61e30f7c..1b9d3c1f8 100644 --- a/src/core/utils/internal/getCallFrame.test.ts +++ b/src/core/utils/internal/getCallFrame.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { getCallFrame } from './getCallFrame' diff --git a/src/core/utils/internal/parseGraphQLRequest.test.ts b/src/core/utils/internal/parseGraphQLRequest.test.ts index 7bb624d96..3067ca889 100644 --- a/src/core/utils/internal/parseGraphQLRequest.test.ts +++ b/src/core/utils/internal/parseGraphQLRequest.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { encodeBuffer } from '@mswjs/interceptors' import { OperationTypeNode } from 'graphql' diff --git a/src/core/utils/internal/parseMultipartData.test.ts b/src/core/utils/internal/parseMultipartData.test.ts index 465ea15ee..958133f0a 100644 --- a/src/core/utils/internal/parseMultipartData.test.ts +++ b/src/core/utils/internal/parseMultipartData.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { parseMultipartData } from './parseMultipartData' diff --git a/src/core/utils/internal/pipeEvents.test.ts b/src/core/utils/internal/pipeEvents.test.ts index d5e9e51b3..77dff7f4f 100644 --- a/src/core/utils/internal/pipeEvents.test.ts +++ b/src/core/utils/internal/pipeEvents.test.ts @@ -6,7 +6,7 @@ it('pipes events from the source emitter to the destination emitter', () => { const destination = new Emitter() pipeEvents(source, destination) - const callback = jest.fn() + const callback = vi.fn() destination.on('hello', callback) source.emit('hello', 'world', { data: true }) diff --git a/src/core/utils/internal/tryCatch.test.ts b/src/core/utils/internal/tryCatch.test.ts index de38c60b1..b48896d10 100644 --- a/src/core/utils/internal/tryCatch.test.ts +++ b/src/core/utils/internal/tryCatch.test.ts @@ -13,15 +13,17 @@ test('silences exceptions by default', () => { expect(result).toBeUndefined() }) -test('executes a custom callback function when an exception occurs', (done) => { - tryCatch( - () => { - throw new Error('Exception') - }, - (error) => { - expect(error).toBeInstanceOf(Error) - expect(error.message).toEqual('Exception') - done() - }, - ) +test('executes a custom callback function when an exception occurs', async () => { + await new Promise((resolve) => { + tryCatch( + () => { + throw new Error('Exception') + }, + (error) => { + expect(error).toBeInstanceOf(Error) + expect(error.message).toEqual('Exception') + resolve() + }, + ) + }) }) diff --git a/src/core/utils/logging/getTimestamp.test.ts b/src/core/utils/logging/getTimestamp.test.ts index eec29fff4..f7c70dc0c 100644 --- a/src/core/utils/logging/getTimestamp.test.ts +++ b/src/core/utils/logging/getTimestamp.test.ts @@ -3,13 +3,13 @@ import { getTimestamp } from './getTimestamp' beforeAll(() => { // Stub native `Date` prototype methods used in the tested module, // to always produce a predictable value for testing purposes. - jest.spyOn(global.Date.prototype, 'getHours').mockImplementation(() => 12) - jest.spyOn(global.Date.prototype, 'getMinutes').mockImplementation(() => 4) - jest.spyOn(global.Date.prototype, 'getSeconds').mockImplementation(() => 8) + vi.spyOn(global.Date.prototype, 'getHours').mockImplementation(() => 12) + vi.spyOn(global.Date.prototype, 'getMinutes').mockImplementation(() => 4) + vi.spyOn(global.Date.prototype, 'getSeconds').mockImplementation(() => 8) }) afterAll(() => { - jest.restoreAllMocks() + vi.restoreAllMocks() }) test('returns a timestamp string of the invocation time', () => { diff --git a/src/core/utils/logging/serializeResponse.test.ts b/src/core/utils/logging/serializeResponse.test.ts index 61a903286..c1e22e280 100644 --- a/src/core/utils/logging/serializeResponse.test.ts +++ b/src/core/utils/logging/serializeResponse.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { encodeBuffer } from '@mswjs/interceptors' import { serializeResponse } from './serializeResponse' diff --git a/src/core/utils/matching/matchRequestUrl.test.ts b/src/core/utils/matching/matchRequestUrl.test.ts index 0c99a0eff..737c54594 100644 --- a/src/core/utils/matching/matchRequestUrl.test.ts +++ b/src/core/utils/matching/matchRequestUrl.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { coercePath, matchRequestUrl } from './matchRequestUrl' diff --git a/src/core/utils/matching/normalizePath.node.test.ts b/src/core/utils/matching/normalizePath.node.test.ts index 61fda4c4a..61b3871e6 100644 --- a/src/core/utils/matching/normalizePath.node.test.ts +++ b/src/core/utils/matching/normalizePath.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { normalizePath } from './normalizePath' diff --git a/src/core/utils/matching/normalizePath.test.ts b/src/core/utils/matching/normalizePath.test.ts index f9e3a5c06..8803b2c58 100644 --- a/src/core/utils/matching/normalizePath.test.ts +++ b/src/core/utils/matching/normalizePath.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { normalizePath } from './normalizePath' diff --git a/src/core/utils/request/getPublicUrlFromRequest.test.ts b/src/core/utils/request/getPublicUrlFromRequest.test.ts index 3ac30af83..22ed79880 100644 --- a/src/core/utils/request/getPublicUrlFromRequest.test.ts +++ b/src/core/utils/request/getPublicUrlFromRequest.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { getPublicUrlFromRequest } from './getPublicUrlFromRequest' diff --git a/src/core/utils/request/getRequestCookies.node.test.ts b/src/core/utils/request/getRequestCookies.node.test.ts index 2061c4fe0..c48fb3bbd 100644 --- a/src/core/utils/request/getRequestCookies.node.test.ts +++ b/src/core/utils/request/getRequestCookies.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { getRequestCookies } from './getRequestCookies' diff --git a/src/core/utils/request/getRequestCookies.test.ts b/src/core/utils/request/getRequestCookies.test.ts index 59a5c5b7b..edd556065 100644 --- a/src/core/utils/request/getRequestCookies.test.ts +++ b/src/core/utils/request/getRequestCookies.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { getRequestCookies } from './getRequestCookies' import { clearCookies } from '../../../../test/support/utils' diff --git a/src/core/utils/request/onUnhandledRequest.test.ts b/src/core/utils/request/onUnhandledRequest.test.ts index 5649ea866..52dc2a21c 100644 --- a/src/core/utils/request/onUnhandledRequest.test.ts +++ b/src/core/utils/request/onUnhandledRequest.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { onUnhandledRequest, @@ -41,12 +41,12 @@ Read more: https://mswjs.io/docs/getting-started/mocks`, } beforeEach(() => { - jest.spyOn(console, 'warn').mockImplementation() - jest.spyOn(console, 'error').mockImplementation() + vi.spyOn(console, 'warn').mockImplementation(() => void 0) + vi.spyOn(console, 'error').mockImplementation(() => void 0) }) afterEach(() => { - jest.restoreAllMocks() + vi.restoreAllMocks() }) test('supports the "bypass" request strategy', async () => { @@ -85,11 +85,9 @@ test('supports the "error" request strategy', async () => { }) test('supports a custom callback function', async () => { - const callback = jest.fn>( - (request) => { - console.warn(`callback: ${request.method} ${request.url}`) - }, - ) + const callback = vi.fn>((request) => { + console.warn(`callback: ${request.method} ${request.url}`) + }) const request = new Request(new URL('/user', 'http://localhost:3000')) await onUnhandledRequest(request, [], callback) @@ -106,7 +104,7 @@ test('supports a custom callback function', async () => { }) test('supports calling default strategies from the custom callback function', async () => { - const callback = jest.fn>( + const callback = vi.fn>( (request, print) => { // Call the default "error" strategy. print.error() diff --git a/src/core/utils/url/getAbsoluteUrl.node.test.ts b/src/core/utils/url/getAbsoluteUrl.node.test.ts index 3ed43e20c..d1e5b1098 100644 --- a/src/core/utils/url/getAbsoluteUrl.node.test.ts +++ b/src/core/utils/url/getAbsoluteUrl.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { getAbsoluteUrl } from './getAbsoluteUrl' diff --git a/src/core/utils/url/getAbsoluteUrl.test.ts b/src/core/utils/url/getAbsoluteUrl.test.ts index 879fac706..03e370750 100644 --- a/src/core/utils/url/getAbsoluteUrl.test.ts +++ b/src/core/utils/url/getAbsoluteUrl.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { getAbsoluteUrl } from './getAbsoluteUrl' diff --git a/src/core/utils/url/isAbsoluteUrl.test.ts b/src/core/utils/url/isAbsoluteUrl.test.ts index 96c4fbdbb..97a1b5937 100644 --- a/src/core/utils/url/isAbsoluteUrl.test.ts +++ b/src/core/utils/url/isAbsoluteUrl.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { isAbsoluteUrl } from './isAbsoluteUrl' diff --git a/src/tsconfig.core.build.json b/src/tsconfig.core.build.json new file mode 100644 index 000000000..0852a1d01 --- /dev/null +++ b/src/tsconfig.core.build.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.src.json", + "compilerOptions": { + "composite": false + } +} diff --git a/src/tsconfig.node.build.json b/src/tsconfig.node.build.json new file mode 100644 index 000000000..db4cc04cd --- /dev/null +++ b/src/tsconfig.node.build.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.node.json", + "compilerOptions": { + "composite": false + } +} diff --git a/src/tsconfig.node.json b/src/tsconfig.node.json new file mode 100644 index 000000000..c98a860ae --- /dev/null +++ b/src/tsconfig.node.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.src.json", + "compilerOptions": { + "types": ["node"] + }, + "include": ["./node", "./native"], + "exclude": ["**/*.test.ts"] +} diff --git a/src/tsconfig.src.json b/src/tsconfig.src.json new file mode 100644 index 000000000..1399d3535 --- /dev/null +++ b/src/tsconfig.src.json @@ -0,0 +1,15 @@ +{ + // Common configuration for everything + // living in the "src" directory. + "extends": "../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "baseUrl": "./", + "paths": { + "~/core": ["core"], + "~/core/*": ["core/*"] + } + }, + "include": ["../global.d.ts", "./**/*.ts"], + "exclude": ["./**/*.test.ts"] +} diff --git a/test/README.md b/test/README.md index 7e38eb47f..84ab7765d 100644 --- a/test/README.md +++ b/test/README.md @@ -13,7 +13,7 @@ This directory categorizes all test suites based on the library's execution or A Example-driven test consists of two parts: - `*.mocks.ts`, a usage example and also a code snippet to test. -- `*.test.ts`, an actual test suite for Jest. +- `*.test.ts`, an actual test suite for Vitest. ## Contributing diff --git a/test/browser/msw-api/setup-worker/scenarios/shared-worker/shared-worker.test.ts b/test/browser/msw-api/setup-worker/scenarios/shared-worker/shared-worker.test.ts index 0d3c57e1b..b76f4ede9 100644 --- a/test/browser/msw-api/setup-worker/scenarios/shared-worker/shared-worker.test.ts +++ b/test/browser/msw-api/setup-worker/scenarios/shared-worker/shared-worker.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import express from 'express' import { test, expect } from '../../../../playwright.extend' diff --git a/test/browser/rest-api/request/matching/all.test.ts b/test/browser/rest-api/request/matching/all.test.ts index ab23ef155..e2d2f67db 100644 --- a/test/browser/rest-api/request/matching/all.test.ts +++ b/test/browser/rest-api/request/matching/all.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { Response } from '@playwright/test' import { test, expect } from '../../../playwright.extend' diff --git a/test/jest.config.js b/test/jest.config.js deleted file mode 100644 index 1f8692b34..000000000 --- a/test/jest.config.js +++ /dev/null @@ -1,29 +0,0 @@ -/** @type {import('jest').Config} */ -module.exports = { - rootDir: './node', - transform: { - '^.+\\.ts$': '@swc/jest', - }, - // Limit the concurrency because some tests recompile the library, - // creating a moment of time when it has no "lib" files. - maxWorkers: 1, - moduleNameMapper: { - '^msw(.*)': '/../..$1', - }, - testEnvironmentOptions: { - // Force JSDOM to use the Node module resolution because we're still in Node.js. - // Using browser resolution won't work by design because JSDOM is not a browser - // and doesn't ship with 100% compatibility with the browser APIs. - // In tests, using browser resolution will result in "ClientRequest" imports - // from "@mswjs/interceptors" to not be found because they are not exported - // by the browser bundle of that library. - customExportConditions: [''], - }, - globals: { - fetch, - Request, - Response, - TextEncoder, - TextDecoder, - }, -} diff --git a/test/modules/node/jest.config.js b/test/modules/node/jest.config.js deleted file mode 100644 index 5d31469cb..000000000 --- a/test/modules/node/jest.config.js +++ /dev/null @@ -1,9 +0,0 @@ -/** @type {import('jest').Config} */ -module.exports = { - rootDir: '.', - transform: { - '^.+\\.ts$': '@swc/jest', - }, - testEnvironment: 'node', - testTimeout: 60_000, -} diff --git a/test/modules/node/tsconfig.json b/test/modules/node/tsconfig.json new file mode 100644 index 000000000..34fee733a --- /dev/null +++ b/test/modules/node/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "types": ["vitest/globals"] + }, + "include": ["./**/*.test.ts"] +} diff --git a/test/modules/node/vitest.config.ts b/test/modules/node/vitest.config.ts new file mode 100644 index 000000000..a4b93d7ca --- /dev/null +++ b/test/modules/node/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + globals: true, + dir: __dirname, + environment: 'node', + testTimeout: 60_000, + }, +}) diff --git a/test/node/graphql-api/anonymous-operations.test.ts b/test/node/graphql-api/anonymous-operations.test.ts index 8a7643435..7b1e021a5 100644 --- a/test/node/graphql-api/anonymous-operations.test.ts +++ b/test/node/graphql-api/anonymous-operations.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpServer } from '@open-draft/test-server/http' @@ -21,16 +21,16 @@ const server = setupServer(graphql.query('GetUser', () => {})) beforeAll(async () => { server.listen() await httpServer.listen() - jest.spyOn(console, 'warn').mockImplementation(() => {}) + vi.spyOn(console, 'warn').mockImplementation(() => {}) }) afterEach(() => { server.resetHandlers() - jest.resetAllMocks() + vi.resetAllMocks() }) afterAll(async () => { - jest.restoreAllMocks() + vi.restoreAllMocks() server.close() await httpServer.close() }) diff --git a/test/node/graphql-api/cookies.node.test.ts b/test/node/graphql-api/cookies.node.test.ts index 356872569..5d1a1ec91 100644 --- a/test/node/graphql-api/cookies.node.test.ts +++ b/test/node/graphql-api/cookies.node.test.ts @@ -1,7 +1,7 @@ /** - * @jest-environment node + * @vitest-environment node */ -import * as cookieUtils from 'cookie' +import cookieUtils from '@bundled-es-modules/cookie' import fetch from 'node-fetch' import { graphql as executeGraphql, buildSchema } from 'graphql' import { graphql, HttpResponse } from 'msw' @@ -70,7 +70,7 @@ test('sets cookie on the mocked response', async () => { }), }) const body = await res.json() - const cookieString = res.headers.get('set-cookie') + const cookieString = res.headers.get('set-cookie')! const responseCookies = cookieUtils.parse(cookieString) expect(cookieString).toBe('test-cookie=value') diff --git a/test/node/graphql-api/extensions.node.test.ts b/test/node/graphql-api/extensions.node.test.ts index bd9884a69..a706df659 100644 --- a/test/node/graphql-api/extensions.node.test.ts +++ b/test/node/graphql-api/extensions.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import type { ExecutionResult } from 'graphql' diff --git a/test/node/graphql-api/response-patching.node.test.ts b/test/node/graphql-api/response-patching.node.test.ts index abf349fa7..6e05614ed 100644 --- a/test/node/graphql-api/response-patching.node.test.ts +++ b/test/node/graphql-api/response-patching.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { bypass, graphql, HttpResponse } from 'msw' import { setupServer } from 'msw/node' diff --git a/test/node/msw-api/auto-update-worker.node.test.ts b/test/node/msw-api/auto-update-worker.node.test.ts index cd7494be5..17fb32cb6 100644 --- a/test/node/msw-api/auto-update-worker.node.test.ts +++ b/test/node/msw-api/auto-update-worker.node.test.ts @@ -1,11 +1,11 @@ /** - * @jest-environment node + * @vitest-environment node */ import * as fs from 'fs' import { execSync } from 'child_process' import { createTeardown } from 'fs-teardown' import { fromTemp } from '../../support/utils' -import packageJson from '../../../package.json' +import * as packageJson from '../../../package.json' const fsMock = createTeardown({ rootDir: fromTemp('auto-update-worker'), diff --git a/test/node/msw-api/cli/init.node.test.ts b/test/node/msw-api/cli/init.node.test.ts index cc493f89a..eccfb498e 100644 --- a/test/node/msw-api/cli/init.node.test.ts +++ b/test/node/msw-api/cli/init.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import * as path from 'path' import * as fs from 'fs-extra' @@ -37,7 +37,7 @@ beforeEach(async () => { }) afterAll(async () => { - jest.restoreAllMocks() + vi.restoreAllMocks() await fsMock.cleanup() }) @@ -170,15 +170,15 @@ test('does not produce eslint errors or warnings', async () => { test('errors and shuts down if creating a directory fails', async () => { const init = require('../../../../cli/init') const error = new Error('Could not create this directory') - jest.spyOn(fs.promises, 'mkdir').mockRejectedValue(error) + vi.spyOn(fs.promises, 'mkdir').mockRejectedValue(error) - const exitSpy = jest.spyOn(process, 'exit').mockImplementationOnce(() => { + const exitSpy = vi.spyOn(process, 'exit').mockImplementationOnce(() => { throw error }) - const consoleSpy = jest + const consoleSpy = vi .spyOn(console, 'error') - .mockImplementationOnce(jest.fn()) + .mockImplementationOnce(() => void 0) const publicDir = 'public' diff --git a/test/node/msw-api/context/delay.node.test.ts b/test/node/msw-api/context/delay.node.test.ts index 92c813d5c..22e353481 100644 --- a/test/node/msw-api/context/delay.node.test.ts +++ b/test/node/msw-api/context/delay.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { delay, HttpResponse, http } from 'msw' diff --git a/test/node/msw-api/req/passthrough.node.test.ts b/test/node/msw-api/req/passthrough.node.test.ts index 64ef800c1..fec7975c9 100644 --- a/test/node/msw-api/req/passthrough.node.test.ts +++ b/test/node/msw-api/req/passthrough.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, passthrough, http } from 'msw' @@ -24,12 +24,12 @@ beforeAll(async () => { }) beforeEach(() => { - jest.spyOn(console, 'warn').mockImplementation() + vi.spyOn(console, 'warn').mockImplementation(() => void 0) }) afterEach(() => { server.resetHandlers() - jest.restoreAllMocks() + vi.restoreAllMocks() }) afterAll(async () => { diff --git a/test/node/msw-api/res/network-error.node.test.ts b/test/node/msw-api/res/network-error.node.test.ts index 6caaafaa7..8167568a8 100644 --- a/test/node/msw-api/res/network-error.node.test.ts +++ b/test/node/msw-api/res/network-error.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { http, HttpResponse } from 'msw' import { setupServer } from 'msw/node' diff --git a/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts b/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts index 932fa2d81..9237a7d81 100644 --- a/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts +++ b/test/node/msw-api/setup-server/life-cycle-events/on.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' @@ -15,9 +15,9 @@ const httpServer = new HttpServer((app) => { const server = setupServer() -const listener = jest.fn() +const listener = vi.fn() -function getRequestId(requestStartListener: jest.Mock) { +function getRequestId(requestStartListener: vi.Mock) { const { calls } = requestStartListener.mock const requestStartCall = calls.find((call) => { return call[0].startsWith('[request:start]') @@ -78,11 +78,11 @@ beforeAll(async () => { beforeEach(() => { // Supress "Expected a mocking resolver function to return a mocked response" // warnings. Using intentional explicit empty resolver. - jest.spyOn(global.console, 'warn').mockImplementation() + vi.spyOn(global.console, 'warn').mockImplementation(() => void 0) }) afterEach(() => { - jest.restoreAllMocks() + vi.restoreAllMocks() }) afterAll(async () => { diff --git a/test/node/msw-api/setup-server/life-cycle-events/removeAllListeners.node.test.ts b/test/node/msw-api/setup-server/life-cycle-events/removeAllListeners.node.test.ts index bc96068ef..451be3c55 100644 --- a/test/node/msw-api/setup-server/life-cycle-events/removeAllListeners.node.test.ts +++ b/test/node/msw-api/setup-server/life-cycle-events/removeAllListeners.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' @@ -26,7 +26,7 @@ beforeAll(async () => { }) afterEach(() => { - jest.restoreAllMocks() + vi.restoreAllMocks() }) afterAll(async () => { @@ -36,8 +36,8 @@ afterAll(async () => { test('removes all listeners attached to the server instance', async () => { const listeners = { - requestStart: jest.fn(), - requestEnd: jest.fn(), + requestStart: vi.fn(), + requestEnd: vi.fn(), } server.events.on('request:start', listeners.requestStart) server.events.on('request:end', listeners.requestEnd) @@ -57,8 +57,8 @@ test('removes all listeners attached to the server instance', async () => { test('removes all the listeners by the event name', async () => { const listeners = { - requestStart: jest.fn(), - requestEnd: jest.fn(), + requestStart: vi.fn(), + requestEnd: vi.fn(), } server.events.on('request:start', listeners.requestStart) server.events.on('request:start', listeners.requestStart) @@ -73,8 +73,8 @@ test('removes all the listeners by the event name', async () => { test('does not remove the internal listeners', async () => { const listeners = { - requestStart: jest.fn(), - responseMocked: jest.fn(), + requestStart: vi.fn(), + responseMocked: vi.fn(), } server.events.on('request:start', listeners.requestStart) diff --git a/test/node/msw-api/setup-server/life-cycle-events/removeListener.node.test.ts b/test/node/msw-api/setup-server/life-cycle-events/removeListener.node.test.ts index bf40845b9..39fbdbed1 100644 --- a/test/node/msw-api/setup-server/life-cycle-events/removeListener.node.test.ts +++ b/test/node/msw-api/setup-server/life-cycle-events/removeListener.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' @@ -32,8 +32,8 @@ afterAll(async () => { test('removes a listener by the event name', async () => { const listeners = { - requestStart: jest.fn(), - requestEnd: jest.fn(), + requestStart: vi.fn(), + requestEnd: vi.fn(), } server.events.on('request:start', listeners.requestStart) server.events.on('request:end', listeners.requestEnd) diff --git a/test/node/msw-api/setup-server/listHandlers.node.test.ts b/test/node/msw-api/setup-server/listHandlers.node.test.ts index c542579ac..6245f9463 100644 --- a/test/node/msw-api/setup-server/listHandlers.node.test.ts +++ b/test/node/msw-api/setup-server/listHandlers.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { http, graphql } from 'msw' import { setupServer } from 'msw/node' diff --git a/test/node/msw-api/setup-server/resetHandlers.node.test.ts b/test/node/msw-api/setup-server/resetHandlers.node.test.ts index 822da11af..4982c9052 100644 --- a/test/node/msw-api/setup-server/resetHandlers.node.test.ts +++ b/test/node/msw-api/setup-server/resetHandlers.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' @@ -12,12 +12,12 @@ const server = setupServer( ) beforeAll(() => { - jest.spyOn(global.console, 'warn').mockImplementation() + vi.spyOn(global.console, 'warn').mockImplementation(() => void 0) server.listen() }) afterAll(() => { - jest.restoreAllMocks() + vi.restoreAllMocks() server.close() }) diff --git a/test/node/msw-api/setup-server/restoreHandlers.node.test.ts b/test/node/msw-api/setup-server/restoreHandlers.node.test.ts index bd2c6a2b8..117d2dfeb 100644 --- a/test/node/msw-api/setup-server/restoreHandlers.node.test.ts +++ b/test/node/msw-api/setup-server/restoreHandlers.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' diff --git a/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts b/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts index ea39cb68e..065990fa2 100644 --- a/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/cookies-request.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import https from 'https' import { http, HttpResponse } from 'msw' diff --git a/test/node/msw-api/setup-server/scenarios/fake-timers.node.test.ts b/test/node/msw-api/setup-server/scenarios/fake-timers.node.test.ts index 15caee6e2..7aacf0430 100644 --- a/test/node/msw-api/setup-server/scenarios/fake-timers.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/fake-timers.node.test.ts @@ -12,12 +12,12 @@ beforeAll(() => server.listen()) afterAll(() => server.close()) test('tolerates fake timers', async () => { - jest.useFakeTimers() + vi.useFakeTimers() const res = await fetch('https://test.mswjs.io/pull') const body = await res.json() - jest.useRealTimers() + vi.useRealTimers() expect(body).toEqual({ status: 'pulled' }) }) diff --git a/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts b/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts index 26f84b4f7..f609c519d 100644 --- a/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/fall-through.node.test.ts @@ -1,11 +1,11 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' -const log = jest.fn() +const log = vi.fn() const server = setupServer( http.get('https://test.mswjs.io/*', () => log('[get] first')), @@ -24,7 +24,7 @@ beforeAll(() => { }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) afterAll(() => { diff --git a/test/node/msw-api/setup-server/scenarios/generator.node.test.ts b/test/node/msw-api/setup-server/scenarios/generator.node.test.ts index bc4dd8a81..518711f7b 100644 --- a/test/node/msw-api/setup-server/scenarios/generator.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/generator.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' diff --git a/test/node/msw-api/setup-server/scenarios/graphql.node.test.ts b/test/node/msw-api/setup-server/scenarios/graphql.node.test.ts index 4d9d99e55..900019523 100644 --- a/test/node/msw-api/setup-server/scenarios/graphql.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/graphql.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'cross-fetch' import { graphql, HttpResponse } from 'msw' diff --git a/test/node/msw-api/setup-server/scenarios/http.node.test.ts b/test/node/msw-api/setup-server/scenarios/http.node.test.ts index aeca32c49..70e2d335e 100644 --- a/test/node/msw-api/setup-server/scenarios/http.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/http.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import nodeHttp from 'http' import { HttpServer } from '@open-draft/test-server/http' diff --git a/test/node/msw-api/setup-server/scenarios/https.node.test.ts b/test/node/msw-api/setup-server/scenarios/https.node.test.ts index 32eee39ad..92fec5641 100644 --- a/test/node/msw-api/setup-server/scenarios/https.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/https.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import https from 'https' import { HttpServer, httpsAgent } from '@open-draft/test-server/http' diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/bypass.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/bypass.node.test.ts index d35478e09..c7d557911 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/bypass.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/bypass.node.test.ts @@ -1,10 +1,10 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpServer } from '@open-draft/test-server/http' -import { setupServer } from 'msw/node' import { HttpResponse, http } from 'msw' +import { setupServer } from 'msw/node' const httpServer = new HttpServer((app) => { app.get('/', (req, res) => { @@ -27,12 +27,12 @@ beforeAll(async () => { ) server.listen({ onUnhandledRequest: 'bypass' }) - jest.spyOn(global.console, 'error').mockImplementation() - jest.spyOn(global.console, 'warn').mockImplementation() + vi.spyOn(global.console, 'error').mockImplementation(() => void 0) + vi.spyOn(global.console, 'warn').mockImplementation(() => void 0) }) afterAll(async () => { - jest.restoreAllMocks() + vi.restoreAllMocks() server.close() await httpServer.close() }) diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.node.test.ts index c941910c3..0bc030006 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback-throws.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback.node.test.ts index 13799b6fe..eb1220fe3 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/callback.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts index 460c85e6b..99a29b152 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/default.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' @@ -13,13 +13,13 @@ const server = setupServer( beforeAll(() => { server.listen() - jest.spyOn(global.console, 'error').mockImplementation() - jest.spyOn(global.console, 'warn').mockImplementation() + vi.spyOn(global.console, 'error').mockImplementation(() => void 0) + vi.spyOn(global.console, 'warn').mockImplementation(() => void 0) }) afterAll(() => { server.close() - jest.restoreAllMocks() + vi.restoreAllMocks() }) test('warns on unhandled requests by default', async () => { diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/error.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/error.node.test.ts index c6bb16f9f..b0b7ac859 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/error.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/error.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpServer } from '@open-draft/test-server/http' @@ -40,16 +40,16 @@ beforeAll(async () => { }) beforeEach(() => { - jest.spyOn(global.console, 'error').mockImplementation() - jest.spyOn(global.console, 'warn').mockImplementation() + vi.spyOn(global.console, 'error').mockImplementation(() => void 0) + vi.spyOn(global.console, 'warn').mockImplementation(() => void 0) }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) afterAll(async () => { - jest.restoreAllMocks() + vi.restoreAllMocks() server.close() await httpServer.close() }) diff --git a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/warn.node.test.ts b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/warn.node.test.ts index 28fd440f9..31bba3f9d 100644 --- a/test/node/msw-api/setup-server/scenarios/on-unhandled-request/warn.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/on-unhandled-request/warn.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { setupServer } from 'msw/node' @@ -13,12 +13,12 @@ const server = setupServer( beforeAll(() => { server.listen({ onUnhandledRequest: 'warn' }) - jest.spyOn(global.console, 'warn').mockImplementation() + vi.spyOn(global.console, 'warn').mockImplementation(() => void 0) }) afterAll(() => { server.close() - jest.restoreAllMocks() + vi.restoreAllMocks() }) test('warns on unhandled request when using the "warn" value', async () => { diff --git a/test/node/msw-api/setup-server/scenarios/relative-url.node.test.ts b/test/node/msw-api/setup-server/scenarios/relative-url.node.test.ts index 85b1f37fe..047649eee 100644 --- a/test/node/msw-api/setup-server/scenarios/relative-url.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/relative-url.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' diff --git a/test/node/msw-api/setup-server/scenarios/response-patching..node.test.ts b/test/node/msw-api/setup-server/scenarios/response-patching..node.test.ts index 0c9891509..5b00c06f5 100644 --- a/test/node/msw-api/setup-server/scenarios/response-patching..node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/response-patching..node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { HttpServer } from '@open-draft/test-server/http' import { HttpResponse, http, bypass } from 'msw' diff --git a/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts b/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts index ea98d859c..e2c56611d 100644 --- a/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts +++ b/test/node/msw-api/setup-server/scenarios/xhr.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom */ import { http } from 'msw' import { setupServer } from 'msw/node' @@ -37,16 +37,22 @@ describe('given I perform an XMLHttpRequest', () => { let headers: Headers let body: string - beforeAll((done) => { + beforeAll(async () => { const req = new XMLHttpRequest() req.open('GET', 'http://localhost:3001/resource') - req.onload = function () { - statusCode = this.status - body = JSON.parse(this.response) - headers = stringToHeaders(this.getAllResponseHeaders()) - done() - } + + const requestFinishPromise = new Promise((resolve, reject) => { + req.onload = function () { + statusCode = this.status + body = JSON.parse(this.response) + headers = stringToHeaders(this.getAllResponseHeaders()) + resolve() + } + req.onerror = reject.bind(req) + }) req.send() + + await requestFinishPromise }) test('returns mocked status code', () => { diff --git a/test/node/msw-api/setup-server/use.node.test.ts b/test/node/msw-api/setup-server/use.node.test.ts index 8e74db56d..8d0c9ad04 100644 --- a/test/node/msw-api/setup-server/use.node.test.ts +++ b/test/node/msw-api/setup-server/use.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' diff --git a/test/node/regressions/many-request-handlers-jsdom.test.ts b/test/node/regressions/many-request-handlers-jsdom.test.ts index c2c81c2a6..0e9168397 100644 --- a/test/node/regressions/many-request-handlers-jsdom.test.ts +++ b/test/node/regressions/many-request-handlers-jsdom.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment jsdom + * @vitest-environment jsdom * * @note In JSDOM, the "AbortSignal" class is polyfilled instead of * using the Node.js global. Because of that, its instances won't @@ -32,12 +32,12 @@ const server = setupServer(...restHandlers, ...graphqlHanlers) beforeAll(() => { server.listen() - jest.spyOn(process.stderr, 'write') + vi.spyOn(process.stderr, 'write') }) afterAll(() => { server.close() - jest.restoreAllMocks() + vi.restoreAllMocks() }) it('does not print a memory leak warning when having many request handlers', async () => { diff --git a/test/node/regressions/many-request-handlers.test.ts b/test/node/regressions/many-request-handlers.test.ts index ecdd4d793..7933aa791 100644 --- a/test/node/regressions/many-request-handlers.test.ts +++ b/test/node/regressions/many-request-handlers.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { graphql, http, HttpResponse } from 'msw' import { setupServer } from 'msw/node' @@ -25,12 +25,12 @@ const server = setupServer(...restHandlers, ...graphqlHanlers) beforeAll(() => { server.listen() - jest.spyOn(process.stderr, 'write') + vi.spyOn(process.stderr, 'write') }) afterAll(() => { server.close() - jest.restoreAllMocks() + vi.restoreAllMocks() }) it('does not print a memory leak warning when having many request handlers', async () => { diff --git a/test/node/rest-api/cookies-inheritance.node.test.ts b/test/node/rest-api/cookies-inheritance.node.test.ts index 8672570f0..bd2fc2522 100644 --- a/test/node/rest-api/cookies-inheritance.node.test.ts +++ b/test/node/rest-api/cookies-inheritance.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment jsdom */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' @@ -61,11 +61,15 @@ test('inherits cookies set from a preceeding request', async () => { const res = await fetch(httpServer.https.url('/login'), { method: 'POST', }).then(() => { + // Fetch the user after requesting login to see + // if the response cookies set in the login request handler + // are automatically forwarded to the "GET /user" request. return fetch(httpServer.https.url('/user')) }) - const json = await res.json() expect(res.status).toBe(200) + + const json = await res.json() expect(json).toEqual({ firstName: 'John', lastName: 'Maverick', diff --git a/test/node/rest-api/https.node.test.ts b/test/node/rest-api/https.node.test.ts index 72fb2a836..dab891776 100644 --- a/test/node/rest-api/https.node.test.ts +++ b/test/node/rest-api/https.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import https from 'https' import { HttpResponse, http } from 'msw' @@ -19,7 +19,7 @@ afterAll(() => { server.close() }) -test('intercepts and mocks a request made via "https"', (done) => { +test('intercepts and mocks a request made via "https"', async () => { server.use( http.get('https://api.example.com/resource', () => { return HttpResponse.text('Hello, world!') @@ -27,20 +27,21 @@ test('intercepts and mocks a request made via "https"', (done) => { ) const request = https.get('https://api.example.com/resource') - request.on('response', (response) => { - const chunks: Array = [] - response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) + await new Promise((resolve, reject) => { + request.on('response', (response) => { + const chunks: Array = [] + response.on('data', (chunk) => chunks.push(Buffer.from(chunk))) - response.on('error', done) - response.once('end', () => { - expect(chunks).toHaveLength(1) + response.on('error', (error) => reject(error)) + response.once('end', () => { + expect(chunks).toHaveLength(1) - const responseText = Buffer.concat(chunks).toString('utf8') - expect(responseText).toBe('Hello, world!') + const responseText = Buffer.concat(chunks).toString('utf8') + expect(responseText).toBe('Hello, world!') - done() + resolve() + }) }) + request.on('error', (error) => reject(error)) }) - - request.on('error', done) }) diff --git a/test/node/rest-api/request/body/body-arraybuffer.node.test.ts b/test/node/rest-api/request/body/body-arraybuffer.node.test.ts index dd5991223..17e71235e 100644 --- a/test/node/rest-api/request/body/body-arraybuffer.node.test.ts +++ b/test/node/rest-api/request/body/body-arraybuffer.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { http, HttpResponse } from 'msw' diff --git a/test/node/rest-api/request/body/body-form-data.node.test.ts b/test/node/rest-api/request/body/body-form-data.node.test.ts index f07d5026a..8febd9f53 100644 --- a/test/node/rest-api/request/body/body-form-data.node.test.ts +++ b/test/node/rest-api/request/body/body-form-data.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' diff --git a/test/node/rest-api/request/body/body-json.node.test.ts b/test/node/rest-api/request/body/body-json.node.test.ts index 20f301b37..96a79325b 100644 --- a/test/node/rest-api/request/body/body-json.node.test.ts +++ b/test/node/rest-api/request/body/body-json.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' diff --git a/test/node/rest-api/request/body/body-text.node.test.ts b/test/node/rest-api/request/body/body-text.node.test.ts index b3025686f..f3adf3622 100644 --- a/test/node/rest-api/request/body/body-text.node.test.ts +++ b/test/node/rest-api/request/body/body-text.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' diff --git a/test/node/rest-api/request/body/body-used.node.test.ts b/test/node/rest-api/request/body/body-used.node.test.ts index cc6d77a5c..aa5117562 100644 --- a/test/node/rest-api/request/body/body-used.node.test.ts +++ b/test/node/rest-api/request/body/body-used.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { HttpResponse, http, graphql } from 'msw' import { setupServer } from 'msw/node' @@ -21,7 +21,7 @@ beforeAll(async () => { afterEach(() => { server.resetHandlers() - jest.restoreAllMocks() + vi.restoreAllMocks() }) afterAll(async () => { @@ -31,7 +31,7 @@ afterAll(async () => { it('does not read the body while parsing an unhandled request', async () => { // Expecting an unhandled request warning in this test. - jest.spyOn(console, 'warn').mockImplementation(() => {}) + vi.spyOn(console, 'warn').mockImplementation(() => {}) const requestUrl = httpServer.http.url('/resource') const response = await fetch(requestUrl, { diff --git a/test/node/rest-api/request/matching/all.node.test.ts b/test/node/rest-api/request/matching/all.node.test.ts index 350855cee..ed37db181 100644 --- a/test/node/rest-api/request/matching/all.node.test.ts +++ b/test/node/rest-api/request/matching/all.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch, { Response } from 'node-fetch' import { HttpServer } from '@open-draft/test-server/http' diff --git a/test/node/rest-api/request/matching/path-params-decode.node.test.ts b/test/node/rest-api/request/matching/path-params-decode.node.test.ts index f59815ffc..cfc7a29b4 100644 --- a/test/node/rest-api/request/matching/path-params-decode.node.test.ts +++ b/test/node/rest-api/request/matching/path-params-decode.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' diff --git a/test/node/rest-api/response/body-binary.node.test.ts b/test/node/rest-api/response/body-binary.node.test.ts index 1c9d8b681..1913e1ccc 100644 --- a/test/node/rest-api/response/body-binary.node.test.ts +++ b/test/node/rest-api/response/body-binary.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest environment-node + * @vitest-environment node */ import * as path from 'path' import * as fs from 'fs' diff --git a/test/node/rest-api/response/body-json.node.test.ts b/test/node/rest-api/response/body-json.node.test.ts index 9c59d1b92..4a89dda2d 100644 --- a/test/node/rest-api/response/body-json.node.test.ts +++ b/test/node/rest-api/response/body-json.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { HttpResponse, http } from 'msw' import { setupServer } from 'msw/node' diff --git a/test/node/rest-api/response/body-stream.node.test.ts b/test/node/rest-api/response/body-stream.node.test.ts index 2e657b5b7..b1d3d7c2a 100644 --- a/test/node/rest-api/response/body-stream.node.test.ts +++ b/test/node/rest-api/response/body-stream.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import https from 'https' import { HttpResponse, http, delay } from 'msw' @@ -49,7 +49,7 @@ test('responds with a ReadableStream', async () => { expect(await response.text()).toBe('helloworld') }) -test('supports delays when enqueuing chunks', (done) => { +test('supports delays when enqueuing chunks', async () => { server.use( http.get('https://api.example.com/stream', () => { const stream = new ReadableStream({ @@ -74,29 +74,31 @@ test('supports delays when enqueuing chunks', (done) => { }), ) - const request = https.get('https://api.example.com/stream', (response) => { - const chunks: Array<{ buffer: Buffer; timestamp: number }> = [] + await new Promise((resolve, reject) => { + const request = https.get('https://api.example.com/stream', (response) => { + const chunks: Array<{ buffer: Buffer; timestamp: number }> = [] - response.on('data', (data) => { - chunks.push({ - buffer: Buffer.from(data), - timestamp: Date.now(), + response.on('data', (data) => { + chunks.push({ + buffer: Buffer.from(data), + timestamp: Date.now(), + }) }) - }) - response.once('end', () => { - const textChunks = chunks.map((chunk) => chunk.buffer.toString('utf8')) - expect(textChunks).toEqual(['first', 'second', 'third']) + response.once('end', () => { + const textChunks = chunks.map((chunk) => chunk.buffer.toString('utf8')) + expect(textChunks).toEqual(['first', 'second', 'third']) - // Ensure that the chunks were sent over time, - // respecting the delay set in the mocked stream. - const chunkTimings = chunks.map((chunk) => chunk.timestamp) - expect(chunkTimings[1] - chunkTimings[0]).toBeGreaterThanOrEqual(490) - expect(chunkTimings[2] - chunkTimings[1]).toBeGreaterThanOrEqual(490) + // Ensure that the chunks were sent over time, + // respecting the delay set in the mocked stream. + const chunkTimings = chunks.map((chunk) => chunk.timestamp) + expect(chunkTimings[1] - chunkTimings[0]).toBeGreaterThanOrEqual(490) + expect(chunkTimings[2] - chunkTimings[1]).toBeGreaterThanOrEqual(490) - done() + resolve() + }) }) - }) - request.on('error', done) + request.on('error', (error) => reject(error)) + }) }) diff --git a/test/node/rest-api/response/body-text.node.test.ts b/test/node/rest-api/response/body-text.node.test.ts index 0c97edf49..c911744cf 100644 --- a/test/node/rest-api/response/body-text.node.test.ts +++ b/test/node/rest-api/response/body-text.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' diff --git a/test/node/rest-api/response/body-xml.node.test.ts b/test/node/rest-api/response/body-xml.node.test.ts index 8862936db..2ff8370ed 100644 --- a/test/node/rest-api/response/body-xml.node.test.ts +++ b/test/node/rest-api/response/body-xml.node.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import fetch from 'node-fetch' import { HttpResponse, http } from 'msw' diff --git a/test/node/rest-api/response/response-error.test.ts b/test/node/rest-api/response/response-error.test.ts index 443023ecb..596216da5 100644 --- a/test/node/rest-api/response/response-error.test.ts +++ b/test/node/rest-api/response/response-error.test.ts @@ -1,5 +1,5 @@ /** - * @jest-environment node + * @vitest-environment node */ import { http } from 'msw' import { setupServer } from 'msw/node' diff --git a/test/node/tsconfig.json b/test/node/tsconfig.json new file mode 100644 index 000000000..d024ec71a --- /dev/null +++ b/test/node/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "baseUrl": ".", + "paths": { + "msw": ["../.."], + "msw/*": ["../../*"] + }, + "noEmit": true, + "declaration": false, + "resolveJsonModule": true, + // Support default imports for modules that have no default exports. + // This way "http" imports stay "import http from 'http'". + // Using wildcard there breaks request interception since it + // encapsulates the values under the ".default" key. + "allowSyntheticDefaultImports": true, + "types": ["node", "vitest/globals"] + }, + "include": ["../../global.d.ts", "./**/*.test.ts"] +} diff --git a/test/node/vitest.config.ts b/test/node/vitest.config.ts new file mode 100644 index 000000000..154045bdb --- /dev/null +++ b/test/node/vitest.config.ts @@ -0,0 +1,28 @@ +import * as path from 'node:path' +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + /** + * @note Paths are resolved against CWD. + */ + dir: './test/node', + globals: true, + alias: { + msw: path.resolve(__dirname, '../..'), + }, + environmentOptions: { + jsdom: { + url: 'http://localhost/', + }, + }, + /** + * @note Run Node.js integration tests in sequence. + * There's a test that involves building the library, + * which results in the "lib" directory being deleted. + * If any tests attempt to run during that window, + * they will fail, unable to resolve the "msw" import alias. + */ + singleThread: true, + }, +}) diff --git a/test/tsconfig.json b/test/tsconfig.json index 4644efe66..4320f5ea4 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -13,7 +13,7 @@ "msw": [".."], "msw/*": ["../*"] }, - "types": ["node", "jest"] + "types": ["node"] }, "include": ["**/*.ts"] } diff --git a/test/typings/tsconfig.json b/test/typings/tsconfig.json index ce1fa9209..c3312e1d0 100644 --- a/test/typings/tsconfig.json +++ b/test/typings/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig", + "extends": "../../tsconfig.base.json", "compilerOptions": { "target": "esnext", "module": "commonjs", @@ -7,6 +7,7 @@ "types": ["node"], "typeRoots": ["../../node_modules/@types"], "lib": ["dom"], + "resolveJsonModule": true, "rootDir": "../..", "baseUrl": ".", "paths": { diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 000000000..4e3f073ac --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "strict": true, + "target": "es6", + "module": "esnext", + "moduleResolution": "node", + "strictNullChecks": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": false + }, + "include": ["./global.d.ts"], + "exclude": ["node_modules", "lib"] +} diff --git a/tsconfig.json b/tsconfig.json index c5e2f59a9..57a15aab2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,22 +1,17 @@ { - "compilerOptions": { - "strict": true, - "target": "es6", - "module": "ESNext", - "moduleResolution": "node", - "allowSyntheticDefaultImports": false, - "esModuleInterop": false, - "resolveJsonModule": true, - "declaration": true, - "declarationDir": "lib/types", - "noEmit": true, - "lib": ["DOM", "DOM.Iterable", "ESNext.AsyncIterable"], - "baseUrl": "./src", - "paths": { - "~/core": ["./core"], - "~/core/*": ["./core/*"] + "extends": "./tsconfig.base.json", + "references": [ + // Source. + { + "path": "./src/browser/tsconfig.browser.json" + }, + { + "path": "./src/tsconfig.node.json" + }, + + // Tests. + { + "path": "./tsconfig.test.unit.json" } - }, - "include": ["global.d.ts", "src/**/*.ts"], - "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"] + ] } diff --git a/tsconfig.test.unit.json b/tsconfig.test.unit.json new file mode 100644 index 000000000..abea30c95 --- /dev/null +++ b/tsconfig.test.unit.json @@ -0,0 +1,17 @@ +{ + // Configuration for the unit tests living + // next to the source code. + "extends": "./tsconfig.base.json", + "compilerOptions": { + "composite": true, + "target": "esnext", + "module": "esnext", + "types": ["vitest/globals"] + }, + "include": ["./src/**/*.test.ts", "./test/support"], + "references": [ + { + "path": "./src/tsconfig.src.json" + } + ] +} diff --git a/tsup.config.ts b/tsup.config.ts index 609045a35..3e3807145 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,3 +1,4 @@ +import * as path from 'node:path' import { defineConfig, Options } from 'tsup' import * as glob from 'glob' import { @@ -29,6 +30,7 @@ const coreConfig: Options = { bundle: false, splitting: false, dts: true, + tsconfig: path.resolve(__dirname, 'src/tsconfig.core.build.json'), esbuildPlugins: [forceEsmExtensionsPlugin()], } @@ -44,7 +46,7 @@ const nodeConfig: Options = { bundle: true, splitting: false, dts: true, - + tsconfig: path.resolve(__dirname, 'src/tsconfig.node.build.json'), esbuildPlugins: [resolveCoreImportsPlugin(), forceEsmExtensionsPlugin()], } @@ -58,6 +60,12 @@ const browserConfig: Options = { bundle: true, splitting: false, dts: true, + /** + * @note Use a proxy TypeScript configuration where the "compilerOptions.composite" + * option is set to false. + * @see https://github.com/egoist/tsup/issues/571 + */ + tsconfig: path.resolve(__dirname, 'src/browser/tsconfig.browser.build.json'), define: { SERVICE_WORKER_CHECKSUM: JSON.stringify(SERVICE_WORKER_CHECKSUM), }, @@ -78,6 +86,7 @@ const reactNativeConfig: Options = { bundle: true, splitting: false, dts: true, + tsconfig: path.resolve(__dirname, 'src/tsconfig.node.build.json'), esbuildPlugins: [resolveCoreImportsPlugin(), forceEsmExtensionsPlugin()], } @@ -96,6 +105,7 @@ const iifeConfig: Options = { bundle: true, splitting: false, dts: false, + tsconfig: path.resolve(__dirname, 'src/browser/tsconfig.browser.build.json'), define: { // Sign the IIFE build as well because any bundle containing // the worker API must have the the integrity checksum defined. diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..f007e4c53 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,27 @@ +import * as path from 'node:path' +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + globals: true, + // Lookup the unit tests in the "src" directory becase + // they are located next to the source code they are testing. + dir: './src', + alias: { + '~/core': path.resolve(__dirname, 'src/core'), + }, + typecheck: { + // Load the TypeScript configuration to the unit tests. + // Otherwise, Vitest will use the root-level "tsconfig.json", + // which includes way too more than the tests need. + tsconfig: './tsconfig.test.unit.json', + }, + environmentOptions: { + jsdom: { + // Drop the 3000 port from the default "location.href" + // for backward-compatibility with the existing tests. + url: 'http://localhost/', + }, + }, + }, +})