diff --git a/CHANGELOG.md b/CHANGELOG.md index 134c024a0895..08ba0ff3b929 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,13 +35,14 @@ ### Performance -- `[*]` [**BREAKING**] Bundle all of Jest's modules into `index.js` ([#12348](https://github.com/jestjs/jest/pull/12348) & [#14550](https://github.com/jestjs/jest/pull/14550)) +- `[*]` [**BREAKING**] Bundle all of Jest's modules into `index.js` ([#12348](https://github.com/jestjs/jest/pull/12348), [#14550](https://github.com/jestjs/jest/pull/14550) & [#14661](https://github.com/jestjs/jest/pull/14661)) ### Chore & Maintenance - `[*]` [**BREAKING**] Drop support for Node.js versions 14 and 19 ([#14460](https://github.com/jestjs/jest/pull/14460)) - `[*]` [**BREAKING**] Drop support for `typescript@4.3`, minimum version is now `5.0` ([#14542](https://github.com/facebook/jest/pull/14542)) - `[*]` Depend on exact versions of monorepo dependencies instead of `^` range ([#14553](https://github.com/facebook/jest/pull/14553)) +- `[*]` [**BREAKING**] Add ESM wrapper for all of Jest's modules ([#14661](https://github.com/jestjs/jest/pull/14661)) - `[babel-jest, babel-preset-jest]` [**BREAKING**] Increase peer dependency of `@babel/core` to `^7.11` ([#14109](https://github.com/jestjs/jest/pull/14109)) - `[jest-cli, jest-config, @jest/types]` [**BREAKING**] Remove deprecated `--init` argument ([#14490](https://github.com/jestjs/jest/pull/14490)) - `[docs]` Fix typos in `CHANGELOG.md` and `packages/jest-validate/README.md` ([#14640](https://github.com/jestjs/jest/pull/14640)) diff --git a/e2e/custom-esm-test-sequencer/testSequencer.mjs b/e2e/custom-esm-test-sequencer/testSequencer.mjs index 147297a4bc45..21e4a9ef3459 100644 --- a/e2e/custom-esm-test-sequencer/testSequencer.mjs +++ b/e2e/custom-esm-test-sequencer/testSequencer.mjs @@ -7,7 +7,7 @@ import Sequencer from '@jest/test-sequencer'; -export default class CustomSequencer extends Sequencer.default { +export default class CustomSequencer extends Sequencer { sort(tests) { const copyTests = Array.from(tests); return copyTests.sort((testA, testB) => (testA.path > testB.path ? 1 : -1)); diff --git a/e2e/global-setup-esm/setup.js b/e2e/global-setup-esm/setup.js index 943dd198e9f6..a47e5a09fa38 100644 --- a/e2e/global-setup-esm/setup.js +++ b/e2e/global-setup-esm/setup.js @@ -8,9 +8,7 @@ import * as crypto from 'crypto'; import * as os from 'os'; import * as path from 'path'; import fs from 'graceful-fs'; -import jestUtil from 'jest-util'; - -const {createDirectory} = jestUtil; +import {createDirectory} from 'jest-util'; const DIR = path.join(os.tmpdir(), 'jest-global-setup-esm'); diff --git a/e2e/global-teardown-esm/teardown.js b/e2e/global-teardown-esm/teardown.js index 7732d6249438..155265e127ac 100644 --- a/e2e/global-teardown-esm/teardown.js +++ b/e2e/global-teardown-esm/teardown.js @@ -8,9 +8,7 @@ import * as crypto from 'crypto'; import * as os from 'os'; import * as path from 'path'; import fs from 'graceful-fs'; -import jestUtil from 'jest-util'; - -const {createDirectory} = jestUtil; +import {createDirectory} from 'jest-util'; const DIR = path.join(os.tmpdir(), 'jest-global-teardown-esm'); diff --git a/e2e/transform/transform-esm-runner/runner.mjs b/e2e/transform/transform-esm-runner/runner.mjs index bc0f2da1a2d0..d656faa75186 100644 --- a/e2e/transform/transform-esm-runner/runner.mjs +++ b/e2e/transform/transform-esm-runner/runner.mjs @@ -5,9 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import testResult from '@jest/test-result'; - -const {createEmptyTestResult} = testResult; +import {createEmptyTestResult} from '@jest/test-result'; export default class BaseTestRunner { constructor(globalConfig, context) { diff --git a/e2e/transform/transform-esm-testrunner/test-runner.mjs b/e2e/transform/transform-esm-testrunner/test-runner.mjs index bd401cd4a800..118363358e50 100644 --- a/e2e/transform/transform-esm-testrunner/test-runner.mjs +++ b/e2e/transform/transform-esm-testrunner/test-runner.mjs @@ -4,9 +4,8 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -import testResult from '@jest/test-result'; -const {createEmptyTestResult} = testResult; +import {createEmptyTestResult} from '@jest/test-result'; export default async function testRunner( globalConfig, diff --git a/package.json b/package.json index 9bc87c735185..f2a1b3f2a052 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,6 @@ "rimraf": "^5.0.0", "semver": "^7.5.3", "slash": "^3.0.0", - "string-length": "^4.0.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.1", "tempy": "^1.0.0", diff --git a/packages/babel-jest/package.json b/packages/babel-jest/package.json index 8e088960748c..07bedce09647 100644 --- a/packages/babel-jest/package.json +++ b/packages/babel-jest/package.json @@ -13,6 +13,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/babel-plugin-jest-hoist/package.json b/packages/babel-plugin-jest-hoist/package.json index f3711657bfce..ab3dffb2670e 100644 --- a/packages/babel-plugin-jest-hoist/package.json +++ b/packages/babel-plugin-jest-hoist/package.json @@ -15,6 +15,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/create-jest/package.json b/packages/create-jest/package.json index bd59d3272e10..ab7f9a5e9c80 100644 --- a/packages/create-jest/package.json +++ b/packages/create-jest/package.json @@ -14,6 +14,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json", diff --git a/packages/diff-sequences/package.json b/packages/diff-sequences/package.json index ad26c505acfe..05575ff8b733 100644 --- a/packages/diff-sequences/package.json +++ b/packages/diff-sequences/package.json @@ -23,6 +23,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/expect-utils/package.json b/packages/expect-utils/package.json index 537c99af97f3..3ad413154954 100644 --- a/packages/expect-utils/package.json +++ b/packages/expect-utils/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/expect/package.json b/packages/expect/package.json index 1d1920cf3773..d927ef199967 100644 --- a/packages/expect/package.json +++ b/packages/expect/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json", diff --git a/packages/jest-changed-files/package.json b/packages/jest-changed-files/package.json index 266dcc241bbc..70ed9dca18e0 100644 --- a/packages/jest-changed-files/package.json +++ b/packages/jest-changed-files/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-circus/package.json b/packages/jest-circus/package.json index 0c8daacacecb..2f0a9958f0b9 100644 --- a/packages/jest-circus/package.json +++ b/packages/jest-circus/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json", diff --git a/packages/jest-cli/package.json b/packages/jest-cli/package.json index 35bb1f135d1b..5b16a968ac4c 100644 --- a/packages/jest-cli/package.json +++ b/packages/jest-cli/package.json @@ -7,6 +7,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json", diff --git a/packages/jest-config/package.json b/packages/jest-config/package.json index 8b1eaf4047f1..adff37afee1d 100644 --- a/packages/jest-config/package.json +++ b/packages/jest-config/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-console/package.json b/packages/jest-console/package.json index fd2d7cae27fb..f6b44fcd6a32 100644 --- a/packages/jest-console/package.json +++ b/packages/jest-console/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-core/package.json b/packages/jest-core/package.json index 88604b1c83d6..34efd4228cb4 100644 --- a/packages/jest-core/package.json +++ b/packages/jest-core/package.json @@ -7,6 +7,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-create-cache-key-function/package.json b/packages/jest-create-cache-key-function/package.json index 899c9bdd3b7f..7f862d4f2f66 100644 --- a/packages/jest-create-cache-key-function/package.json +++ b/packages/jest-create-cache-key-function/package.json @@ -22,6 +22,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-diff/package.json b/packages/jest-diff/package.json index cd1b7d23ef4b..2563cffb8444 100644 --- a/packages/jest-diff/package.json +++ b/packages/jest-diff/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-docblock/package.json b/packages/jest-docblock/package.json index 0497db933410..ccab5c621027 100644 --- a/packages/jest-docblock/package.json +++ b/packages/jest-docblock/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-each/package.json b/packages/jest-each/package.json index daad4bb369e1..044e07cb6174 100644 --- a/packages/jest-each/package.json +++ b/packages/jest-each/package.json @@ -7,6 +7,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-environment-jsdom/package.json b/packages/jest-environment-jsdom/package.json index 2ccb92e50498..ddb8bca5e6f4 100644 --- a/packages/jest-environment-jsdom/package.json +++ b/packages/jest-environment-jsdom/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-environment-node/package.json b/packages/jest-environment-node/package.json index fc2077a27edc..640e397b7d54 100644 --- a/packages/jest-environment-node/package.json +++ b/packages/jest-environment-node/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-expect/package.json b/packages/jest-expect/package.json index 2b90ff172e68..388e2d836b73 100644 --- a/packages/jest-expect/package.json +++ b/packages/jest-expect/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-fake-timers/package.json b/packages/jest-fake-timers/package.json index 7d19cf3fdfcc..3383fea58bd6 100644 --- a/packages/jest-fake-timers/package.json +++ b/packages/jest-fake-timers/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-get-type/package.json b/packages/jest-get-type/package.json index 5daa3eff7b9f..70e61ad1c882 100644 --- a/packages/jest-get-type/package.json +++ b/packages/jest-get-type/package.json @@ -16,6 +16,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-haste-map/package.json b/packages/jest-haste-map/package.json index e400d5101dd3..e37437b35feb 100644 --- a/packages/jest-haste-map/package.json +++ b/packages/jest-haste-map/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-jasmine2/package.json b/packages/jest-jasmine2/package.json index 021b2bca3786..25e5bd6f4455 100644 --- a/packages/jest-jasmine2/package.json +++ b/packages/jest-jasmine2/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-leak-detector/package.json b/packages/jest-leak-detector/package.json index aff793f5ac8c..4088c52008ca 100644 --- a/packages/jest-leak-detector/package.json +++ b/packages/jest-leak-detector/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-matcher-utils/package.json b/packages/jest-matcher-utils/package.json index 350258982eb0..624ebe1f68e0 100644 --- a/packages/jest-matcher-utils/package.json +++ b/packages/jest-matcher-utils/package.json @@ -16,6 +16,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-message-util/package.json b/packages/jest-message-util/package.json index 0c3caf12c86a..0bcd2ebd3864 100644 --- a/packages/jest-message-util/package.json +++ b/packages/jest-message-util/package.json @@ -15,6 +15,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-mock/package.json b/packages/jest-mock/package.json index bed7e5bf52a3..8cc4cd600309 100644 --- a/packages/jest-mock/package.json +++ b/packages/jest-mock/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-phabricator/package.json b/packages/jest-phabricator/package.json index 22374dedb2fa..6c43dc41b38c 100644 --- a/packages/jest-phabricator/package.json +++ b/packages/jest-phabricator/package.json @@ -10,6 +10,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-regex-util/package.json b/packages/jest-regex-util/package.json index 0edb37ecb2de..88f67998b185 100644 --- a/packages/jest-regex-util/package.json +++ b/packages/jest-regex-util/package.json @@ -18,6 +18,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-repl/package.json b/packages/jest-repl/package.json index 37dfaeb04ccf..53fd1d5f5a09 100644 --- a/packages/jest-repl/package.json +++ b/packages/jest-repl/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json", diff --git a/packages/jest-reporters/package.json b/packages/jest-reporters/package.json index 8c07815855cc..eeffd20534c4 100644 --- a/packages/jest-reporters/package.json +++ b/packages/jest-reporters/package.json @@ -7,6 +7,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-resolve-dependencies/package.json b/packages/jest-resolve-dependencies/package.json index 07bb52e48c0b..750f3ef5caae 100644 --- a/packages/jest-resolve-dependencies/package.json +++ b/packages/jest-resolve-dependencies/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-resolve/package.json b/packages/jest-resolve/package.json index 716b4897a204..aa2161da2fa9 100644 --- a/packages/jest-resolve/package.json +++ b/packages/jest-resolve/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-runner/package.json b/packages/jest-runner/package.json index 9fbb18d62cf7..871881bc9327 100644 --- a/packages/jest-runner/package.json +++ b/packages/jest-runner/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-runtime/package.json b/packages/jest-runtime/package.json index 94094bb289e0..ebead02d3524 100644 --- a/packages/jest-runtime/package.json +++ b/packages/jest-runtime/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-schemas/package.json b/packages/jest-schemas/package.json index 3ca09f866b5a..d45e17922534 100644 --- a/packages/jest-schemas/package.json +++ b/packages/jest-schemas/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index 26593541288a..957cf8aca7e3 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-source-map/package.json b/packages/jest-source-map/package.json index 8a65f241f086..5be4f176b0d3 100644 --- a/packages/jest-source-map/package.json +++ b/packages/jest-source-map/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-test-result/package.json b/packages/jest-test-result/package.json index 9de14d66c2c5..eff607a8d776 100644 --- a/packages/jest-test-result/package.json +++ b/packages/jest-test-result/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-test-sequencer/package.json b/packages/jest-test-sequencer/package.json index e8e609205d19..33c6cfae6f4d 100644 --- a/packages/jest-test-sequencer/package.json +++ b/packages/jest-test-sequencer/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-transform/package.json b/packages/jest-transform/package.json index ba1b76e5fe8f..dbd23f77e0bd 100644 --- a/packages/jest-transform/package.json +++ b/packages/jest-transform/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-util/package.json b/packages/jest-util/package.json index 465f9a8e08ff..f612600003a8 100644 --- a/packages/jest-util/package.json +++ b/packages/jest-util/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-validate/package.json b/packages/jest-validate/package.json index 0bf56f0574e8..daf3375c061a 100644 --- a/packages/jest-validate/package.json +++ b/packages/jest-validate/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-watcher/package.json b/packages/jest-watcher/package.json index 4f403834b316..67d589d22ac7 100644 --- a/packages/jest-watcher/package.json +++ b/packages/jest-watcher/package.json @@ -7,6 +7,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest-worker/package.json b/packages/jest-worker/package.json index 486256933fcc..44420aac6235 100644 --- a/packages/jest-worker/package.json +++ b/packages/jest-worker/package.json @@ -12,6 +12,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/jest/package.json b/packages/jest/package.json index 7b7d8d0bf8b1..054e1c83f9eb 100644 --- a/packages/jest/package.json +++ b/packages/jest/package.json @@ -7,6 +7,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json", diff --git a/packages/pretty-format/package.json b/packages/pretty-format/package.json index 9fdb219008fd..2c1825cd5fb0 100644 --- a/packages/pretty-format/package.json +++ b/packages/pretty-format/package.json @@ -13,6 +13,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index a8b2e5661390..225c8c966752 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -7,6 +7,8 @@ "exports": { ".": { "types": "./build/index.d.ts", + "require": "./build/index.js", + "import": "./build/index.mjs", "default": "./build/index.js" }, "./package.json": "./package.json" diff --git a/scripts/build.mjs b/scripts/build.mjs index ddcf5a21b72a..ca9202c9d407 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -6,9 +6,11 @@ */ import {strict as assert} from 'assert'; +import {createRequire} from 'module'; import * as path from 'path'; import util from 'util'; import chalk from 'chalk'; +import dedent from 'dedent'; import fs from 'graceful-fs'; import webpack from 'webpack'; import { @@ -16,8 +18,11 @@ import { OK, createBuildConfigs, createWebpackConfigs, + typeOnlyPackages, } from './buildUtils.mjs'; +const require = createRequire(import.meta.url); + async function buildNodePackages() { process.stdout.write(chalk.inverse(' Bundling packages \n')); @@ -49,10 +54,40 @@ async function buildNodePackages() { } for (const {packageDir, pkg} of buildConfigs) { + const entryPointFile = path.resolve(packageDir, pkg.main); + assert.ok( - fs.existsSync(path.resolve(packageDir, pkg.main)), + fs.existsSync(entryPointFile), `Main file "${pkg.main}" in "${pkg.name}" should exist`, ); + + if (typeOnlyPackages.has(pkg.name)) { + continue; + } + + // TODO: can we get exports from a file from webpack's `stats`? + const cjsModule = require(entryPointFile); + const exportStatements = Object.keys(cjsModule) + .filter(name => name !== '__esModule' && name !== 'default') + .map(name => `export const ${name} = cjsModule.${name};`); + + if (cjsModule.default) { + exportStatements.push('export default cjsModule.default;'); + } + + if (exportStatements.length === 0) { + throw new Error(`No exports found in package ${pkg.name}`); + } + + const mjsEntryFile = entryPointFile.replace(/\.js$/, '.mjs'); + + const esSource = dedent` + import cjsModule from './index.js'; + + ${exportStatements.join('\n')} + `; + + await fs.promises.writeFile(mjsEntryFile, `${esSource}\n`); } process.stdout.write(`${OK}\n`); diff --git a/scripts/buildUtils.mjs b/scripts/buildUtils.mjs index 038dcfa83fda..60dcfef1b6dd 100644 --- a/scripts/buildUtils.mjs +++ b/scripts/buildUtils.mjs @@ -12,7 +12,6 @@ import {fileURLToPath} from 'url'; import chalk from 'chalk'; import fs from 'graceful-fs'; import {sync as readPkg} from 'read-pkg'; -import stringLength from 'string-length'; import webpack from 'webpack'; import nodeExternals from 'webpack-node-externals'; import babelConfig from '../babel.config.js'; @@ -26,6 +25,14 @@ const require = createRequire(import.meta.url); export const OK = chalk.reset.inverse.bold.green(' DONE '); export const ERROR = chalk.reset.inverse.bold.red(' BOOM '); +export const typeOnlyPackages = new Set([ + 'babel-preset-jest', + '@jest/environment', + '@jest/globals', + '@jest/types', + '@jest/test-globals', +]); + // Get absolute paths of all directories under packages/* export function getPackages() { const packages = fs @@ -58,11 +65,19 @@ export function getPackages() { '.': pkg.types == null ? pkg.main + : typeOnlyPackages.has(pkg.name) + ? /* eslint-disable sort-keys */ + { + types: pkg.types, + default: pkg.main, + } : { types: pkg.types, - // eslint-disable-next-line sort-keys + require: pkg.main, + import: pkg.main.replace(/\.js$/, '.mjs'), default: pkg.main, }, + /* eslint-enable */ './package.json': './package.json', ...Object.values(pkg.bin || {}).reduce( (mem, curr) => @@ -117,17 +132,6 @@ export function getPackages() { }); } -export function adjustToTerminalWidth(str) { - const columns = process.stdout.columns || 80; - const WIDTH = columns - stringLength(OK) + 1; - const strs = str.match(new RegExp(`(.{1,${WIDTH}})`, 'g')); - let lastString = strs[strs.length - 1]; - if (lastString.length < WIDTH) { - lastString += Array(WIDTH - lastString.length).join(chalk.dim('.')); - } - return strs.slice(0, -1).concat(lastString).join('\n'); -} - export function getPackagesWithTsConfig() { return getPackages().filter(p => fs.existsSync(path.resolve(p.packageDir, 'tsconfig.json')), diff --git a/yarn.lock b/yarn.lock index a83c21ec7e70..58bfe0a7727c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3012,7 +3012,6 @@ __metadata: rimraf: ^5.0.0 semver: ^7.5.3 slash: ^3.0.0 - string-length: ^4.0.1 strip-ansi: ^6.0.0 strip-json-comments: ^3.1.1 tempy: ^1.0.0