diff --git a/.changeset/heavy-comics-begin.md b/.changeset/heavy-comics-begin.md new file mode 100644 index 00000000..7d7a7c6b --- /dev/null +++ b/.changeset/heavy-comics-begin.md @@ -0,0 +1,6 @@ +--- +"@fast-check/jest": patch +"@fast-check/worker": minor +--- + +💥(worker) Drop CommonJS support diff --git a/.github/workflows/build-status.yml b/.github/workflows/build-status.yml index a8a4772f..4a28936e 100644 --- a/.github/workflows/build-status.yml +++ b/.github/workflows/build-status.yml @@ -477,22 +477,22 @@ jobs: - name: Switch folder to CommonJS run: pnpm --filter {./packages/**} --parallel -c exec "cd test-types && ../../../.github/scripts/rename.sh ts cts" - name: Check in CommonJS mode - run: pnpm --filter {./packages/**} --filter '!@fast-check/ava' --filter '!@fast-check/packaged' --filter '!@fast-check/poisoning' --filter '!@fast-check/vitest' --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict *.cts" + run: pnpm --filter {./packages/**} --filter '!@fast-check/ava' --filter '!@fast-check/packaged' --filter '!@fast-check/poisoning' --filter '!@fast-check/vitest' --filter '!@fast-check/worker' --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict *.cts" - name: Check in CommonJS mode with NodeNext - run: pnpm --filter {./packages/**} --filter '!@fast-check/ava' --filter '!@fast-check/packaged' --filter '!@fast-check/poisoning' --filter '!@fast-check/vitest' --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict --module NodeNext --moduleResolution NodeNext *.cts" + run: pnpm --filter {./packages/**} --filter '!@fast-check/ava' --filter '!@fast-check/packaged' --filter '!@fast-check/poisoning' --filter '!@fast-check/vitest' --filter '!@fast-check/worker' --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict --module NodeNext --moduleResolution NodeNext *.cts" - name: Switch folder to ES Modules run: pnpm --filter {./packages/**} --parallel -c exec "cd test-types && ../../../.github/scripts/rename.sh cts mts" - name: Check in ES Modules mode run: | if [ "${{ matrix.ts-version }}" = "5.0" ] || [ "${{ matrix.ts-version }}" = "5.7" ]; then - pnpm --filter {./packages/**} --filter '!@fast-check/ava' --filter '!@fast-check/packaged' --filter '!@fast-check/poisoning' --filter '!@fast-check/vitest' --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict *.mts" + pnpm --filter {./packages/**} --filter '!@fast-check/ava' --filter '!@fast-check/packaged' --filter '!@fast-check/poisoning' --filter '!@fast-check/vitest' --filter '!@fast-check/worker' --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict *.mts" else - pnpm --filter {./packages/**} --filter '!@fast-check/ava' --filter '!@fast-check/packaged' --filter '!@fast-check/poisoning' --filter '!@fast-check/vitest' --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict *.mts" + pnpm --filter {./packages/**} --filter '!@fast-check/ava' --filter '!@fast-check/packaged' --filter '!@fast-check/poisoning' --filter '!@fast-check/vitest' --filter '!@fast-check/worker' --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict *.mts" fi - name: Check in ES Modules mode with NodeNext run: | if [ "${{ matrix.ts-version }}" = "5.0" ] || [ "${{ matrix.ts-version }}" = "5.7" ]; then - pnpm --filter {./packages/**} --filter '!@fast-check/ava' --filter '!@fast-check/packaged' --filter '!@fast-check/poisoning' --filter '!@fast-check/vitest' --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict --module NodeNext --moduleResolution NodeNext *.mts" + pnpm --filter {./packages/**} --filter '!@fast-check/ava' --filter '!@fast-check/packaged' --filter '!@fast-check/poisoning' --filter '!@fast-check/vitest' --filter '!@fast-check/worker' --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict --module NodeNext --moduleResolution NodeNext *.mts" else pnpm --filter {./packages/**} --parallel -c exec "cd test-types && pnpm --package typescript@${{ matrix.ts-version }} dlx tsc --noEmit --skipLibCheck --strict --module NodeNext --moduleResolution NodeNext *.mts" fi diff --git a/packages/jest/package.json b/packages/jest/package.json index 5ceae7f3..e901feab 100644 --- a/packages/jest/package.json +++ b/packages/jest/package.json @@ -36,10 +36,10 @@ "build": "pnpm run build:publish-cjs && pnpm run build:publish-esm && pnpm run build:publish-types", "build-ci": "pnpm run build", "build:publish-types": "tsc -p tsconfig.publish.types.json && tsc -p tsconfig.publish.types.json --outDir lib/cjs", - "build:publish-cjs": "tsc -p tsconfig.publish.json --module commonjs --moduleResolution node10 --outDir lib/cjs && cp package.cjs-template.json lib/cjs/package.json", + "build:publish-cjs": "tsc -p tsconfig.publish.json --module commonjs --moduleResolution bundler --outDir lib/cjs && cp package.cjs-template.json lib/cjs/package.json", "build:publish-esm": "tsc -p tsconfig.publish.json", - "test-bundle:cjs": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config test-bundle/jest.config.cjs", - "test-bundle:mjs": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config test-bundle/jest.config.mjs", + "test-bundle:cjs": "jest --config test-bundle/cjs/jest.config.cjs", + "test-bundle:mjs": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config test-bundle/mjs/jest.config.mjs", "test-bundle": "pnpm run test-bundle:cjs && pnpm run test-bundle:mjs", "typecheck": "tsc --noEmit" }, @@ -71,16 +71,18 @@ } }, "devDependencies": { + "@babel/plugin-transform-modules-commonjs": "^7.22.5", "@fast-check/jest": "workspace:*", "@fast-check/worker": "workspace:*", "@jest/expect": "^30.2.0", "@jest/globals": "^30.2.0", "@types/jest": "^30.0.0", "@types/node": "^24.10.13", + "babel-jest": "^30.2.0", "fast-check": "workspace:*", "jest": "^30.2.0", "jest-jasmine2": "^30.2.0", - "typescript": "~5.9.3", + "typescript": "6.0.0-beta", "vite": "^7.3.1", "vitest": "^4.0.18" }, diff --git a/packages/jest/test-bundle/cjs/babel.config.cjs b/packages/jest/test-bundle/cjs/babel.config.cjs new file mode 100644 index 00000000..865ee9c5 --- /dev/null +++ b/packages/jest/test-bundle/cjs/babel.config.cjs @@ -0,0 +1,3 @@ +module.exports = { + presets: [['@babel/preset-env', { targets: { node: 'current' }, modules: 'commonjs' }]], +}; diff --git a/packages/jest/test-bundle/cjs/jest.config.cjs b/packages/jest/test-bundle/cjs/jest.config.cjs new file mode 100644 index 00000000..fd592a20 --- /dev/null +++ b/packages/jest/test-bundle/cjs/jest.config.cjs @@ -0,0 +1,8 @@ +module.exports = { + testMatch: ['/*.spec.cjs'], + testTimeout: 20_000, + transform: { + '^.+\\.[t|j]sx?$': 'babel-jest', + }, + transformIgnorePatterns: ['/node_modules/(?!(?:@fast-check/worker)/)'], +}; diff --git a/packages/jest/test-bundle/main.spec.cjs b/packages/jest/test-bundle/cjs/main.spec.cjs similarity index 100% rename from packages/jest/test-bundle/main.spec.cjs rename to packages/jest/test-bundle/cjs/main.spec.cjs diff --git a/packages/jest/test-bundle/worker.spec.cjs b/packages/jest/test-bundle/cjs/worker.spec.cjs similarity index 100% rename from packages/jest/test-bundle/worker.spec.cjs rename to packages/jest/test-bundle/cjs/worker.spec.cjs diff --git a/packages/jest/test-bundle/jest.config.cjs b/packages/jest/test-bundle/jest.config.cjs deleted file mode 100644 index 7e7b2459..00000000 --- a/packages/jest/test-bundle/jest.config.cjs +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - testMatch: ['/*.spec.cjs'], - testTimeout: 20_000, -}; diff --git a/packages/jest/test-bundle/jest.config.mjs b/packages/jest/test-bundle/mjs/jest.config.mjs similarity index 100% rename from packages/jest/test-bundle/jest.config.mjs rename to packages/jest/test-bundle/mjs/jest.config.mjs diff --git a/packages/jest/test-bundle/main.spec.mjs b/packages/jest/test-bundle/mjs/main.spec.mjs similarity index 100% rename from packages/jest/test-bundle/main.spec.mjs rename to packages/jest/test-bundle/mjs/main.spec.mjs diff --git a/packages/jest/test-bundle/worker.spec.mjs b/packages/jest/test-bundle/mjs/worker.spec.mjs similarity index 100% rename from packages/jest/test-bundle/worker.spec.mjs rename to packages/jest/test-bundle/mjs/worker.spec.mjs diff --git a/packages/jest/test/jest-fast-check.spec.ts b/packages/jest/test/jest-fast-check.spec.ts index 6882ea44..7fe3e6fa 100644 --- a/packages/jest/test/jest-fast-check.spec.ts +++ b/packages/jest/test/jest-fast-check.spec.ts @@ -601,16 +601,30 @@ async function writeToFile( // Prepare jest config itself const jestConfigPath = path.join(specDirectory, jestConfigName); + const jestConfig = { + testMatch: [`/${specFileName}`], + transform: {}, + testTimeout: options.testTimeoutConfig, + testRunner: options.testRunner !== undefined ? 'jest-jasmine2' : undefined, + ...(useWorkers + ? { + transform: { '^.+\\.[t|j]sx?$': 'babel-jest' }, + transformIgnorePatterns: ['/node_modules/(?!(?:@fast-check/worker)/)'], + } + : {}), + }; + + // Prepare babel config (if needed) + const babelConfigPath = path.join(specDirectory, 'babel.config.cjs'); + const babelConfig = useWorkers + ? `module.exports = { presets: [['@babel/preset-env', { targets: { node: 'current' }, modules: 'commonjs' }]], };` + : undefined; // Write the files await Promise.all([ fs.writeFile(specFilePath, specContent), - fs.writeFile( - jestConfigPath, - `module.exports = { testMatch: ['/${specFileName}'], transform: {}, ${ - options.testTimeoutConfig !== undefined ? `testTimeout: ${options.testTimeoutConfig},` : '' - }${options.testRunner !== undefined ? `testRunner: 'jest-jasmine2',` : ''} };`, - ), + fs.writeFile(jestConfigPath, `module.exports = ${JSON.stringify(jestConfig)};`), + ...(babelConfig !== undefined ? [fs.writeFile(babelConfigPath, babelConfig)] : []), ]); return specDirectory; diff --git a/packages/jest/tsconfig.json b/packages/jest/tsconfig.json index 51bf44c3..e9135461 100644 --- a/packages/jest/tsconfig.json +++ b/packages/jest/tsconfig.json @@ -1,3 +1,6 @@ { - "extends": "../../tsconfig.common.json" + "extends": "../../tsconfig.common.json", + "compilerOptions": { + "types": ["node", "jest"] + } } diff --git a/packages/jest/tsconfig.publish.json b/packages/jest/tsconfig.publish.json index ed67654f..5eab9e4a 100644 --- a/packages/jest/tsconfig.publish.json +++ b/packages/jest/tsconfig.publish.json @@ -1,7 +1,9 @@ { "extends": "../../tsconfig.publish.json", "compilerOptions": { - "outDir": "lib/" + "rootDir": "src/", + "outDir": "lib/", + "types": ["node", "jest"] }, "include": ["src/"] } diff --git a/packages/jest/tsconfig.publish.types.json b/packages/jest/tsconfig.publish.types.json index e54be824..5a832334 100644 --- a/packages/jest/tsconfig.publish.types.json +++ b/packages/jest/tsconfig.publish.types.json @@ -1,7 +1,9 @@ { "extends": "../../tsconfig.publish.types.json", "compilerOptions": { - "outDir": "lib/" + "rootDir": "src/", + "outDir": "lib/", + "types": ["node", "jest"] }, "include": ["src/"] } diff --git a/packages/worker/package.cjs-template.json b/packages/worker/package.cjs-template.json deleted file mode 100644 index 5bbefffb..00000000 --- a/packages/worker/package.cjs-template.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "commonjs" -} diff --git a/packages/worker/package.json b/packages/worker/package.json index ac08ffdd..eb4cfaa7 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -3,31 +3,16 @@ "description": "Provide built-ins to run predicates directly within dedicated workers", "version": "0.5.0", "type": "module", - "main": "lib/main.js", "exports": { "./package.json": "./package.json", - ".": { - "require": { - "types": "./lib/cjs/main.d.ts", - "default": "./lib/cjs/main.js" - }, - "import": { - "types": "./lib/main.d.ts", - "default": "./lib/main.js" - } - } + ".": "./lib/main.js" }, - "module": "lib/main.js", - "types": "lib/main.d.ts", "files": [ "lib" ], "scripts": { - "build": "pnpm run build:publish-cjs && pnpm run build:publish-esm && pnpm run build:publish-types", - "build-ci": "pnpm run build", - "build:publish-types": "tsc -p tsconfig.publish.types.json && tsc -p tsconfig.publish.types.json --outDir lib/cjs", - "build:publish-cjs": "tsc -p tsconfig.publish.json --module commonjs --moduleResolution node10 --outDir lib/cjs && cp package.cjs-template.json lib/cjs/package.json", - "build:publish-esm": "tsc -p tsconfig.publish.json", + "build": "rolldown -c", + "build-ci": "rolldown -c", "test-bundle:cjs": "node test-bundle/main.cjs", "test-bundle:mjs": "node test-bundle/main.mjs", "test-bundle": "pnpm run test-bundle:cjs && pnpm run test-bundle:mjs", diff --git a/packages/worker/rolldown.config.js b/packages/worker/rolldown.config.js new file mode 100644 index 00000000..aa391e22 --- /dev/null +++ b/packages/worker/rolldown.config.js @@ -0,0 +1,4 @@ +import buildConfigFor from '../../rolldown.common.config.js'; +import pkg from './package.json' with { type: 'json' }; + +export default buildConfigFor(pkg, import.meta.dirname); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3762f9ef..840b61f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -200,6 +200,9 @@ importers: specifier: ^3.0.0 || ^4.0.0 version: link:../fast-check devDependencies: + '@babel/plugin-transform-modules-commonjs': + specifier: ^7.22.5 + version: 7.28.6(@babel/core@7.29.0) '@fast-check/jest': specifier: workspace:* version: 'link:' @@ -218,6 +221,9 @@ importers: '@types/node': specifier: ^24.10.13 version: 24.10.13 + babel-jest: + specifier: ^30.2.0 + version: 30.2.0(@babel/core@7.29.0) jest: specifier: ^30.2.0 version: 30.2.0(@types/node@24.10.13) @@ -225,8 +231,8 @@ importers: specifier: ^30.2.0 version: 30.2.0 typescript: - specifier: ~5.9.3 - version: 5.9.3 + specifier: 6.0.0-beta + version: 6.0.0-beta vite: specifier: ^7.3.1 version: 7.3.1(@types/node@24.10.13)(jiti@1.21.7)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2) @@ -9674,6 +9680,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@6.0.0-beta: + resolution: {integrity: sha512-CldZdztDpQRLM1HC6WDQjQkQN5Ub5zRau737a1diGh3lPmb9oRsaWHk1y5iqK0o7+1bNJ0oXfEGRkAogFZBL+Q==} + engines: {node: '>=14.17'} + hasBin: true + uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} @@ -22017,6 +22028,8 @@ snapshots: typescript@5.9.3: {} + typescript@6.0.0-beta: {} + uc.micro@2.1.0: {} ufo@1.6.3: {}