@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.
Files changed (40) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +9 -4
  3. package/generators.json +2 -2
  4. package/index.d.ts +1 -1
  5. package/index.js +2 -1
  6. package/migrations.json +14 -0
  7. package/package.json +6 -4
  8. package/plugin.d.ts +1 -0
  9. package/plugin.js +6 -0
  10. package/src/generators/configuration/configuration.d.ts +1 -0
  11. package/src/generators/configuration/configuration.js +42 -7
  12. package/src/generators/configuration/files/jest.config.ts__tmpl__ +1 -1
  13. package/src/generators/configuration/files-angular/jest.config.ts__tmpl__ +1 -1
  14. package/src/generators/configuration/lib/create-files.d.ts +1 -1
  15. package/src/generators/configuration/lib/create-files.js +2 -1
  16. package/src/generators/configuration/lib/create-jest-config.d.ts +3 -0
  17. package/src/generators/configuration/lib/create-jest-config.js +102 -0
  18. package/src/generators/configuration/lib/ensure-dependencies.d.ts +3 -0
  19. package/src/generators/configuration/lib/ensure-dependencies.js +34 -0
  20. package/src/generators/configuration/lib/update-jestconfig.js +6 -1
  21. package/src/generators/configuration/lib/update-vscode-recommended-extensions.d.ts +2 -0
  22. package/src/generators/configuration/lib/update-vscode-recommended-extensions.js +18 -0
  23. package/src/generators/configuration/lib/update-workspace.js +1 -8
  24. package/src/generators/configuration/schema.d.ts +8 -0
  25. package/src/generators/configuration/schema.json +1 -1
  26. package/src/generators/init/init.d.ts +4 -3
  27. package/src/generators/init/init.js +66 -130
  28. package/src/generators/init/schema.d.ts +5 -8
  29. package/src/generators/init/schema.json +13 -20
  30. package/src/migrations/update-17-1-0/move-options-to-target-defaults.d.ts +2 -0
  31. package/src/migrations/update-17-1-0/move-options-to-target-defaults.js +117 -0
  32. package/src/plugins/plugin.d.ts +6 -0
  33. package/src/plugins/plugin.js +130 -0
  34. package/src/utils/config/find-root-jest-files.js +3 -0
  35. package/src/utils/config/get-jest-projects.d.ts +16 -1
  36. package/src/utils/config/get-jest-projects.js +98 -3
  37. package/src/utils/config/is-preset-cjs.d.ts +2 -0
  38. package/src/utils/config/is-preset-cjs.js +15 -0
  39. package/src/utils/versions.d.ts +1 -1
  40. package/src/utils/versions.js +1 -1
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2017-2023 Narwhal Technologies Inc.
3
+ Copyright (c) 2017-2024 Narwhal Technologies Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
package/README.md CHANGED
@@ -1,4 +1,9 @@
1
- <p style="text-align: center;"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx.png" width="600" alt="Nx - Smart, Fast and Extensible Build System"></p>
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, Fast and Extensible Build System
23
+ # Nx: Smart Monorepos · Fast CI
19
24
 
20
- Nx is a next generation build system with first class monorepo support and powerful integrations.
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, Fast and Extensible Build System"></a></p>
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#jestInitGenerator",
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",
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
- "@nx/devkit": "17.0.3",
48
- "@nx/js": "17.0.3",
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
- async function configurationGenerator(tree, schema) {
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 installTask = await (0, init_1.default)(tree, options);
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, update_workspace_1.updateWorkspace)(tree, options);
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 installTask;
87
+ return (0, devkit_1.runTasksInSerial)(...tasks);
53
88
  }
54
- exports.configurationGenerator = configurationGenerator;
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.js',<% if(setupFile !== 'none') { %>
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.js',
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,3 @@
1
+ import { type Tree } from '@nx/devkit';
2
+ import type { NormalizedJestProjectSchema } from '../schema';
3
+ export declare function createJestConfig(tree: Tree, options: Partial<NormalizedJestProjectSchema>, presetExt: 'cjs' | 'js'): Promise<void>;
@@ -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,3 @@
1
+ import { type Tree } from '@nx/devkit';
2
+ import type { NormalizedJestProjectSchema } from '../schema';
3
+ export declare function ensureDependencies(tree: Tree, options: Partial<NormalizedJestProjectSchema>): import("@nx/devkit").GeneratorCallback;
@@ -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
- return (rootConfig && host.read(rootConfig).toString().includes('getJestProjects()'));
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,2 @@
1
+ import { type Tree } from '@nx/devkit';
2
+ export declare function updateVsCodeRecommendedExtensions(host: Tree): void;
@@ -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.test = {
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,5 +1,5 @@
1
1
  {
2
- "$schema": "http://json-schema.org/schema",
2
+ "$schema": "https://json-schema.org/schema",
3
3
  "$id": "NxJestProject",
4
4
  "cli": "nx",
5
5
  "title": "Add Jest Configuration to a project",
@@ -1,4 +1,5 @@
1
- import { GeneratorCallback, Tree } from '@nx/devkit';
2
- import { JestInitSchema } from './schema';
3
- export declare function jestInitGenerator(tree: Tree, schema: JestInitSchema): Promise<GeneratorCallback>;
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;