nx 21.0.3 → 21.1.0-beta.0
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.
- package/package.json +11 -11
- package/src/command-line/init/init-v1.js +1 -1
- package/src/command-line/yargs-utils/shared-options.js +13 -4
- package/src/native/index.d.ts +4 -0
- package/src/native/native-bindings.js +2 -0
- package/src/native/nx.wasi-browser.js +41 -37
- package/src/native/nx.wasi.cjs +41 -37
- package/src/native/nx.wasm32-wasi.wasm +0 -0
- package/src/tasks-runner/run-command.js +15 -4
- package/src/utils/find-matching-projects.js +1 -1
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "nx",
|
3
|
-
"version": "21.0.
|
3
|
+
"version": "21.1.0-beta.0",
|
4
4
|
"private": false,
|
5
5
|
"description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
|
6
6
|
"repository": {
|
@@ -83,16 +83,16 @@
|
|
83
83
|
}
|
84
84
|
},
|
85
85
|
"optionalDependencies": {
|
86
|
-
"@nx/nx-darwin-arm64": "21.0.
|
87
|
-
"@nx/nx-darwin-x64": "21.0.
|
88
|
-
"@nx/nx-freebsd-x64": "21.0.
|
89
|
-
"@nx/nx-linux-arm-gnueabihf": "21.0.
|
90
|
-
"@nx/nx-linux-arm64-gnu": "21.0.
|
91
|
-
"@nx/nx-linux-arm64-musl": "21.0.
|
92
|
-
"@nx/nx-linux-x64-gnu": "21.0.
|
93
|
-
"@nx/nx-linux-x64-musl": "21.0.
|
94
|
-
"@nx/nx-win32-arm64-msvc": "21.0.
|
95
|
-
"@nx/nx-win32-x64-msvc": "21.0.
|
86
|
+
"@nx/nx-darwin-arm64": "21.1.0-beta.0",
|
87
|
+
"@nx/nx-darwin-x64": "21.1.0-beta.0",
|
88
|
+
"@nx/nx-freebsd-x64": "21.1.0-beta.0",
|
89
|
+
"@nx/nx-linux-arm-gnueabihf": "21.1.0-beta.0",
|
90
|
+
"@nx/nx-linux-arm64-gnu": "21.1.0-beta.0",
|
91
|
+
"@nx/nx-linux-arm64-musl": "21.1.0-beta.0",
|
92
|
+
"@nx/nx-linux-x64-gnu": "21.1.0-beta.0",
|
93
|
+
"@nx/nx-linux-x64-musl": "21.1.0-beta.0",
|
94
|
+
"@nx/nx-win32-arm64-msvc": "21.1.0-beta.0",
|
95
|
+
"@nx/nx-win32-x64-msvc": "21.1.0-beta.0"
|
96
96
|
},
|
97
97
|
"nx-migrations": {
|
98
98
|
"migrations": "./migrations.json",
|
@@ -38,7 +38,7 @@ async function initHandler(options) {
|
|
38
38
|
await (0, react_1.addNxToCraRepo)(options);
|
39
39
|
(0, utils_1.printFinalMessage)({
|
40
40
|
learnMoreLink: options.integrated
|
41
|
-
? 'https://nx.dev/tutorials/
|
41
|
+
? 'https://nx.dev/getting-started/tutorials/react-monorepo-tutorial'
|
42
42
|
: 'https://nx.dev/getting-started/tutorials/react-standalone-tutorial',
|
43
43
|
});
|
44
44
|
return;
|
@@ -17,6 +17,7 @@ exports.parseCSV = parseCSV;
|
|
17
17
|
exports.readParallelFromArgsAndEnv = readParallelFromArgsAndEnv;
|
18
18
|
const nx_json_1 = require("../../config/nx-json");
|
19
19
|
const is_tui_enabled_1 = require("../../tasks-runner/is-tui-enabled");
|
20
|
+
const node_os_1 = require("node:os");
|
20
21
|
exports.defaultYargsParserConfiguration = {
|
21
22
|
'strip-dashed': true,
|
22
23
|
'unknown-options-as-args': true,
|
@@ -304,15 +305,15 @@ function readParallelFromArgsAndEnv(args) {
|
|
304
305
|
else if (args['parallel'] === 'true' ||
|
305
306
|
args['parallel'] === true ||
|
306
307
|
args['parallel'] === '' ||
|
307
|
-
//
|
308
|
+
// don't require passing --parallel if NX_PARALLEL is set, but allow overriding it
|
308
309
|
(process.env.NX_PARALLEL && args['parallel'] === undefined)) {
|
309
|
-
return
|
310
|
+
return concurrency(args['maxParallel'] ||
|
310
311
|
args['max-parallel'] ||
|
311
312
|
process.env.NX_PARALLEL ||
|
312
|
-
3);
|
313
|
+
'3');
|
313
314
|
}
|
314
315
|
else if (args['parallel'] !== undefined) {
|
315
|
-
return
|
316
|
+
return concurrency(args['parallel']);
|
316
317
|
}
|
317
318
|
}
|
318
319
|
const coerceTuiAutoExit = (value) => {
|
@@ -328,3 +329,11 @@ const coerceTuiAutoExit = (value) => {
|
|
328
329
|
}
|
329
330
|
throw new Error(`Invalid value for --tui-auto-exit: ${value}`);
|
330
331
|
};
|
332
|
+
function concurrency(val) {
|
333
|
+
let parallel = typeof val === 'number' ? val : parseInt(val);
|
334
|
+
if (typeof val === 'string' && val.at(-1) === '%') {
|
335
|
+
const maxCores = (0, node_os_1.availableParallelism)?.() ?? (0, node_os_1.cpus)().length;
|
336
|
+
parallel = (maxCores * parallel) / 100;
|
337
|
+
}
|
338
|
+
return Math.max(1, Math.floor(parallel));
|
339
|
+
}
|
package/src/native/index.d.ts
CHANGED
@@ -237,6 +237,10 @@ export interface InputsInput {
|
|
237
237
|
|
238
238
|
export const IS_WASM: boolean
|
239
239
|
|
240
|
+
export declare export declare function logError(message: string): void
|
241
|
+
|
242
|
+
export declare export declare function logInfo(message: string): void
|
243
|
+
|
240
244
|
/** Stripped version of the NxJson interface for use in rust */
|
241
245
|
export interface NxJson {
|
242
246
|
namedInputs?: Record<string, Array<JsInputs>>
|
@@ -388,6 +388,8 @@ module.exports.getTransformableOutputs = nativeBinding.getTransformableOutputs
|
|
388
388
|
module.exports.hashArray = nativeBinding.hashArray
|
389
389
|
module.exports.hashFile = nativeBinding.hashFile
|
390
390
|
module.exports.IS_WASM = nativeBinding.IS_WASM
|
391
|
+
module.exports.logError = nativeBinding.logError
|
392
|
+
module.exports.logInfo = nativeBinding.logInfo
|
391
393
|
module.exports.parseTaskStatus = nativeBinding.parseTaskStatus
|
392
394
|
module.exports.remove = nativeBinding.remove
|
393
395
|
module.exports.restoreTerminal = nativeBinding.restoreTerminal
|
@@ -59,43 +59,45 @@ function __napi_rs_initialize_modules(__napiInstance) {
|
|
59
59
|
__napiInstance.exports['__napi_register__get_transformable_outputs_5']?.()
|
60
60
|
__napiInstance.exports['__napi_register__hash_array_6']?.()
|
61
61
|
__napiInstance.exports['__napi_register__hash_file_7']?.()
|
62
|
-
__napiInstance.exports['
|
63
|
-
__napiInstance.exports['
|
64
|
-
__napiInstance.exports['
|
65
|
-
__napiInstance.exports['
|
66
|
-
__napiInstance.exports['
|
67
|
-
__napiInstance.exports['
|
68
|
-
__napiInstance.exports['
|
69
|
-
__napiInstance.exports['
|
70
|
-
__napiInstance.exports['
|
71
|
-
__napiInstance.exports['
|
72
|
-
__napiInstance.exports['
|
73
|
-
__napiInstance.exports['
|
74
|
-
__napiInstance.exports['
|
75
|
-
__napiInstance.exports['
|
76
|
-
__napiInstance.exports['
|
77
|
-
__napiInstance.exports['
|
78
|
-
__napiInstance.exports['
|
79
|
-
__napiInstance.exports['
|
80
|
-
__napiInstance.exports['
|
81
|
-
__napiInstance.exports['
|
82
|
-
__napiInstance.exports['
|
83
|
-
__napiInstance.exports['
|
84
|
-
__napiInstance.exports['
|
85
|
-
__napiInstance.exports['
|
86
|
-
__napiInstance.exports['
|
87
|
-
__napiInstance.exports['
|
88
|
-
__napiInstance.exports['
|
89
|
-
__napiInstance.exports['
|
90
|
-
__napiInstance.exports['
|
91
|
-
__napiInstance.exports['
|
92
|
-
__napiInstance.exports['
|
93
|
-
__napiInstance.exports['
|
94
|
-
__napiInstance.exports['
|
95
|
-
__napiInstance.exports['
|
96
|
-
__napiInstance.exports['
|
97
|
-
__napiInstance.exports['
|
98
|
-
__napiInstance.exports['
|
62
|
+
__napiInstance.exports['__napi_register__log_info_8']?.()
|
63
|
+
__napiInstance.exports['__napi_register__log_error_9']?.()
|
64
|
+
__napiInstance.exports['__napi_register__IS_WASM_10']?.()
|
65
|
+
__napiInstance.exports['__napi_register__get_binary_target_11']?.()
|
66
|
+
__napiInstance.exports['__napi_register__ImportResult_struct_12']?.()
|
67
|
+
__napiInstance.exports['__napi_register__find_imports_13']?.()
|
68
|
+
__napiInstance.exports['__napi_register__transfer_project_graph_14']?.()
|
69
|
+
__napiInstance.exports['__napi_register__ExternalNode_struct_15']?.()
|
70
|
+
__napiInstance.exports['__napi_register__Target_struct_16']?.()
|
71
|
+
__napiInstance.exports['__napi_register__Project_struct_17']?.()
|
72
|
+
__napiInstance.exports['__napi_register__ProjectGraph_struct_18']?.()
|
73
|
+
__napiInstance.exports['__napi_register__HashPlanner_struct_19']?.()
|
74
|
+
__napiInstance.exports['__napi_register__HashPlanner_impl_23']?.()
|
75
|
+
__napiInstance.exports['__napi_register__HashDetails_struct_24']?.()
|
76
|
+
__napiInstance.exports['__napi_register__HasherOptions_struct_25']?.()
|
77
|
+
__napiInstance.exports['__napi_register__TaskHasher_struct_26']?.()
|
78
|
+
__napiInstance.exports['__napi_register__TaskHasher_impl_29']?.()
|
79
|
+
__napiInstance.exports['__napi_register__Task_struct_30']?.()
|
80
|
+
__napiInstance.exports['__napi_register__TaskTarget_struct_31']?.()
|
81
|
+
__napiInstance.exports['__napi_register__TaskResult_struct_32']?.()
|
82
|
+
__napiInstance.exports['__napi_register__TaskGraph_struct_33']?.()
|
83
|
+
__napiInstance.exports['__napi_register__FileData_struct_34']?.()
|
84
|
+
__napiInstance.exports['__napi_register__InputsInput_struct_35']?.()
|
85
|
+
__napiInstance.exports['__napi_register__FileSetInput_struct_36']?.()
|
86
|
+
__napiInstance.exports['__napi_register__RuntimeInput_struct_37']?.()
|
87
|
+
__napiInstance.exports['__napi_register__EnvironmentInput_struct_38']?.()
|
88
|
+
__napiInstance.exports['__napi_register__ExternalDependenciesInput_struct_39']?.()
|
89
|
+
__napiInstance.exports['__napi_register__DepsOutputsInput_struct_40']?.()
|
90
|
+
__napiInstance.exports['__napi_register__NxJson_struct_41']?.()
|
91
|
+
__napiInstance.exports['__napi_register__FileLock_struct_42']?.()
|
92
|
+
__napiInstance.exports['__napi_register__FileLock_impl_44']?.()
|
93
|
+
__napiInstance.exports['__napi_register__WorkspaceContext_struct_45']?.()
|
94
|
+
__napiInstance.exports['__napi_register__WorkspaceContext_impl_56']?.()
|
95
|
+
__napiInstance.exports['__napi_register__WorkspaceErrors_57']?.()
|
96
|
+
__napiInstance.exports['__napi_register__NxWorkspaceFiles_struct_58']?.()
|
97
|
+
__napiInstance.exports['__napi_register__NxWorkspaceFilesExternals_struct_59']?.()
|
98
|
+
__napiInstance.exports['__napi_register__UpdatedWorkspaceFiles_struct_60']?.()
|
99
|
+
__napiInstance.exports['__napi_register__FileMap_struct_61']?.()
|
100
|
+
__napiInstance.exports['__napi_register____test_only_transfer_file_map_62']?.()
|
99
101
|
}
|
100
102
|
export const FileLock = __napiModule.exports.FileLock
|
101
103
|
export const HashPlanner = __napiModule.exports.HashPlanner
|
@@ -111,6 +113,8 @@ export const getTransformableOutputs = __napiModule.exports.getTransformableOutp
|
|
111
113
|
export const hashArray = __napiModule.exports.hashArray
|
112
114
|
export const hashFile = __napiModule.exports.hashFile
|
113
115
|
export const IS_WASM = __napiModule.exports.IS_WASM
|
116
|
+
export const logError = __napiModule.exports.logError
|
117
|
+
export const logInfo = __napiModule.exports.logInfo
|
114
118
|
export const remove = __napiModule.exports.remove
|
115
119
|
export const testOnlyTransferFileMap = __napiModule.exports.testOnlyTransferFileMap
|
116
120
|
export const transferProjectGraph = __napiModule.exports.transferProjectGraph
|
package/src/native/nx.wasi.cjs
CHANGED
@@ -90,43 +90,45 @@ function __napi_rs_initialize_modules(__napiInstance) {
|
|
90
90
|
__napiInstance.exports['__napi_register__get_transformable_outputs_5']?.()
|
91
91
|
__napiInstance.exports['__napi_register__hash_array_6']?.()
|
92
92
|
__napiInstance.exports['__napi_register__hash_file_7']?.()
|
93
|
-
__napiInstance.exports['
|
94
|
-
__napiInstance.exports['
|
95
|
-
__napiInstance.exports['
|
96
|
-
__napiInstance.exports['
|
97
|
-
__napiInstance.exports['
|
98
|
-
__napiInstance.exports['
|
99
|
-
__napiInstance.exports['
|
100
|
-
__napiInstance.exports['
|
101
|
-
__napiInstance.exports['
|
102
|
-
__napiInstance.exports['
|
103
|
-
__napiInstance.exports['
|
104
|
-
__napiInstance.exports['
|
105
|
-
__napiInstance.exports['
|
106
|
-
__napiInstance.exports['
|
107
|
-
__napiInstance.exports['
|
108
|
-
__napiInstance.exports['
|
109
|
-
__napiInstance.exports['
|
110
|
-
__napiInstance.exports['
|
111
|
-
__napiInstance.exports['
|
112
|
-
__napiInstance.exports['
|
113
|
-
__napiInstance.exports['
|
114
|
-
__napiInstance.exports['
|
115
|
-
__napiInstance.exports['
|
116
|
-
__napiInstance.exports['
|
117
|
-
__napiInstance.exports['
|
118
|
-
__napiInstance.exports['
|
119
|
-
__napiInstance.exports['
|
120
|
-
__napiInstance.exports['
|
121
|
-
__napiInstance.exports['
|
122
|
-
__napiInstance.exports['
|
123
|
-
__napiInstance.exports['
|
124
|
-
__napiInstance.exports['
|
125
|
-
__napiInstance.exports['
|
126
|
-
__napiInstance.exports['
|
127
|
-
__napiInstance.exports['
|
128
|
-
__napiInstance.exports['
|
129
|
-
__napiInstance.exports['
|
93
|
+
__napiInstance.exports['__napi_register__log_info_8']?.()
|
94
|
+
__napiInstance.exports['__napi_register__log_error_9']?.()
|
95
|
+
__napiInstance.exports['__napi_register__IS_WASM_10']?.()
|
96
|
+
__napiInstance.exports['__napi_register__get_binary_target_11']?.()
|
97
|
+
__napiInstance.exports['__napi_register__ImportResult_struct_12']?.()
|
98
|
+
__napiInstance.exports['__napi_register__find_imports_13']?.()
|
99
|
+
__napiInstance.exports['__napi_register__transfer_project_graph_14']?.()
|
100
|
+
__napiInstance.exports['__napi_register__ExternalNode_struct_15']?.()
|
101
|
+
__napiInstance.exports['__napi_register__Target_struct_16']?.()
|
102
|
+
__napiInstance.exports['__napi_register__Project_struct_17']?.()
|
103
|
+
__napiInstance.exports['__napi_register__ProjectGraph_struct_18']?.()
|
104
|
+
__napiInstance.exports['__napi_register__HashPlanner_struct_19']?.()
|
105
|
+
__napiInstance.exports['__napi_register__HashPlanner_impl_23']?.()
|
106
|
+
__napiInstance.exports['__napi_register__HashDetails_struct_24']?.()
|
107
|
+
__napiInstance.exports['__napi_register__HasherOptions_struct_25']?.()
|
108
|
+
__napiInstance.exports['__napi_register__TaskHasher_struct_26']?.()
|
109
|
+
__napiInstance.exports['__napi_register__TaskHasher_impl_29']?.()
|
110
|
+
__napiInstance.exports['__napi_register__Task_struct_30']?.()
|
111
|
+
__napiInstance.exports['__napi_register__TaskTarget_struct_31']?.()
|
112
|
+
__napiInstance.exports['__napi_register__TaskResult_struct_32']?.()
|
113
|
+
__napiInstance.exports['__napi_register__TaskGraph_struct_33']?.()
|
114
|
+
__napiInstance.exports['__napi_register__FileData_struct_34']?.()
|
115
|
+
__napiInstance.exports['__napi_register__InputsInput_struct_35']?.()
|
116
|
+
__napiInstance.exports['__napi_register__FileSetInput_struct_36']?.()
|
117
|
+
__napiInstance.exports['__napi_register__RuntimeInput_struct_37']?.()
|
118
|
+
__napiInstance.exports['__napi_register__EnvironmentInput_struct_38']?.()
|
119
|
+
__napiInstance.exports['__napi_register__ExternalDependenciesInput_struct_39']?.()
|
120
|
+
__napiInstance.exports['__napi_register__DepsOutputsInput_struct_40']?.()
|
121
|
+
__napiInstance.exports['__napi_register__NxJson_struct_41']?.()
|
122
|
+
__napiInstance.exports['__napi_register__FileLock_struct_42']?.()
|
123
|
+
__napiInstance.exports['__napi_register__FileLock_impl_44']?.()
|
124
|
+
__napiInstance.exports['__napi_register__WorkspaceContext_struct_45']?.()
|
125
|
+
__napiInstance.exports['__napi_register__WorkspaceContext_impl_56']?.()
|
126
|
+
__napiInstance.exports['__napi_register__WorkspaceErrors_57']?.()
|
127
|
+
__napiInstance.exports['__napi_register__NxWorkspaceFiles_struct_58']?.()
|
128
|
+
__napiInstance.exports['__napi_register__NxWorkspaceFilesExternals_struct_59']?.()
|
129
|
+
__napiInstance.exports['__napi_register__UpdatedWorkspaceFiles_struct_60']?.()
|
130
|
+
__napiInstance.exports['__napi_register__FileMap_struct_61']?.()
|
131
|
+
__napiInstance.exports['__napi_register____test_only_transfer_file_map_62']?.()
|
130
132
|
}
|
131
133
|
module.exports.FileLock = __napiModule.exports.FileLock
|
132
134
|
module.exports.HashPlanner = __napiModule.exports.HashPlanner
|
@@ -142,6 +144,8 @@ module.exports.getTransformableOutputs = __napiModule.exports.getTransformableOu
|
|
142
144
|
module.exports.hashArray = __napiModule.exports.hashArray
|
143
145
|
module.exports.hashFile = __napiModule.exports.hashFile
|
144
146
|
module.exports.IS_WASM = __napiModule.exports.IS_WASM
|
147
|
+
module.exports.logError = __napiModule.exports.logError
|
148
|
+
module.exports.logInfo = __napiModule.exports.logInfo
|
145
149
|
module.exports.remove = __napiModule.exports.remove
|
146
150
|
module.exports.testOnlyTransferFileMap = __napiModule.exports.testOnlyTransferFileMap
|
147
151
|
module.exports.transferProjectGraph = __napiModule.exports.transferProjectGraph
|
Binary file
|
@@ -15,6 +15,7 @@ const nx_json_1 = require("../config/nx-json");
|
|
15
15
|
const client_1 = require("../daemon/client/client");
|
16
16
|
const create_task_hasher_1 = require("../hasher/create-task-hasher");
|
17
17
|
const hash_task_1 = require("../hasher/hash-task");
|
18
|
+
const native_1 = require("../native");
|
18
19
|
const tasks_execution_hooks_1 = require("../project-graph/plugins/tasks-execution-hooks");
|
19
20
|
const project_graph_1 = require("../project-graph/project-graph");
|
20
21
|
const handle_errors_1 = require("../utils/handle-errors");
|
@@ -39,8 +40,8 @@ const task_timings_life_cycle_1 = require("./life-cycles/task-timings-life-cycle
|
|
39
40
|
const tui_summary_life_cycle_1 = require("./life-cycles/tui-summary-life-cycle");
|
40
41
|
const task_graph_utils_1 = require("./task-graph-utils");
|
41
42
|
const utils_1 = require("./utils");
|
42
|
-
const chalk = require("chalk");
|
43
43
|
const exit_codes_1 = require("../utils/exit-codes");
|
44
|
+
const chalk = require("chalk");
|
44
45
|
const originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
45
46
|
const originalStderrWrite = process.stderr.write.bind(process.stderr);
|
46
47
|
const originalConsoleLog = console.log.bind(console);
|
@@ -132,9 +133,19 @@ async function getTerminalOutputLifeCycle(initiatingProject, initiatingTasks, pr
|
|
132
133
|
/**
|
133
134
|
* Patch stdout.write and stderr.write methods to pass Nx Cloud client logs to the TUI via the lifecycle
|
134
135
|
*/
|
135
|
-
const createPatchedLogWrite = (originalWrite) => {
|
136
|
+
const createPatchedLogWrite = (originalWrite, isError) => {
|
136
137
|
// @ts-ignore
|
137
138
|
return (chunk, encoding, callback) => {
|
139
|
+
if (isError) {
|
140
|
+
(0, native_1.logError)(Buffer.isBuffer(chunk)
|
141
|
+
? chunk.toString(encoding)
|
142
|
+
: chunk.toString());
|
143
|
+
}
|
144
|
+
else {
|
145
|
+
(0, native_1.logInfo)(Buffer.isBuffer(chunk)
|
146
|
+
? chunk.toString(encoding)
|
147
|
+
: chunk.toString());
|
148
|
+
}
|
138
149
|
// Check if the log came from the Nx Cloud client, otherwise invoke the original write method
|
139
150
|
const stackTrace = new Error().stack;
|
140
151
|
const isNxCloudLog = stackTrace.includes((0, node_path_1.join)(workspace_root_1.workspaceRoot, '.nx', 'cache', 'cloud'));
|
@@ -165,8 +176,8 @@ async function getTerminalOutputLifeCycle(initiatingProject, initiatingTasks, pr
|
|
165
176
|
// No-op the Nx Cloud client logs
|
166
177
|
};
|
167
178
|
};
|
168
|
-
process.stdout.write = createPatchedLogWrite(originalStdoutWrite);
|
169
|
-
process.stderr.write = createPatchedLogWrite(originalStderrWrite);
|
179
|
+
process.stdout.write = createPatchedLogWrite(originalStdoutWrite, false);
|
180
|
+
process.stderr.write = createPatchedLogWrite(originalStderrWrite, true);
|
170
181
|
// The cloud client calls console.log when NX_VERBOSE_LOGGING is set to true
|
171
182
|
console.log = createPatchedConsoleMethod(originalConsoleLog);
|
172
183
|
console.error = createPatchedConsoleMethod(originalConsoleError);
|
@@ -113,7 +113,7 @@ function addMatchingProjectsByName(projectNames, projects, pattern, matchedProje
|
|
113
113
|
}
|
114
114
|
if (!(0, globs_1.isGlobPattern)(pattern.value)) {
|
115
115
|
// Custom regex that is basically \b but includes hyphens (-) and excludes underscores (_), so "foo" pattern matches "foo_bar" but not "foo-e2e".
|
116
|
-
const regex = new RegExp(`(?<![a-zA-Z0-9-])${pattern.value}(?![a-zA-Z0-9-])`, 'i');
|
116
|
+
const regex = new RegExp(`(?<![@a-zA-Z0-9-])${pattern.value}(?![@a-zA-Z0-9-])`, 'i');
|
117
117
|
const matchingProjects = Object.keys(projects).filter((name) => regex.test(name));
|
118
118
|
for (const projectName of matchingProjects) {
|
119
119
|
if (pattern.exclude) {
|