nx 19.7.0-canary.20240823-1824267 → 19.7.0-canary.20240827-61ecd4b

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. package/.eslintrc.json +12 -1
  2. package/package.json +12 -12
  3. package/src/command-line/connect/connect-to-nx-cloud.js +7 -6
  4. package/src/command-line/graph/graph.d.ts +18 -1
  5. package/src/command-line/graph/graph.js +35 -18
  6. package/src/command-line/login/command-object.d.ts +2 -0
  7. package/src/command-line/login/command-object.js +16 -0
  8. package/src/command-line/login/login.d.ts +5 -0
  9. package/src/command-line/login/login.js +16 -0
  10. package/src/command-line/logout/command-object.d.ts +2 -0
  11. package/src/command-line/logout/command-object.js +12 -0
  12. package/src/command-line/logout/logout.d.ts +4 -0
  13. package/src/command-line/logout/logout.js +13 -0
  14. package/src/command-line/migrate/migrate.js +5 -36
  15. package/src/command-line/nx-commands.js +7 -3
  16. package/src/command-line/yargs-utils/shared-options.d.ts +2 -1
  17. package/src/command-line/yargs-utils/shared-options.js +11 -15
  18. package/src/core/graph/main.js +1 -1
  19. package/src/core/graph/styles.js +1 -1
  20. package/src/devkit-exports.d.ts +1 -0
  21. package/src/hasher/node-task-hasher-impl.d.ts +1 -1
  22. package/src/hasher/node-task-hasher-impl.js +34 -16
  23. package/src/native/nx.wasm32-wasi.wasm +0 -0
  24. package/src/nx-cloud/utilities/axios.js +1 -6
  25. package/src/tasks-runner/default-tasks-runner.js +1 -1
  26. package/src/tasks-runner/init-tasks-runner.d.ts +2 -0
  27. package/src/tasks-runner/init-tasks-runner.js +1 -0
  28. package/src/tasks-runner/life-cycles/invoke-runner-terminal-output-life-cycle.d.ts +4 -6
  29. package/src/tasks-runner/life-cycles/invoke-runner-terminal-output-life-cycle.js +5 -0
  30. package/src/tasks-runner/run-command.js +1 -1
  31. package/src/tasks-runner/task-orchestrator.d.ts +2 -1
  32. package/src/tasks-runner/task-orchestrator.js +5 -2
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk=self.webpackChunk||[]).push([[532],{79207:()=>{}},s=>{var e;e=79207,s(s.s=e)}]);
1
+ "use strict";(self.webpackChunk=self.webpackChunk||[]).push([[532],{46134:()=>{}},s=>{var e;e=46134,s(s.s=e)}]);
@@ -67,6 +67,7 @@ export { readNxJson, updateNxJson, } from './generators/utils/project-configurat
67
67
  * @category Project Graph
68
68
  */
69
69
  export type { ProjectFileMap, FileMap, FileData, ProjectGraph, ProjectGraphDependency, ProjectGraphNode, ProjectGraphProjectNode, ProjectGraphExternalNode, ProjectGraphProcessorContext, } from './config/project-graph';
70
+ export type { GraphJson } from './command-line/graph/graph';
70
71
  /**
71
72
  * @category Project Graph
72
73
  */
@@ -38,7 +38,7 @@ export declare class NodeTaskHasherImpl implements TaskHasherImpl {
38
38
  private findExternalDependencyNodeName;
39
39
  private hashSingleProjectInputs;
40
40
  private hashProjectInputs;
41
- private hashRootFileset;
41
+ private hashRootFilesets;
42
42
  private hashProjectConfig;
43
43
  private hashTsConfig;
44
44
  private hashProjectFileset;
@@ -299,10 +299,10 @@ class NodeTaskHasherImpl {
299
299
  this.hashProjectFileset(projectName, projectFilesets),
300
300
  this.hashProjectConfig(projectName),
301
301
  this.hashTsConfig(projectName),
302
- ...[
303
- ...workspaceFilesets,
304
- ...this.legacyFilesetInputs.map((r) => r.fileset),
305
- ].map((fileset) => this.hashRootFileset(fileset)),
302
+ ...(workspaceFilesets.length
303
+ ? [this.hashRootFilesets(workspaceFilesets)]
304
+ : []),
305
+ this.hashRootFilesets(this.legacyFilesetInputs.map((r) => r.fileset)),
306
306
  ...[...notFilesets, ...this.legacyRuntimeInputs].map((r) => r['runtime']
307
307
  ? this.hashRuntime(env, r['runtime'])
308
308
  : this.hashEnv(env, r['env'])),
@@ -320,22 +320,40 @@ class NodeTaskHasherImpl {
320
320
  }
321
321
  return Promise.all(partialHashes).then((hashes) => hashes.flat());
322
322
  }
323
- async hashRootFileset(fileset) {
324
- const mapKey = fileset;
325
- const withoutWorkspaceRoot = fileset.substring(16);
323
+ async hashRootFilesets(filesets) {
324
+ const mapKey = `workspace:[${filesets.join(',')}]`;
326
325
  if (!this.filesetHashes[mapKey]) {
327
326
  this.filesetHashes[mapKey] = new Promise(async (res) => {
328
327
  const parts = [];
329
- const matchingFile = this.allWorkspaceFiles.find((t) => t.file === withoutWorkspaceRoot);
330
- if (matchingFile) {
331
- parts.push(matchingFile.hash);
328
+ const negativePatterns = [];
329
+ const positivePatterns = [];
330
+ for (const fileset of filesets) {
331
+ if (fileset.startsWith('!')) {
332
+ negativePatterns.push(fileset.substring(17));
333
+ }
334
+ else {
335
+ positivePatterns.push(fileset.substring(16));
336
+ }
332
337
  }
333
- else {
334
- this.allWorkspaceFiles
335
- .filter((f) => (0, minimatch_1.minimatch)(f.file, withoutWorkspaceRoot))
336
- .forEach((f) => {
337
- parts.push(f.hash);
338
- });
338
+ for (const fileset of positivePatterns) {
339
+ const withoutWorkspaceRoot = fileset;
340
+ // Used to shortcut minimatch if not necessary
341
+ const matchingFile = this.allWorkspaceFiles.find((t) => t.file === withoutWorkspaceRoot);
342
+ // shortcut because there is a direct match
343
+ if (matchingFile) {
344
+ if (!negativePatterns.some((p) => (0, minimatch_1.minimatch)(matchingFile.file, p))) {
345
+ parts.push(matchingFile.hash);
346
+ }
347
+ // No direct match, check if pattern matched
348
+ }
349
+ else {
350
+ this.allWorkspaceFiles
351
+ .filter((f) => (0, minimatch_1.minimatch)(f.file, withoutWorkspaceRoot) &&
352
+ !negativePatterns.some((p) => (0, minimatch_1.minimatch)(f.file, p)))
353
+ .forEach((f) => {
354
+ parts.push(f.hash);
355
+ });
356
+ }
339
357
  }
340
358
  const value = (0, file_hasher_1.hashArray)(parts);
341
359
  res({
Binary file
@@ -11,12 +11,7 @@ function createApiAxiosInstance(options) {
11
11
  const nxCloudId = options.nxCloudId;
12
12
  // TODO(lourw): Update message with NxCloudId once it is supported
13
13
  if (!accessToken && !nxCloudId) {
14
- if (process.env.NX_ENABLE_LOGIN === 'true' && !nxCloudId) {
15
- throw new Error(`Unable to authenticate. Please connect your workspace to Nx Cloud to define a valid Nx Cloud Id. If you are in a CI context, please set the NX_CLOUD_ACCESS_TOKEN environment variable or define an access token in your nx.json.`);
16
- }
17
- else {
18
- throw new Error(`Unable to authenticate. Either define accessToken in nx.json or set the NX_CLOUD_ACCESS_TOKEN env variable. If you do not want to use Nx Cloud for this command, either set NX_NO_CLOUD=true, or pass the --no-cloud flag.`);
19
- }
14
+ throw new Error(`Unable to authenticate. If you are connecting to Nx Cloud locally, set an Nx Cloud ID in your nx.json with "nx connect". If you are in a CI context, please set the NX_CLOUD_ACCESS_TOKEN environment variable or define an access token in your nx.json.`);
20
15
  }
21
16
  if (options.customProxyConfigPath) {
22
17
  const { nxCloudProxyConfig } = require((0, path_1.join)(process.cwd(), options.customProxyConfigPath));
@@ -56,7 +56,7 @@ const defaultTasksRunner = async (tasks, options, context) => {
56
56
  };
57
57
  exports.defaultTasksRunner = defaultTasksRunner;
58
58
  async function runAllTasks(tasks, options, context) {
59
- const orchestrator = new task_orchestrator_1.TaskOrchestrator(context.hasher, context.initiatingProject, context.projectGraph, context.taskGraph, options, context.nxArgs?.nxBail, context.daemon);
59
+ const orchestrator = new task_orchestrator_1.TaskOrchestrator(context.hasher, context.initiatingProject, context.projectGraph, context.taskGraph, options, context.nxArgs?.nxBail, context.daemon, context.nxArgs?.outputStyle);
60
60
  return orchestrator.run();
61
61
  }
62
62
  exports.default = exports.defaultTasksRunner;
@@ -1,5 +1,6 @@
1
1
  import { NxArgs } from '../utils/command-line-utils';
2
2
  import { Task, TaskGraph } from '../config/task-graph';
3
+ import { TaskResult } from './life-cycle';
3
4
  export declare function initTasksRunner(nxArgs: NxArgs): Promise<{
4
5
  invoke: (opts: {
5
6
  tasks: Task[];
@@ -7,5 +8,6 @@ export declare function initTasksRunner(nxArgs: NxArgs): Promise<{
7
8
  }) => Promise<{
8
9
  status: number;
9
10
  taskGraph: TaskGraph;
11
+ taskResults: Record<string, TaskResult>;
10
12
  }>;
11
13
  }>;
@@ -52,6 +52,7 @@ async function initTasksRunner(nxArgs) {
52
52
  return {
53
53
  status,
54
54
  taskGraph,
55
+ taskResults: lifeCycle.getTaskResults(),
55
56
  };
56
57
  },
57
58
  };
@@ -1,17 +1,15 @@
1
1
  import { TaskStatus } from '../tasks-runner';
2
- import type { LifeCycle } from '../life-cycle';
2
+ import type { LifeCycle, TaskResult } from '../life-cycle';
3
3
  import { Task } from '../../config/task-graph';
4
4
  export declare class InvokeRunnerTerminalOutputLifeCycle implements LifeCycle {
5
5
  private readonly tasks;
6
6
  failedTasks: Task[];
7
7
  cachedTasks: Task[];
8
+ private taskResults;
8
9
  constructor(tasks: Task[]);
9
10
  startCommand(): void;
10
11
  endCommand(): void;
11
- endTasks(taskResults: {
12
- task: Task;
13
- status: TaskStatus;
14
- code: number;
15
- }[]): void;
12
+ endTasks(taskResults: TaskResult[]): void;
16
13
  printTaskTerminalOutput(task: Task, cacheStatus: TaskStatus, terminalOutput: string): void;
14
+ getTaskResults(): Record<string, TaskResult>;
17
15
  }
@@ -8,6 +8,7 @@ class InvokeRunnerTerminalOutputLifeCycle {
8
8
  this.tasks = tasks;
9
9
  this.failedTasks = [];
10
10
  this.cachedTasks = [];
11
+ this.taskResults = {};
11
12
  }
12
13
  startCommand() {
13
14
  output_1.output.log({
@@ -45,6 +46,7 @@ class InvokeRunnerTerminalOutputLifeCycle {
45
46
  }
46
47
  endTasks(taskResults) {
47
48
  for (let t of taskResults) {
49
+ this.taskResults[t.task.id] = t;
48
50
  if (t.status === 'failure') {
49
51
  this.failedTasks.push(t.task);
50
52
  }
@@ -63,5 +65,8 @@ class InvokeRunnerTerminalOutputLifeCycle {
63
65
  const args = (0, utils_1.getPrintableCommandArgsForTask)(task);
64
66
  output_1.output.logCommandOutput(args.join(' '), cacheStatus, terminalOutput);
65
67
  }
68
+ getTaskResults() {
69
+ return this.taskResults;
70
+ }
66
71
  }
67
72
  exports.InvokeRunnerTerminalOutputLifeCycle = InvokeRunnerTerminalOutputLifeCycle;
@@ -441,7 +441,7 @@ function getTasksRunnerPath(runner, nxJson) {
441
441
  nxJson.tasksRunnerOptions?.[runner]?.options?.accessToken ||
442
442
  // Cloud access token specified in env var.
443
443
  process.env.NX_CLOUD_ACCESS_TOKEN ||
444
- // Nx Cloud Id specified in nxJson
444
+ // Nx Cloud ID specified in nxJson
445
445
  nxJson.nxCloudId;
446
446
  return isCloudRunner ? 'nx-cloud' : require.resolve('./default-tasks-runner');
447
447
  }
@@ -12,6 +12,7 @@ export declare class TaskOrchestrator {
12
12
  private readonly options;
13
13
  private readonly bail;
14
14
  private readonly daemon;
15
+ private readonly outputStyle;
15
16
  private cache;
16
17
  private forkedProcessTaskRunner;
17
18
  private tasksSchedule;
@@ -23,7 +24,7 @@ export declare class TaskOrchestrator {
23
24
  private waitingForTasks;
24
25
  private groups;
25
26
  private bailed;
26
- constructor(hasher: TaskHasher, initiatingProject: string | undefined, projectGraph: ProjectGraph, taskGraph: TaskGraph, options: DefaultTasksRunnerOptions, bail: boolean, daemon: DaemonClient);
27
+ constructor(hasher: TaskHasher, initiatingProject: string | undefined, projectGraph: ProjectGraph, taskGraph: TaskGraph, options: DefaultTasksRunnerOptions, bail: boolean, daemon: DaemonClient, outputStyle: string);
27
28
  run(): Promise<{
28
29
  [id: string]: TaskStatus;
29
30
  }>;
@@ -19,7 +19,7 @@ const nx_cloud_utils_1 = require("../utils/nx-cloud-utils");
19
19
  const nx_json_1 = require("../config/nx-json");
20
20
  class TaskOrchestrator {
21
21
  // endregion internal state
22
- constructor(hasher, initiatingProject, projectGraph, taskGraph, options, bail, daemon) {
22
+ constructor(hasher, initiatingProject, projectGraph, taskGraph, options, bail, daemon, outputStyle) {
23
23
  this.hasher = hasher;
24
24
  this.initiatingProject = initiatingProject;
25
25
  this.projectGraph = projectGraph;
@@ -27,6 +27,7 @@ class TaskOrchestrator {
27
27
  this.options = options;
28
28
  this.bail = bail;
29
29
  this.daemon = daemon;
30
+ this.outputStyle = outputStyle;
30
31
  this.cache = process.env.NX_DB_CACHE === 'true'
31
32
  ? new cache_1.DbCache({
32
33
  // Remove this in Nx 21
@@ -209,7 +210,9 @@ class TaskOrchestrator {
209
210
  const pipeOutput = await this.pipeOutputCapture(task);
210
211
  // obtain metadata
211
212
  const temporaryOutputPath = this.cache.temporaryOutputPath(task);
212
- const streamOutput = (0, utils_1.shouldStreamOutput)(task, this.initiatingProject);
213
+ const streamOutput = this.outputStyle === 'static'
214
+ ? false
215
+ : (0, utils_1.shouldStreamOutput)(task, this.initiatingProject);
213
216
  let env = pipeOutput
214
217
  ? (0, task_env_1.getEnvVariablesForTask)(task, taskSpecificEnv, process.env.FORCE_COLOR === undefined
215
218
  ? 'true'