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.
Files changed (60) hide show
  1. package/dist/cli/actions/check.js +3 -3
  2. package/dist/cli/actions/extract.d.ts.map +1 -1
  3. package/dist/cli/actions/extract.js +4 -3
  4. package/dist/cli/actions/extract.js.map +1 -1
  5. package/dist/cli/actions/purge.d.ts.map +1 -1
  6. package/dist/cli/actions/purge.js +2 -3
  7. package/dist/cli/actions/purge.js.map +1 -1
  8. package/dist/cli/progress.d.ts +6 -0
  9. package/dist/cli/progress.d.ts.map +1 -0
  10. package/dist/cli/progress.js +12 -0
  11. package/dist/cli/progress.js.map +1 -0
  12. package/dist/fileset/execute.d.ts.map +1 -1
  13. package/dist/fileset/execute.js +8 -7
  14. package/dist/fileset/execute.js.map +1 -1
  15. package/dist/fileset/gitignore.d.ts +4 -0
  16. package/dist/fileset/gitignore.d.ts.map +1 -1
  17. package/dist/fileset/gitignore.js +12 -0
  18. package/dist/fileset/gitignore.js.map +1 -1
  19. package/dist/fileset/package-files.d.ts.map +1 -1
  20. package/dist/fileset/package-files.js +8 -0
  21. package/dist/fileset/package-files.js.map +1 -1
  22. package/dist/index.d.ts +4 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +5 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/npmdata-0.0.1.tgz +0 -0
  27. package/dist/package/action-check.d.ts +9 -5
  28. package/dist/package/action-check.d.ts.map +1 -1
  29. package/dist/package/action-check.js +44 -107
  30. package/dist/package/action-check.js.map +1 -1
  31. package/dist/package/action-extract.d.ts +6 -7
  32. package/dist/package/action-extract.d.ts.map +1 -1
  33. package/dist/package/action-extract.js +212 -248
  34. package/dist/package/action-extract.js.map +1 -1
  35. package/dist/package/action-init.d.ts.map +1 -1
  36. package/dist/package/action-init.js +1 -3
  37. package/dist/package/action-init.js.map +1 -1
  38. package/dist/package/action-purge.d.ts +6 -11
  39. package/dist/package/action-purge.d.ts.map +1 -1
  40. package/dist/package/action-purge.js +104 -136
  41. package/dist/package/action-purge.js.map +1 -1
  42. package/dist/package/calculate-diff.d.ts +12 -0
  43. package/dist/package/calculate-diff.d.ts.map +1 -0
  44. package/dist/package/calculate-diff.js +119 -0
  45. package/dist/package/calculate-diff.js.map +1 -0
  46. package/dist/package/config-merge.d.ts +2 -1
  47. package/dist/package/config-merge.d.ts.map +1 -1
  48. package/dist/package/config-merge.js +20 -4
  49. package/dist/package/config-merge.js.map +1 -1
  50. package/dist/package/resolve-files.d.ts +21 -0
  51. package/dist/package/resolve-files.d.ts.map +1 -0
  52. package/dist/package/resolve-files.js +198 -0
  53. package/dist/package/resolve-files.js.map +1 -0
  54. package/dist/types.d.ts +86 -19
  55. package/dist/types.d.ts.map +1 -1
  56. package/dist/utils.d.ts +4 -0
  57. package/dist/utils.d.ts.map +1 -1
  58. package/dist/utils.js +22 -10
  59. package/dist/utils.js.map +1 -1
  60. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"action-init.js","sourceRoot":"","sources":["../../src/package/action-init.ts"],"names":[],"mappings":"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"}
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 { NpmdataConfig, ProgressEvent, BasicPackageOptions } from '../types';
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 from all matching filesets.
15
- * Supports --dry-run.
11
+ * Purge all managed files for the given entries.
16
12
  *
17
- * Operates in two phases:
18
- * 1. Collect: recursively traverse all sets and accumulate the managed file
19
- * entries to delete per output directory (no disk writes).
20
- * 2. Execute: delete the collected files per output directory, then update
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,EAGL,aAAa,EACb,aAAa,EACb,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAKlB,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AA0HF;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAqD9E"}
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 = __importStar(require("node:fs"));
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 purge_1 = require("../fileset/purge");
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
- * Phase 1: recursively collect all managed file entries that need to be purged,
48
- * grouped by output directory. No disk writes are performed.
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
- // eslint-disable-next-line complexity
51
- async function collectPurgePlan(entries, cwd, verbose, visitedPackages, plan, onProgress) {
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] purge: collecting ${entries.length} entr${entries.length === 1 ? 'y' : 'ies'} (cwd: ${cwd})`);
28
+ console.log(`[verbose] actionPurge: resolving files (cwd: ${(0, utils_1.formatDisplayPath)(cwd, cwd)})`);
54
29
  }
55
- for (const entry of entries) {
56
- const pkg = (0, utils_1.parsePackageSpec)(entry.package);
57
- const outputDir = node_path_1.default.resolve(cwd, entry.output?.path ?? '.');
58
- if (verbose) {
59
- console.log(`[verbose] purge: collecting entry package=${entry.package} outputDir=${entry.output?.path ?? '.'}`);
60
- }
61
- onProgress?.({
62
- type: 'package-start',
63
- packageName: pkg.name,
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
- // Hierarchical collection: if the installed package declares npmdata.sets, recurse
78
- const pkgPath = (0, utils_1.getInstalledIfSatisfies)(pkg.name, pkg.version, cwd);
79
- if (!pkgPath)
80
- continue;
81
- const pkgJsonFile = node_path_1.default.join(pkgPath, 'package.json');
82
- if (!(0, node_fs_1.existsSync)(pkgJsonFile))
83
- continue;
84
- const depPkgJson = JSON.parse(node_fs_1.default.readFileSync(pkgJsonFile).toString());
85
- const pkgNpmdataSets = depPkgJson.npmdata?.sets;
86
- if (pkgNpmdataSets && pkgNpmdataSets.length > 0) {
87
- const siblingNames = new Set(entries.map((e) => (0, utils_1.parsePackageSpec)(e.package).name));
88
- const presetFilteredSets = (0, utils_1.filterEntriesByPresets)(pkgNpmdataSets, entry.selector?.presets ?? []);
89
- // Self-referencing sets (same package + explicit files) define which of the current
90
- // package's own files belong to each preset. Include them alongside external sets so
91
- // that --presets filtering works correctly for self-installable packages.
92
- const selfRefSets = entry.selector?.presets && entry.selector.presets.length > 0
93
- ? presetFilteredSets.filter((e) => (0, utils_1.parsePackageSpec)(e.package).name === pkg.name &&
94
- e.selector?.files &&
95
- e.selector.files.length > 0)
96
- : [];
97
- const externalSets = presetFilteredSets.filter((e) => !siblingNames.has((0, utils_1.parsePackageSpec)(e.package).name) &&
98
- !visitedPackages.has((0, utils_1.parsePackageSpec)(e.package).name));
99
- const filteredSets = [...selfRefSets, ...externalSets];
100
- if (filteredSets.length > 0) {
101
- const visitedSet = new Set(visitedPackages);
102
- visitedSet.add(pkg.name);
103
- const outputConfig = entry.output ?? {};
104
- const inheritedEntries = filteredSets.map((depEntry) => {
105
- const { path: depPath, ...restOutput } = depEntry.output ?? {};
106
- return {
107
- ...depEntry,
108
- output: {
109
- ...restOutput,
110
- path: node_path_1.default.join(outputConfig.path ?? '.', depPath ?? '.'),
111
- },
112
- };
113
- });
114
- if (verbose) {
115
- console.log(`[verbose] purge: recursing into ${filteredSets.length} set(s) from ${pkg.name} (${selfRefSets.length} self-ref, ${externalSets.length} external)`);
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
- * Purge managed files from all matching filesets.
124
- * Supports --dry-run.
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
- const total = [...plan.values()].reduce((sum, e) => sum + e.length, 0);
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
- for (const [outputDir, entriesToPurge] of plan) {
147
- if (verbose) {
148
- console.log(`[verbose] purge: executing purge for ${node_path_1.default.relative(cwd, outputDir)} (${entriesToPurge.length} entries)`);
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
- const result = await (0, purge_1.purgeFileset)(outputDir, entriesToPurge, dryRun);
151
- for (const m of entriesToPurge) {
152
- onProgress?.({ type: 'file-deleted', packageName: m.packageName, file: m.path });
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
- summary.deleted += result.deleted;
155
- summary.symlinksRemoved += result.symlinksRemoved;
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
- return summary;
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":"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"}
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":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,cAAc,CAiBjG;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,YAAY,CAczF"}
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 files = parent.files && child.files
14
- ? parent.files.filter((f) => (child.files ?? []).includes(f))
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: `${caller.path}/${child.path}`.replaceAll(/\/+/g, '/'),
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":";;AASA,kDAiBC;AASD,8CAcC;AA/CD;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,MAAsB,EAAE,KAAqB;IAC/E,MAAM,KAAK,GACT,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;QACzB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,cAAc,GAClB,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc;QAC3C,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC;QACrD,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAEtD,OAAO;QACL,KAAK;QACL,cAAc;QACd,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,4BAA4B;QACpD,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,yBAAyB;KAClD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,MAAoB,EAAE,KAAmB;IACzE,OAAO;QACL,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;QAC5D,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;QAClC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY;QACvD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS;QAC9C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;QACxC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;QACrC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QACjE,mBAAmB,EAAE;YACnB,GAAG,CAAC,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC;YACrC,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC;SACrC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config-merge.js","sourceRoot":"","sources":["../../src/package/config-merge.ts"],"names":[],"mappings":";;;;;AAYA,kDAwBC;AASD,8CAmBC;AAhED,0DAA6B;AAI7B;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CAAC,MAAsB,EAAE,KAAqB;IAC/E,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClF,MAAM,iBAAiB,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,WAAW,CAAC,CAAC;IAC5D,MAAM,KAAK,GACT,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,cAAc,GAClB,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc;QAC3C,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC;QACrD,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAEtE,OAAO;QACL,KAAK;QACL,GAAG,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO;QACP,cAAc;QACd,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,4BAA4B;QACpD,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,yBAAyB;KAClD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,MAAoB,EAAE,KAAmB;IACzE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC;IACtC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC;IACpC,uEAAuE;IACvE,qFAAqF;IACrF,MAAM,UAAU,GAAG,mBAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC7F,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;QAClC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY;QACvD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS;QAC9C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;QACxC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;QACrC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QACjE,mBAAmB,EAAE;YACnB,GAAG,CAAC,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC;YACrC,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC;SACrC;KACF,CAAC;AACJ,CAAC"}