@nx/react 0.0.0-pr-3-4212ebd → 0.0.0-pr-30457-3ca7e98

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": "0.0.0-pr-3-4212ebd",
3
+ "version": "0.0.0-pr-30457-3ca7e98",
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, Vitest, Playwright, 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": {
@@ -38,11 +38,11 @@
38
38
  "minimatch": "9.0.3",
39
39
  "picocolors": "^1.1.0",
40
40
  "tslib": "^2.3.0",
41
- "@nx/devkit": "0.0.0-pr-3-4212ebd",
42
- "@nx/js": "0.0.0-pr-3-4212ebd",
43
- "@nx/eslint": "0.0.0-pr-3-4212ebd",
44
- "@nx/web": "0.0.0-pr-3-4212ebd",
45
- "@nx/module-federation": "0.0.0-pr-3-4212ebd",
41
+ "@nx/devkit": "0.0.0-pr-30457-3ca7e98",
42
+ "@nx/js": "0.0.0-pr-30457-3ca7e98",
43
+ "@nx/eslint": "0.0.0-pr-30457-3ca7e98",
44
+ "@nx/web": "0.0.0-pr-30457-3ca7e98",
45
+ "@nx/module-federation": "0.0.0-pr-30457-3ca7e98",
46
46
  "express": "^4.21.2",
47
47
  "http-proxy-middleware": "^3.0.3",
48
48
  "semver": "^7.6.3"
@@ -46,25 +46,26 @@ async function applicationGeneratorInternal(tree, schema) {
46
46
  });
47
47
  tasks.push(jsInitTask);
48
48
  const options = await (0, normalize_options_1.normalizeOptions)(tree, schema);
49
- options.useReactRouter = options.routing
50
- ? options.useReactRouter ??
51
- (await (0, prompt_1.promptWhenInteractive)({
52
- name: 'response',
53
- message: 'Would you like to use react-router for server-side rendering?',
54
- type: 'autocomplete',
55
- choices: [
56
- {
57
- name: 'Yes',
58
- message: 'I want to use react-router [ https://reactrouter.com/start/framework/routing ]',
59
- },
60
- {
61
- name: 'No',
62
- message: 'I do not want to use react-router for server-side rendering',
63
- },
64
- ],
65
- initial: 0,
66
- }, { response: 'No' }).then((r) => r.response === 'Yes'))
67
- : false;
49
+ options.useReactRouter =
50
+ options.routing && options.bundler === 'vite'
51
+ ? options.useReactRouter ??
52
+ (await (0, prompt_1.promptWhenInteractive)({
53
+ name: 'response',
54
+ message: 'Would you like to use react-router for server-side rendering?',
55
+ type: 'autocomplete',
56
+ choices: [
57
+ {
58
+ name: 'Yes',
59
+ message: 'I want to use react-router [ https://reactrouter.com/start/framework/routing ]',
60
+ },
61
+ {
62
+ name: 'No',
63
+ message: 'I do not want to use react-router for server-side rendering',
64
+ },
65
+ ],
66
+ initial: 0,
67
+ }, { response: 'No' }).then((r) => r.response === 'Yes'))
68
+ : false;
68
69
  (0, show_possible_warnings_1.showPossibleWarnings)(tree, options);
69
70
  const initTask = await (0, init_1.default)(tree, {
70
71
  ...options,
@@ -167,7 +168,7 @@ async function applicationGeneratorInternal(tree, schema) {
167
168
  moduleResolution: 'bundler',
168
169
  }, options.linter === 'eslint'
169
170
  ? ['eslint.config.js', 'eslint.config.cjs', 'eslint.config.mjs']
170
- : undefined);
171
+ : undefined, options.useReactRouter ? 'app' : 'src');
171
172
  (0, sort_fields_1.sortPackageJsonFields)(tree, options.appProjectRoot);
172
173
  if (!options.skipFormat) {
173
174
  await (0, devkit_1.formatFiles)(tree);
@@ -1,4 +1,3 @@
1
- import * as React from "react";
2
1
  import { NavLink } from "react-router";
3
2
 
4
3
  export function AppNav() {
@@ -3,19 +3,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addJest = addJest;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const versions_1 = require("../../../utils/versions");
6
+ const node_path_1 = require("node:path");
6
7
  async function addJest(host, options) {
7
8
  if (options.unitTestRunner === 'none') {
8
9
  return () => { };
9
10
  }
10
11
  const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/jest', versions_1.nxVersion);
11
- return await configurationGenerator(host, {
12
+ await configurationGenerator(host, {
12
13
  ...options,
13
14
  project: options.projectName,
14
15
  supportTsx: true,
15
16
  skipSerializers: true,
16
- setupFile: 'none',
17
+ setupFile: options.useReactRouter ? 'react-router' : 'none',
17
18
  compiler: options.compiler,
18
19
  skipFormat: true,
19
20
  runtimeTsconfigFileName: 'tsconfig.app.json',
20
21
  });
22
+ if (options.useReactRouter) {
23
+ (0, devkit_1.updateJson)(host, (0, node_path_1.join)(options.appProjectRoot, 'tsconfig.spec.json'), (json) => {
24
+ json.include = json.include ?? [];
25
+ const reactRouterTestGlob = options.js
26
+ ? [
27
+ 'test/**/*.spec.jsx',
28
+ 'test/**/*.spec.js',
29
+ 'test/**/*.test.jsx',
30
+ 'test/**/*.test.js',
31
+ ]
32
+ : [
33
+ 'test/**/*.spec.tsx',
34
+ 'test/**/*.spec.ts',
35
+ 'test/**/*.test.tsx',
36
+ 'test/**/*.test.ts',
37
+ ];
38
+ return {
39
+ ...json,
40
+ include: Array.from(new Set([...json.include, ...reactRouterTestGlob])),
41
+ };
42
+ });
43
+ }
44
+ return () => { };
21
45
  }
@@ -31,7 +31,10 @@ async function normalizeOptions(host, options) {
31
31
  ? null
32
32
  : options.style;
33
33
  (0, assertion_1.assertValidStyle)(options.style);
34
- options.bundler = options.useReactRouter ? 'vite' : options.bundler;
34
+ (0, assertion_1.assertValidReactRouter)(options.useReactRouter, options.bundler);
35
+ if (options.useReactRouter && !options.bundler) {
36
+ options.bundler = 'vite';
37
+ }
35
38
  options.useReactRouter = options.routing ? options.useReactRouter : false;
36
39
  const normalized = {
37
40
  ...options,
@@ -190,7 +190,7 @@ async function libraryGeneratorInternal(host, schema) {
190
190
  });
191
191
  tasks.push(componentTask);
192
192
  }
193
- if (options.publishable || options.buildable) {
193
+ if (options.publishable) {
194
194
  const projectConfiguration = (0, devkit_1.readProjectConfiguration)(host, options.name);
195
195
  if (options.isUsingTsSolutionConfig) {
196
196
  await (0, add_release_config_1.addReleaseConfigForTsSolution)(host, options.name, projectConfiguration);
@@ -1 +1,3 @@
1
+ import { type Schema } from '../generators/application/schema';
1
2
  export declare function assertValidStyle(style: string): void;
3
+ export declare function assertValidReactRouter(reactRouter: boolean, bundler: Schema['bundler']): void;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assertValidStyle = assertValidStyle;
4
+ exports.assertValidReactRouter = assertValidReactRouter;
4
5
  const VALID_STYLES = [
5
6
  'css',
6
7
  'scss',
@@ -16,3 +17,8 @@ function assertValidStyle(style) {
16
17
  throw new Error(`Unsupported style option found: ${style}. Valid values are: "${VALID_STYLES.join('", "')}"`);
17
18
  }
18
19
  }
20
+ function assertValidReactRouter(reactRouter, bundler) {
21
+ if (reactRouter && bundler !== 'vite') {
22
+ throw new Error(`Unsupported bundler found: ${bundler}. React Router is only supported with 'vite'.`);
23
+ }
24
+ }
@@ -10,5 +10,5 @@ export declare function getBundlerFromTarget(found: FoundTarget, tree: Tree): Pr
10
10
  export declare function getActualBundler(tree: Tree, options: {
11
11
  buildTarget?: string;
12
12
  bundler?: 'vite' | 'webpack';
13
- }, found: FoundTarget): Promise<"vite" | "webpack">;
13
+ }, found: FoundTarget): Promise<"webpack" | "vite">;
14
14
  export declare function isComponent(tree: Tree, filePath: string): boolean;
@@ -1 +0,0 @@
1
- export declare function formatFile(content: any, ...values: any[]): string;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatFile = formatFile;
4
- const prettier_1 = require("prettier");
5
- const devkit_1 = require("@nx/devkit");
6
- function formatFile(content, ...values) {
7
- return (0, prettier_1.format)((0, devkit_1.stripIndents)(content, values), {
8
- singleQuote: true,
9
- parser: 'typescript',
10
- });
11
- }