@nx/jest
Version:
92 lines (91 loc) • 3.74 kB
JavaScript
;
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;
}