@nx/react 16.8.0-beta.1 → 16.8.0-beta.3

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": "16.8.0-beta.1",
3
+ "version": "16.8.0-beta.3",
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": {
@@ -31,11 +31,11 @@
31
31
  "migrations": "./migrations.json"
32
32
  },
33
33
  "dependencies": {
34
- "@nrwl/react": "16.8.0-beta.1",
35
- "@nx/devkit": "16.8.0-beta.1",
36
- "@nx/js": "16.8.0-beta.1",
37
- "@nx/linter": "16.8.0-beta.1",
38
- "@nx/web": "16.8.0-beta.1",
34
+ "@nrwl/react": "16.8.0-beta.3",
35
+ "@nx/devkit": "16.8.0-beta.3",
36
+ "@nx/js": "16.8.0-beta.3",
37
+ "@nx/linter": "16.8.0-beta.3",
38
+ "@nx/web": "16.8.0-beta.3",
39
39
  "@phenomnomnominal/tsquery": "~5.0.1",
40
40
  "@svgr/webpack": "^8.0.1",
41
41
  "chalk": "^4.1.0",
@@ -47,5 +47,5 @@
47
47
  "access": "public"
48
48
  },
49
49
  "type": "commonjs",
50
- "gitHead": "231a998e004c13e559c171ba6c164a9127886153"
50
+ "gitHead": "dcd48165a485bc8db57a1fb02b96a0772de3b7e9"
51
51
  }
@@ -22,6 +22,7 @@ const add_swc_dependencies_1 = require("@nx/js/src/utils/swc/add-swc-dependencie
22
22
  const chalk = require("chalk");
23
23
  const show_possible_warnings_1 = require("./lib/show-possible-warnings");
24
24
  const add_e2e_1 = require("./lib/add-e2e");
25
+ const eslint_file_1 = require("@nx/linter/src/generators/utils/eslint-file");
25
26
  function addLinting(host, options) {
26
27
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
27
28
  const tasks = [];
@@ -41,7 +42,9 @@ function addLinting(host, options) {
41
42
  skipPackageJson: options.skipPackageJson,
42
43
  });
43
44
  tasks.push(lintTask);
44
- (0, devkit_1.updateJson)(host, (0, devkit_1.joinPathFragments)(options.appProjectRoot, '.eslintrc.json'), lint_1.extendReactEslintJson);
45
+ if ((0, eslint_file_1.isEslintConfigSupported)(host)) {
46
+ (0, eslint_file_1.addExtendsToLintConfig)(host, options.appProjectRoot, 'plugin:@nx/react');
47
+ }
45
48
  if (!options.skipPackageJson) {
46
49
  const installTask = (0, devkit_1.addDependenciesToPackageJson)(host, lint_1.extraEslintDependencies.dependencies, lint_1.extraEslintDependencies.devDependencies);
47
50
  const addSwcTask = (0, add_swc_dependencies_1.addSwcDependencies)(host);
@@ -56,32 +56,36 @@ function createApplicationFiles(host, options) {
56
56
  ].filter(Boolean),
57
57
  });
58
58
  }
59
- else if (options.style === 'styled-components' ||
60
- options.style === '@emotion/styled' ||
61
- options.style === 'styled-jsx') {
62
- (0, devkit_1.writeJson)(host, `${options.appProjectRoot}/.swcrc`, {
59
+ else if (options.compiler === 'swc') {
60
+ const swcrc = {
63
61
  jsc: {
64
- experimental: {
65
- plugins: [
66
- options.style === 'styled-components'
67
- ? [
68
- '@swc/plugin-styled-components',
69
- {
70
- displayName: true,
71
- ssr: true,
72
- },
73
- ]
74
- : undefined,
75
- options.style === 'styled-jsx'
76
- ? ['@swc/plugin-styled-jsx', {}]
77
- : undefined,
78
- options.style === '@emotion/styled'
79
- ? ['@swc/plugin-emotion', {}]
80
- : undefined,
81
- ].filter(Boolean),
82
- },
62
+ target: 'es2016',
83
63
  },
84
- });
64
+ };
65
+ if (options.style === 'styled-components') {
66
+ swcrc.jsc.experimental = {
67
+ plugins: [
68
+ [
69
+ '@swc/plugin-styled-components',
70
+ {
71
+ displayName: true,
72
+ ssr: true,
73
+ },
74
+ ],
75
+ ],
76
+ };
77
+ }
78
+ else if (options.style === '@emotion/styled') {
79
+ swcrc.jsc.experimental = {
80
+ plugins: [['@swc/plugin-emotion', {}]],
81
+ };
82
+ }
83
+ else if (options.style === 'styled-jsx') {
84
+ swcrc.jsc.experimental = {
85
+ plugins: [['@swc/plugin-styled-jsx', {}]],
86
+ };
87
+ }
88
+ (0, devkit_1.writeJson)(host, `${options.appProjectRoot}/.swcrc`, swcrc);
85
89
  }
86
90
  }
87
91
  else if (options.bundler === 'rspack') {
@@ -32,20 +32,8 @@ function normalizeOptions(host, options, callingGenerator = '@nx/react:applicati
32
32
  });
33
33
  options.rootProject = appProjectRoot === '.';
34
34
  options.projectNameAndRootFormat = projectNameAndRootFormat;
35
- let e2eProjectName = 'e2e';
36
- let e2eProjectRoot = 'e2e';
37
- if (!options.rootProject) {
38
- const projectNameAndRoot = yield (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(host, {
39
- name: `${options.name}-e2e`,
40
- projectType: 'application',
41
- directory: options.directory,
42
- projectNameAndRootFormat: options.projectNameAndRootFormat,
43
- rootProject: options.rootProject,
44
- callingGenerator,
45
- });
46
- e2eProjectName = projectNameAndRoot.projectName;
47
- e2eProjectRoot = projectNameAndRoot.projectRoot;
48
- }
35
+ const e2eProjectName = options.rootProject ? 'e2e' : `${appProjectName}-e2e`;
36
+ const e2eProjectRoot = options.rootProject ? 'e2e' : `${appProjectRoot}-e2e`;
49
37
  const parsedTags = options.tags
50
38
  ? options.tags.split(',').map((s) => s.trim())
51
39
  : [];
@@ -10,6 +10,7 @@ const get_in_source_vitest_tests_template_1 = require("../../utils/get-in-source
10
10
  const versions_1 = require("../../utils/versions");
11
11
  const get_component_tests_1 = require("./get-component-tests");
12
12
  const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
13
+ const path_1 = require("path");
13
14
  function componentGenerator(host, schema) {
14
15
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
15
16
  const options = yield normalizeOptions(host, schema);
@@ -32,7 +33,7 @@ exports.componentGenerator = componentGenerator;
32
33
  function createComponentFiles(host, options) {
33
34
  const componentDir = (0, devkit_1.joinPathFragments)(options.projectSourceRoot, options.directory);
34
35
  const componentTests = (0, get_component_tests_1.getComponentTests)(options);
35
- (0, devkit_1.generateFiles)(host, (0, devkit_1.joinPathFragments)(__dirname, './files'), componentDir, Object.assign(Object.assign({}, options), { componentTests, inSourceVitestTests: (0, get_in_source_vitest_tests_template_1.getInSourceVitestTestsTemplate)(componentTests), tmpl: '' }));
36
+ (0, devkit_1.generateFiles)(host, (0, path_1.join)(__dirname, './files'), componentDir, Object.assign(Object.assign({}, options), { componentTests, inSourceVitestTests: (0, get_in_source_vitest_tests_template_1.getInSourceVitestTestsTemplate)(componentTests), tmpl: '' }));
36
37
  for (const c of host.listChanges()) {
37
38
  let deleteFile = false;
38
39
  if ((options.skipTests || options.inSourceTests) &&
@@ -66,7 +66,7 @@ function generateSpecsForComponents(tree, filePath) {
66
66
  }, [])
67
67
  .join(', ');
68
68
  const namedImportStatement = namedImports.length > 0 ? `, { ${namedImports} }` : '';
69
- (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), componentDir, {
69
+ (0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, 'files'), componentDir, {
70
70
  fileName,
71
71
  components,
72
72
  importStatement: defaultExport
@@ -6,6 +6,7 @@ const tslib_1 = require("tslib");
6
6
  const devkit_1 = require("@nx/devkit");
7
7
  const ast_utils_1 = require("../../utils/ast-utils");
8
8
  const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
9
+ const path_1 = require("path");
9
10
  function hookGenerator(host, schema) {
10
11
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
11
12
  const options = yield normalizeOptions(host, schema);
@@ -17,7 +18,7 @@ function hookGenerator(host, schema) {
17
18
  exports.hookGenerator = hookGenerator;
18
19
  function createFiles(host, options) {
19
20
  const hookDir = (0, devkit_1.joinPathFragments)(options.projectSourceRoot, options.directory);
20
- (0, devkit_1.generateFiles)(host, (0, devkit_1.joinPathFragments)(__dirname, './files'), hookDir, Object.assign(Object.assign({}, options), { tmpl: '' }));
21
+ (0, devkit_1.generateFiles)(host, (0, path_1.join)(__dirname, './files'), hookDir, Object.assign(Object.assign({}, options), { tmpl: '' }));
21
22
  for (const c of host.listChanges()) {
22
23
  let deleteFile = false;
23
24
  if (options.skipTests && /.*spec.ts/.test(c.path)) {
@@ -3,14 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hostGeneratorInternal = exports.hostGenerator = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const devkit_1 = require("@nx/devkit");
6
+ const update_module_federation_project_1 = require("../../rules/update-module-federation-project");
6
7
  const application_1 = require("../application/application");
7
8
  const normalize_options_1 = require("../application/lib/normalize-options");
8
- const update_module_federation_project_1 = require("../../rules/update-module-federation-project");
9
- const add_module_federation_files_1 = require("./lib/add-module-federation-files");
10
- const update_module_federation_e2e_project_1 = require("./lib/update-module-federation-e2e-project");
11
9
  const remote_1 = require("../remote/remote");
12
10
  const setup_ssr_1 = require("../setup-ssr/setup-ssr");
11
+ const add_module_federation_files_1 = require("./lib/add-module-federation-files");
12
+ const normalize_remote_1 = require("./lib/normalize-remote");
13
13
  const setup_ssr_for_host_1 = require("./lib/setup-ssr-for-host");
14
+ const update_module_federation_e2e_project_1 = require("./lib/update-module-federation-e2e-project");
14
15
  function hostGenerator(host, schema) {
15
16
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
16
17
  return hostGeneratorInternal(host, Object.assign({ projectNameAndRootFormat: 'derived' }, schema));
@@ -31,10 +32,11 @@ function hostGeneratorInternal(host, schema) {
31
32
  if (schema.remotes) {
32
33
  let remotePort = options.devServerPort + 1;
33
34
  for (const remote of schema.remotes) {
34
- remotesWithPorts.push({ name: remote, port: remotePort });
35
+ const remoteName = yield (0, normalize_remote_1.normalizeRemoteName)(host, remote, options);
36
+ remotesWithPorts.push({ name: remoteName, port: remotePort });
35
37
  yield (0, remote_1.default)(host, {
36
38
  name: remote,
37
- directory: options.directory,
39
+ directory: (0, normalize_remote_1.normalizeRemoteDirectory)(remote, options),
38
40
  style: options.style,
39
41
  unitTestRunner: options.unitTestRunner,
40
42
  e2eTestRunner: options.e2eTestRunner,
@@ -42,6 +44,7 @@ function hostGeneratorInternal(host, schema) {
42
44
  devServerPort: remotePort,
43
45
  ssr: options.ssr,
44
46
  skipFormat: true,
47
+ projectNameAndRootFormat: options.projectNameAndRootFormat,
45
48
  });
46
49
  remotePort++;
47
50
  }
@@ -3,11 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addModuleFederationFiles = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const path_1 = require("path");
6
- const normalize_options_1 = require("../../application/lib/normalize-options");
7
6
  function addModuleFederationFiles(host, options, defaultRemoteManifest) {
8
7
  const templateVariables = Object.assign(Object.assign(Object.assign({}, (0, devkit_1.names)(options.name)), options), { tmpl: '', remotes: defaultRemoteManifest.map(({ name, port }) => {
9
- const remote = (0, normalize_options_1.normalizeProjectName)(Object.assign(Object.assign({}, options), { name }));
10
- return Object.assign(Object.assign({}, (0, devkit_1.names)(remote)), { port });
8
+ return Object.assign(Object.assign({}, (0, devkit_1.names)(name)), { port });
11
9
  }) });
12
10
  // Module federation requires bootstrap code to be dynamically imported.
13
11
  // Renaming original entry file so we can use `import(./bootstrap)` in
@@ -0,0 +1,4 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { NormalizedSchema } from '../schema';
3
+ export declare function normalizeRemoteName(tree: Tree, remote: string, options: NormalizedSchema): Promise<string>;
4
+ export declare function normalizeRemoteDirectory(remote: string, options: NormalizedSchema): string;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeRemoteDirectory = exports.normalizeRemoteName = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const project_name_and_root_utils_1 = require("@nx/devkit/src/generators/project-name-and-root-utils");
7
+ function normalizeRemoteName(tree, remote, options) {
8
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
9
+ const { projectName: remoteName } = yield (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(tree, {
10
+ name: remote,
11
+ projectType: 'application',
12
+ directory: options.directory,
13
+ projectNameAndRootFormat: options.projectNameAndRootFormat,
14
+ callingGenerator: '@nx/react:host',
15
+ });
16
+ return remoteName;
17
+ });
18
+ }
19
+ exports.normalizeRemoteName = normalizeRemoteName;
20
+ function normalizeRemoteDirectory(remote, options) {
21
+ if (options.projectNameAndRootFormat === 'derived' || !options.directory) {
22
+ return options.directory;
23
+ }
24
+ /**
25
+ * With the `as-provided` format, the provided directory would be the root
26
+ * of the host application. Append the remote name to the host parent
27
+ * directory to get the remote directory.
28
+ */
29
+ return (0, devkit_1.joinPathFragments)(options.directory, '..', remote);
30
+ }
31
+ exports.normalizeRemoteDirectory = normalizeRemoteDirectory;
@@ -4,7 +4,6 @@ exports.setupSsrForHost = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const devkit_1 = require("@nx/devkit");
6
6
  const versions_1 = require("../../../utils/versions");
7
- const normalize_options_1 = require("../../application/lib/normalize-options");
8
7
  function setupSsrForHost(tree, options, appName, defaultRemoteManifest) {
9
8
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
10
9
  const tasks = [];
@@ -12,8 +11,7 @@ function setupSsrForHost(tree, options, appName, defaultRemoteManifest) {
12
11
  project.targets.serve.executor = '@nx/react:module-federation-ssr-dev-server';
13
12
  (0, devkit_1.updateProjectConfiguration)(tree, appName, project);
14
13
  (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/module-federation-ssr'), project.root, Object.assign(Object.assign({}, options), { remotes: defaultRemoteManifest.map(({ name, port }) => {
15
- const remote = (0, normalize_options_1.normalizeProjectName)(Object.assign(Object.assign({}, options), { name }));
16
- return Object.assign(Object.assign({}, (0, devkit_1.names)(remote)), { port });
14
+ return Object.assign(Object.assign({}, (0, devkit_1.names)(name)), { port });
17
15
  }), appName, tmpl: '', browserBuildOutputPath: project.targets.build.options.outputPath }));
18
16
  const installTask = (0, devkit_1.addDependenciesToPackageJson)(tree, {
19
17
  '@module-federation/node': versions_1.moduleFederationNodeVersion,
@@ -4,9 +4,9 @@ exports.addLinting = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const linter_1 = require("@nx/linter");
6
6
  const path_1 = require("nx/src/utils/path");
7
- const json_1 = require("nx/src/generators/utils/json");
8
7
  const devkit_1 = require("@nx/devkit");
9
8
  const lint_1 = require("../../../utils/lint");
9
+ const eslint_file_1 = require("@nx/linter/src/generators/utils/eslint-file");
10
10
  function addLinting(host, options) {
11
11
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
12
12
  if (options.linter === linter_1.Linter.EsLint) {
@@ -22,7 +22,9 @@ function addLinting(host, options) {
22
22
  skipPackageJson: options.skipPackageJson,
23
23
  setParserOptionsProject: options.setParserOptionsProject,
24
24
  });
25
- (0, json_1.updateJson)(host, (0, path_1.joinPathFragments)(options.projectRoot, '.eslintrc.json'), lint_1.extendReactEslintJson);
25
+ if ((0, eslint_file_1.isEslintConfigSupported)(host)) {
26
+ (0, eslint_file_1.addExtendsToLintConfig)(host, options.projectRoot, 'plugin:@nx/react');
27
+ }
26
28
  let installTask = () => { };
27
29
  if (!options.skipPackageJson) {
28
30
  installTask = yield (0, devkit_1.addDependenciesToPackageJson)(host, lint_1.extraEslintDependencies.dependencies, lint_1.extraEslintDependencies.devDependencies);
@@ -7,6 +7,7 @@ const init_1 = require("../init/init");
7
7
  const versions_1 = require("../../utils/versions");
8
8
  const ast_utils_1 = require("../../utils/ast-utils");
9
9
  const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
10
+ const path_1 = require("path");
10
11
  let tsModule;
11
12
  function readEntryFile(host, path) {
12
13
  if (!tsModule) {
@@ -126,7 +127,7 @@ function setupSsrGenerator(tree, options) {
126
127
  'server',
127
128
  ];
128
129
  }
129
- (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), projectRoot, {
130
+ (0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, 'files'), projectRoot, {
130
131
  tmpl: '',
131
132
  extraInclude: ((_e = options.extraInclude) === null || _e === void 0 ? void 0 : _e.length) > 0
132
133
  ? `"${options.extraInclude.join('", "')}",`
@@ -6,6 +6,7 @@ const devkit_1 = require("@nx/devkit");
6
6
  const versions_1 = require("../../utils/versions");
7
7
  const add_tailwind_style_imports_1 = require("./lib/add-tailwind-style-imports");
8
8
  const update_project_1 = require("./lib/update-project");
9
+ const path_1 = require("path");
9
10
  function setupTailwindGenerator(tree, options) {
10
11
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
11
12
  const tasks = [];
@@ -15,7 +16,7 @@ function setupTailwindGenerator(tree, options) {
15
16
  devkit_1.logger.info(`Skipping setup since there are existing PostCSS or Tailwind configuration files. For manual setup instructions, see https://nx.dev/guides/using-tailwind-css-in-react.`);
16
17
  return;
17
18
  }
18
- (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, './files'), project.root, {
19
+ (0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, './files'), project.root, {
19
20
  tmpl: '',
20
21
  });
21
22
  (0, add_tailwind_style_imports_1.addTailwindStyleImports)(tree, project, options);
@@ -1,4 +1,4 @@
1
- import type { Linter } from 'eslint';
1
+ import { Linter } from 'eslint';
2
2
  export declare const extraEslintDependencies: {
3
3
  dependencies: {};
4
4
  devDependencies: {
@@ -8,6 +8,9 @@ export declare const extraEslintDependencies: {
8
8
  'eslint-plugin-react-hooks': string;
9
9
  };
10
10
  };
11
+ /**
12
+ * @deprecated Use `addExtendsToLintConfig` from `@nx/linter` instead.
13
+ */
11
14
  export declare const extendReactEslintJson: (json: Linter.Config) => {
12
15
  ignorePatterns?: string | string[];
13
16
  root?: boolean;
@@ -16,7 +19,7 @@ export declare const extendReactEslintJson: (json: Linter.Config) => {
16
19
  [name: string]: boolean;
17
20
  };
18
21
  globals?: {
19
- [name: string]: boolean | "readonly" | "readable" | "writable" | "writeable";
22
+ [name: string]: boolean | "off" | "readonly" | "readable" | "writable" | "writeable";
20
23
  };
21
24
  noInlineConfig?: boolean;
22
25
  overrides?: Linter.ConfigOverride<Linter.RulesRecord>[];
package/src/utils/lint.js CHANGED
@@ -12,6 +12,9 @@ exports.extraEslintDependencies = {
12
12
  'eslint-plugin-react-hooks': versions_1.eslintPluginReactHooksVersion,
13
13
  },
14
14
  };
15
+ /**
16
+ * @deprecated Use `addExtendsToLintConfig` from `@nx/linter` instead.
17
+ */
15
18
  const extendReactEslintJson = (json) => {
16
19
  const { extends: pluginExtends } = json, config = tslib_1.__rest(json, ["extends"]);
17
20
  return Object.assign({ extends: ['plugin:@nx/react', ...(pluginExtends || [])] }, config);