nx 18.1.0-canary.20240229-f6a183c → 18.1.0-canary.20240301-d705372

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/migrations.json CHANGED
@@ -86,7 +86,7 @@
86
86
  "18.0.0-disable-adding-plugins-for-existing-workspaces": {
87
87
  "cli": "nx",
88
88
  "version": "18.0.0-beta.2",
89
- "description": "Updates .env to disabled adding plugins when generating projects in an existing Nx workspace",
89
+ "description": "Updates nx.json to disabled adding plugins when generating projects in an existing Nx workspace",
90
90
  "implementation": "./src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces",
91
91
  "x-repair-skip": true
92
92
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nx",
3
- "version": "18.1.0-canary.20240229-f6a183c",
3
+ "version": "18.1.0-canary.20240301-d705372",
4
4
  "private": false,
5
5
  "description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
6
6
  "repository": {
@@ -66,7 +66,7 @@
66
66
  "yargs-parser": "21.1.1",
67
67
  "node-machine-id": "1.1.12",
68
68
  "ora": "5.3.0",
69
- "@nrwl/tao": "18.1.0-canary.20240229-f6a183c"
69
+ "@nrwl/tao": "18.1.0-canary.20240301-d705372"
70
70
  },
71
71
  "peerDependencies": {
72
72
  "@swc-node/register": "^1.8.0",
@@ -81,16 +81,16 @@
81
81
  }
82
82
  },
83
83
  "optionalDependencies": {
84
- "@nx/nx-darwin-x64": "18.1.0-canary.20240229-f6a183c",
85
- "@nx/nx-darwin-arm64": "18.1.0-canary.20240229-f6a183c",
86
- "@nx/nx-linux-x64-gnu": "18.1.0-canary.20240229-f6a183c",
87
- "@nx/nx-linux-x64-musl": "18.1.0-canary.20240229-f6a183c",
88
- "@nx/nx-win32-x64-msvc": "18.1.0-canary.20240229-f6a183c",
89
- "@nx/nx-linux-arm64-gnu": "18.1.0-canary.20240229-f6a183c",
90
- "@nx/nx-linux-arm64-musl": "18.1.0-canary.20240229-f6a183c",
91
- "@nx/nx-linux-arm-gnueabihf": "18.1.0-canary.20240229-f6a183c",
92
- "@nx/nx-win32-arm64-msvc": "18.1.0-canary.20240229-f6a183c",
93
- "@nx/nx-freebsd-x64": "18.1.0-canary.20240229-f6a183c"
84
+ "@nx/nx-darwin-x64": "18.1.0-canary.20240301-d705372",
85
+ "@nx/nx-darwin-arm64": "18.1.0-canary.20240301-d705372",
86
+ "@nx/nx-linux-x64-gnu": "18.1.0-canary.20240301-d705372",
87
+ "@nx/nx-linux-x64-musl": "18.1.0-canary.20240301-d705372",
88
+ "@nx/nx-win32-x64-msvc": "18.1.0-canary.20240301-d705372",
89
+ "@nx/nx-linux-arm64-gnu": "18.1.0-canary.20240301-d705372",
90
+ "@nx/nx-linux-arm64-musl": "18.1.0-canary.20240301-d705372",
91
+ "@nx/nx-linux-arm-gnueabihf": "18.1.0-canary.20240301-d705372",
92
+ "@nx/nx-win32-arm64-msvc": "18.1.0-canary.20240301-d705372",
93
+ "@nx/nx-freebsd-x64": "18.1.0-canary.20240301-d705372"
94
94
  },
95
95
  "nx-migrations": {
96
96
  "migrations": "./migrations.json",
@@ -101,6 +101,10 @@
101
101
  "type": "boolean",
102
102
  "description": "Specifies whether the daemon should be used for the default tasks runner."
103
103
  },
104
+ "useInferencePlugins": {
105
+ "type": "boolean",
106
+ "description": "Specifies whether to add inference plugins when generating new projects."
107
+ },
104
108
  "release": {
105
109
  "type": "object",
106
110
  "description": "Configuration for the nx release commands.",
@@ -1,2 +1,2 @@
1
1
  export declare const allowedProjectExtensions: readonly ["tags", "implicitDependencies", "configFilePath", "$schema", "generators", "namedInputs", "name", "files", "root", "sourceRoot", "projectType", "release", "includedScripts"];
2
- export declare const allowedWorkspaceExtensions: readonly ["implicitDependencies", "affected", "defaultBase", "tasksRunnerOptions", "workspaceLayout", "plugins", "targetDefaults", "files", "generators", "namedInputs", "extends", "cli", "pluginsConfig", "defaultProject", "installation", "release", "nxCloudAccessToken", "nxCloudUrl", "nxCloudEncryptionKey", "parallel", "cacheDirectory", "useDaemonProcess"];
2
+ export declare const allowedWorkspaceExtensions: readonly ["implicitDependencies", "affected", "defaultBase", "tasksRunnerOptions", "workspaceLayout", "plugins", "targetDefaults", "files", "generators", "namedInputs", "extends", "cli", "pluginsConfig", "defaultProject", "installation", "release", "nxCloudAccessToken", "nxCloudUrl", "nxCloudEncryptionKey", "parallel", "cacheDirectory", "useDaemonProcess", "useInferencePlugins"];
@@ -58,6 +58,7 @@ exports.allowedWorkspaceExtensions = [
58
58
  'parallel',
59
59
  'cacheDirectory',
60
60
  'useDaemonProcess',
61
+ 'useInferencePlugins',
61
62
  ];
62
63
  if (!patched) {
63
64
  Module.prototype.require = function () {
@@ -97,7 +97,8 @@ async function initializePlugin(pkgName, options) {
97
97
  }
98
98
  else {
99
99
  updatePackageScripts =
100
- process.env.NX_ADD_PLUGINS !== 'false' &&
100
+ (0, nx_json_1.readNxJson)().useInferencePlugins !== false &&
101
+ process.env.NX_ADD_PLUGINS !== 'false' &&
101
102
  coreNxPlugins.includes(pkgName);
102
103
  }
103
104
  await (0, child_process_2.runNxAsync)(`g ${pkgName}:${initGenerator} --keepExistingVersions${updatePackageScripts ? ' --updatePackageScripts' : ''}`, {
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.yargsInitCommand = void 0;
4
4
  const shared_options_1 = require("../yargs-utils/shared-options");
5
- const useV2 = process.env['NX_ADD_PLUGINS'] !== 'false';
5
+ const nx_json_1 = require("../../config/nx-json");
6
+ const useV2 = process.env['NX_ADD_PLUGINS'] !== 'false' &&
7
+ (0, nx_json_1.readNxJson)().useInferencePlugins !== false;
6
8
  exports.yargsInitCommand = {
7
9
  command: 'init',
8
10
  describe: 'Adds Nx to any type of workspace. It installs nx, creates an nx.json configuration file and optionally sets up remote caching. For more info, check https://nx.dev/recipes/adopting-nx.',
@@ -108,6 +108,7 @@ const npmPackageToPluginMap = {
108
108
  vite: '@nx/vite',
109
109
  vitest: '@nx/vite',
110
110
  webpack: '@nx/webpack',
111
+ rollup: '@nx/rollup',
111
112
  // Testing tools
112
113
  jest: '@nx/jest',
113
114
  cypress: '@nx/cypress',
@@ -14,11 +14,25 @@ function escapeRegExp(string) {
14
14
  const SEMVER_REGEX = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/g;
15
15
  async function getLatestGitTagForPattern(releaseTagPattern, additionalInterpolationData = {}) {
16
16
  try {
17
- const tags = await (0, exec_command_1.execCommand)('git', ['tag', '--sort', '-v:refname']).then((r) => r
17
+ let tags;
18
+ tags = await (0, exec_command_1.execCommand)('git', [
19
+ 'tag',
20
+ '--sort',
21
+ '-v:refname',
22
+ '--merged',
23
+ ]).then((r) => r
18
24
  .trim()
19
25
  .split('\n')
20
26
  .map((t) => t.trim())
21
27
  .filter(Boolean));
28
+ if (!tags.length) {
29
+ // try again, but include all tags on the repo instead of just --merged ones
30
+ tags = await (0, exec_command_1.execCommand)('git', ['tag', '--sort', '-v:refname']).then((r) => r
31
+ .trim()
32
+ .split('\n')
33
+ .map((t) => t.trim())
34
+ .filter(Boolean));
35
+ }
22
36
  if (!tags.length) {
23
37
  return null;
24
38
  }
@@ -358,6 +358,10 @@ export interface NxJsonConfiguration<T = '*' | string[]> {
358
358
  * Set this to false to disable the daemon.
359
359
  */
360
360
  useDaemonProcess?: boolean;
361
+ /**
362
+ * Set this to false to disable adding inference plugins when generating new projects
363
+ */
364
+ useInferencePlugins?: boolean;
361
365
  }
362
366
  export type PluginConfiguration = string | {
363
367
  plugin: string;
@@ -35,6 +35,7 @@ function addProjectConfiguration(tree, projectName, projectConfiguration, standa
35
35
  throw new Error(`Cannot create a new project ${projectName} at ${projectConfiguration.root}. A project already exists in this directory.`);
36
36
  }
37
37
  delete projectConfiguration.$schema;
38
+ handleEmptyTargets(projectName, projectConfiguration);
38
39
  (0, json_1.writeJson)(tree, projectConfigFile, {
39
40
  name: projectName,
40
41
  $schema: getRelativeProjectJsonSchemaPath(tree, projectConfiguration),
@@ -55,6 +56,7 @@ function updateProjectConfiguration(tree, projectName, projectConfiguration) {
55
56
  if (!tree.exists(projectConfigFile)) {
56
57
  throw new Error(`Cannot update Project ${projectName} at ${projectConfiguration.root}. It either doesn't exist yet, or may not use project.json for configuration. Use \`addProjectConfiguration()\` instead if you want to create a new project.`);
57
58
  }
59
+ handleEmptyTargets(projectName, projectConfiguration);
58
60
  (0, json_1.writeJson)(tree, projectConfigFile, {
59
61
  name: projectConfiguration.name ?? projectName,
60
62
  $schema: getRelativeProjectJsonSchemaPath(tree, projectConfiguration),
@@ -131,7 +133,7 @@ function readAndCombineAllProjectConfigurations(tree) {
131
133
  const patterns = [
132
134
  '**/project.json',
133
135
  'project.json',
134
- ...(0, package_json_workspaces_1.getGlobPatternsFromPackageManagerWorkspaces)(tree.root, (p) => (0, json_1.readJson)(tree, p)),
136
+ ...(0, package_json_workspaces_1.getGlobPatternsFromPackageManagerWorkspaces)(tree.root, (p) => (0, json_1.readJson)(tree, p, { expectComments: true })),
135
137
  ];
136
138
  const projectGlobPatterns = (0, retrieve_workspace_files_1.configurationGlobs)([
137
139
  project_json_1.ProjectJsonProjectsPlugin,
@@ -237,3 +239,15 @@ function toNewFormat(w) {
237
239
  }
238
240
  return w;
239
241
  }
242
+ function handleEmptyTargets(projectName, projectConfiguration) {
243
+ if (projectConfiguration.targets &&
244
+ !Object.keys(projectConfiguration.targets).length) {
245
+ // Re-order `targets` to appear after the `// target` comment.
246
+ delete projectConfiguration.targets;
247
+ projectConfiguration['// targets'] = `to see all targets run: nx show project ${projectName} --web`;
248
+ projectConfiguration.targets = {};
249
+ }
250
+ else {
251
+ delete projectConfiguration['// targets'];
252
+ }
253
+ }
@@ -1,29 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const logger_1 = require("../../utils/logger");
4
- const ignore_1 = require("ignore");
3
+ const nx_json_1 = require("../../generators/utils/nx-json");
5
4
  function migrate(tree) {
6
- const ig = (0, ignore_1.default)();
7
- try {
8
- ig.add(tree.read('.gitignore', 'utf-8'));
9
- if (ig.ignores('.env')) {
10
- logger_1.logger.warn('NX The NX_ADD_PLUGINS=false environment variable was added to your .env file for backwards compatibility. However, your .env is ignored by git. Other contributors should add this key to their .env file or ensure that the environment variable is set to false when generating code with Nx.');
11
- }
12
- }
13
- catch { }
14
- if (!tree.exists('.env')) {
15
- tree.write('.env', '');
16
- }
17
- const dotenv = tree.read('.env', 'utf-8');
18
- const newDotenvContents = [
19
- '# Nx 18 enables using plugins to infer targets by default',
20
- '# This is disabled for existing workspaces to maintain compatibility',
21
- '# For more info, see: https://nx.dev/concepts/inferred-tasks',
22
- 'NX_ADD_PLUGINS=false',
23
- ];
24
- if (dotenv.length) {
25
- newDotenvContents.unshift(dotenv, '');
26
- }
27
- tree.write('.env', newDotenvContents.join('\n'));
5
+ const nxJson = (0, nx_json_1.readNxJson)(tree);
6
+ nxJson.useInferencePlugins = false;
7
+ (0, nx_json_1.updateNxJson)(tree, nxJson);
28
8
  }
29
9
  exports.default = migrate;
@@ -67,6 +67,7 @@ function getTranspiler(compilerOptions) {
67
67
  }
68
68
  compilerOptions.lib = ['es2021'];
69
69
  compilerOptions.module = ts.ModuleKind.CommonJS;
70
+ compilerOptions.moduleResolution = ts.ModuleResolutionKind.Node10;
70
71
  compilerOptions.target = ts.ScriptTarget.ES2021;
71
72
  compilerOptions.inlineSourceMap = true;
72
73
  compilerOptions.skipLibCheck = true;
@@ -195,6 +195,10 @@ function readProjectConfigurationsFromRootMap(projectRootMap) {
195
195
  // to provide better error messaging.
196
196
  const errors = new Map();
197
197
  for (const [root, configuration] of projectRootMap.entries()) {
198
+ // We're setting `// targets` as a comment `targets` is empty due to Project Crystal.
199
+ // Strip it before returning configuration for usage.
200
+ if (configuration['// targets'])
201
+ delete configuration['// targets'];
198
202
  if (!configuration.name) {
199
203
  try {
200
204
  const { name } = (0, fileutils_1.readJsonFile)((0, path_1.join)(root, 'package.json'));