nx 17.0.2 → 17.0.4

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.
Files changed (319) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +9 -4
  3. package/bin/init-local.js +10 -60
  4. package/bin/nx-cloud.js +6 -0
  5. package/bin/nx.js +1 -9
  6. package/bin/post-install.js +5 -1
  7. package/bin/run-executor.js +1 -1
  8. package/migrations.json +18 -0
  9. package/package.json +21 -18
  10. package/plugins/package-json.js +1 -1
  11. package/{changelog-renderer → release/changelog-renderer}/index.d.ts +18 -3
  12. package/{changelog-renderer → release/changelog-renderer}/index.js +78 -34
  13. package/release/index.d.ts +4 -0
  14. package/release/index.js +11 -0
  15. package/schemas/nx-schema.json +203 -19
  16. package/schemas/project-schema.json +20 -0
  17. package/src/adapter/angular-json.js +28 -18
  18. package/src/adapter/compat.d.ts +2 -2
  19. package/src/adapter/compat.js +6 -1
  20. package/src/adapter/ngcli-adapter.d.ts +16 -4
  21. package/src/adapter/ngcli-adapter.js +85 -28
  22. package/src/command-line/add/add.d.ts +2 -0
  23. package/src/command-line/add/add.js +169 -0
  24. package/src/command-line/add/command-object.d.ts +7 -0
  25. package/src/command-line/add/command-object.js +24 -0
  26. package/src/command-line/affected/affected.js +0 -3
  27. package/src/command-line/affected/command-object.d.ts +4 -4
  28. package/src/command-line/affected/command-object.js +53 -26
  29. package/src/command-line/affected/print-affected.js +10 -1
  30. package/src/command-line/connect/command-object.d.ts +1 -2
  31. package/src/command-line/connect/command-object.js +3 -7
  32. package/src/command-line/connect/connect-to-nx-cloud.d.ts +4 -5
  33. package/src/command-line/connect/connect-to-nx-cloud.js +43 -31
  34. package/src/command-line/connect/view-logs.js +5 -21
  35. package/src/command-line/examples.js +18 -0
  36. package/src/command-line/exec/command-object.js +2 -1
  37. package/src/command-line/exec/exec.d.ts +1 -1
  38. package/src/command-line/exec/exec.js +78 -35
  39. package/src/command-line/format/format.js +13 -4
  40. package/src/command-line/generate/generate.js +9 -9
  41. package/src/command-line/generate/generator-utils.d.ts +3 -2
  42. package/src/command-line/generate/generator-utils.js +5 -5
  43. package/src/command-line/graph/graph.d.ts +1 -1
  44. package/src/command-line/graph/graph.js +82 -37
  45. package/src/command-line/init/command-object.js +70 -43
  46. package/src/command-line/init/implementation/add-nx-to-monorepo.d.ts +4 -2
  47. package/src/command-line/init/implementation/add-nx-to-monorepo.js +12 -2
  48. package/src/command-line/init/implementation/add-nx-to-nest.d.ts +1 -1
  49. package/src/command-line/init/implementation/add-nx-to-nest.js +10 -6
  50. package/src/command-line/init/implementation/add-nx-to-npm-repo.d.ts +4 -2
  51. package/src/command-line/init/implementation/add-nx-to-npm-repo.js +15 -4
  52. package/src/command-line/init/implementation/angular/index.js +4 -1
  53. package/src/command-line/init/implementation/angular/legacy-angular-versions.js +10 -5
  54. package/src/command-line/init/implementation/angular/standalone-workspace.js +1 -1
  55. package/src/command-line/init/implementation/angular/types.d.ts +1 -1
  56. package/src/command-line/init/implementation/dot-nx/nxw.js +47 -16
  57. package/src/command-line/init/implementation/react/index.d.ts +1 -1
  58. package/src/command-line/init/implementation/react/index.js +4 -2
  59. package/src/command-line/init/implementation/react/rename-js-to-jsx.js +4 -2
  60. package/src/command-line/init/implementation/utils.d.ts +6 -5
  61. package/src/command-line/init/implementation/utils.js +59 -44
  62. package/src/command-line/init/{init.js → init-v1.js} +5 -13
  63. package/src/command-line/init/init-v2.d.ts +7 -0
  64. package/src/command-line/init/init-v2.js +201 -0
  65. package/src/command-line/list/list.js +6 -5
  66. package/src/command-line/migrate/command-object.js +19 -4
  67. package/src/command-line/migrate/migrate.js +21 -17
  68. package/src/command-line/new/new.js +1 -1
  69. package/src/command-line/nx-commands.js +4 -1
  70. package/src/command-line/release/changelog.d.ts +22 -1
  71. package/src/command-line/release/changelog.js +459 -257
  72. package/src/command-line/release/command-object.d.ts +29 -7
  73. package/src/command-line/release/command-object.js +120 -20
  74. package/src/command-line/release/config/config.d.ts +26 -21
  75. package/src/command-line/release/config/config.js +416 -59
  76. package/src/command-line/release/config/conventional-commits.d.ts +2 -0
  77. package/src/command-line/release/config/conventional-commits.js +98 -0
  78. package/src/command-line/release/config/filter-release-groups.d.ts +1 -2
  79. package/src/command-line/release/config/filter-release-groups.js +38 -1
  80. package/src/command-line/release/index.d.ts +16 -0
  81. package/src/command-line/release/index.js +23 -0
  82. package/src/command-line/release/publish.d.ts +7 -3
  83. package/src/command-line/release/publish.js +89 -37
  84. package/src/command-line/release/release.d.ts +4 -0
  85. package/src/command-line/release/release.js +176 -0
  86. package/src/command-line/release/utils/batch-projects-by-generator-config.d.ts +7 -0
  87. package/src/command-line/release/utils/batch-projects-by-generator-config.js +37 -0
  88. package/src/command-line/release/utils/exec-command.d.ts +1 -0
  89. package/src/command-line/release/utils/exec-command.js +34 -0
  90. package/src/command-line/release/utils/git.d.ts +34 -1
  91. package/src/command-line/release/utils/git.js +238 -34
  92. package/src/command-line/release/utils/github.d.ts +5 -5
  93. package/src/command-line/release/utils/github.js +155 -8
  94. package/src/command-line/release/utils/markdown.js +6 -1
  95. package/src/command-line/release/utils/print-changes.d.ts +1 -1
  96. package/src/command-line/release/utils/print-changes.js +3 -3
  97. package/src/command-line/release/utils/resolve-nx-json-error-message.js +4 -1
  98. package/src/command-line/release/utils/resolve-semver-specifier.d.ts +4 -0
  99. package/src/command-line/release/utils/resolve-semver-specifier.js +58 -0
  100. package/src/command-line/release/utils/semver.d.ts +8 -0
  101. package/src/command-line/release/utils/semver.js +30 -1
  102. package/src/command-line/release/utils/shared.d.ts +39 -0
  103. package/src/command-line/release/utils/shared.js +213 -0
  104. package/src/command-line/release/version.d.ts +37 -3
  105. package/src/command-line/release/version.js +312 -117
  106. package/src/command-line/repair/repair.js +13 -9
  107. package/src/command-line/report/report.js +2 -2
  108. package/src/command-line/run/command-object.d.ts +4 -0
  109. package/src/command-line/run/command-object.js +18 -2
  110. package/src/command-line/run/executor-utils.d.ts +2 -1
  111. package/src/command-line/run/executor-utils.js +4 -4
  112. package/src/command-line/run/run-one.js +3 -6
  113. package/src/command-line/run/run.js +34 -9
  114. package/src/command-line/run-many/command-object.js +4 -1
  115. package/src/command-line/run-many/run-many.js +0 -3
  116. package/src/command-line/show/command-object.d.ts +3 -0
  117. package/src/command-line/show/command-object.js +29 -2
  118. package/src/command-line/show/show.js +9 -0
  119. package/src/command-line/yargs-utils/shared-options.d.ts +4 -1
  120. package/src/command-line/yargs-utils/shared-options.js +23 -9
  121. package/src/commands-runner/command-graph.d.ts +13 -0
  122. package/src/commands-runner/command-graph.js +2 -0
  123. package/src/commands-runner/create-command-graph.d.ts +4 -0
  124. package/src/commands-runner/create-command-graph.js +44 -0
  125. package/src/commands-runner/get-command-projects.d.ts +3 -0
  126. package/src/commands-runner/get-command-projects.js +19 -0
  127. package/src/config/nx-json.d.ts +160 -25
  128. package/src/config/project-graph.d.ts +3 -3
  129. package/src/config/workspace-json-project-json.d.ts +11 -1
  130. package/src/config/workspaces.d.ts +1 -1
  131. package/src/config/workspaces.js +4 -6
  132. package/src/core/graph/3rdpartylicenses.txt +144 -74
  133. package/src/core/graph/environment.js +1 -1
  134. package/src/core/graph/index.html +4 -6
  135. package/src/core/graph/main.js +1 -1
  136. package/src/core/graph/runtime.js +1 -1
  137. package/src/core/graph/styles.css +3 -3
  138. package/src/core/graph/styles.js +1 -1
  139. package/src/daemon/client/client.d.ts +5 -1
  140. package/src/daemon/client/client.js +27 -8
  141. package/src/daemon/client/{socket-messenger.d.ts → daemon-socket-messenger.d.ts} +1 -1
  142. package/src/daemon/client/{socket-messenger.js → daemon-socket-messenger.js} +3 -3
  143. package/src/daemon/daemon-project-graph-error.d.ts +8 -0
  144. package/src/daemon/daemon-project-graph-error.js +13 -0
  145. package/src/daemon/server/handle-hash-tasks.js +12 -2
  146. package/src/daemon/server/handle-request-project-graph.js +1 -1
  147. package/src/daemon/server/project-graph-incremental-recomputation.d.ts +14 -13
  148. package/src/daemon/server/project-graph-incremental-recomputation.js +98 -33
  149. package/src/daemon/server/shutdown-utils.js +2 -4
  150. package/src/daemon/server/watcher.js +0 -3
  151. package/src/daemon/socket-utils.d.ts +2 -1
  152. package/src/daemon/socket-utils.js +15 -4
  153. package/src/daemon/tmp-dir.d.ts +1 -0
  154. package/src/daemon/tmp-dir.js +4 -4
  155. package/src/devkit-exports.d.ts +2 -2
  156. package/src/devkit-exports.js +3 -2
  157. package/src/devkit-internals.d.ts +3 -0
  158. package/src/devkit-internals.js +7 -1
  159. package/src/executors/noop/schema.json +1 -1
  160. package/src/executors/run-commands/run-commands.impl.d.ts +10 -2
  161. package/src/executors/run-commands/run-commands.impl.js +152 -48
  162. package/src/executors/run-commands/schema.json +11 -1
  163. package/src/executors/run-script/run-script.impl.js +43 -11
  164. package/src/executors/utils/convert-nx-executor.js +1 -1
  165. package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.d.ts +3 -1
  166. package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +4 -2
  167. package/src/generators/testing-utils/create-tree-with-empty-workspace.js +0 -6
  168. package/src/generators/tree.d.ts +1 -0
  169. package/src/generators/utils/glob.js +2 -2
  170. package/src/generators/utils/project-configuration.js +37 -16
  171. package/src/hasher/create-task-hasher.d.ts +4 -0
  172. package/src/hasher/create-task-hasher.js +16 -0
  173. package/src/hasher/hash-task.js +9 -3
  174. package/src/hasher/native-task-hasher-impl.d.ts +19 -0
  175. package/src/hasher/native-task-hasher-impl.js +37 -0
  176. package/src/hasher/node-task-hasher-impl.d.ts +49 -0
  177. package/src/hasher/node-task-hasher-impl.js +431 -0
  178. package/src/hasher/task-hasher.d.ts +33 -21
  179. package/src/hasher/task-hasher.js +30 -428
  180. package/src/migrations/update-15-0-0/migrate-to-inputs.js +5 -5
  181. package/src/migrations/update-15-1-0/set-project-names.js +2 -1
  182. package/src/migrations/update-15-8-2/update-nxw.js +2 -6
  183. package/src/migrations/update-17-0-0/rm-default-collection-npm-scope.js +3 -3
  184. package/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.js +49 -13
  185. package/src/migrations/update-17-2-0/move-default-base.d.ts +5 -0
  186. package/src/migrations/update-17-2-0/move-default-base.js +21 -0
  187. package/src/migrations/update-17-3-0/nx-release-path.d.ts +3 -0
  188. package/src/migrations/update-17-3-0/nx-release-path.js +48 -0
  189. package/src/migrations/update-17-3-0/update-nxw.d.ts +2 -0
  190. package/src/migrations/update-17-3-0/update-nxw.js +7 -0
  191. package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.d.ts +2 -0
  192. package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +9 -0
  193. package/src/native/index.d.ts +65 -15
  194. package/src/native/index.js +6 -2
  195. package/src/native/transform-objects.js +2 -0
  196. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.d.ts +1 -0
  197. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +13 -12
  198. package/src/nx-cloud/generators/connect-to-nx-cloud/schema.json +6 -1
  199. package/src/nx-cloud/update-manager.js +2 -1
  200. package/src/plugins/js/index.d.ts +1 -1
  201. package/src/plugins/js/index.js +3 -3
  202. package/src/plugins/js/lock-file/lock-file.d.ts +2 -2
  203. package/src/plugins/js/lock-file/lock-file.js +15 -3
  204. package/src/plugins/js/package-json/create-package-json.js +1 -1
  205. package/src/plugins/js/project-graph/build-dependencies/strip-source-code.d.ts +1 -1
  206. package/src/plugins/js/project-graph/build-dependencies/strip-source-code.js +1 -1
  207. package/src/plugins/js/project-graph/build-dependencies/typescript-import-locator.d.ts +1 -1
  208. package/src/plugins/js/project-graph/build-dependencies/typescript-import-locator.js +1 -1
  209. package/src/plugins/js/utils/register.d.ts +1 -1
  210. package/src/plugins/js/utils/register.js +28 -8
  211. package/src/plugins/js/versions.d.ts +1 -1
  212. package/src/plugins/js/versions.js +1 -1
  213. package/{plugins/package-json-workspaces.d.ts → src/plugins/package-json-workspaces/create-nodes.d.ts} +4 -4
  214. package/{plugins/package-json-workspaces.js → src/plugins/package-json-workspaces/create-nodes.js} +34 -12
  215. package/src/plugins/package-json-workspaces/index.d.ts +1 -0
  216. package/src/plugins/package-json-workspaces/index.js +4 -0
  217. package/src/plugins/project-json/build-nodes/package-json-next-to-project-json.d.ts +2 -0
  218. package/src/plugins/project-json/build-nodes/package-json-next-to-project-json.js +47 -0
  219. package/src/plugins/project-json/build-nodes/project-json.d.ts +2 -5
  220. package/src/plugins/project-json/build-nodes/project-json.js +6 -44
  221. package/src/plugins/target-defaults/target-defaults-plugin.d.ts +66 -0
  222. package/src/plugins/target-defaults/target-defaults-plugin.js +182 -0
  223. package/src/project-graph/affected/locators/project-glob-changes.js +3 -3
  224. package/src/project-graph/affected/locators/workspace-projects.d.ts +0 -2
  225. package/src/project-graph/affected/locators/workspace-projects.js +16 -29
  226. package/src/project-graph/build-project-graph.d.ts +20 -1
  227. package/src/project-graph/build-project-graph.js +91 -33
  228. package/src/project-graph/file-map-utils.d.ts +9 -5
  229. package/src/project-graph/file-map-utils.js +16 -63
  230. package/src/project-graph/file-utils.d.ts +1 -1
  231. package/src/project-graph/file-utils.js +44 -2
  232. package/src/project-graph/nx-deps-cache.js +1 -1
  233. package/src/project-graph/project-graph-builder.d.ts +1 -1
  234. package/src/project-graph/project-graph-builder.js +1 -1
  235. package/src/project-graph/project-graph.d.ts +32 -1
  236. package/src/project-graph/project-graph.js +147 -23
  237. package/src/project-graph/utils/build-all-workspace-files.d.ts +2 -0
  238. package/src/project-graph/utils/build-all-workspace-files.js +15 -0
  239. package/src/project-graph/utils/normalize-project-nodes.d.ts +2 -3
  240. package/src/project-graph/utils/normalize-project-nodes.js +11 -34
  241. package/src/project-graph/utils/project-configuration-utils.d.ts +66 -4
  242. package/src/project-graph/utils/project-configuration-utils.js +503 -62
  243. package/src/project-graph/utils/retrieve-workspace-files.d.ts +12 -31
  244. package/src/project-graph/utils/retrieve-workspace-files.js +27 -88
  245. package/src/tasks-runner/batch/run-batch.js +3 -3
  246. package/src/tasks-runner/cache.js +6 -3
  247. package/src/tasks-runner/create-task-graph.js +1 -1
  248. package/src/tasks-runner/fork.d.ts +1 -0
  249. package/src/tasks-runner/fork.js +23 -0
  250. package/src/tasks-runner/forked-process-task-runner.d.ts +13 -5
  251. package/src/tasks-runner/forked-process-task-runner.js +111 -21
  252. package/src/tasks-runner/init-tasks-runner.js +1 -1
  253. package/src/tasks-runner/life-cycles/dynamic-run-many-terminal-output-life-cycle.js +28 -28
  254. package/src/tasks-runner/life-cycles/dynamic-run-one-terminal-output-life-cycle.js +19 -22
  255. package/src/tasks-runner/life-cycles/empty-terminal-output-life-cycle.js +1 -3
  256. package/src/tasks-runner/life-cycles/invoke-runner-terminal-output-life-cycle.js +1 -3
  257. package/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.js +2 -4
  258. package/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.d.ts +1 -0
  259. package/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.js +11 -5
  260. package/src/tasks-runner/life-cycles/view-logs-utils.js +1 -1
  261. package/src/tasks-runner/pseudo-ipc.d.ts +49 -0
  262. package/src/tasks-runner/pseudo-ipc.js +140 -0
  263. package/src/tasks-runner/pseudo-terminal.d.ts +43 -0
  264. package/src/tasks-runner/pseudo-terminal.js +159 -0
  265. package/src/tasks-runner/run-command.d.ts +1 -1
  266. package/src/tasks-runner/run-command.js +13 -19
  267. package/src/tasks-runner/task-env.js +1 -2
  268. package/src/tasks-runner/task-graph-utils.d.ts +7 -3
  269. package/src/tasks-runner/task-graph-utils.js +15 -15
  270. package/src/tasks-runner/task-orchestrator.js +66 -12
  271. package/src/tasks-runner/tasks-schedule.js +3 -3
  272. package/src/tasks-runner/utils.d.ts +16 -7
  273. package/src/tasks-runner/utils.js +30 -16
  274. package/src/utils/ab-testing.d.ts +36 -2
  275. package/src/utils/ab-testing.js +34 -16
  276. package/src/utils/assert-workspace-validity.js +1 -1
  277. package/src/utils/cache-directory.d.ts +1 -0
  278. package/src/utils/cache-directory.js +5 -1
  279. package/src/utils/child-process.d.ts +15 -1
  280. package/src/utils/child-process.js +91 -1
  281. package/src/utils/command-line-utils.js +2 -1
  282. package/src/utils/exit-codes.d.ts +6 -0
  283. package/src/utils/exit-codes.js +20 -0
  284. package/src/utils/fileutils.d.ts +1 -0
  285. package/src/utils/find-matching-projects.js +5 -5
  286. package/src/utils/find-workspace-root.js +1 -0
  287. package/src/utils/ignore.js +8 -1
  288. package/src/utils/json-diff.d.ts +1 -0
  289. package/src/utils/json-diff.js +2 -1
  290. package/src/utils/json.js +3 -1
  291. package/src/utils/logger.js +1 -1
  292. package/src/utils/nx-cloud-utils.d.ts +1 -1
  293. package/src/utils/nx-cloud-utils.js +9 -4
  294. package/src/utils/nx-plugin.d.ts +32 -15
  295. package/src/utils/nx-plugin.deprecated.d.ts +10 -5
  296. package/src/utils/nx-plugin.deprecated.js +23 -0
  297. package/src/utils/nx-plugin.js +71 -80
  298. package/src/utils/output.d.ts +4 -2
  299. package/src/utils/output.js +44 -9
  300. package/src/utils/package-json.d.ts +4 -4
  301. package/src/utils/package-json.js +18 -12
  302. package/src/utils/package-manager.d.ts +8 -0
  303. package/src/utils/package-manager.js +29 -6
  304. package/src/utils/params.d.ts +12 -4
  305. package/src/utils/params.js +56 -8
  306. package/src/utils/plugins/core-plugins.js +8 -0
  307. package/src/utils/plugins/installed-plugins.d.ts +2 -1
  308. package/src/utils/plugins/installed-plugins.js +2 -2
  309. package/src/utils/plugins/local-plugins.js +1 -1
  310. package/src/utils/plugins/plugin-capabilities.d.ts +3 -2
  311. package/src/utils/plugins/plugin-capabilities.js +7 -7
  312. package/src/utils/typescript.js +1 -1
  313. package/src/utils/update-nxw.d.ts +2 -0
  314. package/src/utils/update-nxw.js +12 -0
  315. package/src/utils/workspace-configuration-check.js +1 -1
  316. package/src/utils/workspace-context.d.ts +6 -4
  317. package/src/utils/workspace-context.js +19 -9
  318. package/src/core/graph/polyfills.js +0 -1
  319. /package/src/command-line/init/{init.d.ts → init-v1.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
- import { ProjectConfiguration, ProjectsConfigurations } from '../../config/workspace-json-project-json';
1
+ import { ProjectConfiguration } from '../../config/workspace-json-project-json';
2
2
  import { NxJsonConfiguration } from '../../config/nx-json';
3
- import { FileData, ProjectGraphExternalNode } from '../../config/project-graph';
3
+ import { ConfigurationResult } from './project-configuration-utils';
4
4
  import { LoadedNxPlugin } from '../../utils/nx-plugin';
5
5
  /**
6
6
  * Walks the workspace directory to create the `projectFileMap`, `ProjectConfigurations` and `allWorkspaceFiles`
@@ -8,14 +8,13 @@ import { LoadedNxPlugin } from '../../utils/nx-plugin';
8
8
  * @param workspaceRoot
9
9
  * @param nxJson
10
10
  */
11
- export declare function retrieveWorkspaceFiles(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<{
12
- allWorkspaceFiles: FileData[];
11
+ export declare function retrieveWorkspaceFiles(workspaceRoot: string, projectRootMap: Record<string, string>): Promise<{
12
+ allWorkspaceFiles: import("nx/src/devkit-exports").FileData[];
13
13
  fileMap: {
14
- projectFileMap: Record<string, import("../../native").FileData[]>;
15
- nonProjectFiles: import("../../native").FileData[];
14
+ projectFileMap: ProjectFiles;
15
+ nonProjectFiles: import("nx/src/native").FileData[];
16
16
  };
17
- projectConfigurations: ProjectsConfigurations;
18
- externalNodes: Record<string, ProjectGraphExternalNode>;
17
+ rustReferences: import("nx/src/native").NxWorkspaceFilesExternals;
19
18
  }>;
20
19
  /**
21
20
  * Walk through the workspace and return `ProjectConfigurations`. Only use this if the projectFileMap is not needed.
@@ -23,26 +22,8 @@ export declare function retrieveWorkspaceFiles(workspaceRoot: string, nxJson: Nx
23
22
  * @param workspaceRoot
24
23
  * @param nxJson
25
24
  */
26
- export declare function retrieveProjectConfigurations(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<{
27
- externalNodes: Record<string, ProjectGraphExternalNode>;
28
- projectNodes: Record<string, ProjectConfiguration>;
29
- }>;
30
- export declare function retrieveProjectConfigurationsWithAngularProjects(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<{
31
- externalNodes: Record<string, ProjectGraphExternalNode>;
32
- projectNodes: Record<string, ProjectConfiguration>;
33
- }>;
34
- /**
35
- * @deprecated Use {@link retrieveProjectConfigurations} instead.
36
- */
37
- export declare function retrieveProjectConfigurationsSync(workspaceRoot: string, nxJson: NxJsonConfiguration): {
38
- externalNodes: Record<string, ProjectGraphExternalNode>;
39
- projectNodes: Record<string, ProjectConfiguration>;
40
- };
41
- export declare function retrieveProjectConfigurationPaths(root: string, nxJson: NxJsonConfiguration): Promise<string[]>;
42
- export declare function retrieveProjectConfigurationPathsWithoutPluginInference(root: string): string[];
43
- export declare function retrieveProjectConfigurationsWithoutPluginInference(root: string): Record<string, ProjectConfiguration>;
44
- export declare function createProjectConfigurations(workspaceRoot: string, nxJson: NxJsonConfiguration, configFiles: string[], plugins: LoadedNxPlugin[]): {
45
- projects: Record<string, ProjectConfiguration>;
46
- externalNodes: Record<string, ProjectGraphExternalNode>;
47
- };
48
- export declare function configurationGlobs(workspaceRoot: string, plugins: LoadedNxPlugin[]): string[];
25
+ export declare function retrieveProjectConfigurations(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<ConfigurationResult>;
26
+ export declare function retrieveProjectConfigurationsWithAngularProjects(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<ConfigurationResult>;
27
+ export declare function retrieveProjectConfigurationPaths(root: string, plugins: LoadedNxPlugin[]): string[];
28
+ export declare function retrieveProjectConfigurationsWithoutPluginInference(root: string): Promise<Record<string, ProjectConfiguration>>;
29
+ export declare function configurationGlobs(plugins: LoadedNxPlugin[]): string[];
@@ -1,48 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.configurationGlobs = exports.createProjectConfigurations = exports.retrieveProjectConfigurationsWithoutPluginInference = exports.retrieveProjectConfigurationPathsWithoutPluginInference = exports.retrieveProjectConfigurationPaths = exports.retrieveProjectConfigurationsSync = exports.retrieveProjectConfigurationsWithAngularProjects = exports.retrieveProjectConfigurations = exports.retrieveWorkspaceFiles = void 0;
3
+ exports.configurationGlobs = exports.retrieveProjectConfigurationsWithoutPluginInference = exports.retrieveProjectConfigurationPaths = exports.retrieveProjectConfigurationsWithAngularProjects = exports.retrieveProjectConfigurations = exports.retrieveWorkspaceFiles = void 0;
4
4
  const perf_hooks_1 = require("perf_hooks");
5
5
  const installation_directory_1 = require("../../utils/installation-directory");
6
6
  const angular_json_1 = require("../../adapter/angular-json");
7
7
  const nx_json_1 = require("../../config/nx-json");
8
- const package_json_workspaces_1 = require("../../../plugins/package-json-workspaces");
8
+ const package_json_workspaces_1 = require("../../plugins/package-json-workspaces");
9
9
  const project_configuration_utils_1 = require("./project-configuration-utils");
10
10
  const nx_plugin_1 = require("../../utils/nx-plugin");
11
11
  const project_json_1 = require("../../plugins/project-json/build-nodes/project-json");
12
12
  const workspace_context_1 = require("../../utils/workspace-context");
13
+ const build_all_workspace_files_1 = require("./build-all-workspace-files");
13
14
  /**
14
15
  * Walks the workspace directory to create the `projectFileMap`, `ProjectConfigurations` and `allWorkspaceFiles`
15
16
  * @throws
16
17
  * @param workspaceRoot
17
18
  * @param nxJson
18
19
  */
19
- async function retrieveWorkspaceFiles(workspaceRoot, nxJson) {
20
+ async function retrieveWorkspaceFiles(workspaceRoot, projectRootMap) {
20
21
  perf_hooks_1.performance.mark('native-file-deps:start');
21
- const plugins = await (0, nx_plugin_1.loadNxPlugins)(nxJson?.plugins ?? [], (0, installation_directory_1.getNxRequirePaths)(workspaceRoot), workspaceRoot);
22
- let globs = configurationGlobs(workspaceRoot, plugins);
23
22
  perf_hooks_1.performance.mark('native-file-deps:end');
24
23
  perf_hooks_1.performance.measure('native-file-deps', 'native-file-deps:start', 'native-file-deps:end');
25
24
  perf_hooks_1.performance.mark('get-workspace-files:start');
26
- const { projectConfigurations, projectFileMap, globalFiles, externalNodes } = (0, workspace_context_1.getNxWorkspaceFilesFromContext)(workspaceRoot, globs, (configs) => {
27
- const projectConfigurations = createProjectConfigurations(workspaceRoot, nxJson, configs, plugins);
28
- return {
29
- projectNodes: projectConfigurations.projects,
30
- externalNodes: projectConfigurations.externalNodes,
31
- };
32
- });
25
+ const { projectFileMap, globalFiles, externalReferences } = (0, workspace_context_1.getNxWorkspaceFilesFromContext)(workspaceRoot, projectRootMap);
33
26
  perf_hooks_1.performance.mark('get-workspace-files:end');
34
27
  perf_hooks_1.performance.measure('get-workspace-files', 'get-workspace-files:start', 'get-workspace-files:end');
35
28
  return {
36
- allWorkspaceFiles: buildAllWorkspaceFiles(projectFileMap, globalFiles),
29
+ allWorkspaceFiles: (0, build_all_workspace_files_1.buildAllWorkspaceFiles)(projectFileMap, globalFiles),
37
30
  fileMap: {
38
31
  projectFileMap,
39
32
  nonProjectFiles: globalFiles,
40
33
  },
41
- projectConfigurations: {
42
- version: 2,
43
- projects: projectConfigurations,
44
- },
45
- externalNodes: externalNodes,
34
+ rustReferences: externalReferences,
46
35
  };
47
36
  }
48
37
  exports.retrieveWorkspaceFiles = retrieveWorkspaceFiles;
@@ -54,8 +43,7 @@ exports.retrieveWorkspaceFiles = retrieveWorkspaceFiles;
54
43
  */
55
44
  async function retrieveProjectConfigurations(workspaceRoot, nxJson) {
56
45
  const plugins = await (0, nx_plugin_1.loadNxPlugins)(nxJson?.plugins ?? [], (0, installation_directory_1.getNxRequirePaths)(workspaceRoot), workspaceRoot);
57
- const globs = configurationGlobs(workspaceRoot, plugins);
58
- return _retrieveProjectConfigurations(workspaceRoot, nxJson, plugins, globs);
46
+ return _retrieveProjectConfigurations(workspaceRoot, nxJson, plugins);
59
47
  }
60
48
  exports.retrieveProjectConfigurations = retrieveProjectConfigurations;
61
49
  async function retrieveProjectConfigurationsWithAngularProjects(workspaceRoot, nxJson) {
@@ -64,82 +52,40 @@ async function retrieveProjectConfigurationsWithAngularProjects(workspaceRoot, n
64
52
  !plugins.some((p) => p.plugin.name === angular_json_1.NX_ANGULAR_JSON_PLUGIN_NAME)) {
65
53
  plugins.push({ plugin: angular_json_1.NxAngularJsonPlugin });
66
54
  }
67
- const globs = configurationGlobs(workspaceRoot, plugins);
68
- return _retrieveProjectConfigurations(workspaceRoot, nxJson, plugins, globs);
55
+ return _retrieveProjectConfigurations(workspaceRoot, nxJson, plugins);
69
56
  }
70
57
  exports.retrieveProjectConfigurationsWithAngularProjects = retrieveProjectConfigurationsWithAngularProjects;
71
- /**
72
- * @deprecated Use {@link retrieveProjectConfigurations} instead.
73
- */
74
- function retrieveProjectConfigurationsSync(workspaceRoot, nxJson) {
75
- const plugins = (0, nx_plugin_1.loadNxPluginsSync)(nxJson?.plugins ?? [], (0, installation_directory_1.getNxRequirePaths)(workspaceRoot), workspaceRoot);
76
- const globs = configurationGlobs(workspaceRoot, plugins);
77
- return _retrieveProjectConfigurations(workspaceRoot, nxJson, plugins, globs);
78
- }
79
- exports.retrieveProjectConfigurationsSync = retrieveProjectConfigurationsSync;
80
- function _retrieveProjectConfigurations(workspaceRoot, nxJson, plugins, globs) {
81
- return (0, workspace_context_1.getProjectConfigurationsFromContext)(workspaceRoot, globs, (configs) => {
82
- const projectConfigurations = createProjectConfigurations(workspaceRoot, nxJson, configs, plugins);
83
- return {
84
- projectNodes: projectConfigurations.projects,
85
- externalNodes: projectConfigurations.externalNodes,
86
- };
87
- });
58
+ function _retrieveProjectConfigurations(workspaceRoot, nxJson, plugins) {
59
+ const globPatterns = configurationGlobs(plugins);
60
+ const workspaceFiles = (0, workspace_context_1.globWithWorkspaceContext)(workspaceRoot, globPatterns);
61
+ return (0, project_configuration_utils_1.createProjectConfigurations)(workspaceRoot, nxJson, workspaceFiles, plugins);
88
62
  }
89
- async function retrieveProjectConfigurationPaths(root, nxJson) {
90
- const projectGlobPatterns = configurationGlobs(root, await (0, nx_plugin_1.loadNxPlugins)(nxJson?.plugins ?? [], (0, installation_directory_1.getNxRequirePaths)(root), root));
63
+ function retrieveProjectConfigurationPaths(root, plugins) {
64
+ const projectGlobPatterns = configurationGlobs(plugins);
91
65
  return (0, workspace_context_1.globWithWorkspaceContext)(root, projectGlobPatterns);
92
66
  }
93
67
  exports.retrieveProjectConfigurationPaths = retrieveProjectConfigurationPaths;
94
- function retrieveProjectConfigurationPathsWithoutPluginInference(root) {
95
- return (0, workspace_context_1.globWithWorkspaceContext)(root, configurationGlobsWithoutPlugins(root));
96
- }
97
- exports.retrieveProjectConfigurationPathsWithoutPluginInference = retrieveProjectConfigurationPathsWithoutPluginInference;
98
68
  const projectsWithoutPluginCache = new Map();
99
69
  // TODO: This function is called way too often, it should be optimized without this cache
100
- function retrieveProjectConfigurationsWithoutPluginInference(root) {
70
+ async function retrieveProjectConfigurationsWithoutPluginInference(root) {
101
71
  const nxJson = (0, nx_json_1.readNxJson)(root);
102
- const projectGlobPatterns = configurationGlobsWithoutPlugins(root);
72
+ const plugins = await (0, nx_plugin_1.getDefaultPlugins)(root);
73
+ const projectGlobPatterns = retrieveProjectConfigurationPaths(root, plugins);
103
74
  const cacheKey = root + ',' + projectGlobPatterns.join(',');
104
75
  if (projectsWithoutPluginCache.has(cacheKey)) {
105
76
  return projectsWithoutPluginCache.get(cacheKey);
106
77
  }
107
- const projectConfigurations = (0, workspace_context_1.getProjectConfigurationsFromContext)(root, projectGlobPatterns, (configs) => {
108
- const { projects } = createProjectConfigurations(root, nxJson, configs, [
109
- { plugin: (0, package_json_workspaces_1.getNxPackageJsonWorkspacesPlugin)(root) },
110
- { plugin: project_json_1.CreateProjectJsonProjectsPlugin },
111
- ]);
112
- return {
113
- projectNodes: projects,
114
- externalNodes: {},
115
- };
116
- }).projectNodes;
117
- projectsWithoutPluginCache.set(cacheKey, projectConfigurations);
118
- return projectConfigurations;
78
+ const projectFiles = (0, workspace_context_1.globWithWorkspaceContext)(root, projectGlobPatterns) ?? [];
79
+ const { projects } = await (0, project_configuration_utils_1.createProjectConfigurations)(root, nxJson, projectFiles, [
80
+ { plugin: (0, package_json_workspaces_1.getNxPackageJsonWorkspacesPlugin)(root) },
81
+ { plugin: project_json_1.ProjectJsonProjectsPlugin },
82
+ ]);
83
+ projectsWithoutPluginCache.set(cacheKey, projects);
84
+ return projects;
119
85
  }
120
86
  exports.retrieveProjectConfigurationsWithoutPluginInference = retrieveProjectConfigurationsWithoutPluginInference;
121
- function buildAllWorkspaceFiles(projectFileMap, globalFiles) {
122
- perf_hooks_1.performance.mark('get-all-workspace-files:start');
123
- let fileData = Object.values(projectFileMap).flat();
124
- fileData = fileData.concat(globalFiles).sort();
125
- perf_hooks_1.performance.mark('get-all-workspace-files:end');
126
- perf_hooks_1.performance.measure('get-all-workspace-files', 'get-all-workspace-files:start', 'get-all-workspace-files:end');
127
- return fileData;
128
- }
129
- function createProjectConfigurations(workspaceRoot, nxJson, configFiles, plugins) {
130
- perf_hooks_1.performance.mark('build-project-configs:start');
131
- const { projects, externalNodes } = (0, project_configuration_utils_1.buildProjectsConfigurationsFromProjectPathsAndPlugins)(nxJson, configFiles, plugins, workspaceRoot);
132
- let projectConfigurations = projects;
133
- perf_hooks_1.performance.mark('build-project-configs:end');
134
- perf_hooks_1.performance.measure('build-project-configs', 'build-project-configs:start', 'build-project-configs:end');
135
- return {
136
- projects: projectConfigurations,
137
- externalNodes,
138
- };
139
- }
140
- exports.createProjectConfigurations = createProjectConfigurations;
141
- function configurationGlobs(workspaceRoot, plugins) {
142
- const globPatterns = configurationGlobsWithoutPlugins(workspaceRoot);
87
+ function configurationGlobs(plugins) {
88
+ const globPatterns = [];
143
89
  for (const { plugin } of plugins) {
144
90
  if (plugin.createNodes) {
145
91
  globPatterns.push(plugin.createNodes[0]);
@@ -148,10 +94,3 @@ function configurationGlobs(workspaceRoot, plugins) {
148
94
  return globPatterns;
149
95
  }
150
96
  exports.configurationGlobs = configurationGlobs;
151
- function configurationGlobsWithoutPlugins(workspaceRoot) {
152
- return [
153
- 'project.json',
154
- '**/project.json',
155
- ...(0, package_json_workspaces_1.getGlobPatternsFromPackageManagerWorkspaces)(workspaceRoot),
156
- ];
157
- }
@@ -7,16 +7,16 @@ const project_graph_1 = require("../../project-graph/project-graph");
7
7
  const configuration_1 = require("../../config/configuration");
8
8
  const async_iterator_1 = require("../../utils/async-iterator");
9
9
  const executor_utils_1 = require("../../command-line/run/executor-utils");
10
- function getBatchExecutor(executorName) {
10
+ function getBatchExecutor(executorName, projects) {
11
11
  const [nodeModule, exportName] = executorName.split(':');
12
- return (0, executor_utils_1.getExecutorInformation)(nodeModule, exportName, workspace_root_1.workspaceRoot);
12
+ return (0, executor_utils_1.getExecutorInformation)(nodeModule, exportName, workspace_root_1.workspaceRoot, projects);
13
13
  }
14
14
  async function runTasks(executorName, batchTaskGraph, fullTaskGraph) {
15
15
  const input = {};
16
16
  const projectGraph = await (0, project_graph_1.createProjectGraphAsync)();
17
17
  const projectsConfigurations = (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(projectGraph);
18
18
  const nxJsonConfiguration = (0, configuration_1.readNxJson)();
19
- const batchExecutor = getBatchExecutor(executorName);
19
+ const batchExecutor = getBatchExecutor(executorName, projectsConfigurations.projects);
20
20
  const tasks = Object.values(batchTaskGraph.tasks);
21
21
  const context = {
22
22
  root: workspace_root_1.workspaceRoot,
@@ -215,18 +215,21 @@ class Cache {
215
215
  }
216
216
  tryAndRetry(fn) {
217
217
  let attempts = 0;
218
- const baseTimeout = 100;
218
+ const baseTimeout = 5;
219
+ // Generate a random number between 2 and 4 to raise to the power of attempts
220
+ const baseExponent = Math.random() * 2 + 2;
219
221
  const _try = async () => {
220
222
  try {
221
223
  attempts++;
222
224
  return await fn();
223
225
  }
224
226
  catch (e) {
225
- if (attempts === 10) {
227
+ // Max time is 5 * 4^3 = 20480ms
228
+ if (attempts === 6) {
226
229
  // After enough attempts, throw the error
227
230
  throw e;
228
231
  }
229
- await new Promise((res) => setTimeout(res, baseTimeout * attempts));
232
+ await new Promise((res) => setTimeout(res, baseExponent ** attempts));
230
233
  return await _try();
231
234
  }
232
235
  };
@@ -170,7 +170,7 @@ class ProcessTasks {
170
170
  projectRoot: project.data.root,
171
171
  overrides: interpolatedOverrides,
172
172
  outputs: (0, utils_1.getOutputs)(this.projectGraph.nodes, qualifiedTarget, interpolatedOverrides),
173
- // TODO(v18): Remove cast here after typing is moved back onto TargetConfiguration
173
+ // TODO(v19): Remove cast here after typing is moved back onto TargetConfiguration
174
174
  cache: project.data.targets[target].cache,
175
175
  };
176
176
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const child_process_1 = require("child_process");
4
+ const path_1 = require("path");
5
+ const pseudo_ipc_1 = require("./pseudo-ipc");
6
+ const pseudoIPCPath = process.argv[2];
7
+ const forkId = process.argv[3];
8
+ const script = (0, path_1.join)(__dirname, '../../bin/run-executor.js');
9
+ const childProcess = (0, child_process_1.fork)(script, {
10
+ stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
11
+ });
12
+ const pseudoIPC = new pseudo_ipc_1.PseudoIPCClient(pseudoIPCPath);
13
+ pseudoIPC.onMessageFromParent(forkId, (message) => {
14
+ childProcess.send(message);
15
+ });
16
+ pseudoIPC.notifyChildIsReady(forkId);
17
+ process.on('message', (message) => {
18
+ pseudoIPC.sendMessageToParent(message);
19
+ });
20
+ childProcess.on('exit', (code) => {
21
+ pseudoIPC.close();
22
+ process.exit(code);
23
+ });
@@ -8,28 +8,36 @@ export declare class ForkedProcessTaskRunner {
8
8
  cliPath: string;
9
9
  private readonly verbose;
10
10
  private processes;
11
+ private pseudoTerminal;
11
12
  constructor(options: DefaultTasksRunnerOptions);
13
+ init(): Promise<void>;
12
14
  forkProcessForBatch({ executorName, taskGraph: batchTaskGraph }: Batch, fullTaskGraph: TaskGraph, env: NodeJS.ProcessEnv): Promise<BatchResults>;
13
- forkProcessPipeOutputCapture(task: Task, { streamOutput, temporaryOutputPath, taskGraph, env, }: {
14
- streamOutput: boolean;
15
+ forkProcessLegacy(task: Task, { temporaryOutputPath, streamOutput, pipeOutput, taskGraph, env, }: {
15
16
  temporaryOutputPath: string;
17
+ streamOutput: boolean;
18
+ pipeOutput: boolean;
16
19
  taskGraph: TaskGraph;
17
20
  env: NodeJS.ProcessEnv;
18
21
  }): Promise<{
19
22
  code: number;
20
23
  terminalOutput: string;
21
24
  }>;
22
- forkProcessDirectOutputCapture(task: Task, { streamOutput, temporaryOutputPath, taskGraph, env, }: {
23
- streamOutput: boolean;
25
+ forkProcess(task: Task, { temporaryOutputPath, streamOutput, taskGraph, env, disablePseudoTerminal, }: {
24
26
  temporaryOutputPath: string;
27
+ streamOutput: boolean;
28
+ pipeOutput: boolean;
25
29
  taskGraph: TaskGraph;
26
30
  env: NodeJS.ProcessEnv;
31
+ disablePseudoTerminal: boolean;
27
32
  }): Promise<{
28
33
  code: number;
29
34
  terminalOutput: string;
30
35
  }>;
36
+ private forkProcessWithPseudoTerminal;
37
+ private forkProcessPipeOutputCapture;
38
+ private forkProcessWithPrefixAndNotTTY;
39
+ private forkProcessDirectOutputCapture;
31
40
  private readTerminalOutput;
32
41
  private writeTerminalOutput;
33
- private signalToCode;
34
42
  private setupProcessEventListeners;
35
43
  }
@@ -11,6 +11,9 @@ const path_1 = require("path");
11
11
  const batch_messages_1 = require("./batch/batch-messages");
12
12
  const strip_indents_1 = require("../utils/strip-indents");
13
13
  const stream_1 = require("stream");
14
+ const pseudo_terminal_1 = require("./pseudo-terminal");
15
+ const exit_codes_1 = require("../utils/exit-codes");
16
+ const forkScript = (0, path_1.join)(__dirname, './fork.js');
14
17
  const workerPath = (0, path_1.join)(__dirname, './batch/run-batch.js');
15
18
  class ForkedProcessTaskRunner {
16
19
  constructor(options) {
@@ -18,6 +21,14 @@ class ForkedProcessTaskRunner {
18
21
  this.cliPath = (0, utils_1.getCliPath)();
19
22
  this.verbose = process.env.NX_VERBOSE_LOGGING === 'true';
20
23
  this.processes = new Set();
24
+ this.pseudoTerminal = pseudo_terminal_1.PseudoTerminal.isSupported()
25
+ ? (0, pseudo_terminal_1.getPseudoTerminal)()
26
+ : null;
27
+ }
28
+ async init() {
29
+ if (this.pseudoTerminal) {
30
+ await this.pseudoTerminal.init();
31
+ }
21
32
  this.setupProcessEventListeners();
22
33
  }
23
34
  // TODO: vsavkin delegate terminal output printing
@@ -31,7 +42,6 @@ class ForkedProcessTaskRunner {
31
42
  else {
32
43
  const args = (0, utils_1.getPrintableCommandArgsForTask)(Object.values(batchTaskGraph.tasks)[0]);
33
44
  output_1.output.logCommand(args.join(' '));
34
- output_1.output.addNewline();
35
45
  }
36
46
  const p = (0, child_process_1.fork)(workerPath, {
37
47
  stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
@@ -41,7 +51,7 @@ class ForkedProcessTaskRunner {
41
51
  p.once('exit', (code, signal) => {
42
52
  this.processes.delete(p);
43
53
  if (code === null)
44
- code = this.signalToCode(signal);
54
+ code = (0, exit_codes_1.signalToCode)(signal);
45
55
  if (code !== 0) {
46
56
  const results = {};
47
57
  for (const rootTaskId of batchTaskGraph.roots) {
@@ -83,13 +93,94 @@ class ForkedProcessTaskRunner {
83
93
  }
84
94
  });
85
95
  }
96
+ async forkProcessLegacy(task, { temporaryOutputPath, streamOutput, pipeOutput, taskGraph, env, }) {
97
+ return pipeOutput
98
+ ? await this.forkProcessPipeOutputCapture(task, {
99
+ temporaryOutputPath,
100
+ streamOutput,
101
+ taskGraph,
102
+ env,
103
+ })
104
+ : await this.forkProcessDirectOutputCapture(task, {
105
+ temporaryOutputPath,
106
+ streamOutput,
107
+ taskGraph,
108
+ env,
109
+ });
110
+ }
111
+ async forkProcess(task, { temporaryOutputPath, streamOutput, taskGraph, env, disablePseudoTerminal, }) {
112
+ const shouldPrefix = streamOutput && process.env.NX_PREFIX_OUTPUT === 'true';
113
+ // streamOutput would be false if we are running multiple targets
114
+ // there's no point in running the commands in a pty if we are not streaming the output
115
+ if (!this.pseudoTerminal ||
116
+ disablePseudoTerminal ||
117
+ !streamOutput ||
118
+ shouldPrefix) {
119
+ return this.forkProcessWithPrefixAndNotTTY(task, {
120
+ temporaryOutputPath,
121
+ streamOutput,
122
+ taskGraph,
123
+ env,
124
+ });
125
+ }
126
+ else {
127
+ return this.forkProcessWithPseudoTerminal(task, {
128
+ temporaryOutputPath,
129
+ streamOutput,
130
+ taskGraph,
131
+ env,
132
+ });
133
+ }
134
+ }
135
+ async forkProcessWithPseudoTerminal(task, { streamOutput, taskGraph, env, }) {
136
+ const args = (0, utils_1.getPrintableCommandArgsForTask)(task);
137
+ if (streamOutput) {
138
+ output_1.output.logCommand(args.join(' '));
139
+ }
140
+ const childId = task.id;
141
+ const p = await this.pseudoTerminal.fork(childId, forkScript, {
142
+ cwd: process.cwd(),
143
+ jsEnv: env,
144
+ quiet: !streamOutput,
145
+ });
146
+ p.send({
147
+ targetDescription: task.target,
148
+ overrides: task.overrides,
149
+ taskGraph,
150
+ isVerbose: this.verbose,
151
+ });
152
+ this.processes.add(p);
153
+ let terminalOutput = '';
154
+ p.onOutput((msg) => {
155
+ terminalOutput += msg;
156
+ });
157
+ return new Promise((res) => {
158
+ p.onExit((code) => {
159
+ // If the exit code is greater than 128, it's a special exit code for a signal
160
+ if (code >= 128) {
161
+ process.exit(code);
162
+ }
163
+ res({
164
+ code,
165
+ terminalOutput,
166
+ });
167
+ });
168
+ });
169
+ }
86
170
  forkProcessPipeOutputCapture(task, { streamOutput, temporaryOutputPath, taskGraph, env, }) {
171
+ return this.forkProcessWithPrefixAndNotTTY(task, {
172
+ streamOutput,
173
+ temporaryOutputPath,
174
+ taskGraph,
175
+ env,
176
+ });
177
+ }
178
+ forkProcessWithPrefixAndNotTTY(task, { streamOutput, temporaryOutputPath, taskGraph, env, }) {
87
179
  return new Promise((res, rej) => {
88
180
  try {
89
181
  const args = (0, utils_1.getPrintableCommandArgsForTask)(task);
90
182
  if (streamOutput) {
91
183
  output_1.output.logCommand(args.join(' '));
92
- output_1.output.addNewline();
93
184
  }
94
185
  const p = (0, child_process_1.fork)(this.cliPath, {
95
186
  stdio: ['inherit', 'pipe', 'pipe', 'ipc'],
@@ -137,7 +228,7 @@ class ForkedProcessTaskRunner {
137
228
  p.on('exit', (code, signal) => {
138
229
  this.processes.delete(p);
139
230
  if (code === null)
140
- code = this.signalToCode(signal);
231
+ code = (0, exit_codes_1.signalToCode)(signal);
141
232
  // we didn't print any output as we were running the command
142
233
  // print all the collected output|
143
234
  const terminalOutput = outWithErr.join('');
@@ -160,7 +251,6 @@ class ForkedProcessTaskRunner {
160
251
  const args = (0, utils_1.getPrintableCommandArgsForTask)(task);
161
252
  if (streamOutput) {
162
253
  output_1.output.logCommand(args.join(' '));
163
- output_1.output.addNewline();
164
254
  }
165
255
  const p = (0, child_process_1.fork)(this.cliPath, {
166
256
  stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
@@ -182,7 +272,7 @@ class ForkedProcessTaskRunner {
182
272
  });
183
273
  p.on('exit', (code, signal) => {
184
274
  if (code === null)
185
- code = this.signalToCode(signal);
275
+ code = (0, exit_codes_1.signalToCode)(signal);
186
276
  // we didn't print any output as we were running the command
187
277
  // print all the collected output
188
278
  let terminalOutput = '';
@@ -219,20 +309,20 @@ class ForkedProcessTaskRunner {
219
309
  writeTerminalOutput(outputPath, content) {
220
310
  (0, fs_1.writeFileSync)(outputPath, content);
221
311
  }
222
- signalToCode(signal) {
223
- if (signal === 'SIGHUP')
224
- return 128 + 1;
225
- if (signal === 'SIGINT')
226
- return 128 + 2;
227
- if (signal === 'SIGTERM')
228
- return 128 + 15;
229
- return 128;
230
- }
231
312
  setupProcessEventListeners() {
313
+ if (this.pseudoTerminal) {
314
+ this.pseudoTerminal.onMessageFromChildren((message) => {
315
+ process.send(message);
316
+ });
317
+ }
232
318
  // When the nx process gets a message, it will be sent into the task's process
233
319
  process.on('message', (message) => {
320
+ // this.publisher.publish(message.toString());
321
+ if (this.pseudoTerminal) {
322
+ this.pseudoTerminal.sendMessageToChildren(message);
323
+ }
234
324
  this.processes.forEach((p) => {
235
- if (p.connected) {
325
+ if ('connected' in p && p.connected) {
236
326
  p.send(message);
237
327
  }
238
328
  });
@@ -240,23 +330,23 @@ class ForkedProcessTaskRunner {
240
330
  // Terminate any task processes on exit
241
331
  process.on('exit', () => {
242
332
  this.processes.forEach((p) => {
243
- if (p.connected) {
333
+ if ('connected' in p ? p.connected : p.isAlive) {
244
334
  p.kill();
245
335
  }
246
336
  });
247
337
  });
248
338
  process.on('SIGINT', () => {
249
339
  this.processes.forEach((p) => {
250
- if (p.connected) {
340
+ if ('connected' in p ? p.connected : p.isAlive) {
251
341
  p.kill('SIGTERM');
252
342
  }
253
343
  });
254
344
  // we exit here because we don't need to write anything to cache.
255
- process.exit();
345
+ process.exit((0, exit_codes_1.signalToCode)('SIGINT'));
256
346
  });
257
347
  process.on('SIGTERM', () => {
258
348
  this.processes.forEach((p) => {
259
- if (p.connected) {
349
+ if ('connected' in p ? p.connected : p.isAlive) {
260
350
  p.kill('SIGTERM');
261
351
  }
262
352
  });
@@ -265,7 +355,7 @@ class ForkedProcessTaskRunner {
265
355
  });
266
356
  process.on('SIGHUP', () => {
267
357
  this.processes.forEach((p) => {
268
- if (p.connected) {
358
+ if ('connected' in p ? p.connected : p.isAlive) {
269
359
  p.kill('SIGTERM');
270
360
  }
271
361
  });
@@ -19,7 +19,7 @@ async function initTasksRunner(nxArgs) {
19
19
  return {
20
20
  invoke: async (opts) => {
21
21
  perf_hooks_1.performance.mark('code-loading:end');
22
- // TODO: This polyfills the outputs if someone doesn't pass a task with outputs. Remove this in Nx 18
22
+ // TODO: This polyfills the outputs if someone doesn't pass a task with outputs. Remove this in Nx 19
23
23
  opts.tasks.forEach((t) => {
24
24
  if (!t.outputs) {
25
25
  t.outputs = (0, utils_1.getOutputs)(projectGraph.nodes, t.target, t.overrides);