nx 19.8.0-canary.20240917-5b34ea5 → 19.8.0-canary.20240919-7f4a877
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/bin/nx-cloud.js +0 -0
- package/package.json +17 -17
- package/schemas/nx-schema.json +2 -2
- package/src/command-line/activate-powerpack/activate-powerpack.d.ts +2 -0
- package/src/command-line/activate-powerpack/activate-powerpack.js +32 -0
- package/src/command-line/activate-powerpack/command-object.d.ts +6 -0
- package/src/command-line/activate-powerpack/command-object.js +26 -0
- package/src/command-line/add/command-object.d.ts +1 -1
- package/src/command-line/format/format.js +24 -7
- package/src/command-line/import/import.js +9 -4
- package/src/command-line/import/utils/prepare-source-repo.js +7 -35
- package/src/command-line/init/init-v2.d.ts +1 -1
- package/src/command-line/init/init-v2.js +10 -4
- package/src/command-line/list/list.js +2 -0
- package/src/command-line/nx-commands.d.ts +1 -1
- package/src/command-line/nx-commands.js +77 -57
- package/src/command-line/release/command-object.d.ts +2 -2
- package/src/command-line/release/config/config.js +8 -2
- package/src/command-line/release/utils/git.d.ts +2 -2
- package/src/command-line/release/utils/git.js +12 -2
- package/src/command-line/release/utils/shared.d.ts +1 -1
- package/src/command-line/release/version.js +4 -0
- package/src/command-line/report/report.d.ts +3 -0
- package/src/command-line/report/report.js +27 -1
- package/src/config/nx-json.d.ts +13 -5
- package/src/core/graph/main.js +1 -1
- package/src/native/index.d.ts +2 -1
- package/src/native/nx.wasm32-wasi.wasm +0 -0
- package/src/tasks-runner/cache.d.ts +5 -1
- package/src/tasks-runner/cache.js +51 -5
- package/src/tasks-runner/init-tasks-runner.d.ts +1 -1
- package/src/tasks-runner/init-tasks-runner.js +5 -3
- package/src/tasks-runner/life-cycles/invoke-runner-terminal-output-life-cycle.d.ts +0 -2
- package/src/tasks-runner/life-cycles/invoke-runner-terminal-output-life-cycle.js +0 -5
- package/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.d.ts +2 -6
- package/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.d.ts +2 -6
- package/src/tasks-runner/life-cycles/store-run-information-life-cycle.d.ts +2 -7
- package/src/tasks-runner/life-cycles/task-profiling-life-cycle.d.ts +2 -7
- package/src/tasks-runner/life-cycles/task-results-life-cycle.d.ts +6 -0
- package/src/tasks-runner/life-cycles/task-results-life-cycle.js +17 -0
- package/src/tasks-runner/life-cycles/task-timings-life-cycle.d.ts +2 -7
- package/src/tasks-runner/run-command.d.ts +12 -2
- package/src/tasks-runner/run-command.js +52 -59
- package/src/tasks-runner/task-orchestrator.d.ts +0 -1
- package/src/tasks-runner/task-orchestrator.js +5 -7
- package/src/utils/db-connection.d.ts +4 -1
- package/src/utils/db-connection.js +15 -4
- package/src/utils/git-utils.d.ts +4 -2
- package/src/utils/git-utils.index-filter.d.ts +0 -0
- package/src/utils/git-utils.index-filter.js +20 -0
- package/src/utils/git-utils.js +48 -13
- package/src/utils/git-utils.tree-filter.d.ts +11 -0
- package/src/utils/git-utils.tree-filter.js +43 -0
- package/src/utils/plugins/output.d.ts +1 -0
- package/src/utils/plugins/output.js +7 -0
- package/src/utils/powerpack.d.ts +5 -0
- package/src/utils/powerpack.js +38 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
/**
|
2
|
+
* This is meant to be used with `git filter-branch --index-filter` to rewrite
|
3
|
+
* history such that only commits related to the subdirectory is kept.
|
4
|
+
*
|
5
|
+
* Example:
|
6
|
+
* NX_IMPORT_SOURCE=<source> git filter-branch --index-filter 'node git-utils.index-filter.js' --prune-empty -- --all
|
7
|
+
*/
|
8
|
+
try {
|
9
|
+
const { execSync } = require('child_process');
|
10
|
+
// NOTE: Using env vars because Windows PowerShell has its own handling of quotes (") messes up quotes in args, even if escaped.
|
11
|
+
const src = process.env.NX_IMPORT_SOURCE;
|
12
|
+
execSync('git read-tree --empty', { stdio: 'inherit' });
|
13
|
+
execSync(`git reset ${process.env.GIT_COMMIT} -- "${src}"`, {
|
14
|
+
stdio: 'inherit',
|
15
|
+
});
|
16
|
+
}
|
17
|
+
catch (error) {
|
18
|
+
console.error(`Error executing Git commands: ${error}`);
|
19
|
+
process.exit(1);
|
20
|
+
}
|
package/src/utils/git-utils.js
CHANGED
@@ -40,6 +40,10 @@ class GitRepository {
|
|
40
40
|
.toString()
|
41
41
|
.trim();
|
42
42
|
}
|
43
|
+
async hasUncommittedChanges() {
|
44
|
+
const data = await this.execAsync(`git status --porcelain`);
|
45
|
+
return data.trim() !== '';
|
46
|
+
}
|
43
47
|
async addFetchRemote(remoteName, branch) {
|
44
48
|
return await this.execAsync(`git config --add remote.${remoteName}.fetch "+refs/heads/${branch}:refs/remotes/${remoteName}/${branch}"`);
|
45
49
|
}
|
@@ -105,32 +109,63 @@ class GitRepository {
|
|
105
109
|
}
|
106
110
|
// git-filter-repo is much faster than filter-branch, but needs to be installed by user
|
107
111
|
// Use `hasFilterRepoInstalled` to check if it's installed
|
108
|
-
async filterRepo(
|
109
|
-
// filter-repo requires POSIX path to work
|
110
|
-
const
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
112
|
+
async filterRepo(source, destination) {
|
113
|
+
// NOTE: filter-repo requires POSIX path to work
|
114
|
+
const sourcePosixPath = source.split(path_1.sep).join(path_1.posix.sep);
|
115
|
+
const destinationPosixPath = destination.split(path_1.sep).join(path_1.posix.sep);
|
116
|
+
await this.execAsync(`git filter-repo -f ${source !== '' ? `--path ${this.quotePath(sourcePosixPath)}` : ''} ${source !== destination
|
117
|
+
? `--path-rename ${this.quotePath(sourcePosixPath, true)}:${this.quotePath(destinationPosixPath, true)}`
|
118
|
+
: ''}`);
|
119
|
+
}
|
120
|
+
async filterBranch(source, destination, branchName) {
|
116
121
|
// We need non-ASCII file names to not be quoted, or else filter-branch will exclude them.
|
117
122
|
await this.execAsync(`git config core.quotepath false`);
|
118
|
-
|
123
|
+
// NOTE: filter-repo requires POSIX path to work
|
124
|
+
const sourcePosixPath = source.split(path_1.sep).join(path_1.posix.sep);
|
125
|
+
const destinationPosixPath = destination.split(path_1.sep).join(path_1.posix.sep);
|
126
|
+
// First, if the source is not a root project, then only include commits relevant to the subdirectory.
|
127
|
+
if (source !== '') {
|
128
|
+
const indexFilterCommand = this.quoteArg(`node ${(0, path_1.join)(__dirname, 'git-utils.index-filter.js')}`);
|
129
|
+
await this.execAsync(`git filter-branch -f --index-filter ${indexFilterCommand} --prune-empty -- ${branchName}`, {
|
130
|
+
NX_IMPORT_SOURCE: sourcePosixPath,
|
131
|
+
NX_IMPORT_DESTINATION: destinationPosixPath,
|
132
|
+
});
|
133
|
+
}
|
134
|
+
// Then, move files to their new location if necessary.
|
135
|
+
if (source === '' || source !== destination) {
|
136
|
+
const treeFilterCommand = this.quoteArg(`node ${(0, path_1.join)(__dirname, 'git-utils.tree-filter.js')}`);
|
137
|
+
await this.execAsync(`git filter-branch -f --tree-filter ${treeFilterCommand} -- ${branchName}`, {
|
138
|
+
NX_IMPORT_SOURCE: sourcePosixPath,
|
139
|
+
NX_IMPORT_DESTINATION: destinationPosixPath,
|
140
|
+
});
|
141
|
+
}
|
119
142
|
}
|
120
|
-
execAsync(command) {
|
143
|
+
execAsync(command, env) {
|
121
144
|
return execAsync(command, {
|
122
145
|
cwd: this.root,
|
123
146
|
maxBuffer: 10 * 1024 * 1024,
|
147
|
+
env: {
|
148
|
+
...process.env,
|
149
|
+
...env,
|
150
|
+
},
|
124
151
|
});
|
125
152
|
}
|
126
|
-
quotePath(path) {
|
153
|
+
quotePath(path, ensureTrailingSlash) {
|
154
|
+
return this.quoteArg(ensureTrailingSlash && path !== '' && !path.endsWith('/')
|
155
|
+
? `${path}/`
|
156
|
+
: path);
|
157
|
+
}
|
158
|
+
quoteArg(arg) {
|
127
159
|
return process.platform === 'win32'
|
128
160
|
? // Windows/CMD only understands double-quotes, single-quotes are treated as part of the file name
|
129
161
|
// Bash and other shells will substitute `$` in file names with a variable value.
|
130
|
-
`"${
|
162
|
+
`"${arg
|
163
|
+
// Need to keep two slashes for Windows or else the path will be invalid.
|
164
|
+
// e.g. 'C:\Users\bob\projects\repo' is invalid, but 'C:\\Users\\bob\\projects\\repo' is valid
|
165
|
+
.replaceAll('\\', '\\\\')}"`
|
131
166
|
: // e.g. `git mv "$$file.txt" "libs/a/$$file.txt"` will not work since `$$` is swapped with the PID of the last process.
|
132
167
|
// Using single-quotes prevents this substitution.
|
133
|
-
`'${
|
168
|
+
`'${arg}'`;
|
134
169
|
}
|
135
170
|
}
|
136
171
|
exports.GitRepository = GitRepository;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
/**
|
2
|
+
* This is meant to be used with `git filter-branch --tree-filter` to rewrite
|
3
|
+
* history to only include commits related to the source project folder. If the
|
4
|
+
* destination folder is different, this script also moves the files over.
|
5
|
+
*
|
6
|
+
* Example:
|
7
|
+
* NX_IMPORT_SOURCE=<source> NX_IMPORT_DESTINATION=<destination> git filter-branch --tree-filter 'node git-utils.tree-filter.js' --prune-empty -- --all
|
8
|
+
*/
|
9
|
+
declare const execSync: any;
|
10
|
+
declare const existsSync: any, mkdirSync: any, renameSync: any, rmSync: any;
|
11
|
+
declare const posix: any;
|
@@ -0,0 +1,43 @@
|
|
1
|
+
/**
|
2
|
+
* This is meant to be used with `git filter-branch --tree-filter` to rewrite
|
3
|
+
* history to only include commits related to the source project folder. If the
|
4
|
+
* destination folder is different, this script also moves the files over.
|
5
|
+
*
|
6
|
+
* Example:
|
7
|
+
* NX_IMPORT_SOURCE=<source> NX_IMPORT_DESTINATION=<destination> git filter-branch --tree-filter 'node git-utils.tree-filter.js' --prune-empty -- --all
|
8
|
+
*/
|
9
|
+
const { execSync } = require('child_process');
|
10
|
+
const { existsSync, mkdirSync, renameSync, rmSync } = require('fs');
|
11
|
+
// NOTE: The path passed to `git filter-branch` is POSIX, so we need to use the `posix` module.
|
12
|
+
const { posix } = require('path');
|
13
|
+
try {
|
14
|
+
// NOTE: Using env vars because Windows PowerShell has its own handling of quotes (") messes up quotes in args, even if escaped.
|
15
|
+
const src = process.env.NX_IMPORT_SOURCE;
|
16
|
+
const dest = process.env.NX_IMPORT_DESTINATION;
|
17
|
+
const files = execSync(`git ls-files -z ${src}`)
|
18
|
+
.toString()
|
19
|
+
.trim()
|
20
|
+
.split('\x00')
|
21
|
+
.map((s) => s.trim())
|
22
|
+
.filter(Boolean);
|
23
|
+
for (const file of files) {
|
24
|
+
if (src === '' || file.startsWith(src)) {
|
25
|
+
// If source and destination are the same, then keep the file as is.
|
26
|
+
if (src === dest)
|
27
|
+
continue;
|
28
|
+
const destFile = posix.join(dest, file.replace(src, ''));
|
29
|
+
const dir = posix.dirname(destFile);
|
30
|
+
if (!existsSync(dir))
|
31
|
+
mkdirSync(dir, { recursive: true });
|
32
|
+
renameSync(file, destFile);
|
33
|
+
}
|
34
|
+
else {
|
35
|
+
// If not matching the source we are filtering, remove it.
|
36
|
+
rmSync(file);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
catch (error) {
|
41
|
+
console.error(`Error executing Git commands: ${error}`);
|
42
|
+
process.exit(1);
|
43
|
+
}
|
@@ -2,4 +2,5 @@ import { ProjectConfiguration } from '../../config/workspace-json-project-json';
|
|
2
2
|
import { PluginCapabilities } from './plugin-capabilities';
|
3
3
|
export declare function listPlugins(plugins: Map<string, PluginCapabilities>, title: string): void;
|
4
4
|
export declare function listAlsoAvailableCorePlugins(installedPlugins: Map<string, PluginCapabilities>): void;
|
5
|
+
export declare function listPowerpackPlugins(): void;
|
5
6
|
export declare function listPluginCapabilities(pluginName: string, projects: Record<string, ProjectConfiguration>): Promise<void>;
|
@@ -2,6 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.listPlugins = listPlugins;
|
4
4
|
exports.listAlsoAvailableCorePlugins = listAlsoAvailableCorePlugins;
|
5
|
+
exports.listPowerpackPlugins = listPowerpackPlugins;
|
5
6
|
exports.listPluginCapabilities = listPluginCapabilities;
|
6
7
|
const chalk = require("chalk");
|
7
8
|
const output_1 = require("../output");
|
@@ -45,6 +46,12 @@ function listAlsoAvailableCorePlugins(installedPlugins) {
|
|
45
46
|
});
|
46
47
|
}
|
47
48
|
}
|
49
|
+
function listPowerpackPlugins() {
|
50
|
+
const powerpackLink = 'https://nx.dev/plugin-registry';
|
51
|
+
output_1.output.log({
|
52
|
+
title: `Available Powerpack Plugins: ${powerpackLink}`,
|
53
|
+
});
|
54
|
+
}
|
48
55
|
async function listPluginCapabilities(pluginName, projects) {
|
49
56
|
const plugin = await (0, plugin_capabilities_1.getPluginCapabilities)(workspace_root_1.workspaceRoot, pluginName, projects);
|
50
57
|
if (!plugin) {
|
@@ -0,0 +1,38 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.NxPowerpackNotInstalledError = void 0;
|
4
|
+
exports.printPowerpackLicense = printPowerpackLicense;
|
5
|
+
exports.getPowerpackLicenseInformation = getPowerpackLicenseInformation;
|
6
|
+
const logger_1 = require("./logger");
|
7
|
+
const package_manager_1 = require("./package-manager");
|
8
|
+
const workspace_root_1 = require("./workspace-root");
|
9
|
+
async function printPowerpackLicense() {
|
10
|
+
try {
|
11
|
+
const { organizationName, seatCount, workspaceCount } = await getPowerpackLicenseInformation();
|
12
|
+
logger_1.logger.log(`Nx Powerpack Licensed to ${organizationName} for ${seatCount} user${seatCount > 1 ? '' : 's'} in ${workspaceCount} workspace${workspaceCount > 1 ? '' : 's'}`);
|
13
|
+
}
|
14
|
+
catch { }
|
15
|
+
}
|
16
|
+
async function getPowerpackLicenseInformation() {
|
17
|
+
try {
|
18
|
+
const { getPowerpackLicenseInformation } = (await Promise.resolve().then(() => require(
|
19
|
+
// @ts-ignore
|
20
|
+
'@nx/powerpack-license'
|
21
|
+
// TODO(@FrozenPandaz): Provide the right type here.
|
22
|
+
)));
|
23
|
+
// )) as typeof import('@nx/powerpack-license');
|
24
|
+
return getPowerpackLicenseInformation(workspace_root_1.workspaceRoot);
|
25
|
+
}
|
26
|
+
catch (e) {
|
27
|
+
if ('code' in e && e.code === 'ERR_MODULE_NOT_FOUND') {
|
28
|
+
throw new NxPowerpackNotInstalledError(e);
|
29
|
+
}
|
30
|
+
throw e;
|
31
|
+
}
|
32
|
+
}
|
33
|
+
class NxPowerpackNotInstalledError extends Error {
|
34
|
+
constructor(e) {
|
35
|
+
super(`The "@nx/powerpack-license" package is needed to use Nx Powerpack enabled features. Please install the @nx/powerpack-license with ${(0, package_manager_1.getPackageManagerCommand)().addDev} @nx/powerpack-license`, { cause: e });
|
36
|
+
}
|
37
|
+
}
|
38
|
+
exports.NxPowerpackNotInstalledError = NxPowerpackNotInstalledError;
|