@nrwl/workspace 12.10.0-beta.6 → 13.0.0-beta.3

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 (116) hide show
  1. package/index.d.ts +1 -1
  2. package/index.js +2 -3
  3. package/index.js.map +1 -1
  4. package/migrations.json +6 -0
  5. package/package.json +5 -5
  6. package/src/command-line/dep-graph.js +17 -21
  7. package/src/command-line/dep-graph.js.map +1 -1
  8. package/src/command-line/examples.js +38 -38
  9. package/src/command-line/examples.js.map +1 -1
  10. package/src/command-line/lint.js +5 -4
  11. package/src/command-line/lint.js.map +1 -1
  12. package/src/command-line/nx-commands.js +26 -3
  13. package/src/command-line/nx-commands.js.map +1 -1
  14. package/src/command-line/supported-nx-commands.js +1 -0
  15. package/src/command-line/supported-nx-commands.js.map +1 -1
  16. package/src/command-line/utils.js +1 -1
  17. package/src/command-line/utils.js.map +1 -1
  18. package/src/core/dep-graph/main.es5.js +1 -1
  19. package/src/core/dep-graph/main.esm.js +1 -1
  20. package/src/core/dep-graph/polyfills.es5.js +1 -1
  21. package/src/core/dep-graph/polyfills.esm.js +1 -1
  22. package/src/core/dep-graph/runtime.es5.js +1 -1
  23. package/src/core/dep-graph/runtime.esm.js +1 -1
  24. package/src/core/file-utils.d.ts +11 -4
  25. package/src/core/file-utils.js +103 -15
  26. package/src/core/file-utils.js.map +1 -1
  27. package/src/core/hasher/file-hasher.d.ts +1 -16
  28. package/src/core/hasher/file-hasher.js +4 -20
  29. package/src/core/hasher/file-hasher.js.map +1 -1
  30. package/src/core/nx-deps/nx-deps-cache.d.ts +6 -6
  31. package/src/core/nx-deps/nx-deps-cache.js +9 -5
  32. package/src/core/nx-deps/nx-deps-cache.js.map +1 -1
  33. package/src/core/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.d.ts +2 -0
  34. package/src/core/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.js +12 -0
  35. package/src/core/project-graph/build-dependencies/build-explicit-typescript-and-package-json-dependencies.js.map +1 -0
  36. package/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.d.ts +3 -2
  37. package/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.js +14 -8
  38. package/src/core/project-graph/build-dependencies/explicit-package-json-dependencies.js.map +1 -1
  39. package/src/core/project-graph/build-dependencies/explicit-project-dependencies.d.ts +3 -2
  40. package/src/core/project-graph/build-dependencies/explicit-project-dependencies.js +12 -6
  41. package/src/core/project-graph/build-dependencies/explicit-project-dependencies.js.map +1 -1
  42. package/src/core/project-graph/build-project-graph.d.ts +7 -0
  43. package/src/core/project-graph/build-project-graph.js +221 -0
  44. package/src/core/project-graph/build-project-graph.js.map +1 -0
  45. package/src/core/project-graph/daemon/cache.d.ts +5 -13
  46. package/src/core/project-graph/daemon/cache.js +39 -16
  47. package/src/core/project-graph/daemon/cache.js.map +1 -1
  48. package/src/core/project-graph/daemon/client/client.js +32 -55
  49. package/src/core/project-graph/daemon/client/client.js.map +1 -1
  50. package/src/core/project-graph/daemon/client/exec-is-server-available.d.ts +1 -0
  51. package/src/core/project-graph/daemon/client/exec-is-server-available.js +13 -0
  52. package/src/core/project-graph/daemon/client/exec-is-server-available.js.map +1 -0
  53. package/src/core/project-graph/daemon/client/generate-help-output.d.ts +1 -0
  54. package/src/core/project-graph/daemon/client/generate-help-output.js +28 -0
  55. package/src/core/project-graph/daemon/client/generate-help-output.js.map +1 -0
  56. package/src/core/project-graph/daemon/server/logger.d.ts +19 -0
  57. package/src/core/project-graph/daemon/server/logger.js +41 -0
  58. package/src/core/project-graph/daemon/server/logger.js.map +1 -0
  59. package/src/core/project-graph/daemon/server/server.d.ts +1 -5
  60. package/src/core/project-graph/daemon/server/server.js +160 -193
  61. package/src/core/project-graph/daemon/server/server.js.map +1 -1
  62. package/src/core/project-graph/daemon/server/shutdown-utils.d.ts +13 -0
  63. package/src/core/project-graph/daemon/server/shutdown-utils.js +28 -0
  64. package/src/core/project-graph/daemon/server/shutdown-utils.js.map +1 -0
  65. package/src/core/project-graph/daemon/server/start.js +1 -8
  66. package/src/core/project-graph/daemon/server/start.js.map +1 -1
  67. package/src/core/project-graph/daemon/server/stop.js +1 -11
  68. package/src/core/project-graph/daemon/server/stop.js.map +1 -1
  69. package/src/core/project-graph/daemon/server/watcher.d.ts +1 -1
  70. package/src/core/project-graph/daemon/server/watcher.js +1 -1
  71. package/src/core/project-graph/daemon/socket-utils.d.ts +13 -0
  72. package/src/core/project-graph/daemon/socket-utils.js +39 -10
  73. package/src/core/project-graph/daemon/socket-utils.js.map +1 -1
  74. package/src/core/project-graph/daemon/tmp-dir.d.ts +7 -0
  75. package/src/core/project-graph/daemon/tmp-dir.js +59 -0
  76. package/src/core/project-graph/daemon/tmp-dir.js.map +1 -0
  77. package/src/core/project-graph/index.d.ts +1 -1
  78. package/src/core/project-graph/index.js +1 -3
  79. package/src/core/project-graph/index.js.map +1 -1
  80. package/src/core/project-graph/operators.js +1 -1
  81. package/src/core/project-graph/operators.js.map +1 -1
  82. package/src/core/project-graph/project-graph-worker.d.ts +1 -0
  83. package/src/core/project-graph/project-graph-worker.js +17 -0
  84. package/src/core/project-graph/project-graph-worker.js.map +1 -0
  85. package/src/core/project-graph/project-graph.d.ts +1 -30
  86. package/src/core/project-graph/project-graph.js +5 -195
  87. package/src/core/project-graph/project-graph.js.map +1 -1
  88. package/src/generators/init/init.js +27 -27
  89. package/src/generators/init/init.js.map +1 -1
  90. package/src/generators/new/new.js +1 -1
  91. package/src/generators/new/new.js.map +1 -1
  92. package/src/migrations/update-10-0-0/update-10-0-0.js +1 -1
  93. package/src/migrations/update-10-0-0/update-10-0-0.js.map +1 -1
  94. package/src/migrations/update-13-0-0/set-default-base-if-not-set.d.ts +3 -0
  95. package/src/migrations/update-13-0-0/set-default-base-if-not-set.js +30 -0
  96. package/src/migrations/update-13-0-0/set-default-base-if-not-set.js.map +1 -0
  97. package/src/utilities/default-base.js +2 -2
  98. package/src/utilities/default-base.js.map +1 -1
  99. package/src/utilities/run-webpack.d.ts +3 -2
  100. package/src/utilities/run-webpack.js +18 -34
  101. package/src/utilities/run-webpack.js.map +1 -1
  102. package/src/utils/ast-utils.d.ts +1 -10
  103. package/src/utils/ast-utils.js +1 -19
  104. package/src/utils/ast-utils.js.map +1 -1
  105. package/src/utils/testing-utils.js +1 -1
  106. package/src/utils/testing-utils.js.map +1 -1
  107. package/src/utils/versions.js +1 -1
  108. package/src/core/file-graph/index.d.ts +0 -1
  109. package/src/core/file-graph/index.js +0 -5
  110. package/src/core/file-graph/index.js.map +0 -1
  111. package/src/core/file-graph/project-file-map.d.ts +0 -3
  112. package/src/core/file-graph/project-file-map.js +0 -35
  113. package/src/core/file-graph/project-file-map.js.map +0 -1
  114. package/src/utilities/create-project-graph-from-tree.d.ts +0 -5
  115. package/src/utilities/create-project-graph-from-tree.js +0 -13
  116. package/src/utilities/create-project-graph-from-tree.js.map +0 -1
@@ -1,8 +1,4 @@
1
1
  /// <reference types="node" />
2
2
  import { Server } from 'net';
3
- interface StartServerOptions {
4
- serverLogOutputFile?: string;
5
- }
6
- export declare function startServer({ serverLogOutputFile, }: StartServerOptions): Promise<Server>;
3
+ export declare function startServer(): Promise<Server>;
7
4
  export declare function stopServer(): Promise<void>;
8
- export {};
@@ -4,250 +4,221 @@ exports.stopServer = exports.startServer = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const devkit_1 = require("@nrwl/devkit");
6
6
  const app_root_1 = require("@nrwl/tao/src/utils/app-root");
7
- const fs_1 = require("fs");
8
7
  const net_1 = require("net");
8
+ const path_1 = require("path");
9
9
  const perf_hooks_1 = require("perf_hooks");
10
+ const file_utils_1 = require("../../../file-utils");
10
11
  const file_hasher_1 = require("../../../hasher/file-hasher");
11
12
  const git_hasher_1 = require("../../../hasher/git-hasher");
12
- const project_graph_1 = require("../../project-graph");
13
13
  const socket_utils_1 = require("../socket-utils");
14
+ const logger_1 = require("./logger");
15
+ const shutdown_utils_1 = require("./shutdown-utils");
14
16
  const watcher_1 = require("./watcher");
15
- /**
16
- * We have two different use-cases for the "daemon" server:
17
- * 1) Running in a background process so that the daemon is purely an implementation detail.
18
- * 2) Running in the main process in order to aid with development/debugging (technically, of course, in this case
19
- * it isn't actually a daemon server at all, but for simplicity we stick with the same general name as its primary
20
- * reason for existence is to be run in a background process).
21
- *
22
- * For (1) we do not want to log things from the daemon server to stdout/stderr, so we instead write to a file.
23
- *
24
- * This file location will be set by the `./exec/index.ts` utilities when starting the server so that we can
25
- * provide feedback to the user as to its location via stdout on the parent process and still not cause the child
26
- * process to be "undetachable".
27
- *
28
- * For (2) we simply log to stdout.
29
- */
30
- let _serverLogOutputFile;
31
- function serverLog(...s) {
32
- /**
33
- * If _serverLogOutputFile has not be set when starting the server, it means we are
34
- * running it in the current process and we should log to stdout.
35
- */
36
- if (!_serverLogOutputFile) {
37
- console.log(formatLogMessage(`${s.join(' ')}`));
38
- return;
39
- }
40
- fs_1.appendFileSync(_serverLogOutputFile, formatLogMessage(`${s.join(' ')}\n`));
41
- }
42
- function formatLogMessage(message) {
43
- return `[NX Daemon Server] - ${new Date().toISOString()} - ${message}`;
44
- }
45
- /**
46
- * To improve the overall readibility of the logs, we categorize things by "trigger":
47
- *
48
- * - [REQUEST] meaning that the current set of actions were triggered by a client request to the server
49
- * - [WATCHER] meaning the the current set of actions were triggered by handling changes to the workspace files
50
- *
51
- * We keep those two "triggers" left aligned at the top level and then indent subsequent logs so that there is a
52
- * logical hierarchy/grouping.
53
- */
54
- function requestLog(...s) {
55
- serverLog(`[REQUEST]: ${s.join(' ')}`);
56
- }
57
- function watcherLog(...s) {
58
- serverLog(`[WATCHER]: ${s.join(' ')}`);
59
- }
60
- function nestedLog(...s) {
61
- serverLog(` ${s.join(' ')}`);
17
+ const build_project_graph_1 = require("../../build-project-graph");
18
+ const workspace_1 = require("@nrwl/tao/src/shared/workspace");
19
+ const nx_deps_cache_1 = require("../../../nx-deps/nx-deps-cache");
20
+ const configName = workspace_1.workspaceConfigName(app_root_1.appRootPath);
21
+ let cachedSerializedProjectGraphPromise;
22
+ let projectFileMapWithFiles;
23
+ let currentProjectGraphCache;
24
+ function createAndSerializeProjectGraph(updatedFiles, deletedFiles, shouldWriteCache) {
25
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
26
+ try {
27
+ perf_hooks_1.performance.mark('create-project-graph-start');
28
+ const workspaceJson = file_utils_1.readWorkspaceJson();
29
+ projectFileMapWithFiles = projectFileMapWithFiles
30
+ ? file_utils_1.updateProjectFileMap(workspaceJson, projectFileMapWithFiles.projectFileMap, projectFileMapWithFiles.allWorkspaceFiles, updatedFiles, deletedFiles)
31
+ : file_utils_1.createProjectFileMap(workspaceJson);
32
+ const { projectGraph, projectGraphCache } = yield build_project_graph_1.buildProjectGraphUsingProjectFileMap(workspaceJson, projectFileMapWithFiles.projectFileMap, projectFileMapWithFiles.allWorkspaceFiles, currentProjectGraphCache || nx_deps_cache_1.readCache(), shouldWriteCache, '4.0');
33
+ currentProjectGraphCache = projectGraphCache;
34
+ perf_hooks_1.performance.mark('create-project-graph-end');
35
+ perf_hooks_1.performance.measure('total execution time for createProjectGraph()', 'create-project-graph-start', 'create-project-graph-end');
36
+ perf_hooks_1.performance.mark('json-stringify-start');
37
+ const serializedProjectGraph = JSON.stringify(projectGraph);
38
+ perf_hooks_1.performance.mark('json-stringify-end');
39
+ perf_hooks_1.performance.measure('serialize graph', 'json-stringify-start', 'json-stringify-end');
40
+ return {
41
+ error: null,
42
+ serializedProjectGraph,
43
+ };
44
+ }
45
+ catch (err) {
46
+ return {
47
+ error: err,
48
+ serializedProjectGraph: null,
49
+ };
50
+ }
51
+ });
62
52
  }
63
- /**
64
- * We cache the latest known HEAD value so that we can potentially skip some initialization work.
65
- */
66
- let cachedGitHead;
67
- /**
68
- * We cache the latest copy of the serialized project graph itself in memory so that in the
69
- * best case scenario we can skip all graph construction and serialization work entirely.
70
- */
71
- let cachedSerializedProjectGraph;
72
- function createAndSerializeProjectGraph() {
73
- perf_hooks_1.performance.mark('create-project-graph-start');
74
- const projectGraph = project_graph_1.createProjectGraph(undefined, undefined, undefined, '4.0');
75
- perf_hooks_1.performance.mark('create-project-graph-end');
76
- perf_hooks_1.performance.measure('total execution time for createProjectGraph()', 'create-project-graph-start', 'create-project-graph-end');
77
- perf_hooks_1.performance.mark('json-stringify-start');
78
- const serializedProjectGraph = JSON.stringify(projectGraph);
79
- perf_hooks_1.performance.mark('json-stringify-end');
80
- perf_hooks_1.performance.measure('serialize graph', 'json-stringify-start', 'json-stringify-end');
81
- return serializedProjectGraph;
53
+ function respondToClient(socket, message) {
54
+ socket.write(message, () => {
55
+ // Close the connection once all data has been written so that the client knows when to read it.
56
+ socket.end();
57
+ logger_1.serverLogger.nestedLog(`Closed Connection to Client`);
58
+ });
82
59
  }
83
- /**
84
- * File watcher subscription.
85
- */
86
60
  let watcherSubscription;
87
- /**
88
- * We need to make sure that we instantiate the PerformanceObserver only once, otherwise
89
- * we will end up with duplicate entries in the server logs.
90
- */
91
61
  let performanceObserver;
92
62
  const server = net_1.createServer((socket) => {
63
+ shutdown_utils_1.resetInactivityTimeout(handleInactivityTimeout);
93
64
  if (!performanceObserver) {
94
65
  performanceObserver = new perf_hooks_1.PerformanceObserver((list) => {
95
66
  const entry = list.getEntries()[0];
96
- // Slight indentation to improve readability of the overall log file
97
- nestedLog(`Time taken for '${entry.name}'`, `${entry.duration}ms`);
67
+ logger_1.serverLogger.nestedLog(`Time taken for '${entry.name}'`, `${entry.duration}ms`);
98
68
  });
99
69
  performanceObserver.observe({ entryTypes: ['measure'], buffered: false });
100
70
  }
101
- socket.on('data', (data) => {
102
- /**
103
- * If anything other than the known project graph creation request payload is sent to
104
- * the server, we throw an error.
105
- */
71
+ socket.on('data', (data) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
72
+ shutdown_utils_1.resetInactivityTimeout(handleInactivityTimeout);
106
73
  const payload = data.toString();
107
74
  if (payload !== 'REQUEST_PROJECT_GRAPH_PAYLOAD') {
108
75
  throw new Error(`Unsupported payload sent to daemon server: ${payload}`);
109
76
  }
110
77
  perf_hooks_1.performance.mark('server-connection');
111
- requestLog('Client Request for Project Graph Received');
112
- const currentGitHead = git_hasher_1.gitRevParseHead(app_root_1.appRootPath);
113
- let serializedProjectGraph;
114
- /**
115
- * Cached HEAD has changed, we must perform full file-hashing initialization work and
116
- * recompute the project graph
117
- */
118
- if (currentGitHead !== cachedGitHead) {
119
- cachedSerializedProjectGraph = undefined;
120
- nestedLog(`Cached HEAD does not match current (${currentGitHead}), performing full file hash init and recomputing project graph...`);
121
- file_hasher_1.defaultFileHasher.init();
122
- cachedGitHead = currentGitHead;
123
- serializedProjectGraph = createAndSerializeProjectGraph();
78
+ logger_1.serverLogger.requestLog('Client Request for Project Graph Received');
79
+ if (!cachedSerializedProjectGraphPromise) {
80
+ cachedSerializedProjectGraphPromise = createAndSerializeProjectGraph(new Map(), [], true);
124
81
  }
125
- else {
126
- /**
127
- * We know at this point that the cached HEAD has not changed so now there are two possibilities:
128
- *
129
- * 1) We have not computed the project graph and cached it for the untracked and uncommitted changes
130
- * and need to ask git for this information (slower)
131
- *
132
- * 2) We already have a cached serialized project graph (which we trust has been kept up to date
133
- * by the file watching logic) so we can immediately resolve it to the client (faster)
134
- */
135
- if (cachedSerializedProjectGraph) {
136
- nestedLog(`State unchanged since last request, resolving in-memory cached project graph...`);
137
- serializedProjectGraph = cachedSerializedProjectGraph;
138
- }
139
- else {
140
- // Update the file-hasher's knowledge of the untracked and uncommitted changes in order to recompute the project graph
141
- file_hasher_1.defaultFileHasher.incrementalUpdate(git_hasher_1.getUntrackedAndUncommittedFileHashes(app_root_1.appRootPath));
142
- nestedLog(`Unknown untracked/uncommitted file state, recomputing project graph...`);
143
- serializedProjectGraph = createAndSerializeProjectGraph();
144
- }
82
+ const result = yield cachedSerializedProjectGraphPromise;
83
+ if (result.error) {
84
+ cachedSerializedProjectGraphPromise = undefined;
85
+ logger_1.serverLogger.nestedLog(`Error when preparing serialized project graph: ${result.error.message}`);
86
+ respondToClient(socket, socket_utils_1.serializeResult(result.error, result.serializedProjectGraph));
87
+ return;
88
+ }
89
+ const serializedResult = socket_utils_1.serializeResult(result.error, result.serializedProjectGraph);
90
+ if (!serializedResult) {
91
+ cachedSerializedProjectGraphPromise = undefined;
92
+ logger_1.serverLogger.nestedLog(`Error when serializing project graph result`);
93
+ respondToClient(socket, socket_utils_1.serializeResult(new Error('Critical error when serializing server result, check server logs'), null));
94
+ return;
145
95
  }
146
- /**
147
- * Cache the latest version of the project graph in memory so that we can potentially skip a lot
148
- * of expensive work on the next client request.
149
- *
150
- * For reference, on the very large test repo https://github.com/vsavkin/interstellar the project
151
- * graph nxdeps.json file is about 32MB, so memory utilization should not be a huge concern.
152
- */
153
- cachedSerializedProjectGraph = serializedProjectGraph;
154
96
  perf_hooks_1.performance.mark('serialized-project-graph-ready');
155
97
  perf_hooks_1.performance.measure('total for creating and serializing project graph', 'server-connection', 'serialized-project-graph-ready');
156
- socket.write(serializedProjectGraph, () => {
98
+ socket.write(serializedResult, () => {
157
99
  perf_hooks_1.performance.mark('serialized-project-graph-written-to-client');
158
100
  perf_hooks_1.performance.measure('write project graph to socket', 'serialized-project-graph-ready', 'serialized-project-graph-written-to-client');
159
- /**
160
- * Close the connection once all data has been written to the socket so that the client
161
- * knows when to read it.
162
- */
101
+ // Close the connection once all data has been written so that the client knows when to read it.
163
102
  socket.end();
164
103
  perf_hooks_1.performance.measure('total for server response', 'server-connection', 'serialized-project-graph-written-to-client');
165
- const bytesWritten = Buffer.byteLength(serializedProjectGraph, 'utf-8');
166
- nestedLog(`Closed Connection to Client (${bytesWritten} bytes transferred)`);
104
+ const bytesWritten = Buffer.byteLength(result.serializedProjectGraph, 'utf-8');
105
+ logger_1.serverLogger.nestedLog(`Closed Connection to Client (${bytesWritten} bytes transferred)`);
167
106
  });
168
- });
107
+ }));
169
108
  });
170
- /**
171
- * Server process termination clean up and logging.
172
- */
173
- function handleServerProcessTermination() {
174
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
175
- server.close();
176
- /**
177
- * Tear down any file watchers that may be running.
178
- */
179
- if (watcherSubscription) {
180
- yield watcherSubscription.unsubscribe();
181
- watcherLog(`Unsubscribed from changes within: ${app_root_1.appRootPath}`);
182
- }
183
- serverLog('Server Stopped');
184
- devkit_1.logger.info('NX Daemon Server - Stopped');
185
- process.exit(0);
109
+ function handleInactivityTimeout() {
110
+ shutdown_utils_1.handleServerProcessTermination({
111
+ server,
112
+ watcherSubscription,
113
+ reason: `${shutdown_utils_1.SERVER_INACTIVITY_TIMEOUT_MS}ms of inactivity`,
186
114
  });
187
115
  }
188
116
  process
189
- .on('SIGINT', handleServerProcessTermination)
190
- .on('SIGTERM', handleServerProcessTermination)
191
- .on('SIGHUP', handleServerProcessTermination);
117
+ .on('SIGINT', () => shutdown_utils_1.handleServerProcessTermination({
118
+ server,
119
+ watcherSubscription,
120
+ reason: 'received process SIGINT',
121
+ }))
122
+ .on('SIGTERM', () => shutdown_utils_1.handleServerProcessTermination({
123
+ server,
124
+ watcherSubscription,
125
+ reason: 'received process SIGTERM',
126
+ }))
127
+ .on('SIGHUP', () => shutdown_utils_1.handleServerProcessTermination({
128
+ server,
129
+ watcherSubscription,
130
+ reason: 'received process SIGHUP',
131
+ }));
132
+ function requireUncached(module) {
133
+ delete require.cache[require.resolve(module)];
134
+ return require(module);
135
+ }
136
+ /**
137
+ * We need to ensure that the server shuts down if the Nx installation changes.
138
+ */
139
+ let cachedNxVersion = resolveCurrentNxVersion();
140
+ function resolveCurrentNxVersion() {
141
+ const nrwlWorkspacePackageJsonPath = devkit_1.normalizePath(path_1.join(app_root_1.appRootPath, 'node_modules/@nrwl/workspace/package.json'));
142
+ try {
143
+ const { version } = requireUncached(nrwlWorkspacePackageJsonPath);
144
+ return version;
145
+ }
146
+ catch (_a) {
147
+ logger_1.serverLogger.nestedLog(`Error: Could not determine the current Nx version by inspecting: ${nrwlWorkspacePackageJsonPath}`);
148
+ return null;
149
+ }
150
+ }
151
+ function isNxVersionSame(currentNxVersion) {
152
+ if (currentNxVersion === null) {
153
+ // Something has gone wrong with figuring out the Nx version, declare the version as having changed
154
+ return false;
155
+ }
156
+ return currentNxVersion === cachedNxVersion;
157
+ }
192
158
  /**
193
159
  * When applicable files in the workspaces are changed (created, updated, deleted),
194
160
  * we need to recompute the cached serialized project graph so that it is readily
195
161
  * available for the next client request to the server.
196
162
  */
197
- const handleWorkspaceChanges = (err, changeEvents) => {
198
- /**
199
- * We know that something must have happened in the workspace so it makes sense
200
- * to proactively destroy any previous knowledge of the project graph at this point.
201
- */
202
- cachedSerializedProjectGraph = undefined;
163
+ const handleWorkspaceChanges = (err, changeEvents) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
164
+ shutdown_utils_1.resetInactivityTimeout(handleInactivityTimeout);
165
+ if (!isNxVersionSame(resolveCurrentNxVersion())) {
166
+ yield shutdown_utils_1.handleServerProcessTermination({
167
+ server,
168
+ watcherSubscription,
169
+ reason: '@nrwl/workspace installation changed',
170
+ });
171
+ return;
172
+ }
203
173
  if (err || !changeEvents || !changeEvents.length) {
204
- watcherLog('Unexpected Error');
174
+ logger_1.serverLogger.watcherLog('Unexpected Error');
205
175
  console.error(err);
206
176
  return;
207
177
  }
208
- watcherLog(watcher_1.convertChangeEventsToLogMessage(changeEvents));
209
- /**
210
- * Update the file-hasher's knowledge of the non-deleted changed files in order to
211
- * recompute and cache the project graph in memory.
212
- */
213
- try {
214
- const filesToHash = [];
215
- const deletedFiles = [];
216
- for (const event of changeEvents) {
217
- if (event.type === 'delete') {
218
- deletedFiles.push(event.path);
178
+ logger_1.serverLogger.watcherLog(watcher_1.convertChangeEventsToLogMessage(changeEvents));
179
+ cachedSerializedProjectGraphPromise = new Promise((res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
180
+ try {
181
+ const filesToHash = [];
182
+ const deletedFiles = [];
183
+ for (const event of changeEvents) {
184
+ if (event.type === 'delete') {
185
+ deletedFiles.push(event.path);
186
+ }
187
+ else {
188
+ filesToHash.push(event.path);
189
+ }
219
190
  }
220
- else {
221
- filesToHash.push(event.path);
191
+ perf_hooks_1.performance.mark('hash-watched-changes-start');
192
+ const updatedFiles = git_hasher_1.getGitHashForFiles(filesToHash, app_root_1.appRootPath);
193
+ perf_hooks_1.performance.mark('hash-watched-changes-end');
194
+ perf_hooks_1.performance.measure('hash changed files from watcher', 'hash-watched-changes-start', 'hash-watched-changes-end');
195
+ file_hasher_1.defaultFileHasher.incrementalUpdate(updatedFiles, deletedFiles);
196
+ logger_1.serverLogger.nestedLog(`Updated file-hasher based on watched changes, recomputing project graph...`);
197
+ // when workspace.json changes we cannot be sure about the correctness of the project file map
198
+ if (updatedFiles.has(configName) ||
199
+ deletedFiles.indexOf(configName) > -1) {
200
+ projectFileMapWithFiles = undefined;
222
201
  }
202
+ res(yield createAndSerializeProjectGraph(updatedFiles, deletedFiles, true));
223
203
  }
224
- perf_hooks_1.performance.mark('hash-watched-changes-start');
225
- const updatedHashes = git_hasher_1.getGitHashForFiles(filesToHash, app_root_1.appRootPath);
226
- perf_hooks_1.performance.mark('hash-watched-changes-end');
227
- perf_hooks_1.performance.measure('hash changed files from watcher', 'hash-watched-changes-start', 'hash-watched-changes-end');
228
- file_hasher_1.defaultFileHasher.incrementalUpdate(updatedHashes);
229
- file_hasher_1.defaultFileHasher.removeFiles(deletedFiles);
230
- nestedLog(`Updated file-hasher based on watched changes, recomputing project graph...`);
231
- cachedSerializedProjectGraph = createAndSerializeProjectGraph();
232
- }
233
- catch (err) {
234
- serverLog(`Unexpected Error`);
235
- console.error(err);
236
- }
237
- };
238
- function startServer({ serverLogOutputFile, }) {
204
+ catch (err) {
205
+ logger_1.serverLogger.log(`Unexpected Error`);
206
+ console.error(err);
207
+ }
208
+ }));
209
+ });
210
+ function startServer() {
239
211
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
240
- _serverLogOutputFile = serverLogOutputFile;
241
- // See notes above on OS differences regarding clean up of existings connections.
212
+ // See notes in socket-utils.ts on OS differences regarding clean up of existings connections.
242
213
  if (!socket_utils_1.isWindows) {
243
214
  socket_utils_1.killSocketOrPath();
244
215
  }
245
216
  return new Promise((resolve) => {
246
217
  server.listen(socket_utils_1.FULL_OS_SOCKET_PATH, () => tslib_1.__awaiter(this, void 0, void 0, function* () {
247
- serverLog(`Started listening on: ${socket_utils_1.FULL_OS_SOCKET_PATH}`);
218
+ logger_1.serverLogger.log(`Started listening on: ${socket_utils_1.FULL_OS_SOCKET_PATH}`);
248
219
  if (!watcherSubscription) {
249
220
  watcherSubscription = yield watcher_1.subscribeToWorkspaceChanges(handleWorkspaceChanges);
250
- watcherLog(`Subscribed to changes within: ${app_root_1.appRootPath}`);
221
+ logger_1.serverLogger.watcherLog(`Subscribed to changes within: ${app_root_1.appRootPath}`);
251
222
  }
252
223
  return resolve(server);
253
224
  }));
@@ -270,10 +241,6 @@ function stopServer() {
270
241
  }
271
242
  }
272
243
  socket_utils_1.killSocketOrPath();
273
- /**
274
- * The distinction regarding background process or not is not relevant for stopping the server,
275
- * always pretty print the message to stdout.
276
- */
277
244
  devkit_1.logger.info('NX Daemon Server - Stopped');
278
245
  return resolve();
279
246
  });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../../../../packages/workspace/src/core/project-graph/daemon/server/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../../../../packages/workspace/src/core/project-graph/daemon/server/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" />
2
+ import type { Server } from 'net';
3
+ import type { WatcherSubscription } from './watcher';
4
+ export declare const SERVER_INACTIVITY_TIMEOUT_MS: 10800000;
5
+ declare type ServerTerminationReason = `received process ${NodeJS.Signals}` | '@nrwl/workspace installation changed' | `${typeof SERVER_INACTIVITY_TIMEOUT_MS}ms of inactivity`;
6
+ interface HandleServerProcessTerminationParams {
7
+ server: Server;
8
+ reason: ServerTerminationReason;
9
+ watcherSubscription: WatcherSubscription | undefined;
10
+ }
11
+ export declare function handleServerProcessTermination({ server, reason, watcherSubscription, }: HandleServerProcessTerminationParams): Promise<void>;
12
+ export declare function resetInactivityTimeout(cb: () => void): void;
13
+ export {};
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resetInactivityTimeout = exports.handleServerProcessTermination = exports.SERVER_INACTIVITY_TIMEOUT_MS = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const app_root_1 = require("@nrwl/tao/src/utils/app-root");
6
+ const logger_1 = require("./logger");
7
+ exports.SERVER_INACTIVITY_TIMEOUT_MS = 10800000; // 10800000 ms = 3 hours
8
+ function handleServerProcessTermination({ server, reason, watcherSubscription, }) {
9
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
10
+ server.close();
11
+ if (watcherSubscription) {
12
+ yield watcherSubscription.unsubscribe();
13
+ logger_1.serverLogger.watcherLog(`Unsubscribed from changes within: ${app_root_1.appRootPath}`);
14
+ }
15
+ logger_1.serverLogger.log(`Server stopped because: "${reason}"`);
16
+ process.exit(0);
17
+ });
18
+ }
19
+ exports.handleServerProcessTermination = handleServerProcessTermination;
20
+ let serverInactivityTimerId;
21
+ function resetInactivityTimeout(cb) {
22
+ if (serverInactivityTimerId) {
23
+ clearTimeout(serverInactivityTimerId);
24
+ }
25
+ serverInactivityTimerId = setTimeout(cb, exports.SERVER_INACTIVITY_TIMEOUT_MS);
26
+ }
27
+ exports.resetInactivityTimeout = resetInactivityTimeout;
28
+ //# sourceMappingURL=shutdown-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown-utils.js","sourceRoot":"","sources":["../../../../../../../../packages/workspace/src/core/project-graph/daemon/server/shutdown-utils.ts"],"names":[],"mappings":";;;;AAAA,2DAA2D;AAE3D,qCAAwC;AAG3B,QAAA,4BAA4B,GAAG,QAAiB,CAAC,CAAC,wBAAwB;AAavF,SAAsB,8BAA8B,CAAC,EACnD,MAAM,EACN,MAAM,EACN,mBAAmB,GACkB;;QACrC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,mBAAmB,EAAE;YACvB,MAAM,mBAAmB,CAAC,WAAW,EAAE,CAAC;YACxC,qBAAY,CAAC,UAAU,CAAC,qCAAqC,sBAAW,EAAE,CAAC,CAAC;SAC7E;QACD,qBAAY,CAAC,GAAG,CAAC,4BAA4B,MAAM,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;CAAA;AAZD,wEAYC;AAED,IAAI,uBAAmD,CAAC;AAExD,SAAgB,sBAAsB,CAAC,EAAc;IACnD,IAAI,uBAAuB,EAAE;QAC3B,YAAY,CAAC,uBAAuB,CAAC,CAAC;KACvC;IACD,uBAAuB,GAAG,UAAU,CAAC,EAAE,EAAE,oCAA4B,CAAC,CAAC;AACzE,CAAC;AALD,wDAKC"}
@@ -1,18 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- /**
5
- * NOTE: This file is intended to be executed as a script by utilities found in ./index.ts
6
- */
7
4
  const devkit_1 = require("@nrwl/devkit");
8
5
  const server_1 = require("./server");
9
- const serverLogOutputFile = process.argv[2];
10
6
  (() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
11
7
  try {
12
- if (!serverLogOutputFile) {
13
- devkit_1.logger.info('NOTE: Running Daemon Server in current process, all logs are shown inline below:\n');
14
- }
15
- yield server_1.startServer({ serverLogOutputFile });
8
+ yield server_1.startServer();
16
9
  }
17
10
  catch (err) {
18
11
  devkit_1.logger.error(err);
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../../../../../packages/workspace/src/core/project-graph/daemon/server/start.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,yCAAsC;AACtC,qCAAuC;AAEvC,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE5C,CAAC,GAAS,EAAE;IACV,IAAI;QACF,IAAI,CAAC,mBAAmB,EAAE;YACxB,eAAM,CAAC,IAAI,CACT,oFAAoF,CACrF,CAAC;SACH;QACD,MAAM,oBAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC;KAC5C;IAAC,OAAO,GAAG,EAAE;QACZ,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB;AACH,CAAC,CAAA,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../../../../../packages/workspace/src/core/project-graph/daemon/server/start.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,qCAAuC;AAEvC,CAAC,GAAS,EAAE;IACV,IAAI;QACF,MAAM,oBAAW,EAAE,CAAC;KACrB;IAAC,OAAO,GAAG,EAAE;QACZ,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB;AACH,CAAC,CAAA,CAAC,EAAE,CAAC"}
@@ -1,23 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- /**
5
- * NOTE: This file is intended to be executed as a script by utilities found in ./index.ts
6
- */
7
4
  const devkit_1 = require("@nrwl/devkit");
8
5
  const cache_1 = require("../cache");
9
6
  const server_1 = require("./server");
10
7
  (() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
11
8
  try {
12
9
  yield server_1.stopServer();
13
- // Clean up any orphaned background process and clear cached metadata
14
- const cachedDaemonJson = yield cache_1.readDaemonJsonCache();
15
- if (cachedDaemonJson) {
16
- if (cachedDaemonJson.backgroundProcessId) {
17
- process.kill(cachedDaemonJson.backgroundProcessId);
18
- }
19
- cache_1.deleteDaemonJsonCache();
20
- }
10
+ yield cache_1.safelyCleanUpExistingProcess();
21
11
  }
22
12
  catch (err) {
23
13
  devkit_1.logger.error(err);
@@ -1 +1 @@
1
- {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../../../../../../packages/workspace/src/core/project-graph/daemon/server/stop.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,yCAAsC;AACtC,oCAAsE;AACtE,qCAAsC;AAEtC,CAAC,GAAS,EAAE;IACV,IAAI;QACF,MAAM,mBAAU,EAAE,CAAC;QAEnB,qEAAqE;QACrE,MAAM,gBAAgB,GAAG,MAAM,2BAAmB,EAAE,CAAC;QACrD,IAAI,gBAAgB,EAAE;YACpB,IAAI,gBAAgB,CAAC,mBAAmB,EAAE;gBACxC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;aACpD;YACD,6BAAqB,EAAE,CAAC;SACzB;KACF;IAAC,OAAO,GAAG,EAAE;QACZ,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB;AACH,CAAC,CAAA,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../../../../../../packages/workspace/src/core/project-graph/daemon/server/stop.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,oCAAwD;AACxD,qCAAsC;AAEtC,CAAC,GAAS,EAAE;IACV,IAAI;QACF,MAAM,mBAAU,EAAE,CAAC;QACnB,MAAM,oCAA4B,EAAE,CAAC;KACtC;IAAC,OAAO,GAAG,EAAE;QACZ,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACnB;AACH,CAAC,CAAA,CAAC,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { AsyncSubscription, Event } from '@parcel/watcher';
2
2
  export declare type WatcherSubscription = AsyncSubscription;
3
- export declare type SubscribeToWorkspaceChangesCallback = (err: Error | null, changeEvents: Event[] | null) => void;
3
+ export declare type SubscribeToWorkspaceChangesCallback = (err: Error | null, changeEvents: Event[] | null) => Promise<void>;
4
4
  export declare function subscribeToWorkspaceChanges(cb: SubscribeToWorkspaceChangesCallback): Promise<AsyncSubscription>;
5
5
  /**
6
6
  * NOTE: An event type of "create" will also apply to the case where the user has restored
@@ -18,7 +18,7 @@ const socket_utils_1 = require("../socket-utils");
18
18
  /**
19
19
  * This configures the files and directories which we always want to ignore as part of file watching
20
20
  * and which we know the location of statically (meaning irrespective of user configuration files).
21
- * This has the advantage of being ignored directly within the C++ layer of `@parcel/bunder` so there
21
+ * This has the advantage of being ignored directly within the C++ layer of `@parcel/watcher` so there
22
22
  * is less pressure on the main JavaScript thread.
23
23
  *
24
24
  * Other ignored entries will need to be determined dynamically by reading and evaluating the user's
@@ -1,3 +1,16 @@
1
+ import type { ProjectGraph } from '@nrwl/devkit';
1
2
  export declare const isWindows: boolean;
3
+ /**
4
+ * For IPC with the daemon server we use unix sockets or windows named pipes, depending on the user's operating system.
5
+ *
6
+ * See https://nodejs.org/dist/latest-v14.x/docs/api/net.html#net_identifying_paths_for_ipc_connections for a full breakdown
7
+ * of OS differences between Unix domain sockets and named pipes.
8
+ */
2
9
  export declare const FULL_OS_SOCKET_PATH: string;
3
10
  export declare function killSocketOrPath(): void;
11
+ export interface ProjectGraphServerResult {
12
+ error: Error | null;
13
+ projectGraph: ProjectGraph | null;
14
+ }
15
+ export declare function serializeResult(error: Error | null, serializedProjectGraph: string | null): string | null;
16
+ export declare function deserializeResult(serializedResult: string): ProjectGraphServerResult;