@nx/jest 16.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +22 -0
  3. package/README.md +63 -0
  4. package/executors.json +17 -0
  5. package/generators.json +34 -0
  6. package/index.d.ts +5 -0
  7. package/index.js +16 -0
  8. package/index.js.map +1 -0
  9. package/migrations.json +275 -0
  10. package/package.json +57 -0
  11. package/plugins/resolver.d.ts +1 -0
  12. package/plugins/resolver.js +56 -0
  13. package/plugins/resolver.js.map +1 -0
  14. package/preset/index.d.ts +2 -0
  15. package/preset/index.js +5 -0
  16. package/preset/index.js.map +1 -0
  17. package/preset/jest-preset.d.ts +2 -0
  18. package/preset/jest-preset.js +34 -0
  19. package/preset/jest-preset.js.map +1 -0
  20. package/src/executors/jest/compat.d.ts +2 -0
  21. package/src/executors/jest/compat.js +6 -0
  22. package/src/executors/jest/compat.js.map +1 -0
  23. package/src/executors/jest/jest.impl.d.ts +11 -0
  24. package/src/executors/jest/jest.impl.js +153 -0
  25. package/src/executors/jest/jest.impl.js.map +1 -0
  26. package/src/executors/jest/schema.d.ts +42 -0
  27. package/src/executors/jest/schema.json +218 -0
  28. package/src/executors/jest/summary.d.ts +7 -0
  29. package/src/executors/jest/summary.js +155 -0
  30. package/src/executors/jest/summary.js.map +1 -0
  31. package/src/generators/init/init.d.ts +5 -0
  32. package/src/generators/init/init.js +169 -0
  33. package/src/generators/init/init.js.map +1 -0
  34. package/src/generators/init/schema.d.ts +11 -0
  35. package/src/generators/init/schema.json +42 -0
  36. package/src/generators/jest-project/files/jest.config.ts__tmpl__ +16 -0
  37. package/src/generators/jest-project/files/src/test-setup.ts__tmpl__ +0 -0
  38. package/src/generators/jest-project/files/tsconfig.spec.json__tmpl__ +21 -0
  39. package/src/generators/jest-project/files-angular/jest.config.ts__tmpl__ +27 -0
  40. package/src/generators/jest-project/files-angular/src/test-setup.ts__tmpl__ +1 -0
  41. package/src/generators/jest-project/files-angular/tsconfig.spec.json__tmpl__ +22 -0
  42. package/src/generators/jest-project/jest-project.d.ts +4 -0
  43. package/src/generators/jest-project/jest-project.js +55 -0
  44. package/src/generators/jest-project/jest-project.js.map +1 -0
  45. package/src/generators/jest-project/lib/check-for-test-target.d.ts +3 -0
  46. package/src/generators/jest-project/lib/check-for-test-target.js +13 -0
  47. package/src/generators/jest-project/lib/check-for-test-target.js.map +1 -0
  48. package/src/generators/jest-project/lib/create-files.d.ts +3 -0
  49. package/src/generators/jest-project/lib/create-files.js +44 -0
  50. package/src/generators/jest-project/lib/create-files.js.map +1 -0
  51. package/src/generators/jest-project/lib/update-jestconfig.d.ts +3 -0
  52. package/src/generators/jest-project/lib/update-jestconfig.js +22 -0
  53. package/src/generators/jest-project/lib/update-jestconfig.js.map +1 -0
  54. package/src/generators/jest-project/lib/update-tsconfig.d.ts +3 -0
  55. package/src/generators/jest-project/lib/update-tsconfig.js +22 -0
  56. package/src/generators/jest-project/lib/update-tsconfig.js.map +1 -0
  57. package/src/generators/jest-project/lib/update-workspace.d.ts +3 -0
  58. package/src/generators/jest-project/lib/update-workspace.js +37 -0
  59. package/src/generators/jest-project/lib/update-workspace.js.map +1 -0
  60. package/src/generators/jest-project/schema.d.ts +23 -0
  61. package/src/generators/jest-project/schema.json +80 -0
  62. package/src/migrations/update-12-1-2/update-jest-preset-angular.d.ts +1 -0
  63. package/src/migrations/update-12-1-2/update-jest-preset-angular.js +55 -0
  64. package/src/migrations/update-12-1-2/update-jest-preset-angular.js.map +1 -0
  65. package/src/migrations/update-12-1-2/update-ts-jest.d.ts +2 -0
  66. package/src/migrations/update-12-1-2/update-ts-jest.js +36 -0
  67. package/src/migrations/update-12-1-2/update-ts-jest.js.map +1 -0
  68. package/src/migrations/update-12-4-0/add-test-environment-for-node.d.ts +2 -0
  69. package/src/migrations/update-12-4-0/add-test-environment-for-node.js +38 -0
  70. package/src/migrations/update-12-4-0/add-test-environment-for-node.js.map +1 -0
  71. package/src/migrations/update-12-4-0/update-jest-preset-angular.d.ts +25 -0
  72. package/src/migrations/update-12-4-0/update-jest-preset-angular.js +89 -0
  73. package/src/migrations/update-12-4-0/update-jest-preset-angular.js.map +1 -0
  74. package/src/migrations/update-12-6-0/update-base-jest-config.d.ts +2 -0
  75. package/src/migrations/update-12-6-0/update-base-jest-config.js +43 -0
  76. package/src/migrations/update-12-6-0/update-base-jest-config.js.map +1 -0
  77. package/src/migrations/update-13-1-2/update-tsconfigs-for-tests.d.ts +2 -0
  78. package/src/migrations/update-13-1-2/update-tsconfigs-for-tests.js +60 -0
  79. package/src/migrations/update-13-1-2/update-tsconfigs-for-tests.js.map +1 -0
  80. package/src/migrations/update-13-4-4/add-missing-root-babel-config.d.ts +2 -0
  81. package/src/migrations/update-13-4-4/add-missing-root-babel-config.js +43 -0
  82. package/src/migrations/update-13-4-4/add-missing-root-babel-config.js.map +1 -0
  83. package/src/migrations/update-14-0-0/update-jest-config-ext.d.ts +3 -0
  84. package/src/migrations/update-14-0-0/update-jest-config-ext.js +115 -0
  85. package/src/migrations/update-14-0-0/update-jest-config-ext.js.map +1 -0
  86. package/src/migrations/update-14-1-5/update-exports-jest-config.d.ts +7 -0
  87. package/src/migrations/update-14-1-5/update-exports-jest-config.js +66 -0
  88. package/src/migrations/update-14-1-5/update-exports-jest-config.js.map +1 -0
  89. package/src/migrations/update-14-6-0/update-configs-jest-28.d.ts +5 -0
  90. package/src/migrations/update-14-6-0/update-configs-jest-28.js +82 -0
  91. package/src/migrations/update-14-6-0/update-configs-jest-28.js.map +1 -0
  92. package/src/migrations/update-14-6-0/update-tests-jest-28.d.ts +24 -0
  93. package/src/migrations/update-14-6-0/update-tests-jest-28.js +158 -0
  94. package/src/migrations/update-14-6-0/update-tests-jest-28.js.map +1 -0
  95. package/src/migrations/update-15-0-0/add-jest-inputs.d.ts +2 -0
  96. package/src/migrations/update-15-0-0/add-jest-inputs.js +47 -0
  97. package/src/migrations/update-15-0-0/add-jest-inputs.js.map +1 -0
  98. package/src/migrations/update-15-8-0/update-configs-jest-29.d.ts +3 -0
  99. package/src/migrations/update-15-8-0/update-configs-jest-29.js +153 -0
  100. package/src/migrations/update-15-8-0/update-configs-jest-29.js.map +1 -0
  101. package/src/migrations/update-15-8-0/update-tests-jest-29.d.ts +5 -0
  102. package/src/migrations/update-15-8-0/update-tests-jest-29.js +64 -0
  103. package/src/migrations/update-15-8-0/update-tests-jest-29.js.map +1 -0
  104. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.d.ts +2 -0
  105. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js +13 -0
  106. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js.map +1 -0
  107. package/src/utils/ast-utils.d.ts +9 -0
  108. package/src/utils/ast-utils.js +33 -0
  109. package/src/utils/ast-utils.js.map +1 -0
  110. package/src/utils/config/find-root-jest-files.d.ts +3 -0
  111. package/src/utils/config/find-root-jest-files.js +21 -0
  112. package/src/utils/config/find-root-jest-files.js.map +1 -0
  113. package/src/utils/config/functions.d.ts +17 -0
  114. package/src/utils/config/functions.js +214 -0
  115. package/src/utils/config/functions.js.map +1 -0
  116. package/src/utils/config/get-jest-projects.d.ts +19 -0
  117. package/src/utils/config/get-jest-projects.js +64 -0
  118. package/src/utils/config/get-jest-projects.js.map +1 -0
  119. package/src/utils/config/update-config.d.ts +20 -0
  120. package/src/utils/config/update-config.js +84 -0
  121. package/src/utils/config/update-config.js.map +1 -0
  122. package/src/utils/versions.d.ts +9 -0
  123. package/src/utils/versions.js +13 -0
  124. package/src/utils/versions.js.map +1 -0
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateJestConfigExt = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
7
+ const path_1 = require("path");
8
+ const allowedExt = ['.ts', '.js'];
9
+ function updateTsConfig(tree, tsConfigPath) {
10
+ try {
11
+ (0, devkit_1.updateJson)(tree, tsConfigPath, (json) => {
12
+ json.exclude = Array.from(new Set([...(json.exclude || []), 'jest.config.ts']));
13
+ return json;
14
+ }, {
15
+ allowTrailingComma: true,
16
+ disallowComments: false,
17
+ });
18
+ }
19
+ catch (e) {
20
+ devkit_1.logger.warn((0, devkit_1.stripIndents) `Nx Unable to update ${tsConfigPath}. Please manually ignore the jest.config.ts file.`);
21
+ }
22
+ }
23
+ function addEsLintIgnoreComments(tree, filePath) {
24
+ if (tree.exists(filePath)) {
25
+ const contents = tree.read(filePath, 'utf-8');
26
+ if (!contents.startsWith('/* eslint-disable */')) {
27
+ tree.write(filePath, `/* eslint-disable */
28
+ ${contents}`);
29
+ }
30
+ }
31
+ }
32
+ function isJestConfigValid(tree, options) {
33
+ const configExt = (0, path_1.extname)(options.jestConfig);
34
+ if (!tree.exists(options.jestConfig) || !allowedExt.includes(configExt)) {
35
+ devkit_1.logger.debug(`unable to update file because it doesn't exist or is not a js or ts file. Config: ${options.jestConfig}. Exists?: ${tree.exists(options.jestConfig)}`);
36
+ return false;
37
+ }
38
+ return true;
39
+ }
40
+ function updateTsconfigSpec(tree, projectConfig, path, options = {
41
+ isNextWithProjectParse: false,
42
+ tsConfigPath: '',
43
+ }) {
44
+ (0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(projectConfig.root, path), (json) => {
45
+ json.include = Array.from(new Set([...(json.include || []), 'jest.config.ts']));
46
+ if (options.isNextWithProjectParse) {
47
+ const tsConfig = (0, devkit_1.readJson)(tree, options.tsConfigPath);
48
+ const tsConfigExclude = (tsConfig.exclude || []).filter((e) => e !== 'jest.config.ts');
49
+ json.exclude = Array.from(new Set([...(json.exclude || []), ...tsConfigExclude]));
50
+ }
51
+ return json;
52
+ });
53
+ }
54
+ function isNextWithProjectLint(projectConfig, esLintJson) {
55
+ var _a, _b, _c, _d;
56
+ const esLintOverrides = (_a = esLintJson === null || esLintJson === void 0 ? void 0 : esLintJson.overrides) === null || _a === void 0 ? void 0 : _a.find((o) => ['*.ts', '*.tsx', '*.js', '*.jsx'].every((ext) => o.files.includes(ext)));
57
+ // check if it's a next app and has a parserOptions.project set in the eslint overrides
58
+ return !!(((_c = (_b = projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.targets) === null || _b === void 0 ? void 0 : _b['build']) === null || _c === void 0 ? void 0 : _c.executor) === '@nrwl/next:build' &&
59
+ ((_d = esLintOverrides === null || esLintOverrides === void 0 ? void 0 : esLintOverrides.parserOptions) === null || _d === void 0 ? void 0 : _d.project));
60
+ }
61
+ function updateJestConfigExt(tree) {
62
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
63
+ if (tree.exists('jest.config.js')) {
64
+ tree.rename('jest.config.js', 'jest.config.ts');
65
+ }
66
+ const projects = (0, devkit_1.getProjects)(tree);
67
+ (0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (options, projectName, target, configuration) => {
68
+ const projectConfig = projects.get(projectName);
69
+ if (!options.jestConfig || !isJestConfigValid(tree, options)) {
70
+ return;
71
+ }
72
+ addEsLintIgnoreComments(tree, options.jestConfig);
73
+ const newJestConfigPath = options.jestConfig.replace('.js', '.ts');
74
+ tree.rename(options.jestConfig, newJestConfigPath);
75
+ const rootFiles = tree.children(projectConfig.root);
76
+ for (const fileName of rootFiles) {
77
+ if (fileName === 'tsconfig.json') {
78
+ const filePath = (0, devkit_1.joinPathFragments)(projectConfig.root, fileName);
79
+ const tsConfig = (0, devkit_1.readJson)(tree, filePath, {
80
+ allowTrailingComma: true,
81
+ disallowComments: false,
82
+ });
83
+ if (tsConfig.references) {
84
+ for (const { path } of tsConfig.references) {
85
+ // skip as editor.json should include everything anyway.
86
+ if (path.endsWith('tsconfig.editor.json')) {
87
+ continue;
88
+ }
89
+ if (path.endsWith('tsconfig.spec.json')) {
90
+ const eslintPath = (0, devkit_1.joinPathFragments)(projectConfig.root, '.eslintrc.json');
91
+ updateTsconfigSpec(tree, projectConfig, path, {
92
+ isNextWithProjectParse: tree.exists(eslintPath)
93
+ ? isNextWithProjectLint(projectConfig, (0, devkit_1.readJson)(tree, eslintPath))
94
+ : false,
95
+ tsConfigPath: filePath,
96
+ });
97
+ continue;
98
+ }
99
+ updateTsConfig(tree, (0, devkit_1.joinPathFragments)(projectConfig.root, path));
100
+ }
101
+ }
102
+ else {
103
+ updateTsConfig(tree, filePath);
104
+ }
105
+ }
106
+ }
107
+ projectConfig.targets[target].options.jestConfig = newJestConfigPath;
108
+ (0, devkit_1.updateProjectConfiguration)(tree, projectName, projectConfig);
109
+ });
110
+ yield (0, devkit_1.formatFiles)(tree);
111
+ });
112
+ }
113
+ exports.updateJestConfigExt = updateJestConfigExt;
114
+ exports.default = updateJestConfigExt;
115
+ //# sourceMappingURL=update-jest-config-ext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-jest-config-ext.js","sourceRoot":"","sources":["../../../../../../packages/jest/src/migrations/update-14-0-0/update-jest-config-ext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Tree } from '@nx/devkit';
2
+ export declare function updateExportsJestConfig(tree: Tree): import("@nx/devkit").GeneratorCallback;
3
+ export declare function updateRootFiles(tree: Tree): {
4
+ didUpdateRootPreset: boolean;
5
+ };
6
+ export declare function updateToDefaultExport(tree: Tree, filePath: string): void;
7
+ export default updateExportsJestConfig;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateToDefaultExport = exports.updateRootFiles = exports.updateExportsJestConfig = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
6
+ const versions_1 = require("../../utils/versions");
7
+ const tsquery_1 = require("@phenomnomnominal/tsquery");
8
+ function updateExportsJestConfig(tree) {
9
+ const { didUpdateRootPreset } = updateRootFiles(tree);
10
+ let shouldInstallTsNode = false;
11
+ (0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (options) => {
12
+ if (options.jestConfig && tree.exists(options.jestConfig)) {
13
+ if (options.jestConfig.endsWith('.ts')) {
14
+ updateToDefaultExport(tree, options.jestConfig);
15
+ shouldInstallTsNode = true;
16
+ }
17
+ const updatedImport = updateNxPresetImport(tree.read(options.jestConfig, 'utf-8'));
18
+ tree.write(options.jestConfig, updatedImport);
19
+ // jest.preset.ts => jest.preset.js
20
+ if (didUpdateRootPreset) {
21
+ const projectConfig = tree.read(options.jestConfig, 'utf-8');
22
+ const updatedConfig = projectConfig.replace(/(preset:\s*['"][.\/]*)(jest\.preset\.ts)(['"])/g, '$1jest.preset.js$3');
23
+ tree.write(options.jestConfig, updatedConfig);
24
+ }
25
+ }
26
+ });
27
+ return shouldInstallTsNode
28
+ ? (0, devkit_1.addDependenciesToPackageJson)(tree, {}, { 'ts-node': versions_1.tsNodeVersion })
29
+ : () => { };
30
+ }
31
+ exports.updateExportsJestConfig = updateExportsJestConfig;
32
+ function updateRootFiles(tree) {
33
+ let didUpdateRootPreset = false;
34
+ if (tree.exists('jest.config.ts')) {
35
+ updateToDefaultExport(tree, 'jest.config.ts');
36
+ }
37
+ if (tree.exists('jest.preset.ts')) {
38
+ // fix those who ran v14 migration where this was renamed.
39
+ tree.rename('jest.preset.ts', 'jest.preset.js');
40
+ didUpdateRootPreset = true;
41
+ }
42
+ if (tree.exists('jest.preset.js')) {
43
+ const newContents = updateNxPresetImport(tree.read('jest.preset.js', 'utf-8'));
44
+ tree.write('jest.preset.js', newContents);
45
+ }
46
+ return {
47
+ didUpdateRootPreset,
48
+ };
49
+ }
50
+ exports.updateRootFiles = updateRootFiles;
51
+ function updateNxPresetImport(fileContents) {
52
+ return fileContents.replace(/require\(['"]@nrwl\/jest\/preset['"]\)[;\s]*?[\n\r]/g, `require('@nrwl/jest/preset').default;
53
+ `);
54
+ }
55
+ function updateToDefaultExport(tree, filePath) {
56
+ const newConfig = tsquery_1.tsquery.replace(tree.read(filePath, 'utf-8'), 'ExpressionStatement BinaryExpression', (node) => {
57
+ if (node.left.getText() === 'module.exports') {
58
+ return `export default ${node.right.getText()}`;
59
+ }
60
+ return node.getText();
61
+ });
62
+ tree.write(filePath, newConfig);
63
+ }
64
+ exports.updateToDefaultExport = updateToDefaultExport;
65
+ exports.default = updateExportsJestConfig;
66
+ //# sourceMappingURL=update-exports-jest-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-exports-jest-config.js","sourceRoot":"","sources":["../../../../../../packages/jest/src/migrations/update-14-1-5/update-exports-jest-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export declare function updateConfigsJest28(tree: Tree): import("@nx/devkit").GeneratorCallback;
3
+ export declare function updateJestConfig(config: string): string;
4
+ export declare function checkDeps(tree: Tree): Record<string, string>;
5
+ export default updateConfigsJest28;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkDeps = exports.updateJestConfig = exports.updateConfigsJest28 = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
6
+ const tsquery_1 = require("@phenomnomnominal/tsquery");
7
+ const typescript_1 = require("typescript");
8
+ const find_root_jest_files_1 = require("../../utils/config/find-root-jest-files");
9
+ const jestVersion = '28.1.1';
10
+ const JASMINE_TEST_RUNNER = /(testRunner:\s*['"`])(jest-jasmine2)(['"`])/g;
11
+ const JSDOM_TEST_ENV = /(testEnvironment:\s*['"`])(jsdom)(['"`])/g;
12
+ function updateConfigsJest28(tree) {
13
+ let devDeps = checkDeps(tree);
14
+ (0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (options) => {
15
+ if (options.jestConfig && tree.exists(options.jestConfig)) {
16
+ const updatedConfig = updateJestConfig(tree.read(options.jestConfig, 'utf-8'));
17
+ tree.write(options.jestConfig, updatedConfig);
18
+ const projectConfigCheck = testFileForDep(updatedConfig);
19
+ devDeps = Object.assign(Object.assign({}, devDeps), projectConfigCheck);
20
+ }
21
+ });
22
+ return (0, devkit_1.addDependenciesToPackageJson)(tree, {}, devDeps);
23
+ }
24
+ exports.updateConfigsJest28 = updateConfigsJest28;
25
+ function updateJestConfig(config) {
26
+ let content = tsquery_1.tsquery.replace(config, 'PropertyAssignment:has(Identifier[name="testURL"])', (node) => {
27
+ var _a;
28
+ const value = (_a = node === null || node === void 0 ? void 0 : node.initializer) === null || _a === void 0 ? void 0 : _a.getText();
29
+ return `testEnvironmentOptions: {url: ${value}}`;
30
+ });
31
+ content = tsquery_1.tsquery.replace(content, 'PropertyAssignment > Identifier[name="extraGlobals"]', () => {
32
+ return 'sandboxInjectedGlobals';
33
+ });
34
+ return tsquery_1.tsquery.replace(content, 'PropertyAssignment:has(Identifier[name="timers"])', (node) => {
35
+ // must guard against non string properties as that means it's already been manually migrated
36
+ if ((node === null || node === void 0 ? void 0 : node.initializer) && (0, typescript_1.isStringLiteralLike)(node.initializer)) {
37
+ const value = node === null || node === void 0 ? void 0 : node.initializer.getText().trim();
38
+ // use .includes to ignore the different quotes (' " `)
39
+ if (value.includes('fake') || value.includes('modern')) {
40
+ return `fakeTimers: { enableGlobally: true }`;
41
+ }
42
+ if (value.includes('real')) {
43
+ return `fakeTimers: { enableGlobally: false }`;
44
+ }
45
+ if (value.includes('legacy')) {
46
+ return `fakeTimers: { enableGlobally: true, legacyFakeTimers: true }`;
47
+ }
48
+ }
49
+ });
50
+ }
51
+ exports.updateJestConfig = updateJestConfig;
52
+ function checkDeps(tree) {
53
+ const packageJson = (0, devkit_1.readJson)(tree, 'package.json');
54
+ let devDeps = {};
55
+ if (packageJson.devDependencies['jest-preset-angular']) {
56
+ devDeps['jest-environment-jsdom'] = jestVersion;
57
+ }
58
+ const rootJestConfig = (0, find_root_jest_files_1.findRootJestConfig)(tree);
59
+ if (rootJestConfig) {
60
+ const rootConfigCheck = testFileForDep(tree.read(rootJestConfig, 'utf-8'));
61
+ devDeps = Object.assign(Object.assign({}, devDeps), rootConfigCheck);
62
+ }
63
+ const rootJestPreset = (0, find_root_jest_files_1.findRootJestPreset)(tree);
64
+ if (rootJestPreset) {
65
+ const rootPresetCheck = testFileForDep(tree.read(rootJestPreset, 'utf-8'));
66
+ devDeps = Object.assign(Object.assign({}, devDeps), rootPresetCheck);
67
+ }
68
+ return devDeps;
69
+ }
70
+ exports.checkDeps = checkDeps;
71
+ function testFileForDep(config) {
72
+ const deps = {};
73
+ if (JASMINE_TEST_RUNNER.test(config)) {
74
+ deps['jest-jasmine2'] = jestVersion;
75
+ }
76
+ if (JSDOM_TEST_ENV.test(config)) {
77
+ deps['jest-environment-jsdom'] = jestVersion;
78
+ }
79
+ return deps;
80
+ }
81
+ exports.default = updateConfigsJest28;
82
+ //# sourceMappingURL=update-configs-jest-28.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-configs-jest-28.js","sourceRoot":"","sources":["../../../../../../packages/jest/src/migrations/update-14-6-0/update-configs-jest-28.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export declare function updateTestsJest28(tree: Tree): void;
3
+ /**
4
+ * jest.useFakeTimers('modern') -> jest.useFakeTimers()
5
+ * jest.useFakeTimers('legacy') -> jest.useFakeTimers({legacyFakeTimers: true})
6
+ * if legacyFakeTimers is true in config, then
7
+ * jest.useFakeTimers('modern') -> jest.useRealTimers({legacyFakeTimers: false})
8
+ */
9
+ export declare function updateJestTimers(fileContents: string, legacyFakeTimersInConfig: boolean): string;
10
+ /**
11
+ * this only applies to tests using @jest/globals
12
+ * jest.fn<Promise<string>, []>() -> jest.fn<() => Promise<string>>()
13
+ * jest.fn<number, string[]>() -> jest.fn<() => number>()
14
+ * jest.fn<ReturnType<typeof add>, Parameters<typeof add>>(); -> jest.fn<typeof add>()
15
+ */
16
+ export declare function updateJestFnMocks(fileContents: string): string;
17
+ /**
18
+ * import expect from 'expect' -> import { expect } from 'expect'
19
+ * const expect = require('expect') -> const { expect } = require('expect')
20
+ * import { mocked } from 'ts-jest/utils' => import { mocked } from 'jest-mock';
21
+ * const { mocked } = require('ts-jest/utils'); => const { mocked } = require('jest-mock');
22
+ */
23
+ export declare function updateJestImports(content: string): string;
24
+ export default updateTestsJest28;
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateJestImports = exports.updateJestFnMocks = exports.updateJestTimers = exports.updateTestsJest28 = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
6
+ const tsquery_1 = require("@phenomnomnominal/tsquery");
7
+ const ts = require("typescript");
8
+ function updateTestsJest28(tree) {
9
+ const testFilePatterns = /.*.(spec|test)\.(ts|js)x?/g;
10
+ const legacyTimers = /(timers:\s*['"`]legacy['"`])|(legacyFakeTimers:\s*true)/g;
11
+ (0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (options, projectName) => {
12
+ const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, projectName);
13
+ const isUsingLegacyTimers = options.jestConfig &&
14
+ tree.exists(options.jestConfig) &&
15
+ legacyTimers.test(tree.read(options.jestConfig, 'utf-8'));
16
+ (0, devkit_1.visitNotIgnoredFiles)(tree, projectConfig.root, (filePath) => {
17
+ if (!filePath.match(testFilePatterns)) {
18
+ return;
19
+ }
20
+ let fileContent = tree.read(filePath, 'utf-8');
21
+ fileContent = updateJestTimers(fileContent, isUsingLegacyTimers);
22
+ if (fileContent.includes('@jest/globals')) {
23
+ fileContent = updateJestFnMocks(fileContent);
24
+ }
25
+ fileContent = updateJestImports(fileContent);
26
+ tree.write(filePath, fileContent);
27
+ });
28
+ });
29
+ }
30
+ exports.updateTestsJest28 = updateTestsJest28;
31
+ /**
32
+ * jest.useFakeTimers('modern') -> jest.useFakeTimers()
33
+ * jest.useFakeTimers('legacy') -> jest.useFakeTimers({legacyFakeTimers: true})
34
+ * if legacyFakeTimers is true in config, then
35
+ * jest.useFakeTimers('modern') -> jest.useRealTimers({legacyFakeTimers: false})
36
+ */
37
+ function updateJestTimers(fileContents, legacyFakeTimersInConfig) {
38
+ return tsquery_1.tsquery.replace(fileContents, 'CallExpression', (node) => {
39
+ if (!(node === null || node === void 0 ? void 0 : node.getText().startsWith('jest.useFakeTimers'))) {
40
+ return;
41
+ }
42
+ const timerType = node.getText();
43
+ // will be modern or legacy with quotes
44
+ // just make sure it's included to ignore different quote types
45
+ if (timerType.includes('legacy')) {
46
+ return 'jest.useFakeTimers({ legacyFakeTimers: true })';
47
+ }
48
+ if (legacyFakeTimersInConfig) {
49
+ // using modern but have config set to legacy
50
+ return 'jest.useRealTimers({ legacyFakeTimers: false })';
51
+ }
52
+ // have to include space otherwise empty string will not remove the string literal
53
+ return 'jest.useFakeTimers()';
54
+ });
55
+ }
56
+ exports.updateJestTimers = updateJestTimers;
57
+ /**
58
+ * make sure using jest.fn<T>
59
+ */
60
+ function isTypedJestFnMock(node) {
61
+ return ts.isCallExpression(node) && node.getText().startsWith('jest.fn<');
62
+ }
63
+ /**
64
+ * has 2 args where the second is a tuple or array
65
+ * i.e.
66
+ * jest.fn<Promise<string>, []>()
67
+ * jest.fn<number, MyType[]>()
68
+ * jest.fn<number, [string, number, SomeType]>()
69
+ */
70
+ function isValid2Args(node) {
71
+ var _a, _b;
72
+ const r = (node === null || node === void 0 ? void 0 : node.typeArguments.length) === 2 &&
73
+ (((_a = node.typeArguments[1]) === null || _a === void 0 ? void 0 : _a.kind) === ts.SyntaxKind.TupleType ||
74
+ ((_b = node.typeArguments[1]) === null || _b === void 0 ? void 0 : _b.kind) === ts.SyntaxKind.ArrayType);
75
+ return r;
76
+ }
77
+ /**
78
+ * has 1 arg where the type is NOT a FunctionType
79
+ * if it's a function type then it's already using the correct syntax
80
+ * i.e.
81
+ * jest.fn<string>()
82
+ * jest.fn<() => Promise<string>>() is already valid, don't change it.
83
+ */
84
+ function isValid1Arg(node) {
85
+ var _a, _b;
86
+ const r = (node === null || node === void 0 ? void 0 : node.typeArguments.length) === 1 &&
87
+ ((_a = node.typeArguments[0]) === null || _a === void 0 ? void 0 : _a.kind) !== ts.SyntaxKind.FunctionType &&
88
+ ((_b = node.typeArguments[0]) === null || _b === void 0 ? void 0 : _b.kind) !== ts.SyntaxKind.TypeQuery;
89
+ return r;
90
+ }
91
+ /**
92
+ * has a type reference as a type args
93
+ * jest.fn<ReturnType<typeof add>, Parameters<typeof add>>();
94
+ */
95
+ function isValidTypeRef(node) {
96
+ var _a, _b;
97
+ const r = node.typeArguments[0].kind === ts.SyntaxKind.TypeReference &&
98
+ !!((_b = (_a = node.typeArguments) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.typeArguments);
99
+ return r;
100
+ }
101
+ /**
102
+ * has valid type args. prevent converting an already converted jest.fn<T>()
103
+ */
104
+ function isValidType(node) {
105
+ var _a, _b, _c;
106
+ const r = (node === null || node === void 0 ? void 0 : node.typeArguments.length) === 1 &&
107
+ (((_a = node.typeArguments[0]) === null || _a === void 0 ? void 0 : _a.kind) === ts.SyntaxKind.FunctionType ||
108
+ ((_b = node.typeArguments[0]) === null || _b === void 0 ? void 0 : _b.kind) === ts.SyntaxKind.TypeReference ||
109
+ ((_c = node.typeArguments[0]) === null || _c === void 0 ? void 0 : _c.kind) === ts.SyntaxKind.TypeQuery ||
110
+ node.parent.getText().includes('/** TODO:')); // has already been marked by a previous run.
111
+ return r;
112
+ }
113
+ /**
114
+ * this only applies to tests using @jest/globals
115
+ * jest.fn<Promise<string>, []>() -> jest.fn<() => Promise<string>>()
116
+ * jest.fn<number, string[]>() -> jest.fn<() => number>()
117
+ * jest.fn<ReturnType<typeof add>, Parameters<typeof add>>(); -> jest.fn<typeof add>()
118
+ */
119
+ function updateJestFnMocks(fileContents) {
120
+ return tsquery_1.tsquery.replace(fileContents, 'CallExpression', (node) => {
121
+ if (!isTypedJestFnMock(node) || isValidType(node)) {
122
+ return;
123
+ }
124
+ if (isValid2Args(node) || isValid1Arg(node)) {
125
+ return `${node.getText().split('<')[0]}<() => ${node.typeArguments[0].getText()}>()`;
126
+ }
127
+ if (isValidTypeRef(node)) {
128
+ const innerType = node.typeArguments[0]
129
+ .typeArguments;
130
+ return `${node.getText().split('<')[0]}<${innerType[0].getText()}>()`;
131
+ }
132
+ return `/** TODO: Update jest.fn<T>() type args for Jest v28 https://jestjs.io/docs/upgrading-to-jest28#jestfn */ ${node.getText()}`;
133
+ });
134
+ }
135
+ exports.updateJestFnMocks = updateJestFnMocks;
136
+ /**
137
+ * import expect from 'expect' -> import { expect } from 'expect'
138
+ * const expect = require('expect') -> const { expect } = require('expect')
139
+ * import { mocked } from 'ts-jest/utils' => import { mocked } from 'jest-mock';
140
+ * const { mocked } = require('ts-jest/utils'); => const { mocked } = require('jest-mock');
141
+ */
142
+ function updateJestImports(content) {
143
+ const mockUpdatedImports = tsquery_1.tsquery.replace(content, ':matches(ImportDeclaration:has(Identifier[name="mocked"]) StringLiteral[value="ts-jest/utils"], VariableStatement:has(Identifier[name="mocked"]) StringLiteral[value="ts-jest/utils"])', () => {
144
+ return "'jest-mock'";
145
+ });
146
+ return tsquery_1.tsquery.replace(mockUpdatedImports, ':matches(ImportDeclaration:has(StringLiteral[value="expect"]), VariableDeclaration:has(StringLiteral[value="expect"]))', (node) => {
147
+ if (ts.isImportDeclaration(node)) {
148
+ return `import { expect } from 'expect';`;
149
+ }
150
+ if (ts.isVariableDeclaration(node)) {
151
+ return `{ expect } = require('expect')`; // this query doesn't capture the ; so we don't need to add it in the replace.
152
+ }
153
+ return;
154
+ });
155
+ }
156
+ exports.updateJestImports = updateJestImports;
157
+ exports.default = updateTestsJest28;
158
+ //# sourceMappingURL=update-tests-jest-28.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-tests-jest-28.js","sourceRoot":"","sources":["../../../../../../packages/jest/src/migrations/update-14-6-0/update-tests-jest-28.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export default function (tree: Tree): Promise<void>;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const devkit_1 = require("@nx/devkit");
5
+ const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
6
+ function default_1(tree) {
7
+ var _a, _b, _c, _d;
8
+ var _e;
9
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
10
+ const nxJson = (0, devkit_1.readNxJson)(tree);
11
+ const jestTargets = getJestTargetNames(tree);
12
+ const hasProductionFileset = !!((_a = nxJson.namedInputs) === null || _a === void 0 ? void 0 : _a.production);
13
+ if (jestTargets.size > 0 && hasProductionFileset) {
14
+ const productionFileset = new Set(nxJson.namedInputs.production);
15
+ for (const exclusion of [
16
+ '!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)',
17
+ '!{projectRoot}/tsconfig.spec.json',
18
+ '!{projectRoot}/jest.config.[jt]s',
19
+ ]) {
20
+ productionFileset.add(exclusion);
21
+ }
22
+ nxJson.namedInputs.production = Array.from(productionFileset);
23
+ }
24
+ for (const targetName of jestTargets) {
25
+ (_b = nxJson.targetDefaults) !== null && _b !== void 0 ? _b : (nxJson.targetDefaults = {});
26
+ const jestTargetDefaults = ((_c = (_e = nxJson.targetDefaults)[targetName]) !== null && _c !== void 0 ? _c : (_e[targetName] = {}));
27
+ (_d = jestTargetDefaults.inputs) !== null && _d !== void 0 ? _d : (jestTargetDefaults.inputs = [
28
+ 'default',
29
+ hasProductionFileset ? '^production' : '^default',
30
+ ...(tree.exists('jest.preset.js')
31
+ ? ['{workspaceRoot}/jest.preset.js']
32
+ : []),
33
+ ]);
34
+ }
35
+ (0, devkit_1.updateNxJson)(tree, nxJson);
36
+ yield (0, devkit_1.formatFiles)(tree);
37
+ });
38
+ }
39
+ exports.default = default_1;
40
+ function getJestTargetNames(tree) {
41
+ const jestTargetNames = new Set();
42
+ (0, executor_options_utils_1.forEachExecutorOptions)(tree, '@nrwl/jest:jest', (_, __, target) => {
43
+ jestTargetNames.add(target);
44
+ });
45
+ return jestTargetNames;
46
+ }
47
+ //# sourceMappingURL=add-jest-inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-jest-inputs.js","sourceRoot":"","sources":["../../../../../../packages/jest/src/migrations/update-15-0-0/add-jest-inputs.ts"],"names":[],"mappings":";;;AAAA,uCAAyE;AACzE,6FAA0F;AAE1F,mBAA+B,IAAU;;;;QACvC,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,oBAAoB,GAAG,CAAC,CAAC,CAAA,MAAA,MAAM,CAAC,WAAW,0CAAE,UAAU,CAAA,CAAC;QAE9D,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,oBAAoB,EAAE;YAChD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACjE,KAAK,MAAM,SAAS,IAAI;gBACtB,uDAAuD;gBACvD,mCAAmC;gBACnC,kCAAkC;aACnC,EAAE;gBACD,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aAClC;YACD,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC/D;QAED,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,MAAA,MAAM,CAAC,cAAc,oCAArB,MAAM,CAAC,cAAc,GAAK,EAAE,EAAC;YAC7B,MAAM,kBAAkB,GAAG,aAAC,MAAM,CAAC,cAAc,EAAC,UAAU,wCAAV,UAAU,IAAM,EAAE,EAAC,CAAC;YAEtE,MAAA,kBAAkB,CAAC,MAAM,oCAAzB,kBAAkB,CAAC,MAAM,GAAK;gBAC5B,SAAS;gBACT,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU;gBACjD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;oBAC/B,CAAC,CAAC,CAAC,gCAAgC,CAAC;oBACpC,CAAC,CAAC,EAAE,CAAC;aACR,EAAC;SACH;QAED,IAAA,qBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE3B,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;;CACzB;AAlCD,4BAkCC;AAED,SAAS,kBAAkB,CAAC,IAAU;IACpC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,IAAA,+CAAsB,EAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;QAChE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export declare function updateConfigsJest29(tree: Tree): Promise<void>;
3
+ export default updateConfigsJest29;