UNPKG

@nx/angular

Version:

The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: - Integration with libraries such as Storybook, Jest, ESLint, Tailwind CSS, Playwright and Cypre

64 lines (61 loc) 3.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = default_1; const devkit_1 = require("@nx/devkit"); const projects_1 = require("../utils/projects"); async function default_1(tree) { const projects = await (0, projects_1.getProjectsFilteredByDependencies)([ 'npm:jest-preset-angular', ]); if (!projects.length) { return; } // The old 'jest-preset-angular/setup-jest' import only supported zone-based testing. // Zoneless support was added in jest-preset-angular v14.3.0 with the new // setupZonelessTestEnv function. Therefore, all projects using the old import // were zone-based and should be migrated to setupZoneTestEnv. // Regex patterns to match removed imports // Matches: import 'jest-preset-angular/setup-jest'; (with optional .js/.mjs extension) // Captures .mjs extension in group 3 to preserve it in the replacement const setupJestImportRegex = /^(\s*)import\s+(['"`])jest-preset-angular\/setup-jest(?:\.js)?(\.mjs)?\2;?\s*$/gm; // Matches: require('jest-preset-angular/setup-jest'); (with optional .js extension) // Note: .mjs is not supported with require() so we don't capture it const setupJestRequireRegex = /^(\s*)require\s*\(\s*(['"`])jest-preset-angular\/setup-jest(?:\.js)?\2\s*\)\s*;?\s*$/gm; for (const project of projects) { (0, devkit_1.visitNotIgnoredFiles)(tree, project.data.root, (file) => { if (!file.endsWith('.ts')) { return; } let content = tree.read(file, 'utf-8'); if (!content.includes('jest-preset-angular/setup-jest')) { return; } let wasUpdated = false; // Replace import statements, preserving .mjs extension if present setupJestImportRegex.lastIndex = 0; if (setupJestImportRegex.test(content)) { setupJestImportRegex.lastIndex = 0; content = content.replace(setupJestImportRegex, (_match, _leadingWhitespace, _quote, mjsExt) => { const modulePath = mjsExt ? 'jest-preset-angular/setup-env/zone/index.mjs' : 'jest-preset-angular/setup-env/zone'; return `import { setupZoneTestEnv } from '${modulePath}'; setupZoneTestEnv();`; }); wasUpdated = true; } // Replace require statements, keeping require syntax setupJestRequireRegex.lastIndex = 0; if (setupJestRequireRegex.test(content)) { setupJestRequireRegex.lastIndex = 0; content = content.replace(setupJestRequireRegex, `const { setupZoneTestEnv } = require('jest-preset-angular/setup-env/zone'); setupZoneTestEnv();`); wasUpdated = true; } if (wasUpdated) { tree.write(file, content); } }); } await (0, devkit_1.formatFiles)(tree); }