nx 20.6.0-canary.20250308-a95a60c → 20.6.0-canary.20250312-e4f5224
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/adapter/compat.d.ts +1 -1
- package/src/adapter/compat.js +1 -0
- package/src/config/nx-json.d.ts +4 -0
- package/src/core/graph/main.js +1 -1
- package/src/native/index.d.ts +5 -4
- package/src/native/nx.wasm32-wasi.wasm +0 -0
- package/src/tasks-runner/cache.d.ts +12 -1
- package/src/tasks-runner/cache.js +43 -4
- package/src/tasks-runner/task-orchestrator.js +6 -1
package/src/native/index.d.ts
CHANGED
@@ -37,12 +37,12 @@ export declare class ImportResult {
|
|
37
37
|
|
38
38
|
export declare class NxCache {
|
39
39
|
cacheDirectory: string
|
40
|
-
constructor(workspaceRoot: string, cachePath: string, dbConnection: ExternalObject<NxDbConnection>, linkTaskDetails?: boolean | undefined | null)
|
40
|
+
constructor(workspaceRoot: string, cachePath: string, dbConnection: ExternalObject<NxDbConnection>, linkTaskDetails?: boolean | undefined | null, maxCacheSize?: number | undefined | null)
|
41
41
|
get(hash: string): CachedResult | null
|
42
42
|
put(hash: string, terminalOutput: string, outputs: Array<string>, code: number): void
|
43
|
-
applyRemoteCacheResults(hash: string, result: CachedResult): void
|
43
|
+
applyRemoteCacheResults(hash: string, result: CachedResult, outputs: Array<string>): void
|
44
44
|
getTaskOutputsPath(hash: string): string
|
45
|
-
copyFilesFromCache(cachedResult: CachedResult, outputs: Array<string>):
|
45
|
+
copyFilesFromCache(cachedResult: CachedResult, outputs: Array<string>): number
|
46
46
|
removeOldCacheRecords(): void
|
47
47
|
checkCacheFsInSync(): boolean
|
48
48
|
}
|
@@ -112,13 +112,14 @@ export interface CachedResult {
|
|
112
112
|
code: number
|
113
113
|
terminalOutput: string
|
114
114
|
outputsPath: string
|
115
|
+
size?: number
|
115
116
|
}
|
116
117
|
|
117
118
|
export declare export function closeDbConnection(connection: ExternalObject<NxDbConnection>): void
|
118
119
|
|
119
120
|
export declare export function connectToNxDb(cacheDir: string, nxVersion: string, dbName?: string | undefined | null): ExternalObject<NxDbConnection>
|
120
121
|
|
121
|
-
export declare export function copy(src: string, dest: string):
|
122
|
+
export declare export function copy(src: string, dest: string): number
|
122
123
|
|
123
124
|
export interface DepsOutputsInput {
|
124
125
|
dependentTasksOutputFiles: string
|
Binary file
|
@@ -15,6 +15,7 @@ export declare function dbCacheEnabled(nxJson?: NxJsonConfiguration): boolean;
|
|
15
15
|
export declare function getCache(options: DefaultTasksRunnerOptions): DbCache | Cache;
|
16
16
|
export declare class DbCache {
|
17
17
|
private readonly options;
|
18
|
+
private nxJson;
|
18
19
|
private cache;
|
19
20
|
private remoteCache;
|
20
21
|
private remoteCachePromise;
|
@@ -27,7 +28,7 @@ export declare class DbCache {
|
|
27
28
|
get(task: Task): Promise<CachedResult | null>;
|
28
29
|
private applyRemoteCacheResults;
|
29
30
|
put(task: Task, terminalOutput: string | null, outputs: string[], code: number): Promise<void>;
|
30
|
-
copyFilesFromCache(_: string, cachedResult: CachedResult, outputs: string[]): Promise<
|
31
|
+
copyFilesFromCache(_: string, cachedResult: CachedResult, outputs: string[]): Promise<number>;
|
31
32
|
removeOldCacheRecords(): void;
|
32
33
|
temporaryOutputPath(task: Task): string;
|
33
34
|
private getRemoteCache;
|
@@ -66,3 +67,13 @@ export declare class Cache {
|
|
66
67
|
private createCacheDir;
|
67
68
|
private createTerminalOutputsDir;
|
68
69
|
}
|
70
|
+
/**
|
71
|
+
* Converts a string representation of a max cache size to a number.
|
72
|
+
*
|
73
|
+
* e.g. '1GB' -> 1024 * 1024 * 1024
|
74
|
+
* '1MB' -> 1024 * 1024
|
75
|
+
* '1KB' -> 1024
|
76
|
+
*
|
77
|
+
* @param maxCacheSize Max cache size as specified in nx.json
|
78
|
+
*/
|
79
|
+
export declare function parseMaxCacheSize(maxCacheSize: string): number | undefined;
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Cache = exports.DbCache = void 0;
|
4
4
|
exports.dbCacheEnabled = dbCacheEnabled;
|
5
5
|
exports.getCache = getCache;
|
6
|
+
exports.parseMaxCacheSize = parseMaxCacheSize;
|
6
7
|
const workspace_root_1 = require("../utils/workspace-root");
|
7
8
|
const path_1 = require("path");
|
8
9
|
const perf_hooks_1 = require("perf_hooks");
|
@@ -68,7 +69,8 @@ function getCache(options) {
|
|
68
69
|
class DbCache {
|
69
70
|
constructor(options) {
|
70
71
|
this.options = options;
|
71
|
-
this.
|
72
|
+
this.nxJson = (0, nx_json_1.readNxJson)();
|
73
|
+
this.cache = new native_1.NxCache(workspace_root_1.workspaceRoot, cache_directory_1.cacheDir, (0, db_connection_1.getDbConnection)(), undefined, parseMaxCacheSize(this.nxJson.maxCacheSize));
|
72
74
|
this.isVerbose = process.env.NX_VERBOSE_LOGGING === 'true';
|
73
75
|
}
|
74
76
|
async init() {
|
@@ -91,7 +93,7 @@ class DbCache {
|
|
91
93
|
// attempt remote cache
|
92
94
|
const res = await this.remoteCache.retrieve(task.hash, this.cache.cacheDirectory);
|
93
95
|
if (res) {
|
94
|
-
this.applyRemoteCacheResults(task.hash, res);
|
96
|
+
this.applyRemoteCacheResults(task.hash, res, task.outputs);
|
95
97
|
return {
|
96
98
|
...res,
|
97
99
|
remote: true,
|
@@ -105,8 +107,8 @@ class DbCache {
|
|
105
107
|
return null;
|
106
108
|
}
|
107
109
|
}
|
108
|
-
applyRemoteCacheResults(hash, res) {
|
109
|
-
return this.cache.applyRemoteCacheResults(hash, res);
|
110
|
+
applyRemoteCacheResults(hash, res, outputs) {
|
111
|
+
return this.cache.applyRemoteCacheResults(hash, res, outputs);
|
110
112
|
}
|
111
113
|
async put(task, terminalOutput, outputs, code) {
|
112
114
|
return tryAndRetry(async () => {
|
@@ -455,3 +457,40 @@ function tryAndRetry(fn) {
|
|
455
457
|
};
|
456
458
|
return _try();
|
457
459
|
}
|
460
|
+
/**
|
461
|
+
* Converts a string representation of a max cache size to a number.
|
462
|
+
*
|
463
|
+
* e.g. '1GB' -> 1024 * 1024 * 1024
|
464
|
+
* '1MB' -> 1024 * 1024
|
465
|
+
* '1KB' -> 1024
|
466
|
+
*
|
467
|
+
* @param maxCacheSize Max cache size as specified in nx.json
|
468
|
+
*/
|
469
|
+
function parseMaxCacheSize(maxCacheSize) {
|
470
|
+
if (!maxCacheSize) {
|
471
|
+
return undefined;
|
472
|
+
}
|
473
|
+
let regexResult = maxCacheSize.match(/^(?<size>[\d|.]+)\s?((?<unit>[KMG]?B)?)$/);
|
474
|
+
if (!regexResult) {
|
475
|
+
throw new Error(`Invalid max cache size specified in nx.json: ${maxCacheSize}. Must be a number followed by an optional unit (KB, MB, GB)`);
|
476
|
+
}
|
477
|
+
let sizeString = regexResult.groups.size;
|
478
|
+
let unit = regexResult.groups.unit;
|
479
|
+
if ([...sizeString].filter((c) => c === '.').length > 1) {
|
480
|
+
throw new Error(`Invalid max cache size specified in nx.json: ${maxCacheSize} (multiple decimal points in size)`);
|
481
|
+
}
|
482
|
+
let size = parseFloat(sizeString);
|
483
|
+
if (isNaN(size)) {
|
484
|
+
throw new Error(`Invalid max cache size specified in nx.json: ${maxCacheSize} (${sizeString} is not a number)`);
|
485
|
+
}
|
486
|
+
switch (unit) {
|
487
|
+
case 'KB':
|
488
|
+
return size * 1024;
|
489
|
+
case 'MB':
|
490
|
+
return size * 1024 * 1024;
|
491
|
+
case 'GB':
|
492
|
+
return size * 1024 * 1024 * 1024;
|
493
|
+
default:
|
494
|
+
return size;
|
495
|
+
}
|
496
|
+
}
|
@@ -131,7 +131,12 @@ class TaskOrchestrator {
|
|
131
131
|
if (!cachedResult || cachedResult.code !== 0)
|
132
132
|
return null;
|
133
133
|
const outputs = task.outputs;
|
134
|
-
const shouldCopyOutputsFromCache =
|
134
|
+
const shouldCopyOutputsFromCache =
|
135
|
+
// No output files to restore
|
136
|
+
!!outputs.length &&
|
137
|
+
// Remote caches are restored to output dirs when applied
|
138
|
+
!cachedResult.remote &&
|
139
|
+
// Output files have not been touched since last run
|
135
140
|
(await this.shouldCopyOutputsFromCache(outputs, task.hash));
|
136
141
|
if (shouldCopyOutputsFromCache) {
|
137
142
|
await this.cache.copyFilesFromCache(task.hash, cachedResult, outputs);
|