UNPKG

@nx/jest

Version:

The Nx Plugin for Jest contains executors and generators allowing your workspace to use the powerful Jest testing capabilities.

92 lines (91 loc) 3.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.versionMap = exports.latestVersions = exports.minSupportedTsJestVersion = exports.minSupportedJestVersion = void 0; exports.versions = versions; exports.getInstalledJestVersion = getInstalledJestVersion; exports.getInstalledJestVersionInfo = getInstalledJestVersionInfo; exports.getInstalledJestMajorVersion = getInstalledJestMajorVersion; const devkit_1 = require("@nx/devkit"); const internal_1 = require("@nx/devkit/internal"); const path_1 = require("path"); const semver_1 = require("semver"); const nxVersion = require((0, path_1.join)('@nx/jest', 'package.json')).version; exports.minSupportedJestVersion = '29.0.0'; exports.minSupportedTsJestVersion = '29.0.0'; // Jest is pinned to 30.3.x because jest-runtime@30.4.0 added a call to // `_moduleMocker.clearMocksOnScope()`, which doesn't exist on the // jest-mock@29 ModuleMocker that React Native's preset still feeds in // (via `@react-native/jest-preset`'s pinned `jest-environment-node@^29.7.0`). // Lift this once Meta ships a Jest-30-aware preset on react-native. exports.latestVersions = { nxVersion, jestVersion: '~30.3.0', babelJestVersion: '~30.3.0', jestTypesVersion: '~30.0.0', // ts-jest has not shipped a v30 — 29.x is its latest line and its peers // already span jest 29 and 30 (`jest: '^29.0.0 || ^30.0.0'`), so a jest-30 // workspace correctly stays on ts-jest 29.x. tsJestVersion: '^29.4.7', tslibVersion: '^2.3.0', swcJestVersion: '~0.2.38', typesNodeVersion: '^22.0.0', tsNodeVersion: '10.9.1', }; const supportedMajorVersions = [29, 30]; exports.versionMap = { 29: { nxVersion, jestVersion: '^29.7.0', babelJestVersion: '^29.7.0', jestTypesVersion: '^29.5.12', tsJestVersion: '^29.4.7', tslibVersion: '^2.3.0', swcJestVersion: '~0.2.36', typesNodeVersion: '18.16.9', tsNodeVersion: '10.9.1', }, 30: exports.latestVersions, }; function versions(tree) { const installedJestVersion = getInstalledJestVersion(tree); if (!installedJestVersion) { return exports.latestVersions; } const jestMajorVersion = (0, semver_1.major)(installedJestVersion); return exports.versionMap[jestMajorVersion] ?? exports.latestVersions; } function getInstalledJestVersion(tree) { if (!tree) { // Fall back to `@nx/jest`'s own jest when the workspace cwd can't resolve // one (e.g. inferred-plugin createNodes runs against an empty workspace). return (0, internal_1.getInstalledPackageVersion)('jest') ?? getJestVersionFromRequire(); } const installedVersion = (0, devkit_1.getDependencyVersionFromPackageJson)(tree, 'jest'); if (!installedVersion) { return null; } if (installedVersion === 'latest' || installedVersion === 'next') { return ((0, semver_1.clean)(exports.latestVersions.jestVersion) ?? (0, semver_1.coerce)(exports.latestVersions.jestVersion)?.version ?? null); } return (0, semver_1.clean)(installedVersion) ?? (0, semver_1.coerce)(installedVersion)?.version ?? null; } function getJestVersionFromRequire() { try { return require('jest').getVersion(); } catch { return null; } } function getInstalledJestVersionInfo(tree) { const version = getInstalledJestVersion(tree); return version ? { version, major: (0, semver_1.major)(version) } : { version: null, major: null }; } function getInstalledJestMajorVersion(tree) { const installedJestVersion = getInstalledJestVersion(tree); return installedJestVersion ? (0, semver_1.major)(installedJestVersion) : null; }