@nx/react 17.3.0-beta.2 → 17.3.0-beta.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/react",
3
- "version": "17.3.0-beta.2",
3
+ "version": "17.3.0-beta.4",
4
4
  "private": false,
5
5
  "description": "The React plugin for Nx contains executors and generators for managing React applications and libraries within an Nx workspace. It provides:\n\n\n- Integration with libraries such as Jest, Cypress, and Storybook.\n\n- Generators for applications, libraries, components, hooks, and more.\n\n- Library build support for publishing packages to npm or other registries.\n\n- Utilities for automatic workspace refactoring.",
6
6
  "repository": {
@@ -37,11 +37,11 @@
37
37
  "file-loader": "^6.2.0",
38
38
  "minimatch": "3.0.5",
39
39
  "tslib": "^2.3.0",
40
- "@nx/devkit": "17.3.0-beta.2",
41
- "@nx/js": "17.3.0-beta.2",
42
- "@nx/eslint": "17.3.0-beta.2",
43
- "@nx/web": "17.3.0-beta.2",
44
- "@nrwl/react": "17.3.0-beta.2"
40
+ "@nx/devkit": "17.3.0-beta.4",
41
+ "@nx/js": "17.3.0-beta.4",
42
+ "@nx/eslint": "17.3.0-beta.4",
43
+ "@nx/web": "17.3.0-beta.4",
44
+ "@nrwl/react": "17.3.0-beta.4"
45
45
  },
46
46
  "publishConfig": {
47
47
  "access": "public"
@@ -21,6 +21,7 @@ const chalk = require("chalk");
21
21
  const show_possible_warnings_1 = require("./lib/show-possible-warnings");
22
22
  const add_e2e_1 = require("./lib/add-e2e");
23
23
  const eslint_file_1 = require("@nx/eslint/src/generators/utils/eslint-file");
24
+ const js_1 = require("@nx/js");
24
25
  async function addLinting(host, options) {
25
26
  const tasks = [];
26
27
  if (options.linter === eslint_1.Linter.EsLint) {
@@ -58,19 +59,28 @@ async function applicationGeneratorInternal(host, schema) {
58
59
  const tasks = [];
59
60
  const options = await (0, normalize_options_1.normalizeOptions)(host, schema);
60
61
  (0, show_possible_warnings_1.showPossibleWarnings)(host, options);
62
+ const jsInitTask = await (0, js_1.initGenerator)(host, {
63
+ ...schema,
64
+ tsConfigName: schema.rootProject ? 'tsconfig.json' : 'tsconfig.base.json',
65
+ skipFormat: true,
66
+ });
67
+ tasks.push(jsInitTask);
61
68
  const initTask = await (0, init_1.default)(host, {
62
69
  ...options,
63
70
  skipFormat: true,
64
- skipHelperLibs: options.bundler === 'vite',
65
71
  });
66
72
  tasks.push(initTask);
67
73
  if (options.bundler === 'webpack') {
68
74
  const { webpackInitGenerator } = (0, devkit_1.ensurePackage)('@nx/webpack', versions_1.nxVersion);
69
75
  const webpackInitTask = await webpackInitGenerator(host, {
70
- uiFramework: 'react',
76
+ skipPackageJson: options.skipPackageJson,
71
77
  skipFormat: true,
72
78
  });
73
79
  tasks.push(webpackInitTask);
80
+ if (!options.skipPackageJson) {
81
+ const { ensureDependencies } = await Promise.resolve().then(() => require('@nx/webpack/src/utils/ensure-dependencies'));
82
+ tasks.push(ensureDependencies(host, { uiFramework: 'react' }));
83
+ }
74
84
  }
75
85
  if (!options.rootProject) {
76
86
  (0, create_ts_config_1.extractTsConfigBase)(host);
@@ -4,10 +4,10 @@ exports.addJest = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const versions_1 = require("../../../utils/versions");
6
6
  async function addJest(host, options) {
7
- const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/jest', versions_1.nxVersion);
8
- if (options.unitTestRunner !== 'jest') {
7
+ if (options.unitTestRunner === 'none') {
9
8
  return () => { };
10
9
  }
10
+ const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/jest', versions_1.nxVersion);
11
11
  return await configurationGenerator(host, {
12
12
  ...options,
13
13
  project: options.projectName,
@@ -4,7 +4,18 @@ exports.installCommonDependencies = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const versions_1 = require("../../../utils/versions");
6
6
  function installCommonDependencies(host, options) {
7
- const devDependencies = {};
7
+ if (options.skipPackageJson) {
8
+ return () => { };
9
+ }
10
+ const dependencies = {};
11
+ const devDependencies = {
12
+ '@types/node': versions_1.typesNodeVersion,
13
+ '@types/react': versions_1.typesReactVersion,
14
+ '@types/react-dom': versions_1.typesReactDomVersion,
15
+ };
16
+ if (options.bundler !== 'vite') {
17
+ dependencies['tslib'] = versions_1.tsLibVersion;
18
+ }
8
19
  // Vite requires style preprocessors to be installed manually.
9
20
  // `@nx/webpack` installs them automatically for now.
10
21
  if (options.bundler === 'vite' || options.unitTestRunner === 'vitest') {
@@ -28,6 +39,9 @@ function installCommonDependencies(host, options) {
28
39
  devDependencies['@babel/core'] = versions_1.babelCoreVersion;
29
40
  }
30
41
  }
42
+ if (options.unitTestRunner && options.unitTestRunner !== 'none') {
43
+ devDependencies['@testing-library/react'] = versions_1.testingLibraryReactVersion;
44
+ }
31
45
  return (0, devkit_1.addDependenciesToPackageJson)(host, {}, devDependencies);
32
46
  }
33
47
  exports.installCommonDependencies = installCommonDependencies;
@@ -14,6 +14,7 @@ function setDefaults(host, options) {
14
14
  nxJson.generators['@nx/react'] = nxJson.generators['@nx/react'] || {};
15
15
  const prev = { ...nxJson.generators['@nx/react'] };
16
16
  const appDefaults = {
17
+ babel: true,
17
18
  style: options.style,
18
19
  linter: options.linter,
19
20
  bundler: options.bundler,
@@ -5,5 +5,5 @@ import { CypressComponentConfigurationSchema } from './schema.d';
5
5
  * storybook components then use componentCypressGenerator instead.
6
6
  *
7
7
  */
8
- export declare function cypressComponentConfigGenerator(tree: Tree, options: CypressComponentConfigurationSchema): Promise<() => void>;
8
+ export declare function cypressComponentConfigGenerator(tree: Tree, options: CypressComponentConfigurationSchema): Promise<import("@nx/devkit").GeneratorCallback>;
9
9
  export default cypressComponentConfigGenerator;
@@ -32,9 +32,7 @@ async function cypressComponentConfigGenerator(tree, options) {
32
32
  if (!options.skipFormat) {
33
33
  await (0, devkit_1.formatFiles)(tree);
34
34
  }
35
- return () => {
36
- installTask();
37
- };
35
+ return installTask;
38
36
  }
39
37
  exports.cypressComponentConfigGenerator = cypressComponentConfigGenerator;
40
38
  exports.default = cypressComponentConfigGenerator;
@@ -1,4 +1,4 @@
1
- import { GeneratorCallback, Tree } from '@nx/devkit';
1
+ import { type GeneratorCallback, type Tree } from '@nx/devkit';
2
2
  import { InitSchema } from './schema';
3
3
  export declare function reactInitGenerator(host: Tree, schema: InitSchema): Promise<GeneratorCallback>;
4
4
  export default reactInitGenerator;
@@ -2,59 +2,20 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.reactInitGenerator = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const js_1 = require("@nx/js");
6
5
  const versions_1 = require("../../utils/versions");
7
- function setDefault(host) {
8
- const workspace = (0, devkit_1.readNxJson)(host);
9
- workspace.generators = workspace.generators || {};
10
- const reactGenerators = workspace.generators['@nx/react'] || {};
11
- const generators = {
12
- ...workspace.generators,
13
- '@nx/react': {
14
- ...reactGenerators,
15
- application: {
16
- ...reactGenerators.application,
17
- babel: true,
18
- },
19
- },
20
- };
21
- (0, devkit_1.updateNxJson)(host, { ...workspace, generators });
22
- }
23
- function updateDependencies(host, schema) {
24
- (0, devkit_1.removeDependenciesFromPackageJson)(host, ['@nx/react'], []);
25
- const dependencies = {
26
- react: versions_1.reactVersion,
27
- 'react-dom': versions_1.reactDomVersion,
28
- };
29
- if (!schema.skipHelperLibs) {
30
- dependencies['tslib'] = versions_1.tsLibVersion;
31
- }
32
- return (0, devkit_1.addDependenciesToPackageJson)(host, dependencies, {
33
- '@nx/react': versions_1.nxVersion,
34
- '@types/node': versions_1.typesNodeVersion,
35
- '@types/react': versions_1.typesReactVersion,
36
- '@types/react-dom': versions_1.typesReactDomVersion,
37
- '@testing-library/react': versions_1.testingLibraryReactVersion,
38
- });
39
- }
40
6
  async function reactInitGenerator(host, schema) {
41
7
  const tasks = [];
42
- const jsInitTask = await (0, js_1.initGenerator)(host, {
43
- ...schema,
44
- tsConfigName: schema.rootProject ? 'tsconfig.json' : 'tsconfig.base.json',
45
- skipFormat: true,
46
- });
47
- tasks.push(jsInitTask);
48
- setDefault(host);
49
- if (!schema.e2eTestRunner || schema.e2eTestRunner === 'cypress') {
50
- (0, devkit_1.ensurePackage)('@nx/cypress', versions_1.nxVersion);
51
- const { cypressInitGenerator } = (await Promise.resolve().then(() => require('@nx/cypress/src/generators/init/init')));
52
- const cypressTask = await cypressInitGenerator(host, schema);
53
- tasks.push(cypressTask);
54
- }
55
8
  if (!schema.skipPackageJson) {
56
- const installTask = updateDependencies(host, schema);
57
- tasks.push(installTask);
9
+ tasks.push((0, devkit_1.removeDependenciesFromPackageJson)(host, ['@nx/react'], []));
10
+ tasks.push((0, devkit_1.addDependenciesToPackageJson)(host, {
11
+ react: versions_1.reactVersion,
12
+ 'react-dom': versions_1.reactDomVersion,
13
+ }, {
14
+ '@nx/react': versions_1.nxVersion,
15
+ }));
16
+ }
17
+ if (!schema.skipFormat) {
18
+ await (0, devkit_1.formatFiles)(host);
58
19
  }
59
20
  return (0, devkit_1.runTasksInSerial)(...tasks);
60
21
  }
@@ -1,10 +1,4 @@
1
1
  export interface InitSchema {
2
- unitTestRunner?: 'jest' | 'vitest' | 'none';
3
- e2eTestRunner?: 'cypress' | 'playwright' | 'none';
4
2
  skipFormat?: boolean;
5
3
  skipPackageJson?: boolean;
6
- skipHelperLibs?: boolean;
7
- js?: boolean;
8
-
9
- rootProject?: boolean;
10
4
  }
@@ -6,18 +6,6 @@
6
6
  "cli": "nx",
7
7
  "type": "object",
8
8
  "properties": {
9
- "unitTestRunner": {
10
- "description": "Adds the specified unit test runner.",
11
- "type": "string",
12
- "enum": ["jest", "none"],
13
- "default": "jest"
14
- },
15
- "e2eTestRunner": {
16
- "description": "Adds the specified E2E test runner.",
17
- "type": "string",
18
- "enum": ["cypress", "playwright", "none"],
19
- "default": "cypress"
20
- },
21
9
  "skipFormat": {
22
10
  "description": "Skip formatting files.",
23
11
  "type": "boolean",
@@ -27,17 +15,6 @@
27
15
  "description": "Do not add dependencies to `package.json`.",
28
16
  "type": "boolean",
29
17
  "default": false
30
- },
31
- "skipHelperLibs": {
32
- "description": "Do not install tslib.",
33
- "type": "boolean",
34
- "default": false,
35
- "hidden": true
36
- },
37
- "js": {
38
- "type": "boolean",
39
- "default": false,
40
- "description": "Use JavaScript instead of TypeScript"
41
18
  }
42
19
  },
43
20
  "required": []
@@ -24,7 +24,7 @@ async function addLinting(host, options) {
24
24
  }
25
25
  let installTask = () => { };
26
26
  if (!options.skipPackageJson) {
27
- installTask = await (0, devkit_1.addDependenciesToPackageJson)(host, lint_1.extraEslintDependencies.dependencies, lint_1.extraEslintDependencies.devDependencies);
27
+ installTask = (0, devkit_1.addDependenciesToPackageJson)(host, lint_1.extraEslintDependencies.dependencies, lint_1.extraEslintDependencies.devDependencies);
28
28
  }
29
29
  return (0, devkit_1.runTasksInSerial)(lintTask, installTask);
30
30
  }
@@ -1,3 +1,4 @@
1
1
  import { Tree } from 'nx/src/generators/tree';
2
+ import { GeneratorCallback } from '@nx/devkit';
2
3
  import { NormalizedSchema } from '../schema';
3
- export declare function addRollupBuildTarget(host: Tree, options: NormalizedSchema): Promise<import("@nx/devkit").GeneratorCallback>;
4
+ export declare function addRollupBuildTarget(host: Tree, options: NormalizedSchema): Promise<GeneratorCallback>;
@@ -5,12 +5,20 @@ const devkit_1 = require("@nx/devkit");
5
5
  const maybe_js_1 = require("./maybe-js");
6
6
  const versions_1 = require("../../../utils/versions");
7
7
  async function addRollupBuildTarget(host, options) {
8
- const { rollupInitGenerator } = (0, devkit_1.ensurePackage)('@nx/rollup', versions_1.nxVersion);
9
- // These are used in `@nx/react/plugins/bundle-rollup`
10
- (0, devkit_1.addDependenciesToPackageJson)(host, {}, {
11
- '@rollup/plugin-url': versions_1.rollupPluginUrlVersion,
12
- '@svgr/rollup': versions_1.svgrRollupVersion,
13
- });
8
+ const tasks = [];
9
+ const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/rollup', versions_1.nxVersion);
10
+ tasks.push(await configurationGenerator(host, {
11
+ ...options,
12
+ project: options.name,
13
+ skipFormat: true,
14
+ }));
15
+ if (!options.skipPackageJson) {
16
+ // These are used in `@nx/react/plugins/bundle-rollup`
17
+ tasks.push((0, devkit_1.addDependenciesToPackageJson)(host, {}, {
18
+ '@rollup/plugin-url': versions_1.rollupPluginUrlVersion,
19
+ '@svgr/rollup': versions_1.svgrRollupVersion,
20
+ }));
21
+ }
14
22
  const { targets } = (0, devkit_1.readProjectConfiguration)(host, options.name);
15
23
  const external = ['react', 'react-dom'];
16
24
  if (options.style === '@emotion/styled') {
@@ -46,6 +54,6 @@ async function addRollupBuildTarget(host, options) {
46
54
  tags: options.parsedTags,
47
55
  targets,
48
56
  });
49
- return rollupInitGenerator(host, { ...options, skipFormat: true });
57
+ return (0, devkit_1.runTasksInSerial)(...tasks);
50
58
  }
51
59
  exports.addRollupBuildTarget = addRollupBuildTarget;
@@ -6,7 +6,15 @@ const add_swc_dependencies_1 = require("@nx/js/src/utils/swc/add-swc-dependencie
6
6
  const versions_1 = require("../../../utils/versions");
7
7
  function installCommonDependencies(host, options) {
8
8
  const tasks = [];
9
- const devDependencies = {};
9
+ const dependencies = {};
10
+ const devDependencies = {
11
+ '@types/node': versions_1.typesNodeVersion,
12
+ '@types/react': versions_1.typesReactVersion,
13
+ '@types/react-dom': versions_1.typesReactDomVersion,
14
+ };
15
+ if (options.bundler !== 'vite') {
16
+ dependencies['tslib'] = versions_1.tsLibVersion;
17
+ }
10
18
  // Vite requires style preprocessors to be installed manually.
11
19
  // `@nx/webpack` installs them automatically for now.
12
20
  // TODO(jack): Once we clean up webpack we can remove this check
@@ -20,10 +28,10 @@ function installCommonDependencies(host, options) {
20
28
  break;
21
29
  }
22
30
  }
23
- const baseInstallTask = (0, devkit_1.addDependenciesToPackageJson)(host, {
24
- react: versions_1.reactVersion,
25
- 'react-dom': versions_1.reactDomVersion,
26
- }, devDependencies);
31
+ if (options.unitTestRunner && options.unitTestRunner !== 'none') {
32
+ devDependencies['@testing-library/react'] = versions_1.testingLibraryReactVersion;
33
+ }
34
+ const baseInstallTask = (0, devkit_1.addDependenciesToPackageJson)(host, dependencies, devDependencies);
27
35
  tasks.push(baseInstallTask);
28
36
  if (options.compiler === 'swc') {
29
37
  tasks.push((0, add_swc_dependencies_1.addSwcDependencies)(host));
@@ -33,11 +33,14 @@ async function libraryGeneratorInternal(host, schema) {
33
33
  if (!options.component) {
34
34
  options.style = 'none';
35
35
  }
36
+ const jsInitTask = await (0, js_1.initGenerator)(host, {
37
+ ...schema,
38
+ skipFormat: true,
39
+ });
40
+ tasks.push(jsInitTask);
36
41
  const initTask = await (0, init_1.default)(host, {
37
42
  ...options,
38
- e2eTestRunner: 'none',
39
43
  skipFormat: true,
40
- skipHelperLibs: options.bundler === 'vite',
41
44
  });
42
45
  tasks.push(initTask);
43
46
  (0, devkit_1.addProjectConfiguration)(host, options.name, {
@@ -161,7 +164,7 @@ async function libraryGeneratorInternal(host, schema) {
161
164
  });
162
165
  }
163
166
  if (!options.skipPackageJson) {
164
- const installReactTask = await (0, install_common_dependencies_1.installCommonDependencies)(host, options);
167
+ const installReactTask = (0, install_common_dependencies_1.installCommonDependencies)(host, options);
165
168
  tasks.push(installReactTask);
166
169
  }
167
170
  const routeTask = (0, update_app_routes_1.updateAppRoutes)(host, options);
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setupSsrGenerator = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const init_1 = require("../init/init");
6
5
  const versions_1 = require("../../utils/versions");
7
6
  const ast_utils_1 = require("../../utils/ast-utils");
8
7
  const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
@@ -19,7 +18,6 @@ function readEntryFile(host, path) {
19
18
  };
20
19
  }
21
20
  async function setupSsrGenerator(tree, options) {
22
- await (0, init_1.default)(tree, { skipFormat: true });
23
21
  const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.project);
24
22
  const projectRoot = projectConfig.root;
25
23
  const appImportCandidates = [
@@ -2,3 +2,4 @@ import { StorybookConfigureSchema } from './schema';
2
2
  import { Tree } from '@nx/devkit';
3
3
  export declare function storybookConfigurationGenerator(host: Tree, schema: StorybookConfigureSchema): Promise<import("@nx/devkit").GeneratorCallback>;
4
4
  export default storybookConfigurationGenerator;
5
+ export declare function findWebpackConfig(tree: Tree, projectRoot: string): string | undefined;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.storybookConfigurationGenerator = void 0;
3
+ exports.findWebpackConfig = exports.storybookConfigurationGenerator = void 0;
4
4
  const stories_1 = require("../stories/stories");
5
5
  const devkit_1 = require("@nx/devkit");
6
6
  const versions_1 = require("../../utils/versions");
@@ -24,8 +24,7 @@ async function storybookConfigurationGenerator(host, schema) {
24
24
  const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/storybook', versions_1.nxVersion);
25
25
  let uiFramework = '@storybook/react-vite';
26
26
  const projectConfig = (0, devkit_1.readProjectConfiguration)(host, schema.project);
27
- if (projectConfig.targets['build']?.executor === '@nx/webpack:webpack' ||
28
- projectConfig.targets['build']?.executor === '@nrwl/webpack:webpack' ||
27
+ if (findWebpackConfig(host, projectConfig.root) ||
29
28
  projectConfig.targets['build']?.executor === '@nx/rollup:rollup' ||
30
29
  projectConfig.targets['build']?.executor === '@nrwl/rollup:rollup') {
31
30
  uiFramework = '@storybook/react-webpack5';
@@ -50,3 +49,13 @@ async function storybookConfigurationGenerator(host, schema) {
50
49
  }
51
50
  exports.storybookConfigurationGenerator = storybookConfigurationGenerator;
52
51
  exports.default = storybookConfigurationGenerator;
52
+ function findWebpackConfig(tree, projectRoot) {
53
+ const allowsExt = ['js', 'mjs', 'ts', 'cjs', 'mts', 'cts'];
54
+ for (const ext of allowsExt) {
55
+ const webpackConfigPath = (0, devkit_1.joinPathFragments)(projectRoot, `webpack.config.${ext}`);
56
+ if (tree.exists(webpackConfigPath)) {
57
+ return webpackConfigPath;
58
+ }
59
+ }
60
+ }
61
+ exports.findWebpackConfig = findWebpackConfig;