@nx/jest 17.0.3 → 17.0.5
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.
- package/LICENSE +1 -1
- package/README.md +9 -4
- package/generators.json +2 -2
- package/index.d.ts +1 -1
- package/index.js +2 -1
- package/migrations.json +14 -0
- package/package.json +6 -4
- package/plugin.d.ts +1 -0
- package/plugin.js +6 -0
- package/src/generators/configuration/configuration.d.ts +1 -0
- package/src/generators/configuration/configuration.js +42 -7
- package/src/generators/configuration/files/jest.config.ts__tmpl__ +1 -1
- package/src/generators/configuration/files-angular/jest.config.ts__tmpl__ +1 -1
- package/src/generators/configuration/lib/create-files.d.ts +1 -1
- package/src/generators/configuration/lib/create-files.js +2 -1
- package/src/generators/configuration/lib/create-jest-config.d.ts +3 -0
- package/src/generators/configuration/lib/create-jest-config.js +102 -0
- package/src/generators/configuration/lib/ensure-dependencies.d.ts +3 -0
- package/src/generators/configuration/lib/ensure-dependencies.js +34 -0
- package/src/generators/configuration/lib/update-jestconfig.js +6 -1
- package/src/generators/configuration/lib/update-vscode-recommended-extensions.d.ts +2 -0
- package/src/generators/configuration/lib/update-vscode-recommended-extensions.js +18 -0
- package/src/generators/configuration/lib/update-workspace.js +1 -8
- package/src/generators/configuration/schema.d.ts +8 -0
- package/src/generators/configuration/schema.json +1 -1
- package/src/generators/init/init.d.ts +4 -3
- package/src/generators/init/init.js +66 -130
- package/src/generators/init/schema.d.ts +5 -8
- package/src/generators/init/schema.json +13 -20
- package/src/migrations/update-17-1-0/move-options-to-target-defaults.d.ts +2 -0
- package/src/migrations/update-17-1-0/move-options-to-target-defaults.js +117 -0
- package/src/plugins/plugin.d.ts +6 -0
- package/src/plugins/plugin.js +130 -0
- package/src/utils/config/find-root-jest-files.js +3 -0
- package/src/utils/config/get-jest-projects.d.ts +16 -1
- package/src/utils/config/get-jest-projects.js +98 -3
- package/src/utils/config/is-preset-cjs.d.ts +2 -0
- package/src/utils/config/is-preset-cjs.js +15 -0
- package/src/utils/versions.d.ts +1 -1
- package/src/utils/versions.js +1 -1
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
<p style="text-align: center;"
|
|
1
|
+
<p style="text-align: center;">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-dark.svg">
|
|
4
|
+
<img alt="Nx - Smart Monorepos · Fast CI" src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-light.svg" width="100%">
|
|
5
|
+
</picture>
|
|
6
|
+
</p>
|
|
2
7
|
|
|
3
8
|
<div style="text-align: center;">
|
|
4
9
|
|
|
@@ -15,9 +20,9 @@
|
|
|
15
20
|
|
|
16
21
|
<hr>
|
|
17
22
|
|
|
18
|
-
# Nx: Smart
|
|
23
|
+
# Nx: Smart Monorepos · Fast CI
|
|
19
24
|
|
|
20
|
-
Nx is a
|
|
25
|
+
Nx is a build system with built-in tooling and advanced CI capabilities. It helps you maintain and scale monorepos, both locally and on CI.
|
|
21
26
|
|
|
22
27
|
This package is a [Jest plugin for Nx](https://nx.dev/jest/overview).
|
|
23
28
|
|
|
@@ -59,5 +64,5 @@ npx nx@latest init
|
|
|
59
64
|
- [Blog Posts About Nx](https://blog.nrwl.io/nx/home)
|
|
60
65
|
|
|
61
66
|
<p style="text-align: center;"><a href="https://nx.dev/#learning-materials" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-courses-and-videos.svg"
|
|
62
|
-
width="100%" alt="Nx - Smart
|
|
67
|
+
width="100%" alt="Nx - Smart Monorepos · Fast CI"></a></p>
|
|
63
68
|
|
package/generators.json
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
"version": "0.1",
|
|
4
4
|
"generators": {
|
|
5
5
|
"init": {
|
|
6
|
-
"factory": "./src/generators/init/init#
|
|
6
|
+
"factory": "./src/generators/init/init#jestInitGeneratorInternal",
|
|
7
7
|
"schema": "./src/generators/init/schema.json",
|
|
8
8
|
"description": "Initialize the `@nrwl/jest` plugin.",
|
|
9
9
|
"aliases": ["ng-add"],
|
|
10
10
|
"hidden": true
|
|
11
11
|
},
|
|
12
12
|
"configuration": {
|
|
13
|
-
"factory": "./src/generators/configuration/configuration",
|
|
13
|
+
"factory": "./src/generators/configuration/configuration#configurationGeneratorInternal",
|
|
14
14
|
"schema": "./src/generators/configuration/schema.json",
|
|
15
15
|
"description": "Add Jest configuration to a project.",
|
|
16
16
|
"hidden": true
|
package/index.d.ts
CHANGED
|
@@ -5,4 +5,4 @@ export declare const jestProjectGenerator: typeof configurationGenerator;
|
|
|
5
5
|
export { addPropertyToJestConfig, removePropertyFromJestConfig, } from './src/utils/config/update-config';
|
|
6
6
|
export { jestConfigObjectAst } from './src/utils/config/functions';
|
|
7
7
|
export { jestInitGenerator } from './src/generators/init/init';
|
|
8
|
-
export { getJestProjects, getNestedJestProjects, } from './src/utils/config/get-jest-projects';
|
|
8
|
+
export { getJestProjects, getJestProjectsAsync, getNestedJestProjects, } from './src/utils/config/get-jest-projects';
|
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getNestedJestProjects = exports.getJestProjects = exports.jestInitGenerator = exports.jestConfigObjectAst = exports.removePropertyFromJestConfig = exports.addPropertyToJestConfig = exports.jestProjectGenerator = exports.configurationGenerator = void 0;
|
|
3
|
+
exports.getNestedJestProjects = exports.getJestProjectsAsync = exports.getJestProjects = exports.jestInitGenerator = exports.jestConfigObjectAst = exports.removePropertyFromJestConfig = exports.addPropertyToJestConfig = exports.jestProjectGenerator = exports.configurationGenerator = void 0;
|
|
4
4
|
const configuration_1 = require("./src/generators/configuration/configuration");
|
|
5
5
|
Object.defineProperty(exports, "configurationGenerator", { enumerable: true, get: function () { return configuration_1.configurationGenerator; } });
|
|
6
6
|
// Exported for backwards compatibility in case a plugin is using the old name.
|
|
@@ -15,4 +15,5 @@ var init_1 = require("./src/generators/init/init");
|
|
|
15
15
|
Object.defineProperty(exports, "jestInitGenerator", { enumerable: true, get: function () { return init_1.jestInitGenerator; } });
|
|
16
16
|
var get_jest_projects_1 = require("./src/utils/config/get-jest-projects");
|
|
17
17
|
Object.defineProperty(exports, "getJestProjects", { enumerable: true, get: function () { return get_jest_projects_1.getJestProjects; } });
|
|
18
|
+
Object.defineProperty(exports, "getJestProjectsAsync", { enumerable: true, get: function () { return get_jest_projects_1.getJestProjectsAsync; } });
|
|
18
19
|
Object.defineProperty(exports, "getNestedJestProjects", { enumerable: true, get: function () { return get_jest_projects_1.getNestedJestProjects; } });
|
package/migrations.json
CHANGED
|
@@ -29,6 +29,11 @@
|
|
|
29
29
|
"version": "16.5.0-beta.2",
|
|
30
30
|
"description": "Add test-setup.ts to ignored files in production input",
|
|
31
31
|
"implementation": "./src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore"
|
|
32
|
+
},
|
|
33
|
+
"move-options-to-target-defaults": {
|
|
34
|
+
"version": "17.1.0-beta.2",
|
|
35
|
+
"description": "Move jest executor options to nx.json targetDefaults",
|
|
36
|
+
"implementation": "./src/migrations/update-17-1-0/move-options-to-target-defaults"
|
|
32
37
|
}
|
|
33
38
|
},
|
|
34
39
|
"packageJsonUpdates": {
|
|
@@ -86,6 +91,15 @@
|
|
|
86
91
|
"alwaysAddToPackageJson": false
|
|
87
92
|
}
|
|
88
93
|
}
|
|
94
|
+
},
|
|
95
|
+
"17.2.0": {
|
|
96
|
+
"version": "17.2.0-beta.2",
|
|
97
|
+
"packages": {
|
|
98
|
+
"@types/node": {
|
|
99
|
+
"version": "18.16.9",
|
|
100
|
+
"alwaysAddToPackageJson": false
|
|
101
|
+
}
|
|
102
|
+
}
|
|
89
103
|
}
|
|
90
104
|
}
|
|
91
105
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nx/jest",
|
|
3
|
-
"version": "17.0.
|
|
3
|
+
"version": "17.0.5",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The Nx Plugin for Jest contains executors and generators allowing your workspace to use the powerful Jest testing capabilities.",
|
|
6
6
|
"repository": {
|
|
@@ -36,17 +36,19 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@jest/reporters": "^29.4.1",
|
|
38
38
|
"@jest/test-result": "^29.4.1",
|
|
39
|
+
"@nx/devkit": "17.0.5",
|
|
40
|
+
"@nx/js": "17.0.5",
|
|
39
41
|
"@phenomnomnominal/tsquery": "~5.0.1",
|
|
40
42
|
"chalk": "^4.1.0",
|
|
41
43
|
"identity-obj-proxy": "3.0.0",
|
|
42
44
|
"jest-config": "^29.4.1",
|
|
43
45
|
"jest-resolve": "^29.4.1",
|
|
44
46
|
"jest-util": "^29.4.1",
|
|
47
|
+
"minimatch": "9.0.3",
|
|
45
48
|
"resolve.exports": "1.1.0",
|
|
46
49
|
"tslib": "^2.3.0",
|
|
47
|
-
"
|
|
48
|
-
"@
|
|
49
|
-
"@nrwl/jest": "17.0.3"
|
|
50
|
+
"yargs-parser": "21.1.1",
|
|
51
|
+
"@nrwl/jest": "17.0.5"
|
|
50
52
|
},
|
|
51
53
|
"publishConfig": {
|
|
52
54
|
"access": "public"
|
package/plugin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createNodes, createDependencies, JestPluginOptions, } from './src/plugins/plugin';
|
package/plugin.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDependencies = exports.createNodes = void 0;
|
|
4
|
+
var plugin_1 = require("./src/plugins/plugin");
|
|
5
|
+
Object.defineProperty(exports, "createNodes", { enumerable: true, get: function () { return plugin_1.createNodes; } });
|
|
6
|
+
Object.defineProperty(exports, "createDependencies", { enumerable: true, get: function () { return plugin_1.createDependencies; } });
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { JestProjectSchema } from './schema';
|
|
2
2
|
import { Tree, GeneratorCallback } from '@nx/devkit';
|
|
3
3
|
export declare function configurationGenerator(tree: Tree, schema: JestProjectSchema): Promise<GeneratorCallback>;
|
|
4
|
+
export declare function configurationGeneratorInternal(tree: Tree, schema: JestProjectSchema): Promise<GeneratorCallback>;
|
|
4
5
|
export default configurationGenerator;
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.configurationGenerator = void 0;
|
|
3
|
+
exports.configurationGeneratorInternal = exports.configurationGenerator = void 0;
|
|
4
4
|
const init_1 = require("../init/init");
|
|
5
5
|
const check_for_test_target_1 = require("./lib/check-for-test-target");
|
|
6
6
|
const create_files_1 = require("./lib/create-files");
|
|
7
|
+
const create_jest_config_1 = require("./lib/create-jest-config");
|
|
8
|
+
const ensure_dependencies_1 = require("./lib/ensure-dependencies");
|
|
7
9
|
const update_tsconfig_1 = require("./lib/update-tsconfig");
|
|
10
|
+
const update_vscode_recommended_extensions_1 = require("./lib/update-vscode-recommended-extensions");
|
|
8
11
|
const update_workspace_1 = require("./lib/update-workspace");
|
|
9
12
|
const devkit_1 = require("@nx/devkit");
|
|
13
|
+
const js_1 = require("@nx/js");
|
|
14
|
+
const is_preset_cjs_1 = require("../../utils/config/is-preset-cjs");
|
|
10
15
|
const schemaDefaults = {
|
|
11
16
|
setupFile: 'none',
|
|
12
17
|
babelJest: false,
|
|
@@ -19,6 +24,11 @@ function normalizeOptions(tree, options) {
|
|
|
19
24
|
if (!options.testEnvironment) {
|
|
20
25
|
options.testEnvironment = 'jsdom';
|
|
21
26
|
}
|
|
27
|
+
const nxJson = (0, devkit_1.readNxJson)(tree);
|
|
28
|
+
const addPlugin = process.env.NX_ADD_PLUGINS !== 'false' &&
|
|
29
|
+
nxJson.useInferencePlugins !== false;
|
|
30
|
+
options.addPlugin ??= addPlugin;
|
|
31
|
+
options.targetName ??= 'test';
|
|
22
32
|
if (!options.hasOwnProperty('supportTsx')) {
|
|
23
33
|
options.supportTsx = false;
|
|
24
34
|
}
|
|
@@ -39,17 +49,42 @@ function normalizeOptions(tree, options) {
|
|
|
39
49
|
rootProject: project.root === '.' || project.root === '',
|
|
40
50
|
};
|
|
41
51
|
}
|
|
42
|
-
|
|
52
|
+
function configurationGenerator(tree, schema) {
|
|
53
|
+
return configurationGeneratorInternal(tree, { addPlugin: false, ...schema });
|
|
54
|
+
}
|
|
55
|
+
exports.configurationGenerator = configurationGenerator;
|
|
56
|
+
async function configurationGeneratorInternal(tree, schema) {
|
|
43
57
|
const options = normalizeOptions(tree, schema);
|
|
44
|
-
const
|
|
58
|
+
const tasks = [];
|
|
59
|
+
tasks.push(await (0, js_1.initGenerator)(tree, { ...schema, skipFormat: true }));
|
|
60
|
+
tasks.push(await (0, init_1.jestInitGenerator)(tree, { ...options, skipFormat: true }));
|
|
61
|
+
if (!schema.skipPackageJson) {
|
|
62
|
+
tasks.push((0, ensure_dependencies_1.ensureDependencies)(tree, options));
|
|
63
|
+
}
|
|
64
|
+
const presetExt = (0, is_preset_cjs_1.isPresetCjs)(tree) ? 'cjs' : 'js';
|
|
65
|
+
await (0, create_jest_config_1.createJestConfig)(tree, options, presetExt);
|
|
45
66
|
(0, check_for_test_target_1.checkForTestTarget)(tree, options);
|
|
46
|
-
(0, create_files_1.createFiles)(tree, options);
|
|
67
|
+
(0, create_files_1.createFiles)(tree, options, presetExt);
|
|
47
68
|
(0, update_tsconfig_1.updateTsConfig)(tree, options);
|
|
48
|
-
(0,
|
|
69
|
+
(0, update_vscode_recommended_extensions_1.updateVsCodeRecommendedExtensions)(tree);
|
|
70
|
+
const nxJson = (0, devkit_1.readNxJson)(tree);
|
|
71
|
+
const hasPlugin = nxJson.plugins?.some((p) => {
|
|
72
|
+
if (typeof p === 'string') {
|
|
73
|
+
return p === '@nx/jest/plugin' && options.targetName === 'test';
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
return (p.plugin === '@nx/jest/plugin' &&
|
|
77
|
+
(p.options?.targetName ?? 'test') ===
|
|
78
|
+
options.targetName);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
if (!hasPlugin || options.addExplicitTargets) {
|
|
82
|
+
(0, update_workspace_1.updateWorkspace)(tree, options);
|
|
83
|
+
}
|
|
49
84
|
if (!schema.skipFormat) {
|
|
50
85
|
await (0, devkit_1.formatFiles)(tree);
|
|
51
86
|
}
|
|
52
|
-
return
|
|
87
|
+
return (0, devkit_1.runTasksInSerial)(...tasks);
|
|
53
88
|
}
|
|
54
|
-
exports.
|
|
89
|
+
exports.configurationGeneratorInternal = configurationGeneratorInternal;
|
|
55
90
|
exports.default = configurationGenerator;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
<% if(js){ %>module.exports =<% } else{ %>export default<% } %> {
|
|
3
3
|
displayName: '<%= project %>',
|
|
4
|
-
preset: '<%= offsetFromRoot %>jest.preset
|
|
4
|
+
preset: '<%= offsetFromRoot %>jest.preset.<%= presetExt %>',<% if(setupFile !== 'none') { %>
|
|
5
5
|
setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],<% } %><% if(testEnvironment) { %>
|
|
6
6
|
testEnvironment: '<%= testEnvironment %>',<% } %><% if(skipSerializers){ %>
|
|
7
7
|
transform: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
<% if(js){ %>module.exports =<% } else{ %>export default<% } %> {
|
|
3
3
|
displayName: '<%= project %>',
|
|
4
|
-
preset: '<%= offsetFromRoot %>jest.preset
|
|
4
|
+
preset: '<%= offsetFromRoot %>jest.preset.<%= presetExt %>',
|
|
5
5
|
setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],<% if(testEnvironment) { %>
|
|
6
6
|
testEnvironment: '<%= testEnvironment %>',<% } %>
|
|
7
7
|
coverageDirectory: '<%= offsetFromRoot %>coverage/<%= projectRoot %>',
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Tree } from '@nx/devkit';
|
|
2
2
|
import { NormalizedJestProjectSchema } from '../schema';
|
|
3
|
-
export declare function createFiles(tree: Tree, options: NormalizedJestProjectSchema): void;
|
|
3
|
+
export declare function createFiles(tree: Tree, options: NormalizedJestProjectSchema, presetExt: 'cjs' | 'js'): void;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createFiles = void 0;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const path_1 = require("path");
|
|
6
|
-
function createFiles(tree, options) {
|
|
6
|
+
function createFiles(tree, options, presetExt) {
|
|
7
7
|
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
|
8
8
|
const filesFolder = options.setupFile === 'angular' ? '../files-angular' : '../files';
|
|
9
9
|
let transformer;
|
|
@@ -35,6 +35,7 @@ function createFiles(tree, options) {
|
|
|
35
35
|
rootProject: options.rootProject,
|
|
36
36
|
projectRoot: options.rootProject ? options.project : projectConfig.root,
|
|
37
37
|
offsetFromRoot: (0, devkit_1.offsetFromRoot)(projectConfig.root),
|
|
38
|
+
presetExt,
|
|
38
39
|
});
|
|
39
40
|
if (options.setupFile === 'none') {
|
|
40
41
|
tree.delete((0, path_1.join)(projectConfig.root, './src/test-setup.ts'));
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createJestConfig = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const project_configuration_utils_1 = require("nx/src/project-graph/utils/project-configuration-utils");
|
|
6
|
+
const find_root_jest_files_1 = require("../../../utils/config/find-root-jest-files");
|
|
7
|
+
async function createJestConfig(tree, options, presetExt) {
|
|
8
|
+
if (!tree.exists(`jest.preset.${presetExt}`)) {
|
|
9
|
+
// preset is always js file.
|
|
10
|
+
tree.write(`jest.preset.${presetExt}`, `
|
|
11
|
+
const nxPreset = require('@nx/jest/preset').default;
|
|
12
|
+
|
|
13
|
+
module.exports = { ...nxPreset }`);
|
|
14
|
+
}
|
|
15
|
+
if (options.rootProject) {
|
|
16
|
+
// we don't want any config to be made because the `configurationGenerator` will do it.
|
|
17
|
+
// will copy the template config file
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const rootJestPath = (0, find_root_jest_files_1.findRootJestConfig)(tree);
|
|
21
|
+
if (!rootJestPath) {
|
|
22
|
+
// if there's not root jest config, we will create one and return
|
|
23
|
+
// this can happen when:
|
|
24
|
+
// - root jest config was renamed => in which case there is migration needed
|
|
25
|
+
// - root project didn't have jest setup => again, no migration is needed
|
|
26
|
+
generateGlobalConfig(tree, options.js);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (tree.exists(rootJestPath)) {
|
|
30
|
+
// moving from root project config to monorepo-style config
|
|
31
|
+
const { nodes: projects } = await (0, devkit_1.createProjectGraphAsync)();
|
|
32
|
+
const projectConfigurations = Object.values(projects);
|
|
33
|
+
const rootProject = projectConfigurations.find((projectNode) => projectNode.data?.root === '.');
|
|
34
|
+
// root project might have been removed,
|
|
35
|
+
// if it's missing there's nothing to migrate
|
|
36
|
+
if (rootProject) {
|
|
37
|
+
const jestTarget = Object.entries(rootProject.data?.targets ?? {}).find(([_, t]) => ((t?.executor === '@nx/jest:jest' ||
|
|
38
|
+
t?.executor === '@nrwl/jest:jest') &&
|
|
39
|
+
t?.options?.jestConfig === rootJestPath) ||
|
|
40
|
+
(t?.executor === 'nx:run-commands' && t?.options?.command === 'jest'));
|
|
41
|
+
if (!jestTarget) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const [jestTargetName, jestTargetConfigInGraph] = jestTarget;
|
|
45
|
+
// if root project doesn't have jest target, there's nothing to migrate
|
|
46
|
+
const rootProjectConfig = (0, devkit_1.readProjectConfiguration)(tree, rootProject.name);
|
|
47
|
+
if (rootProjectConfig.targets?.['test']?.executor === 'nx:run-commands'
|
|
48
|
+
? rootProjectConfig.targets?.['test']?.command !== 'jest'
|
|
49
|
+
: rootProjectConfig.targets?.['test']?.options?.jestConfig !==
|
|
50
|
+
rootJestPath) {
|
|
51
|
+
// Jest target has already been updated
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const jestProjectConfig = `jest.config.${rootProjectConfig.projectType === 'application' ? 'app' : 'lib'}.${options.js ? 'js' : 'ts'}`;
|
|
55
|
+
tree.rename(rootJestPath, jestProjectConfig);
|
|
56
|
+
const nxJson = (0, devkit_1.readNxJson)(tree);
|
|
57
|
+
const targetDefaults = (0, project_configuration_utils_1.readTargetDefaultsForTarget)(jestTargetName, nxJson.targetDefaults, jestTargetConfigInGraph.executor);
|
|
58
|
+
const target = (rootProjectConfig.targets[jestTargetName] ??=
|
|
59
|
+
jestTargetConfigInGraph.executor === 'nx:run-commands'
|
|
60
|
+
? { command: `jest --config ${jestProjectConfig}` }
|
|
61
|
+
: {
|
|
62
|
+
executor: jestTargetConfigInGraph.executor,
|
|
63
|
+
options: {},
|
|
64
|
+
});
|
|
65
|
+
if (target.executor === '@nx/jest:jest') {
|
|
66
|
+
target.options.jestConfig = jestProjectConfig;
|
|
67
|
+
}
|
|
68
|
+
if (targetDefaults?.cache === undefined) {
|
|
69
|
+
target.cache = jestTargetConfigInGraph.cache;
|
|
70
|
+
}
|
|
71
|
+
if (targetDefaults?.inputs === undefined) {
|
|
72
|
+
target.inputs = jestTargetConfigInGraph.inputs;
|
|
73
|
+
}
|
|
74
|
+
if (targetDefaults?.outputs === undefined) {
|
|
75
|
+
target.outputs = jestTargetConfigInGraph.outputs;
|
|
76
|
+
}
|
|
77
|
+
if (targetDefaults?.dependsOn === undefined) {
|
|
78
|
+
target.dependsOn = jestTargetConfigInGraph.dependsOn;
|
|
79
|
+
}
|
|
80
|
+
(0, devkit_1.updateProjectConfiguration)(tree, rootProject.name, rootProjectConfig);
|
|
81
|
+
// generate new global config as it was move to project config or is missing
|
|
82
|
+
generateGlobalConfig(tree, options.js);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.createJestConfig = createJestConfig;
|
|
87
|
+
function generateGlobalConfig(tree, isJS) {
|
|
88
|
+
const contents = isJS
|
|
89
|
+
? (0, devkit_1.stripIndents) `
|
|
90
|
+
const { getJestProjectsAsync } = require('@nx/jest');
|
|
91
|
+
|
|
92
|
+
module.exports = async () => ({
|
|
93
|
+
projects: await getJestProjectsAsync()
|
|
94
|
+
});`
|
|
95
|
+
: (0, devkit_1.stripIndents) `
|
|
96
|
+
import { getJestProjectsAsync } from '@nx/jest';
|
|
97
|
+
|
|
98
|
+
export default async () => ({
|
|
99
|
+
projects: await getJestProjectsAsync()
|
|
100
|
+
});`;
|
|
101
|
+
tree.write(`jest.config.${isJS ? 'js' : 'ts'}`, contents);
|
|
102
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureDependencies = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const versions_1 = require("../../../utils/versions");
|
|
6
|
+
function ensureDependencies(tree, options) {
|
|
7
|
+
const dependencies = {
|
|
8
|
+
tslib: versions_1.tslibVersion,
|
|
9
|
+
};
|
|
10
|
+
const devDeps = {
|
|
11
|
+
// because the default jest-preset uses ts-jest,
|
|
12
|
+
// jest will throw an error if it's not installed
|
|
13
|
+
// even if not using it in overriding transformers
|
|
14
|
+
'ts-jest': versions_1.tsJestVersion,
|
|
15
|
+
};
|
|
16
|
+
if (options.testEnvironment !== 'none') {
|
|
17
|
+
devDeps[`jest-environment-${options.testEnvironment}`] = versions_1.jestVersion;
|
|
18
|
+
}
|
|
19
|
+
if (!options.js) {
|
|
20
|
+
devDeps['ts-node'] = versions_1.tsNodeVersion;
|
|
21
|
+
devDeps['@types/jest'] = versions_1.jestTypesVersion;
|
|
22
|
+
devDeps['@types/node'] = versions_1.typesNodeVersion;
|
|
23
|
+
}
|
|
24
|
+
if (options.compiler === 'babel' || options.babelJest) {
|
|
25
|
+
devDeps['babel-jest'] = versions_1.babelJestVersion;
|
|
26
|
+
// in some cases @nx/js will not already be present i.e. node only projects
|
|
27
|
+
devDeps['@nx/js'] = versions_1.nxVersion;
|
|
28
|
+
}
|
|
29
|
+
else if (options.compiler === 'swc') {
|
|
30
|
+
devDeps['@swc/jest'] = versions_1.swcJestVersion;
|
|
31
|
+
}
|
|
32
|
+
return (0, devkit_1.addDependenciesToPackageJson)(tree, dependencies, devDeps);
|
|
33
|
+
}
|
|
34
|
+
exports.ensureDependencies = ensureDependencies;
|
|
@@ -6,7 +6,12 @@ const update_config_1 = require("../../../utils/config/update-config");
|
|
|
6
6
|
const devkit_1 = require("@nx/devkit");
|
|
7
7
|
function isUsingUtilityFunction(host) {
|
|
8
8
|
const rootConfig = (0, find_root_jest_files_1.findRootJestConfig)(host);
|
|
9
|
-
|
|
9
|
+
if (!rootConfig) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
const rootConfigContent = host.read(rootConfig, 'utf-8');
|
|
13
|
+
return (rootConfigContent.includes('getJestProjects()') ||
|
|
14
|
+
rootConfigContent.includes('getJestProjectsAsync()'));
|
|
10
15
|
}
|
|
11
16
|
function updateJestConfig(host, options) {
|
|
12
17
|
if (isUsingUtilityFunction(host)) {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateVsCodeRecommendedExtensions = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
function updateVsCodeRecommendedExtensions(host) {
|
|
6
|
+
if (!host.exists('.vscode/extensions.json')) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
(0, devkit_1.updateJson)(host, '.vscode/extensions.json', (json) => {
|
|
10
|
+
json.recommendations = json.recommendations || [];
|
|
11
|
+
const extension = 'firsttris.vscode-jest-runner';
|
|
12
|
+
if (!json.recommendations.includes(extension)) {
|
|
13
|
+
json.recommendations.push(extension);
|
|
14
|
+
}
|
|
15
|
+
return json;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
exports.updateVsCodeRecommendedExtensions = updateVsCodeRecommendedExtensions;
|
|
@@ -7,7 +7,7 @@ function updateWorkspace(tree, options) {
|
|
|
7
7
|
if (!projectConfig.targets) {
|
|
8
8
|
projectConfig.targets = {};
|
|
9
9
|
}
|
|
10
|
-
projectConfig.targets.
|
|
10
|
+
projectConfig.targets[options.targetName] = {
|
|
11
11
|
executor: '@nx/jest:jest',
|
|
12
12
|
outputs: [
|
|
13
13
|
options.rootProject
|
|
@@ -16,13 +16,6 @@ function updateWorkspace(tree, options) {
|
|
|
16
16
|
],
|
|
17
17
|
options: {
|
|
18
18
|
jestConfig: (0, devkit_1.joinPathFragments)((0, devkit_1.normalizePath)(projectConfig.root), `jest.config.${options.js ? 'js' : 'ts'}`),
|
|
19
|
-
passWithNoTests: true,
|
|
20
|
-
},
|
|
21
|
-
configurations: {
|
|
22
|
-
ci: {
|
|
23
|
-
ci: true,
|
|
24
|
-
codeCoverage: true,
|
|
25
|
-
},
|
|
26
19
|
},
|
|
27
20
|
};
|
|
28
21
|
(0, devkit_1.updateProjectConfiguration)(tree, options.project, projectConfig);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export interface JestProjectSchema {
|
|
2
2
|
project: string;
|
|
3
|
+
targetName?: string;
|
|
3
4
|
supportTsx?: boolean;
|
|
4
5
|
/**
|
|
5
6
|
* @deprecated use setupFile instead
|
|
@@ -13,9 +14,16 @@ export interface JestProjectSchema {
|
|
|
13
14
|
*/
|
|
14
15
|
babelJest?: boolean;
|
|
15
16
|
skipFormat?: boolean;
|
|
17
|
+
|
|
18
|
+
addPlugin?: boolean;
|
|
16
19
|
compiler?: 'tsc' | 'babel' | 'swc';
|
|
17
20
|
skipPackageJson?: boolean;
|
|
18
21
|
js?: boolean;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
addExplicitTargets?: boolean;
|
|
19
27
|
}
|
|
20
28
|
|
|
21
29
|
export type NormalizedJestProjectSchema = JestProjectSchema & {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { GeneratorCallback, Tree } from '@nx/devkit';
|
|
2
|
-
import { JestInitSchema } from './schema';
|
|
3
|
-
export declare function jestInitGenerator(tree: Tree,
|
|
1
|
+
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
2
|
+
import type { JestInitSchema } from './schema';
|
|
3
|
+
export declare function jestInitGenerator(tree: Tree, options: JestInitSchema): Promise<GeneratorCallback>;
|
|
4
|
+
export declare function jestInitGeneratorInternal(tree: Tree, options: JestInitSchema): Promise<GeneratorCallback>;
|
|
4
5
|
export default jestInitGenerator;
|