nx 19.2.0 → 19.2.1
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/init-local.js +0 -3
- package/bin/post-install.js +1 -3
- package/package.json +12 -12
- package/src/command-line/init/implementation/utils.js +15 -2
- package/src/core/graph/main.js +1 -1
- package/src/daemon/client/client.js +0 -2
- package/src/executors/run-commands/run-commands.impl.d.ts +1 -1
- package/src/executors/run-commands/run-commands.impl.js +37 -11
- package/src/project-graph/plugins/isolation/plugin-pool.js +2 -5
- package/src/project-graph/utils/retrieve-workspace-files.d.ts +3 -3
@@ -19,7 +19,6 @@ const nx_json_1 = require("../../config/nx-json");
|
|
19
19
|
const daemon_socket_messenger_1 = require("./daemon-socket-messenger");
|
20
20
|
const cache_1 = require("../cache");
|
21
21
|
const error_types_1 = require("../../project-graph/error-types");
|
22
|
-
const dotenv_1 = require("../../utils/dotenv");
|
23
22
|
const get_nx_workspace_files_1 = require("../message-types/get-nx-workspace-files");
|
24
23
|
const get_context_file_data_1 = require("../message-types/get-context-file-data");
|
25
24
|
const get_files_in_directory_1 = require("../message-types/get-files-in-directory");
|
@@ -41,7 +40,6 @@ class DaemonClient {
|
|
41
40
|
this._daemonReady = null;
|
42
41
|
this._out = null;
|
43
42
|
this._err = null;
|
44
|
-
(0, dotenv_1.loadRootEnvFiles)(workspace_root_1.workspaceRoot);
|
45
43
|
try {
|
46
44
|
this.nxJson = (0, configuration_1.readNxJson)();
|
47
45
|
}
|
@@ -29,7 +29,9 @@ const propKeys = [
|
|
29
29
|
'command',
|
30
30
|
'commands',
|
31
31
|
'color',
|
32
|
+
'no-color',
|
32
33
|
'parallel',
|
34
|
+
'no-parallel',
|
33
35
|
'readyWhen',
|
34
36
|
'cwd',
|
35
37
|
'args',
|
@@ -131,6 +133,7 @@ function normalizeOptions(options) {
|
|
131
133
|
'parse-numbers': false,
|
132
134
|
'parse-positional-numbers': false,
|
133
135
|
'dot-notation': false,
|
136
|
+
'camel-case-expansion': false,
|
134
137
|
},
|
135
138
|
});
|
136
139
|
options.unknownOptions = Object.keys(options)
|
@@ -294,21 +297,25 @@ function interpolateArgsIntoCommand(command, opts, forwardAllArgs) {
|
|
294
297
|
else if (forwardAllArgs) {
|
295
298
|
let args = '';
|
296
299
|
if (Object.keys(opts.unknownOptions ?? {}).length > 0) {
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
300
|
+
const unknownOptionsArgs = Object.keys(opts.unknownOptions)
|
301
|
+
.filter((k) => typeof opts.unknownOptions[k] !== 'object' &&
|
302
|
+
opts.parsedArgs[k] === opts.unknownOptions[k])
|
303
|
+
.map((k) => `--${k}=${opts.unknownOptions[k]}`)
|
304
|
+
.map(wrapArgIntoQuotesIfNeeded)
|
305
|
+
.join(' ');
|
306
|
+
if (unknownOptionsArgs) {
|
307
|
+
args += ` ${unknownOptionsArgs}`;
|
308
|
+
}
|
304
309
|
}
|
305
310
|
if (opts.args) {
|
306
311
|
args += ` ${opts.args}`;
|
307
312
|
}
|
308
313
|
if (opts.__unparsed__?.length > 0) {
|
309
|
-
const filterdParsedOptions = filterPropKeysFromUnParsedOptions(opts.__unparsed__, opts.
|
314
|
+
const filterdParsedOptions = filterPropKeysFromUnParsedOptions(opts.__unparsed__, opts.parsedArgs);
|
310
315
|
if (filterdParsedOptions.length > 0) {
|
311
|
-
args += ` ${filterdParsedOptions
|
316
|
+
args += ` ${filterdParsedOptions
|
317
|
+
.map(wrapArgIntoQuotesIfNeeded)
|
318
|
+
.join(' ')}`;
|
312
319
|
}
|
313
320
|
}
|
314
321
|
return `${command}${args}`;
|
@@ -332,13 +339,14 @@ function parseArgs(unparsedCommandArgs, unknownOptions, args) {
|
|
332
339
|
* @param unparsedCommandArgs e.g. { prop1: 'value1', prop2: 'value2', args: 'test'}
|
333
340
|
* @returns filtered options that are not part of the propKeys array e.g. ['--prop1', 'value1', '--prop2=value2']
|
334
341
|
*/
|
335
|
-
function filterPropKeysFromUnParsedOptions(__unparsed__,
|
342
|
+
function filterPropKeysFromUnParsedOptions(__unparsed__, parseArgs = {}) {
|
336
343
|
const parsedOptions = [];
|
337
344
|
for (let index = 0; index < __unparsed__.length; index++) {
|
338
345
|
const element = __unparsed__[index];
|
339
346
|
if (element.startsWith('--')) {
|
340
347
|
const key = element.replace('--', '');
|
341
348
|
if (element.includes('=')) {
|
349
|
+
// key can be in the format of --key=value or --key.subkey=value (e.g. env.foo=bar)
|
342
350
|
if (!propKeys.includes(key.split('=')[0].split('.')[0])) {
|
343
351
|
// check if the key is part of the propKeys array
|
344
352
|
parsedOptions.push(element);
|
@@ -348,7 +356,8 @@ function filterPropKeysFromUnParsedOptions(__unparsed__, unparsedCommandArgs = {
|
|
348
356
|
// check if the next element is a value for the key
|
349
357
|
if (propKeys.includes(key)) {
|
350
358
|
if (index + 1 < __unparsed__.length &&
|
351
|
-
|
359
|
+
parseArgs[key] &&
|
360
|
+
__unparsed__[index + 1].toString() === parseArgs[key].toString()) {
|
352
361
|
index++; // skip the next element
|
353
362
|
}
|
354
363
|
}
|
@@ -417,3 +426,20 @@ function registerProcessListener() {
|
|
417
426
|
// will store results to the cache and will terminate this process
|
418
427
|
});
|
419
428
|
}
|
429
|
+
function wrapArgIntoQuotesIfNeeded(arg) {
|
430
|
+
if (arg.includes('=')) {
|
431
|
+
const [key, value] = arg.split('=');
|
432
|
+
if (key.startsWith('--') &&
|
433
|
+
value.includes(' ') &&
|
434
|
+
!(value[0] === "'" || value[0] === '"')) {
|
435
|
+
return `${key}="${value}"`;
|
436
|
+
}
|
437
|
+
return arg;
|
438
|
+
}
|
439
|
+
else if (arg.includes(' ') && !(arg[0] === "'" || arg[0] === '"')) {
|
440
|
+
return `"${arg}"`;
|
441
|
+
}
|
442
|
+
else {
|
443
|
+
return arg;
|
444
|
+
}
|
445
|
+
}
|
@@ -39,7 +39,7 @@ function loadRemoteNxPlugin(plugin, root) {
|
|
39
39
|
const exitHandler = createWorkerExitHandler(worker, pendingPromises);
|
40
40
|
const cleanupFunction = () => {
|
41
41
|
worker.off('exit', exitHandler);
|
42
|
-
shutdownPluginWorker(worker
|
42
|
+
shutdownPluginWorker(worker);
|
43
43
|
};
|
44
44
|
cleanupFunctions.add(cleanupFunction);
|
45
45
|
return new Promise((res, rej) => {
|
@@ -48,13 +48,10 @@ function loadRemoteNxPlugin(plugin, root) {
|
|
48
48
|
});
|
49
49
|
}
|
50
50
|
exports.loadRemoteNxPlugin = loadRemoteNxPlugin;
|
51
|
-
|
51
|
+
function shutdownPluginWorker(worker) {
|
52
52
|
// Clears the plugin cache so no refs to the workers are held
|
53
53
|
internal_api_1.nxPluginCache.clear();
|
54
54
|
// logger.verbose(`[plugin-pool] starting worker shutdown`);
|
55
|
-
// Other things may be interacting with the worker.
|
56
|
-
// Wait for all pending promises to be done before killing the worker
|
57
|
-
await Promise.all(Array.from(pendingPromises.values()).map(({ promise }) => promise));
|
58
55
|
worker.kill('SIGINT');
|
59
56
|
}
|
60
57
|
/**
|
@@ -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.
|