npmdata 0.18.10 → 0.18.12
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/dist/cli/actions/check.js +3 -3
- package/dist/cli/actions/extract.d.ts.map +1 -1
- package/dist/cli/actions/extract.js +4 -3
- package/dist/cli/actions/extract.js.map +1 -1
- package/dist/cli/actions/purge.d.ts.map +1 -1
- package/dist/cli/actions/purge.js +2 -3
- package/dist/cli/actions/purge.js.map +1 -1
- package/dist/cli/progress.d.ts +6 -0
- package/dist/cli/progress.d.ts.map +1 -0
- package/dist/cli/progress.js +12 -0
- package/dist/cli/progress.js.map +1 -0
- package/dist/fileset/execute.d.ts.map +1 -1
- package/dist/fileset/execute.js +8 -7
- package/dist/fileset/execute.js.map +1 -1
- package/dist/fileset/gitignore.d.ts +4 -0
- package/dist/fileset/gitignore.d.ts.map +1 -1
- package/dist/fileset/gitignore.js +12 -0
- package/dist/fileset/gitignore.js.map +1 -1
- package/dist/fileset/package-files.d.ts.map +1 -1
- package/dist/fileset/package-files.js +8 -0
- package/dist/fileset/package-files.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/npmdata-0.0.1.tgz +0 -0
- package/dist/package/action-check.d.ts +9 -5
- package/dist/package/action-check.d.ts.map +1 -1
- package/dist/package/action-check.js +44 -107
- package/dist/package/action-check.js.map +1 -1
- package/dist/package/action-extract.d.ts +6 -7
- package/dist/package/action-extract.d.ts.map +1 -1
- package/dist/package/action-extract.js +212 -248
- package/dist/package/action-extract.js.map +1 -1
- package/dist/package/action-init.d.ts.map +1 -1
- package/dist/package/action-init.js +1 -3
- package/dist/package/action-init.js.map +1 -1
- package/dist/package/action-purge.d.ts +6 -11
- package/dist/package/action-purge.d.ts.map +1 -1
- package/dist/package/action-purge.js +104 -136
- package/dist/package/action-purge.js.map +1 -1
- package/dist/package/calculate-diff.d.ts +12 -0
- package/dist/package/calculate-diff.d.ts.map +1 -0
- package/dist/package/calculate-diff.js +119 -0
- package/dist/package/calculate-diff.js.map +1 -0
- package/dist/package/config-merge.d.ts +2 -1
- package/dist/package/config-merge.d.ts.map +1 -1
- package/dist/package/config-merge.js +20 -4
- package/dist/package/config-merge.js.map +1 -1
- package/dist/package/resolve-files.d.ts +21 -0
- package/dist/package/resolve-files.d.ts.map +1 -0
- package/dist/package/resolve-files.js +198 -0
- package/dist/package/resolve-files.js.map +1 -0
- package/dist/types.d.ts +86 -19
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +22 -10
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-init.js","sourceRoot":"","sources":["../../src/package/action-init.ts"],"names":[],"mappings":";;;;;AAsBA,
|
|
1
|
+
{"version":3,"file":"action-init.js","sourceRoot":"","sources":["../../src/package/action-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ProgressEvent, BasicPackageOptions } from '../types';
|
|
2
2
|
export type PurgeOptions = BasicPackageOptions & {
|
|
3
3
|
onProgress?: (event: ProgressEvent) => void;
|
|
4
|
-
visitedPackages?: Set<string>;
|
|
5
|
-
config?: NpmdataConfig;
|
|
6
|
-
presets?: string[];
|
|
7
4
|
};
|
|
8
5
|
export type PurgeSummary = {
|
|
9
6
|
deleted: number;
|
|
@@ -11,14 +8,12 @@ export type PurgeSummary = {
|
|
|
11
8
|
dirsRemoved: number;
|
|
12
9
|
};
|
|
13
10
|
/**
|
|
14
|
-
* Purge managed files
|
|
15
|
-
* Supports --dry-run.
|
|
11
|
+
* Purge all managed files for the given entries.
|
|
16
12
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* the marker (removing only purged paths) and gitignore accordingly.
|
|
13
|
+
* Uses resolveFiles() to build the desired file list (installing packages as needed),
|
|
14
|
+
* then calculateDiff() to find the managed files on disk. Deletes ok, conflict,
|
|
15
|
+
* and extra files (i.e. everything currently managed by npmdata for these packages).
|
|
16
|
+
* Updates .npmdata markers and .gitignore entries for affected output directories.
|
|
22
17
|
*/
|
|
23
18
|
export declare function actionPurge(options: PurgeOptions): Promise<PurgeSummary>;
|
|
24
19
|
//# sourceMappingURL=action-purge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-purge.d.ts","sourceRoot":"","sources":["../../src/package/action-purge.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"action-purge.d.ts","sourceRoot":"","sources":["../../src/package/action-purge.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAa,MAAM,UAAU,CAAC;AASzE,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAmD9E"}
|
|
@@ -1,163 +1,131 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
38
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
6
|
exports.actionPurge = actionPurge;
|
|
40
7
|
/* eslint-disable no-console */
|
|
41
|
-
const node_fs_1 =
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
42
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
43
10
|
const utils_1 = require("../utils");
|
|
44
11
|
const markers_1 = require("../fileset/markers");
|
|
45
|
-
const
|
|
12
|
+
const gitignore_1 = require("../fileset/gitignore");
|
|
13
|
+
const symlinks_1 = require("./symlinks");
|
|
14
|
+
const resolve_files_1 = require("./resolve-files");
|
|
15
|
+
const calculate_diff_1 = require("./calculate-diff");
|
|
46
16
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
17
|
+
* Purge all managed files for the given entries.
|
|
18
|
+
*
|
|
19
|
+
* Uses resolveFiles() to build the desired file list (installing packages as needed),
|
|
20
|
+
* then calculateDiff() to find the managed files on disk. Deletes ok, conflict,
|
|
21
|
+
* and extra files (i.e. everything currently managed by npmdata for these packages).
|
|
22
|
+
* Updates .npmdata markers and .gitignore entries for affected output directories.
|
|
49
23
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
24
|
+
async function actionPurge(options) {
|
|
25
|
+
const { entries, cwd, dryRun = false, verbose = false, onProgress } = options;
|
|
26
|
+
const summary = { deleted: 0, symlinksRemoved: 0, dirsRemoved: 0 };
|
|
52
27
|
if (verbose) {
|
|
53
|
-
console.log(`[verbose]
|
|
28
|
+
console.log(`[verbose] actionPurge: resolving files (cwd: ${(0, utils_1.formatDisplayPath)(cwd, cwd)})`);
|
|
54
29
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
packageVersion: pkg.version ?? 'latest',
|
|
65
|
-
});
|
|
66
|
-
// Read the marker and collect only entries belonging to this package
|
|
67
|
-
const managedFiles = await (0, markers_1.readOutputDirMarker)(outputDir);
|
|
68
|
-
const entryFiles = managedFiles.filter((m) => m.packageName === pkg.name);
|
|
69
|
-
// Accumulate into the plan (multiple entries may share the same outputDir)
|
|
70
|
-
const existing = plan.get(outputDir) ?? [];
|
|
71
|
-
plan.set(outputDir, [...existing, ...entryFiles]);
|
|
72
|
-
onProgress?.({
|
|
73
|
-
type: 'package-end',
|
|
74
|
-
packageName: pkg.name,
|
|
75
|
-
packageVersion: pkg.version ?? 'latest',
|
|
30
|
+
let resolvedFiles;
|
|
31
|
+
try {
|
|
32
|
+
resolvedFiles = await (0, resolve_files_1.resolveFiles)(entries, {
|
|
33
|
+
cwd,
|
|
34
|
+
verbose,
|
|
35
|
+
onProgress: (e) => {
|
|
36
|
+
if (e.type === 'package-start' || e.type === 'package-end')
|
|
37
|
+
onProgress?.(e);
|
|
38
|
+
},
|
|
76
39
|
});
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
(0, utils_1.cleanupTempPackageJson)(cwd, verbose);
|
|
43
|
+
}
|
|
44
|
+
if (verbose) {
|
|
45
|
+
console.log(`[verbose] actionPurge: resolved ${resolvedFiles.length} desired file(s)`);
|
|
46
|
+
}
|
|
47
|
+
const managedResolvedFiles = resolvedFiles.filter((f) => f.managed);
|
|
48
|
+
const diff = await (0, calculate_diff_1.calculateDiff)(managedResolvedFiles, verbose, cwd);
|
|
49
|
+
// Purge: ok (present+matching), conflict (present+mismatched), extra (stale managed)
|
|
50
|
+
const filesToDelete = [...diff.ok, ...diff.conflict, ...diff.extra];
|
|
51
|
+
if (verbose) {
|
|
52
|
+
console.log(`[verbose] actionPurge: ${filesToDelete.length} file(s) to delete` +
|
|
53
|
+
` (ok=${diff.ok.length} conflict=${diff.conflict.length} extra=${diff.extra.length})`);
|
|
54
|
+
}
|
|
55
|
+
// Group by outputDir
|
|
56
|
+
const byOutputDir = new Map();
|
|
57
|
+
for (const entry of filesToDelete) {
|
|
58
|
+
const arr = byOutputDir.get(entry.outputDir) ?? [];
|
|
59
|
+
arr.push(entry);
|
|
60
|
+
byOutputDir.set(entry.outputDir, arr);
|
|
61
|
+
}
|
|
62
|
+
for (const [outputDir, dirEntries] of byOutputDir) {
|
|
63
|
+
await purgeOutputDir(outputDir, dirEntries, dryRun, summary, cwd, onProgress, verbose);
|
|
64
|
+
}
|
|
65
|
+
return summary;
|
|
66
|
+
}
|
|
67
|
+
async function purgeOutputDir(outputDir, entries, dryRun, summary, cwd, onProgress, verbose) {
|
|
68
|
+
const relPaths = entries.map((e) => e.relPath);
|
|
69
|
+
const gitignorePaths = (0, gitignore_1.readManagedGitignoreEntries)(outputDir);
|
|
70
|
+
for (const entry of entries) {
|
|
71
|
+
const fullPath = node_path_1.default.join(outputDir, entry.relPath);
|
|
72
|
+
if (node_fs_1.default.existsSync(fullPath)) {
|
|
73
|
+
if (!dryRun) {
|
|
74
|
+
try {
|
|
75
|
+
node_fs_1.default.chmodSync(fullPath, 0o644);
|
|
76
|
+
node_fs_1.default.unlinkSync(fullPath);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// ignore deletion errors
|
|
116
80
|
}
|
|
117
|
-
await collectPurgePlan(inheritedEntries, cwd, verbose, visitedSet, plan, onProgress);
|
|
118
81
|
}
|
|
82
|
+
summary.deleted++;
|
|
83
|
+
const pkgName = entry.desired?.packageName ?? entry.existing?.packageName ?? '';
|
|
84
|
+
onProgress?.({
|
|
85
|
+
type: 'file-deleted',
|
|
86
|
+
packageName: pkgName,
|
|
87
|
+
file: entry.relPath,
|
|
88
|
+
managed: true,
|
|
89
|
+
gitignore: gitignorePaths.has(entry.relPath),
|
|
90
|
+
});
|
|
119
91
|
}
|
|
120
92
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
* Operates in two phases:
|
|
127
|
-
* 1. Collect: recursively traverse all sets and accumulate the managed file
|
|
128
|
-
* entries to delete per output directory (no disk writes).
|
|
129
|
-
* 2. Execute: delete the collected files per output directory, then update
|
|
130
|
-
* the marker (removing only purged paths) and gitignore accordingly.
|
|
131
|
-
*/
|
|
132
|
-
async function actionPurge(options) {
|
|
133
|
-
const { entries, cwd, dryRun = false, verbose = false, onProgress, visitedPackages = new Set(), } = options;
|
|
134
|
-
// Phase 1: collect all entries to purge across all recursive sets
|
|
135
|
-
if (verbose) {
|
|
136
|
-
console.log(`[verbose] purge: phase 1 - collecting entries to purge (cwd: ${cwd})`);
|
|
93
|
+
if (!dryRun && relPaths.length > 0) {
|
|
94
|
+
summary.symlinksRemoved += await (0, symlinks_1.removeAllSymlinks)(outputDir);
|
|
95
|
+
summary.dirsRemoved += removeEmptyDirs(outputDir);
|
|
96
|
+
await updateMarkerAfterPurge(outputDir, new Set(relPaths));
|
|
97
|
+
await (0, gitignore_1.removeFromGitignore)(outputDir, relPaths);
|
|
137
98
|
}
|
|
138
|
-
const plan = new Map();
|
|
139
|
-
await collectPurgePlan(entries, cwd, verbose, visitedPackages, plan, onProgress);
|
|
140
|
-
const summary = { deleted: 0, symlinksRemoved: 0, dirsRemoved: 0 };
|
|
141
|
-
// Phase 2: execute deletions per output directory
|
|
142
99
|
if (verbose) {
|
|
143
|
-
|
|
144
|
-
console.log(`[verbose] purge: phase 2 - deleting ${total} entr${total === 1 ? 'y' : 'ies'} across ${plan.size} output dir(s)`);
|
|
100
|
+
console.log(`[verbose] actionPurge: ${(0, utils_1.formatDisplayPath)(outputDir, cwd)} — deleted ${relPaths.length} file(s)`);
|
|
145
101
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
102
|
+
}
|
|
103
|
+
async function updateMarkerAfterPurge(outputDir, purgedPaths) {
|
|
104
|
+
const current = await (0, markers_1.readOutputDirMarker)(outputDir);
|
|
105
|
+
const updated = current.filter((m) => !purgedPaths.has(m.path));
|
|
106
|
+
await (0, markers_1.writeMarker)((0, markers_1.markerPath)(outputDir), updated);
|
|
107
|
+
}
|
|
108
|
+
function removeEmptyDirs(dir) {
|
|
109
|
+
let count = 0;
|
|
110
|
+
if (!node_fs_1.default.existsSync(dir))
|
|
111
|
+
return count;
|
|
112
|
+
const recurse = (d) => {
|
|
113
|
+
for (const e of node_fs_1.default.readdirSync(d)) {
|
|
114
|
+
const full = node_path_1.default.join(d, e);
|
|
115
|
+
if (node_fs_1.default.statSync(full).isDirectory())
|
|
116
|
+
recurse(full);
|
|
149
117
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
118
|
+
try {
|
|
119
|
+
if (d !== dir && node_fs_1.default.readdirSync(d).length === 0) {
|
|
120
|
+
node_fs_1.default.rmdirSync(d);
|
|
121
|
+
count++;
|
|
122
|
+
}
|
|
153
123
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
summary.dirsRemoved += result.dirsRemoved;
|
|
157
|
-
if (verbose) {
|
|
158
|
-
console.log(`[verbose] purge: deleted ${result.deleted} files, ${result.symlinksRemoved} symlinks, ${result.dirsRemoved} dirs`);
|
|
124
|
+
catch {
|
|
125
|
+
// ignore
|
|
159
126
|
}
|
|
160
|
-
}
|
|
161
|
-
|
|
127
|
+
};
|
|
128
|
+
recurse(dir);
|
|
129
|
+
return count;
|
|
162
130
|
}
|
|
163
131
|
//# sourceMappingURL=action-purge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-purge.js","sourceRoot":"","sources":["../../src/package/action-purge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"action-purge.js","sourceRoot":"","sources":["../../src/package/action-purge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ResolvedFile, DiffResult } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate the diff between the desired file list (from resolveFiles) and the
|
|
4
|
+
* actual state of each output directory.
|
|
5
|
+
*
|
|
6
|
+
* Only managed files (tracked in .npmdata markers) are included in the 'extra'
|
|
7
|
+
* analysis, scoped to the packages represented in `resolvedFiles`.
|
|
8
|
+
*
|
|
9
|
+
* @returns DiffResult classifying each file as ok, missing, extra, or conflict.
|
|
10
|
+
*/
|
|
11
|
+
export declare function calculateDiff(resolvedFiles: ResolvedFile[], verbose?: boolean, cwd?: string): Promise<DiffResult>;
|
|
12
|
+
//# sourceMappingURL=calculate-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate-diff.d.ts","sourceRoot":"","sources":["../../src/package/calculate-diff.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAuB,MAAM,UAAU,CAAC;AAOzE;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,CAAC,EAAE,OAAO,EACjB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,CAAC,CAgDrB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.calculateDiff = calculateDiff;
|
|
7
|
+
/* eslint-disable no-console */
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const gitignore_1 = require("../fileset/gitignore");
|
|
11
|
+
const utils_1 = require("../utils");
|
|
12
|
+
const markers_1 = require("../fileset/markers");
|
|
13
|
+
const content_replacements_1 = require("./content-replacements");
|
|
14
|
+
/**
|
|
15
|
+
* Calculate the diff between the desired file list (from resolveFiles) and the
|
|
16
|
+
* actual state of each output directory.
|
|
17
|
+
*
|
|
18
|
+
* Only managed files (tracked in .npmdata markers) are included in the 'extra'
|
|
19
|
+
* analysis, scoped to the packages represented in `resolvedFiles`.
|
|
20
|
+
*
|
|
21
|
+
* @returns DiffResult classifying each file as ok, missing, extra, or conflict.
|
|
22
|
+
*/
|
|
23
|
+
async function calculateDiff(resolvedFiles, verbose, cwd) {
|
|
24
|
+
const result = { ok: [], missing: [], extra: [], conflict: [] };
|
|
25
|
+
if (resolvedFiles.length === 0)
|
|
26
|
+
return result;
|
|
27
|
+
// Group resolved files by output directory
|
|
28
|
+
const byOutputDir = new Map();
|
|
29
|
+
for (const f of resolvedFiles) {
|
|
30
|
+
const arr = byOutputDir.get(f.outputDir) ?? [];
|
|
31
|
+
arr.push(f);
|
|
32
|
+
byOutputDir.set(f.outputDir, arr);
|
|
33
|
+
}
|
|
34
|
+
// Only consider marker entries from packages that appear in the resolved list
|
|
35
|
+
const relevantPackages = new Set(resolvedFiles.map((f) => f.packageName));
|
|
36
|
+
for (const [outputDir, desiredFiles] of byOutputDir) {
|
|
37
|
+
const existingMarker = await (0, markers_1.readOutputDirMarker)(outputDir);
|
|
38
|
+
const managedByPath = new Map(existingMarker.map((m) => [m.path, m]));
|
|
39
|
+
const desiredByPath = new Map(desiredFiles.map((f) => [f.relPath, f]));
|
|
40
|
+
const gitignorePaths = (0, gitignore_1.readManagedGitignoreEntries)(outputDir);
|
|
41
|
+
// ── Classify desired files ──────────────────────────────────────────────
|
|
42
|
+
for (const desired of desiredFiles) {
|
|
43
|
+
await classifyDesiredFile(desired, outputDir, managedByPath, gitignorePaths, result);
|
|
44
|
+
}
|
|
45
|
+
// ── Extra managed files ─────────────────────────────────────────────────
|
|
46
|
+
// Files that are managed (in the marker) under a relevant package but are
|
|
47
|
+
// no longer in the desired file list.
|
|
48
|
+
for (const m of existingMarker) {
|
|
49
|
+
if (relevantPackages.has(m.packageName) && !desiredByPath.has(m.path)) {
|
|
50
|
+
result.extra.push({ status: 'extra', relPath: m.path, outputDir, existing: m });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (verbose) {
|
|
54
|
+
console.log(`[verbose] calculateDiff: ${(0, utils_1.formatDisplayPath)(outputDir, cwd)}: ` +
|
|
55
|
+
`ok=${result.ok.length} missing=${result.missing.length} ` +
|
|
56
|
+
`conflict=${result.conflict.length} extra=${result.extra.length}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Classify a single desired file against the current output directory state.
|
|
63
|
+
* Appends to the appropriate result bucket (ok, missing, or conflict).
|
|
64
|
+
*/
|
|
65
|
+
async function classifyDesiredFile(desired, outputDir, managedByPath, gitignorePaths, result) {
|
|
66
|
+
const destPath = node_path_1.default.join(outputDir, desired.relPath);
|
|
67
|
+
const destExists = node_fs_1.default.existsSync(destPath);
|
|
68
|
+
if (!destExists) {
|
|
69
|
+
result.missing.push({ status: 'missing', relPath: desired.relPath, outputDir, desired });
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const conflictReasons = [];
|
|
73
|
+
// Content check
|
|
74
|
+
let srcHash;
|
|
75
|
+
try {
|
|
76
|
+
if (desired.contentReplacements.length > 0) {
|
|
77
|
+
const srcContent = node_fs_1.default.readFileSync(desired.sourcePath, 'utf8');
|
|
78
|
+
const transformed = (0, content_replacements_1.applyContentReplacementsToBuffer)(srcContent, desired.contentReplacements);
|
|
79
|
+
srcHash = (0, utils_1.hashBuffer)(transformed);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
srcHash = await (0, utils_1.hashFile)(desired.sourcePath);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
srcHash = await (0, utils_1.hashFile)(desired.sourcePath);
|
|
87
|
+
}
|
|
88
|
+
const destHash = await (0, utils_1.hashFile)(destPath);
|
|
89
|
+
if (srcHash !== destHash)
|
|
90
|
+
conflictReasons.push('content');
|
|
91
|
+
// Managed-state check
|
|
92
|
+
const isManaged = managedByPath.has(desired.relPath);
|
|
93
|
+
if (desired.managed !== isManaged)
|
|
94
|
+
conflictReasons.push('managed');
|
|
95
|
+
// Gitignore-state check
|
|
96
|
+
const isGitignored = gitignorePaths.has(desired.relPath);
|
|
97
|
+
if (desired.gitignore !== isGitignored)
|
|
98
|
+
conflictReasons.push('gitignore');
|
|
99
|
+
if (conflictReasons.length === 0) {
|
|
100
|
+
result.ok.push({
|
|
101
|
+
status: 'ok',
|
|
102
|
+
relPath: desired.relPath,
|
|
103
|
+
outputDir,
|
|
104
|
+
desired,
|
|
105
|
+
existing: managedByPath.get(desired.relPath),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
result.conflict.push({
|
|
110
|
+
status: 'conflict',
|
|
111
|
+
relPath: desired.relPath,
|
|
112
|
+
outputDir,
|
|
113
|
+
desired,
|
|
114
|
+
existing: managedByPath.get(desired.relPath),
|
|
115
|
+
conflictReasons,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=calculate-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate-diff.js","sourceRoot":"","sources":["../../src/package/calculate-diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { SelectorConfig, OutputConfig } from '../types';
|
|
|
2
2
|
/**
|
|
3
3
|
* Merge two SelectorConfig objects across recursion levels.
|
|
4
4
|
* - files: ANDed (intersection); when either is absent, use the other's list
|
|
5
|
+
* - exclude: concatenated (both exclusion lists apply)
|
|
5
6
|
* - contentRegexes: ANDed (both must match)
|
|
6
7
|
* - presets: NOT inherited (caller's presets not forwarded to dependency)
|
|
7
8
|
* - upgrade: each level evaluated independently (not merged)
|
|
@@ -10,7 +11,7 @@ export declare function mergeSelectorConfig(parent: SelectorConfig, child: Selec
|
|
|
10
11
|
/**
|
|
11
12
|
* Merge two OutputConfig objects for recursive extraction.
|
|
12
13
|
* - force, keepExisting, gitignore, managed, dryRun: caller value overrides child
|
|
13
|
-
* - path: concatenated (parent/child)
|
|
14
|
+
* - path: concatenated (parent/child), undefined treated as '.'
|
|
14
15
|
* - symlinks: appended (parent + child)
|
|
15
16
|
* - contentReplacements: appended (parent + child)
|
|
16
17
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-merge.d.ts","sourceRoot":"","sources":["../../src/package/config-merge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-merge.d.ts","sourceRoot":"","sources":["../../src/package/config-merge.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,cAAc,CAwBjG;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,YAAY,CAmBzF"}
|
|
@@ -1,23 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.mergeSelectorConfig = mergeSelectorConfig;
|
|
4
7
|
exports.mergeOutputConfig = mergeOutputConfig;
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
5
9
|
/**
|
|
6
10
|
* Merge two SelectorConfig objects across recursion levels.
|
|
7
11
|
* - files: ANDed (intersection); when either is absent, use the other's list
|
|
12
|
+
* - exclude: concatenated (both exclusion lists apply)
|
|
8
13
|
* - contentRegexes: ANDed (both must match)
|
|
9
14
|
* - presets: NOT inherited (caller's presets not forwarded to dependency)
|
|
10
15
|
* - upgrade: each level evaluated independently (not merged)
|
|
11
16
|
*/
|
|
12
17
|
function mergeSelectorConfig(parent, child) {
|
|
13
|
-
const
|
|
14
|
-
|
|
18
|
+
const parentGroups = parent.filePatternGroups ?? (parent.files ? [parent.files] : []);
|
|
19
|
+
const childGroups = child.filePatternGroups ?? (child.files ? [child.files] : []);
|
|
20
|
+
const filePatternGroups = [...parentGroups, ...childGroups];
|
|
21
|
+
const files = filePatternGroups.length > 0
|
|
22
|
+
? [...new Set(filePatternGroups.flat())]
|
|
15
23
|
: (parent.files ?? child.files);
|
|
16
24
|
const contentRegexes = parent.contentRegexes && child.contentRegexes
|
|
17
25
|
? [...parent.contentRegexes, ...child.contentRegexes]
|
|
18
26
|
: (parent.contentRegexes ?? child.contentRegexes);
|
|
27
|
+
const exclude = [...(parent.exclude ?? []), ...(child.exclude ?? [])];
|
|
19
28
|
return {
|
|
20
29
|
files,
|
|
30
|
+
...(filePatternGroups.length > 0 ? { filePatternGroups } : {}),
|
|
31
|
+
exclude,
|
|
21
32
|
contentRegexes,
|
|
22
33
|
presets: child.presets, // not inherited from parent
|
|
23
34
|
upgrade: child.upgrade, // each level independent
|
|
@@ -26,13 +37,18 @@ function mergeSelectorConfig(parent, child) {
|
|
|
26
37
|
/**
|
|
27
38
|
* Merge two OutputConfig objects for recursive extraction.
|
|
28
39
|
* - force, keepExisting, gitignore, managed, dryRun: caller value overrides child
|
|
29
|
-
* - path: concatenated (parent/child)
|
|
40
|
+
* - path: concatenated (parent/child), undefined treated as '.'
|
|
30
41
|
* - symlinks: appended (parent + child)
|
|
31
42
|
* - contentReplacements: appended (parent + child)
|
|
32
43
|
*/
|
|
33
44
|
function mergeOutputConfig(caller, child) {
|
|
45
|
+
const callerPath = caller.path ?? '.';
|
|
46
|
+
const childPath = child.path ?? '.';
|
|
47
|
+
// When childPath is absolute it overrides the inherited path entirely.
|
|
48
|
+
// path.join('.', '/absolute') would strip the leading slash, so we check explicitly.
|
|
49
|
+
const mergedPath = node_path_1.default.isAbsolute(childPath) ? childPath : node_path_1.default.join(callerPath, childPath);
|
|
34
50
|
return {
|
|
35
|
-
path:
|
|
51
|
+
path: mergedPath,
|
|
36
52
|
force: caller.force ?? child.force,
|
|
37
53
|
keepExisting: caller.keepExisting ?? child.keepExisting,
|
|
38
54
|
gitignore: caller.gitignore ?? child.gitignore,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-merge.js","sourceRoot":"","sources":["../../src/package/config-merge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-merge.js","sourceRoot":"","sources":["../../src/package/config-merge.ts"],"names":[],"mappings":"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"}
|