nx 19.2.0-canary.20240531-2cb7ecb → 19.2.0-canary.20240604-0594deb
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/post-install.js +8 -8
- package/package.json +12 -12
- package/src/command-line/deprecated/command-objects.js +2 -1
- package/src/command-line/examples.js +59 -5
- package/src/command-line/graph/command-object.d.ts +25 -2
- package/src/command-line/graph/command-object.js +57 -3
- package/src/command-line/graph/graph.js +2 -1
- package/src/command-line/init/implementation/react/index.js +1 -1
- package/src/command-line/init/implementation/react/rename-js-to-jsx.d.ts +1 -1
- package/src/command-line/init/implementation/react/rename-js-to-jsx.js +2 -2
- package/src/command-line/init/init-v2.js +1 -1
- package/src/command-line/nx-commands.js +1 -1
- package/src/command-line/yargs-utils/shared-options.d.ts +0 -21
- package/src/command-line/yargs-utils/shared-options.js +2 -52
- package/src/daemon/client/client.d.ts +6 -0
- package/src/daemon/client/client.js +45 -2
- package/src/daemon/is-on-daemon.d.ts +1 -0
- package/src/daemon/is-on-daemon.js +7 -0
- package/src/daemon/message-types/get-context-file-data.d.ts +5 -0
- package/src/daemon/message-types/get-context-file-data.js +11 -0
- package/src/daemon/message-types/get-files-in-directory.d.ts +6 -0
- package/src/daemon/message-types/get-files-in-directory.js +11 -0
- package/src/daemon/message-types/get-nx-workspace-files.d.ts +6 -0
- package/src/daemon/message-types/get-nx-workspace-files.js +11 -0
- package/src/daemon/message-types/glob.d.ts +7 -0
- package/src/daemon/message-types/glob.js +11 -0
- package/src/daemon/message-types/hash-glob.d.ts +7 -0
- package/src/daemon/message-types/hash-glob.js +11 -0
- package/src/daemon/message-types/update-context-files.d.ts +7 -0
- package/src/daemon/message-types/update-context-files.js +11 -0
- package/src/daemon/server/handle-context-file-data.d.ts +2 -0
- package/src/daemon/server/handle-context-file-data.js +13 -0
- package/src/daemon/server/handle-get-files-in-directory.d.ts +2 -0
- package/src/daemon/server/handle-get-files-in-directory.js +13 -0
- package/src/daemon/server/handle-glob.d.ts +2 -0
- package/src/daemon/server/handle-glob.js +13 -0
- package/src/daemon/server/handle-hash-glob.d.ts +2 -0
- package/src/daemon/server/handle-hash-glob.js +13 -0
- package/src/daemon/server/handle-nx-workspace-files.d.ts +2 -0
- package/src/daemon/server/handle-nx-workspace-files.js +13 -0
- package/src/daemon/server/plugins.js +1 -0
- package/src/daemon/server/server.js +39 -9
- package/src/devkit-exports.d.ts +1 -1
- package/src/devkit-exports.js +2 -1
- package/src/generators/utils/glob.d.ts +11 -0
- package/src/generators/utils/glob.js +20 -3
- package/src/generators/utils/project-configuration.js +1 -1
- package/src/project-graph/file-map-utils.js +1 -8
- package/src/project-graph/file-utils.js +33 -34
- package/src/project-graph/plugins/isolation/plugin-pool.js +10 -9
- package/src/project-graph/plugins/utils.d.ts +1 -1
- package/src/project-graph/utils/retrieve-workspace-files.d.ts +4 -4
- package/src/project-graph/utils/retrieve-workspace-files.js +6 -6
- package/src/utils/all-file-data.js +1 -7
- package/src/utils/workspace-context.d.ts +13 -5
- package/src/utils/workspace-context.js +45 -14
- package/src/daemon/server/handle-request-file-data.d.ts +0 -4
- package/src/daemon/server/handle-request-file-data.js +0 -13
@@ -0,0 +1,11 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.isHandleGlobMessage = exports.GLOB = void 0;
|
4
|
+
exports.GLOB = 'GLOB';
|
5
|
+
function isHandleGlobMessage(message) {
|
6
|
+
return (typeof message === 'object' &&
|
7
|
+
message !== null &&
|
8
|
+
'type' in message &&
|
9
|
+
message['type'] === exports.GLOB);
|
10
|
+
}
|
11
|
+
exports.isHandleGlobMessage = isHandleGlobMessage;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.isHandleHashGlobMessage = exports.HASH_GLOB = void 0;
|
4
|
+
exports.HASH_GLOB = 'HASH_GLOB';
|
5
|
+
function isHandleHashGlobMessage(message) {
|
6
|
+
return (typeof message === 'object' &&
|
7
|
+
message !== null &&
|
8
|
+
'type' in message &&
|
9
|
+
message['type'] === exports.HASH_GLOB);
|
10
|
+
}
|
11
|
+
exports.isHandleHashGlobMessage = isHandleHashGlobMessage;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
export declare const GLOB: "GLOB";
|
2
|
+
export type HandleUpdateContextMessage = {
|
3
|
+
type: typeof GLOB;
|
4
|
+
updatedFiles: string[];
|
5
|
+
deletedFiles: string[];
|
6
|
+
};
|
7
|
+
export declare function isHandleUpdateContextMessage(message: unknown): message is HandleUpdateContextMessage;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.isHandleUpdateContextMessage = exports.GLOB = void 0;
|
4
|
+
exports.GLOB = 'GLOB';
|
5
|
+
function isHandleUpdateContextMessage(message) {
|
6
|
+
return (typeof message === 'object' &&
|
7
|
+
message !== null &&
|
8
|
+
'type' in message &&
|
9
|
+
message['type'] === exports.GLOB);
|
10
|
+
}
|
11
|
+
exports.isHandleUpdateContextMessage = isHandleUpdateContextMessage;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.handleContextFileData = void 0;
|
4
|
+
const workspace_context_1 = require("../../utils/workspace-context");
|
5
|
+
const workspace_root_1 = require("../../utils/workspace-root");
|
6
|
+
async function handleContextFileData() {
|
7
|
+
const files = await (0, workspace_context_1.getAllFileDataInContext)(workspace_root_1.workspaceRoot);
|
8
|
+
return {
|
9
|
+
response: JSON.stringify(files),
|
10
|
+
description: 'handleContextFileData',
|
11
|
+
};
|
12
|
+
}
|
13
|
+
exports.handleContextFileData = handleContextFileData;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.handleGetFilesInDirectory = void 0;
|
4
|
+
const workspace_context_1 = require("../../utils/workspace-context");
|
5
|
+
const workspace_root_1 = require("../../utils/workspace-root");
|
6
|
+
async function handleGetFilesInDirectory(dir) {
|
7
|
+
const files = await (0, workspace_context_1.getFilesInDirectoryUsingContext)(workspace_root_1.workspaceRoot, dir);
|
8
|
+
return {
|
9
|
+
response: JSON.stringify(files),
|
10
|
+
description: 'handleNxWorkspaceFiles',
|
11
|
+
};
|
12
|
+
}
|
13
|
+
exports.handleGetFilesInDirectory = handleGetFilesInDirectory;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.handleGlob = void 0;
|
4
|
+
const workspace_root_1 = require("../../utils/workspace-root");
|
5
|
+
const workspace_context_1 = require("../../utils/workspace-context");
|
6
|
+
async function handleGlob(globs, exclude) {
|
7
|
+
const files = await (0, workspace_context_1.globWithWorkspaceContext)(workspace_root_1.workspaceRoot, globs, exclude);
|
8
|
+
return {
|
9
|
+
response: JSON.stringify(files),
|
10
|
+
description: 'handleGlob',
|
11
|
+
};
|
12
|
+
}
|
13
|
+
exports.handleGlob = handleGlob;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.handleHashGlob = void 0;
|
4
|
+
const workspace_root_1 = require("../../utils/workspace-root");
|
5
|
+
const workspace_context_1 = require("../../utils/workspace-context");
|
6
|
+
async function handleHashGlob(globs, exclude) {
|
7
|
+
const files = await (0, workspace_context_1.hashWithWorkspaceContext)(workspace_root_1.workspaceRoot, globs, exclude);
|
8
|
+
return {
|
9
|
+
response: JSON.stringify(files),
|
10
|
+
description: 'handleHashGlob',
|
11
|
+
};
|
12
|
+
}
|
13
|
+
exports.handleHashGlob = handleHashGlob;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.handleNxWorkspaceFiles = void 0;
|
4
|
+
const workspace_context_1 = require("../../utils/workspace-context");
|
5
|
+
const workspace_root_1 = require("../../utils/workspace-root");
|
6
|
+
async function handleNxWorkspaceFiles(projectRootMap) {
|
7
|
+
const files = await (0, workspace_context_1.getNxWorkspaceFilesFromContext)(workspace_root_1.workspaceRoot, projectRootMap);
|
8
|
+
return {
|
9
|
+
response: JSON.stringify(files),
|
10
|
+
description: 'handleNxWorkspaceFiles',
|
11
|
+
};
|
12
|
+
}
|
13
|
+
exports.handleNxWorkspaceFiles = handleNxWorkspaceFiles;
|
@@ -13,6 +13,7 @@ async function getPlugins() {
|
|
13
13
|
const pluginsConfiguration = (0, nx_json_1.readNxJson)().plugins ?? [];
|
14
14
|
const [result, cleanupFn] = await (0, internal_api_1.loadNxPlugins)(pluginsConfiguration, workspace_root_1.workspaceRoot);
|
15
15
|
cleanup = cleanupFn;
|
16
|
+
loadedPlugins = result;
|
16
17
|
return result;
|
17
18
|
}
|
18
19
|
exports.getPlugins = getPlugins;
|
@@ -18,7 +18,6 @@ const file_watcher_sockets_1 = require("./file-watching/file-watcher-sockets");
|
|
18
18
|
const handle_hash_tasks_1 = require("./handle-hash-tasks");
|
19
19
|
const handle_outputs_tracking_1 = require("./handle-outputs-tracking");
|
20
20
|
const handle_process_in_background_1 = require("./handle-process-in-background");
|
21
|
-
const handle_request_file_data_1 = require("./handle-request-file-data");
|
22
21
|
const handle_request_project_graph_1 = require("./handle-request-project-graph");
|
23
22
|
const handle_request_shutdown_1 = require("./handle-request-shutdown");
|
24
23
|
const logger_1 = require("./logger");
|
@@ -26,9 +25,20 @@ const outputs_tracking_1 = require("./outputs-tracking");
|
|
26
25
|
const project_graph_incremental_recomputation_1 = require("./project-graph-incremental-recomputation");
|
27
26
|
const shutdown_utils_1 = require("./shutdown-utils");
|
28
27
|
const watcher_1 = require("./watcher");
|
28
|
+
const handle_glob_1 = require("./handle-glob");
|
29
|
+
const glob_1 = require("../message-types/glob");
|
30
|
+
const get_nx_workspace_files_1 = require("../message-types/get-nx-workspace-files");
|
31
|
+
const handle_nx_workspace_files_1 = require("./handle-nx-workspace-files");
|
32
|
+
const get_context_file_data_1 = require("../message-types/get-context-file-data");
|
33
|
+
const handle_context_file_data_1 = require("./handle-context-file-data");
|
34
|
+
const get_files_in_directory_1 = require("../message-types/get-files-in-directory");
|
35
|
+
const handle_get_files_in_directory_1 = require("./handle-get-files-in-directory");
|
36
|
+
const hash_glob_1 = require("../message-types/hash-glob");
|
37
|
+
const handle_hash_glob_1 = require("./handle-hash-glob");
|
29
38
|
let performanceObserver;
|
30
39
|
let workspaceWatcherError;
|
31
40
|
let outputsWatcherError;
|
41
|
+
global.NX_DAEMON = true;
|
32
42
|
let numberOfOpenConnections = 0;
|
33
43
|
const server = (0, net_1.createServer)(async (socket) => {
|
34
44
|
numberOfOpenConnections += 1;
|
@@ -59,8 +69,9 @@ async function handleMessage(socket, data) {
|
|
59
69
|
if (workspaceWatcherError) {
|
60
70
|
await (0, shutdown_utils_1.respondWithErrorAndExit)(socket, `File watcher error in the workspace '${workspace_root_1.workspaceRoot}'.`, workspaceWatcherError);
|
61
71
|
}
|
62
|
-
|
63
|
-
|
72
|
+
const outdated = daemonIsOutdated();
|
73
|
+
if (outdated) {
|
74
|
+
await (0, shutdown_utils_1.respondWithErrorAndExit)(socket, `Daemon outdated`, new Error(outdated));
|
64
75
|
}
|
65
76
|
(0, shutdown_utils_1.resetInactivityTimeout)(handleInactivityTimeout);
|
66
77
|
const unparsedPayload = data;
|
@@ -80,9 +91,6 @@ async function handleMessage(socket, data) {
|
|
80
91
|
else if (payload.type === 'HASH_TASKS') {
|
81
92
|
await handleResult(socket, 'HASH_TASKS', () => (0, handle_hash_tasks_1.handleHashTasks)(payload));
|
82
93
|
}
|
83
|
-
else if (payload.type === 'REQUEST_FILE_DATA') {
|
84
|
-
await handleResult(socket, 'REQUEST_FILE_DATA', () => (0, handle_request_file_data_1.handleRequestFileData)());
|
85
|
-
}
|
86
94
|
else if (payload.type === 'PROCESS_IN_BACKGROUND') {
|
87
95
|
await handleResult(socket, 'PROCESS_IN_BACKGROUND', () => (0, handle_process_in_background_1.handleProcessInBackground)(payload));
|
88
96
|
}
|
@@ -98,6 +106,21 @@ async function handleMessage(socket, data) {
|
|
98
106
|
else if (payload.type === 'REGISTER_FILE_WATCHER') {
|
99
107
|
file_watcher_sockets_1.registeredFileWatcherSockets.push({ socket, config: payload.config });
|
100
108
|
}
|
109
|
+
else if ((0, glob_1.isHandleGlobMessage)(payload)) {
|
110
|
+
await handleResult(socket, glob_1.GLOB, () => (0, handle_glob_1.handleGlob)(payload.globs, payload.exclude));
|
111
|
+
}
|
112
|
+
else if ((0, get_nx_workspace_files_1.isHandleNxWorkspaceFilesMessage)(payload)) {
|
113
|
+
await handleResult(socket, get_nx_workspace_files_1.GET_NX_WORKSPACE_FILES, () => (0, handle_nx_workspace_files_1.handleNxWorkspaceFiles)(payload.projectRootMap));
|
114
|
+
}
|
115
|
+
else if ((0, get_files_in_directory_1.isHandleGetFilesInDirectoryMessage)(payload)) {
|
116
|
+
await handleResult(socket, get_files_in_directory_1.GET_FILES_IN_DIRECTORY, () => (0, handle_get_files_in_directory_1.handleGetFilesInDirectory)(payload.dir));
|
117
|
+
}
|
118
|
+
else if ((0, get_context_file_data_1.isHandleContextFileDataMessage)(payload)) {
|
119
|
+
await handleResult(socket, get_context_file_data_1.GET_CONTEXT_FILE_DATA, () => (0, handle_context_file_data_1.handleContextFileData)());
|
120
|
+
}
|
121
|
+
else if ((0, hash_glob_1.isHandleHashGlobMessage)(payload)) {
|
122
|
+
await handleResult(socket, hash_glob_1.HASH_GLOB, () => (0, handle_hash_glob_1.handleHashGlob)(payload.globs, payload.exclude));
|
123
|
+
}
|
101
124
|
else {
|
102
125
|
await (0, shutdown_utils_1.respondWithErrorAndExit)(socket, `Invalid payload from the client`, new Error(`Unsupported payload sent to daemon server: ${unparsedPayload}`));
|
103
126
|
}
|
@@ -145,7 +168,13 @@ function registerProcessTerminationListeners() {
|
|
145
168
|
}
|
146
169
|
let existingLockHash;
|
147
170
|
function daemonIsOutdated() {
|
148
|
-
|
171
|
+
if (nxVersionChanged()) {
|
172
|
+
return 'NX_VERSION_CHANGED';
|
173
|
+
}
|
174
|
+
else if (lockFileHashChanged()) {
|
175
|
+
return 'LOCK_FILES_CHANGED';
|
176
|
+
}
|
177
|
+
return null;
|
149
178
|
}
|
150
179
|
function nxVersionChanged() {
|
151
180
|
return versions_1.nxVersion !== getInstalledNxVersion();
|
@@ -192,10 +221,11 @@ const handleWorkspaceChanges = async (err, changeEvents) => {
|
|
192
221
|
}
|
193
222
|
try {
|
194
223
|
(0, shutdown_utils_1.resetInactivityTimeout)(handleInactivityTimeout);
|
195
|
-
|
224
|
+
const outdatedReason = daemonIsOutdated();
|
225
|
+
if (outdatedReason) {
|
196
226
|
await (0, shutdown_utils_1.handleServerProcessTermination)({
|
197
227
|
server,
|
198
|
-
reason:
|
228
|
+
reason: outdatedReason,
|
199
229
|
});
|
200
230
|
return;
|
201
231
|
}
|
package/src/devkit-exports.d.ts
CHANGED
@@ -58,7 +58,7 @@ export { addProjectConfiguration, readProjectConfiguration, removeProjectConfigu
|
|
58
58
|
/**
|
59
59
|
* @category Generators
|
60
60
|
*/
|
61
|
-
export { glob } from './generators/utils/glob';
|
61
|
+
export { glob, globAsync } from './generators/utils/glob';
|
62
62
|
/**
|
63
63
|
* @category Generators
|
64
64
|
*/
|
package/src/devkit-exports.js
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
* Try hard to not add to this API to reduce the surface area we need to maintain.
|
5
5
|
*/
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
7
|
-
exports.createProjectFileMapUsingProjectGraph = exports.cacheDir = exports.hashArray = exports.defaultTasksRunner = exports.getOutputsForTargetAndConfiguration = exports.readProjectsConfigurationFromProjectGraph = exports.readCachedProjectGraph = exports.createProjectGraphAsync = exports.reverse = exports.appRootPath = exports.workspaceRoot = exports.normalizePath = exports.joinPathFragments = exports.stripIndents = exports.writeJsonFile = exports.readJsonFile = exports.stripJsonComments = exports.serializeJson = exports.parseJson = exports.updateJson = exports.writeJson = exports.readJson = exports.validateDependency = exports.ProjectGraphBuilder = exports.DependencyType = exports.updateNxJson = exports.readNxJson = exports.glob = exports.getProjects = exports.updateProjectConfiguration = exports.removeProjectConfiguration = exports.readProjectConfiguration = exports.addProjectConfiguration = exports.runExecutor = exports.isWorkspacesEnabled = exports.getPackageManagerVersion = exports.detectPackageManager = exports.getPackageManagerCommand = exports.output = exports.logger = exports.createNodesFromFiles = exports.AggregateCreateNodesError = exports.workspaceLayout = void 0;
|
7
|
+
exports.createProjectFileMapUsingProjectGraph = exports.cacheDir = exports.hashArray = exports.defaultTasksRunner = exports.getOutputsForTargetAndConfiguration = exports.readProjectsConfigurationFromProjectGraph = exports.readCachedProjectGraph = exports.createProjectGraphAsync = exports.reverse = exports.appRootPath = exports.workspaceRoot = exports.normalizePath = exports.joinPathFragments = exports.stripIndents = exports.writeJsonFile = exports.readJsonFile = exports.stripJsonComments = exports.serializeJson = exports.parseJson = exports.updateJson = exports.writeJson = exports.readJson = exports.validateDependency = exports.ProjectGraphBuilder = exports.DependencyType = exports.updateNxJson = exports.readNxJson = exports.globAsync = exports.glob = exports.getProjects = exports.updateProjectConfiguration = exports.removeProjectConfiguration = exports.readProjectConfiguration = exports.addProjectConfiguration = exports.runExecutor = exports.isWorkspacesEnabled = exports.getPackageManagerVersion = exports.detectPackageManager = exports.getPackageManagerCommand = exports.output = exports.logger = exports.createNodesFromFiles = exports.AggregateCreateNodesError = exports.workspaceLayout = void 0;
|
8
8
|
var configuration_1 = require("./config/configuration");
|
9
9
|
Object.defineProperty(exports, "workspaceLayout", { enumerable: true, get: function () { return configuration_1.workspaceLayout; } });
|
10
10
|
var error_types_1 = require("./project-graph/error-types");
|
@@ -48,6 +48,7 @@ Object.defineProperty(exports, "getProjects", { enumerable: true, get: function
|
|
48
48
|
*/
|
49
49
|
var glob_1 = require("./generators/utils/glob");
|
50
50
|
Object.defineProperty(exports, "glob", { enumerable: true, get: function () { return glob_1.glob; } });
|
51
|
+
Object.defineProperty(exports, "globAsync", { enumerable: true, get: function () { return glob_1.globAsync; } });
|
51
52
|
/**
|
52
53
|
* @category Generators
|
53
54
|
*/
|
@@ -7,5 +7,16 @@ import { Tree } from '../tree';
|
|
7
7
|
* @param tree The file system tree
|
8
8
|
* @param patterns A list of glob patterns
|
9
9
|
* @returns Normalized paths in the workspace that match the provided glob patterns.
|
10
|
+
* @deprecated Use {@link globAsync} instead.
|
10
11
|
*/
|
11
12
|
export declare function glob(tree: Tree, patterns: string[]): string[];
|
13
|
+
/**
|
14
|
+
* Performs a tree-aware glob search on the files in a workspace. Able to find newly
|
15
|
+
* created files and hides deleted files before the updates are committed to disk.
|
16
|
+
* Paths should be unix-style with forward slashes.
|
17
|
+
*
|
18
|
+
* @param tree The file system tree
|
19
|
+
* @param patterns A list of glob patterns
|
20
|
+
* @returns Normalized paths in the workspace that match the provided glob patterns.
|
21
|
+
*/
|
22
|
+
export declare function globAsync(tree: Tree, patterns: string[]): Promise<string[]>;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.glob = void 0;
|
3
|
+
exports.globAsync = exports.glob = void 0;
|
4
4
|
const minimatch_1 = require("minimatch");
|
5
5
|
const globs_1 = require("../../utils/globs");
|
6
6
|
const workspace_context_1 = require("../../utils/workspace-context");
|
@@ -12,9 +12,27 @@ const workspace_context_1 = require("../../utils/workspace-context");
|
|
12
12
|
* @param tree The file system tree
|
13
13
|
* @param patterns A list of glob patterns
|
14
14
|
* @returns Normalized paths in the workspace that match the provided glob patterns.
|
15
|
+
* @deprecated Use {@link globAsync} instead.
|
15
16
|
*/
|
16
17
|
function glob(tree, patterns) {
|
17
|
-
|
18
|
+
return combineGlobResultsWithTree(tree, patterns, (0, workspace_context_1.globWithWorkspaceContextSync)(tree.root, patterns));
|
19
|
+
}
|
20
|
+
exports.glob = glob;
|
21
|
+
/**
|
22
|
+
* Performs a tree-aware glob search on the files in a workspace. Able to find newly
|
23
|
+
* created files and hides deleted files before the updates are committed to disk.
|
24
|
+
* Paths should be unix-style with forward slashes.
|
25
|
+
*
|
26
|
+
* @param tree The file system tree
|
27
|
+
* @param patterns A list of glob patterns
|
28
|
+
* @returns Normalized paths in the workspace that match the provided glob patterns.
|
29
|
+
*/
|
30
|
+
async function globAsync(tree, patterns) {
|
31
|
+
return combineGlobResultsWithTree(tree, patterns, await (0, workspace_context_1.globWithWorkspaceContext)(tree.root, patterns));
|
32
|
+
}
|
33
|
+
exports.globAsync = globAsync;
|
34
|
+
function combineGlobResultsWithTree(tree, patterns, results) {
|
35
|
+
const matches = new Set(results);
|
18
36
|
const combinedGlob = (0, globs_1.combineGlobPatterns)(patterns);
|
19
37
|
const matcher = minimatch_1.minimatch.makeRe(combinedGlob);
|
20
38
|
if (!matcher) {
|
@@ -32,4 +50,3 @@ function glob(tree, patterns) {
|
|
32
50
|
}
|
33
51
|
return Array.from(matches);
|
34
52
|
}
|
35
|
-
exports.glob = glob;
|
@@ -134,7 +134,7 @@ function readAndCombineAllProjectConfigurations(tree) {
|
|
134
134
|
'project.json',
|
135
135
|
...(0, package_json_workspaces_1.getGlobPatternsFromPackageManagerWorkspaces)(tree.root, (p) => (0, json_1.readJson)(tree, p, { expectComments: true })),
|
136
136
|
];
|
137
|
-
const globbedFiles = (0, workspace_context_1.
|
137
|
+
const globbedFiles = (0, workspace_context_1.globWithWorkspaceContextSync)(tree.root, patterns);
|
138
138
|
const createdFiles = findCreatedProjectFiles(tree, patterns);
|
139
139
|
const deletedFiles = findDeletedProjectFiles(tree, patterns);
|
140
140
|
const projectFiles = [...globbedFiles, ...createdFiles].filter((r) => deletedFiles.indexOf(r) === -1);
|
@@ -1,7 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.updateFileMap = exports.createFileMap = exports.createFileMapUsingProjectGraph = exports.createProjectFileMapUsingProjectGraph = void 0;
|
4
|
-
const client_1 = require("../daemon/client/client");
|
5
4
|
const workspace_context_1 = require("../utils/workspace-context");
|
6
5
|
const workspace_root_1 = require("../utils/workspace-root");
|
7
6
|
const project_graph_1 = require("./project-graph");
|
@@ -14,13 +13,7 @@ exports.createProjectFileMapUsingProjectGraph = createProjectFileMapUsingProject
|
|
14
13
|
// TODO: refactor this to pull straight from the rust context instead of creating the file map in JS
|
15
14
|
async function createFileMapUsingProjectGraph(graph) {
|
16
15
|
const configs = (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(graph);
|
17
|
-
let files;
|
18
|
-
if (client_1.daemonClient.enabled()) {
|
19
|
-
files = await client_1.daemonClient.getAllFileData();
|
20
|
-
}
|
21
|
-
else {
|
22
|
-
files = (0, workspace_context_1.getAllFileDataInContext)(workspace_root_1.workspaceRoot);
|
23
|
-
}
|
16
|
+
let files = await (0, workspace_context_1.getAllFileDataInContext)(workspace_root_1.workspaceRoot);
|
24
17
|
return createFileMap(configs, files);
|
25
18
|
}
|
26
19
|
exports.createFileMapUsingProjectGraph = createFileMapUsingProjectGraph;
|
@@ -11,11 +11,10 @@ const json_diff_1 = require("../utils/json-diff");
|
|
11
11
|
const project_graph_1 = require("./project-graph");
|
12
12
|
const angular_json_1 = require("../adapter/angular-json");
|
13
13
|
const ignore_1 = require("../utils/ignore");
|
14
|
-
const retrieve_workspace_files_1 = require("./utils/retrieve-workspace-files");
|
15
14
|
const project_configuration_utils_1 = require("./utils/project-configuration-utils");
|
16
|
-
const
|
17
|
-
const
|
18
|
-
const
|
15
|
+
const package_json_workspaces_1 = require("../plugins/package-json-workspaces");
|
16
|
+
const workspace_context_1 = require("../utils/workspace-context");
|
17
|
+
const project_json_1 = require("../plugins/project-json/build-nodes/project-json");
|
19
18
|
class WholeFileChange {
|
20
19
|
constructor() {
|
21
20
|
this.type = 'WholeFileChange';
|
@@ -115,7 +114,7 @@ function readWorkspaceConfig(opts) {
|
|
115
114
|
catch {
|
116
115
|
configuration = {
|
117
116
|
version: 2,
|
118
|
-
projects:
|
117
|
+
projects: getProjectsSync(root, nxJson),
|
119
118
|
};
|
120
119
|
}
|
121
120
|
if (opts.format === 'angularCli') {
|
@@ -142,38 +141,38 @@ exports.readPackageJson = readPackageJson;
|
|
142
141
|
/**
|
143
142
|
* TODO(v20): Remove this function.
|
144
143
|
*/
|
145
|
-
function
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
144
|
+
function getProjectsSync(root, nxJson) {
|
145
|
+
/**
|
146
|
+
* We can't update projects that come from plugins anyways, so we are going
|
147
|
+
* to ignore them for now. Plugins should add their own add/create/update methods
|
148
|
+
* if they would like to use devkit to update inferred projects.
|
149
|
+
*/
|
150
|
+
const patterns = [
|
151
|
+
'**/project.json',
|
152
|
+
'project.json',
|
153
|
+
...(0, package_json_workspaces_1.getGlobPatternsFromPackageManagerWorkspaces)(root, fileutils_1.readJsonFile),
|
150
154
|
];
|
151
|
-
const
|
152
|
-
|
153
|
-
for (const
|
154
|
-
|
155
|
-
|
156
|
-
|
155
|
+
const projectFiles = (0, workspace_context_1.globWithWorkspaceContextSync)(root, patterns);
|
156
|
+
const rootMap = {};
|
157
|
+
for (const projectFile of projectFiles) {
|
158
|
+
if ((0, path_1.basename)(projectFile) === 'project.json') {
|
159
|
+
const json = (0, fileutils_1.readJsonFile)(projectFile);
|
160
|
+
const config = (0, project_json_1.buildProjectFromProjectJson)(json, projectFile);
|
161
|
+
(0, project_configuration_utils_1.mergeProjectConfigurationIntoRootMap)(rootMap, config, undefined, undefined, true);
|
157
162
|
}
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
...r.projects[node],
|
170
|
-
};
|
171
|
-
(0, project_configuration_utils_1.mergeProjectConfigurationIntoRootMap)(projectRootMap, project);
|
172
|
-
}
|
163
|
+
else if ((0, path_1.basename)(projectFile) === 'package.json') {
|
164
|
+
const packageJson = (0, fileutils_1.readJsonFile)(projectFile);
|
165
|
+
const config = (0, package_json_workspaces_1.buildProjectConfigurationFromPackageJson)(packageJson, projectFile, nxJson);
|
166
|
+
if (!rootMap[config.root]) {
|
167
|
+
(0, project_configuration_utils_1.mergeProjectConfigurationIntoRootMap)(rootMap,
|
168
|
+
// Inferred targets, tags, etc don't show up when running generators
|
169
|
+
// This is to help avoid running into issues when trying to update the workspace
|
170
|
+
{
|
171
|
+
name: config.name,
|
172
|
+
root: config.root,
|
173
|
+
}, undefined, undefined, true);
|
173
174
|
}
|
174
175
|
}
|
175
176
|
}
|
176
|
-
return
|
177
|
-
projects: (0, project_configuration_utils_1.readProjectConfigurationsFromRootMap)(projectRootMap),
|
178
|
-
};
|
177
|
+
return (0, project_configuration_utils_1.readProjectConfigurationsFromRootMap)(rootMap);
|
179
178
|
}
|
@@ -15,17 +15,18 @@ function loadRemoteNxPlugin(plugin, root) {
|
|
15
15
|
// but its typescript.
|
16
16
|
const isWorkerTypescript = path.extname(__filename) === '.ts';
|
17
17
|
const workerPath = path.join(__dirname, 'plugin-worker');
|
18
|
+
const env = {
|
19
|
+
...process.env,
|
20
|
+
...(isWorkerTypescript
|
21
|
+
? {
|
22
|
+
// Ensures that the worker uses the same tsconfig as the main process
|
23
|
+
TS_NODE_PROJECT: path.join(__dirname, '../../../../tsconfig.lib.json'),
|
24
|
+
}
|
25
|
+
: {}),
|
26
|
+
};
|
18
27
|
const worker = (0, child_process_1.fork)(workerPath, [], {
|
19
28
|
stdio: ['ignore', 'inherit', 'inherit', 'ipc'],
|
20
|
-
env
|
21
|
-
...process.env,
|
22
|
-
...(isWorkerTypescript
|
23
|
-
? {
|
24
|
-
// Ensures that the worker uses the same tsconfig as the main process
|
25
|
-
TS_NODE_PROJECT: path.join(__dirname, '../../../tsconfig.lib.json'),
|
26
|
-
}
|
27
|
-
: {}),
|
28
|
-
},
|
29
|
+
env,
|
29
30
|
execArgv: [
|
30
31
|
...process.execArgv,
|
31
32
|
// If the worker is typescript, we need to register ts-node
|
@@ -5,4 +5,4 @@ export declare function isNxPluginV2(plugin: NxPlugin): plugin is NxPluginV2;
|
|
5
5
|
export declare function isNxPluginV1(plugin: NxPlugin | LoadedNxPlugin): plugin is NxPluginV1;
|
6
6
|
export declare function normalizeNxPlugin(plugin: NxPlugin): NormalizedPlugin;
|
7
7
|
export type AsyncFn<T extends Function> = T extends (...args: infer A) => infer R ? (...args: A) => Promise<Awaited<R>> : never;
|
8
|
-
export declare function createNodesFromFiles<T = unknown>(createNodes: CreateNodesFunction
|
8
|
+
export declare function createNodesFromFiles<T = unknown>(createNodes: CreateNodesFunction<T>, configFiles: readonly string[], options: T, context: CreateNodesContextV2): Promise<[file: string, value: CreateNodesResult][]>;
|
@@ -9,12 +9,12 @@ import { LoadedNxPlugin } from '../plugins/internal-api';
|
|
9
9
|
* @param nxJson
|
10
10
|
*/
|
11
11
|
export declare function retrieveWorkspaceFiles(workspaceRoot: string, projectRootMap: Record<string, string>): Promise<{
|
12
|
-
allWorkspaceFiles: import("
|
12
|
+
allWorkspaceFiles: import("nx/src/devkit-exports").FileData[];
|
13
13
|
fileMap: {
|
14
14
|
projectFileMap: ProjectFiles;
|
15
|
-
nonProjectFiles: import("
|
15
|
+
nonProjectFiles: import("nx/src/native").FileData[];
|
16
16
|
};
|
17
|
-
rustReferences: import("
|
17
|
+
rustReferences: import("nx/src/native").NxWorkspaceFilesExternals;
|
18
18
|
}>;
|
19
19
|
/**
|
20
20
|
* Walk through the workspace and return `ProjectConfigurations`. Only use this if the projectFileMap is not needed.
|
@@ -23,7 +23,7 @@ export declare function retrieveProjectConfigurations(plugins: LoadedNxPlugin[],
|
|
23
23
|
export declare function retrieveProjectConfigurationsWithAngularProjects(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<ConfigurationResult>;
|
24
24
|
export declare function retrieveProjectConfigurationPaths(root: string, plugins: Array<{
|
25
25
|
createNodes?: readonly [string, ...unknown[]];
|
26
|
-
} & unknown>): string[]
|
26
|
+
} & unknown>): Promise<string[]>;
|
27
27
|
export declare function retrieveProjectConfigurationsWithoutPluginInference(root: string): Promise<Record<string, ProjectConfiguration>>;
|
28
28
|
export declare function configurationGlobs(plugins: Array<{
|
29
29
|
createNodes?: readonly [string, ...unknown[]];
|
@@ -20,7 +20,7 @@ async function retrieveWorkspaceFiles(workspaceRoot, projectRootMap) {
|
|
20
20
|
perf_hooks_1.performance.mark('native-file-deps:end');
|
21
21
|
perf_hooks_1.performance.measure('native-file-deps', 'native-file-deps:start', 'native-file-deps:end');
|
22
22
|
perf_hooks_1.performance.mark('get-workspace-files:start');
|
23
|
-
const { projectFileMap, globalFiles, externalReferences } = (0, workspace_context_1.getNxWorkspaceFilesFromContext)(workspaceRoot, projectRootMap);
|
23
|
+
const { projectFileMap, globalFiles, externalReferences } = await (0, workspace_context_1.getNxWorkspaceFilesFromContext)(workspaceRoot, projectRootMap);
|
24
24
|
perf_hooks_1.performance.mark('get-workspace-files:end');
|
25
25
|
perf_hooks_1.performance.measure('get-workspace-files', 'get-workspace-files:start', 'get-workspace-files:end');
|
26
26
|
return {
|
@@ -36,9 +36,9 @@ exports.retrieveWorkspaceFiles = retrieveWorkspaceFiles;
|
|
36
36
|
/**
|
37
37
|
* Walk through the workspace and return `ProjectConfigurations`. Only use this if the projectFileMap is not needed.
|
38
38
|
*/
|
39
|
-
function retrieveProjectConfigurations(plugins, workspaceRoot, nxJson) {
|
39
|
+
async function retrieveProjectConfigurations(plugins, workspaceRoot, nxJson) {
|
40
40
|
const globPatterns = configurationGlobs(plugins);
|
41
|
-
const workspaceFiles = (0, workspace_context_1.globWithWorkspaceContext)(workspaceRoot, globPatterns);
|
41
|
+
const workspaceFiles = await (0, workspace_context_1.globWithWorkspaceContext)(workspaceRoot, globPatterns);
|
42
42
|
return (0, project_configuration_utils_1.createProjectConfigurations)(workspaceRoot, nxJson, workspaceFiles, plugins);
|
43
43
|
}
|
44
44
|
exports.retrieveProjectConfigurations = retrieveProjectConfigurations;
|
@@ -50,7 +50,7 @@ async function retrieveProjectConfigurationsWithAngularProjects(workspaceRoot, n
|
|
50
50
|
pluginsToLoad.push((0, path_1.join)(__dirname, '../../adapter/angular-json'));
|
51
51
|
}
|
52
52
|
const [plugins, cleanup] = await (0, internal_api_1.loadNxPlugins)(nxJson?.plugins ?? [], workspaceRoot);
|
53
|
-
const res = retrieveProjectConfigurations(plugins, workspaceRoot, nxJson);
|
53
|
+
const res = await retrieveProjectConfigurations(plugins, workspaceRoot, nxJson);
|
54
54
|
cleanup();
|
55
55
|
return res;
|
56
56
|
}
|
@@ -65,12 +65,12 @@ const projectsWithoutPluginCache = new Map();
|
|
65
65
|
async function retrieveProjectConfigurationsWithoutPluginInference(root) {
|
66
66
|
const nxJson = (0, nx_json_1.readNxJson)(root);
|
67
67
|
const [plugins, cleanup] = await (0, internal_api_1.loadNxPlugins)([]); // only load default plugins
|
68
|
-
const projectGlobPatterns = retrieveProjectConfigurationPaths(root, plugins);
|
68
|
+
const projectGlobPatterns = await retrieveProjectConfigurationPaths(root, plugins);
|
69
69
|
const cacheKey = root + ',' + projectGlobPatterns.join(',');
|
70
70
|
if (projectsWithoutPluginCache.has(cacheKey)) {
|
71
71
|
return projectsWithoutPluginCache.get(cacheKey);
|
72
72
|
}
|
73
|
-
const projectFiles = (0, workspace_context_1.globWithWorkspaceContext)(root, projectGlobPatterns) ?? [];
|
73
|
+
const projectFiles = (await (0, workspace_context_1.globWithWorkspaceContext)(root, projectGlobPatterns)) ?? [];
|
74
74
|
const { projects } = await (0, project_configuration_utils_1.createProjectConfigurations)(root, nxJson, projectFiles, plugins);
|
75
75
|
projectsWithoutPluginCache.set(cacheKey, projects);
|
76
76
|
cleanup();
|
@@ -1,15 +1,9 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.allFileData = void 0;
|
4
|
-
const client_1 = require("../daemon/client/client");
|
5
4
|
const workspace_context_1 = require("./workspace-context");
|
6
5
|
const workspace_root_1 = require("./workspace-root");
|
7
6
|
function allFileData() {
|
8
|
-
|
9
|
-
return client_1.daemonClient.getAllFileData();
|
10
|
-
}
|
11
|
-
else {
|
12
|
-
return Promise.resolve((0, workspace_context_1.getAllFileDataInContext)(workspace_root_1.workspaceRoot));
|
13
|
-
}
|
7
|
+
return (0, workspace_context_1.getAllFileDataInContext)(workspace_root_1.workspaceRoot);
|
14
8
|
}
|
15
9
|
exports.allFileData = allFileData;
|