diff --git a/.circleci/config.yml b/.circleci/config.yml index fe35a4fc5a7f..7280fa057c1d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -59,5 +59,5 @@ workflows: matrix: parameters: # For some reason, v20 fails to run yarn install… - node-version: ['14', '16', '18', '19'] + node-version: ['16', '18'] - test-jest-jasmine diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 7151330e720d..7777974cb712 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -385,7 +385,7 @@ module.exports = { parserOptions: { sourceType: 'module', }, - plugins: ['import', 'jsdoc'], + plugins: ['import', 'jsdoc', 'unicorn'], rules: { 'accessor-pairs': ['warn', {setWithoutGet: true}], 'block-scoped-var': 'off', @@ -590,6 +590,12 @@ module.exports = { 'wrap-iife': 'off', 'wrap-regex': 'off', yoda: 'off', + + 'unicorn/explicit-length-check': 'error', + 'unicorn/no-negated-condition': 'error', + 'unicorn/prefer-default-parameters': 'error', + 'unicorn/prefer-includes': 'error', + 'unicorn/template-indent': 'error', }, settings: { 'import/ignore': ['react-native'], diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 000000000000..b49828e1cf0d --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,52 @@ +name: Node Nightly CI + +on: + workflow_dispatch: + schedule: + - cron: '0 12 * * *' + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + prepare-yarn-cache-ubuntu: + uses: ./.github/workflows/prepare-cache.yml + with: + os: ubuntu-latest + prepare-yarn-cache-macos: + uses: ./.github/workflows/prepare-cache.yml + with: + os: macos-latest + prepare-yarn-cache-windows: + uses: ./.github/workflows/prepare-cache.yml + with: + os: windows-latest + + test-ubuntu: + uses: ./.github/workflows/test-nightly.yml + needs: prepare-yarn-cache-ubuntu + with: + os: ubuntu-latest + test-macos: + uses: ./.github/workflows/test-nightly.yml + needs: prepare-yarn-cache-macos + with: + os: macos-latest + test-windows: + uses: ./.github/workflows/test-nightly.yml + needs: prepare-yarn-cache-windows + with: + os: windows-latest + notify: + name: Notify failed build + needs: [test-ubuntu, test-macos, test-windows] + if: failure() + runs-on: ubuntu-latest + steps: + - uses: jayqi/failed-build-issue-action@v1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index e22167c6bde7..4b3c97752772 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -5,8 +5,7 @@ on: branches: - main pull_request: - branches: - - '**' + merge_group: concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} diff --git a/.github/workflows/test-nightly.yml b/.github/workflows/test-nightly.yml new file mode 100644 index 000000000000..5e5a4f52f4a4 --- /dev/null +++ b/.github/workflows/test-nightly.yml @@ -0,0 +1,63 @@ +name: Test + +on: + workflow_call: + inputs: + os: + required: true + type: string + +jobs: + test: + strategy: + fail-fast: false + matrix: + shard: ['1/4', '2/4', '3/4', '4/4'] + name: Node nightly on ${{ inputs.os }} (${{ matrix.shard }}) + runs-on: ${{ inputs.os }} + + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: 21-nightly + cache: yarn + - name: install + run: yarn --immutable + - name: build + run: yarn build:js + - name: Get number of CPU cores + id: cpu-cores + uses: SimenB/github-actions-cpu-cores@v2 + - name: run tests + run: yarn test-ci-partial:parallel --max-workers ${{ steps.cpu-cores.outputs.count }} --shard=${{ matrix.shard }} + + test-jasmine: + strategy: + fail-fast: false + matrix: + shard: ['1/4', '2/4', '3/4', '4/4'] + name: Node Nightly on ${{ inputs.os }} using jest-jasmine2 (${{ matrix.shard }}) + runs-on: ${{ inputs.os }} + + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Use Node.js LTS + uses: actions/setup-node@v3 + with: + node-version: 21-nightly + cache: yarn + - name: install + run: yarn --immutable + - name: build + run: yarn build:js + - name: Get number of CPU cores + id: cpu-cores + uses: SimenB/github-actions-cpu-cores@v2 + - name: run tests using jest-jasmine + run: yarn jest-jasmine-ci --max-workers ${{ steps.cpu-cores.outputs.count }} --shard=${{ matrix.shard }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dc7c7a2458ae..91f24574562b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [14.x, 16.x, 18.x, 19.x, 20.x] + node-version: [16.x, 18.x, 20.x] shard: ['1/4', '2/4', '3/4', '4/4'] name: Node v${{ matrix.node-version }} on ${{ inputs.os }} (${{ matrix.shard }}) runs-on: ${{ inputs.os }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 5308c935122a..8f4f31fc98e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,18 @@ ### Features +- `[@jest/test-sequencer, jest-core]` [**BREAKING**] Exposes `globalConfig` & `contexts` to `TestSequencer` ([#14535](https://github.com/jestjs/jest/pull/14535), & [#14543](https://github.com/jestjs/jest/pull/14543)) + ### Fixes +- `[jest-leak-detector]` Make leak-detector more aggressive when running GC ([#14526](https://github.com/jestjs/jest/pull/14526)) + ### Performance ### Chore & Maintenance +- `[*]` [**BREAKING**] Drop support for Node.js versions 14 and 19 ([#14460](https://github.com/jestjs/jest/pull/14460)) + ## 29.7.0 ### Features diff --git a/constraints.pro b/constraints.pro index 88abcbdd71f8..eb59863a1c6c 100644 --- a/constraints.pro +++ b/constraints.pro @@ -57,7 +57,7 @@ gen_enforced_field(WorkspaceCwd, 'publishConfig.access', null) :- workspace_field(WorkspaceCwd, 'private', true). % Enforces the engines.node field for public workspace -gen_enforced_field(WorkspaceCwd, 'engines.node', '^14.15.0 || ^16.10.0 || >=18.0.0') :- +gen_enforced_field(WorkspaceCwd, 'engines.node', '^16.10.0 || ^18.12.0 || >=20.0.0') :- \+ workspace_field(WorkspaceCwd, 'private', true). % Enforces the main and types field to start with ./ diff --git a/docs/Configuration.md b/docs/Configuration.md index acb52e2746a7..4a95c468b3f5 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -1739,14 +1739,14 @@ test('does not show prototypes for object and array inline', () => { array: [{hello: 'Danger'}], }; expect(object).toMatchInlineSnapshot(` -{ - "array": [ { - "hello": "Danger", - }, - ], -} - `); + "array": [ + { + "hello": "Danger", + }, + ], + } + `); }); ``` diff --git a/docs/ExpectAPI.md b/docs/ExpectAPI.md index 46b2c361585e..3596d28d5588 100644 --- a/docs/ExpectAPI.md +++ b/docs/ExpectAPI.md @@ -1186,10 +1186,10 @@ function areVolumesEqual(a, b) { if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } } @@ -1243,10 +1243,10 @@ function areVolumesEqual(a: unknown, b: unknown): boolean | undefined { if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } } @@ -1297,10 +1297,10 @@ function areAuthorEqual(a, b) { if (isAAuthor && isBAuthor) { // Authors are equal if they have the same name return a.name === b.name; - } else if (isAAuthor !== isBAuthor) { - return false; - } else { + } else if (isAAuthor === isBAuthor) { return undefined; + } else { + return false; } } @@ -1315,10 +1315,10 @@ function areBooksEqual(a, b, customTesters) { return ( a.name === b.name && this.equals(a.authors, b.authors, customTesters) ); - } else if (isABook !== isBBook) { - return false; - } else { + } else if (isABook === isBBook) { return undefined; + } else { + return false; } } diff --git a/docs/SnapshotTesting.md b/docs/SnapshotTesting.md index 3a58dbc0a347..c21da98103a7 100644 --- a/docs/SnapshotTesting.md +++ b/docs/SnapshotTesting.md @@ -127,15 +127,15 @@ it('renders correctly', () => { .create(Example Site) .toJSON(); expect(tree).toMatchInlineSnapshot(` - - Example Site - -`); + + Example Site + + `); }); ``` diff --git a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap index e8f4df3c52a8..39a5cfa26c16 100644 --- a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap +++ b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap @@ -1,5 +1,29 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`Wrong globals for environment on node <21 print useful error for navigator 1`] = ` +"FAIL __tests__/node.js + ✕ use navigator + ○ skipped use document + ○ skipped use window + + ● use navigator + + The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. + Consider using the "jsdom" test environment. + + ReferenceError: navigator is not defined + + 30 | + 31 | test('use navigator', () => { + > 32 | const userAgent = navigator.userAgent; + | ^ + 33 | + 34 | console.log(userAgent); + 35 | + + at Object.navigator (__tests__/node.js:32:21)" +`; + exports[`Wrong globals for environment print useful error for document 1`] = ` "FAIL __tests__/node.js ✕ use document @@ -24,30 +48,6 @@ exports[`Wrong globals for environment print useful error for document 1`] = ` at Object.document (__tests__/node.js:16:15)" `; -exports[`Wrong globals for environment print useful error for navigator 1`] = ` -"FAIL __tests__/node.js - ✕ use navigator - ○ skipped use document - ○ skipped use window - - ● use navigator - - The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/configuration#testenvironment-string. - Consider using the "jsdom" test environment. - - ReferenceError: navigator is not defined - - 30 | - 31 | test('use navigator', () => { - > 32 | const userAgent = navigator.userAgent; - | ^ - 33 | - 34 | console.log(userAgent); - 35 | - - at Object.navigator (__tests__/node.js:32:21)" -`; - exports[`Wrong globals for environment print useful error for unref 1`] = ` "FAIL __tests__/jsdom.js ✕ use unref diff --git a/e2e/__tests__/customInlineSnapshotMatchers.test.ts b/e2e/__tests__/customInlineSnapshotMatchers.test.ts index 49b5783e6929..07c241c5e907 100644 --- a/e2e/__tests__/customInlineSnapshotMatchers.test.ts +++ b/e2e/__tests__/customInlineSnapshotMatchers.test.ts @@ -19,7 +19,7 @@ test('works with custom inline snapshot matchers', () => { rest = rest .split('\n') - .filter(line => line.indexOf('at Error (native)') < 0) + .filter(line => !line.includes('at Error (native)')) .join('\n'); expect(rest).toMatchSnapshot(); @@ -36,7 +36,7 @@ test('can bail with a custom inline snapshot matcher', () => { rest = rest .split('\n') - .filter(line => line.indexOf('at Error (native)') < 0) + .filter(line => !line.includes('at Error (native)')) .join('\n'); expect(rest).toMatchSnapshot(); diff --git a/e2e/__tests__/customMatcherStackTrace.test.ts b/e2e/__tests__/customMatcherStackTrace.test.ts index 2d0a3e816de4..0f6e0cf8493e 100644 --- a/e2e/__tests__/customMatcherStackTrace.test.ts +++ b/e2e/__tests__/customMatcherStackTrace.test.ts @@ -15,7 +15,7 @@ test('works with custom matchers', () => { rest = rest .split('\n') - .filter(line => line.indexOf('at Error (native)') < 0) + .filter(line => !line.includes('at Error (native)')) .join('\n'); expect(rest).toMatchSnapshot(); diff --git a/e2e/__tests__/customTestSequencers.test.ts b/e2e/__tests__/customTestSequencers.test.ts index 40f0c43fc3cf..575822f9b8ac 100644 --- a/e2e/__tests__/customTestSequencers.test.ts +++ b/e2e/__tests__/customTestSequencers.test.ts @@ -79,3 +79,55 @@ test('run failed tests async', () => { .split('\n'); expect(sequence).toEqual(['./c.test.js', './d.test.js']); }); + +test('run tests based on even seed', () => { + const result = runJest( + dir, + [ + '-i', + '--config', + JSON.stringify({ + testSequencer: '/testSequencerWithSeed.js', + }), + '--seed=2', + ], + {}, + ); + expect(result.exitCode).toBe(0); + const sequence = extractSummary(result.stderr) + .rest.replace(/PASS /g, '') + .split('\n'); + expect(sequence).toEqual([ + './a.test.js', + './b.test.js', + './c.test.js', + './d.test.js', + './e.test.js', + ]); +}); + +test('run tests based on odd seed', () => { + const result = runJest( + dir, + [ + '-i', + '--config', + JSON.stringify({ + testSequencer: '/testSequencerWithSeed.js', + }), + '--seed=1', + ], + {}, + ); + expect(result.exitCode).toBe(0); + const sequence = extractSummary(result.stderr) + .rest.replace(/PASS /g, '') + .split('\n'); + expect(sequence).toEqual([ + './e.test.js', + './d.test.js', + './c.test.js', + './b.test.js', + './a.test.js', + ]); +}); diff --git a/e2e/__tests__/expectAsyncMatcher.test.ts b/e2e/__tests__/expectAsyncMatcher.test.ts index ca9a9c584323..695d1eade3cc 100644 --- a/e2e/__tests__/expectAsyncMatcher.test.ts +++ b/e2e/__tests__/expectAsyncMatcher.test.ts @@ -27,7 +27,7 @@ test('shows the correct errors in stderr when failing tests', () => { const rest = extractSummary(result.stderr) .rest.split('\n') - .filter(line => line.indexOf('packages/expect/build/index.js') === -1) + .filter(line => !line.includes('packages/expect/build/index.js')) .join('\n'); expect(rest).toMatchSnapshot(); diff --git a/e2e/__tests__/failures.test.ts b/e2e/__tests__/failures.test.ts index 031035e624ca..bd717a9eac3a 100644 --- a/e2e/__tests__/failures.test.ts +++ b/e2e/__tests__/failures.test.ts @@ -58,7 +58,7 @@ test('works with async failures', () => { const rest = cleanStderr(stderr) .split('\n') - .filter(line => line.indexOf('packages/expect/build/index.js') === -1) + .filter(line => !line.includes('packages/expect/build/index.js')) .join('\n'); // Remove replacements when jasmine is gone diff --git a/e2e/__tests__/wrongEnv.test.ts b/e2e/__tests__/wrongEnv.test.ts index 502bdf2791bc..b8563a1c21e8 100644 --- a/e2e/__tests__/wrongEnv.test.ts +++ b/e2e/__tests__/wrongEnv.test.ts @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +import {onNodeVersions} from '@jest/test-utils'; import {extractSummary} from '../Utils'; import runJest from '../runJest'; @@ -23,8 +24,10 @@ describe('Wrong globals for environment', () => { assertFailuresAndSnapshot(['node', '-t=document']); }); - it('print useful error for navigator', () => { - assertFailuresAndSnapshot(['node', '-t=navigator']); + onNodeVersions('<21', () => { + it('print useful error for navigator', () => { + assertFailuresAndSnapshot(['node', '-t=navigator']); + }); }); it('print useful error for unref', () => { diff --git a/e2e/custom-matcher-stack-trace/__tests__/sync.test.js b/e2e/custom-matcher-stack-trace/__tests__/sync.test.js index 51c0610637e9..4397e97004d5 100644 --- a/e2e/custom-matcher-stack-trace/__tests__/sync.test.js +++ b/e2e/custom-matcher-stack-trace/__tests__/sync.test.js @@ -10,13 +10,13 @@ function toCustomMatch(callback, expectation) { const actual = callback(); - if (actual !== expectation) { + if (actual === expectation) { + return {pass: true}; + } else { return { message: () => `Expected "${expectation}" but got "${actual}"`, pass: false, }; - } else { - return {pass: true}; } } diff --git a/e2e/custom-reporters/reporters/TestCaseStartReporter.js b/e2e/custom-reporters/reporters/TestCaseStartReporter.js index 096957ddefae..a0396b317b16 100644 --- a/e2e/custom-reporters/reporters/TestCaseStartReporter.js +++ b/e2e/custom-reporters/reporters/TestCaseStartReporter.js @@ -14,7 +14,7 @@ class TestCaseStartReporter { onTestCaseStart(test, testCaseStartInfo) { const mode = - testCaseStartInfo.mode != null ? testCaseStartInfo.mode : 'undefined'; + testCaseStartInfo.mode == null ? 'undefined' : testCaseStartInfo.mode; console.log( `onTestCaseStart: ${testCaseStartInfo.title}, ` + `mode: ${mode}, ` + diff --git a/e2e/custom-test-sequencer/testSequencerWithSeed.js b/e2e/custom-test-sequencer/testSequencerWithSeed.js new file mode 100644 index 000000000000..1ed6db6cffeb --- /dev/null +++ b/e2e/custom-test-sequencer/testSequencerWithSeed.js @@ -0,0 +1,31 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const Sequencer = require('@jest/test-sequencer').default; + +class CustomSequencer extends Sequencer { + constructor(_options) { + super(_options); + this.globalConfig = _options.globalConfig; + } + + sort(tests) { + const copyTests = Array.from(tests); + const seed = this.globalConfig.seed; + const sortedTests = copyTests.sort((testA, testB) => + testA.path > testB.path ? 1 : -1, + ); + + if (seed % 2 === 0) { + return sortedTests; + } else { + return sortedTests.reverse(); + } + } +} + +module.exports = CustomSequencer; diff --git a/e2e/filter/my-broken-setup-filter.js b/e2e/filter/my-broken-setup-filter.js index 75459689dc61..a360c67d5541 100644 --- a/e2e/filter/my-broken-setup-filter.js +++ b/e2e/filter/my-broken-setup-filter.js @@ -9,7 +9,7 @@ module.exports = function (tests) { return { - filtered: tests.filter(t => t.indexOf('foo') !== -1).map(test => ({test})), + filtered: tests.filter(t => t.includes('foo')).map(test => ({test})), }; }; diff --git a/e2e/filter/my-filter.js b/e2e/filter/my-filter.js index 83bcbd7bd213..10c71b83630c 100644 --- a/e2e/filter/my-filter.js +++ b/e2e/filter/my-filter.js @@ -12,7 +12,7 @@ module.exports = function (tests) { setTimeout(() => { resolve({ filtered: tests - .filter(t => t.indexOf('foo') !== -1) + .filter(t => t.includes('foo')) .map(test => ({message: 'some message', test})), }); }, 100); diff --git a/e2e/filter/my-secondary-filter.js b/e2e/filter/my-secondary-filter.js index 39eba9edc194..b6551712ee42 100644 --- a/e2e/filter/my-secondary-filter.js +++ b/e2e/filter/my-secondary-filter.js @@ -9,6 +9,6 @@ module.exports = function (tests) { return { - filtered: tests.filter(t => t.indexOf('foo') !== -1).map(test => ({test})), + filtered: tests.filter(t => t.includes('foo')).map(test => ({test})), }; }; diff --git a/e2e/filter/my-setup-filter.js b/e2e/filter/my-setup-filter.js index 70b8cb0efd0f..751568123d9e 100644 --- a/e2e/filter/my-setup-filter.js +++ b/e2e/filter/my-setup-filter.js @@ -14,7 +14,7 @@ const setupData = { module.exports = function (tests) { return { filtered: tests - .filter(t => t.indexOf(setupData.filterText) !== -1) + .filter(t => t.includes(setupData.filterText)) .map(test => ({test})), }; }; diff --git a/e2e/resolve/__tests__/resolve.test.js b/e2e/resolve/__tests__/resolve.test.js index 7e6297a631c0..ec03a86fa673 100644 --- a/e2e/resolve/__tests__/resolve.test.js +++ b/e2e/resolve/__tests__/resolve.test.js @@ -112,7 +112,7 @@ test('should throw module not found error if the module has dependencies that ca requiresUnexistingModule.js Test7.js __tests__/resolve.test.js\n - `, + `, }), ); }); diff --git a/e2e/resolve/hasteImpl.js b/e2e/resolve/hasteImpl.js index 68b024315255..c02806ad4eb1 100644 --- a/e2e/resolve/hasteImpl.js +++ b/e2e/resolve/hasteImpl.js @@ -12,7 +12,7 @@ const path = require('path'); module.exports = { getHasteName(filePath) { const name = path.parse(filePath).name; - const isMock = filePath.indexOf('__mocks__') !== -1; + const isMock = filePath.includes('__mocks__'); // Mocks are automatically parsed by Jest already. return name.startsWith('Test') && !isMock ? name : null; diff --git a/e2e/snapshot-formatting-changes/__tests__/snapshot.test.js b/e2e/snapshot-formatting-changes/__tests__/snapshot.test.js index 56938c7b28bd..3763d9914bcf 100644 --- a/e2e/snapshot-formatting-changes/__tests__/snapshot.test.js +++ b/e2e/snapshot-formatting-changes/__tests__/snapshot.test.js @@ -13,14 +13,14 @@ describe('snapshot serializer', () => { array: [{hello: 'Danger'}], }; expect(object).toMatchInlineSnapshot(` -{ - "array": [ - { - "hello": "Danger", - }, - ], -} -`); + { + "array": [ + { + "hello": "Danger", + }, + ], + } + `); }); it('uses 8 chars for indent, and shows no prototypes for object and array in a snapshot', () => { diff --git a/package.json b/package.json index 0754a8516b56..ac6b3fce29c6 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "@types/babel__core": "^7.1.14", "@types/babel__generator": "^7.0.0", "@types/babel__template": "^7.0.2", - "@types/node": "~14.14.45", + "@types/node": "^16.10.0", "@types/which": "^3.0.0", "@types/ws": "8.5.1", "@typescript-eslint/eslint-plugin": "^5.14.0", @@ -41,6 +41,7 @@ "eslint-plugin-local": "link:./.eslintplugin", "eslint-plugin-markdown": "^3.0.0", "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-unicorn": "^46.0.0", "execa": "^5.0.0", "find-process": "^1.4.1", "glob": "^10.0.0", @@ -169,10 +170,10 @@ "logo": "https://opencollective.com/jest/logo.txt" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "resolutions": { - "@types/node": "~14.14.45", + "@types/node": "~16.18.0", "@types/react": "^18.2.21", "ansi-escapes/type-fest": "^2.0.0", "babel-jest": "workspace:^", diff --git a/packages/babel-jest/package.json b/packages/babel-jest/package.json index 8a52ffc627ca..b783f4f16809 100644 --- a/packages/babel-jest/package.json +++ b/packages/babel-jest/package.json @@ -35,7 +35,7 @@ "@babel/core": "^7.8.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/babel-jest/src/__tests__/getCacheKey.test.ts b/packages/babel-jest/src/__tests__/getCacheKey.test.ts index fbe3a0b34b0c..eb9b2da1107b 100644 --- a/packages/babel-jest/src/__tests__/getCacheKey.test.ts +++ b/packages/babel-jest/src/__tests__/getCacheKey.test.ts @@ -20,6 +20,7 @@ afterEach(() => { jest.resetModules(); if (process.version === 'new-node-version') { + // @ts-expect-error: Testing purpose process.version = processVersion; } @@ -194,6 +195,7 @@ describe('getCacheKey', () => { test('if node version is changing', () => { // @ts-expect-error: Testing purpose delete process.version; + // @ts-expect-error: Testing purpose process.version = 'new-node-version'; const newCacheKey = getCacheKey!(sourceText, sourcePath, transformOptions); diff --git a/packages/babel-plugin-jest-hoist/package.json b/packages/babel-plugin-jest-hoist/package.json index 486107b0be41..9708b66d2490 100644 --- a/packages/babel-plugin-jest-hoist/package.json +++ b/packages/babel-plugin-jest-hoist/package.json @@ -7,7 +7,7 @@ "directory": "packages/babel-plugin-jest-hoist" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "license": "MIT", "main": "./build/index.js", diff --git a/packages/babel-preset-jest/package.json b/packages/babel-preset-jest/package.json index e2e05eaf9129..0fda8bd9bf32 100644 --- a/packages/babel-preset-jest/package.json +++ b/packages/babel-preset-jest/package.json @@ -20,7 +20,7 @@ "@babel/core": "^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/create-jest/package.json b/packages/create-jest/package.json index f0a1d456b9d8..627bad9a629a 100644 --- a/packages/create-jest/package.json +++ b/packages/create-jest/package.json @@ -29,7 +29,7 @@ "prompts": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/create-jest/src/runCreate.ts b/packages/create-jest/src/runCreate.ts index 7a8d2fbb0538..4a4d67af43ab 100644 --- a/packages/create-jest/src/runCreate.ts +++ b/packages/create-jest/src/runCreate.ts @@ -131,9 +131,9 @@ export async function runCreate(rootDir = process.cwd()): Promise { // Determine Jest config path const jestConfigPath = - existingJestConfigExt != null - ? getConfigFilename(existingJestConfigExt) - : path.join(rootDir, getConfigFilename(jestConfigFileExt)); + existingJestConfigExt == null + ? path.join(rootDir, getConfigFilename(jestConfigFileExt)) + : getConfigFilename(existingJestConfigExt); const shouldModifyScripts = results.scripts; diff --git a/packages/diff-sequences/package.json b/packages/diff-sequences/package.json index 9f5ac6018011..ad26c505acfe 100644 --- a/packages/diff-sequences/package.json +++ b/packages/diff-sequences/package.json @@ -16,7 +16,7 @@ "diff" ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "main": "./build/index.js", "types": "./build/index.d.ts", diff --git a/packages/expect-utils/package.json b/packages/expect-utils/package.json index dc6404127b89..d5197659c9db 100644 --- a/packages/expect-utils/package.json +++ b/packages/expect-utils/package.json @@ -26,7 +26,7 @@ "tsd-lite": "^0.7.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/expect-utils/src/utils.ts b/packages/expect-utils/src/utils.ts index ed5c2e36bf74..b1375c1d53b6 100644 --- a/packages/expect-utils/src/utils.ts +++ b/packages/expect-utils/src/utils.ts @@ -60,7 +60,7 @@ export const getPath = ( propertyPath = pathAsArray(propertyPath); } - if (propertyPath.length) { + if (propertyPath.length > 0) { const lastProp = propertyPath.length === 1; const prop = propertyPath[0]; const newObject = object[prop]; @@ -482,7 +482,7 @@ export const isError = (value: unknown): value is Error => { }; export function emptyObject(obj: unknown): boolean { - return obj && typeof obj === 'object' ? !Object.keys(obj).length : false; + return obj && typeof obj === 'object' ? Object.keys(obj).length === 0 : false; } const MULTILINE_REGEXP = /[\r\n]/; diff --git a/packages/expect/__typetests__/expect.test.ts b/packages/expect/__typetests__/expect.test.ts index 4e1d2bb72b5d..325c909840fc 100644 --- a/packages/expect/__typetests__/expect.test.ts +++ b/packages/expect/__typetests__/expect.test.ts @@ -174,7 +174,7 @@ const allowOmittingExpected: MatcherFunction = ( actual: unknown, ...expect: Array ) => { - if (expect.length !== 0) { + if (expect.length > 0) { throw new Error('This matcher does not take any expected argument.'); } @@ -194,7 +194,7 @@ const toHaveContext: MatcherFunction = function ( ) { expectType(this); - if (expect.length !== 0) { + if (expect.length > 0) { throw new Error('This matcher does not take any expected argument.'); } @@ -215,7 +215,7 @@ const customContext: MatcherFunctionWithContext = function ( expectType(this); expectType(this.customMethod()); - if (expect.length !== 0) { + if (expect.length > 0) { throw new Error('This matcher does not take any expected argument.'); } diff --git a/packages/expect/package.json b/packages/expect/package.json index 3ea031a6a517..96fb564168c7 100644 --- a/packages/expect/package.json +++ b/packages/expect/package.json @@ -34,7 +34,7 @@ "tsd-lite": "^0.7.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/expect/src/__tests__/customEqualityTesters.test.ts b/packages/expect/src/__tests__/customEqualityTesters.test.ts index dda50297e641..7e04abb42485 100644 --- a/packages/expect/src/__tests__/customEqualityTesters.test.ts +++ b/packages/expect/src/__tests__/customEqualityTesters.test.ts @@ -50,10 +50,10 @@ const areVolumesEqual: Tester = ( if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } }; diff --git a/packages/expect/src/__tests__/customEqualityTestersRecursive.test.ts b/packages/expect/src/__tests__/customEqualityTestersRecursive.test.ts index bf6762b74d90..82aeaab43cfa 100644 --- a/packages/expect/src/__tests__/customEqualityTestersRecursive.test.ts +++ b/packages/expect/src/__tests__/customEqualityTestersRecursive.test.ts @@ -45,10 +45,10 @@ const areAuthorsEqual: Tester = (a: unknown, b: unknown) => { if (isAAuthor && isBAuthor) { return a.name === b.name; - } else if (isAAuthor !== isBAuthor) { - return false; - } else { + } else if (isAAuthor === isBAuthor) { return undefined; + } else { + return false; } }; @@ -64,10 +64,10 @@ const areBooksEqual: Tester = function ( return ( a.name === b.name && this.equals(a.authors, b.authors, customTesters) ); - } else if (isABook !== isBBook) { - return false; - } else { + } else if (isABook === isBBook) { return undefined; + } else { + return false; } }; diff --git a/packages/expect/src/index.ts b/packages/expect/src/index.ts index 5cc2cd68f6c3..6b80867dbd7b 100644 --- a/packages/expect/src/index.ts +++ b/packages/expect/src/index.ts @@ -100,7 +100,7 @@ const getPromiseMatcher = (name: string, matcher: RawMatcherFn) => { }; export const expect: Expect = (actual: any, ...rest: Array) => { - if (rest.length !== 0) { + if (rest.length > 0) { throw new Error('Expect takes at most one argument.'); } diff --git a/packages/expect/src/matchers.ts b/packages/expect/src/matchers.ts index 0ea9c04501ae..923938f4c026 100644 --- a/packages/expect/src/matchers.ts +++ b/packages/expect/src/matchers.ts @@ -120,11 +120,11 @@ const matchers: MatchersObject = { // eslint-disable-next-line prefer-template matcherHint(matcherName, undefined, undefined, options) + '\n\n' + - (deepEqualityName !== null - ? `${DIM_COLOR( + (deepEqualityName === null + ? '' + : `${DIM_COLOR( `If it should pass with deep equality, replace "${matcherName}" with "${deepEqualityName}"`, - )}\n\n` - : '') + + )}\n\n`) + printDiffOrStringify( expected, received, @@ -330,12 +330,12 @@ const matchers: MatchersObject = { ? `\nReceived value has no prototype\nReceived value: ${printReceived( received, )}` - : typeof received.constructor !== 'function' - ? `\nReceived value: ${printReceived(received)}` - : printReceivedConstructorName( + : typeof received.constructor === 'function' + ? printReceivedConstructorName( 'Received constructor', received.constructor, - )); + ) + : `\nReceived value: ${printReceived(received)}`); return {message, pass}; }, @@ -628,9 +628,9 @@ const matchers: MatchersObject = { matcherHint(matcherName, undefined, undefined, options) + '\n\n' + `Expected: not ${printExpected(expected)}\n` + - (stringify(expected) !== stringify(received) - ? `Received: ${printReceived(received)}` - : '') + (stringify(expected) === stringify(received) + ? '' + : `Received: ${printReceived(received)}`) : () => // eslint-disable-next-line prefer-template matcherHint(matcherName, undefined, undefined, options) + @@ -777,9 +777,9 @@ const matchers: MatchersObject = { (hasValue ? `Expected path: ${printExpected(expectedPath)}\n\n` + `Expected value: not ${printExpected(expectedValue)}${ - stringify(expectedValue) !== stringify(receivedValue) - ? `\nReceived value: ${printReceived(receivedValue)}` - : '' + stringify(expectedValue) === stringify(receivedValue) + ? '' + : `\nReceived value: ${printReceived(receivedValue)}` }` : `Expected path: not ${printExpected(expectedPath)}\n\n` + `Received value: ${printReceived(receivedValue)}`) @@ -926,9 +926,9 @@ const matchers: MatchersObject = { matcherHint(matcherName, undefined, undefined, options) + '\n\n' + `Expected: not ${printExpected(expected)}` + - (stringify(expected) !== stringify(received) - ? `\nReceived: ${printReceived(received)}` - : '') + (stringify(expected) === stringify(received) + ? '' + : `\nReceived: ${printReceived(received)}`) : () => // eslint-disable-next-line prefer-template matcherHint(matcherName, undefined, undefined, options) + @@ -965,9 +965,9 @@ const matchers: MatchersObject = { matcherHint(matcherName, undefined, undefined, options) + '\n\n' + `Expected: not ${printExpected(expected)}\n` + - (stringify(expected) !== stringify(received) - ? `Received: ${printReceived(received)}` - : '') + (stringify(expected) === stringify(received) + ? '' + : `Received: ${printReceived(received)}`) : () => // eslint-disable-next-line prefer-template matcherHint(matcherName, undefined, undefined, options) + diff --git a/packages/expect/src/print.ts b/packages/expect/src/print.ts index 167ef57ca25e..c07a80589c55 100644 --- a/packages/expect/src/print.ts +++ b/packages/expect/src/print.ts @@ -109,9 +109,9 @@ export const printReceivedConstructorNameNot = ( expected: Function, ): string => typeof expected.name === 'string' && - expected.name.length !== 0 && + expected.name.length > 0 && typeof received.name === 'string' && - received.name.length !== 0 + received.name.length > 0 ? `${printConstructorName(label, received, true, false)} ${ Object.getPrototypeOf(received) === expected ? 'extends' @@ -125,12 +125,12 @@ const printConstructorName = ( isNot: boolean, isExpected: boolean, ): string => - typeof constructor.name !== 'string' - ? `${label} name is not a string` - : constructor.name.length === 0 - ? `${label} name is an empty string` - : `${label}: ${!isNot ? '' : isExpected ? 'not ' : ' '}${ - isExpected - ? EXPECTED_COLOR(constructor.name) - : RECEIVED_COLOR(constructor.name) - }`; + typeof constructor.name === 'string' + ? constructor.name.length === 0 + ? `${label} name is an empty string` + : `${label}: ${isNot ? (isExpected ? 'not ' : ' ') : ''}${ + isExpected + ? EXPECTED_COLOR(constructor.name) + : RECEIVED_COLOR(constructor.name) + }` + : `${label} name is not a string`; diff --git a/packages/expect/src/spyMatchers.ts b/packages/expect/src/spyMatchers.ts index a57482e0cc69..a2d0c94952d3 100644 --- a/packages/expect/src/spyMatchers.ts +++ b/packages/expect/src/spyMatchers.ts @@ -82,9 +82,9 @@ const printNumberOfReturns = ( countCalls: number, ): string => `\nNumber of returns: ${printReceived(countReturns)}${ - countCalls !== countReturns - ? `\nNumber of calls: ${printReceived(countCalls)}` - : '' + countCalls === countReturns + ? '' + : `\nNumber of calls: ${printReceived(countCalls)}` }`; type PrintLabel = (string: string, isExpectedCall: boolean) => string; @@ -439,22 +439,22 @@ const createToReturnMatcher = ( return lines; }, []) .join('\n') + - (received.mock.calls.length !== count - ? `\n\nReceived number of calls: ${printReceived( + (received.mock.calls.length === count + ? '' + : `\n\nReceived number of calls: ${printReceived( received.mock.calls.length, - )}` - : '') + )}`) : () => // eslint-disable-next-line prefer-template matcherHint(matcherName, receivedName, expectedArgument, options) + '\n\n' + `Expected number of returns: >= ${printExpected(1)}\n` + `Received number of returns: ${printReceived(count)}` + - (received.mock.calls.length !== count - ? `\nReceived number of calls: ${printReceived( + (received.mock.calls.length === count + ? '' + : `\nReceived number of calls: ${printReceived( received.mock.calls.length, - )}` - : ''); + )}`); return {message, pass}; }; @@ -523,22 +523,22 @@ const createToReturnTimesMatcher = ( matcherHint(matcherName, receivedName, expectedArgument, options) + '\n\n' + `Expected number of returns: not ${printExpected(expected)}` + - (received.mock.calls.length !== count - ? `\n\nReceived number of calls: ${printReceived( + (received.mock.calls.length === count + ? '' + : `\n\nReceived number of calls: ${printReceived( received.mock.calls.length, - )}` - : '') + )}`) : () => // eslint-disable-next-line prefer-template matcherHint(matcherName, receivedName, expectedArgument, options) + '\n\n' + `Expected number of returns: ${printExpected(expected)}\n` + `Received number of returns: ${printReceived(count)}` + - (received.mock.calls.length !== count - ? `\nReceived number of calls: ${printReceived( + (received.mock.calls.length === count + ? '' + : `\nReceived number of calls: ${printReceived( received.mock.calls.length, - )}` - : ''); + )}`); return {message, pass}; }; diff --git a/packages/expect/src/toThrowMatchers.ts b/packages/expect/src/toThrowMatchers.ts index 77eff9008e8b..43799cddc7de 100644 --- a/packages/expect/src/toThrowMatchers.ts +++ b/packages/expect/src/toThrowMatchers.ts @@ -88,7 +88,13 @@ export const createMatcher = ( if (fromPromise && isError(received)) { thrown = getThrown(received); } else { - if (typeof received !== 'function') { + if (typeof received === 'function') { + try { + received(); + } catch (e) { + thrown = getThrown(e); + } + } else { if (!fromPromise) { const placeholder = expected === undefined ? '' : 'expected'; throw new Error( @@ -99,12 +105,6 @@ export const createMatcher = ( ), ); } - } else { - try { - received(); - } catch (e) { - thrown = getThrown(e); - } } } @@ -227,7 +227,7 @@ const toThrowExpectedObject = ( ): SyncExpectationResult => { const expectedMessageAndCause = createMessageAndCause(expected); const thrownMessageAndCause = - thrown !== null ? createMessageAndCause(thrown.value) : null; + thrown === null ? null : createMessageAndCause(thrown.value); const pass = thrown !== null && thrown.message === expected.message && diff --git a/packages/jest-changed-files/package.json b/packages/jest-changed-files/package.json index 7f1256a2d71e..18981b9a9837 100644 --- a/packages/jest-changed-files/package.json +++ b/packages/jest-changed-files/package.json @@ -22,7 +22,7 @@ "p-limit": "^3.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-circus/package.json b/packages/jest-circus/package.json index 364586ac8c74..738eb54e7f9c 100644 --- a/packages/jest-circus/package.json +++ b/packages/jest-circus/package.json @@ -50,7 +50,7 @@ "tempy": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-circus/src/eventHandler.ts b/packages/jest-circus/src/eventHandler.ts index 4c401cada760..8a7e2403e52b 100644 --- a/packages/jest-circus/src/eventHandler.ts +++ b/packages/jest-circus/src/eventHandler.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import type {Circus} from '@jest/types'; +import type {Circus, Global} from '@jest/types'; import {invariant} from 'jest-util'; import { injectGlobalErrorHandlers, @@ -217,7 +217,7 @@ const eventHandler: Circus.EventHandler = (event, state) => { case 'test_retry': { const logErrorsBeforeRetry: boolean = // eslint-disable-next-line no-restricted-globals - global[LOG_ERRORS_BEFORE_RETRY] || false; + ((global as Global.Global)[LOG_ERRORS_BEFORE_RETRY] as any) || false; if (logErrorsBeforeRetry) { event.test.retryReasons.push(...event.test.errors); } @@ -227,8 +227,11 @@ const eventHandler: Circus.EventHandler = (event, state) => { case 'run_start': { state.hasStarted = true; /* eslint-disable no-restricted-globals */ - global[TEST_TIMEOUT_SYMBOL] && - (state.testTimeout = global[TEST_TIMEOUT_SYMBOL]); + if ((global as Global.Global)[TEST_TIMEOUT_SYMBOL]) { + state.testTimeout = (global as Global.Global)[ + TEST_TIMEOUT_SYMBOL + ] as number; + } /* eslint-enable */ break; } diff --git a/packages/jest-circus/src/formatNodeAssertErrors.ts b/packages/jest-circus/src/formatNodeAssertErrors.ts index c3dc4b0f911e..de81bdfbf181 100644 --- a/packages/jest-circus/src/formatNodeAssertErrors.ts +++ b/packages/jest-circus/src/formatNodeAssertErrors.ts @@ -50,14 +50,14 @@ const formatNodeAssertErrors = ( if (originalError == null) { error = asyncError; - } else if (!originalError.stack) { + } else if (originalError.stack) { + error = originalError; + } else { error = asyncError; error.message = originalError.message ? originalError.message : `thrown: ${prettyFormat(originalError, {maxDepth: 3})}`; - } else { - error = originalError; } } else { error = errors; diff --git a/packages/jest-circus/src/globalErrorHandlers.ts b/packages/jest-circus/src/globalErrorHandlers.ts index 27146fc4a1f2..317ae3d41d52 100644 --- a/packages/jest-circus/src/globalErrorHandlers.ts +++ b/packages/jest-circus/src/globalErrorHandlers.ts @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +import type * as Process from 'process'; import type {Circus} from '@jest/types'; import {dispatchSync} from './state'; @@ -14,7 +15,7 @@ const uncaught: NodeJS.UncaughtExceptionListener & }; export const injectGlobalErrorHandlers = ( - parentProcess: NodeJS.Process, + parentProcess: typeof Process, ): Circus.GlobalErrorHandlers => { const uncaughtException = process.listeners('uncaughtException').slice(); const unhandledRejection = process.listeners('unhandledRejection').slice(); @@ -26,7 +27,7 @@ export const injectGlobalErrorHandlers = ( }; export const restoreGlobalErrorHandlers = ( - parentProcess: NodeJS.Process, + parentProcess: typeof Process, originalErrorHandlers: Circus.GlobalErrorHandlers, ): void => { parentProcess.removeListener('uncaughtException', uncaught); diff --git a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts index 80b4503621b7..5be34097c451 100644 --- a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts +++ b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts @@ -128,7 +128,7 @@ const _addSnapshotData = ( results.snapshot.matched = snapshotState.matched; results.snapshot.unmatched = snapshotState.unmatched; results.snapshot.updated = snapshotState.updated; - results.snapshot.unchecked = !status.deleted ? uncheckedCount : 0; + results.snapshot.unchecked = status.deleted ? 0 : uncheckedCount; // Copy the array to prevent memory leaks results.snapshot.uncheckedKeys = Array.from(uncheckedKeys); }; diff --git a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts index f9ac8076bd55..01c121317d97 100644 --- a/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts +++ b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.ts @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +import type * as Process from 'process'; import type {JestEnvironment} from '@jest/environment'; import {JestExpect, jestExpect} from '@jest/expect'; import { @@ -51,7 +52,7 @@ export const initialize = async ({ globalConfig: Config.GlobalConfig; localRequire: (path: string) => T; testPath: string; - parentProcess: NodeJS.Process; + parentProcess: typeof Process; sendMessageToJest?: TestFileEvent; setGlobalsForRuntime: (globals: RuntimeGlobals) => void; }): Promise<{ @@ -158,7 +159,7 @@ export const runAndTransformResultsToJestFormat = async ({ } else if (testResult.status === 'todo') { status = 'todo'; numTodoTests += 1; - } else if (testResult.errors.length) { + } else if (testResult.errors.length > 0) { status = 'failed'; numFailingTests += 1; } else { @@ -197,7 +198,7 @@ export const runAndTransformResultsToJestFormat = async ({ ); let testExecError; - if (runResult.unhandledErrors.length) { + if (runResult.unhandledErrors.length > 0) { testExecError = { message: '', stack: runResult.unhandledErrors.join('\n'), @@ -261,7 +262,7 @@ const _addExpectedAssertionErrors = (test: Circus.TestEntry) => { const _addSuppressedErrors = (test: Circus.TestEntry) => { const {suppressedErrors} = jestExpect.getState(); jestExpect.setState({suppressedErrors: []}); - if (suppressedErrors.length) { + if (suppressedErrors.length > 0) { test.errors = test.errors.concat(suppressedErrors); } }; diff --git a/packages/jest-circus/src/run.ts b/packages/jest-circus/src/run.ts index eac6a20b06e6..c2cd6063cd1e 100644 --- a/packages/jest-circus/src/run.ts +++ b/packages/jest-circus/src/run.ts @@ -8,7 +8,7 @@ import {AsyncLocalStorage} from 'async_hooks'; import pLimit = require('p-limit'); import {jestExpect} from '@jest/expect'; -import type {Circus} from '@jest/types'; +import type {Circus, Global} from '@jest/types'; import {invariant} from 'jest-util'; import shuffleArray, {RandomNumberGenerator, rngBuilder} from './shuffleArray'; import {dispatch, getState} from './state'; @@ -61,8 +61,9 @@ const _runTestsForDescribeBlock = async ( } // Tests that fail and are retried we run after other tests - // eslint-disable-next-line no-restricted-globals - const retryTimes = parseInt(global[RETRY_TIMES], 10) || 0; + const retryTimes = + // eslint-disable-next-line no-restricted-globals + parseInt((global as Global.Global)[RETRY_TIMES] as string, 10) || 0; const deferredRetryTests = []; if (rng) { @@ -186,7 +187,7 @@ const _runTest = async ( const {afterEach, beforeEach} = getEachHooksForTest(test); for (const hook of beforeEach) { - if (test.errors.length) { + if (test.errors.length > 0) { // If any of the before hooks failed already, we don't run any // hooks after that. break; @@ -239,7 +240,7 @@ const _callCircusTest = async ( const timeout = test.timeout || getState().testTimeout; invariant(test.fn, "Tests with no 'fn' should have 'mode' set to 'skipped'"); - if (test.errors.length) { + if (test.errors.length > 0) { return; // We don't run the test if there's already an error in before hooks. } diff --git a/packages/jest-circus/src/state.ts b/packages/jest-circus/src/state.ts index 0540dfd41116..ecd94cbf14c1 100644 --- a/packages/jest-circus/src/state.ts +++ b/packages/jest-circus/src/state.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import type {Circus} from '@jest/types'; +import type {Circus, Global} from '@jest/types'; import eventHandler from './eventHandler'; import formatNodeAssertErrors from './formatNodeAssertErrors'; import {STATE_SYM} from './types'; @@ -39,14 +39,15 @@ const createState = (): Circus.State => { /* eslint-disable no-restricted-globals */ export const resetState = (): void => { - global[STATE_SYM] = createState(); + (global as Global.Global)[STATE_SYM] = createState(); }; resetState(); -export const getState = (): Circus.State => global[STATE_SYM]; +export const getState = (): Circus.State => + (global as Global.Global)[STATE_SYM] as Circus.State; export const setState = (state: Circus.State): Circus.State => - (global[STATE_SYM] = state); + ((global as Global.Global)[STATE_SYM] = state); /* eslint-enable */ export const dispatch = async (event: Circus.AsyncEvent): Promise => { diff --git a/packages/jest-circus/src/types.ts b/packages/jest-circus/src/types.ts index 6af26152b661..704a35b3733d 100644 --- a/packages/jest-circus/src/types.ts +++ b/packages/jest-circus/src/types.ts @@ -5,22 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import type {Circus} from '@jest/types'; - export const STATE_SYM = Symbol('JEST_STATE_SYMBOL'); export const RETRY_TIMES = Symbol.for('RETRY_TIMES'); // To pass this value from Runtime object to state we need to use global[sym] export const TEST_TIMEOUT_SYMBOL = Symbol.for('TEST_TIMEOUT_SYMBOL'); export const LOG_ERRORS_BEFORE_RETRY = Symbol.for('LOG_ERRORS_BEFORE_RETRY'); - -declare global { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace NodeJS { - interface Global { - [STATE_SYM]: Circus.State; - [RETRY_TIMES]: string; - [TEST_TIMEOUT_SYMBOL]: number; - [LOG_ERRORS_BEFORE_RETRY]: boolean; - } - } -} diff --git a/packages/jest-circus/src/utils.ts b/packages/jest-circus/src/utils.ts index fa45f4fbb744..931f28adb64d 100644 --- a/packages/jest-circus/src/utils.ts +++ b/packages/jest-circus/src/utils.ts @@ -236,9 +236,9 @@ export const callAsyncCircusFn = ( Promise.resolve().then(() => { if (returnedValue !== undefined) { asyncError.message = dedent` - Test functions cannot both take a 'done' callback and return something. Either use a 'done' callback, or return a promise. - Returned value: ${prettyFormat(returnedValue, {maxDepth: 3})} - `; + Test functions cannot both take a 'done' callback and return something. Either use a 'done' callback, or return a promise. + Returned value: ${prettyFormat(returnedValue, {maxDepth: 3})} + `; return reject(asyncError); } @@ -289,9 +289,9 @@ export const callAsyncCircusFn = ( reject( new Error( dedent` - test functions can only return Promise or undefined. - Returned value: ${prettyFormat(returnedValue, {maxDepth: 3})} - `, + test functions can only return Promise or undefined. + Returned value: ${prettyFormat(returnedValue, {maxDepth: 3})} + `, ), ); return; diff --git a/packages/jest-cli/package.json b/packages/jest-cli/package.json index 16d61c11ecae..8022f9b9c09c 100644 --- a/packages/jest-cli/package.json +++ b/packages/jest-cli/package.json @@ -42,7 +42,7 @@ "jest": "./bin/jest.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "repository": { "type": "git", diff --git a/packages/jest-cli/src/run.ts b/packages/jest-cli/src/run.ts index 98fa78cd175a..3c6babcbe921 100644 --- a/packages/jest-cli/src/run.ts +++ b/packages/jest-cli/src/run.ts @@ -85,7 +85,7 @@ const getProjectListFromCLIArgs = (argv: Config.Argv, project?: string) => { projects.push(project); } - if (!projects.length && process.platform === 'win32') { + if (projects.length === 0 && process.platform === 'win32') { try { projects.push(tryRealpath(process.cwd())); } catch { @@ -94,7 +94,7 @@ const getProjectListFromCLIArgs = (argv: Config.Argv, project?: string) => { } } - if (!projects.length) { + if (projects.length === 0) { projects.push(process.cwd()); } diff --git a/packages/jest-config/package.json b/packages/jest-config/package.json index e9b914245428..d0903e0e6a0b 100644 --- a/packages/jest-config/package.json +++ b/packages/jest-config/package.json @@ -62,7 +62,7 @@ "typescript": "^5.0.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-config/src/__tests__/normalize.test.ts b/packages/jest-config/src/__tests__/normalize.test.ts index afbfe417a222..968b7537a177 100644 --- a/packages/jest-config/src/__tests__/normalize.test.ts +++ b/packages/jest-config/src/__tests__/normalize.test.ts @@ -828,9 +828,9 @@ describe('babel-jest', () => { Resolver = (require('jest-resolve') as typeof import('jest-resolve')) .default; Resolver.findNodeModule = jest.fn((name: string) => - name.indexOf('babel-jest') === -1 - ? `${path.sep}node_modules${path.sep}${name}` - : name, + name.includes('babel-jest') + ? name + : `${path.sep}node_modules${path.sep}${name}`, ); }); diff --git a/packages/jest-config/src/index.ts b/packages/jest-config/src/index.ts index 43093fd91f92..886e32003df9 100644 --- a/packages/jest-config/src/index.ts +++ b/packages/jest-config/src/index.ts @@ -357,7 +357,7 @@ export async function readConfigs( hasDeprecationWarnings = parsedConfig.hasDeprecationWarnings; globalConfig = parsedConfig.globalConfig; configs = [parsedConfig.projectConfig]; - if (globalConfig.projects && globalConfig.projects.length) { + if (globalConfig.projects && globalConfig.projects.length > 0) { // Even though we had one project in CLI args, there might be more // projects defined in the config. // In other words, if this was a single project, @@ -418,7 +418,7 @@ export async function readConfigs( } } - if (!globalConfig || !configs.length) { + if (!globalConfig || configs.length === 0) { throw new Error('jest: No configuration found for any project.'); } diff --git a/packages/jest-config/src/normalize.ts b/packages/jest-config/src/normalize.ts index 496d413deb3c..60e7de2945dd 100644 --- a/packages/jest-config/src/normalize.ts +++ b/packages/jest-config/src/normalize.ts @@ -255,7 +255,9 @@ const normalizeCollectCoverageFrom = ( value = []; } - if (!Array.isArray(initialCollectCoverageFrom)) { + if (Array.isArray(initialCollectCoverageFrom)) { + value = initialCollectCoverageFrom; + } else { try { value = JSON.parse(initialCollectCoverageFrom); } catch {} @@ -263,8 +265,6 @@ const normalizeCollectCoverageFrom = ( if (options[key] && !Array.isArray(value)) { value = [initialCollectCoverageFrom]; } - } else { - value = initialCollectCoverageFrom; } if (value) { @@ -759,7 +759,7 @@ export default async function normalize( const globMatches = typeof project === 'string' ? glob(project) : []; return projects.concat( - globMatches.length ? globMatches : project, + globMatches.length > 0 ? globMatches : project, ); }, [], diff --git a/packages/jest-console/package.json b/packages/jest-console/package.json index 0393e203b536..27b8f139ad63 100644 --- a/packages/jest-console/package.json +++ b/packages/jest-console/package.json @@ -28,7 +28,7 @@ "@jest/test-utils": "workspace:^" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-console/src/BufferedConsole.ts b/packages/jest-console/src/BufferedConsole.ts index 2ab7d73688ed..400a79267439 100644 --- a/packages/jest-console/src/BufferedConsole.ts +++ b/packages/jest-console/src/BufferedConsole.ts @@ -43,7 +43,7 @@ export default class BufferedConsole extends Console { message: LogMessage, level?: number | null, ): ConsoleBuffer { - const stackLevel = level != null ? level : 2; + const stackLevel = level == null ? 2 : level; const rawStack = new ErrorWithStack(undefined, BufferedConsole.write).stack; invariant(rawStack != null, 'always have a stack trace'); @@ -177,6 +177,6 @@ export default class BufferedConsole extends Console { } getBuffer(): ConsoleBuffer | undefined { - return this._buffer.length ? this._buffer : undefined; + return this._buffer.length > 0 ? this._buffer : undefined; } } diff --git a/packages/jest-core/package.json b/packages/jest-core/package.json index 4544fbce2175..6f2e036df8a3 100644 --- a/packages/jest-core/package.json +++ b/packages/jest-core/package.json @@ -57,7 +57,7 @@ } }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "repository": { "type": "git", diff --git a/packages/jest-core/src/ReporterDispatcher.ts b/packages/jest-core/src/ReporterDispatcher.ts index 2ab01253315d..b019682548b5 100644 --- a/packages/jest-core/src/ReporterDispatcher.ts +++ b/packages/jest-core/src/ReporterDispatcher.ts @@ -112,6 +112,6 @@ export default class ReporterDispatcher { } hasErrors(): boolean { - return this.getErrors().length !== 0; + return this.getErrors().length > 0; } } diff --git a/packages/jest-core/src/SearchSource.ts b/packages/jest-core/src/SearchSource.ts index 5428d71c7c9b..7c83ba570139 100644 --- a/packages/jest-core/src/SearchSource.ts +++ b/packages/jest-core/src/SearchSource.ts @@ -72,14 +72,14 @@ export default class SearchSource { stat: 'roots', }); - if (config.testMatch.length) { + if (config.testMatch.length > 0) { this._testPathCases.push({ isMatch: globsToMatcher(config.testMatch), stat: 'testMatch', }); } - if (config.testPathIgnorePatterns.length) { + if (config.testPathIgnorePatterns.length > 0) { const testIgnorePatternsRegex = new RegExp( config.testPathIgnorePatterns.join('|'), ); @@ -89,7 +89,7 @@ export default class SearchSource { }); } - if (config.testRegex.length) { + if (config.testRegex.length > 0) { this._testPathCases.push({ isMatch: regexToMatcher(config.testRegex), stat: 'testRegex', @@ -239,7 +239,7 @@ export default class SearchSource { paths: Array, collectCoverage: boolean, ): Promise { - if (Array.isArray(paths) && paths.length) { + if (Array.isArray(paths) && paths.length > 0) { const resolvedPaths = paths.map(p => path.resolve(this._context.config.cwd, p), ); @@ -280,17 +280,17 @@ export default class SearchSource { paths = this.filterPathsWin32(paths); } - if (globalConfig.runTestsByPath && paths && paths.length) { + if (globalConfig.runTestsByPath && paths && paths.length > 0) { return this.findTestsByPaths(paths); - } else if (globalConfig.findRelatedTests && paths && paths.length) { + } else if (globalConfig.findRelatedTests && paths && paths.length > 0) { return this.findRelatedTestsFromPattern( paths, globalConfig.collectCoverage, ); - } else if (globalConfig.testPathPattern != null) { - return this.findMatchingTests(globalConfig.testPathPattern); - } else { + } else if (globalConfig.testPathPattern == null) { return {tests: []}; + } else { + return this.findMatchingTests(globalConfig.testPathPattern); } } diff --git a/packages/jest-core/src/SnapshotInteractiveMode.ts b/packages/jest-core/src/SnapshotInteractiveMode.ts index 74b7b33c961e..0f9ec0a886b5 100644 --- a/packages/jest-core/src/SnapshotInteractiveMode.ts +++ b/packages/jest-core/src/SnapshotInteractiveMode.ts @@ -235,7 +235,7 @@ export default class SnapshotInteractiveMode { shouldUpdateSnapshot: boolean, ) => unknown, ): void { - if (!failedSnapshotTestAssertions.length) { + if (failedSnapshotTestAssertions.length === 0) { return; } diff --git a/packages/jest-core/src/cli/index.ts b/packages/jest-core/src/cli/index.ts index 20236a5c2d35..3cbea529ff1c 100644 --- a/packages/jest-core/src/cli/index.ts +++ b/packages/jest-core/src/cli/index.ts @@ -121,7 +121,7 @@ export async function runCLI( const {openHandles} = results; - if (openHandles && openHandles.length) { + if (openHandles && openHandles.length > 0) { const formatted = formatHandleErrors(openHandles, configs[0]); const openHandlesString = pluralize('open handle', formatted.length, 's'); diff --git a/packages/jest-core/src/lib/handleDeprecationWarnings.ts b/packages/jest-core/src/lib/handleDeprecationWarnings.ts index 9cd0fd62ef82..b196edeb05f1 100644 --- a/packages/jest-core/src/lib/handleDeprecationWarnings.ts +++ b/packages/jest-core/src/lib/handleDeprecationWarnings.ts @@ -30,7 +30,7 @@ export default function handleDeprecationWarnings( if (key === KEYS.ENTER) { resolve(); } else if ( - [KEYS.ESCAPE, KEYS.CONTROL_C, KEYS.CONTROL_D].indexOf(key) !== -1 + [KEYS.ESCAPE, KEYS.CONTROL_C, KEYS.CONTROL_D].includes(key) ) { reject(); } diff --git a/packages/jest-core/src/plugins/UpdateSnapshotsInteractive.ts b/packages/jest-core/src/plugins/UpdateSnapshotsInteractive.ts index 8d135f55ecc5..7315f4125ad3 100644 --- a/packages/jest-core/src/plugins/UpdateSnapshotsInteractive.ts +++ b/packages/jest-core/src/plugins/UpdateSnapshotsInteractive.ts @@ -62,7 +62,7 @@ class UpdateSnapshotInteractivePlugin extends BaseWatchPlugin { _globalConfig: Config.GlobalConfig, updateConfigAndRun: Function, ): Promise { - if (this._failedSnapshotTestAssertions.length) { + if (this._failedSnapshotTestAssertions.length > 0) { return new Promise(res => { this._snapshotInteractiveMode.run( this._failedSnapshotTestAssertions, diff --git a/packages/jest-core/src/runJest.ts b/packages/jest-core/src/runJest.ts index 45b31137d292..f6d533251fc0 100644 --- a/packages/jest-core/src/runJest.ts +++ b/packages/jest-core/src/runJest.ts @@ -43,7 +43,7 @@ const getTestPaths = async ( ) => { const data = await source.getTestPaths(globalConfig, changedFiles, filter); - if (!data.tests.length && globalConfig.onlyChanged && data.noSCM) { + if (data.tests.length === 0 && globalConfig.onlyChanged && data.noSCM) { new CustomConsole(outputStream, outputStream).log( 'Jest can only find uncommitted changed files in a git or hg ' + 'repository. If you make your project a git or hg ' + @@ -159,7 +159,7 @@ export default async function runJest({ const Sequencer: typeof TestSequencer = await requireOrImportModule( globalConfig.testSequencer, ); - const sequencer = new Sequencer(); + const sequencer = new Sequencer({contexts, globalConfig}); let allTests: Array = []; if (changedFilesPromise && globalConfig.watch) { @@ -294,7 +294,6 @@ export default async function runJest({ ...testSchedulerContext, }); - // @ts-expect-error - second arg is unsupported (but harmless) in Node 14 performance.mark('jest/scheduleAndRun:start', { detail: {numTests: allTests.length}, }); diff --git a/packages/jest-core/src/watch.ts b/packages/jest-core/src/watch.ts index 5671e2b5be2b..2c9502cd03e1 100644 --- a/packages/jest-core/src/watch.ts +++ b/packages/jest-core/src/watch.ts @@ -243,7 +243,7 @@ export default async function watch( isValidPath(globalConfig, filePath), ); - if (validPaths.length) { + if (validPaths.length > 0) { const context = (contexts[index] = createContext( contexts[index].config, {hasteFS, moduleMap}, diff --git a/packages/jest-create-cache-key-function/package.json b/packages/jest-create-cache-key-function/package.json index ff03ba21cd99..ebb08c2fb08f 100644 --- a/packages/jest-create-cache-key-function/package.json +++ b/packages/jest-create-cache-key-function/package.json @@ -14,7 +14,7 @@ "jest-util": "workspace:^" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "license": "MIT", "main": "./build/index.js", diff --git a/packages/jest-diff/package.json b/packages/jest-diff/package.json index ca4584498f3a..eb182798db4d 100644 --- a/packages/jest-diff/package.json +++ b/packages/jest-diff/package.json @@ -27,7 +27,7 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-diff/src/getAlignedDiffs.ts b/packages/jest-diff/src/getAlignedDiffs.ts index fe22d66d1fe8..fbda1a3e6a0e 100644 --- a/packages/jest-diff/src/getAlignedDiffs.ts +++ b/packages/jest-diff/src/getAlignedDiffs.ts @@ -22,7 +22,7 @@ const concatenateRelevantDiffs = ( reduced + (diff[0] === DIFF_EQUAL ? diff[1] - : diff[0] === op && diff[1].length !== 0 // empty if change is newline + : diff[0] === op && diff[1].length > 0 // empty if change is newline ? changeColor(diff[1]) : ''), '', @@ -31,8 +31,8 @@ const concatenateRelevantDiffs = ( // Encapsulate change lines until either a common newline or the end. class ChangeBuffer { private readonly op: number; - private line: Array; // incomplete line - private lines: Array; // complete lines + private readonly line: Array; // incomplete line + private readonly lines: Array; // complete lines private readonly changeColor: DiffOptionsColor; constructor(op: number, changeColor: DiffOptionsColor) { @@ -54,14 +54,14 @@ class ChangeBuffer { // therefore change diffs have change color; // otherwise then it has line color only. this.lines.push( - this.line.length !== 1 - ? new Diff( + this.line.length === 1 + ? this.line[0][0] === this.op + ? this.line[0] // can use instance + : new Diff(this.op, this.line[0][1]) + : new Diff( this.op, concatenateRelevantDiffs(this.op, this.line, this.changeColor), - ) - : this.line[0][0] === this.op - ? this.line[0] // can use instance - : new Diff(this.op, this.line[0][1]), // was common diff + ), // was common diff ); this.line.length = 0; } @@ -88,7 +88,7 @@ class ChangeBuffer { // A middle substring is a change line. this.pushSubstring(substring); this.pushLine(); - } else if (substring.length !== 0) { + } else if (substring.length > 0) { // The last substring starts a change line, if it is not empty. // Important: This non-empty condition also automatically omits // the newline appended to the end of expected and received strings. @@ -173,7 +173,7 @@ class CommonBuffer { } else if (i < iLast) { // A middle substring is a common line. this.pushDiffCommonLine(new Diff(op, substring)); - } else if (substring.length !== 0) { + } else if (substring.length > 0) { // The last substring starts a change line, if it is not empty. // Important: This non-empty condition also automatically omits // the newline appended to the end of expected and received strings. diff --git a/packages/jest-diff/src/joinAlignedDiffs.ts b/packages/jest-diff/src/joinAlignedDiffs.ts index 0568033c7f5b..4df47d6b69fb 100644 --- a/packages/jest-diff/src/joinAlignedDiffs.ts +++ b/packages/jest-diff/src/joinAlignedDiffs.ts @@ -21,15 +21,15 @@ const printDiffLine = ( trailingSpaceFormatter: DiffOptionsColor, emptyFirstOrLastLinePlaceholder: string, ): string => - line.length !== 0 - ? color( + line.length === 0 + ? indicator === ' ' + ? isFirstOrLast && emptyFirstOrLastLinePlaceholder.length > 0 + ? color(`${indicator} ${emptyFirstOrLastLinePlaceholder}`) + : '' + : color(indicator) + : color( `${indicator} ${formatTrailingSpaces(line, trailingSpaceFormatter)}`, - ) - : indicator !== ' ' - ? color(indicator) - : isFirstOrLast && emptyFirstOrLastLinePlaceholder.length !== 0 - ? color(`${indicator} ${emptyFirstOrLastLinePlaceholder}`) - : ''; + ); const printDeleteLine = ( line: string, diff --git a/packages/jest-diff/src/printDiffs.ts b/packages/jest-diff/src/printDiffs.ts index b32acd5c90a1..bd545490cbac 100644 --- a/packages/jest-diff/src/printDiffs.ts +++ b/packages/jest-diff/src/printDiffs.ts @@ -31,7 +31,7 @@ export const diffStringsUnified = ( b: string, options?: DiffOptions, ): string => { - if (a !== b && a.length !== 0 && b.length !== 0) { + if (a !== b && a.length > 0 && b.length > 0) { const isMultiline = a.includes('\n') || b.includes('\n'); // getAlignedDiffs assumes that a newline was appended to the strings. diff --git a/packages/jest-docblock/package.json b/packages/jest-docblock/package.json index 31b48fd0632f..0497db933410 100644 --- a/packages/jest-docblock/package.json +++ b/packages/jest-docblock/package.json @@ -23,7 +23,7 @@ "@types/node": "*" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-docblock/src/index.ts b/packages/jest-docblock/src/index.ts index e91df794e081..31a253e52e89 100644 --- a/packages/jest-docblock/src/index.ts +++ b/packages/jest-docblock/src/index.ts @@ -115,7 +115,7 @@ export function print({ head + line + (comments ? printedComments : '') + - (comments && keys.length ? start + line : '') + + (comments && keys.length > 0 ? start + line : '') + printedObject + tail ); diff --git a/packages/jest-each/package.json b/packages/jest-each/package.json index 06a9f85ea004..751eeb2610c2 100644 --- a/packages/jest-each/package.json +++ b/packages/jest-each/package.json @@ -32,7 +32,7 @@ "pretty-format": "workspace:^" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-environment-jsdom/package.json b/packages/jest-environment-jsdom/package.json index a987fc6058ff..033614f3d268 100644 --- a/packages/jest-environment-jsdom/package.json +++ b/packages/jest-environment-jsdom/package.json @@ -38,7 +38,7 @@ } }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-environment-jsdom/src/index.ts b/packages/jest-environment-jsdom/src/index.ts index 2dbc4caaad5d..994108dd2005 100644 --- a/packages/jest-environment-jsdom/src/index.ts +++ b/packages/jest-environment-jsdom/src/index.ts @@ -38,7 +38,7 @@ export default class JSDOMEnvironment implements JestEnvironment { private errorEventListener: ((event: Event & {error: Error}) => void) | null; moduleMocker: ModuleMocker | null; customExportConditions = ['browser']; - private _configuredExportConditions?: Array; + private readonly _configuredExportConditions?: Array; constructor(config: JestEnvironmentConfig, context: EnvironmentContext) { const {projectConfig} = config; @@ -73,7 +73,7 @@ export default class JSDOMEnvironment implements JestEnvironment { throw new Error('JSDOM did not return a Window object'); } - // @ts-expect-error - for "universal" code (code should use `globalThis`) + // TODO: remove at some point - for "universal" code (code should use `globalThis`) global.global = global; // Node's error-message stack size is limited at 10, but it's pretty useful diff --git a/packages/jest-environment-node/package.json b/packages/jest-environment-node/package.json index 96ce939089fa..b2a7ee424f70 100644 --- a/packages/jest-environment-node/package.json +++ b/packages/jest-environment-node/package.json @@ -28,7 +28,7 @@ "@jest/test-utils": "workspace:^" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-environment-node/src/index.ts b/packages/jest-environment-node/src/index.ts index 13be75062742..9510fdba8246 100644 --- a/packages/jest-environment-node/src/index.ts +++ b/packages/jest-environment-node/src/index.ts @@ -67,7 +67,7 @@ export default class NodeEnvironment implements JestEnvironment { global: Global.Global; moduleMocker: ModuleMocker | null; customExportConditions = ['node', 'node-addons']; - private _configuredExportConditions?: Array; + private readonly _configuredExportConditions?: Array; // while `context` is unused, it should always be passed constructor(config: JestEnvironmentConfig, _context: EnvironmentContext) { @@ -129,7 +129,6 @@ export default class NodeEnvironment implements JestEnvironment { } } - // @ts-expect-error - Buffer and gc is "missing" global.global = global; global.Buffer = Buffer; global.ArrayBuffer = ArrayBuffer; diff --git a/packages/jest-environment/package.json b/packages/jest-environment/package.json index 3e91305448d7..eae4c483baa4 100644 --- a/packages/jest-environment/package.json +++ b/packages/jest-environment/package.json @@ -23,7 +23,7 @@ "jest-mock": "workspace:^" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-expect/package.json b/packages/jest-expect/package.json index c4c8f6f5dcbb..3ec6a7497efe 100644 --- a/packages/jest-expect/package.json +++ b/packages/jest-expect/package.json @@ -25,7 +25,7 @@ "tsd-lite": "^0.7.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-fake-timers/package.json b/packages/jest-fake-timers/package.json index 4d38a871cb14..29279d9695d1 100644 --- a/packages/jest-fake-timers/package.json +++ b/packages/jest-fake-timers/package.json @@ -29,7 +29,7 @@ "@types/sinonjs__fake-timers": "^8.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-fake-timers/src/legacyFakeTimers.ts b/packages/jest-fake-timers/src/legacyFakeTimers.ts index e4e05fec7618..5aad100821ed 100644 --- a/packages/jest-fake-timers/src/legacyFakeTimers.ts +++ b/packages/jest-fake-timers/src/legacyFakeTimers.ts @@ -70,7 +70,7 @@ export default class FakeTimers { private _disposed: boolean; private _fakeTimerAPIs!: FakeTimerAPI; private _fakingTime = false; - private _global: typeof globalThis; + private readonly _global: typeof globalThis; private _immediates!: Array; private readonly _maxLoops: number; private readonly _moduleMocker: ModuleMocker; @@ -224,11 +224,11 @@ export default class FakeTimers { // Some of the immediate calls could be enqueued // during the previous handling of the timers, we should // run them as well. - if (this._immediates.length) { + if (this._immediates.length > 0) { this.runAllImmediates(); } - if (this._ticks.length) { + if (this._ticks.length > 0) { this.runAllTicks(); } } diff --git a/packages/jest-get-type/package.json b/packages/jest-get-type/package.json index 356782c0248c..5daa3eff7b9f 100644 --- a/packages/jest-get-type/package.json +++ b/packages/jest-get-type/package.json @@ -8,7 +8,7 @@ "directory": "packages/jest-get-type" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "license": "MIT", "main": "./build/index.js", diff --git a/packages/jest-globals/package.json b/packages/jest-globals/package.json index 13bbc5daedd5..097c20179b65 100644 --- a/packages/jest-globals/package.json +++ b/packages/jest-globals/package.json @@ -7,7 +7,7 @@ "directory": "packages/jest-globals" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "license": "MIT", "main": "./build/index.js", diff --git a/packages/jest-haste-map/package.json b/packages/jest-haste-map/package.json index b645bce08752..bfe0c5e2e4ac 100644 --- a/packages/jest-haste-map/package.json +++ b/packages/jest-haste-map/package.json @@ -38,7 +38,7 @@ "fsevents": "^2.3.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-haste-map/src/crawlers/node.ts b/packages/jest-haste-map/src/crawlers/node.ts index 8555eeb7b415..12ae165422ed 100644 --- a/packages/jest-haste-map/src/crawlers/node.ts +++ b/packages/jest-haste-map/src/crawlers/node.ts @@ -105,7 +105,7 @@ function find( search(file); } else { const ext = path.extname(file).substr(1); - if (extensions.indexOf(ext) !== -1) { + if (extensions.includes(ext)) { result.push([file, stat.mtime.getTime(), stat.size]); } } @@ -144,7 +144,7 @@ function findNative( args.push('-type', 'f'); } - if (extensions.length) { + if (extensions.length > 0) { args.push('('); } extensions.forEach((ext, index) => { @@ -154,7 +154,7 @@ function findNative( args.push('-iname'); args.push(`*.${ext}`); }); - if (extensions.length) { + if (extensions.length > 0) { args.push(')'); } @@ -175,9 +175,7 @@ function findNative( .filter(x => !ignore(x)); const result: Result = []; let count = lines.length; - if (!count) { - callback([]); - } else { + if (count) { lines.forEach(path => { fs.stat(path, (err, stat) => { // Filter out symlinks that describe directories @@ -189,6 +187,8 @@ function findNative( } }); }); + } else { + callback([]); } }); } diff --git a/packages/jest-haste-map/src/crawlers/watchman.ts b/packages/jest-haste-map/src/crawlers/watchman.ts index ef5b63ca0059..e795050fd0f7 100644 --- a/packages/jest-haste-map/src/crawlers/watchman.ts +++ b/packages/jest-haste-map/src/crawlers/watchman.ts @@ -135,7 +135,7 @@ export async function watchmanCrawl(options: CrawlerOptions): Promise<{ 'list-capabilities', ); - if (capabilities.indexOf('field-content.sha1hex') !== -1) { + if (capabilities.includes('field-content.sha1hex')) { fields.push('content.sha1hex'); } } @@ -210,11 +210,11 @@ export async function watchmanCrawl(options: CrawlerOptions): Promise<{ const since = clocks.get(fastPath.relative(rootDir, root)); const query = - since !== undefined + since === undefined ? // Use the `since` generator if we have a clock available - {expression, fields, since} + {expression, fields, glob, glob_includedotfiles: true} : // Otherwise use the `glob` filter - {expression, fields, glob, glob_includedotfiles: true}; + {expression, fields, since}; const response = await cmd( 'query', diff --git a/packages/jest-haste-map/src/index.ts b/packages/jest-haste-map/src/index.ts index 37d7c0e2b171..ef5fec266827 100644 --- a/packages/jest-haste-map/src/index.ts +++ b/packages/jest-haste-map/src/index.ts @@ -215,7 +215,7 @@ class HasteMap extends EventEmitter implements IHasteMap { private _changeInterval?: ReturnType; private readonly _console: Console; private _isWatchmanInstalledPromise: Promise | null = null; - private _options: InternalOptions; + private readonly _options: InternalOptions; private _watchers: Array = []; private _worker: JestWorkerFarm | HasteWorker | null = null; @@ -670,7 +670,7 @@ class HasteMap extends EventEmitter implements IHasteMap { let map: ModuleMapData; let mocks: MockData; let filesToProcess: FileData; - if (changedFiles === undefined || removedFiles.size) { + if (changedFiles === undefined || removedFiles.size > 0) { map = new Map(); mocks = new Map(); filesToProcess = hasteMap.files; @@ -852,7 +852,7 @@ class HasteMap extends EventEmitter implements IHasteMap { }; const emitChange = () => { - if (eventsQueue.length) { + if (eventsQueue.length > 0) { mustCopy = true; const changeEvent: ChangeEvent = { eventsQueue, @@ -1077,7 +1077,7 @@ class HasteMap extends EventEmitter implements IHasteMap { clearInterval(this._changeInterval); } - if (!this._watchers.length) { + if (this._watchers.length === 0) { return; } diff --git a/packages/jest-haste-map/src/lib/getPlatformExtension.ts b/packages/jest-haste-map/src/lib/getPlatformExtension.ts index 079470b62bb0..2048e1624216 100644 --- a/packages/jest-haste-map/src/lib/getPlatformExtension.ts +++ b/packages/jest-haste-map/src/lib/getPlatformExtension.ts @@ -20,7 +20,7 @@ export default function getPlatformExtension( const platform = file.substring(secondToLast + 1, last); // If an overriding platform array is passed, check that first - if (platforms && platforms.indexOf(platform) !== -1) { + if (platforms && platforms.includes(platform)) { return platform; } return SUPPORTED_PLATFORM_EXTS.has(platform) ? platform : null; diff --git a/packages/jest-haste-map/src/watchers/FSEventsWatcher.ts b/packages/jest-haste-map/src/watchers/FSEventsWatcher.ts index ec529bf87baf..77536c183a8f 100644 --- a/packages/jest-haste-map/src/watchers/FSEventsWatcher.ts +++ b/packages/jest-haste-map/src/watchers/FSEventsWatcher.ts @@ -140,7 +140,7 @@ export class FSEventsWatcher extends EventEmitter { if (this.doIgnore(relativePath)) { return false; } - return this.glob.length + return this.glob.length > 0 ? micromatch([relativePath], this.glob, {dot: this.dot}).length > 0 : this.dot || micromatch([relativePath], '**/*').length > 0; } diff --git a/packages/jest-haste-map/src/watchers/NodeWatcher.js b/packages/jest-haste-map/src/watchers/NodeWatcher.js index dfc08a8ae31d..0168fe35ba9c 100644 --- a/packages/jest-haste-map/src/watchers/NodeWatcher.js +++ b/packages/jest-haste-map/src/watchers/NodeWatcher.js @@ -254,14 +254,14 @@ module.exports = class NodeWatcher extends EventEmitter { */ normalizeChange(dir, event, file) { - if (!file) { + if (file) { + this.processChange(dir, event, path.normalize(file)); + } else { this.detectChangedFile(dir, event, actualFile => { if (actualFile) { this.processChange(dir, event, actualFile); } }); - } else { - this.processChange(dir, event, path.normalize(file)); } } diff --git a/packages/jest-haste-map/src/watchers/WatchmanWatcher.js b/packages/jest-haste-map/src/watchers/WatchmanWatcher.js index bbbf6c86de4f..e068a8458cdf 100644 --- a/packages/jest-haste-map/src/watchers/WatchmanWatcher.js +++ b/packages/jest-haste-map/src/watchers/WatchmanWatcher.js @@ -230,9 +230,7 @@ WatchmanWatcher.prototype.handleFileChange = function (changeDescriptor) { return; } - if (!changeDescriptor.exists) { - self.emitEvent(DELETE_EVENT, relativePath, self.root); - } else { + if (changeDescriptor.exists) { fs.lstat(absPath, (error, stat) => { // Files can be deleted between the event and the lstat call // the most reliable thing to do here is to ignore the event. @@ -251,6 +249,8 @@ WatchmanWatcher.prototype.handleFileChange = function (changeDescriptor) { self.emitEvent(eventType, relativePath, self.root, stat); } }); + } else { + self.emitEvent(DELETE_EVENT, relativePath, self.root); } }; @@ -294,11 +294,11 @@ WatchmanWatcher.prototype.close = function () { */ function handleError(self, error) { - if (error != null) { + if (error == null) { + return false; + } else { self.emit('error', error); return true; - } else { - return false; } } diff --git a/packages/jest-haste-map/src/watchers/common.js b/packages/jest-haste-map/src/watchers/common.js index 514e94aa49a2..883e613f57e7 100644 --- a/packages/jest-haste-map/src/watchers/common.js +++ b/packages/jest-haste-map/src/watchers/common.js @@ -60,7 +60,7 @@ exports.isFileIncluded = function (globs, dot, doIgnore, relativePath) { if (doIgnore(relativePath)) { return false; } - return globs.length + return globs.length > 0 ? micromatch.some(relativePath, globs, {dot}) : dot || micromatch.some(relativePath, '**/*'); }; diff --git a/packages/jest-jasmine2/package.json b/packages/jest-jasmine2/package.json index 62e7b06cb1dd..2b9e44b7846e 100644 --- a/packages/jest-jasmine2/package.json +++ b/packages/jest-jasmine2/package.json @@ -39,7 +39,7 @@ "@types/co": "^4.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-jasmine2/src/index.ts b/packages/jest-jasmine2/src/index.ts index 1f877cbf60c4..edbd92cb857f 100644 --- a/packages/jest-jasmine2/src/index.ts +++ b/packages/jest-jasmine2/src/index.ts @@ -225,7 +225,7 @@ const addSnapshotData = (results: TestResult, snapshotState: SnapshotState) => { results.snapshot.matched = snapshotState.matched; results.snapshot.unmatched = snapshotState.unmatched; results.snapshot.updated = snapshotState.updated; - results.snapshot.unchecked = !status.deleted ? uncheckedCount : 0; + results.snapshot.unchecked = status.deleted ? 0 : uncheckedCount; // Copy the array to prevent memory leaks results.snapshot.uncheckedKeys = Array.from(uncheckedKeys); diff --git a/packages/jest-jasmine2/src/jasmine/CallTracker.ts b/packages/jest-jasmine2/src/jasmine/CallTracker.ts index fa138e0f7f42..030d95fb2da3 100644 --- a/packages/jest-jasmine2/src/jasmine/CallTracker.ts +++ b/packages/jest-jasmine2/src/jasmine/CallTracker.ts @@ -54,7 +54,7 @@ class CallTracker { }; this.any = function () { - return !!calls.length; + return calls.length > 0; }; this.count = function () { diff --git a/packages/jest-jasmine2/src/jasmine/Env.ts b/packages/jest-jasmine2/src/jasmine/Env.ts index 8418e689c7da..32ff7a1b54b0 100644 --- a/packages/jest-jasmine2/src/jasmine/Env.ts +++ b/packages/jest-jasmine2/src/jasmine/Env.ts @@ -295,7 +295,7 @@ export default function jasmineEnv(j$: Jasmine) { this.execute = async function (runnablesToRun, suiteTree = topSuite) { if (!runnablesToRun) { - if (focusedRunnables.length) { + if (focusedRunnables.length > 0) { runnablesToRun = focusedRunnables; } else { runnablesToRun = [suiteTree.id]; @@ -688,9 +688,9 @@ export default function jasmineEnv(j$: Jasmine) { const check = isError(error); checkIsError = check.isError; - message = check.message; + message = check.message || undefined; } - const errorAsErrorObject = checkIsError ? error : new Error(message!); + const errorAsErrorObject = checkIsError ? error : new Error(message); const runnable = currentRunnable(); if (!runnable) { diff --git a/packages/jest-jasmine2/src/jasmine/Spec.ts b/packages/jest-jasmine2/src/jasmine/Spec.ts index c04dc85203a9..6ca9ceee8a01 100644 --- a/packages/jest-jasmine2/src/jasmine/Spec.ts +++ b/packages/jest-jasmine2/src/jasmine/Spec.ts @@ -103,7 +103,7 @@ export default class Spec { return !!( e && e.toString && - e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1 + e.toString().includes(Spec.pendingSpecExceptionMessage) ); } diff --git a/packages/jest-jasmine2/src/jasmine/jasmineLight.ts b/packages/jest-jasmine2/src/jasmine/jasmineLight.ts index 3a1cb0b66c1e..9146bde3e1cc 100644 --- a/packages/jest-jasmine2/src/jasmine/jasmineLight.ts +++ b/packages/jest-jasmine2/src/jasmine/jasmineLight.ts @@ -30,6 +30,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* eslint-disable sort-keys, local/prefer-spread-eventually, local/prefer-rest-params-eventually */ +import type {Global} from '@jest/types'; import type {Jasmine, SpecDefinitionsFn} from '../types'; import Env from './Env'; import JsApiReporter from './JsApiReporter'; @@ -58,12 +59,16 @@ export const create = function (createOptions: Record): Jasmine { configurable: true, enumerable: true, get() { - // eslint-disable-next-line no-restricted-globals - return global[testTimeoutSymbol] || createOptions.testTimeout || 5000; + return ( + // eslint-disable-next-line no-restricted-globals + (global as Global.Global)[testTimeoutSymbol] || + createOptions.testTimeout || + 5000 + ); }, set(value) { // eslint-disable-next-line no-restricted-globals - global[testTimeoutSymbol] = value; + (global as Global.Global)[testTimeoutSymbol] = value; }, }); diff --git a/packages/jest-jasmine2/src/jestExpect.ts b/packages/jest-jasmine2/src/jestExpect.ts index 4444ae59c834..c1d15059d161 100644 --- a/packages/jest-jasmine2/src/jestExpect.ts +++ b/packages/jest-jasmine2/src/jestExpect.ts @@ -8,15 +8,16 @@ /* eslint-disable local/prefer-spread-eventually */ import {jestExpect} from '@jest/expect'; +import type {Global} from '@jest/types'; import type {JasmineMatchersObject} from './types'; export default function jestExpectAdapter(config: {expand: boolean}): void { // eslint-disable-next-line no-restricted-globals - global.expect = jestExpect; + (global as Global.Global).expect = jestExpect; jestExpect.setState({expand: config.expand}); // eslint-disable-next-line no-restricted-globals - const jasmine = global.jasmine; + const jasmine = (global as Global.Global).jasmine; jasmine.anything = jestExpect.anything; jasmine.any = jestExpect.any; jasmine.objectContaining = jestExpect.objectContaining; diff --git a/packages/jest-jasmine2/src/setup_jest_globals.ts b/packages/jest-jasmine2/src/setup_jest_globals.ts index 2ec09f3d587d..15a04434515d 100644 --- a/packages/jest-jasmine2/src/setup_jest_globals.ts +++ b/packages/jest-jasmine2/src/setup_jest_globals.ts @@ -32,7 +32,7 @@ export type SetupOptions = { const addSuppressedErrors = (result: SpecResult) => { const {suppressedErrors} = jestExpect.getState(); jestExpect.setState({suppressedErrors: []}); - if (suppressedErrors.length) { + if (suppressedErrors.length > 0) { result.status = 'failed'; result.failedExpectations = suppressedErrors.map(error => ({ @@ -50,7 +50,7 @@ const addSuppressedErrors = (result: SpecResult) => { const addAssertionErrors = (result: SpecResult) => { const assertionErrors = jestExpect.extractExpectedAssertionsErrors(); - if (assertionErrors.length) { + if (assertionErrors.length > 0) { const jasmineErrors = assertionErrors.map(({actual, error, expected}) => ({ actual, expected, diff --git a/packages/jest-jasmine2/src/treeProcessor.ts b/packages/jest-jasmine2/src/treeProcessor.ts index 6a8924471c92..960336c50600 100644 --- a/packages/jest-jasmine2/src/treeProcessor.ts +++ b/packages/jest-jasmine2/src/treeProcessor.ts @@ -33,7 +33,7 @@ export default function treeProcessor(options: Options): void { options; function isEnabled(node: TreeNode, parentEnabled: boolean) { - return parentEnabled || runnableIds.indexOf(node.id) !== -1; + return parentEnabled || runnableIds.includes(node.id); } function getNodeHandler(node: TreeNode, parentEnabled: boolean) { diff --git a/packages/jest-jasmine2/src/types.ts b/packages/jest-jasmine2/src/types.ts index d2d74fae84f9..6ed1323b8ada 100644 --- a/packages/jest-jasmine2/src/types.ts +++ b/packages/jest-jasmine2/src/types.ts @@ -6,6 +6,7 @@ */ import type {AssertionError} from 'assert'; +import type * as Process from 'process'; import type {AsymmetricMatchers, JestExpect} from '@jest/expect'; import type CallTracker from './jasmine/CallTracker'; import type Env from './jasmine/Env'; @@ -69,7 +70,7 @@ export type Jasmine = { version: string; testPath: string; addMatchers: (matchers: JasmineMatchersObject) => void; -} & AsymmetricMatchers & {process: NodeJS.Process}; +} & AsymmetricMatchers & {process: typeof Process}; declare global { // eslint-disable-next-line @typescript-eslint/no-namespace diff --git a/packages/jest-leak-detector/package.json b/packages/jest-leak-detector/package.json index 5c95b96765c3..ab718b7282a5 100644 --- a/packages/jest-leak-detector/package.json +++ b/packages/jest-leak-detector/package.json @@ -24,7 +24,7 @@ "@types/node": "*" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-leak-detector/src/__tests__/index.test.ts b/packages/jest-leak-detector/src/__tests__/index.test.ts index 62f9afcb2777..dd5a97dbf2bb 100644 --- a/packages/jest-leak-detector/src/__tests__/index.test.ts +++ b/packages/jest-leak-detector/src/__tests__/index.test.ts @@ -7,6 +7,11 @@ import LeakDetector from '../index'; +jest.mock('v8', () => ({ + ...(jest.requireActual('v8') as Record), + getHeapSnapshot: jest.fn(), +})); + const gc = globalThis.gc; // Some tests override the "gc" value. Let's make sure we roll it back to its diff --git a/packages/jest-leak-detector/src/index.ts b/packages/jest-leak-detector/src/index.ts index 2a4ec55b09d2..bea46b4a45e9 100644 --- a/packages/jest-leak-detector/src/index.ts +++ b/packages/jest-leak-detector/src/index.ts @@ -7,7 +7,7 @@ /// import {promisify} from 'util'; -import {setFlagsFromString} from 'v8'; +import {getHeapSnapshot, setFlagsFromString} from 'v8'; import {runInNewContext} from 'vm'; import {isPrimitive} from 'jest-get-type'; import {format as prettyFormat} from 'pretty-format'; @@ -48,11 +48,21 @@ export default class LeakDetector { await tick(); } + if (this._isReferenceBeingHeld) { + // triggering a heap snapshot is more aggressive than just `global.gc()`, + // but it's also quite slow, so only do it if we still think we're leaking. + // https://github.com/nodejs/node/pull/48510#issuecomment-1719289759 + getHeapSnapshot(); + + for (let i = 0; i < 10; i++) { + await tick(); + } + } + return this._isReferenceBeingHeld; } private _runGarbageCollector() { - // @ts-expect-error: not a function on `globalThis` const isGarbageCollectorHidden = globalThis.gc == null; // GC is usually hidden, so we have to expose it before running. diff --git a/packages/jest-matcher-utils/package.json b/packages/jest-matcher-utils/package.json index 5756520c26a3..9c276aeba99a 100644 --- a/packages/jest-matcher-utils/package.json +++ b/packages/jest-matcher-utils/package.json @@ -8,7 +8,7 @@ "directory": "packages/jest-matcher-utils" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "license": "MIT", "main": "./build/index.js", diff --git a/packages/jest-matcher-utils/src/index.ts b/packages/jest-matcher-utils/src/index.ts index e910f7a99039..665cff92539f 100644 --- a/packages/jest-matcher-utils/src/index.ts +++ b/packages/jest-matcher-utils/src/index.ts @@ -262,11 +262,11 @@ const getCommonAndChangedSubstrings = ( reduced + (diff[0] === DIFF_EQUAL ? diff[1] - : diff[0] !== op - ? '' - : hasCommonDiff - ? INVERTED_COLOR(diff[1]) - : diff[1]), + : diff[0] === op + ? hasCommonDiff + ? INVERTED_COLOR(diff[1]) + : diff[1] + : ''), '', ); @@ -285,8 +285,8 @@ const isLineDiffable = (expected: unknown, received: unknown): boolean => { return ( typeof expected === 'string' && typeof received === 'string' && - expected.length !== 0 && - received.length !== 0 && + expected.length > 0 && + received.length > 0 && (MULTILINE_REGEXP.test(expected) || MULTILINE_REGEXP.test(received)) ); } @@ -325,8 +325,8 @@ export const printDiffOrStringify = ( if ( typeof expected === 'string' && typeof received === 'string' && - expected.length !== 0 && - received.length !== 0 && + expected.length > 0 && + received.length > 0 && expected.length <= MAX_DIFF_STRING_LENGTH && received.length <= MAX_DIFF_STRING_LENGTH && expected !== received diff --git a/packages/jest-message-util/package.json b/packages/jest-message-util/package.json index d372d571eedd..a363234e6594 100644 --- a/packages/jest-message-util/package.json +++ b/packages/jest-message-util/package.json @@ -7,7 +7,7 @@ "directory": "packages/jest-message-util" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "license": "MIT", "main": "./build/index.js", diff --git a/packages/jest-message-util/src/index.ts b/packages/jest-message-util/src/index.ts index 9455f9b4fb0f..a91a0b5fef75 100644 --- a/packages/jest-message-util/src/index.ts +++ b/packages/jest-message-util/src/index.ts @@ -301,7 +301,7 @@ export const formatPath = ( // highlight paths from the current test file if ( (config.testMatch && - config.testMatch.length && + config.testMatch.length > 0 && micromatch([filePath], config.testMatch).length > 0) || filePath === relativeTestPath ) { @@ -474,7 +474,7 @@ export const formatResultsErrors = ( [], ); - if (!failedResults.length) { + if (failedResults.length === 0) { return null; } @@ -489,7 +489,7 @@ export const formatResultsErrors = ( TITLE_INDENT + TITLE_BULLET + result.ancestorTitles.join(ANCESTRY_SEPARATOR) + - (result.ancestorTitles.length ? ANCESTRY_SEPARATOR : '') + + (result.ancestorTitles.length > 0 ? ANCESTRY_SEPARATOR : '') + result.title, )}\n`; diff --git a/packages/jest-mock/package.json b/packages/jest-mock/package.json index d76b64721833..24c2cb7e68be 100644 --- a/packages/jest-mock/package.json +++ b/packages/jest-mock/package.json @@ -26,7 +26,7 @@ "tsd-lite": "^0.7.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-mock/src/index.ts b/packages/jest-mock/src/index.ts index 296934a66a85..e58679739ded 100644 --- a/packages/jest-mock/src/index.ts +++ b/packages/jest-mock/src/index.ts @@ -651,98 +651,101 @@ export class ModuleMocker { const prototypeSlots = this._getSlots(prototype); // eslint-disable-next-line @typescript-eslint/no-this-alias const mocker = this; - const mockConstructor = matchArity(function ( - this: ReturnType, - ...args: Parameters - ) { - const mockState = mocker._ensureMockState(f); - const mockConfig = mocker._ensureMockConfig(f); - mockState.instances.push(this); - mockState.contexts.push(this); - mockState.calls.push(args); - // Create and record an "incomplete" mock result immediately upon - // calling rather than waiting for the mock to return. This avoids - // issues caused by recursion where results can be recorded in the - // wrong order. - const mockResult: MockFunctionResult = { - type: 'incomplete', - value: undefined, - }; - mockState.results.push(mockResult); - mockState.invocationCallOrder.push(mocker._invocationCallCounter++); - - // Will be set to the return value of the mock if an error is not thrown - let finalReturnValue; - // Will be set to the error that is thrown by the mock (if it throws) - let thrownError; - // Will be set to true if the mock throws an error. The presence of a - // value in `thrownError` is not a 100% reliable indicator because a - // function could throw a value of undefined. - let callDidThrowError = false; - - try { - // The bulk of the implementation is wrapped in an immediately - // executed arrow function so the return value of the mock function - // can be easily captured and recorded, despite the many separate - // return points within the logic. - finalReturnValue = (() => { - if (this instanceof f) { - // This is probably being called as a constructor - prototypeSlots.forEach(slot => { - // Copy prototype methods to the instance to make - // it easier to interact with mock instance call and - // return values - if (prototype[slot].type === 'function') { - // @ts-expect-error no index signature - const protoImpl = this[slot]; - // @ts-expect-error no index signature - this[slot] = mocker.generateFromMetadata(prototype[slot]); - // @ts-expect-error no index signature - this[slot]._protoImpl = protoImpl; - } - }); - - // Run the mock constructor implementation - const mockImpl = mockConfig.specificMockImpls.length - ? mockConfig.specificMockImpls.shift() - : mockConfig.mockImpl; - return mockImpl && mockImpl.apply(this, arguments); - } - - // If mockImplementationOnce()/mockImplementation() is last set, - // implementation use the mock - let specificMockImpl = mockConfig.specificMockImpls.shift(); - if (specificMockImpl === undefined) { - specificMockImpl = mockConfig.mockImpl; - } - if (specificMockImpl) { - return specificMockImpl.apply(this, arguments); - } - // Otherwise use prototype implementation - if (f._protoImpl) { - return f._protoImpl.apply(this, arguments); - } - - return undefined; - })(); - } catch (error) { - // Store the thrown error so we can record it, then re-throw it. - thrownError = error; - callDidThrowError = true; - throw error; - } finally { - // Record the result of the function. - // NOTE: Intentionally NOT pushing/indexing into the array of mock - // results here to avoid corrupting results data if mockClear() - // is called during the execution of the mock. - // @ts-expect-error reassigning 'incomplete' - mockResult.type = callDidThrowError ? 'throw' : 'return'; - mockResult.value = callDidThrowError ? thrownError : finalReturnValue; - } + const mockConstructor = matchArity( + function (this: ReturnType, ...args: Parameters) { + const mockState = mocker._ensureMockState(f); + const mockConfig = mocker._ensureMockConfig(f); + mockState.instances.push(this); + mockState.contexts.push(this); + mockState.calls.push(args); + // Create and record an "incomplete" mock result immediately upon + // calling rather than waiting for the mock to return. This avoids + // issues caused by recursion where results can be recorded in the + // wrong order. + const mockResult: MockFunctionResult = { + type: 'incomplete', + value: undefined, + }; + mockState.results.push(mockResult); + mockState.invocationCallOrder.push(mocker._invocationCallCounter++); + + // Will be set to the return value of the mock if an error is not thrown + let finalReturnValue; + // Will be set to the error that is thrown by the mock (if it throws) + let thrownError; + // Will be set to true if the mock throws an error. The presence of a + // value in `thrownError` is not a 100% reliable indicator because a + // function could throw a value of undefined. + let callDidThrowError = false; + + try { + // The bulk of the implementation is wrapped in an immediately + // executed arrow function so the return value of the mock function + // can be easily captured and recorded, despite the many separate + // return points within the logic. + finalReturnValue = (() => { + if (this instanceof f) { + // This is probably being called as a constructor + prototypeSlots.forEach(slot => { + // Copy prototype methods to the instance to make + // it easier to interact with mock instance call and + // return values + if (prototype[slot].type === 'function') { + // @ts-expect-error no index signature + const protoImpl = this[slot]; + // @ts-expect-error no index signature + this[slot] = mocker.generateFromMetadata(prototype[slot]); + // @ts-expect-error no index signature + this[slot]._protoImpl = protoImpl; + } + }); + + // Run the mock constructor implementation + const mockImpl = + mockConfig.specificMockImpls.length > 0 + ? mockConfig.specificMockImpls.shift() + : mockConfig.mockImpl; + return mockImpl && mockImpl.apply(this, arguments); + } + + // If mockImplementationOnce()/mockImplementation() is last set, + // implementation use the mock + let specificMockImpl = mockConfig.specificMockImpls.shift(); + if (specificMockImpl === undefined) { + specificMockImpl = mockConfig.mockImpl; + } + if (specificMockImpl) { + return specificMockImpl.apply(this, arguments); + } + // Otherwise use prototype implementation + if (f._protoImpl) { + return f._protoImpl.apply(this, arguments); + } + + return undefined; + })(); + } catch (error) { + // Store the thrown error so we can record it, then re-throw it. + thrownError = error; + callDidThrowError = true; + throw error; + } finally { + // Record the result of the function. + // NOTE: Intentionally NOT pushing/indexing into the array of mock + // results here to avoid corrupting results data if mockClear() + // is called during the execution of the mock. + // @ts-expect-error reassigning 'incomplete' + mockResult.type = callDidThrowError ? 'throw' : 'return'; + mockResult.value = callDidThrowError + ? thrownError + : finalReturnValue; + } - return finalReturnValue; - }, - metadata.length || 0); + return finalReturnValue; + }, + // eslint-disable-next-line unicorn/explicit-length-check + metadata.length || 0, + ); const f = this._createMockFunction(metadata, mockConstructor) as Mock; f._isMockFunction = true; @@ -953,14 +956,14 @@ export class ModuleMocker { this._getSlots(metadata.members).forEach(slot => { const slotMetadata = (metadata.members && metadata.members[slot]) || {}; - if (slotMetadata.ref != null) { + if (slotMetadata.ref == null) { + mock[slot] = this._generateMock(slotMetadata, callbacks, refs); + } else { callbacks.push( (function (ref) { return () => (mock[slot] = refs[ref]); })(slotMetadata.ref), ); - } else { - mock[slot] = this._generateMock(slotMetadata, callbacks, refs); } }); @@ -1170,11 +1173,11 @@ export class ModuleMocker { )}\` property because it is not a function; ${this._typeOf( original, )} given instead.${ - typeof original !== 'object' - ? ` If you are trying to mock a property, use \`jest.replaceProperty(object, '${String( + typeof original === 'object' + ? '' + : ` If you are trying to mock a property, use \`jest.replaceProperty(object, '${String( methodKey, )}', value)\` instead.` - : '' }`, ); } @@ -1267,11 +1270,11 @@ export class ModuleMocker { )} property because it is not a function; ${this._typeOf( original, )} given instead.${ - typeof original !== 'object' - ? ` If you are trying to mock a property, use \`jest.replaceProperty(object, '${String( + typeof original === 'object' + ? '' + : ` If you are trying to mock a property, use \`jest.replaceProperty(object, '${String( propertyKey, )}', value)\` instead.` - : '' }`, ); } diff --git a/packages/jest-phabricator/package.json b/packages/jest-phabricator/package.json index 08aeb664e3f8..8adfa79ebb71 100644 --- a/packages/jest-phabricator/package.json +++ b/packages/jest-phabricator/package.json @@ -18,7 +18,7 @@ "@jest/test-result": "workspace:^" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "license": "MIT", "main": "./build/index.js", diff --git a/packages/jest-regex-util/package.json b/packages/jest-regex-util/package.json index 7c7efc628aed..0edb37ecb2de 100644 --- a/packages/jest-regex-util/package.json +++ b/packages/jest-regex-util/package.json @@ -10,7 +10,7 @@ "@types/node": "*" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "license": "MIT", "main": "./build/index.js", diff --git a/packages/jest-repl/package.json b/packages/jest-repl/package.json index 5202f7bf064c..173a70e98116 100644 --- a/packages/jest-repl/package.json +++ b/packages/jest-repl/package.json @@ -40,7 +40,7 @@ "jest-runtime": "./bin/jest-runtime-cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-repl/src/cli/runtime-cli.ts b/packages/jest-repl/src/cli/runtime-cli.ts index 4b4a438ef424..7a35879cfe6b 100644 --- a/packages/jest-repl/src/cli/runtime-cli.ts +++ b/packages/jest-repl/src/cli/runtime-cli.ts @@ -52,7 +52,7 @@ export async function run( return; } - if (!argv._.length) { + if (argv._.length === 0) { console.log('Please provide a path to a script. (See --help for details)'); process.on('exit', () => (process.exitCode = 1)); return; diff --git a/packages/jest-reporters/package.json b/packages/jest-reporters/package.json index 893b486b1d68..5ebf6cfb7403 100644 --- a/packages/jest-reporters/package.json +++ b/packages/jest-reporters/package.json @@ -63,7 +63,7 @@ } }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "repository": { "type": "git", diff --git a/packages/jest-reporters/src/CoverageReporter.ts b/packages/jest-reporters/src/CoverageReporter.ts index 953c4ed4be51..390b793d355b 100644 --- a/packages/jest-reporters/src/CoverageReporter.ts +++ b/packages/jest-reporters/src/CoverageReporter.ts @@ -75,7 +75,7 @@ export default class CoverageReporter extends BaseReporter { try { const coverageReporters = this._globalConfig.coverageReporters || []; - if (!this._globalConfig.useStderr && coverageReporters.length < 1) { + if (!this._globalConfig.useStderr && coverageReporters.length === 0) { coverageReporters.push('text-summary'); } coverageReporters.forEach(reporter => { @@ -113,7 +113,7 @@ export default class CoverageReporter extends BaseReporter { const config = context.config; if ( this._globalConfig.collectCoverageFrom && - this._globalConfig.collectCoverageFrom.length + this._globalConfig.collectCoverageFrom.length > 0 ) { context.hasteFS .matchFilesWithGlob( @@ -129,7 +129,7 @@ export default class CoverageReporter extends BaseReporter { } }); - if (!files.length) { + if (files.length === 0) { return; } @@ -303,7 +303,7 @@ export default class CoverageReporter extends BaseReporter { .map(filePath => path.resolve(filePath)); } - if (filesByGlob[absoluteThresholdGroup].indexOf(file) > -1) { + if (filesByGlob[absoluteThresholdGroup].includes(file)) { groupTypeByThresholdGroup[thresholdGroup] = THRESHOLD_GROUP_TYPES.GLOB; return agg.concat([[file, thresholdGroup]]); @@ -317,7 +317,7 @@ export default class CoverageReporter extends BaseReporter { } // Neither a glob or a path? Toss it in global if there's a global threshold: - if (thresholdGroups.indexOf(THRESHOLD_GROUP_TYPES.GLOBAL) > -1) { + if (thresholdGroups.includes(THRESHOLD_GROUP_TYPES.GLOBAL)) { groupTypeByThresholdGroup[THRESHOLD_GROUP_TYPES.GLOBAL] = THRESHOLD_GROUP_TYPES.GLOBAL; return files.concat([[file, THRESHOLD_GROUP_TYPES.GLOBAL]]); diff --git a/packages/jest-reporters/src/NotifyReporter.ts b/packages/jest-reporters/src/NotifyReporter.ts index acb9f14dc6f2..5b17d9edb734 100644 --- a/packages/jest-reporters/src/NotifyReporter.ts +++ b/packages/jest-reporters/src/NotifyReporter.ts @@ -21,7 +21,7 @@ const icon = path.resolve(__dirname, '../assets/jest_logo.png'); export default class NotifyReporter extends BaseReporter { private readonly _notifier = loadNotifier(); private readonly _globalConfig: Config.GlobalConfig; - private _context: ReporterContext; + private readonly _context: ReporterContext; static readonly filename = __filename; @@ -44,19 +44,19 @@ export default class NotifyReporter extends BaseReporter { firstContext && firstContext.value && firstContext.value.hasteFS; let packageName; - if (hasteFS != null) { + if (hasteFS == null) { + packageName = this._globalConfig.rootDir; + } else { // assuming root package.json is the first one const [filePath] = hasteFS.matchFiles('package.json'); packageName = - filePath != null - ? hasteFS.getModuleName(filePath) - : this._globalConfig.rootDir; - } else { - packageName = this._globalConfig.rootDir; + filePath == null + ? this._globalConfig.rootDir + : hasteFS.getModuleName(filePath); } - packageName = packageName != null ? `${packageName} - ` : ''; + packageName = packageName == null ? '' : `${packageName} - `; const notifyMode = this._globalConfig.notifyMode; const statusChanged = @@ -111,15 +111,7 @@ export default class NotifyReporter extends BaseReporter { const restartAnswer = 'Run again'; const quitAnswer = 'Exit tests'; - if (!watchMode) { - this._notifier.notify({ - hint: 'int:transient:1', - icon, - message, - timeout: false, - title, - }); - } else { + if (watchMode) { this._notifier.notify( { // @ts-expect-error - not all options are supported by all systems (specifically `actions` and `hint`) @@ -147,6 +139,14 @@ export default class NotifyReporter extends BaseReporter { } }, ); + } else { + this._notifier.notify({ + hint: 'int:transient:1', + icon, + message, + timeout: false, + title, + }); } } diff --git a/packages/jest-reporters/src/Status.ts b/packages/jest-reporters/src/Status.ts index f1d89b81602b..46099055fe8c 100644 --- a/packages/jest-reporters/src/Status.ts +++ b/packages/jest-reporters/src/Status.ts @@ -41,10 +41,10 @@ class CurrentTestList { add(testPath: string, config: Config.ProjectConfig) { const index = this._array.indexOf(null); const record = {config, testPath}; - if (index !== -1) { - this._array[index] = record; - } else { + if (index === -1) { this._array.push(record); + } else { + this._array[index] = record; } } @@ -118,19 +118,19 @@ export default class Status { addTestCaseResult(test: Test, testCaseResult: TestCaseResult): void { this._currentTestCases.push({test, testCaseResult}); - if (!this._showStatus) { - this._emit(); - } else { + if (this._showStatus) { this._debouncedEmit(); + } else { + this._emit(); } } testStarted(testPath: string, config: Config.ProjectConfig): void { this._currentTests.add(testPath, config); - if (!this._showStatus) { - this._emit(); - } else { + if (this._showStatus) { this._debouncedEmit(); + } else { + this._emit(); } } diff --git a/packages/jest-reporters/src/__tests__/GitHubActionsReporter.test.ts b/packages/jest-reporters/src/__tests__/GitHubActionsReporter.test.ts index 609b5697a5e4..f4e849b0425d 100644 --- a/packages/jest-reporters/src/__tests__/GitHubActionsReporter.test.ts +++ b/packages/jest-reporters/src/__tests__/GitHubActionsReporter.test.ts @@ -90,7 +90,7 @@ describe('annotations', () => { describe('logs error annotation', () => { test('when an expectation fails to pass', () => { - reporter['generateAnnotations'](testMeta, { + reporter.generateAnnotations(testMeta, { testResults: [ { ...testCaseResult, @@ -104,7 +104,7 @@ describe('annotations', () => { }); test('when a test has reference error', () => { - reporter['generateAnnotations']( + reporter.generateAnnotations( {...testMeta, path: '/user/project/__tests__/example.test.js:25:12'}, { testResults: [ @@ -121,7 +121,7 @@ describe('annotations', () => { }); test('when test is wrapped in describe block', () => { - reporter['generateAnnotations'](testMeta, { + reporter.generateAnnotations(testMeta, { testResults: [ { ...testCaseResult, @@ -137,7 +137,7 @@ describe('annotations', () => { describe('logs warning annotation before logging errors', () => { test('when test result includes retry reasons', () => { - reporter['generateAnnotations'](testMeta, { + reporter.generateAnnotations(testMeta, { testResults: [ { ...testCaseResult, @@ -198,7 +198,7 @@ describe('logs', () => { silent: false, }); - const generated = gha['getResultTree'](testResults, '/', suitePerf); + const generated = gha.getResultTree(testResults, '/', suitePerf); expect(mockedStderrWrite).not.toHaveBeenCalled(); expect(generated).toEqual(expectedResults); @@ -241,7 +241,7 @@ describe('logs', () => { silent: false, }); - const generated = gha['getResultTree'](testResults, '/', suitePerf); + const generated = gha.getResultTree(testResults, '/', suitePerf); expect(mockedStderrWrite).not.toHaveBeenCalled(); expect(generated).toEqual(expectedResults); @@ -290,7 +290,7 @@ describe('logs', () => { silent: false, }); - const generated = gha['getResultTree'](testResults, '/', suitePerf); + const generated = gha.getResultTree(testResults, '/', suitePerf); expect(mockedStderrWrite).not.toHaveBeenCalled(); expect(generated).toEqual(expectedResults); @@ -339,7 +339,7 @@ describe('logs', () => { silent: false, }); - const generated = gha['getResultTree'](testResults, '/', suitePerf); + const generated = gha.getResultTree(testResults, '/', suitePerf); expect(mockedStderrWrite).not.toHaveBeenCalled(); expect(generated).toEqual(expectedResults); @@ -400,7 +400,7 @@ describe('logs', () => { silent: false, }); - const generated = gha['getResultTree'](testResults, '/', suitePerf); + const generated = gha.getResultTree(testResults, '/', suitePerf); expect(mockedStderrWrite).not.toHaveBeenCalled(); expect(generated).toEqual(expectedResults); @@ -431,7 +431,7 @@ describe('logs', () => { silent: false, }); - gha['printResultTree'](generatedTree); + gha.printResultTree(generatedTree); expect(mockedStderrWrite.mock.calls).toMatchSnapshot(); }); @@ -459,7 +459,7 @@ describe('logs', () => { silent: false, }); - gha['printResultTree'](generatedTree); + gha.printResultTree(generatedTree); expect(mockedStderrWrite.mock.calls).toMatchSnapshot(); }); @@ -493,7 +493,7 @@ describe('logs', () => { silent: false, }); - gha['printResultTree'](generatedTree); + gha.printResultTree(generatedTree); expect(mockedStderrWrite.mock.calls).toMatchSnapshot(); }); @@ -527,7 +527,7 @@ describe('logs', () => { silent: false, }); - gha['printResultTree'](generatedTree); + gha.printResultTree(generatedTree); expect(mockedStderrWrite.mock.calls).toMatchSnapshot(); }); @@ -561,7 +561,7 @@ describe('logs', () => { silent: false, }); - gha['printResultTree'](generatedTree); + gha.printResultTree(generatedTree); expect(mockedStderrWrite.mock.calls).toMatchSnapshot(); }); @@ -595,7 +595,7 @@ describe('logs', () => { silent: false, }); - gha['printResultTree'](generatedTree); + gha.printResultTree(generatedTree); expect(mockedStderrWrite.mock.calls).toMatchSnapshot(); }); @@ -633,7 +633,7 @@ describe('logs', () => { const gha = new GitHubActionsReporter({} as Config.GlobalConfig, { silent: false, }); - gha['generateAnnotations'] = jest.fn(); + gha.generateAnnotations = jest.fn(); gha.onTestResult( mockTest as Test, @@ -677,7 +677,7 @@ describe('logs', () => { const gha = new GitHubActionsReporter({} as Config.GlobalConfig, { silent: false, }); - gha['generateAnnotations'] = jest.fn(); + gha.generateAnnotations = jest.fn(); gha.onTestResult( mockTest as Test, diff --git a/packages/jest-reporters/src/getResultHeader.ts b/packages/jest-reporters/src/getResultHeader.ts index ac8ad70acd74..9126143918c6 100644 --- a/packages/jest-reporters/src/getResultHeader.ts +++ b/packages/jest-reporters/src/getResultHeader.ts @@ -56,5 +56,5 @@ export default function getResultHeader( return `${status} ${projectDisplayName}${formatTestPath( projectConfig ?? globalConfig, testPath, - )}${testDetail.length ? ` (${testDetail.join(', ')})` : ''}`; + )}${testDetail.length > 0 ? ` (${testDetail.join(', ')})` : ''}`; } diff --git a/packages/jest-reporters/src/getSnapshotSummary.ts b/packages/jest-reporters/src/getSnapshotSummary.ts index 18b4be46085d..988dd97429bb 100644 --- a/packages/jest-reporters/src/getSnapshotSummary.ts +++ b/packages/jest-reporters/src/getSnapshotSummary.ts @@ -86,7 +86,7 @@ export default function getSnapshotSummary( ); } } - if (snapshots.filesRemovedList && snapshots.filesRemovedList.length) { + if (snapshots.filesRemovedList && snapshots.filesRemovedList.length > 0) { const [head, ...tail] = snapshots.filesRemovedList; summary.push(` ${DOWN_ARROW} ${DOT}${formatTestPath(globalConfig, head)}`); diff --git a/packages/jest-reporters/src/getSummary.ts b/packages/jest-reporters/src/getSummary.ts index f0b6f2ab260f..d01b15d1b2f7 100644 --- a/packages/jest-reporters/src/getSummary.ts +++ b/packages/jest-reporters/src/getSummary.ts @@ -131,7 +131,7 @@ export default function getSummary( ? `${chalk.bold.yellow(`${suitesPending} skipped`)}, ` : '') + (suitesPassed ? `${chalk.bold.green(`${suitesPassed} passed`)}, ` : '') + - (suitesRun !== suitesTotal ? `${suitesRun} of ${suitesTotal}` : suitesTotal) + (suitesRun === suitesTotal ? suitesTotal : `${suitesRun} of ${suitesTotal}`) } total`; const updatedTestsFailed = diff --git a/packages/jest-reporters/src/wrapAnsiString.ts b/packages/jest-reporters/src/wrapAnsiString.ts index c0d2901e9235..a5cf57ddcff3 100644 --- a/packages/jest-reporters/src/wrapAnsiString.ts +++ b/packages/jest-reporters/src/wrapAnsiString.ts @@ -42,7 +42,7 @@ export default function wrapAnsiString( (lines, [kind, token]) => { if (kind === 'string') { if (lastLineLength + token.length > terminalWidth) { - while (token.length) { + while (token.length > 0) { const chunk = token.slice(0, terminalWidth - lastLineLength); const remaining = token.slice( terminalWidth - lastLineLength, @@ -51,7 +51,7 @@ export default function wrapAnsiString( lines[lines.length - 1] += chunk; lastLineLength += chunk.length; token = remaining; - if (token.length) { + if (token.length > 0) { lines.push(''); lastLineLength = 0; } diff --git a/packages/jest-resolve-dependencies/package.json b/packages/jest-resolve-dependencies/package.json index 403e37aabe8b..11934ebc3214 100644 --- a/packages/jest-resolve-dependencies/package.json +++ b/packages/jest-resolve-dependencies/package.json @@ -28,7 +28,7 @@ "jest-runtime": "workspace:^" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-resolve-dependencies/src/index.ts b/packages/jest-resolve-dependencies/src/index.ts index 99c53d2ea464..651ef494fbd1 100644 --- a/packages/jest-resolve-dependencies/src/index.ts +++ b/packages/jest-resolve-dependencies/src/index.ts @@ -101,7 +101,7 @@ export class DependencyResolver { filter: (file: string) => boolean, options?: ResolveModuleConfig, ): Array { - if (!paths.size) { + if (paths.size === 0) { return []; } @@ -112,7 +112,7 @@ export class DependencyResolver { ) => { const visitedModules = new Set(); const result: Array = []; - while (changed.size) { + while (changed.size > 0) { changed = new Set( moduleMap.reduce>((acc, module) => { if ( diff --git a/packages/jest-resolve/package.json b/packages/jest-resolve/package.json index e12d745556e3..11b49ce48523 100644 --- a/packages/jest-resolve/package.json +++ b/packages/jest-resolve/package.json @@ -35,7 +35,7 @@ "tsd-lite": "^0.7.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-resolve/src/fileWalkers.ts b/packages/jest-resolve/src/fileWalkers.ts index 0228a8a723c3..6821310439fb 100644 --- a/packages/jest-resolve/src/fileWalkers.ts +++ b/packages/jest-resolve/src/fileWalkers.ts @@ -30,7 +30,6 @@ function statSyncCached(path: string): IPathType { let stat; try { - // @ts-expect-error TS2554 - throwIfNoEntry is only available in recent version of node, but inclusion of the option is a backward compatible no-op. stat = fs.statSync(path, {throwIfNoEntry: false}); } catch (e: any) { if (!(e && (e.code === 'ENOENT' || e.code === 'ENOTDIR'))) { diff --git a/packages/jest-resolve/src/resolver.ts b/packages/jest-resolve/src/resolver.ts index 359acc774faf..9adef706f0d8 100644 --- a/packages/jest-resolve/src/resolver.ts +++ b/packages/jest-resolve/src/resolver.ts @@ -648,18 +648,18 @@ export default class Resolver { } private _getMockPath(from: string, moduleName: string): string | null { - return !this.isCoreModule(moduleName) - ? this.getMockModule(from, moduleName) - : null; + return this.isCoreModule(moduleName) + ? null + : this.getMockModule(from, moduleName); } private async _getMockPathAsync( from: string, moduleName: string, ): Promise { - return !this.isCoreModule(moduleName) - ? this.getMockModuleAsync(from, moduleName) - : null; + return this.isCoreModule(moduleName) + ? null + : this.getMockModuleAsync(from, moduleName); } private _getVirtualMockPath( diff --git a/packages/jest-runner/package.json b/packages/jest-runner/package.json index 92319a0dc596..bd0ec7b49e1a 100644 --- a/packages/jest-runner/package.json +++ b/packages/jest-runner/package.json @@ -49,7 +49,7 @@ "tsd-lite": "^0.7.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-runner/src/runTest.ts b/packages/jest-runner/src/runTest.ts index f6cc8a35d1ef..ffb458157587 100644 --- a/packages/jest-runner/src/runTest.ts +++ b/packages/jest-runner/src/runTest.ts @@ -340,7 +340,7 @@ async function runTestInternal( const coverage = runtime.getAllCoverageInfoCopy(); if (coverage) { const coverageKeys = Object.keys(coverage); - if (coverageKeys.length) { + if (coverageKeys.length > 0) { result.coverage = coverage; } } @@ -353,7 +353,6 @@ async function runTestInternal( } if (globalConfig.logHeapUsage) { - // @ts-expect-error - doesn't exist on globalThis globalThis.gc?.(); result.memoryUsage = process.memoryUsage().heapUsed; diff --git a/packages/jest-runtime/package.json b/packages/jest-runtime/package.json index a3713d5ccb17..228a14bdad8e 100644 --- a/packages/jest-runtime/package.json +++ b/packages/jest-runtime/package.json @@ -47,7 +47,7 @@ "jest-environment-node": "workspace:^" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-runtime/src/__mocks__/createRuntime.js b/packages/jest-runtime/src/__mocks__/createRuntime.js index fc8b1dde17b7..a391f8eba3b6 100644 --- a/packages/jest-runtime/src/__mocks__/createRuntime.js +++ b/packages/jest-runtime/src/__mocks__/createRuntime.js @@ -74,7 +74,7 @@ module.exports = async function createRuntime(filename, projectConfig) { transform, }); - if (!projectConfig.roots.length) { + if (projectConfig.roots.length === 0) { projectConfig.roots = [projectConfig.rootDir]; } diff --git a/packages/jest-runtime/src/__tests__/runtime_require_module.test.js b/packages/jest-runtime/src/__tests__/runtime_require_module.test.js index 639e4c4503f5..46bd064769e8 100644 --- a/packages/jest-runtime/src/__tests__/runtime_require_module.test.js +++ b/packages/jest-runtime/src/__tests__/runtime_require_module.test.js @@ -41,6 +41,7 @@ describe('Runtime requireModule', () => { 'exports', 'filename', 'id', + 'isPreloading', 'loaded', 'path', 'parent', @@ -60,6 +61,7 @@ describe('Runtime requireModule', () => { 'exports', 'filename', 'id', + 'isPreloading', 'loaded', 'path', 'parent', diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index 9b5647215101..61074414b2b5 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -129,7 +129,7 @@ const NODE_MODULES = `${path.sep}node_modules${path.sep}`; const getModuleNameMapper = (config: Config.ProjectConfig) => { if ( Array.isArray(config.moduleNameMapper) && - config.moduleNameMapper.length + config.moduleNameMapper.length > 0 ) { return config.moduleNameMapper.map(([regex, moduleName]) => ({ moduleName, @@ -942,6 +942,7 @@ export default class Runtime { exports: {}, filename: modulePath, id: modulePath, + isPreloading: false, loaded: false, path: path.dirname(modulePath), }; @@ -966,9 +967,7 @@ export default class Runtime { requireInternalModule(from: string, to?: string): T { if (to) { - const require = ( - nativeModule.createRequire ?? nativeModule.createRequireFromPath - )(from); + const require = nativeModule.createRequire(from); if (INTERNAL_MODULE_REQUIRE_OUTSIDE_OPTIMIZED_MODULES.has(to)) { return require(to); } @@ -1054,6 +1053,7 @@ export default class Runtime { exports: {}, filename: modulePath, id: modulePath, + isPreloading: false, loaded: false, path: path.dirname(modulePath), }; @@ -1467,7 +1467,7 @@ export default class Runtime { 'The first argument to require.resolve.paths must be a string. Received null or undefined.', ); } - if (!moduleName.length) { + if (moduleName.length === 0) { throw new Error( 'The first argument to require.resolve.paths must not be the empty string.', ); @@ -1803,6 +1803,7 @@ export default class Runtime { exports: {}, filename, id: filename, + isPreloading: false, loaded: false, path: path.dirname(filename), }); @@ -1821,24 +1822,6 @@ export default class Runtime { if ('createRequire' in nativeModule) { Module.createRequire = createRequire; } - if ('createRequireFromPath' in nativeModule) { - Module.createRequireFromPath = function createRequireFromPath( - filename: string | URL, - ) { - if (typeof filename !== 'string') { - const error: NodeJS.ErrnoException = new TypeError( - `The argument 'filename' must be string. Received '${filename}'.${ - filename instanceof URL - ? ' Use createRequire for URL filename.' - : '' - }`, - ); - error.code = 'ERR_INVALID_ARG_TYPE'; - throw error; - } - return createRequire(filename); - }; - } if ('syncBuiltinESMExports' in nativeModule) { // cast since TS seems very confused about whether it exists or not (Module as any).syncBuiltinESMExports = @@ -2408,7 +2391,7 @@ export default class Runtime { const originalStack = new ReferenceError(`${errorMessage}${testPath}`) .stack!.split('\n') // Remove this file from the stack (jest-message-utils will keep one line) - .filter(line => line.indexOf(__filename) === -1) + .filter(line => !line.includes(__filename)) .join('\n'); const {message, stack} = separateMessageFromStack(originalStack); diff --git a/packages/jest-schemas/package.json b/packages/jest-schemas/package.json index 977931d88965..7ed94363463e 100644 --- a/packages/jest-schemas/package.json +++ b/packages/jest-schemas/package.json @@ -20,7 +20,7 @@ "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index 7dcdf317de3c..c53b6317fec1 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -54,7 +54,7 @@ "tsd-lite": "^0.7.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-snapshot/src/InlineSnapshots.ts b/packages/jest-snapshot/src/InlineSnapshots.ts index 2fc26394ee03..ebdf2724fcce 100644 --- a/packages/jest-snapshot/src/InlineSnapshots.ts +++ b/packages/jest-snapshot/src/InlineSnapshots.ts @@ -223,7 +223,10 @@ const indent = (snapshot: string, numIndents: number, indentation: string) => { if (index === 0) { // First line is either a 1-line snapshot or a blank line. return line; - } else if (index !== lines.length - 1) { + } else if (index === lines.length - 1) { + // The last line should be placed on the same level as the expect call. + return indentation.repeat(numIndents) + line; + } else { // Do not indent empty lines. if (line === '') { return line; @@ -231,9 +234,6 @@ const indent = (snapshot: string, numIndents: number, indentation: string) => { // Not last line, indent one level deeper than expect call. return indentation.repeat(numIndents + 1) + line; - } else { - // The last line should be placed on the same level as the expect call. - return indentation.repeat(numIndents) + line; } }) .join('\n'); @@ -291,7 +291,7 @@ const traverseAst = ( } }); - if (remainingSnapshots.size) { + if (remainingSnapshots.size > 0) { throw new Error("Jest: Couldn't locate all inline snapshots."); } }; diff --git a/packages/jest-snapshot/src/State.ts b/packages/jest-snapshot/src/State.ts index 99b9a8e2371f..efa6fba2d1c0 100644 --- a/packages/jest-snapshot/src/State.ts +++ b/packages/jest-snapshot/src/State.ts @@ -152,7 +152,7 @@ export default class SnapshotState { saved: false, }; - if ((this._dirty || this._uncheckedKeys.size) && !isEmpty) { + if ((this._dirty || this._uncheckedKeys.size > 0) && !isEmpty) { if (hasExternalSnapshots) { saveSnapshotFile(this._snapshotData, this._snapshotPath); } @@ -175,6 +175,7 @@ export default class SnapshotState { } getUncheckedCount(): number { + // eslint-disable-next-line unicorn/explicit-length-check return this._uncheckedKeys.size || 0; } @@ -183,7 +184,7 @@ export default class SnapshotState { } removeUncheckedKeys(): void { - if (this._updateSnapshot === 'all' && this._uncheckedKeys.size) { + if (this._updateSnapshot === 'all' && this._uncheckedKeys.size > 0) { this._dirty = true; this._uncheckedKeys.forEach(key => delete this._snapshotData[key]); this._uncheckedKeys.clear(); @@ -243,15 +244,15 @@ export default class SnapshotState { (this._updateSnapshot === 'new' || this._updateSnapshot === 'all')) ) { if (this._updateSnapshot === 'all') { - if (!pass) { + if (pass) { + this.matched++; + } else { if (hasSnapshot) { this.updated++; } else { this.added++; } this._addSnapshot(key, receivedSerialized, {error, isInline}); - } else { - this.matched++; } } else { this._addSnapshot(key, receivedSerialized, {error, isInline}); @@ -266,26 +267,26 @@ export default class SnapshotState { pass: true, }; } else { - if (!pass) { - this.unmatched++; + if (pass) { + this.matched++; return { - actual: removeExtraLineBreaks(receivedSerialized), + actual: '', count, - expected: - expected !== undefined - ? removeExtraLineBreaks(expected) - : undefined, + expected: '', key, - pass: false, + pass: true, }; } else { - this.matched++; + this.unmatched++; return { - actual: '', + actual: removeExtraLineBreaks(receivedSerialized), count, - expected: '', + expected: + expected === undefined + ? undefined + : removeExtraLineBreaks(expected), key, - pass: true, + pass: false, }; } } diff --git a/packages/jest-snapshot/src/index.ts b/packages/jest-snapshot/src/index.ts index a0344a7daccc..a77f80a3c64b 100644 --- a/packages/jest-snapshot/src/index.ts +++ b/packages/jest-snapshot/src/index.ts @@ -57,8 +57,8 @@ const printSnapshotName = ( hint = '', count: number, ): string => { - const hasNames = concatenatedBlockNames.length !== 0; - const hasHint = hint.length !== 0; + const hasNames = concatenatedBlockNames.length > 0; + const hasHint = hint.length > 0; return `Snapshot name: \`${ hasNames ? escapeBacktickString(concatenatedBlockNames) : '' @@ -262,9 +262,9 @@ export const toMatchInlineSnapshot: MatcherFunctionWithContext< return _toMatchSnapshot({ context: this, inlineSnapshot: - inlineSnapshot !== undefined - ? stripAddedIndentation(inlineSnapshot) - : undefined, + inlineSnapshot === undefined + ? undefined + : stripAddedIndentation(inlineSnapshot), isInline: true, matcherName, properties, @@ -328,7 +328,9 @@ const _toMatchSnapshot = (config: MatchSnapshotConfig) => { context.utils.subsetEquality, ]); - if (!propertyPass) { + if (propertyPass) { + received = deepMerge(received, properties); + } else { const key = snapshotState.fail(fullTestName, received); const matched = /(\d+)$/.exec(key); const count = matched === null ? 1 : Number(matched[1]); @@ -349,8 +351,6 @@ const _toMatchSnapshot = (config: MatchSnapshotConfig) => { name: matcherName, pass: false, }; - } else { - received = deepMerge(received, properties); } } @@ -454,9 +454,9 @@ export const toThrowErrorMatchingInlineSnapshot: MatcherFunctionWithContext< { context: this, inlineSnapshot: - inlineSnapshot !== undefined - ? stripAddedIndentation(inlineSnapshot) - : undefined, + inlineSnapshot === undefined + ? undefined + : stripAddedIndentation(inlineSnapshot), isInline: true, matcherName, received, diff --git a/packages/jest-snapshot/src/mockSerializer.ts b/packages/jest-snapshot/src/mockSerializer.ts index bdc0c7338132..40266e8cd14d 100644 --- a/packages/jest-snapshot/src/mockSerializer.ts +++ b/packages/jest-snapshot/src/mockSerializer.ts @@ -20,7 +20,7 @@ export const serialize: NewPlugin['serialize'] = ( const nameString = name === 'jest.fn()' ? '' : ` ${name}`; let callsString = ''; - if (val.mock.calls.length !== 0) { + if (val.mock.calls.length > 0) { const indentationNext = indentation + config.indent; callsString = ` {${config.spacingOuter}${indentationNext}"calls": ${printer( val.mock.calls, diff --git a/packages/jest-snapshot/src/printSnapshot.ts b/packages/jest-snapshot/src/printSnapshot.ts index c989182e56a9..9ac63e795f9a 100644 --- a/packages/jest-snapshot/src/printSnapshot.ts +++ b/packages/jest-snapshot/src/printSnapshot.ts @@ -114,7 +114,7 @@ export const matcherHintFromConfig = ( options.expectedColor = noColor; } - if (typeof hint === 'string' && hint.length !== 0) { + if (typeof hint === 'string' && hint.length > 0) { options.secondArgument = HINT_ARG; options.secondArgumentColor = BOLD_WEIGHT; } else if (typeof inlineSnapshot === 'string') { @@ -126,7 +126,7 @@ export const matcherHintFromConfig = ( } } } else { - if (typeof hint === 'string' && hint.length !== 0) { + if (typeof hint === 'string' && hint.length > 0) { expectedArgument = HINT_ARG; options.expectedColor = BOLD_WEIGHT; } else if (typeof inlineSnapshot === 'string') { @@ -155,11 +155,11 @@ const joinDiffs = ( reduced + (diff[0] === DIFF_EQUAL ? diff[1] - : diff[0] !== op - ? '' - : hasCommon - ? INVERTED_COLOR(diff[1]) - : diff[1]), + : diff[0] === op + ? hasCommon + ? INVERTED_COLOR(diff[1]) + : diff[1] + : ''), '', ); diff --git a/packages/jest-snapshot/src/utils.ts b/packages/jest-snapshot/src/utils.ts index ddcbf14cf206..e7e9edfd9b17 100644 --- a/packages/jest-snapshot/src/utils.ts +++ b/packages/jest-snapshot/src/utils.ts @@ -251,8 +251,11 @@ export const deepMerge = (target: any, source: any): any => { Object.keys(source).forEach(key => { if (isObject(source[key]) && !source[key].$$typeof) { - if (!(key in target)) Object.assign(mergedOutput, {[key]: source[key]}); - else mergedOutput[key] = deepMerge(target[key], source[key]); + if (key in target) { + mergedOutput[key] = deepMerge(target[key], source[key]); + } else { + Object.assign(mergedOutput, {[key]: source[key]}); + } } else if (Array.isArray(source[key])) { mergedOutput[key] = deepMergeArray(target[key], source[key]); } else { diff --git a/packages/jest-source-map/package.json b/packages/jest-source-map/package.json index b7a2d05b9134..8a65f241f086 100644 --- a/packages/jest-source-map/package.json +++ b/packages/jest-source-map/package.json @@ -25,7 +25,7 @@ "@types/graceful-fs": "^4.1.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-test-result/package.json b/packages/jest-test-result/package.json index 1e4c68eafdec..909516fbbd5d 100644 --- a/packages/jest-test-result/package.json +++ b/packages/jest-test-result/package.json @@ -27,7 +27,7 @@ "jest-resolve": "workspace:^" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-test-result/src/formatTestResults.ts b/packages/jest-test-result/src/formatTestResults.ts index 6347d0582171..e0eb7c7ce540 100644 --- a/packages/jest-test-result/src/formatTestResults.ts +++ b/packages/jest-test-result/src/formatTestResults.ts @@ -52,9 +52,9 @@ const formatTestResult = ( return { assertionResults: testResult.testResults, coverage: - codeCoverageFormatter != null - ? codeCoverageFormatter(testResult.coverage, reporter) - : testResult.coverage, + codeCoverageFormatter == null + ? testResult.coverage + : codeCoverageFormatter(testResult.coverage, reporter), endTime: testResult.perfStats.end, message: testResult.failureMessage ?? '', name: testResult.testFilePath, diff --git a/packages/jest-test-sequencer/package.json b/packages/jest-test-sequencer/package.json index c6a4018e3b20..95d7b5c02fa4 100644 --- a/packages/jest-test-sequencer/package.json +++ b/packages/jest-test-sequencer/package.json @@ -27,7 +27,7 @@ "@types/graceful-fs": "^4.1.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-test-sequencer/src/__tests__/test_sequencer.test.ts b/packages/jest-test-sequencer/src/__tests__/test_sequencer.test.ts index 93601bffd481..cb6a03bdf518 100644 --- a/packages/jest-test-sequencer/src/__tests__/test_sequencer.test.ts +++ b/packages/jest-test-sequencer/src/__tests__/test_sequencer.test.ts @@ -8,7 +8,7 @@ import * as path from 'path'; import * as mockedFs from 'graceful-fs'; import type {AggregatedResult, Test, TestContext} from '@jest/test-result'; -import {makeProjectConfig} from '@jest/test-utils'; +import {makeGlobalConfig, makeProjectConfig} from '@jest/test-utils'; import TestSequencer from '../index'; jest.mock('graceful-fs', () => ({ @@ -56,7 +56,10 @@ const toTests = (paths: Array) => beforeEach(() => { jest.clearAllMocks(); - sequencer = new TestSequencer(); + sequencer = new TestSequencer({ + contexts: [], + globalConfig: makeGlobalConfig(), + }); }); test('sorts by file size if there is no timing information', () => { diff --git a/packages/jest-test-sequencer/src/index.ts b/packages/jest-test-sequencer/src/index.ts index 0a8239e8ce63..9495c3d49470 100644 --- a/packages/jest-test-sequencer/src/index.ts +++ b/packages/jest-test-sequencer/src/index.ts @@ -10,11 +10,17 @@ import * as path from 'path'; import * as fs from 'graceful-fs'; import slash = require('slash'); import type {AggregatedResult, Test, TestContext} from '@jest/test-result'; +import type {Config} from '@jest/types'; import HasteMap from 'jest-haste-map'; const FAIL = 0; const SUCCESS = 1; +export type TestSequencerOptions = { + contexts: ReadonlyArray; + globalConfig: Config.GlobalConfig; +}; + type Cache = { [key: string]: | [testStatus: typeof FAIL | typeof SUCCESS, testDuration: number] @@ -46,6 +52,9 @@ type ShardPositionOptions = ShardOptions & { export default class TestSequencer { private readonly _cache = new Map(); + // eslint-disable-next-line @typescript-eslint/no-empty-function + constructor(_options: TestSequencerOptions) {} + _getCachePath(testContext: TestContext): string { const {config} = testContext; const HasteMapClass = HasteMap.getStatic(config); diff --git a/packages/jest-transform/package.json b/packages/jest-transform/package.json index 75a2a459fc3e..ac40d75b3942 100644 --- a/packages/jest-transform/package.json +++ b/packages/jest-transform/package.json @@ -43,7 +43,7 @@ "dedent": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-transform/src/ScriptTransformer.ts b/packages/jest-transform/src/ScriptTransformer.ts index 8ee6aa12d8f1..b0c61a587d06 100644 --- a/packages/jest-transform/src/ScriptTransformer.ts +++ b/packages/jest-transform/src/ScriptTransformer.ts @@ -459,15 +459,15 @@ class ScriptTransformer { code = transformed.code; } - if (map != null) { + if (map == null) { + sourceMapPath = null; + } else { const sourceMapContent = typeof map === 'string' ? map : JSON.stringify(map); invariant(sourceMapPath, 'We should always have default sourceMapPath'); writeCacheFile(sourceMapPath, sourceMapContent); - } else { - sourceMapPath = null; } writeCodeCacheFile(cacheFilePath, code); @@ -840,7 +840,7 @@ class ScriptTransformer { const ignoreRegexp = this._cache.ignorePatternsRegExp; const isIgnored = ignoreRegexp ? ignoreRegexp.test(filename) : false; - return this._config.transform.length !== 0 && !isIgnored; + return this._config.transform.length > 0 && !isIgnored; } } @@ -1019,7 +1019,7 @@ const calcIgnorePatternRegExp = (config: Config.ProjectConfig) => { }; const calcTransformRegExp = (config: Config.ProjectConfig) => { - if (!config.transform.length) { + if (config.transform.length === 0) { return undefined; } diff --git a/packages/jest-transform/src/shouldInstrument.ts b/packages/jest-transform/src/shouldInstrument.ts index 2c1a5b796f51..56c44b9aac22 100644 --- a/packages/jest-transform/src/shouldInstrument.ts +++ b/packages/jest-transform/src/shouldInstrument.ts @@ -41,7 +41,7 @@ export default function shouldInstrument( } if ( - config.forceCoverageMatch.length && + config.forceCoverageMatch.length > 0 && micromatch.any(filename, config.forceCoverageMatch) ) { return true; @@ -71,7 +71,7 @@ export default function shouldInstrument( if ( // still cover if `only` is specified - options.collectCoverageFrom.length && + options.collectCoverageFrom.length > 0 && !globsToMatcher(options.collectCoverageFrom)( replacePathSepForGlob(path.relative(config.rootDir, filename)), ) diff --git a/packages/jest-types/package.json b/packages/jest-types/package.json index fa55541874b9..1ac21a8a3759 100644 --- a/packages/jest-types/package.json +++ b/packages/jest-types/package.json @@ -7,7 +7,7 @@ "directory": "packages/jest-types" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "license": "MIT", "main": "./build/index.js", diff --git a/packages/jest-types/src/Circus.ts b/packages/jest-types/src/Circus.ts index 2b27c314f541..31906d9b7f95 100644 --- a/packages/jest-types/src/Circus.ts +++ b/packages/jest-types/src/Circus.ts @@ -5,9 +5,10 @@ * LICENSE file in the root directory of this source tree. */ +import type * as ProcessModule from 'process'; import type * as Global from './Global'; -type Process = NodeJS.Process; +type Process = typeof ProcessModule; export type DoneFn = Global.DoneFn; export type BlockFn = Global.BlockFn; @@ -213,10 +214,8 @@ export type RunResult = { export type TestResults = Array; export type GlobalErrorHandlers = { - uncaughtException: Array<(exception: Exception) => void>; - unhandledRejection: Array< - (exception: Exception, promise: Promise) => void - >; + uncaughtException: Array; + unhandledRejection: Array; }; export type State = { diff --git a/packages/jest-util/package.json b/packages/jest-util/package.json index f03ffcb52d74..b65d0c5391a5 100644 --- a/packages/jest-util/package.json +++ b/packages/jest-util/package.json @@ -29,7 +29,7 @@ "@types/picomatch": "^2.2.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-util/src/createProcessObject.ts b/packages/jest-util/src/createProcessObject.ts index 252b121275be..baa6916a64fe 100644 --- a/packages/jest-util/src/createProcessObject.ts +++ b/packages/jest-util/src/createProcessObject.ts @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. */ +import type * as Process from 'process'; import deepCyclicCopy from './deepCyclicCopy'; const BLACKLIST = new Set(['env', 'mainModule', '_events']); @@ -79,7 +80,7 @@ function createProcessEnv(): NodeJS.ProcessEnv { return Object.assign(proxy, process.env); } -export default function createProcessObject(): NodeJS.Process { +export default function createProcessObject(): typeof Process { const process = require('process'); const newProcess = deepCyclicCopy(process, { blacklist: BLACKLIST, diff --git a/packages/jest-validate/package.json b/packages/jest-validate/package.json index 6799e164205d..43df3220f431 100644 --- a/packages/jest-validate/package.json +++ b/packages/jest-validate/package.json @@ -28,7 +28,7 @@ "@types/yargs": "^17.0.8" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-validate/src/validateCLIOptions.ts b/packages/jest-validate/src/validateCLIOptions.ts index 0e227ce872e2..5cb8ddce950a 100644 --- a/packages/jest-validate/src/validateCLIOptions.ts +++ b/packages/jest-validate/src/validateCLIOptions.ts @@ -106,7 +106,7 @@ export default function validateCLIOptions( .filter(arg => deprecations.has(arg) && argv[arg] != null) .map(arg => ({fatal: !allowedOptions.has(arg), name: arg})); - if (deprecatedOptions.length) { + if (deprecatedOptions.length > 0) { validateDeprecatedOptions(deprecatedOptions, CLIDeprecations, argv); } @@ -114,11 +114,11 @@ export default function validateCLIOptions( arg => !allowedOptions.has(camelcase(arg, {locale: 'en-US'})) && !allowedOptions.has(arg) && - (!rawArgv.length || rawArgv.includes(arg)), + (rawArgv.length === 0 || rawArgv.includes(arg)), [], ); - if (unrecognizedOptions.length) { + if (unrecognizedOptions.length > 0) { throw createCLIValidationError(unrecognizedOptions, allowedOptions); } diff --git a/packages/jest-watcher/package.json b/packages/jest-watcher/package.json index e8f15f73282f..eef1adf555e3 100644 --- a/packages/jest-watcher/package.json +++ b/packages/jest-watcher/package.json @@ -30,7 +30,7 @@ "url": "https://github.com/jestjs/jest/issues" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "homepage": "https://jestjs.io/", "license": "MIT", diff --git a/packages/jest-worker/package.json b/packages/jest-worker/package.json index f3d805750f5c..1dbe257653ea 100644 --- a/packages/jest-worker/package.json +++ b/packages/jest-worker/package.json @@ -33,7 +33,7 @@ "worker-farm": "^1.6.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/jest-worker/src/workers/ChildProcessWorker.ts b/packages/jest-worker/src/workers/ChildProcessWorker.ts index 395cf1477444..8040ed953150 100644 --- a/packages/jest-worker/src/workers/ChildProcessWorker.ts +++ b/packages/jest-worker/src/workers/ChildProcessWorker.ts @@ -408,9 +408,9 @@ export default class ChildProcessWorker // was killed externally. Log this fact so it's more clear to users that // something went wrong externally, rather than a bug in Jest itself. const error = new Error( - signal != null - ? `A jest worker process (pid=${this._child.pid}) was terminated by another process: signal=${signal}, exitCode=${exitCode}. Operating system logs may contain more information on why this occurred.` - : `A jest worker process (pid=${this._child.pid}) crashed for an unknown reason: exitCode=${exitCode}`, + signal == null + ? `A jest worker process (pid=${this._child.pid}) crashed for an unknown reason: exitCode=${exitCode}` + : `A jest worker process (pid=${this._child.pid}) was terminated by another process: signal=${signal}, exitCode=${exitCode}. Operating system logs may contain more information on why this occurred.`, ); this._onProcessEnd(error, null); @@ -486,7 +486,7 @@ export default class ChildProcessWorker * @returns Process id. */ getWorkerSystemId(): number { - return this._child.pid; + return this._child.pid!; } getStdout(): NodeJS.ReadableStream | null { diff --git a/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.ts b/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.ts index d98b5e887f6b..01f1a898e2c1 100644 --- a/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.ts +++ b/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.ts @@ -159,8 +159,8 @@ it('provides stdout and stderr from the child processes', async () => { workerPath: '/tmp/foo', } as WorkerOptions); - const stdout = worker.getStdout() as NodeJS.ReadableStream; - const stderr = worker.getStderr() as NodeJS.ReadableStream; + const stdout = worker.getStdout()!; + const stderr = worker.getStderr()!; (forkInterface.stdout as PassThrough).end('Hello ', 'utf8'); (forkInterface.stderr as PassThrough).end('Jest ', 'utf8'); diff --git a/packages/jest-worker/src/workers/__tests__/WorkerEdgeCases.test.ts b/packages/jest-worker/src/workers/__tests__/WorkerEdgeCases.test.ts index 3b283cc9c925..21f1b0d74864 100644 --- a/packages/jest-worker/src/workers/__tests__/WorkerEdgeCases.test.ts +++ b/packages/jest-worker/src/workers/__tests__/WorkerEdgeCases.test.ts @@ -52,7 +52,7 @@ afterAll(async () => { test.each(filesToBuild)('%s.js should exist', file => { const path = join(writeDestination, `${file}.js`); - expect(async () => await access(path)).not.toThrow(); + expect(async () => access(path)).not.toThrow(); }); async function closeWorkerAfter( @@ -310,9 +310,9 @@ describe.each([ }); test('worker stays dead', async () => { - await expect( - async () => await worker.waitForWorkerReady(), - ).rejects.toThrow('Worker state means it will never be ready: shut-down'); + await expect(async () => worker.waitForWorkerReady()).rejects.toThrow( + 'Worker state means it will never be ready: shut-down', + ); expect(worker.isWorkerRunning()).toBeFalsy(); }); diff --git a/packages/jest-worker/src/workers/__tests__/threadChild.test.ts b/packages/jest-worker/src/workers/__tests__/threadChild.test.ts index b7637963969f..1f1433db8b0b 100644 --- a/packages/jest-worker/src/workers/__tests__/threadChild.test.ts +++ b/packages/jest-worker/src/workers/__tests__/threadChild.test.ts @@ -114,7 +114,7 @@ beforeEach(() => { ); messagePort = (require('worker_threads') as typeof import('worker_threads')) - .parentPort as MessagePort; + .parentPort!; // Require the child! require('../threadChild'); diff --git a/packages/jest/package.json b/packages/jest/package.json index bdfbcbb6ae07..21e2081c9fe7 100644 --- a/packages/jest/package.json +++ b/packages/jest/package.json @@ -32,7 +32,7 @@ }, "bin": "./bin/jest.js", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "repository": { "type": "git", diff --git a/packages/pretty-format/__benchmarks__/test.js b/packages/pretty-format/__benchmarks__/test.js index b5f31f179f3d..c648cbace774 100644 --- a/packages/pretty-format/__benchmarks__/test.js +++ b/packages/pretty-format/__benchmarks__/test.js @@ -114,10 +114,10 @@ function test(name, value, ignoreResult, prettyFormatOpts) { message = chalk.bgRed.black(message); } else if (diff > winner.time * 0.65) { message = chalk.bgYellow.black(message); - } else if (!current.error) { - message = chalk.bgGreen.black(message); - } else { + } else if (current.error) { message = chalk.dim(message); + } else { + message = chalk.bgGreen.black(message); } console.log(` ${message}`); diff --git a/packages/pretty-format/package.json b/packages/pretty-format/package.json index cdcde312bc77..7c510b886789 100644 --- a/packages/pretty-format/package.json +++ b/packages/pretty-format/package.json @@ -34,7 +34,7 @@ "react-test-renderer": "17.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/pretty-format/src/__tests__/Immutable.test.ts b/packages/pretty-format/src/__tests__/Immutable.test.ts index c0562680bb3e..c9a285289a96 100644 --- a/packages/pretty-format/src/__tests__/Immutable.test.ts +++ b/packages/pretty-format/src/__tests__/Immutable.test.ts @@ -929,7 +929,7 @@ describe('Immutable.Seq', () => { describe('Immutable.Seq lazy entries', () => { const expected = 'Immutable.Seq {…}'; const object = {key0: '', key1: '1'}; - const filterer = (value: string) => value.length !== 0; + const filterer = (value: string) => value.length > 0; // undefined size confirms correct criteria for lazy Seq test('from object properties', () => { @@ -947,7 +947,7 @@ describe('Immutable.Seq lazy entries', () => { describe('Immutable.Seq lazy values', () => { const expected = 'Immutable.Seq […]'; const array = ['', '1', '22']; - const filterer = (item: string) => item.length !== 0; + const filterer = (item: string) => item.length > 0; test('from Immutable.Range', () => { const val = Immutable.Range(1, Infinity); diff --git a/packages/pretty-format/src/__tests__/setPrettyPrint.ts b/packages/pretty-format/src/__tests__/setPrettyPrint.ts index 6e41c818c9aa..bd585430385b 100644 --- a/packages/pretty-format/src/__tests__/setPrettyPrint.ts +++ b/packages/pretty-format/src/__tests__/setPrettyPrint.ts @@ -43,7 +43,7 @@ const setPrettyPrint = (plugins: Plugins) => { ` ${this.utils.printExpected(expected)}\n` + 'Received:\n' + ` ${this.utils.printReceived(prettyFormatted)}${ - diffString != null ? `\n\nDifference:\n\n${diffString}` : '' + diffString == null ? '' : `\n\nDifference:\n\n${diffString}` }` ); }, diff --git a/packages/pretty-format/src/collections.ts b/packages/pretty-format/src/collections.ts index c287b984410a..d5911ba05ff5 100644 --- a/packages/pretty-format/src/collections.ts +++ b/packages/pretty-format/src/collections.ts @@ -14,7 +14,7 @@ const getKeysOfEnumerableProperties = ( ) => { const rawKeys = Object.keys(object); const keys: Array = - compareKeys !== null ? rawKeys.sort(compareKeys) : rawKeys; + compareKeys === null ? rawKeys : rawKeys.sort(compareKeys); if (Object.getOwnPropertySymbols) { Object.getOwnPropertySymbols(object).forEach(symbol => { @@ -155,7 +155,7 @@ export function printListItems( ): string { let result = ''; - if (list.length) { + if (list.length > 0) { result += config.spacingOuter; const indentationNext = indentation + config.indent; @@ -201,7 +201,7 @@ export function printObjectProperties( let result = ''; const keys = getKeysOfEnumerableProperties(val, config.compareKeys); - if (keys.length) { + if (keys.length > 0) { result += config.spacingOuter; const indentationNext = indentation + config.indent; diff --git a/packages/pretty-format/src/index.ts b/packages/pretty-format/src/index.ts index fe59d3f33e29..d0522eec5f62 100644 --- a/packages/pretty-format/src/index.ts +++ b/packages/pretty-format/src/index.ts @@ -207,7 +207,7 @@ function printComplexValue( refs: Refs, hasCalledToJSON?: boolean, ): string { - if (refs.indexOf(val) !== -1) { + if (refs.includes(val)) { return '[Circular]'; } refs = refs.slice(); diff --git a/packages/pretty-format/src/plugins/DOMCollection.ts b/packages/pretty-format/src/plugins/DOMCollection.ts index 40b27e2005bd..29beb8b61f64 100644 --- a/packages/pretty-format/src/plugins/DOMCollection.ts +++ b/packages/pretty-format/src/plugins/DOMCollection.ts @@ -14,7 +14,7 @@ const OBJECT_NAMES = ['DOMStringMap', 'NamedNodeMap']; const ARRAY_REGEXP = /^(HTML\w*Collection|NodeList)$/; const testName = (name: any) => - OBJECT_NAMES.indexOf(name) !== -1 || ARRAY_REGEXP.test(name); + OBJECT_NAMES.includes(name) || ARRAY_REGEXP.test(name); export const test: NewPlugin['test'] = (val: object) => val && @@ -40,7 +40,7 @@ export const serialize: NewPlugin['serialize'] = ( return ( (config.min ? '' : name + SPACE) + - (OBJECT_NAMES.indexOf(name) !== -1 + (OBJECT_NAMES.includes(name) ? `{${printObjectProperties( isNamedNodeMap(collection) ? Array.from(collection).reduce>( diff --git a/packages/pretty-format/src/plugins/ReactElement.ts b/packages/pretty-format/src/plugins/ReactElement.ts index 8f1f6713c9f1..d073c77651b1 100644 --- a/packages/pretty-format/src/plugins/ReactElement.ts +++ b/packages/pretty-format/src/plugins/ReactElement.ts @@ -58,14 +58,14 @@ const getType = (element: any) => { const functionName = type.render.displayName || type.render.name || ''; - return functionName !== '' ? `ForwardRef(${functionName})` : 'ForwardRef'; + return functionName === '' ? 'ForwardRef' : `ForwardRef(${functionName})`; } if (ReactIs.isMemo(element)) { const functionName = type.displayName || type.type.displayName || type.type.name || ''; - return functionName !== '' ? `Memo(${functionName})` : 'Memo'; + return functionName === '' ? 'Memo' : `Memo(${functionName})`; } } return 'UNDEFINED'; diff --git a/packages/pretty-format/src/plugins/lib/markup.ts b/packages/pretty-format/src/plugins/lib/markup.ts index 923c6f839649..ce30921d6205 100644 --- a/packages/pretty-format/src/plugins/lib/markup.ts +++ b/packages/pretty-format/src/plugins/lib/markup.ts @@ -26,7 +26,7 @@ export const printProps = ( let printed = printer(value, config, indentationNext, depth, refs); if (typeof value !== 'string') { - if (printed.indexOf('\n') !== -1) { + if (printed.includes('\n')) { printed = config.spacingOuter + indentationNext + diff --git a/packages/test-globals/package.json b/packages/test-globals/package.json index abac51998540..720062e2d994 100644 --- a/packages/test-globals/package.json +++ b/packages/test-globals/package.json @@ -18,6 +18,6 @@ "jest-mock": "workspace:^" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } } diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index b76b9b58f291..4239cd8439c1 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -24,6 +24,6 @@ "@types/semver": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } } diff --git a/scripts/build.mjs b/scripts/build.mjs index b0494d20bf16..804185c1d257 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -149,7 +149,7 @@ function buildFile(file, silent) { const files = process.argv.slice(2); -if (files.length) { +if (files.length > 0) { files.forEach(file => buildFile(file)); } else { const packages = getPackages(); diff --git a/scripts/buildTs.mjs b/scripts/buildTs.mjs index 674e4dac4f34..4580c85390dd 100644 --- a/scripts/buildTs.mjs +++ b/scripts/buildTs.mjs @@ -43,8 +43,11 @@ packagesWithTs.forEach(({packageDir, pkg}) => { const jestDependenciesOfPackage = Object.keys(pkg.dependencies || {}) .concat(Object.keys(pkg.devDependencies || {})) - .filter(dep => workspacesWithTs.has(dep)) .filter(dep => { + if (!workspacesWithTs.has(dep)) { + return false; + } + // nothing should depend on these if (dep === 'jest-circus' || dep === 'jest-jasmine2') { return false; @@ -116,9 +119,10 @@ packagesWithTs.forEach(({packageDir, pkg}) => { const tsConfig = JSON.parse( stripJsonComments(fs.readFileSync(tsConfigPath, 'utf8')), ); - const references = tsConfig.references.map(({path}) => path); - return references.some(reference => /test-utils$/.test(reference)); + return tsConfig.references.some( + ({path}) => path && path.endsWith('test-utils'), + ); }); if (hasJestTestUtils && testUtilsReferences.length === 0) { diff --git a/scripts/lintTs.mjs b/scripts/lintTs.mjs index 11caec1c8f0b..a7e1a3d47a81 100644 --- a/scripts/lintTs.mjs +++ b/scripts/lintTs.mjs @@ -23,37 +23,51 @@ const cpus = Math.max( const mutex = pLimit(cpus); -const fix = process.argv.slice(2).some(arg => arg === '--fix'); +const fix = process.argv.slice(2).includes('--fix'); const monorepoRoot = path.resolve(url.fileURLToPath(import.meta.url), '../..'); // TODO: remove this list at some point and run against all packages -const packagesToTest = [ - 'babel-jest', - 'babel-plugin-jest-hoist', - 'diff-sequences', - 'jest', - 'jest-changed-files', - 'jest-console', - 'jest-docblock', - 'jest-environment', - 'jest-globals', - 'jest-resolve-dependencies', - 'jest-schemas', - 'jest-source-map', - 'jest-test-result', - 'jest-test-sequencer', - 'jest-transform', - 'jest-types', - 'jest-watcher', - 'test-globals', - 'test-utils', +const packagesNotToTest = [ + 'expect', + 'expect-utils', + 'jest-circus', + 'jest-cli', + 'jest-config', + 'jest-core', + 'jest-create-cache-key-function', + 'jest-diff', + 'jest-each', + 'jest-environment-jsdom', + 'jest-environment-node', + 'jest-fake-timers', + 'jest-get-type', + 'jest-haste-map', + 'jest-jasmine2', + 'jest-leak-detector', + 'jest-matcher-utils', + 'jest-message-util', + 'jest-mock', + 'jest-phabricator', + 'jest-regex-util', + 'jest-repl', + 'jest-reporters', + 'jest-resolve', + 'jest-runner', + 'jest-runtime', + 'jest-snapshot', + 'jest-util', + 'jest-validate', + 'jest-worker', + 'pretty-format', ]; const packagesWithTs = getPackagesWithTsConfig() .map(({packageDir}) => packageDir) - .concat(path.resolve(monorepoRoot, 'e2e')) - .filter(packageDir => packagesToTest.some(pkg => packageDir.endsWith(pkg))); + .filter( + packageDir => !packagesNotToTest.some(pkg => packageDir.endsWith(pkg)), + ); +// .concat(path.resolve(monorepoRoot, 'e2e')); const allLintResults = []; diff --git a/scripts/verifyPnP.mjs b/scripts/verifyPnP.mjs index 6ee16cc3db03..31ace2088a11 100644 --- a/scripts/verifyPnP.mjs +++ b/scripts/verifyPnP.mjs @@ -52,21 +52,21 @@ try { fs.writeFileSync( path.join(cwd, 'jsdom.test.js'), dedent` - /* - * @jest-environment jsdom - */ + /* + * @jest-environment jsdom + */ - test('dummy', () => { - expect(window).toBeDefined(); - }); + test('dummy', () => { + expect(window).toBeDefined(); + }); `, ); fs.writeFileSync( path.join(cwd, 'node.test.js'), dedent` - test('dummy', () => { - expect(typeof window).toBe('undefined'); - }); + test('dummy', () => { + expect(typeof window).toBe('undefined'); + }); `, ); execa.sync('yarn', ['link', '--private', '--all', rootDirectory], { diff --git a/scripts/watch.mjs b/scripts/watch.mjs index 9c82e3019c58..7d834f0d3621 100644 --- a/scripts/watch.mjs +++ b/scripts/watch.mjs @@ -72,7 +72,7 @@ chokidar setInterval(() => { const files = Array.from(filesToBuild.keys()); - if (files.length) { + if (files.length > 0) { filesToBuild = new Map(); try { execSync(`${BUILD_CMD} ${files.join(' ')}`, {stdio: [0, 1, 2]}); diff --git a/website/package.json b/website/package.json index 5597449e68a2..ec01543f4eb4 100644 --- a/website/package.json +++ b/website/package.json @@ -32,11 +32,11 @@ ] }, "dependencies": { - "@docusaurus/core": "0.0.0-5658", - "@docusaurus/plugin-client-redirects": "0.0.0-5658", - "@docusaurus/plugin-pwa": "0.0.0-5658", - "@docusaurus/preset-classic": "0.0.0-5658", - "@docusaurus/remark-plugin-npm2yarn": "0.0.0-5658", + "@docusaurus/core": "^3.0.0-beta.0", + "@docusaurus/plugin-client-redirects": "3.0.0-beta.0", + "@docusaurus/plugin-pwa": "3.0.0-beta.0", + "@docusaurus/preset-classic": "3.0.0-beta.0", + "@docusaurus/remark-plugin-npm2yarn": "3.0.0-beta.0", "clsx": "^2.0.0", "docusaurus-remark-plugin-tab-blocks": "^2.0.0-beta", "react": "^18.2.0", @@ -48,8 +48,8 @@ "devDependencies": { "@babel/core": "^7.11.6", "@crowdin/cli": "^3.5.2", - "@docusaurus/module-type-aliases": "0.0.0-5658", - "@docusaurus/tsconfig": "0.0.0-5658", + "@docusaurus/module-type-aliases": "3.0.0-beta.0", + "@docusaurus/tsconfig": "3.0.0-beta.0", "@types/react": "^18.2.21", "graphql": "^16.3.0", "graphql-request": "^6.0.0", diff --git a/website/src/components/v1/Container.js b/website/src/components/v1/Container.js index c96a9caa7298..660f7b01a9ec 100644 --- a/website/src/components/v1/Container.js +++ b/website/src/components/v1/Container.js @@ -13,11 +13,11 @@ export default function Container(props) { darkBackground: props.background === 'dark', highlightBackground: props.background === 'highlight', lightBackground: props.background === 'light', - paddingAll: props.padding.indexOf('all') >= 0, - paddingBottom: props.padding.indexOf('bottom') >= 0, - paddingLeft: props.padding.indexOf('left') >= 0, - paddingRight: props.padding.indexOf('right') >= 0, - paddingTop: props.padding.indexOf('top') >= 0, + paddingAll: props.padding.includes('all'), + paddingBottom: props.padding.includes('bottom'), + paddingLeft: props.padding.includes('left'), + paddingRight: props.padding.includes('right'), + paddingTop: props.padding.includes('top'), }); let wrappedChildren; diff --git a/website/src/pages/animations/_landingAnimation.js b/website/src/pages/animations/_landingAnimation.js index b673c38213bb..fcdab2783baa 100644 --- a/website/src/pages/animations/_landingAnimation.js +++ b/website/src/pages/animations/_landingAnimation.js @@ -35,8 +35,7 @@ export function setupLandingAnimation() { const results = []; const timeouts = []; - function resolveRun(card, index, minTime) { - minTime = minTime || 500; + function resolveRun(card, index, minTime = 500) { setTimeout(() => { if (index === 2) { results[index] = null; diff --git a/website/versioned_docs/version-29.4/Configuration.md b/website/versioned_docs/version-29.4/Configuration.md index eee704668bda..74387886377f 100644 --- a/website/versioned_docs/version-29.4/Configuration.md +++ b/website/versioned_docs/version-29.4/Configuration.md @@ -1668,14 +1668,14 @@ test('does not show prototypes for object and array inline', () => { array: [{hello: 'Danger'}], }; expect(object).toMatchInlineSnapshot(` -{ - "array": [ { - "hello": "Danger", - }, - ], -} - `); + "array": [ + { + "hello": "Danger", + }, + ], + } + `); }); ``` diff --git a/website/versioned_docs/version-29.4/ExpectAPI.md b/website/versioned_docs/version-29.4/ExpectAPI.md index 46b2c361585e..3596d28d5588 100644 --- a/website/versioned_docs/version-29.4/ExpectAPI.md +++ b/website/versioned_docs/version-29.4/ExpectAPI.md @@ -1186,10 +1186,10 @@ function areVolumesEqual(a, b) { if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } } @@ -1243,10 +1243,10 @@ function areVolumesEqual(a: unknown, b: unknown): boolean | undefined { if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } } @@ -1297,10 +1297,10 @@ function areAuthorEqual(a, b) { if (isAAuthor && isBAuthor) { // Authors are equal if they have the same name return a.name === b.name; - } else if (isAAuthor !== isBAuthor) { - return false; - } else { + } else if (isAAuthor === isBAuthor) { return undefined; + } else { + return false; } } @@ -1315,10 +1315,10 @@ function areBooksEqual(a, b, customTesters) { return ( a.name === b.name && this.equals(a.authors, b.authors, customTesters) ); - } else if (isABook !== isBBook) { - return false; - } else { + } else if (isABook === isBBook) { return undefined; + } else { + return false; } } diff --git a/website/versioned_docs/version-29.4/SnapshotTesting.md b/website/versioned_docs/version-29.4/SnapshotTesting.md index 3a58dbc0a347..c21da98103a7 100644 --- a/website/versioned_docs/version-29.4/SnapshotTesting.md +++ b/website/versioned_docs/version-29.4/SnapshotTesting.md @@ -127,15 +127,15 @@ it('renders correctly', () => { .create(Example Site) .toJSON(); expect(tree).toMatchInlineSnapshot(` - - Example Site - -`); + + Example Site + + `); }); ``` diff --git a/website/versioned_docs/version-29.5/Configuration.md b/website/versioned_docs/version-29.5/Configuration.md index fcd772627605..632fe800cd5a 100644 --- a/website/versioned_docs/version-29.5/Configuration.md +++ b/website/versioned_docs/version-29.5/Configuration.md @@ -1703,14 +1703,14 @@ test('does not show prototypes for object and array inline', () => { array: [{hello: 'Danger'}], }; expect(object).toMatchInlineSnapshot(` -{ - "array": [ { - "hello": "Danger", - }, - ], -} - `); + "array": [ + { + "hello": "Danger", + }, + ], + } + `); }); ``` diff --git a/website/versioned_docs/version-29.5/ExpectAPI.md b/website/versioned_docs/version-29.5/ExpectAPI.md index 46b2c361585e..3596d28d5588 100644 --- a/website/versioned_docs/version-29.5/ExpectAPI.md +++ b/website/versioned_docs/version-29.5/ExpectAPI.md @@ -1186,10 +1186,10 @@ function areVolumesEqual(a, b) { if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } } @@ -1243,10 +1243,10 @@ function areVolumesEqual(a: unknown, b: unknown): boolean | undefined { if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } } @@ -1297,10 +1297,10 @@ function areAuthorEqual(a, b) { if (isAAuthor && isBAuthor) { // Authors are equal if they have the same name return a.name === b.name; - } else if (isAAuthor !== isBAuthor) { - return false; - } else { + } else if (isAAuthor === isBAuthor) { return undefined; + } else { + return false; } } @@ -1315,10 +1315,10 @@ function areBooksEqual(a, b, customTesters) { return ( a.name === b.name && this.equals(a.authors, b.authors, customTesters) ); - } else if (isABook !== isBBook) { - return false; - } else { + } else if (isABook === isBBook) { return undefined; + } else { + return false; } } diff --git a/website/versioned_docs/version-29.5/SnapshotTesting.md b/website/versioned_docs/version-29.5/SnapshotTesting.md index 3a58dbc0a347..c21da98103a7 100644 --- a/website/versioned_docs/version-29.5/SnapshotTesting.md +++ b/website/versioned_docs/version-29.5/SnapshotTesting.md @@ -127,15 +127,15 @@ it('renders correctly', () => { .create(Example Site) .toJSON(); expect(tree).toMatchInlineSnapshot(` - - Example Site - -`); + + Example Site + + `); }); ``` diff --git a/website/versioned_docs/version-29.6/Configuration.md b/website/versioned_docs/version-29.6/Configuration.md index acb52e2746a7..4a95c468b3f5 100644 --- a/website/versioned_docs/version-29.6/Configuration.md +++ b/website/versioned_docs/version-29.6/Configuration.md @@ -1739,14 +1739,14 @@ test('does not show prototypes for object and array inline', () => { array: [{hello: 'Danger'}], }; expect(object).toMatchInlineSnapshot(` -{ - "array": [ { - "hello": "Danger", - }, - ], -} - `); + "array": [ + { + "hello": "Danger", + }, + ], + } + `); }); ``` diff --git a/website/versioned_docs/version-29.6/ExpectAPI.md b/website/versioned_docs/version-29.6/ExpectAPI.md index 46b2c361585e..3596d28d5588 100644 --- a/website/versioned_docs/version-29.6/ExpectAPI.md +++ b/website/versioned_docs/version-29.6/ExpectAPI.md @@ -1186,10 +1186,10 @@ function areVolumesEqual(a, b) { if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } } @@ -1243,10 +1243,10 @@ function areVolumesEqual(a: unknown, b: unknown): boolean | undefined { if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } } @@ -1297,10 +1297,10 @@ function areAuthorEqual(a, b) { if (isAAuthor && isBAuthor) { // Authors are equal if they have the same name return a.name === b.name; - } else if (isAAuthor !== isBAuthor) { - return false; - } else { + } else if (isAAuthor === isBAuthor) { return undefined; + } else { + return false; } } @@ -1315,10 +1315,10 @@ function areBooksEqual(a, b, customTesters) { return ( a.name === b.name && this.equals(a.authors, b.authors, customTesters) ); - } else if (isABook !== isBBook) { - return false; - } else { + } else if (isABook === isBBook) { return undefined; + } else { + return false; } } diff --git a/website/versioned_docs/version-29.6/SnapshotTesting.md b/website/versioned_docs/version-29.6/SnapshotTesting.md index 3a58dbc0a347..c21da98103a7 100644 --- a/website/versioned_docs/version-29.6/SnapshotTesting.md +++ b/website/versioned_docs/version-29.6/SnapshotTesting.md @@ -127,15 +127,15 @@ it('renders correctly', () => { .create(Example Site) .toJSON(); expect(tree).toMatchInlineSnapshot(` - - Example Site - -`); + + Example Site + + `); }); ``` diff --git a/website/versioned_docs/version-29.7/Configuration.md b/website/versioned_docs/version-29.7/Configuration.md index acb52e2746a7..4a95c468b3f5 100644 --- a/website/versioned_docs/version-29.7/Configuration.md +++ b/website/versioned_docs/version-29.7/Configuration.md @@ -1739,14 +1739,14 @@ test('does not show prototypes for object and array inline', () => { array: [{hello: 'Danger'}], }; expect(object).toMatchInlineSnapshot(` -{ - "array": [ { - "hello": "Danger", - }, - ], -} - `); + "array": [ + { + "hello": "Danger", + }, + ], + } + `); }); ``` diff --git a/website/versioned_docs/version-29.7/ExpectAPI.md b/website/versioned_docs/version-29.7/ExpectAPI.md index 46b2c361585e..3596d28d5588 100644 --- a/website/versioned_docs/version-29.7/ExpectAPI.md +++ b/website/versioned_docs/version-29.7/ExpectAPI.md @@ -1186,10 +1186,10 @@ function areVolumesEqual(a, b) { if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } } @@ -1243,10 +1243,10 @@ function areVolumesEqual(a: unknown, b: unknown): boolean | undefined { if (isAVolume && isBVolume) { return a.equals(b); - } else if (isAVolume !== isBVolume) { - return false; - } else { + } else if (isAVolume === isBVolume) { return undefined; + } else { + return false; } } @@ -1297,10 +1297,10 @@ function areAuthorEqual(a, b) { if (isAAuthor && isBAuthor) { // Authors are equal if they have the same name return a.name === b.name; - } else if (isAAuthor !== isBAuthor) { - return false; - } else { + } else if (isAAuthor === isBAuthor) { return undefined; + } else { + return false; } } @@ -1315,10 +1315,10 @@ function areBooksEqual(a, b, customTesters) { return ( a.name === b.name && this.equals(a.authors, b.authors, customTesters) ); - } else if (isABook !== isBBook) { - return false; - } else { + } else if (isABook === isBBook) { return undefined; + } else { + return false; } } diff --git a/website/versioned_docs/version-29.7/SnapshotTesting.md b/website/versioned_docs/version-29.7/SnapshotTesting.md index 3a58dbc0a347..c21da98103a7 100644 --- a/website/versioned_docs/version-29.7/SnapshotTesting.md +++ b/website/versioned_docs/version-29.7/SnapshotTesting.md @@ -127,15 +127,15 @@ it('renders correctly', () => { .create(Example Site) .toJSON(); expect(tree).toMatchInlineSnapshot(` - - Example Site - -`); + + Example Site + + `); }); ``` diff --git a/yarn.lock b/yarn.lock index 0c0e57fcab75..65694401a3c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -544,10 +544,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-validator-identifier@npm:7.22.5" - checksum: 7f0f30113474a28298c12161763b49de5018732290ca4de13cdaefd4fd0d635a6fe3f6686c37a02905fb1e64f21a5ee2b55140cf7b070e729f1bd66866506aea +"@babel/helper-validator-identifier@npm:^7.19.1, @babel/helper-validator-identifier@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/helper-validator-identifier@npm:7.22.15" + checksum: eb0bee4bda664c0959924bc1ad5611eacfce806f46612202dd164fef1df8fef1a11682a1e7615288987100e9fb304982b6e2a4ff07ffe842ab8765b95ed1118c languageName: node linkType: hard @@ -2022,9 +2022,9 @@ __metadata: languageName: node linkType: hard -"@docusaurus/core@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/core@npm:0.0.0-5658" +"@docusaurus/core@npm:3.0.0-beta.0, @docusaurus/core@npm:^3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/core@npm:3.0.0-beta.0" dependencies: "@babel/core": ^7.22.9 "@babel/generator": ^7.22.9 @@ -2036,13 +2036,13 @@ __metadata: "@babel/runtime": ^7.22.6 "@babel/runtime-corejs3": ^7.22.6 "@babel/traverse": ^7.22.8 - "@docusaurus/cssnano-preset": 0.0.0-5658 - "@docusaurus/logger": 0.0.0-5658 - "@docusaurus/mdx-loader": 0.0.0-5658 + "@docusaurus/cssnano-preset": 3.0.0-beta.0 + "@docusaurus/logger": 3.0.0-beta.0 + "@docusaurus/mdx-loader": 3.0.0-beta.0 "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-common": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-common": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 "@slorber/static-site-generator-webpack-plugin": ^4.0.7 "@svgr/webpack": ^6.5.1 autoprefixer: ^10.4.14 @@ -2102,41 +2102,41 @@ __metadata: react-dom: ^18.0.0 bin: docusaurus: bin/docusaurus.mjs - checksum: ca0a9cdaba4565dee15a4ee0ecb2edb956a98948de3883efdf9924328104b3c4e4b7b3a151f09467edd13c96f6df3f06e0141babc71f1f51f5c624fe1e8f023b + checksum: 1f85d5e6d36133bd0000dbed38ce2eefa3fa7391ad7404aa2585b7f549e8f1b1ddaf4fff827989b52000e998b245da0b4d3ba9fd9ba502a2c7e2d1e3724969c5 languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/cssnano-preset@npm:0.0.0-5658" +"@docusaurus/cssnano-preset@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/cssnano-preset@npm:3.0.0-beta.0" dependencies: cssnano-preset-advanced: ^5.3.10 postcss: ^8.4.26 postcss-sort-media-queries: ^4.4.1 tslib: ^2.6.0 - checksum: b0ec956748c7fa1df23ee752ad76aeefdc8d4253027ba64f2a9c0de7f7eee1a3eefea827d14dacf18274b4cdc4a162919aa6c72e92c5d080758d4fe48aa51d00 + checksum: 010f54e69fc40f7258706a0ef6bb961d6369eb8289cec06e969195918a995cf9d92c55a95528fab1eb6cf1ca5e2f1b03b9c870990cf95a37497fde860d021574 languageName: node linkType: hard -"@docusaurus/logger@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/logger@npm:0.0.0-5658" +"@docusaurus/logger@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/logger@npm:3.0.0-beta.0" dependencies: chalk: ^4.1.2 tslib: ^2.6.0 - checksum: 689bf09c76a440cb5ed3add22f9ec95732c52c22d51d45d1f5e885346e92f403c32cb3dc0232790ca732719bcce1543c672f686a20035a7db86679bc4e89dc37 + checksum: 135000691a33f88964e2fadb76e3a0f4351875b95ca3781f0729b2bfddb0444f8fb75f91c2c1863ecb21f302f8344fa37de55c1c2b124a2fe537fc0f29f2b09c languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/mdx-loader@npm:0.0.0-5658" +"@docusaurus/mdx-loader@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/mdx-loader@npm:3.0.0-beta.0" dependencies: "@babel/parser": ^7.22.7 "@babel/traverse": ^7.22.8 - "@docusaurus/logger": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/logger": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 "@mdx-js/mdx": ^2.1.5 "@slorber/remark-comment": ^1.0.0 escape-html: ^1.0.3 @@ -2160,16 +2160,16 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 17fa7a20e1c1a4cd0f2ef7c2c333e139cd361e9dbd9676fc054ff5e47ef53652200d162b03fd4fa4ea9613f7118b74f40fe05cef8169652793d1be70ed6ec8a5 + checksum: 994314af4972f27dc1a49a4543839897c6c1ab0b09268034af98a4a2f142b3235223e88bfa8f151fa3fae6db51216349768f31f5c2244c878a2db917bb925030 languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/module-type-aliases@npm:0.0.0-5658" +"@docusaurus/module-type-aliases@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/module-type-aliases@npm:3.0.0-beta.0" dependencies: "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/types": 0.0.0-5658 + "@docusaurus/types": 3.0.0-beta.0 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -2179,19 +2179,19 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: a6c7e5527fdda5ac56db3d20156904358fc6e02a2b06b07be55bf5f223e29e8bd8e35ead13395e467790f168e16204882a3422d914157219388e8c72fdc337f6 + checksum: 2a195e55bb1c9e5d29f5c52bd92e13379e23da354f4b5c8875b0aedfc3252319d0cbeac559633f89a9eb015a8471ffb468f2de90082e41dfa09af7cb5e63f94f languageName: node linkType: hard -"@docusaurus/plugin-client-redirects@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/plugin-client-redirects@npm:0.0.0-5658" +"@docusaurus/plugin-client-redirects@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/plugin-client-redirects@npm:3.0.0-beta.0" dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/logger": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-common": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/logger": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-common": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 eta: ^2.2.0 fs-extra: ^11.1.1 lodash: ^4.17.21 @@ -2199,21 +2199,21 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 19a7d9bb89d7e6aa141db3848e1f70e2f2f5dc40adf77634352840d893b30762a1cea675bfaa4ed514f883025d8caabc43c09981f3c35eb88572d3b546eb646c + checksum: d7b353be0c1e57b1c95c2e0d7dfaa53071e53c3a12490614e9e847b7849995ae2c8324529c88851f8280960d3eaf8246bcaf0647be6143b3fc1232fa49779f46 languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/plugin-content-blog@npm:0.0.0-5658" +"@docusaurus/plugin-content-blog@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/plugin-content-blog@npm:3.0.0-beta.0" dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/logger": 0.0.0-5658 - "@docusaurus/mdx-loader": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-common": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/logger": 3.0.0-beta.0 + "@docusaurus/mdx-loader": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-common": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 cheerio: ^1.0.0-rc.12 feed: ^4.2.2 fs-extra: ^11.1.1 @@ -2227,21 +2227,21 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 0bd7890e8782268819ddf695d6f12cd48a2b8a3e775d68e66f5d2083e727b5b863cb6ad779e6b88b0a2b93821f49a2dd137011c28716112eab0eed4577d429e2 + checksum: 30d485f7482e1e6102546b44475a5d735ba00877b69abb924d360e11402ea6925b3366b103e4bdbe22990c9a4d5a553dfa5536dc1c5d4fe7fcdea10b840db635 languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/plugin-content-docs@npm:0.0.0-5658" +"@docusaurus/plugin-content-docs@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/plugin-content-docs@npm:3.0.0-beta.0" dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/logger": 0.0.0-5658 - "@docusaurus/mdx-loader": 0.0.0-5658 - "@docusaurus/module-type-aliases": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/logger": 3.0.0-beta.0 + "@docusaurus/mdx-loader": 3.0.0-beta.0 + "@docusaurus/module-type-aliases": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 "@types/react-router-config": ^5.0.7 combine-promises: ^1.1.0 fs-extra: ^11.1.1 @@ -2254,104 +2254,104 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: bc8a6ed0fd1d7c53a8f86d8494da31479f2c2cf84f12ab79fe07a15143ced9b07351dabf85d6bca06f24654b3f1e99d6edf735efb6314a584b4cc2a03e05e695 + checksum: 9c1ebf1bc091a52231aaa1e3cf2456ce4fb1e085ba51c7c7aff9284581eb3bcada9bdf6eca0ddbc1d1501a812b4819cb050096715310656892e7f6f57d4c59a4 languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/plugin-content-pages@npm:0.0.0-5658" +"@docusaurus/plugin-content-pages@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/plugin-content-pages@npm:3.0.0-beta.0" dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/mdx-loader": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/mdx-loader": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 fs-extra: ^11.1.1 tslib: ^2.6.0 webpack: ^5.88.1 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: ef0c5bd3c2702266100f07e1adae4be45156a4fb75a249dde2c21fb8bb007f1b3a75f64d6f0c14df1c29417af4d8f0a59ec7dff8e6ba981cce99d35e43d6ca0e + checksum: 68b77bae49eaac3343776a16812e50a77f799424ecb19b7e14266cb8f1554a07df64cc9ed692250863c8026ad18556ecc8ac3c8a7cc26722a3d30274a70430be languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/plugin-debug@npm:0.0.0-5658" +"@docusaurus/plugin-debug@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/plugin-debug@npm:3.0.0-beta.0" dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 "@microlink/react-json-view": ^1.22.2 fs-extra: ^11.1.1 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 9d91448b8ae3794efa8a4a38be24e2b83b45bc6d993a452f0ea799391b85520ddf79afd901d0253798038edc476a67ff593690b01bedfae3e88e5bd0f78c9611 + checksum: a1b5084dd1c44f5bb90ed598e707a28ec98de1d02cef1ff4f1be08d41c53527ac5e8d8a6deccc52d63ddeee43a6b5abbe84981b031c67c9e8431a7d4b5426782 languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/plugin-google-analytics@npm:0.0.0-5658" +"@docusaurus/plugin-google-analytics@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/plugin-google-analytics@npm:3.0.0-beta.0" dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 7ba81b8ce2c0ab50c100eae37c91a29569b6316893563422f90fce49229659aad7f006364dc72cfd387cf8c196411c3f6ad8112a1e55040cc641fcfd66b2b7a5 + checksum: a30672280d72a0f7dd53e115e619ea0c11e6acc1efea62dec7ca92155ec7e3aa12231868eaea34c8a35810d9d712b7e48a890e7ea9d8a7f3864b26e015453b15 languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/plugin-google-gtag@npm:0.0.0-5658" +"@docusaurus/plugin-google-gtag@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/plugin-google-gtag@npm:3.0.0-beta.0" dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 "@types/gtag.js": ^0.0.12 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 9c052ff6af252df81612af98012175c81a9997d640c47063e911ba8434bed625ece28e4b8e4bc239986ed85b7fa00ea44d77e8b6a2c408dcbbedf14c4acb08e2 + checksum: 327fe291dbf53f7e315e715d9a1c1c57e2b87a7314e56f9e4e15d55621267405535f5f969e2be73fe0b3f8bf63fae72a3a94be372520afb677c3138634db945b languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/plugin-google-tag-manager@npm:0.0.0-5658" +"@docusaurus/plugin-google-tag-manager@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/plugin-google-tag-manager@npm:3.0.0-beta.0" dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: e102d6d3016ee807daa576ecc10e8758d1ecc868214206a543926fbb44e6081ad13ee87e6dc42a99725c28a346b6765ec65839cc5585b731f4a5c3a230c96faf + checksum: 12c4bcd2a7ec7b0b99ab8b823add17e6d64bdef27476ebb16633bf2f2185e670b6ee0f23d8e0543b84ff521a8821b2fa284147b4ac5f4ee5c915724700dc165e languageName: node linkType: hard -"@docusaurus/plugin-pwa@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/plugin-pwa@npm:0.0.0-5658" +"@docusaurus/plugin-pwa@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/plugin-pwa@npm:3.0.0-beta.0" dependencies: "@babel/core": ^7.22.9 "@babel/preset-env": ^7.22.9 - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/theme-common": 0.0.0-5658 - "@docusaurus/theme-translations": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/theme-common": 3.0.0-beta.0 + "@docusaurus/theme-translations": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 babel-loader: ^9.1.3 clsx: ^1.2.1 core-js: ^3.31.1 @@ -2366,51 +2366,51 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: f75dbd1a502117fbeb27b8b52f0e7dd71f5db15d1a283c5d3b0f32a9f568d8a8501d2d57ff34cfdc253868f1ed361ca09f268fd6df87c39e851b2050123bd998 + checksum: 208883cb1a40c5b93e085967260bc2714367d9287fe3364994b21b83b5cd7c1f68183df1d81f2d0e572f929b85decb0bf06b599103a2a5f233d1baf0f772490e languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/plugin-sitemap@npm:0.0.0-5658" +"@docusaurus/plugin-sitemap@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/plugin-sitemap@npm:3.0.0-beta.0" dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/logger": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-common": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/logger": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-common": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 fs-extra: ^11.1.1 sitemap: ^7.1.1 tslib: ^2.6.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 090ee64f1b66f6737208158756067d9086060550f51aea76acc50459dffb0c34c9a4ebb2798f66e7a375197421488f30aec39ebb8bf7d9a7e3ca5dba10832e06 + checksum: f8a583d3d9ad6a4fdeadd39dbc371e1a86e93c29926cc2ea932cdf902a7bca3a14338ffa5cfb5292d01def4b2e407434fe17f5253568136bbe8bf3ea4a135179 languageName: node linkType: hard -"@docusaurus/preset-classic@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/preset-classic@npm:0.0.0-5658" +"@docusaurus/preset-classic@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/preset-classic@npm:3.0.0-beta.0" dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/plugin-content-blog": 0.0.0-5658 - "@docusaurus/plugin-content-docs": 0.0.0-5658 - "@docusaurus/plugin-content-pages": 0.0.0-5658 - "@docusaurus/plugin-debug": 0.0.0-5658 - "@docusaurus/plugin-google-analytics": 0.0.0-5658 - "@docusaurus/plugin-google-gtag": 0.0.0-5658 - "@docusaurus/plugin-google-tag-manager": 0.0.0-5658 - "@docusaurus/plugin-sitemap": 0.0.0-5658 - "@docusaurus/theme-classic": 0.0.0-5658 - "@docusaurus/theme-common": 0.0.0-5658 - "@docusaurus/theme-search-algolia": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/plugin-content-blog": 3.0.0-beta.0 + "@docusaurus/plugin-content-docs": 3.0.0-beta.0 + "@docusaurus/plugin-content-pages": 3.0.0-beta.0 + "@docusaurus/plugin-debug": 3.0.0-beta.0 + "@docusaurus/plugin-google-analytics": 3.0.0-beta.0 + "@docusaurus/plugin-google-gtag": 3.0.0-beta.0 + "@docusaurus/plugin-google-tag-manager": 3.0.0-beta.0 + "@docusaurus/plugin-sitemap": 3.0.0-beta.0 + "@docusaurus/theme-classic": 3.0.0-beta.0 + "@docusaurus/theme-common": 3.0.0-beta.0 + "@docusaurus/theme-search-algolia": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 3adf354ce29d803ec86fa98f737b500deb142db5dd3cc96ff24fb429089dbe28bebf56f225fc718d821e267a928942625cb9848c696c8f7b0fb8852ba83ff25e + checksum: f6e0751f6e14885e16efc08e6e29fcad0c9dd01d32cad95f327a7279f582c2b4305713fd30fa351adb6bb86ae0684f4c1648f82924bfd3af892a401e48926b5c languageName: node linkType: hard @@ -2426,35 +2426,35 @@ __metadata: languageName: node linkType: hard -"@docusaurus/remark-plugin-npm2yarn@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/remark-plugin-npm2yarn@npm:0.0.0-5658" +"@docusaurus/remark-plugin-npm2yarn@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/remark-plugin-npm2yarn@npm:3.0.0-beta.0" dependencies: mdast-util-mdx: ^2.0.0 npm-to-yarn: ^2.0.0 tslib: ^2.6.0 unified: ^10.1.2 unist-util-visit: ^2.0.3 - checksum: 157c84ce7dc82e338ebf798c4e378937f99f5de4e6ba03cdfba658cf2d6217bed886710cad3ba5a0d0465e1c598eff2be521a08e6e07676e1a4f7ae8fa1b79a6 - languageName: node - linkType: hard - -"@docusaurus/theme-classic@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/theme-classic@npm:0.0.0-5658" - dependencies: - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/mdx-loader": 0.0.0-5658 - "@docusaurus/module-type-aliases": 0.0.0-5658 - "@docusaurus/plugin-content-blog": 0.0.0-5658 - "@docusaurus/plugin-content-docs": 0.0.0-5658 - "@docusaurus/plugin-content-pages": 0.0.0-5658 - "@docusaurus/theme-common": 0.0.0-5658 - "@docusaurus/theme-translations": 0.0.0-5658 - "@docusaurus/types": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-common": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + checksum: 7a81e7059fcac6188699cc79fd1772af7328a0eb6c35f176973548acb86e7d2c56d0b782051a6fc4a5871a3c15445c01979ab09c9cd26765c87b0a42f6af80f8 + languageName: node + linkType: hard + +"@docusaurus/theme-classic@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/theme-classic@npm:3.0.0-beta.0" + dependencies: + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/mdx-loader": 3.0.0-beta.0 + "@docusaurus/module-type-aliases": 3.0.0-beta.0 + "@docusaurus/plugin-content-blog": 3.0.0-beta.0 + "@docusaurus/plugin-content-docs": 3.0.0-beta.0 + "@docusaurus/plugin-content-pages": 3.0.0-beta.0 + "@docusaurus/theme-common": 3.0.0-beta.0 + "@docusaurus/theme-translations": 3.0.0-beta.0 + "@docusaurus/types": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-common": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 "@mdx-js/react": ^2.1.5 clsx: ^1.2.1 copy-text-to-clipboard: ^3.2.0 @@ -2471,21 +2471,21 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: fafab7c32725fb50e70204eb32f716dedc42357a68c69c5915748f94bf2c924d1637a384afd50505568fe4cd90f853ad277b7e7644cea5a3ac8307e4c7dd36cf + checksum: 62c834ecc040d4fa7e0c7abd4453f51fa5fab4abf51394c13714f331d9a3c416f3dadbb17f498f5a89cd044aba194ebf3a5f7f936a505cf11e0cace5d9882387 languageName: node linkType: hard -"@docusaurus/theme-common@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/theme-common@npm:0.0.0-5658" +"@docusaurus/theme-common@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/theme-common@npm:3.0.0-beta.0" dependencies: - "@docusaurus/mdx-loader": 0.0.0-5658 - "@docusaurus/module-type-aliases": 0.0.0-5658 - "@docusaurus/plugin-content-blog": 0.0.0-5658 - "@docusaurus/plugin-content-docs": 0.0.0-5658 - "@docusaurus/plugin-content-pages": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-common": 0.0.0-5658 + "@docusaurus/mdx-loader": 3.0.0-beta.0 + "@docusaurus/module-type-aliases": 3.0.0-beta.0 + "@docusaurus/plugin-content-blog": 3.0.0-beta.0 + "@docusaurus/plugin-content-docs": 3.0.0-beta.0 + "@docusaurus/plugin-content-pages": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-common": 3.0.0-beta.0 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -2493,27 +2493,26 @@ __metadata: parse-numeric-range: ^1.3.0 prism-react-renderer: ^1.3.5 tslib: ^2.6.0 - use-sync-external-store: ^1.2.0 utility-types: ^3.10.0 peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 6f2175b5d53f5788f4ad91c9fd62cefec71167ce0777c93d72d40d9ff5a62040c4cebb5d0f5fb51b65e0d656674e463210434900e532725d5266f0ea61a31bfd + checksum: 4e376a825f53364dbdb6823d97e199cf2bab6982df0113041320ca589930381e911c9ec2e0eec48e7d79547d21152271cb33d348b7be4e8030910f8116d8de1c languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/theme-search-algolia@npm:0.0.0-5658" +"@docusaurus/theme-search-algolia@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/theme-search-algolia@npm:3.0.0-beta.0" dependencies: "@docsearch/react": ~3.3.3 - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/logger": 0.0.0-5658 - "@docusaurus/plugin-content-docs": 0.0.0-5658 - "@docusaurus/theme-common": 0.0.0-5658 - "@docusaurus/theme-translations": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 - "@docusaurus/utils-validation": 0.0.0-5658 + "@docusaurus/core": 3.0.0-beta.0 + "@docusaurus/logger": 3.0.0-beta.0 + "@docusaurus/plugin-content-docs": 3.0.0-beta.0 + "@docusaurus/theme-common": 3.0.0-beta.0 + "@docusaurus/theme-translations": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 + "@docusaurus/utils-validation": 3.0.0-beta.0 algoliasearch: ^4.18.0 algoliasearch-helper: ^3.13.3 clsx: ^1.2.1 @@ -2525,30 +2524,30 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 5047e5b445fc53b06fccfdff9698d0afbfd830f8f2cfc3be91017d000c5f60d439df12ebc41f2f1f242638595e78676a06ec9845f7fe068f85d134f61aa729d8 + checksum: 4230964c0cd102ec5f31c01a5fbdc7b35de21c798c2870846cf4ff9a2f02e8545a534bebe70115d3e390d7746a67843c652c64c23ea7dede10c6e1d71fca3e6c languageName: node linkType: hard -"@docusaurus/theme-translations@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/theme-translations@npm:0.0.0-5658" +"@docusaurus/theme-translations@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/theme-translations@npm:3.0.0-beta.0" dependencies: fs-extra: ^11.1.1 tslib: ^2.6.0 - checksum: 62c50ec102be3008d897e250817d1830d5fff5fbb0182c2dad482dfc4e5163ace9900b380d840b6df8cee9746fa3b5638baf8c12b93d0c56926f99869f0c7dc2 + checksum: cbedd0c07084646a6e867dfde43fb6b2128c80d4da77b29ced9e72335824ae6994e2f26985fa5d6c6aed578c44f9f42f882426340bfb9ac90feea648e370450e languageName: node linkType: hard -"@docusaurus/tsconfig@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/tsconfig@npm:0.0.0-5658" - checksum: 86c598e5933ce6b6cc08d5176ea54eb25c8e996a6a7013c2faacc166720632fc65ffc7ed6db9764ed03ce88e4be825abdcd638a14018f4e2e79c7f9d367f4fd7 +"@docusaurus/tsconfig@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/tsconfig@npm:3.0.0-beta.0" + checksum: 97410af622c5e4ded86107530b580999dfd59ce2d75b82a22d976db44586c3eea955675769fc4687ef546e7560133cb847d49fef0e8b913916cfde84820578c6 languageName: node linkType: hard -"@docusaurus/types@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/types@npm:0.0.0-5658" +"@docusaurus/types@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/types@npm:3.0.0-beta.0" dependencies: "@types/history": ^4.7.11 "@types/react": "*" @@ -2561,13 +2560,13 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 28341d2366e324419925e5ad40019f81b91a2fa921f8c07d71e7e52eaf8f31c384e1cae45e145bfaf82748256d698a82e32b9f522a4026c9923e707070ca1e9c + checksum: 91b8697d95e79829a4596ec18f659d96aa244dc13a1420d43efdb8dfc743597d973e313b7d1c7f7a5e5998933396b21366cf77c7fc42842f8390fd5267aa5ee5 languageName: node linkType: hard -"@docusaurus/utils-common@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/utils-common@npm:0.0.0-5658" +"@docusaurus/utils-common@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/utils-common@npm:3.0.0-beta.0" dependencies: tslib: ^2.6.0 peerDependencies: @@ -2575,28 +2574,28 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: f92e3680f3526f4dc39e871b3d3d6ea5339e6cc5f66e461bd6a27944b2dcf7f8536e4973129605024c9e86c813b40dbee7c24881a219f32cb65f060be6710153 + checksum: b4b0c84077b47a9b3949e7c2e1308c702df67f689659f8e3fb55f373d0964a38cf0a16a5cdda5df0a58b17b03d001a82d2798bd7fcce7f3a6e2b4c2c1de0fcb9 languageName: node linkType: hard -"@docusaurus/utils-validation@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/utils-validation@npm:0.0.0-5658" +"@docusaurus/utils-validation@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/utils-validation@npm:3.0.0-beta.0" dependencies: - "@docusaurus/logger": 0.0.0-5658 - "@docusaurus/utils": 0.0.0-5658 + "@docusaurus/logger": 3.0.0-beta.0 + "@docusaurus/utils": 3.0.0-beta.0 joi: ^17.9.2 js-yaml: ^4.1.0 tslib: ^2.6.0 - checksum: e3bfa06d3dcdd755c2598e995eb905f1185a33e2b34bfbbf9530b2950b30c434f7f045c3fde89f5b7b47563081b08e2545f411687cfcc1f7bf2babc8db87ac6f + checksum: 2f0544758459850aab2e0ea99610173d60c3e515984c73208b3c2d36a9357ca68c49d25672378bc23373675d3e13f6e26fc324316b2068b762a6f9d2db3158b0 languageName: node linkType: hard -"@docusaurus/utils@npm:0.0.0-5658": - version: 0.0.0-5658 - resolution: "@docusaurus/utils@npm:0.0.0-5658" +"@docusaurus/utils@npm:3.0.0-beta.0": + version: 3.0.0-beta.0 + resolution: "@docusaurus/utils@npm:3.0.0-beta.0" dependencies: - "@docusaurus/logger": 0.0.0-5658 + "@docusaurus/logger": 3.0.0-beta.0 "@svgr/webpack": ^6.5.1 escape-string-regexp: ^4.0.0 file-loader: ^6.2.0 @@ -2617,22 +2616,22 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 2c16dd32723142d04c2f1937a071d758a8fd0c3ab0cdeca4118d6a5f1482a014f76944e32f6bca8e4af44bc4a43c2f280ae3943eccec91f7a4c6c09de6804599 + checksum: c3117273acf3d25a82a40b4a3ba8ae964178f3ea83827cb1b2fb1c87011641364a34af2de6e5ebc50b4e740a2a8627d9b3a3dcdb28eccdab011f3b0440c9d13a languageName: node linkType: hard -"@es-joy/jsdoccomment@npm:~0.39.4": - version: 0.39.4 - resolution: "@es-joy/jsdoccomment@npm:0.39.4" +"@es-joy/jsdoccomment@npm:~0.40.1": + version: 0.40.1 + resolution: "@es-joy/jsdoccomment@npm:0.40.1" dependencies: - comment-parser: 1.3.1 + comment-parser: 1.4.0 esquery: ^1.5.0 jsdoc-type-pratt-parser: ~4.0.0 - checksum: efae229ae998840fdcb4faf44574bcc0a070e4aa6df69c01afedaeaddf6d2ea857a68b463df45f9437231201201f092402968c0c53c34e3c09842fef0da7f2d4 + checksum: 6098394cd97ad0532dde4f3171980e700e4199c231969311efd2362c2b5a4eefa9d59a0bc1fe513afbb5cc456ef7633491a2984d64252e7bd8ebe22489120610 languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0": +"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.2.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: @@ -2643,16 +2642,16 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.4.0": - version: 4.6.0 - resolution: "@eslint-community/regexpp@npm:4.6.0" - checksum: 7517bf490970bcc6be4d793b202ec5a8d525078dd817454b832669e79d6cdd3af25068563410b0c3d861891ccbf7e03626a575e6fec6a2eac7ae4fd5b0223e0f +"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": + version: 4.8.1 + resolution: "@eslint-community/regexpp@npm:4.8.1" + checksum: 82d62c845ef42b810f268cfdc84d803a2da01735fb52e902fd34bdc09f92464a094fd8e4802839874b000b2f73f67c972859e813ba705233515d3e954f234bf2 languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.1.0": - version: 2.1.0 - resolution: "@eslint/eslintrc@npm:2.1.0" +"@eslint/eslintrc@npm:^2.1.2": + version: 2.1.2 + resolution: "@eslint/eslintrc@npm:2.1.2" dependencies: ajv: ^6.12.4 debug: ^4.3.2 @@ -2663,14 +2662,14 @@ __metadata: js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: d5ed0adbe23f6571d8c9bb0ca6edf7618dc6aed4046aa56df7139f65ae7b578874e0d9c796df784c25bda648ceb754b6320277d828c8b004876d7443b8dc018c + checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 languageName: node linkType: hard -"@eslint/js@npm:8.44.0": - version: 8.44.0 - resolution: "@eslint/js@npm:8.44.0" - checksum: fc539583226a28f5677356e9f00d2789c34253f076643d2e32888250e509a4e13aafe0880cb2425139051de0f3a48d25bfc5afa96b7304f203b706c17340e3cf +"@eslint/js@npm:8.49.0": + version: 8.49.0 + resolution: "@eslint/js@npm:8.49.0" + checksum: a6601807c8aeeefe866926ad92ed98007c034a735af20ff709009e39ad1337474243d47908500a3bde04e37bfba16bcf1d3452417f962e1345bc8756edd6b830 languageName: node linkType: hard @@ -2717,14 +2716,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.10": - version: 0.11.10 - resolution: "@humanwhocodes/config-array@npm:0.11.10" +"@humanwhocodes/config-array@npm:^0.11.11": + version: 0.11.11 + resolution: "@humanwhocodes/config-array@npm:0.11.11" dependencies: "@humanwhocodes/object-schema": ^1.2.1 debug: ^4.1.1 minimatch: ^3.0.5 - checksum: 1b1302e2403d0e35bc43e66d67a2b36b0ad1119efc704b5faff68c41f791a052355b010fb2d27ef022670f550de24cd6d08d5ecf0821c16326b7dcd0ee5d5d8a + checksum: db84507375ab77b8ffdd24f498a5b49ad6b64391d30dd2ac56885501d03964d29637e05b1ed5aefa09d57ac667e28028bc22d2da872bfcd619652fbdb5f4ca19 languageName: node linkType: hard @@ -2939,7 +2938,7 @@ __metadata: "@types/babel__core": ^7.1.14 "@types/babel__generator": ^7.0.0 "@types/babel__template": ^7.0.2 - "@types/node": ~14.14.45 + "@types/node": ^16.10.0 "@types/which": ^3.0.0 "@types/ws": 8.5.1 "@typescript-eslint/eslint-plugin": ^5.14.0 @@ -2961,6 +2960,7 @@ __metadata: eslint-plugin-local: "link:./.eslintplugin" eslint-plugin-markdown: ^3.0.0 eslint-plugin-prettier: ^4.0.0 + eslint-plugin-unicorn: ^46.0.0 execa: ^5.0.0 find-process: ^1.4.1 glob: ^10.0.0 @@ -3886,20 +3886,6 @@ __metadata: languageName: node linkType: hard -"@pkgr/utils@npm:^2.3.1": - version: 2.4.2 - resolution: "@pkgr/utils@npm:2.4.2" - dependencies: - cross-spawn: ^7.0.3 - fast-glob: ^3.3.0 - is-glob: ^4.0.3 - open: ^9.1.0 - picocolors: ^1.0.0 - tslib: ^2.6.0 - checksum: 24e04c121269317d259614cd32beea3af38277151c4002df5883c4be920b8e3490bb897748e844f9d46bf68230f86dabd4e8f093773130e7e60529a769a132fc - languageName: node - linkType: hard - "@pnpm/config.env-replace@npm:^1.1.0": version: 1.1.0 resolution: "@pnpm/config.env-replace@npm:1.1.0" @@ -5125,10 +5111,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:~14.14.45": - version: 14.14.45 - resolution: "@types/node@npm:14.14.45" - checksum: 3870a0128011b01c6fb6655e0f682b1b660e141f84d76c70fe503f5c7cf38bd06fc7b9a7d3c760601bce0598421f552695de40f095863ede29a6e22a13213b3e +"@types/node@npm:~16.18.0": + version: 16.18.52 + resolution: "@types/node@npm:16.18.52" + checksum: 6b1f27a848a69a70039cb27c2583317b5d051990933955c42bc2a2f299266ffa360f7cc3c7089d04fdf39144c476d475931900f00dabbc4f933eeb2d664f9778 languageName: node linkType: hard @@ -5315,9 +5301,9 @@ __metadata: linkType: hard "@types/semver@npm:^7.1.0, @types/semver@npm:^7.3.12": - version: 7.5.0 - resolution: "@types/semver@npm:7.5.0" - checksum: 0a64b9b9c7424d9a467658b18dd70d1d781c2d6f033096a6e05762d20ebbad23c1b69b0083b0484722aabf35640b78ccc3de26368bcae1129c87e9df028a22e2 + version: 7.5.1 + resolution: "@types/semver@npm:7.5.1" + checksum: 2fffe938c7ac168711f245a16e1856a3578d77161ca17e29a05c3e02c7be3e9c5beefa29a3350f6c1bd982fb70aa28cc52e4845eb7d36246bcdc0377170d584d languageName: node linkType: hard @@ -5405,9 +5391,9 @@ __metadata: linkType: hard "@types/unist@npm:^2, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2": - version: 2.0.7 - resolution: "@types/unist@npm:2.0.7" - checksum: b97a219554e83431f19a93ff113306bf0512909292815e8f32964e47d041c505af1aaa2a381c23e137c4c0b962fad58d4ce9c5c3256642921a466be43c1fc715 + version: 2.0.8 + resolution: "@types/unist@npm:2.0.8" + checksum: f4852d10a6752dc70df363917ef74453e5d2fd42824c0f6d09d19d530618e1402193977b1207366af4415aaec81d4e262c64d00345402020c4ca179216e553c7 languageName: node linkType: hard @@ -5939,7 +5925,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:~6.12.6": +"ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -6253,15 +6239,15 @@ __metadata: linkType: hard "array-includes@npm:^3.1.6": - version: 3.1.6 - resolution: "array-includes@npm:3.1.6" + version: 3.1.7 + resolution: "array-includes@npm:3.1.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 is-string: ^1.0.7 - checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + checksum: 06f9e4598fac12a919f7c59a3f04f010ea07f0b7f0585465ed12ef528a60e45f374e79d1bddbb34cdd4338357d00023ddbd0ac18b0be36964f5e726e8965d7fc languageName: node linkType: hard @@ -6272,27 +6258,40 @@ __metadata: languageName: node linkType: hard +"array.prototype.findlastindex@npm:^1.2.2": + version: 1.2.3 + resolution: "array.prototype.findlastindex@npm:1.2.3" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.2.1 + checksum: 31f35d7b370c84db56484618132041a9af401b338f51899c2e78ef7690fbba5909ee7ca3c59a7192085b328cc0c68c6fd1f6d1553db01a689a589ae510f3966e + languageName: node + linkType: hard + "array.prototype.flat@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flat@npm:1.3.1" + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 es-shim-unscopables: ^1.0.0 - checksum: 5a8415949df79bf6e01afd7e8839bbde5a3581300e8ad5d8449dea52639e9e59b26a467665622783697917b43bf39940a6e621877c7dd9b3d1c1f97484b9b88b + checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b languageName: node linkType: hard "array.prototype.flatmap@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flatmap@npm:1.3.1" + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 es-shim-unscopables: ^1.0.0 - checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 + checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 languageName: node linkType: hard @@ -6692,13 +6691,6 @@ __metadata: languageName: node linkType: hard -"big-integer@npm:^1.6.44": - version: 1.6.51 - resolution: "big-integer@npm:1.6.51" - checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 - languageName: node - linkType: hard - "big.js@npm:^5.2.2": version: 5.2.2 resolution: "big.js@npm:5.2.2" @@ -6807,15 +6799,6 @@ __metadata: languageName: node linkType: hard -"bplist-parser@npm:^0.2.0": - version: 0.2.0 - resolution: "bplist-parser@npm:0.2.0" - dependencies: - big-integer: ^1.6.44 - checksum: d5339dd16afc51de6c88f88f58a45b72ed6a06aa31f5557d09877575f220b7c1d3fbe375da0b62e6a10d4b8ed80523567e351f24014f5bc886ad523758142cdd - languageName: node - linkType: hard - "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -6917,15 +6900,6 @@ __metadata: languageName: node linkType: hard -"bundle-name@npm:^3.0.0": - version: 3.0.0 - resolution: "bundle-name@npm:3.0.0" - dependencies: - run-applescript: ^5.0.0 - checksum: edf2b1fbe6096ed32e7566947ace2ea937ee427391744d7510a2880c4b9a5b3543d3f6c551236a29e5c87d3195f8e2912516290e638c15bcbede7b37cc375615 - languageName: node - linkType: hard - "byte-size@npm:^7.0.1": version: 7.0.1 resolution: "byte-size@npm:7.0.1" @@ -7296,6 +7270,15 @@ __metadata: languageName: node linkType: hard +"clean-regexp@npm:^1.0.0": + version: 1.0.0 + resolution: "clean-regexp@npm:1.0.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 0b1ce281b07da2463c6882ea2e8409119b6cabbd9f687cdbdcee942c45b2b9049a2084f7b5f228c63ef9f21e722963ae0bfe56a735dbdbdd92512867625a7e40 + languageName: node + linkType: hard + "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -7597,10 +7580,10 @@ __metadata: languageName: node linkType: hard -"comment-parser@npm:1.3.1": - version: 1.3.1 - resolution: "comment-parser@npm:1.3.1" - checksum: 421e6a113a3afd548500e7174ab46a2049dccf92e82bbaa3b209031b1bdf97552aabfa1ae2a120c0b62df17e1ba70e0d8b05d68504fee78e1ef974c59bcfe718 +"comment-parser@npm:1.4.0": + version: 1.4.0 + resolution: "comment-parser@npm:1.4.0" + checksum: e086da3b14af9455177f1ab801bc54de9139a77fcef55dbfb751ae68d687ac83b0effb83d113ccf8cd217d9d93ce2b472002953cac342092a3fadfb9f5cd8e38 languageName: node linkType: hard @@ -8474,28 +8457,6 @@ __metadata: languageName: node linkType: hard -"default-browser-id@npm:^3.0.0": - version: 3.0.0 - resolution: "default-browser-id@npm:3.0.0" - dependencies: - bplist-parser: ^0.2.0 - untildify: ^4.0.0 - checksum: 279c7ad492542e5556336b6c254a4eaf31b2c63a5433265655ae6e47301197b6cfb15c595a6fdc6463b2ff8e1a1a1ed3cba56038a60e1527ba4ab1628c6b9941 - languageName: node - linkType: hard - -"default-browser@npm:^4.0.0": - version: 4.0.0 - resolution: "default-browser@npm:4.0.0" - dependencies: - bundle-name: ^3.0.0 - default-browser-id: ^3.0.0 - execa: ^7.1.1 - titleize: ^3.0.0 - checksum: 40c5af984799042b140300be5639c9742599bda76dc9eba5ac9ad5943c83dd36cebc4471eafcfddf8e0ec817166d5ba89d56f08e66a126c7c7908a179cead1a7 - languageName: node - linkType: hard - "default-gateway@npm:^6.0.3": version: 6.0.3 resolution: "default-gateway@npm:6.0.3" @@ -8528,13 +8489,6 @@ __metadata: languageName: node linkType: hard -"define-lazy-prop@npm:^3.0.0": - version: 3.0.0 - resolution: "define-lazy-prop@npm:3.0.0" - checksum: 54884f94caac0791bf6395a3ec530ce901cf71c47b0196b8754f3fd17edb6c0e80149c1214429d851873bb0d689dbe08dcedbb2306dc45c8534a5934723851b6 - languageName: node - linkType: hard - "define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": version: 1.2.0 resolution: "define-properties@npm:1.2.0" @@ -9064,7 +9018,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4": +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4, es-abstract@npm:^1.22.1": version: 1.22.1 resolution: "es-abstract@npm:1.22.1" dependencies: @@ -9245,36 +9199,35 @@ __metadata: linkType: hard "eslint-import-resolver-node@npm:^0.3.7": - version: 0.3.7 - resolution: "eslint-import-resolver-node@npm:0.3.7" + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" dependencies: debug: ^3.2.7 - is-core-module: ^2.11.0 - resolve: ^1.22.1 - checksum: 3379aacf1d2c6952c1b9666c6fa5982c3023df695430b0d391c0029f6403a7775414873d90f397e98ba6245372b6c8960e16e74d9e4a3b0c0a4582f3bdbe3d6e + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 languageName: node linkType: hard "eslint-import-resolver-typescript@npm:^3.2.5": - version: 3.5.5 - resolution: "eslint-import-resolver-typescript@npm:3.5.5" + version: 3.6.0 + resolution: "eslint-import-resolver-typescript@npm:3.6.0" dependencies: debug: ^4.3.4 enhanced-resolve: ^5.12.0 eslint-module-utils: ^2.7.4 + fast-glob: ^3.3.1 get-tsconfig: ^4.5.0 - globby: ^13.1.3 is-core-module: ^2.11.0 is-glob: ^4.0.3 - synckit: ^0.8.5 peerDependencies: eslint: "*" eslint-plugin-import: "*" - checksum: 27e6276fdff5d377c9036362ff736ac29852106e883ff589ea9092dc57d4bc2a67a82d75134221124f05045f9a7e2114a159b2c827d1f9f64d091f7afeab0f58 + checksum: 57b1b3859149f847e0d4174ff979cf35362d60c951df047f01b96f4c3794a7ea0d4e1ec85be25e610d3706902c3acfb964a66b825c1a55e3ce3a124b9a7a13bd languageName: node linkType: hard -"eslint-module-utils@npm:^2.7.4": +"eslint-module-utils@npm:^2.7.4, eslint-module-utils@npm:^2.8.0": version: 2.8.0 resolution: "eslint-module-utils@npm:2.8.0" dependencies: @@ -9299,27 +9252,29 @@ __metadata: linkType: hard "eslint-plugin-import@npm:^2.6.0": - version: 2.27.5 - resolution: "eslint-plugin-import@npm:2.27.5" + version: 2.28.1 + resolution: "eslint-plugin-import@npm:2.28.1" dependencies: array-includes: ^3.1.6 + array.prototype.findlastindex: ^1.2.2 array.prototype.flat: ^1.3.1 array.prototype.flatmap: ^1.3.1 debug: ^3.2.7 doctrine: ^2.1.0 eslint-import-resolver-node: ^0.3.7 - eslint-module-utils: ^2.7.4 + eslint-module-utils: ^2.8.0 has: ^1.0.3 - is-core-module: ^2.11.0 + is-core-module: ^2.13.0 is-glob: ^4.0.3 minimatch: ^3.1.2 + object.fromentries: ^2.0.6 + object.groupby: ^1.0.0 object.values: ^1.1.6 - resolve: ^1.22.1 - semver: ^6.3.0 - tsconfig-paths: ^3.14.1 + semver: ^6.3.1 + tsconfig-paths: ^3.14.2 peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: f500571a380167e25d72a4d925ef9a7aae8899eada57653e5f3051ec3d3c16d08271fcefe41a30a9a2f4fefc232f066253673ee4ea77b30dba65ae173dade85d + checksum: e8ae6dd8f06d8adf685f9c1cfd46ac9e053e344a05c4090767e83b63a85c8421ada389807a39e73c643b9bff156715c122e89778169110ed68d6428e12607edf languageName: node linkType: hard @@ -9342,21 +9297,21 @@ __metadata: linkType: hard "eslint-plugin-jsdoc@npm:^46.0.0": - version: 46.4.4 - resolution: "eslint-plugin-jsdoc@npm:46.4.4" + version: 46.6.0 + resolution: "eslint-plugin-jsdoc@npm:46.6.0" dependencies: - "@es-joy/jsdoccomment": ~0.39.4 + "@es-joy/jsdoccomment": ~0.40.1 are-docs-informative: ^0.0.2 - comment-parser: 1.3.1 + comment-parser: 1.4.0 debug: ^4.3.4 escape-string-regexp: ^4.0.0 esquery: ^1.5.0 is-builtin-module: ^3.2.1 - semver: ^7.5.1 + semver: ^7.5.4 spdx-expression-parse: ^3.0.1 peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: bc97f2f146aedcf43b1610a80eb9623deb365a30ba54eb37e6f82c6f205136aa51f67a65b0625729cb33ec941710bfa08d9d18b59296e2d84c2fd6a57d63c2be + checksum: 3e2b46b31c6022773b8d21282b3a95fcc8053c865e4529516f9806860331021db1548a75972cf39eb1615fb5b794340365e4bd90033218aa427693c96d9e7878 languageName: node linkType: hard @@ -9367,13 +9322,13 @@ __metadata: linkType: soft "eslint-plugin-markdown@npm:^3.0.0": - version: 3.0.0 - resolution: "eslint-plugin-markdown@npm:3.0.0" + version: 3.0.1 + resolution: "eslint-plugin-markdown@npm:3.0.1" dependencies: mdast-util-from-markdown: ^0.8.5 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: ea9e8613cffcf7decbc2de0c900a83553ccdccfb6d90187e5d461a457a403d2634585a8c165cc4adf52c86f3b910161f33b1f24a46f296c4a577d2547780c997 + checksum: 91233d35777517a290377233eecbdbbe17d583f40b11b9adf371d051a98012ad6b540967aae59c2786fb8b66aa7c1abb27108947034b1f0f3e0df1c8aae9f2e7 languageName: node linkType: hard @@ -9392,6 +9347,32 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-unicorn@npm:^46.0.0": + version: 46.0.1 + resolution: "eslint-plugin-unicorn@npm:46.0.1" + dependencies: + "@babel/helper-validator-identifier": ^7.19.1 + "@eslint-community/eslint-utils": ^4.1.2 + ci-info: ^3.6.1 + clean-regexp: ^1.0.0 + esquery: ^1.4.0 + indent-string: ^4.0.0 + is-builtin-module: ^3.2.0 + jsesc: ^3.0.2 + lodash: ^4.17.21 + pluralize: ^8.0.0 + read-pkg-up: ^7.0.1 + regexp-tree: ^0.1.24 + regjsparser: ^0.9.1 + safe-regex: ^2.1.1 + semver: ^7.3.8 + strip-indent: ^3.0.0 + peerDependencies: + eslint: ">=8.28.0" + checksum: 2059aee095a00eedcda8c5407fdb91075549dd468bc26e1e5ca585c0c5c5daf621bc7eaab6159b56ca6d65653705ac139caf8a2a667f777efb425eae6abae61e + languageName: node + linkType: hard + "eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" @@ -9402,43 +9383,43 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^7.2.0": - version: 7.2.1 - resolution: "eslint-scope@npm:7.2.1" +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" dependencies: esrecurse: ^4.3.0 estraverse: ^5.2.0 - checksum: dccda5c8909216f6261969b72c77b95e385f9086bed4bc09d8a6276df8439d8f986810fd9ac3bd02c94c0572cefc7fdbeae392c69df2e60712ab8263986522c5 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": - version: 3.4.1 - resolution: "eslint-visitor-keys@npm:3.4.1" - checksum: f05121d868202736b97de7d750847a328fcfa8593b031c95ea89425333db59676ac087fa905eba438d0a3c5769632f828187e0c1a0d271832a2153c1d3661c2c +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 languageName: node linkType: hard "eslint@npm:^8.8.0": - version: 8.45.0 - resolution: "eslint@npm:8.45.0" + version: 8.49.0 + resolution: "eslint@npm:8.49.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.4.0 - "@eslint/eslintrc": ^2.1.0 - "@eslint/js": 8.44.0 - "@humanwhocodes/config-array": ^0.11.10 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.2 + "@eslint/js": 8.49.0 + "@humanwhocodes/config-array": ^0.11.11 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 - ajv: ^6.10.0 + ajv: ^6.12.4 chalk: ^4.0.0 cross-spawn: ^7.0.2 debug: ^4.3.2 doctrine: ^3.0.0 escape-string-regexp: ^4.0.0 - eslint-scope: ^7.2.0 - eslint-visitor-keys: ^3.4.1 - espree: ^9.6.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 @@ -9462,11 +9443,11 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 3e6dcce5cc43c5e301662db88ee26d1d188b22c177b9f104d7eefd1191236980bd953b3670fe2fac287114b26d7c5420ab48407d7ea1c3a446d6313c000009da + checksum: 4dfe257e1e42da2f9da872b05aaaf99b0f5aa022c1a91eee8f2af1ab72651b596366320c575ccd4e0469f7b4c97aff5bb85ae3323ebd6a293c3faef4028b0d81 languageName: node linkType: hard -"espree@npm:^9.6.0": +"espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" dependencies: @@ -9487,7 +9468,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.2, esquery@npm:^1.5.0": +"esquery@npm:^1.4.0, esquery@npm:^1.4.2, esquery@npm:^1.5.0": version: 1.5.0 resolution: "esquery@npm:1.5.0" dependencies: @@ -9834,23 +9815,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^7.1.1": - version: 7.1.1 - resolution: "execa@npm:7.1.1" - dependencies: - cross-spawn: ^7.0.3 - get-stream: ^6.0.1 - human-signals: ^4.3.0 - is-stream: ^3.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^5.1.0 - onetime: ^6.0.0 - signal-exit: ^3.0.7 - strip-final-newline: ^3.0.0 - checksum: 21fa46fc69314ace4068cf820142bdde5b643a5d89831c2c9349479c1555bff137a291b8e749e7efca36535e4e0a8c772c11008ca2e84d2cbd6ca141a3c8f937 - languageName: node - linkType: hard - "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -9972,7 +9936,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.1": version: 3.3.1 resolution: "fast-glob@npm:3.3.1" dependencies: @@ -10263,16 +10227,17 @@ __metadata: linkType: hard "flat-cache@npm:^3.0.4": - version: 3.0.4 - resolution: "flat-cache@npm:3.0.4" + version: 3.1.0 + resolution: "flat-cache@npm:3.1.0" dependencies: - flatted: ^3.1.0 + flatted: ^3.2.7 + keyv: ^4.5.3 rimraf: ^3.0.2 - checksum: 4fdd10ecbcbf7d520f9040dd1340eb5dfe951e6f0ecf2252edeec03ee68d989ec8b9a20f4434270e71bcfd57800dc09b3344fca3966b2eb8f613072c7d9a2365 + checksum: 99312601d5b90f44aef403f17f056dc09be7e437703740b166cdc9386d99e681f74e6b6e8bd7d010bda66904ea643c9527276b1b80308a2119741d94108a4d8f languageName: node linkType: hard -"flatted@npm:^3.1.0": +"flatted@npm:^3.2.7": version: 3.2.7 resolution: "flatted@npm:3.2.7" checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 @@ -10650,11 +10615,11 @@ __metadata: linkType: hard "get-tsconfig@npm:^4.5.0": - version: 4.6.2 - resolution: "get-tsconfig@npm:4.6.2" + version: 4.7.0 + resolution: "get-tsconfig@npm:4.7.0" dependencies: resolve-pkg-maps: ^1.0.0 - checksum: e791e671a9b55e91efea3ca819ecd7a25beae679e31c83234bf3dd62ddd93df070c1b95ae7e29d206358ebb6408f6f79ac6d83a32a3bbd6a6d217babe23de077 + checksum: 44536925720acc2f133d26301d5626405d8fe33066625484ff309bb6fb7f3310dc0bb202f862805f21a791e38a9870c6dddb013d1443dd5d745d91ad1946254a languageName: node linkType: hard @@ -10828,11 +10793,11 @@ __metadata: linkType: hard "globals@npm:^13.19.0": - version: 13.20.0 - resolution: "globals@npm:13.20.0" + version: 13.21.0 + resolution: "globals@npm:13.21.0" dependencies: type-fest: ^0.20.2 - checksum: ad1ecf914bd051325faad281d02ea2c0b1df5d01bd94d368dcc5513340eac41d14b3c61af325768e3c7f8d44576e72780ec0b6f2d366121f8eec6e03c3a3b97a + checksum: 86c92ca8a04efd864c10852cd9abb1ebe6d447dcc72936783e66eaba1087d7dba5c9c3421a48d6ca722c319378754dbcc3f3f732dbe47592d7de908edf58a773 languageName: node linkType: hard @@ -10859,7 +10824,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^13.1.1, globby@npm:^13.1.3": +"globby@npm:^13.1.1": version: 13.2.2 resolution: "globby@npm:13.2.2" dependencies: @@ -11493,13 +11458,6 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^4.3.0": - version: 4.3.1 - resolution: "human-signals@npm:4.3.1" - checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 - languageName: node - linkType: hard - "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -11871,7 +11829,7 @@ __metadata: languageName: node linkType: hard -"is-builtin-module@npm:^3.2.1": +"is-builtin-module@npm:^3.2.0, is-builtin-module@npm:^3.2.1": version: 3.2.1 resolution: "is-builtin-module@npm:3.2.1" dependencies: @@ -11909,12 +11867,12 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.1.0, is-core-module@npm:^2.11.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1": - version: 2.12.1 - resolution: "is-core-module@npm:2.12.1" +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1": + version: 2.13.0 + resolution: "is-core-module@npm:2.13.0" dependencies: has: ^1.0.3 - checksum: f04ea30533b5e62764e7b2e049d3157dc0abd95ef44275b32489ea2081176ac9746ffb1cdb107445cf1ff0e0dfcad522726ca27c27ece64dadf3795428b8e468 + checksum: 053ab101fb390bfeb2333360fd131387bed54e476b26860dc7f5a700bbf34a0ec4454f7c8c4d43e8a0030957e4b3db6e16d35e1890ea6fb654c833095e040355 languageName: node linkType: hard @@ -11957,15 +11915,6 @@ __metadata: languageName: node linkType: hard -"is-docker@npm:^3.0.0": - version: 3.0.0 - resolution: "is-docker@npm:3.0.0" - bin: - is-docker: cli.js - checksum: b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 - languageName: node - linkType: hard - "is-extendable@npm:^0.1.0": version: 0.1.1 resolution: "is-extendable@npm:0.1.1" @@ -12024,17 +11973,6 @@ __metadata: languageName: node linkType: hard -"is-inside-container@npm:^1.0.0": - version: 1.0.0 - resolution: "is-inside-container@npm:1.0.0" - dependencies: - is-docker: ^3.0.0 - bin: - is-inside-container: cli.js - checksum: c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 - languageName: node - linkType: hard - "is-installed-globally@npm:^0.4.0": version: 0.4.0 resolution: "is-installed-globally@npm:0.4.0" @@ -12247,13 +12185,6 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "is-stream@npm:3.0.0" - checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 - languageName: node - linkType: hard - "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -13123,13 +13054,13 @@ __metadata: dependencies: "@babel/core": ^7.11.6 "@crowdin/cli": ^3.5.2 - "@docusaurus/core": 0.0.0-5658 - "@docusaurus/module-type-aliases": 0.0.0-5658 - "@docusaurus/plugin-client-redirects": 0.0.0-5658 - "@docusaurus/plugin-pwa": 0.0.0-5658 - "@docusaurus/preset-classic": 0.0.0-5658 - "@docusaurus/remark-plugin-npm2yarn": 0.0.0-5658 - "@docusaurus/tsconfig": 0.0.0-5658 + "@docusaurus/core": ^3.0.0-beta.0 + "@docusaurus/module-type-aliases": 3.0.0-beta.0 + "@docusaurus/plugin-client-redirects": 3.0.0-beta.0 + "@docusaurus/plugin-pwa": 3.0.0-beta.0 + "@docusaurus/preset-classic": 3.0.0-beta.0 + "@docusaurus/remark-plugin-npm2yarn": 3.0.0-beta.0 + "@docusaurus/tsconfig": 3.0.0-beta.0 "@types/react": ^18.2.21 clsx: ^2.0.0 docusaurus-remark-plugin-tab-blocks: ^2.0.0-beta @@ -13381,6 +13312,15 @@ __metadata: languageName: node linkType: hard +"jsesc@npm:^3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: a36d3ca40574a974d9c2063bf68c2b6141c20da8f2a36bd3279fc802563f35f0527a6c828801295bdfb2803952cf2cf387786c2c90ed564f88d5782475abfe3c + languageName: node + linkType: hard + "jsesc@npm:~0.5.0": version: 0.5.0 resolution: "jsesc@npm:0.5.0" @@ -15232,13 +15172,6 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^4.0.0": - version: 4.0.0 - resolution: "mimic-fn@npm:4.0.0" - checksum: 995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 - languageName: node - linkType: hard - "mimic-response@npm:^3.1.0": version: 3.1.0 resolution: "mimic-response@npm:3.1.0" @@ -15871,15 +15804,6 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^5.1.0": - version: 5.1.0 - resolution: "npm-run-path@npm:5.1.0" - dependencies: - path-key: ^4.0.0 - checksum: dc184eb5ec239d6a2b990b43236845332ef12f4e0beaa9701de724aa797fe40b6bbd0157fb7639d24d3ab13f5d5cf22d223a19c6300846b8126f335f788bee66 - languageName: node - linkType: hard - "npm-to-yarn@npm:^2.0.0": version: 2.0.0 resolution: "npm-to-yarn@npm:2.0.0" @@ -15991,14 +15915,37 @@ __metadata: languageName: node linkType: hard +"object.fromentries@npm:^2.0.6": + version: 2.0.7 + resolution: "object.fromentries@npm:2.0.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 7341ce246e248b39a431b87a9ddd331ff52a454deb79afebc95609f94b1f8238966cf21f52188f2a353f0fdf83294f32f1ebf1f7826aae915ebad21fd0678065 + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.0": + version: 1.0.1 + resolution: "object.groupby@npm:1.0.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + checksum: d7959d6eaaba358b1608066fc67ac97f23ce6f573dc8fc661f68c52be165266fcb02937076aedb0e42722fdda0bdc0bbf74778196ac04868178888e9fd3b78b5 + languageName: node + linkType: hard + "object.values@npm:^1.1.6": - version: 1.1.6 - resolution: "object.values@npm:1.1.6" + version: 1.1.7 + resolution: "object.values@npm:1.1.7" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: f3e4ae4f21eb1cc7cebb6ce036d4c67b36e1c750428d7b7623c56a0db90edced63d08af8a316d81dfb7c41a3a5fa81b05b7cc9426e98d7da986b1682460f0777 languageName: node linkType: hard @@ -16052,15 +15999,6 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^6.0.0": - version: 6.0.0 - resolution: "onetime@npm:6.0.0" - dependencies: - mimic-fn: ^4.0.0 - checksum: 0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 - languageName: node - linkType: hard - "open@npm:^6.2.0": version: 6.4.0 resolution: "open@npm:6.4.0" @@ -16081,18 +16019,6 @@ __metadata: languageName: node linkType: hard -"open@npm:^9.1.0": - version: 9.1.0 - resolution: "open@npm:9.1.0" - dependencies: - default-browser: ^4.0.0 - define-lazy-prop: ^3.0.0 - is-inside-container: ^1.0.0 - is-wsl: ^2.2.0 - checksum: 3993c0f61d51fed8ac290e99c9c3cf45d3b6cfb3e2aa2b74cafd312c3486c22fd81df16ac8f3ab91dd8a4e3e729a16fc2480cfc406c4833416cf908acf1ae7c9 - languageName: node - linkType: hard - "opener@npm:^1.5.2": version: 1.5.2 resolution: "opener@npm:1.5.2" @@ -16533,13 +16459,6 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^4.0.0": - version: 4.0.0 - resolution: "path-key@npm:4.0.0" - checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 - languageName: node - linkType: hard - "path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -16725,6 +16644,13 @@ __metadata: languageName: node linkType: hard +"pluralize@npm:^8.0.0": + version: 8.0.0 + resolution: "pluralize@npm:8.0.0" + checksum: 08931d4a6a4a5561a7f94f67a31c17e6632cb21e459ab3ff4f6f629d9a822984cf8afef2311d2005fbea5d7ef26016ebb090db008e2d8bce39d0a9a9d218736e + languageName: node + linkType: hard + "postcss-calc@npm:^8.2.3": version: 8.2.4 resolution: "postcss-calc@npm:8.2.4" @@ -18142,6 +18068,15 @@ __metadata: languageName: node linkType: hard +"regexp-tree@npm:^0.1.24, regexp-tree@npm:~0.1.1": + version: 0.1.27 + resolution: "regexp-tree@npm:0.1.27" + bin: + regexp-tree: bin/regexp-tree + checksum: 129aebb34dae22d6694ab2ac328be3f99105143737528ab072ef624d599afecbcfae1f5c96a166fa9e5f64fa1ecf30b411c4691e7924c3e11bbaf1712c260c54 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0": version: 1.5.0 resolution: "regexp.prototype.flags@npm:1.5.0" @@ -18395,16 +18330,16 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:~1.22.1": - version: 1.22.2 - resolution: "resolve@npm:1.22.2" +"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.4, resolve@npm:~1.22.1": + version: 1.22.4 + resolution: "resolve@npm:1.22.4" dependencies: - is-core-module: ^2.11.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 7e5df75796ebd429445d102d5824482ee7e567f0070b2b45897b29bb4f613dcbc262e0257b8aeedb3089330ccaea0d6a0464df1a77b2992cf331dcda0f4cb549 + checksum: 23f25174c2736ce24c6d918910e0d1f89b6b38fefa07a995dff864acd7863d59a7f049e691f93b4b2ee29696303390d921552b6d1b841ed4a8101f517e1d0124 languageName: node linkType: hard @@ -18418,16 +18353,16 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@~1.22.1#~builtin": - version: 1.22.2 - resolution: "resolve@patch:resolve@npm%3A1.22.2#~builtin::version=1.22.2&hash=c3c19d" +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@~1.22.1#~builtin": + version: 1.22.4 + resolution: "resolve@patch:resolve@npm%3A1.22.4#~builtin::version=1.22.4&hash=c3c19d" dependencies: - is-core-module: ^2.11.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 66cc788f13b8398de18eb4abb3aed90435c84bb8935953feafcf7231ba4cd191b2c10b4a87b1e9681afc34fb138c705f91f7330ff90bfa36f457e5584076a2b8 + checksum: c45f2545fdc4d21883861b032789e20aa67a2f2692f68da320cc84d5724cd02f2923766c5354b3210897e88f1a7b3d6d2c7c22faeead8eed7078e4c783a444bc languageName: node linkType: hard @@ -18563,15 +18498,6 @@ __metadata: languageName: node linkType: hard -"run-applescript@npm:^5.0.0": - version: 5.0.0 - resolution: "run-applescript@npm:5.0.0" - dependencies: - execa: ^5.0.0 - checksum: d00c2dbfa5b2d774de7451194b8b125f40f65fc183de7d9dcae97f57f59433586d3c39b9001e111c38bfa24c3436c99df1bb4066a2a0c90d39a8c4cd6889af77 - languageName: node - linkType: hard - "run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -18643,6 +18569,15 @@ __metadata: languageName: node linkType: hard +"safe-regex@npm:^2.1.1": + version: 2.1.1 + resolution: "safe-regex@npm:2.1.1" + dependencies: + regexp-tree: ~0.1.1 + checksum: 5d734e2193c63ef0cb00f60c0244e0f8a30ecb31923633cd34636808d6a7c4c206d650017953ae1db8bc33967c2f06af33488dea6f038f4e38212beb7bed77b4 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -18781,7 +18716,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.1, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:~7.5.4": +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:~7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -19569,13 +19504,6 @@ __metadata: languageName: node linkType: hard -"strip-final-newline@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-final-newline@npm:3.0.0" - checksum: 23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 - languageName: node - linkType: hard - "strip-indent@npm:^3.0.0": version: 3.0.0 resolution: "strip-indent@npm:3.0.0" @@ -19712,16 +19640,6 @@ __metadata: languageName: node linkType: hard -"synckit@npm:^0.8.5": - version: 0.8.5 - resolution: "synckit@npm:0.8.5" - dependencies: - "@pkgr/utils": ^2.3.1 - tslib: ^2.5.0 - checksum: 8a9560e5d8f3d94dc3cf5f7b9c83490ffa30d320093560a37b88f59483040771fd1750e76b9939abfbb1b5a23fd6dfbae77f6b338abffe7cae7329cd9b9bb86b - languageName: node - linkType: hard - "tapable@npm:^1.0.0": version: 1.1.3 resolution: "tapable@npm:1.1.3" @@ -19928,13 +19846,6 @@ __metadata: languageName: node linkType: hard -"titleize@npm:^3.0.0": - version: 3.0.0 - resolution: "titleize@npm:3.0.0" - checksum: 71fbbeabbfb36ccd840559f67f21e356e1d03da2915b32d2ae1a60ddcc13a124be2739f696d2feb884983441d159a18649e8d956648d591bdad35c430a6b6d28 - languageName: node - linkType: hard - "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -20122,7 +20033,7 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.14.1": +"tsconfig-paths@npm:^3.14.2": version: 3.14.2 resolution: "tsconfig-paths@npm:3.14.2" dependencies: @@ -20150,7 +20061,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0": +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.6.0": version: 2.6.0 resolution: "tslib@npm:2.6.0" checksum: c01066038f950016a18106ddeca4649b4d76caa76ec5a31e2a26e10586a59fceb4ee45e96719bf6c715648e7c14085a81fee5c62f7e9ebee68e77a5396e5538f @@ -20639,13 +20550,6 @@ __metadata: languageName: node linkType: hard -"untildify@npm:^4.0.0": - version: 4.0.0 - resolution: "untildify@npm:4.0.0" - checksum: 39ced9c418a74f73f0a56e1ba4634b4d959422dff61f4c72a8e39f60b99380c1b45ed776fbaa0a4101b157e4310d873ad7d114e8534ca02609b4916bb4187fb9 - languageName: node - linkType: hard - "upath@npm:^1.2.0": version: 1.2.0 resolution: "upath@npm:1.2.0" @@ -20760,7 +20664,7 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.0.0, use-sync-external-store@npm:^1.2.0": +"use-sync-external-store@npm:^1.0.0": version: 1.2.0 resolution: "use-sync-external-store@npm:1.2.0" peerDependencies: