filedist 0.21.2
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/README.md +631 -0
- package/dist/cli/actions/check.d.ts +6 -0
- package/dist/cli/actions/check.d.ts.map +1 -0
- package/dist/cli/actions/check.js +36 -0
- package/dist/cli/actions/check.js.map +1 -0
- package/dist/cli/actions/extract.d.ts +7 -0
- package/dist/cli/actions/extract.d.ts.map +1 -0
- package/dist/cli/actions/extract.js +60 -0
- package/dist/cli/actions/extract.js.map +1 -0
- package/dist/cli/actions/init.d.ts +6 -0
- package/dist/cli/actions/init.d.ts.map +1 -0
- package/dist/cli/actions/init.js +30 -0
- package/dist/cli/actions/init.js.map +1 -0
- package/dist/cli/actions/list.d.ts +7 -0
- package/dist/cli/actions/list.d.ts.map +1 -0
- package/dist/cli/actions/list.js +30 -0
- package/dist/cli/actions/list.js.map +1 -0
- package/dist/cli/actions/presets.d.ts +7 -0
- package/dist/cli/actions/presets.d.ts.map +1 -0
- package/dist/cli/actions/presets.js +34 -0
- package/dist/cli/actions/presets.js.map +1 -0
- package/dist/cli/actions/purge.d.ts +6 -0
- package/dist/cli/actions/purge.d.ts.map +1 -0
- package/dist/cli/actions/purge.js +39 -0
- package/dist/cli/actions/purge.js.map +1 -0
- package/dist/cli/argv.d.ts +52 -0
- package/dist/cli/argv.d.ts.map +1 -0
- package/dist/cli/argv.js +172 -0
- package/dist/cli/argv.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +10 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/binpkg.d.ts +13 -0
- package/dist/cli/binpkg.d.ts.map +1 -0
- package/dist/cli/binpkg.js +38 -0
- package/dist/cli/binpkg.js.map +1 -0
- package/dist/cli/cli.d.ts +11 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +118 -0
- package/dist/cli/cli.js.map +1 -0
- 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/cli/usage.d.ts +6 -0
- package/dist/cli/usage.d.ts.map +1 -0
- package/dist/cli/usage.js +151 -0
- package/dist/cli/usage.js.map +1 -0
- package/dist/fileset/check.d.ts +15 -0
- package/dist/fileset/check.d.ts.map +1 -0
- package/dist/fileset/check.js +70 -0
- package/dist/fileset/check.js.map +1 -0
- package/dist/fileset/constants.d.ts +18 -0
- package/dist/fileset/constants.d.ts.map +1 -0
- package/dist/fileset/constants.js +30 -0
- package/dist/fileset/constants.js.map +1 -0
- package/dist/fileset/diff.d.ts +16 -0
- package/dist/fileset/diff.d.ts.map +1 -0
- package/dist/fileset/diff.js +111 -0
- package/dist/fileset/diff.js.map +1 -0
- package/dist/fileset/execute.d.ts +29 -0
- package/dist/fileset/execute.d.ts.map +1 -0
- package/dist/fileset/execute.js +153 -0
- package/dist/fileset/execute.js.map +1 -0
- package/dist/fileset/gitignore.d.ts +20 -0
- package/dist/fileset/gitignore.d.ts.map +1 -0
- package/dist/fileset/gitignore.js +94 -0
- package/dist/fileset/gitignore.js.map +1 -0
- package/dist/fileset/index.d.ts +5 -0
- package/dist/fileset/index.d.ts.map +1 -0
- package/dist/fileset/index.js +22 -0
- package/dist/fileset/index.js.map +1 -0
- package/dist/fileset/markers.d.ts +22 -0
- package/dist/fileset/markers.d.ts.map +1 -0
- package/dist/fileset/markers.js +74 -0
- package/dist/fileset/markers.js.map +1 -0
- package/dist/fileset/package-files.d.ts +21 -0
- package/dist/fileset/package-files.d.ts.map +1 -0
- package/dist/fileset/package-files.js +102 -0
- package/dist/fileset/package-files.js.map +1 -0
- package/dist/fileset/purge.d.ts +18 -0
- package/dist/fileset/purge.d.ts.map +1 -0
- package/dist/fileset/purge.js +94 -0
- package/dist/fileset/purge.js.map +1 -0
- package/dist/fileset/test-utils.d.ts +21 -0
- package/dist/fileset/test-utils.d.ts.map +1 -0
- package/dist/fileset/test-utils.js +94 -0
- package/dist/fileset/test-utils.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/package/action-check.d.ts +20 -0
- package/dist/package/action-check.d.ts.map +1 -0
- package/dist/package/action-check.js +65 -0
- package/dist/package/action-check.js.map +1 -0
- package/dist/package/action-extract.d.ts +20 -0
- package/dist/package/action-extract.d.ts.map +1 -0
- package/dist/package/action-extract.js +280 -0
- package/dist/package/action-extract.js.map +1 -0
- package/dist/package/action-init.d.ts +13 -0
- package/dist/package/action-init.d.ts.map +1 -0
- package/dist/package/action-init.js +83 -0
- package/dist/package/action-init.js.map +1 -0
- package/dist/package/action-list.d.ts +11 -0
- package/dist/package/action-list.d.ts.map +1 -0
- package/dist/package/action-list.js +12 -0
- package/dist/package/action-list.js.map +1 -0
- package/dist/package/action-purge.d.ts +19 -0
- package/dist/package/action-purge.d.ts.map +1 -0
- package/dist/package/action-purge.js +135 -0
- package/dist/package/action-purge.js.map +1 -0
- 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 +129 -0
- package/dist/package/calculate-diff.js.map +1 -0
- package/dist/package/config-merge.d.ts +19 -0
- package/dist/package/config-merge.d.ts.map +1 -0
- package/dist/package/config-merge.js +65 -0
- package/dist/package/config-merge.js.map +1 -0
- package/dist/package/config.d.ts +24 -0
- package/dist/package/config.d.ts.map +1 -0
- package/dist/package/config.js +86 -0
- package/dist/package/config.js.map +1 -0
- package/dist/package/content-replacements.d.ts +21 -0
- package/dist/package/content-replacements.d.ts.map +1 -0
- package/dist/package/content-replacements.js +94 -0
- package/dist/package/content-replacements.js.map +1 -0
- package/dist/package/index.d.ts +10 -0
- package/dist/package/index.d.ts.map +1 -0
- package/dist/package/index.js +16 -0
- package/dist/package/index.js.map +1 -0
- package/dist/package/resolve-files.d.ts +29 -0
- package/dist/package/resolve-files.d.ts.map +1 -0
- package/dist/package/resolve-files.js +225 -0
- package/dist/package/resolve-files.js.map +1 -0
- package/dist/package/source.d.ts +20 -0
- package/dist/package/source.d.ts.map +1 -0
- package/dist/package/source.js +193 -0
- package/dist/package/source.js.map +1 -0
- package/dist/package/symlinks.d.ts +25 -0
- package/dist/package/symlinks.d.ts.map +1 -0
- package/dist/package/symlinks.js +203 -0
- package/dist/package/symlinks.js.map +1 -0
- package/dist/types.d.ts +345 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +60 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +341 -0
- package/dist/utils.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,280 @@
|
|
|
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.actionExtract = actionExtract;
|
|
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 utils_1 = require("../utils");
|
|
11
|
+
const markers_1 = require("../fileset/markers");
|
|
12
|
+
const gitignore_1 = require("../fileset/gitignore");
|
|
13
|
+
const symlinks_1 = require("./symlinks");
|
|
14
|
+
const content_replacements_1 = require("./content-replacements");
|
|
15
|
+
const resolve_files_1 = require("./resolve-files");
|
|
16
|
+
const calculate_diff_1 = require("./calculate-diff");
|
|
17
|
+
const source_1 = require("./source");
|
|
18
|
+
/**
|
|
19
|
+
* Extract managed files into the output directories.
|
|
20
|
+
*
|
|
21
|
+
* Two-phase approach:
|
|
22
|
+
* 1. resolveFiles — installs packages and builds the complete desired file list.
|
|
23
|
+
* 2. calculateDiff — compares desired files against each output directory.
|
|
24
|
+
* 3. Apply disk changes: delete extra, add missing, resolve conflicts.
|
|
25
|
+
*/
|
|
26
|
+
// eslint-disable-next-line complexity
|
|
27
|
+
async function actionExtract(options) {
|
|
28
|
+
const { entries, cwd, verbose = false, onProgress, dryRun } = options;
|
|
29
|
+
const isDryRun = dryRun ?? entries.some((e) => e.output?.dryRun === true);
|
|
30
|
+
const sourceRuntime = (0, source_1.createSourceRuntime)(cwd, verbose);
|
|
31
|
+
const result = { added: 0, modified: 0, deleted: 0, skipped: 0 };
|
|
32
|
+
try {
|
|
33
|
+
// ── Phase 1: Resolve desired files ──────────────────────────────────────
|
|
34
|
+
const resolved = await (0, resolve_files_1.resolveFilesDetailed)(entries, {
|
|
35
|
+
cwd,
|
|
36
|
+
verbose,
|
|
37
|
+
onProgress,
|
|
38
|
+
sourceRuntime,
|
|
39
|
+
});
|
|
40
|
+
const resolvedFiles = resolved.files;
|
|
41
|
+
const { noSyncOutputDirs, relevantPackagesByOutputDir } = resolved;
|
|
42
|
+
if (verbose) {
|
|
43
|
+
console.log(`[verbose] actionExtract: resolved ${resolvedFiles.length} desired file(s)`);
|
|
44
|
+
}
|
|
45
|
+
// ── Phase 2: Calculate diff ──────────────────────────────────────────────
|
|
46
|
+
const diff = await (0, calculate_diff_1.calculateDiff)(resolvedFiles, verbose, cwd, relevantPackagesByOutputDir);
|
|
47
|
+
if (verbose) {
|
|
48
|
+
console.log(`[verbose] actionExtract: diff ok=${diff.ok.length} missing=${diff.missing.length}` +
|
|
49
|
+
` conflict=${diff.conflict.length} extra=${diff.extra.length}`);
|
|
50
|
+
}
|
|
51
|
+
// ── Pre-flight conflict check ──────────────────────────────────────────
|
|
52
|
+
// Detect unmanaged-file conflicts before any disk writes.
|
|
53
|
+
if (!isDryRun) {
|
|
54
|
+
if (verbose) {
|
|
55
|
+
console.log(`[verbose] actionExtract: checking for possible file conflicts...`);
|
|
56
|
+
}
|
|
57
|
+
for (const entry of diff.conflict) {
|
|
58
|
+
const desired = entry.desired;
|
|
59
|
+
const isUnmanagedConflict = !entry.existing && desired.managed;
|
|
60
|
+
if (!desired.ignoreIfExisting && !desired.force && isUnmanagedConflict) {
|
|
61
|
+
throw new Error(`Conflict: file "${entry.relPath}" in "${entry.outputDir}" exists and is not managed` +
|
|
62
|
+
` by filedist.\nUse --force to overwrite or --managed=false to skip.`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// ── Count expected changes ─────────────────────────────────────────────
|
|
67
|
+
result.added = diff.missing.length;
|
|
68
|
+
result.deleted = diff.extra.filter((entry) => (0, symlinks_1.isManagedFileEntry)(entry.existing) && !noSyncOutputDirs.has(entry.outputDir)).length;
|
|
69
|
+
for (const entry of diff.conflict) {
|
|
70
|
+
const desired = entry.desired;
|
|
71
|
+
if (desired.ignoreIfExisting || !desired.managed) {
|
|
72
|
+
result.skipped++;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
result.modified++;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
result.skipped += diff.ok.length;
|
|
79
|
+
if (isDryRun)
|
|
80
|
+
return result;
|
|
81
|
+
// ── Phase 3: Apply disk changes ──────────────────────────────────────────
|
|
82
|
+
// Collect unique output directories
|
|
83
|
+
const outputDirs = new Set([
|
|
84
|
+
...resolvedFiles.map((f) => f.outputDir),
|
|
85
|
+
...relevantPackagesByOutputDir.keys(),
|
|
86
|
+
]);
|
|
87
|
+
// Delete extra managed files
|
|
88
|
+
if (verbose) {
|
|
89
|
+
console.log(`[verbose] actionExtract: removing extra managed files...`);
|
|
90
|
+
}
|
|
91
|
+
for (const entry of diff.extra.filter((diffEntry) => (0, symlinks_1.isManagedFileEntry)(diffEntry.existing) && !noSyncOutputDirs.has(diffEntry.outputDir))) {
|
|
92
|
+
const { outputDir, relPath, existing } = entry;
|
|
93
|
+
const fullPath = node_path_1.default.join(outputDir, relPath);
|
|
94
|
+
const gitignorePaths = (0, gitignore_1.readManagedGitignoreEntries)(outputDir);
|
|
95
|
+
if (node_fs_1.default.existsSync(fullPath)) {
|
|
96
|
+
node_fs_1.default.chmodSync(fullPath, 0o644);
|
|
97
|
+
node_fs_1.default.unlinkSync(fullPath);
|
|
98
|
+
}
|
|
99
|
+
onProgress?.({
|
|
100
|
+
type: 'file-deleted',
|
|
101
|
+
packageName: existing?.packageName ?? '',
|
|
102
|
+
file: relPath,
|
|
103
|
+
managed: true,
|
|
104
|
+
gitignore: gitignorePaths.has(relPath),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
// Add missing files
|
|
108
|
+
if (verbose) {
|
|
109
|
+
console.log(`[verbose] actionExtract: adding missing files...`);
|
|
110
|
+
}
|
|
111
|
+
for (const entry of diff.missing) {
|
|
112
|
+
const desired = entry.desired;
|
|
113
|
+
writeFileToOutput(desired.sourcePath, node_path_1.default.join(entry.outputDir, desired.relPath), desired.managed);
|
|
114
|
+
onProgress?.({
|
|
115
|
+
type: 'file-added',
|
|
116
|
+
packageName: desired.packageName,
|
|
117
|
+
file: desired.relPath,
|
|
118
|
+
managed: desired.managed,
|
|
119
|
+
gitignore: desired.gitignore,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
// Emit file-skipped for unchanged files (diff.ok)
|
|
123
|
+
for (const entry of diff.ok) {
|
|
124
|
+
const desired = entry.desired;
|
|
125
|
+
onProgress?.({
|
|
126
|
+
type: 'file-skipped',
|
|
127
|
+
packageName: desired.packageName,
|
|
128
|
+
file: desired.relPath,
|
|
129
|
+
managed: desired.managed,
|
|
130
|
+
gitignore: desired.gitignore,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// Resolve conflicts
|
|
134
|
+
if (verbose) {
|
|
135
|
+
console.log(`[verbose] actionExtract: resolving file conflicts...`);
|
|
136
|
+
}
|
|
137
|
+
for (const entry of diff.conflict) {
|
|
138
|
+
const desired = entry.desired;
|
|
139
|
+
// managed=false: existing file is user-owned, leave it untouched
|
|
140
|
+
if (desired.ignoreIfExisting || !desired.managed) {
|
|
141
|
+
onProgress?.({
|
|
142
|
+
type: 'file-skipped',
|
|
143
|
+
packageName: desired.packageName,
|
|
144
|
+
file: desired.relPath,
|
|
145
|
+
managed: desired.managed,
|
|
146
|
+
gitignore: desired.gitignore,
|
|
147
|
+
});
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
writeFileToOutput(desired.sourcePath, node_path_1.default.join(entry.outputDir, desired.relPath), desired.managed);
|
|
151
|
+
onProgress?.({
|
|
152
|
+
type: 'file-modified',
|
|
153
|
+
packageName: desired.packageName,
|
|
154
|
+
file: desired.relPath,
|
|
155
|
+
managed: desired.managed,
|
|
156
|
+
gitignore: desired.gitignore,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
// Apply symlinks and content replacements per output directory
|
|
160
|
+
if (verbose) {
|
|
161
|
+
console.log(`[verbose] actionExtract: applying symlinks and content replacements...`);
|
|
162
|
+
}
|
|
163
|
+
for (const outputDir of outputDirs) {
|
|
164
|
+
const dirFiles = resolvedFiles.filter((f) => f.outputDir === outputDir);
|
|
165
|
+
const relevantPackages = relevantPackagesByOutputDir.get(outputDir);
|
|
166
|
+
const existingMarker = await (0, markers_1.readOutputDirMarker)(outputDir);
|
|
167
|
+
const desiredSymlinkEntries = (0, symlinks_1.collectManagedSymlinkEntries)(outputDir, dirFiles);
|
|
168
|
+
const desiredSymlinkPaths = new Set(desiredSymlinkEntries.map((entry) => entry.path));
|
|
169
|
+
const managedSymlinks = (0, symlinks_1.findManagedSymlinkEntries)(existingMarker, relevantPackages);
|
|
170
|
+
if (managedSymlinks.length > 0) {
|
|
171
|
+
const removedSymlinkPaths = await (0, symlinks_1.removeStaleSymlinks)(outputDir, managedSymlinks, desiredSymlinkPaths);
|
|
172
|
+
result.deleted += removedSymlinkPaths.length;
|
|
173
|
+
for (const relPath of removedSymlinkPaths) {
|
|
174
|
+
onProgress?.({
|
|
175
|
+
type: 'file-deleted',
|
|
176
|
+
packageName: managedSymlinks.find((entry) => entry.path === relPath)?.packageName ?? '',
|
|
177
|
+
file: relPath,
|
|
178
|
+
managed: true,
|
|
179
|
+
gitignore: false,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const symlinkConfigs = (0, symlinks_1.uniqueSymlinkConfigs)(dirFiles);
|
|
184
|
+
if (symlinkConfigs.length > 0) {
|
|
185
|
+
await (0, symlinks_1.createSymlinks)(outputDir, symlinkConfigs);
|
|
186
|
+
}
|
|
187
|
+
const contentReplacements = dirFiles.flatMap((f) => f.contentReplacements);
|
|
188
|
+
if (contentReplacements.length > 0) {
|
|
189
|
+
await (0, content_replacements_1.applyContentReplacements)(outputDir, contentReplacements);
|
|
190
|
+
}
|
|
191
|
+
await updateOutputDirMetadata(outputDir, diff, dirFiles, desiredSymlinkEntries, relevantPackages, noSyncOutputDirs.has(outputDir), cwd, verbose);
|
|
192
|
+
}
|
|
193
|
+
if (verbose) {
|
|
194
|
+
console.log(`[verbose] actionExtract: complete — added=${result.added} modified=${result.modified}` +
|
|
195
|
+
` deleted=${result.deleted} skipped=${result.skipped}`);
|
|
196
|
+
}
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
sourceRuntime.cleanup();
|
|
201
|
+
(0, utils_1.cleanupTempPackageJson)(cwd, verbose);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/** Copy a source file to dest, creating parent dirs if needed, and set permissions. */
|
|
205
|
+
function writeFileToOutput(srcPath, destPath, managed) {
|
|
206
|
+
(0, utils_1.ensureDir)(node_path_1.default.dirname(destPath));
|
|
207
|
+
if (node_fs_1.default.existsSync(destPath))
|
|
208
|
+
node_fs_1.default.chmodSync(destPath, 0o644);
|
|
209
|
+
node_fs_1.default.copyFileSync(srcPath, destPath);
|
|
210
|
+
if (managed)
|
|
211
|
+
node_fs_1.default.chmodSync(destPath, 0o444);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Update the .filedist marker and .gitignore for one output directory after
|
|
215
|
+
* disk changes have been applied.
|
|
216
|
+
*/
|
|
217
|
+
async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSymlinkEntries, relevantPackages, noSync, cwd, verbose) {
|
|
218
|
+
const existingMarker = await (0, markers_1.readOutputDirMarker)(outputDir);
|
|
219
|
+
// Paths removed by this run (extra files that were deleted)
|
|
220
|
+
const deletedPaths = new Set(diff.extra
|
|
221
|
+
.filter((e) => e.outputDir === outputDir && (0, symlinks_1.isManagedFileEntry)(e.existing) && !noSync)
|
|
222
|
+
.map((e) => e.relPath));
|
|
223
|
+
// New or updated managed entries produced by this run
|
|
224
|
+
const addedEntries = [
|
|
225
|
+
...diff.missing
|
|
226
|
+
.filter((e) => e.outputDir === outputDir && e.desired?.managed)
|
|
227
|
+
.map((e) => ({
|
|
228
|
+
path: e.relPath,
|
|
229
|
+
packageName: e.desired.packageName,
|
|
230
|
+
packageVersion: e.desired.packageVersion,
|
|
231
|
+
kind: 'file',
|
|
232
|
+
})),
|
|
233
|
+
...diff.conflict
|
|
234
|
+
.filter((e) => e.outputDir === outputDir && e.desired?.managed && !e.desired.ignoreIfExisting)
|
|
235
|
+
.map((e) => ({
|
|
236
|
+
path: e.relPath,
|
|
237
|
+
packageName: e.desired.packageName,
|
|
238
|
+
packageVersion: e.desired.packageVersion,
|
|
239
|
+
kind: 'file',
|
|
240
|
+
})),
|
|
241
|
+
];
|
|
242
|
+
const currentRelevantPackages = relevantPackages ?? new Set(resolvedFiles.map((file) => file.packageName));
|
|
243
|
+
// Merge: keep existing (minus deleted + newly updated), then add new entries
|
|
244
|
+
const updatedByPath = new Map(existingMarker
|
|
245
|
+
.filter((m) => !deletedPaths.has(m.path) &&
|
|
246
|
+
!addedEntries.some((e) => e.path === m.path) &&
|
|
247
|
+
!((m.kind ?? 'file') === 'symlink' &&
|
|
248
|
+
currentRelevantPackages.has(m.packageName) &&
|
|
249
|
+
!desiredSymlinkEntries.some((entry) => entry.path === m.path)))
|
|
250
|
+
.map((m) => [m.path, m]));
|
|
251
|
+
for (const e of addedEntries)
|
|
252
|
+
updatedByPath.set(e.path, e);
|
|
253
|
+
for (const entry of desiredSymlinkEntries) {
|
|
254
|
+
const existingEntry = updatedByPath.get(entry.path);
|
|
255
|
+
if (existingEntry &&
|
|
256
|
+
(existingEntry.kind ?? 'file') === 'symlink' &&
|
|
257
|
+
existingEntry.packageName === entry.packageName) {
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
updatedByPath.set(entry.path, entry);
|
|
261
|
+
}
|
|
262
|
+
const updatedEntries = [...updatedByPath.values()];
|
|
263
|
+
await (0, markers_1.writeMarker)((0, markers_1.markerPath)(outputDir), updatedEntries);
|
|
264
|
+
if (verbose) {
|
|
265
|
+
console.log(`[verbose] updateOutputDirMetadata: ${(0, utils_1.formatDisplayPath)(outputDir, cwd)}: marker updated (${updatedEntries.length} entries)`);
|
|
266
|
+
}
|
|
267
|
+
// Update gitignore: include all remaining managed entries whose gitignore=true
|
|
268
|
+
const resolvedByPath = new Map(resolvedFiles.filter((f) => f.outputDir === outputDir).map((f) => [f.relPath, f]));
|
|
269
|
+
const gitignorePaths = updatedEntries
|
|
270
|
+
.filter((e) => (e.kind ?? 'file') !== 'symlink')
|
|
271
|
+
.filter((e) => {
|
|
272
|
+
const resolved = resolvedByPath.get(e.path);
|
|
273
|
+
// For files resolved in this run, honour their gitignore setting.
|
|
274
|
+
// For files from other packages sharing the dir, default to true.
|
|
275
|
+
return resolved ? resolved.gitignore : true;
|
|
276
|
+
})
|
|
277
|
+
.map((e) => e.path);
|
|
278
|
+
await (0, gitignore_1.addToGitignore)(outputDir, gitignorePaths);
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=action-extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-extract.js","sourceRoot":"","sources":["../../src/package/action-extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type InitConfig = {
|
|
2
|
+
/** File glob patterns to include in the package and use as selector for filesets. */
|
|
3
|
+
files?: string[];
|
|
4
|
+
/** External package specs (e.g. "eslint@8") to add as filedist sets and dependencies. */
|
|
5
|
+
packages?: string[];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Scaffold or update a publishable npm data package.
|
|
9
|
+
* If package.json already exists, updates it in place.
|
|
10
|
+
* Creates bin/filedist.js if it does not already exist.
|
|
11
|
+
*/
|
|
12
|
+
export declare function actionInit(outputDir: string, verbose: boolean, config?: InitConfig): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=action-init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-init.d.ts","sourceRoot":"","sources":["../../src/package/action-init.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,UAAU,GAAG;IACvB,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
|
|
@@ -0,0 +1,83 @@
|
|
|
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.actionInit = actionInit;
|
|
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 node_child_process_1 = require("node:child_process");
|
|
11
|
+
const detect_1 = require("package-manager-detector/detect");
|
|
12
|
+
const commands_1 = require("package-manager-detector/commands");
|
|
13
|
+
/**
|
|
14
|
+
* Scaffold or update a publishable npm data package.
|
|
15
|
+
* If package.json already exists, updates it in place.
|
|
16
|
+
* Creates bin/filedist.js if it does not already exist.
|
|
17
|
+
*/
|
|
18
|
+
async function actionInit(outputDir, verbose, config) {
|
|
19
|
+
const pkgJsonPath = node_path_1.default.join(outputDir, 'package.json');
|
|
20
|
+
const binDir = node_path_1.default.join(outputDir, 'bin');
|
|
21
|
+
const binPath = node_path_1.default.join(binDir, 'filedist.js');
|
|
22
|
+
const binShim = `#!/usr/bin/env node\n'use strict';\nrequire('filedist').binpkg(__dirname, process.argv.slice(2));\n`;
|
|
23
|
+
node_fs_1.default.mkdirSync(outputDir, { recursive: true });
|
|
24
|
+
// Read existing package.json or create a new skeleton
|
|
25
|
+
let pkgJson;
|
|
26
|
+
if (node_fs_1.default.existsSync(pkgJsonPath)) {
|
|
27
|
+
pkgJson = JSON.parse(node_fs_1.default.readFileSync(pkgJsonPath).toString());
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const dirName = node_path_1.default.basename(outputDir);
|
|
31
|
+
pkgJson = {
|
|
32
|
+
name: dirName,
|
|
33
|
+
version: '1.0.0',
|
|
34
|
+
description: '',
|
|
35
|
+
dependencies: {},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const filePatterns = config?.files ?? [];
|
|
39
|
+
const externalPackages = config?.packages ?? [];
|
|
40
|
+
// Set bin entry
|
|
41
|
+
pkgJson.bin = 'bin/filedist.js';
|
|
42
|
+
// Update npm files list to include data patterns and the bin shim
|
|
43
|
+
const npmFiles = new Set([...filePatterns, 'package.json', 'bin/filedist.js']);
|
|
44
|
+
pkgJson.files = Array.from(npmFiles);
|
|
45
|
+
// Build filedist sets: self entry first (no package field), then external packages
|
|
46
|
+
const selfEntry = {
|
|
47
|
+
output: { path: '.' },
|
|
48
|
+
...(filePatterns.length > 0 ? { selector: { files: filePatterns } } : {}),
|
|
49
|
+
};
|
|
50
|
+
const externalEntries = externalPackages.map((pkg) => ({
|
|
51
|
+
package: pkg,
|
|
52
|
+
output: { path: '.' },
|
|
53
|
+
...(filePatterns.length > 0 ? { selector: { files: filePatterns } } : {}),
|
|
54
|
+
}));
|
|
55
|
+
pkgJson.filedist = { sets: [selfEntry, ...externalEntries] };
|
|
56
|
+
// Write updated package.json (dependencies are managed by the `add` command below)
|
|
57
|
+
// eslint-disable-next-line unicorn/no-null
|
|
58
|
+
node_fs_1.default.writeFileSync(pkgJsonPath, `${JSON.stringify(pkgJson, null, 2)}\n`, 'utf8');
|
|
59
|
+
// Create bin/filedist.js only if it does not already exist
|
|
60
|
+
if (!node_fs_1.default.existsSync(binPath)) {
|
|
61
|
+
node_fs_1.default.mkdirSync(binDir, { recursive: true });
|
|
62
|
+
node_fs_1.default.writeFileSync(binPath, binShim, 'utf8');
|
|
63
|
+
node_fs_1.default.chmodSync(binPath, 0o755);
|
|
64
|
+
}
|
|
65
|
+
// Add filedist + any external packages via the package manager so the lockfile
|
|
66
|
+
// and package.json dependencies are updated with the correct resolved versions.
|
|
67
|
+
const detected = await (0, detect_1.detect)({ cwd: outputDir });
|
|
68
|
+
const agent = detected?.agent ?? 'npm';
|
|
69
|
+
const packagesToAdd = ['filedist', ...externalPackages];
|
|
70
|
+
const addResolved = (0, commands_1.resolveCommand)(agent, 'add', packagesToAdd);
|
|
71
|
+
if (addResolved) {
|
|
72
|
+
const cmd = `${addResolved.command} ${addResolved.args.join(' ')}`;
|
|
73
|
+
if (verbose) {
|
|
74
|
+
console.log(`Running: ${cmd}`);
|
|
75
|
+
}
|
|
76
|
+
(0, node_child_process_1.execSync)(cmd, { cwd: outputDir, stdio: 'pipe' });
|
|
77
|
+
}
|
|
78
|
+
if (verbose) {
|
|
79
|
+
console.log(`Updated: ${pkgJsonPath}`);
|
|
80
|
+
console.log(`Created: ${binPath}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=action-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-init.js","sourceRoot":"","sources":["../../src/package/action-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ManagedFileMetadata } from '../types';
|
|
2
|
+
export type ListOptions = {
|
|
3
|
+
outputDir: string;
|
|
4
|
+
verbose?: boolean;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Aggregate all managed files across unique output directories.
|
|
8
|
+
* Note: list always ignores --presets; reports all managed files.
|
|
9
|
+
*/
|
|
10
|
+
export declare function actionList(options: ListOptions): Promise<ManagedFileMetadata[]>;
|
|
11
|
+
//# sourceMappingURL=action-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-list.d.ts","sourceRoot":"","sources":["../../src/package/action-list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAErF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.actionList = actionList;
|
|
4
|
+
const fileset_1 = require("../fileset");
|
|
5
|
+
/**
|
|
6
|
+
* Aggregate all managed files across unique output directories.
|
|
7
|
+
* Note: list always ignores --presets; reports all managed files.
|
|
8
|
+
*/
|
|
9
|
+
async function actionList(options) {
|
|
10
|
+
return (0, fileset_1.readOutputDirMarker)(options.outputDir);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=action-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-list.js","sourceRoot":"","sources":["../../src/package/action-list.ts"],"names":[],"mappings":";;AAYA,gCAEC;AAdD,wCAAiD;AAQjD;;;GAGG;AACI,KAAK,UAAU,UAAU,CAAC,OAAoB;IACnD,OAAO,IAAA,6BAAmB,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ProgressEvent, BasicPackageOptions } from '../types';
|
|
2
|
+
export type PurgeOptions = BasicPackageOptions & {
|
|
3
|
+
onProgress?: (event: ProgressEvent) => void;
|
|
4
|
+
};
|
|
5
|
+
export type PurgeSummary = {
|
|
6
|
+
deleted: number;
|
|
7
|
+
symlinksRemoved: number;
|
|
8
|
+
dirsRemoved: number;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Purge all managed files for the given entries.
|
|
12
|
+
*
|
|
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 filedist for these packages).
|
|
16
|
+
* Updates .filedist markers and .gitignore entries for affected output directories.
|
|
17
|
+
*/
|
|
18
|
+
export declare function actionPurge(options: PurgeOptions): Promise<PurgeSummary>;
|
|
19
|
+
//# sourceMappingURL=action-purge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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;AAUzE,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,CA2D9E"}
|
|
@@ -0,0 +1,135 @@
|
|
|
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.actionPurge = actionPurge;
|
|
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 utils_1 = require("../utils");
|
|
11
|
+
const markers_1 = require("../fileset/markers");
|
|
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");
|
|
16
|
+
const source_1 = require("./source");
|
|
17
|
+
/**
|
|
18
|
+
* Purge all managed files for the given entries.
|
|
19
|
+
*
|
|
20
|
+
* Uses resolveFiles() to build the desired file list (installing packages as needed),
|
|
21
|
+
* then calculateDiff() to find the managed files on disk. Deletes ok, conflict,
|
|
22
|
+
* and extra files (i.e. everything currently managed by filedist for these packages).
|
|
23
|
+
* Updates .filedist markers and .gitignore entries for affected output directories.
|
|
24
|
+
*/
|
|
25
|
+
async function actionPurge(options) {
|
|
26
|
+
const { entries, cwd, dryRun = false, verbose = false, onProgress } = options;
|
|
27
|
+
const summary = { deleted: 0, symlinksRemoved: 0, dirsRemoved: 0 };
|
|
28
|
+
const sourceRuntime = (0, source_1.createSourceRuntime)(cwd, verbose);
|
|
29
|
+
if (verbose) {
|
|
30
|
+
console.log(`[verbose] actionPurge: resolving files (cwd: ${(0, utils_1.formatDisplayPath)(cwd, cwd)})`);
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const resolved = await (0, resolve_files_1.resolveFilesDetailed)(entries, {
|
|
34
|
+
cwd,
|
|
35
|
+
verbose,
|
|
36
|
+
sourceRuntime,
|
|
37
|
+
onProgress: (e) => {
|
|
38
|
+
if (e.type === 'package-start' || e.type === 'package-end')
|
|
39
|
+
onProgress?.(e);
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
const resolvedFiles = resolved.files;
|
|
43
|
+
if (verbose) {
|
|
44
|
+
console.log(`[verbose] actionPurge: resolved ${resolvedFiles.length} desired file(s)`);
|
|
45
|
+
}
|
|
46
|
+
const managedResolvedFiles = resolvedFiles.filter((f) => f.managed);
|
|
47
|
+
const diff = await (0, calculate_diff_1.calculateDiff)(managedResolvedFiles, verbose, cwd, resolved.relevantPackagesByOutputDir);
|
|
48
|
+
// Purge: ok (present+matching), conflict (present+mismatched), extra (stale managed)
|
|
49
|
+
const filesToDelete = [...diff.ok, ...diff.conflict, ...diff.extra];
|
|
50
|
+
if (verbose) {
|
|
51
|
+
console.log(`[verbose] actionPurge: ${filesToDelete.length} file(s) to delete` +
|
|
52
|
+
` (ok=${diff.ok.length} conflict=${diff.conflict.length} extra=${diff.extra.length})`);
|
|
53
|
+
}
|
|
54
|
+
// Group by outputDir
|
|
55
|
+
const byOutputDir = new Map();
|
|
56
|
+
for (const entry of filesToDelete) {
|
|
57
|
+
const arr = byOutputDir.get(entry.outputDir) ?? [];
|
|
58
|
+
arr.push(entry);
|
|
59
|
+
byOutputDir.set(entry.outputDir, arr);
|
|
60
|
+
}
|
|
61
|
+
for (const [outputDir, dirEntries] of byOutputDir) {
|
|
62
|
+
await purgeOutputDir(outputDir, dirEntries, dryRun, summary, cwd, onProgress, verbose);
|
|
63
|
+
}
|
|
64
|
+
return summary;
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
sourceRuntime.cleanup();
|
|
68
|
+
(0, utils_1.cleanupTempPackageJson)(cwd, verbose);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function purgeOutputDir(outputDir, entries, dryRun, summary, cwd, onProgress, verbose) {
|
|
72
|
+
const relPaths = entries.map((e) => e.relPath);
|
|
73
|
+
const gitignorePaths = (0, gitignore_1.readManagedGitignoreEntries)(outputDir);
|
|
74
|
+
for (const entry of entries) {
|
|
75
|
+
const fullPath = node_path_1.default.join(outputDir, entry.relPath);
|
|
76
|
+
if (node_fs_1.default.existsSync(fullPath)) {
|
|
77
|
+
if (!dryRun) {
|
|
78
|
+
try {
|
|
79
|
+
node_fs_1.default.chmodSync(fullPath, 0o644);
|
|
80
|
+
node_fs_1.default.unlinkSync(fullPath);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// ignore deletion errors
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
summary.deleted++;
|
|
87
|
+
const pkgName = entry.desired?.packageName ?? entry.existing?.packageName ?? '';
|
|
88
|
+
onProgress?.({
|
|
89
|
+
type: 'file-deleted',
|
|
90
|
+
packageName: pkgName,
|
|
91
|
+
file: entry.relPath,
|
|
92
|
+
managed: true,
|
|
93
|
+
gitignore: gitignorePaths.has(entry.relPath),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (!dryRun && relPaths.length > 0) {
|
|
98
|
+
summary.symlinksRemoved += await (0, symlinks_1.removeAllSymlinks)(outputDir);
|
|
99
|
+
summary.dirsRemoved += removeEmptyDirs(outputDir);
|
|
100
|
+
await updateMarkerAfterPurge(outputDir, new Set(relPaths));
|
|
101
|
+
await (0, gitignore_1.removeFromGitignore)(outputDir, relPaths);
|
|
102
|
+
}
|
|
103
|
+
if (verbose) {
|
|
104
|
+
console.log(`[verbose] actionPurge: ${(0, utils_1.formatDisplayPath)(outputDir, cwd)} — deleted ${relPaths.length} file(s)`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async function updateMarkerAfterPurge(outputDir, purgedPaths) {
|
|
108
|
+
const current = await (0, markers_1.readOutputDirMarker)(outputDir);
|
|
109
|
+
const updated = current.filter((m) => !purgedPaths.has(m.path));
|
|
110
|
+
await (0, markers_1.writeMarker)((0, markers_1.markerPath)(outputDir), updated);
|
|
111
|
+
}
|
|
112
|
+
function removeEmptyDirs(dir) {
|
|
113
|
+
let count = 0;
|
|
114
|
+
if (!node_fs_1.default.existsSync(dir))
|
|
115
|
+
return count;
|
|
116
|
+
const recurse = (d) => {
|
|
117
|
+
for (const e of node_fs_1.default.readdirSync(d)) {
|
|
118
|
+
const full = node_path_1.default.join(d, e);
|
|
119
|
+
if (node_fs_1.default.statSync(full).isDirectory())
|
|
120
|
+
recurse(full);
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
if (d !== dir && node_fs_1.default.readdirSync(d).length === 0) {
|
|
124
|
+
node_fs_1.default.rmdirSync(d);
|
|
125
|
+
count++;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// ignore
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
recurse(dir);
|
|
133
|
+
return count;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=action-purge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 .filedist 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, relevantPackagesByOutputDir?: Map<string, Set<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,EACZ,2BAA2B,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GACrD,OAAO,CAAC,UAAU,CAAC,CAyCrB"}
|