@nx/workspace 20.4.0-canary.20250123-7524356 → 20.4.0-canary.20250124-45847a6

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/workspace",
3
- "version": "20.4.0-canary.20250123-7524356",
3
+ "version": "20.4.0-canary.20250124-45847a6",
4
4
  "private": false,
5
5
  "description": "The Workspace plugin contains executors and generators that are useful for any Nx workspace. It should be present in every Nx workspace and other plugins build on it.",
6
6
  "repository": {
@@ -38,12 +38,12 @@
38
38
  }
39
39
  },
40
40
  "dependencies": {
41
- "@nx/devkit": "20.4.0-canary.20250123-7524356",
41
+ "@nx/devkit": "20.4.0-canary.20250124-45847a6",
42
42
  "chalk": "^4.1.0",
43
43
  "enquirer": "~2.3.6",
44
44
  "tslib": "^2.3.0",
45
45
  "yargs-parser": "21.1.1",
46
- "nx": "20.4.0-canary.20250123-7524356"
46
+ "nx": "20.4.0-canary.20250124-45847a6"
47
47
  },
48
48
  "publishConfig": {
49
49
  "access": "public"
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.monorepoGenerator = monorepoGenerator;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const move_1 = require("../move/move");
6
+ const ts_solution_setup_1 = require("../../utils/ts-solution-setup");
6
7
  async function monorepoGenerator(tree, options) {
7
8
  const projects = (0, devkit_1.getProjects)(tree);
8
9
  const nxJson = (0, devkit_1.readNxJson)(tree);
@@ -22,7 +23,8 @@ async function monorepoGenerator(tree, options) {
22
23
  // Currently, Nx only handles apps+libs or packages. You cannot mix and match them.
23
24
  // If the standalone project is an app (React, Angular, etc), then use apps+libs.
24
25
  // Otherwise, for TS standalone (lib), use packages.
25
- const isRootProjectApp = rootProject.projectType === 'application';
26
+ const isRootProjectApp = (0, ts_solution_setup_1.getProjectType)(tree, rootProject.root, rootProject.projectType) ===
27
+ 'application';
26
28
  const appsDir = isRootProjectApp ? 'apps' : 'packages';
27
29
  const libsDir = isRootProjectApp ? 'libs' : 'packages';
28
30
  if (rootProject) {
@@ -38,13 +40,14 @@ async function monorepoGenerator(tree, options) {
38
40
  });
39
41
  }
40
42
  for (const project of projectsToMove) {
43
+ const projectType = (0, ts_solution_setup_1.getProjectType)(tree, project.root, project.projectType);
41
44
  await (0, move_1.moveGenerator)(tree, {
42
45
  projectName: project.name,
43
46
  newProjectName: project.name,
44
- destination: project.projectType === 'application'
47
+ destination: projectType === 'application'
45
48
  ? (0, devkit_1.joinPathFragments)(appsDir, project.root === '.' ? project.name : project.root)
46
49
  : (0, devkit_1.joinPathFragments)(libsDir, project.root === '.' ? project.name : project.root),
47
- updateImportPath: project.projectType === 'library',
50
+ updateImportPath: projectType === 'library',
48
51
  });
49
52
  }
50
53
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeSchema = normalizeSchema;
4
4
  const get_import_path_1 = require("../../../utilities/get-import-path");
5
5
  const utils_1 = require("./utils");
6
+ const ts_solution_setup_1 = require("../../../utils/ts-solution-setup");
6
7
  async function normalizeSchema(tree, schema, projectConfiguration) {
7
8
  const { destination, newProjectName, importPath } = await determineProjectNameAndRootOptions(tree, schema, projectConfiguration);
8
9
  return {
@@ -14,11 +15,11 @@ async function normalizeSchema(tree, schema, projectConfiguration) {
14
15
  };
15
16
  }
16
17
  async function determineProjectNameAndRootOptions(tree, options, projectConfiguration) {
17
- validateName(options.newProjectName, projectConfiguration);
18
+ validateName(tree, options.newProjectName, projectConfiguration);
18
19
  const projectNameAndRootOptions = getProjectNameAndRootOptions(tree, options, projectConfiguration);
19
20
  return projectNameAndRootOptions;
20
21
  }
21
- function validateName(name, projectConfiguration) {
22
+ function validateName(tree, name, projectConfiguration) {
22
23
  if (!name) {
23
24
  return;
24
25
  }
@@ -34,13 +35,14 @@ function validateName(name, projectConfiguration) {
34
35
  */
35
36
  const libraryPattern = '(?:^@[a-zA-Z0-9-*~][a-zA-Z0-9-*._~]*\\/[a-zA-Z0-9-~][a-zA-Z0-9-._~]*|^[a-zA-Z][^:]*)$';
36
37
  const appPattern = '^[a-zA-Z][^:]*$';
37
- if (projectConfiguration.projectType === 'application') {
38
+ const projectType = (0, ts_solution_setup_1.getProjectType)(tree, projectConfiguration.root, projectConfiguration.projectType);
39
+ if (projectType === 'application') {
38
40
  const validationRegex = new RegExp(appPattern);
39
41
  if (!validationRegex.test(name)) {
40
42
  throw new Error(`The new project name should match the pattern "${appPattern}". The provided value "${name}" does not match.`);
41
43
  }
42
44
  }
43
- else if (projectConfiguration.projectType === 'library') {
45
+ else if ((0, ts_solution_setup_1.getProjectType)(tree, projectConfiguration.root, projectConfiguration.projectType) === 'library') {
44
46
  const validationRegex = new RegExp(libraryPattern);
45
47
  if (!validationRegex.test(name)) {
46
48
  throw new Error(`The new project name should match the pattern "${libraryPattern}". The provided value "${name}" does not match.`);
@@ -1,19 +1,3 @@
1
- import { ProjectConfiguration, Tree } from '@nx/devkit';
2
- import { Schema } from '../schema';
3
- /**
4
- * This helper function ensures that we don't move libs or apps
5
- * outside of the folders they should be in.
6
- *
7
- * This will break if someone isn't using the default libs/apps
8
- * folders. In that case, they're on their own :/
9
- */
10
- export declare function getDestination(host: Tree, schema: Schema, project: ProjectConfiguration): string;
11
- /**
12
- * Joins path segments replacing slashes with dashes
13
- *
14
- * @param path
15
- */
16
- export declare function getNewProjectName(path: string): string;
17
1
  /**
18
2
  * Normalizes slashes (removes duplicates)
19
3
  *
@@ -1,38 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDestination = getDestination;
4
- exports.getNewProjectName = getNewProjectName;
5
3
  exports.normalizePathSlashes = normalizePathSlashes;
6
4
  const devkit_1 = require("@nx/devkit");
7
- /**
8
- * This helper function ensures that we don't move libs or apps
9
- * outside of the folders they should be in.
10
- *
11
- * This will break if someone isn't using the default libs/apps
12
- * folders. In that case, they're on their own :/
13
- */
14
- function getDestination(host, schema, project) {
15
- const projectType = project.projectType;
16
- const workspaceLayout = (0, devkit_1.getWorkspaceLayout)(host);
17
- let rootFolder = workspaceLayout.libsDir;
18
- if (projectType === 'application') {
19
- rootFolder = workspaceLayout.appsDir;
20
- }
21
- return (0, devkit_1.joinPathFragments)(rootFolder, schema.destination);
22
- }
23
- /**
24
- * Joins path segments replacing slashes with dashes
25
- *
26
- * @param path
27
- */
28
- function getNewProjectName(path) {
29
- // strip leading '/' or './' or '../' and trailing '/' and replaces '/' with '-'
30
- return (0, devkit_1.normalizePath)(path)
31
- .replace(/(^\.{0,2}\/|\.{1,2}\/|\/$)/g, '')
32
- .split('/')
33
- .filter((x) => !!x)
34
- .join('-');
35
- }
36
5
  /**
37
6
  * Normalizes slashes (removes duplicates)
38
7
  *
@@ -0,0 +1,2 @@
1
+ import { type Tree } from '@nx/devkit';
2
+ export declare function getProjectType(tree: Tree, projectRoot: string, projectType?: 'library' | 'application'): 'library' | 'application';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProjectType = getProjectType;
4
+ const devkit_1 = require("@nx/devkit");
5
+ // This is copied from `@nx/js` to avoid circular dependencies.
6
+ function getProjectType(tree, projectRoot, projectType) {
7
+ if (projectType)
8
+ return projectType;
9
+ if ((0, devkit_1.joinPathFragments)(projectRoot, 'tsconfig.lib.json'))
10
+ return 'library';
11
+ if ((0, devkit_1.joinPathFragments)(projectRoot, 'tsconfig.app.json'))
12
+ return 'application';
13
+ // If there are no exports, assume it is an application since both buildable and non-buildable libraries have exports.
14
+ const packageJsonPath = (0, devkit_1.joinPathFragments)(projectRoot, 'package.json');
15
+ const packageJson = tree.exists(packageJsonPath)
16
+ ? (0, devkit_1.readJson)(tree, (0, devkit_1.joinPathFragments)(projectRoot, 'package.json'))
17
+ : null;
18
+ if (!packageJson?.exports)
19
+ return 'application';
20
+ return 'library';
21
+ }