filedist 0.31.0 → 0.34.0

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 (129) hide show
  1. package/README.md +301 -254
  2. package/dist/cli/actions/check.d.ts +5 -2
  3. package/dist/cli/actions/check.d.ts.map +1 -1
  4. package/dist/cli/actions/check.js +9 -3
  5. package/dist/cli/actions/check.js.map +1 -1
  6. package/dist/cli/actions/init.d.ts.map +1 -1
  7. package/dist/cli/actions/init.js +10 -3
  8. package/dist/cli/actions/init.js.map +1 -1
  9. package/dist/cli/actions/install.d.ts +7 -0
  10. package/dist/cli/actions/install.d.ts.map +1 -0
  11. package/dist/cli/actions/{extract.js → install.js} +15 -13
  12. package/dist/cli/actions/install.js.map +1 -0
  13. package/dist/cli/actions/list.d.ts +1 -1
  14. package/dist/cli/actions/list.d.ts.map +1 -1
  15. package/dist/cli/actions/list.js +4 -2
  16. package/dist/cli/actions/list.js.map +1 -1
  17. package/dist/cli/actions/remove.d.ts +20 -0
  18. package/dist/cli/actions/remove.d.ts.map +1 -0
  19. package/dist/cli/actions/remove.js +133 -0
  20. package/dist/cli/actions/remove.js.map +1 -0
  21. package/dist/cli/actions/update.d.ts +8 -0
  22. package/dist/cli/actions/update.d.ts.map +1 -0
  23. package/dist/cli/actions/update.js +40 -0
  24. package/dist/cli/actions/update.js.map +1 -0
  25. package/dist/cli/argv.d.ts +8 -5
  26. package/dist/cli/argv.d.ts.map +1 -1
  27. package/dist/cli/argv.js +40 -15
  28. package/dist/cli/argv.js.map +1 -1
  29. package/dist/cli/binpkg.d.ts +1 -12
  30. package/dist/cli/binpkg.d.ts.map +1 -1
  31. package/dist/cli/binpkg.js +65 -12
  32. package/dist/cli/binpkg.js.map +1 -1
  33. package/dist/cli/cli.d.ts.map +1 -1
  34. package/dist/cli/cli.js +80 -41
  35. package/dist/cli/cli.js.map +1 -1
  36. package/dist/cli/usage.d.ts.map +1 -1
  37. package/dist/cli/usage.js +65 -33
  38. package/dist/cli/usage.js.map +1 -1
  39. package/dist/fileset/check.d.ts +0 -1
  40. package/dist/fileset/check.d.ts.map +1 -1
  41. package/dist/fileset/check.js +7 -8
  42. package/dist/fileset/check.js.map +1 -1
  43. package/dist/fileset/constants.d.ts.map +1 -1
  44. package/dist/fileset/constants.js +3 -2
  45. package/dist/fileset/constants.js.map +1 -1
  46. package/dist/fileset/execute.d.ts.map +1 -1
  47. package/dist/fileset/execute.js +2 -1
  48. package/dist/fileset/execute.js.map +1 -1
  49. package/dist/fileset/gitignore.js +3 -3
  50. package/dist/fileset/gitignore.js.map +1 -1
  51. package/dist/fileset/markers.d.ts +1 -2
  52. package/dist/fileset/markers.d.ts.map +1 -1
  53. package/dist/fileset/markers.js +6 -14
  54. package/dist/fileset/markers.js.map +1 -1
  55. package/dist/fileset/test-utils.d.ts.map +1 -1
  56. package/dist/fileset/test-utils.js +2 -1
  57. package/dist/fileset/test-utils.js.map +1 -1
  58. package/dist/index.d.ts +9 -5
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +15 -5
  61. package/dist/index.js.map +1 -1
  62. package/dist/package/action-check.d.ts +19 -9
  63. package/dist/package/action-check.d.ts.map +1 -1
  64. package/dist/package/action-check.js +76 -32
  65. package/dist/package/action-check.js.map +1 -1
  66. package/dist/package/action-init.d.ts +6 -2
  67. package/dist/package/action-init.d.ts.map +1 -1
  68. package/dist/package/action-init.js +26 -15
  69. package/dist/package/action-init.js.map +1 -1
  70. package/dist/package/action-install.d.ts +22 -0
  71. package/dist/package/action-install.d.ts.map +1 -0
  72. package/dist/package/{action-extract.js → action-install.js} +205 -32
  73. package/dist/package/action-install.js.map +1 -0
  74. package/dist/package/action-list.d.ts +5 -2
  75. package/dist/package/action-list.d.ts.map +1 -1
  76. package/dist/package/action-list.js +5 -4
  77. package/dist/package/action-list.js.map +1 -1
  78. package/dist/package/action-remove.d.ts +65 -0
  79. package/dist/package/action-remove.d.ts.map +1 -0
  80. package/dist/package/action-remove.js +171 -0
  81. package/dist/package/action-remove.js.map +1 -0
  82. package/dist/package/action-update.d.ts +28 -0
  83. package/dist/package/action-update.d.ts.map +1 -0
  84. package/dist/package/action-update.js +45 -0
  85. package/dist/package/action-update.js.map +1 -0
  86. package/dist/package/calculate-diff.d.ts +1 -1
  87. package/dist/package/calculate-diff.d.ts.map +1 -1
  88. package/dist/package/calculate-diff.js +11 -13
  89. package/dist/package/calculate-diff.js.map +1 -1
  90. package/dist/package/config.d.ts +40 -27
  91. package/dist/package/config.d.ts.map +1 -1
  92. package/dist/package/config.js +164 -113
  93. package/dist/package/config.js.map +1 -1
  94. package/dist/package/index.d.ts +6 -4
  95. package/dist/package/index.d.ts.map +1 -1
  96. package/dist/package/index.js +7 -5
  97. package/dist/package/index.js.map +1 -1
  98. package/dist/package/lockfile.d.ts +69 -0
  99. package/dist/package/lockfile.d.ts.map +1 -0
  100. package/dist/package/lockfile.js +192 -0
  101. package/dist/package/lockfile.js.map +1 -0
  102. package/dist/package/resolve-files.d.ts +14 -0
  103. package/dist/package/resolve-files.d.ts.map +1 -1
  104. package/dist/package/resolve-files.js +5 -1
  105. package/dist/package/resolve-files.js.map +1 -1
  106. package/dist/package/source.d.ts +13 -0
  107. package/dist/package/source.d.ts.map +1 -1
  108. package/dist/package/source.js +32 -11
  109. package/dist/package/source.js.map +1 -1
  110. package/dist/package/symlinks.d.ts.map +1 -1
  111. package/dist/package/symlinks.js +8 -3
  112. package/dist/package/symlinks.js.map +1 -1
  113. package/dist/types.d.ts +7 -6
  114. package/dist/types.d.ts.map +1 -1
  115. package/package.json +1 -2
  116. package/dist/cli/actions/extract.d.ts +0 -7
  117. package/dist/cli/actions/extract.d.ts.map +0 -1
  118. package/dist/cli/actions/extract.js.map +0 -1
  119. package/dist/cli/actions/purge.d.ts +0 -6
  120. package/dist/cli/actions/purge.d.ts.map +0 -1
  121. package/dist/cli/actions/purge.js +0 -42
  122. package/dist/cli/actions/purge.js.map +0 -1
  123. package/dist/package/action-extract.d.ts +0 -20
  124. package/dist/package/action-extract.d.ts.map +0 -1
  125. package/dist/package/action-extract.js.map +0 -1
  126. package/dist/package/action-purge.d.ts +0 -19
  127. package/dist/package/action-purge.d.ts.map +0 -1
  128. package/dist/package/action-purge.js +0 -135
  129. package/dist/package/action-purge.js.map +0 -1
@@ -7,19 +7,26 @@ exports.actionInit = actionInit;
7
7
  /* eslint-disable no-console */
8
8
  const node_fs_1 = __importDefault(require("node:fs"));
9
9
  const node_path_1 = __importDefault(require("node:path"));
10
+ const js_yaml_1 = __importDefault(require("js-yaml"));
10
11
  const detect_1 = require("package-manager-detector/detect");
11
12
  const commands_1 = require("package-manager-detector/commands");
12
13
  const utils_1 = require("../utils");
14
+ const config_1 = require("./config");
13
15
  /**
14
16
  * Scaffold or update a publishable npm data package.
15
17
  * If package.json already exists, updates it in place.
16
18
  * Creates bin/filedist.js if it does not already exist.
19
+ * Writes .filedist-package.yml with the sets configuration.
17
20
  */
18
21
  async function actionInit(outputDir, verbose, config) {
19
22
  const pkgJsonPath = node_path_1.default.join(outputDir, 'package.json');
20
23
  const binDir = node_path_1.default.join(outputDir, 'bin');
21
24
  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`;
25
+ const packageConfigPath = node_path_1.default.join(outputDir, config_1.PACKAGE_CONFIG_FILENAME);
26
+ const baseConfigFileArg = config?.baseConfigFile;
27
+ const binShim = baseConfigFileArg
28
+ ? `#!/usr/bin/env node\n'use strict';\nrequire('filedist').binpkg(__dirname, process.argv.slice(2), ${JSON.stringify(baseConfigFileArg)});\n`
29
+ : `#!/usr/bin/env node\n'use strict';\nrequire('filedist').binpkg(__dirname, process.argv.slice(2));\n`;
23
30
  node_fs_1.default.mkdirSync(outputDir, { recursive: true });
24
31
  // Read existing package.json or create a new skeleton
25
32
  let pkgJson;
@@ -36,26 +43,29 @@ async function actionInit(outputDir, verbose, config) {
36
43
  };
37
44
  }
38
45
  const filePatterns = config?.files ?? [];
39
- const externalPackages = config?.packages ?? [];
40
46
  // Set bin entry
41
47
  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']);
48
+ // Update npm files list to include data patterns, the bin shim, and the package config
49
+ const npmFiles = new Set([
50
+ ...filePatterns,
51
+ 'package.json',
52
+ 'bin/filedist.js',
53
+ config_1.PACKAGE_CONFIG_FILENAME,
54
+ ]);
44
55
  pkgJson.files = Array.from(npmFiles);
45
- // Build filedist sets: self entry first (no package field), then external packages
56
+ // Remove legacy filedist field if present (config now lives in .filedist-package.yml)
57
+ delete pkgJson.filedist;
58
+ // Write updated package.json (dependencies are managed by the `add` command below)
59
+ // eslint-disable-next-line unicorn/no-null
60
+ node_fs_1.default.writeFileSync(pkgJsonPath, `${JSON.stringify(pkgJson, null, 2)}\n`, 'utf8');
61
+ // Build filedist sets: self entry only (local files). Additional upstream packages
62
+ // must be added manually to .filedist-package.yml.
46
63
  const selfEntry = {
47
64
  output: { path: '.' },
48
65
  ...(filePatterns.length > 0 ? { selector: { files: filePatterns } } : {}),
49
66
  };
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');
67
+ const packageConfigData = { sets: [selfEntry] };
68
+ node_fs_1.default.writeFileSync(packageConfigPath, js_yaml_1.default.dump(packageConfigData, { indent: 2 }), 'utf8');
59
69
  // Create bin/filedist.js only if it does not already exist
60
70
  if (!node_fs_1.default.existsSync(binPath)) {
61
71
  node_fs_1.default.mkdirSync(binDir, { recursive: true });
@@ -66,13 +76,14 @@ async function actionInit(outputDir, verbose, config) {
66
76
  // and package.json dependencies are updated with the correct resolved versions.
67
77
  const detected = await (0, detect_1.detect)({ cwd: outputDir });
68
78
  const agent = detected?.agent ?? 'npm';
69
- const packagesToAdd = ['filedist', ...externalPackages];
79
+ const packagesToAdd = ['filedist'];
70
80
  const addResolved = (0, commands_1.resolveCommand)(agent, 'add', packagesToAdd);
71
81
  if (addResolved) {
72
82
  (0, utils_1.spawnWithLog)(addResolved.command, addResolved.args, outputDir, verbose, true);
73
83
  }
74
84
  if (verbose) {
75
85
  console.log(`Updated: ${pkgJsonPath}`);
86
+ console.log(`Written: ${packageConfigPath}`);
76
87
  console.log(`Created: ${binPath}`);
77
88
  }
78
89
  }
@@ -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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"}
@@ -0,0 +1,22 @@
1
+ import { ProgressEvent, BasicPackageOptions } from '../types';
2
+ export type InstallOptions = BasicPackageOptions & {
3
+ onProgress?: (event: ProgressEvent) => void;
4
+ /**
5
+ * Absolute path to the lock file. Derived from the config file path via getLockfilePath().
6
+ */
7
+ lockfilePath: string;
8
+ /**
9
+ * When true, read the lock file and use it to pin package versions.
10
+ * Fails if no lock file is found. Does not update the lock file.
11
+ * When false (default), resolve normally and write/update the lock file.
12
+ */
13
+ frozenLockfile?: boolean;
14
+ };
15
+ export type InstallResult = {
16
+ added: number;
17
+ modified: number;
18
+ deleted: number;
19
+ skipped: number;
20
+ };
21
+ export declare function actionInstall(options: InstallOptions): Promise<InstallResult>;
22
+ //# sourceMappingURL=action-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-install.d.ts","sourceRoot":"","sources":["../../src/package/action-install.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,aAAa,EACb,mBAAmB,EAEpB,MAAM,UAAU,CAAC;AA8BlB,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG;IACjD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAkCF,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAkWnF"}
@@ -3,31 +3,89 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.actionExtract = actionExtract;
6
+ exports.actionInstall = actionInstall;
7
7
  /* eslint-disable no-console */
8
8
  const node_fs_1 = __importDefault(require("node:fs"));
9
9
  const node_path_1 = __importDefault(require("node:path"));
10
10
  const utils_1 = require("../utils");
11
- const markers_1 = require("../fileset/markers");
12
11
  const gitignore_1 = require("../fileset/gitignore");
13
12
  const symlinks_1 = require("./symlinks");
14
13
  const content_replacements_1 = require("./content-replacements");
15
14
  const resolve_files_1 = require("./resolve-files");
16
15
  const calculate_diff_1 = require("./calculate-diff");
17
16
  const source_1 = require("./source");
17
+ const lockfile_1 = require("./lockfile");
18
18
  /**
19
- * Extract managed files into the output directories.
19
+ * Install managed files into the output directories.
20
20
  *
21
21
  * Two-phase approach:
22
22
  * 1. resolveFiles — installs packages and builds the complete desired file list.
23
23
  * 2. calculateDiff — compares desired files against each output directory.
24
24
  * 3. Apply disk changes: delete extra, add missing, resolve conflicts.
25
+ *
26
+ * Lock file behaviour:
27
+ * - Without frozenLockfile: resolve with latest package versions,
28
+ * then write/update .filedist.lock (packages + sets + managed files).
29
+ * - With frozenLockfile: read .filedist.lock (error if missing), use pinned versions
30
+ * and set definitions from lockfile, validate that the resolved managed-files list
31
+ * matches the lockfile — fail on any difference.
25
32
  */
33
+ function mergePackagesFromLockfile(cwd, relevantPackagesByOutputDir, managedFiles) {
34
+ for (const [relKey, lines] of Object.entries(managedFiles)) {
35
+ const outputDir = node_path_1.default.resolve(cwd, relKey);
36
+ const existing = relevantPackagesByOutputDir.get(outputDir) ?? new Set();
37
+ for (const line of lines) {
38
+ const pkg = line.split('|')[1];
39
+ if (pkg)
40
+ existing.add(pkg);
41
+ }
42
+ relevantPackagesByOutputDir.set(outputDir, existing);
43
+ }
44
+ }
26
45
  // 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);
46
+ async function actionInstall(options) {
47
+ const { cwd, verbose = false, onProgress, dryRun, entries: configEntries } = options;
48
+ const frozenLockfile = options.frozenLockfile ?? false;
49
+ const { lockfilePath } = options;
50
+ const hasForce = configEntries.some((e) => e.output?.force === true);
30
51
  const sourceRuntime = (0, source_1.createSourceRuntime)(cwd, verbose);
52
+ // ── Corrupt lockfile recovery — when force is set, reset corrupt lockfile upfront ──────
53
+ // This must happen before any readLockfile / readManagedFilesForDir calls so all
54
+ // downstream reads get a valid (empty) lockfile rather than throwing.
55
+ if (hasForce && !frozenLockfile) {
56
+ try {
57
+ (0, lockfile_1.readLockfile)(lockfilePath);
58
+ }
59
+ catch {
60
+ const lockName = node_path_1.default.basename(lockfilePath);
61
+ console.warn(`Warning: ${lockName} is corrupt and will be recreated from scratch. ` +
62
+ `Dependencies may be bumped to newer versions.`);
63
+ (0, lockfile_1.writeLockfile)(lockfilePath, { version: 1, packages: {} });
64
+ }
65
+ }
66
+ // ── Lock file handling — resolve locked versions and entries before resolution phase ────
67
+ let lockedVersions;
68
+ let entries = configEntries;
69
+ if (frozenLockfile) {
70
+ const lockfileData = (0, lockfile_1.readLockfile)(lockfilePath);
71
+ if (!lockfileData) {
72
+ const lockName = node_path_1.default.basename(lockfilePath);
73
+ throw new Error(`Lock file ${lockName} not found. ` +
74
+ `Run 'filedist install' without --frozen-lockfile first.`);
75
+ }
76
+ lockedVersions = new Map(Object.entries(lockfileData.packages).map(([spec, ref]) => [spec, ref]));
77
+ // Use set definitions from lockfile if available
78
+ if (lockfileData.sets && lockfileData.sets.length > 0) {
79
+ entries = lockfileData.sets;
80
+ if (verbose) {
81
+ console.log(`[verbose] actionInstall: frozen mode — using ${entries.length} set(s) from lock file`);
82
+ }
83
+ }
84
+ if (verbose) {
85
+ console.log(`[verbose] actionInstall: using frozen lock file (${lockedVersions.size} package(s))`);
86
+ }
87
+ }
88
+ const isDryRun = dryRun ?? entries.some((e) => e.output?.dryRun === true);
31
89
  const result = { added: 0, modified: 0, deleted: 0, skipped: 0 };
32
90
  try {
33
91
  // ── Phase 1: Resolve desired files ──────────────────────────────────────
@@ -36,26 +94,54 @@ async function actionExtract(options) {
36
94
  verbose,
37
95
  onProgress,
38
96
  sourceRuntime,
97
+ lockedVersions,
39
98
  });
40
99
  const resolvedFiles = resolved.files;
41
- const { noSyncOutputDirs, relevantPackagesByOutputDir } = resolved;
100
+ const { noSyncOutputDirs, relevantPackagesByOutputDir, resolvedPackages } = resolved;
42
101
  if (verbose) {
43
- console.log(`[verbose] actionExtract: resolved ${resolvedFiles.length} desired file(s)`);
102
+ console.log(`[verbose] actionInstall: resolved ${resolvedFiles.length} desired file(s)`);
103
+ }
104
+ // ── Supplement output dirs from lockfile for orphan cleanup ──────────────
105
+ // When entries shrink (e.g. after `remove`), output directories that were
106
+ // previously managed may no longer be fully referenced by the current entries.
107
+ // Merge all packages from the lockfile's managed_files into
108
+ // relevantPackagesByOutputDir so calculateDiff identifies files from removed
109
+ // packages as "extra" and cleans them up. Skip in frozen mode.
110
+ if (!frozenLockfile) {
111
+ const existingLock = (0, lockfile_1.readLockfile)(lockfilePath);
112
+ if (existingLock?.files) {
113
+ mergePackagesFromLockfile(cwd, relevantPackagesByOutputDir, existingLock.files);
114
+ }
44
115
  }
45
116
  // ── Phase 2: Calculate diff ──────────────────────────────────────────────
46
- const diff = await (0, calculate_diff_1.calculateDiff)(resolvedFiles, verbose, cwd, relevantPackagesByOutputDir, true);
117
+ const diff = await (0, calculate_diff_1.calculateDiff)(resolvedFiles, verbose, cwd, relevantPackagesByOutputDir, true, lockfilePath);
47
118
  if (verbose) {
48
- console.log(`[verbose] actionExtract: diff ok=${diff.ok.length} missing=${diff.missing.length}` +
119
+ console.log(`[verbose] actionInstall: diff ok=${diff.ok.length} missing=${diff.missing.length}` +
49
120
  ` conflict=${diff.conflict.length} extra=${diff.extra.length}`);
50
121
  }
51
122
  const fileMissingEntries = diff.missing.filter((entry) => entry.desired);
52
123
  const fileOkEntries = diff.ok.filter((entry) => entry.desired);
53
124
  const fileConflictEntries = diff.conflict.filter((entry) => entry.desired);
125
+ // ── Frozen managed-files validation ───────────────────────────────────
126
+ // In frozen mode the managed files list must not change. Fail early if the
127
+ // desired file set differs from what is recorded in the lock file.
128
+ if (frozenLockfile && !isDryRun) {
129
+ const frozenLockData = (0, lockfile_1.readLockfile)(lockfilePath);
130
+ if (frozenLockData?.files) {
131
+ const outputDirs = new Set([
132
+ ...resolvedFiles.map((f) => f.outputDir),
133
+ ...relevantPackagesByOutputDir.keys(),
134
+ ]);
135
+ for (const outputDir of outputDirs) {
136
+ validateFrozenManagedFiles(cwd, outputDir, resolvedFiles, frozenLockData.files);
137
+ }
138
+ }
139
+ }
54
140
  // ── Pre-flight conflict check ──────────────────────────────────────────
55
141
  // Detect unmanaged-file conflicts before any disk writes.
56
142
  if (!isDryRun) {
57
143
  if (verbose) {
58
- console.log(`[verbose] actionExtract: checking for possible file conflicts...`);
144
+ console.log(`[verbose] actionInstall: checking for possible file conflicts...`);
59
145
  }
60
146
  for (const entry of fileConflictEntries) {
61
147
  const desired = entry.desired;
@@ -89,7 +175,7 @@ async function actionExtract(options) {
89
175
  ]);
90
176
  // Delete extra managed files
91
177
  if (verbose) {
92
- console.log(`[verbose] actionExtract: removing extra managed files...`);
178
+ console.log(`[verbose] actionInstall: removing extra managed files...`);
93
179
  }
94
180
  for (const entry of diff.extra.filter((diffEntry) => (0, symlinks_1.isManagedFileEntry)(diffEntry.existing) && !noSyncOutputDirs.has(diffEntry.outputDir))) {
95
181
  const { outputDir, relPath, existing } = entry;
@@ -98,6 +184,7 @@ async function actionExtract(options) {
98
184
  if (node_fs_1.default.existsSync(fullPath)) {
99
185
  node_fs_1.default.chmodSync(fullPath, 0o644);
100
186
  node_fs_1.default.unlinkSync(fullPath);
187
+ removeEmptyDirsUpTo(node_path_1.default.dirname(fullPath), outputDir);
101
188
  }
102
189
  onProgress?.({
103
190
  type: 'file-deleted',
@@ -109,7 +196,7 @@ async function actionExtract(options) {
109
196
  }
110
197
  // Add missing files
111
198
  if (verbose) {
112
- console.log(`[verbose] actionExtract: adding missing files...`);
199
+ console.log(`[verbose] actionInstall: adding missing files...`);
113
200
  }
114
201
  for (const entry of fileMissingEntries) {
115
202
  const desired = entry.desired;
@@ -135,7 +222,7 @@ async function actionExtract(options) {
135
222
  }
136
223
  // Resolve conflicts
137
224
  if (verbose) {
138
- console.log(`[verbose] actionExtract: resolving file conflicts...`);
225
+ console.log(`[verbose] actionInstall: resolving file conflicts...`);
139
226
  }
140
227
  for (const entry of fileConflictEntries) {
141
228
  const desired = entry.desired;
@@ -161,12 +248,13 @@ async function actionExtract(options) {
161
248
  }
162
249
  // Apply symlinks and content replacements per output directory
163
250
  if (verbose) {
164
- console.log(`[verbose] actionExtract: applying symlinks and content replacements...`);
251
+ console.log(`[verbose] actionInstall: applying symlinks and content replacements...`);
165
252
  }
253
+ const managedFilesByOutputDir = new Map();
166
254
  for (const outputDir of outputDirs) {
167
255
  const dirFiles = resolvedFiles.filter((f) => f.outputDir === outputDir);
168
256
  const relevantPackages = relevantPackagesByOutputDir.get(outputDir);
169
- const existingMarker = await (0, markers_1.readOutputDirMarker)(outputDir);
257
+ const existingMarker = (0, lockfile_1.readManagedFilesForDir)(lockfilePath, cwd, outputDir);
170
258
  const desiredSymlinkEntries = (0, symlinks_1.collectManagedSymlinkEntries)(outputDir, dirFiles);
171
259
  const desiredSymlinkPaths = new Set(desiredSymlinkEntries.map((entry) => entry.path));
172
260
  const managedSymlinks = (0, symlinks_1.findManagedSymlinkEntries)(existingMarker, relevantPackages);
@@ -181,6 +269,7 @@ async function actionExtract(options) {
181
269
  managed: true,
182
270
  gitignore: false,
183
271
  });
272
+ removeEmptyDirsUpTo(node_path_1.default.dirname(node_path_1.default.join(outputDir, relPath)), outputDir);
184
273
  }
185
274
  }
186
275
  const symlinkConfigs = (0, symlinks_1.uniqueSymlinkConfigs)(dirFiles);
@@ -191,12 +280,44 @@ async function actionExtract(options) {
191
280
  if (contentReplacements.length > 0) {
192
281
  await (0, content_replacements_1.applyContentReplacements)(outputDir, contentReplacements);
193
282
  }
194
- await updateOutputDirMetadata(outputDir, diff, dirFiles, desiredSymlinkEntries, relevantPackages, noSyncOutputDirs.has(outputDir), cwd, verbose);
283
+ const updatedEntries = await updateOutputDirMetadata(outputDir, diff, dirFiles, desiredSymlinkEntries, relevantPackages, noSyncOutputDirs.has(outputDir), cwd, lockfilePath, verbose);
284
+ managedFilesByOutputDir.set(outputDir, updatedEntries);
195
285
  }
196
286
  if (verbose) {
197
- console.log(`[verbose] actionExtract: complete — added=${result.added} modified=${result.modified}` +
287
+ console.log(`[verbose] actionInstall: complete — added=${result.added} modified=${result.modified}` +
198
288
  ` deleted=${result.deleted} skipped=${result.skipped}`);
199
289
  }
290
+ // ── Write/update lock file ───────────────────────────────────────────────
291
+ // Skip all lock file writes when dry-run or frozen.
292
+ if (!isDryRun && !frozenLockfile) {
293
+ const existingLock = (0, lockfile_1.readLockfile)(lockfilePath) ?? { version: 1, packages: {} };
294
+ const managedFilesMap = {};
295
+ for (const [outputDir, entries] of managedFilesByOutputDir) {
296
+ if (entries.length > 0) {
297
+ const key = (0, lockfile_1.outputDirKey)(cwd, outputDir);
298
+ // Serialize using the same format as lockfile helpers
299
+ managedFilesMap[key] = serializeManagedEntries(entries);
300
+ }
301
+ }
302
+ const { packages } = (0, lockfile_1.buildLockfileData)(resolvedPackages);
303
+ const updatedLock = {
304
+ ...existingLock,
305
+ packages,
306
+ // Store the set definitions so check/purge/frozen-install can operate without config
307
+ sets: configEntries,
308
+ // Always override files with the freshly computed map so entries
309
+ // from removed sets are not carried over from the existingLock spread.
310
+ // writeLockfile deletes the key when the map is empty.
311
+ files: managedFilesMap,
312
+ };
313
+ (0, lockfile_1.writeLockfile)(lockfilePath, updatedLock);
314
+ if (verbose) {
315
+ const pkgCount = Object.keys(updatedLock.packages).length;
316
+ const dirCount = Object.keys(managedFilesMap).length;
317
+ console.log(`[verbose] actionInstall: lock file updated (${pkgCount} package(s), ` +
318
+ `${updatedLock.sets?.length ?? 0} set(s), ${dirCount} managed dir(s))`);
319
+ }
320
+ }
200
321
  return result;
201
322
  }
202
323
  finally {
@@ -204,6 +325,24 @@ async function actionExtract(options) {
204
325
  (0, utils_1.cleanupTempPackageJson)(cwd, verbose);
205
326
  }
206
327
  }
328
+ /**
329
+ * Recursively remove empty directories up to (but not including) the output root.
330
+ * Stops as soon as a non-empty directory is encountered.
331
+ */
332
+ function removeEmptyDirsUpTo(dir, rootDir) {
333
+ if (dir === rootDir || !dir.startsWith(rootDir))
334
+ return;
335
+ try {
336
+ const entries = node_fs_1.default.readdirSync(dir);
337
+ if (entries.length === 0) {
338
+ node_fs_1.default.rmdirSync(dir);
339
+ removeEmptyDirsUpTo(node_path_1.default.dirname(dir), rootDir);
340
+ }
341
+ }
342
+ catch {
343
+ // Ignore errors (e.g. dir already removed by a parallel operation)
344
+ }
345
+ }
207
346
  /** Copy a source file to dest, creating parent dirs if needed, and set permissions. */
208
347
  function writeFileToOutput(srcPath, destPath, managed) {
209
348
  (0, utils_1.ensureDir)(node_path_1.default.dirname(destPath));
@@ -213,12 +352,23 @@ function writeFileToOutput(srcPath, destPath, managed) {
213
352
  if (managed)
214
353
  node_fs_1.default.chmodSync(destPath, 0o444);
215
354
  }
355
+ /** Serialize ManagedFileMetadata entries to pipe-separated strings for the lock file. */
356
+ function serializeManagedEntries(entries) {
357
+ return entries.map((e) => {
358
+ const kindField = e.kind === 'symlink' ? 'symlink' : 'file';
359
+ const checksumField = e.checksum;
360
+ const mutableField = e.mutable ? '1' : '0';
361
+ return `${e.path}|${e.packageName}|${e.packageVersion}|${kindField}|${checksumField}|${mutableField}`;
362
+ });
363
+ }
216
364
  /**
217
- * Update the .filedist marker and .gitignore for one output directory after
218
- * disk changes have been applied.
365
+ * Update managed file metadata and .gitignore for one output directory after
366
+ * disk changes have been applied. Returns the updated entries (to be stored
367
+ * in .filedist.lock by the caller).
219
368
  */
220
- async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSymlinkEntries, relevantPackages, noSync, cwd, verbose) {
221
- const existingMarker = await (0, markers_1.readOutputDirMarker)(outputDir);
369
+ async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSymlinkEntries, relevantPackages, noSync, cwd, lockfilePath, verbose) {
370
+ const effectiveLockfilePath = lockfilePath;
371
+ const existingMarker = (0, lockfile_1.readManagedFilesForDir)(effectiveLockfilePath, cwd, outputDir);
222
372
  // Paths removed by this run (extra files that were deleted)
223
373
  const deletedPaths = new Set(diff.extra
224
374
  .filter((e) => e.outputDir === outputDir && (0, symlinks_1.isManagedFileEntry)(e.existing) && !noSync)
@@ -237,8 +387,8 @@ async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSy
237
387
  packageName: e.desired.packageName,
238
388
  packageVersion: e.desired.packageVersion,
239
389
  kind: 'file',
240
- ...(checksumValue ? { checksum: checksumValue } : {}),
241
- ...(e.desired.mutable ? { mutable: true } : {}),
390
+ checksum: checksumValue,
391
+ mutable: e.desired.mutable,
242
392
  };
243
393
  }),
244
394
  ...diff.conflict
@@ -253,8 +403,8 @@ async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSy
253
403
  packageName: e.desired.packageName,
254
404
  packageVersion: e.desired.packageVersion,
255
405
  kind: 'file',
256
- ...(checksumValue ? { checksum: checksumValue } : {}),
257
- ...(e.desired.mutable ? { mutable: true } : {}),
406
+ checksum: checksumValue,
407
+ mutable: e.desired.mutable,
258
408
  };
259
409
  }),
260
410
  ];
@@ -263,7 +413,7 @@ async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSy
263
413
  const updatedByPath = new Map(existingMarker
264
414
  .filter((m) => !deletedPaths.has(m.path) &&
265
415
  !addedEntries.some((e) => e.path === m.path) &&
266
- !((m.kind ?? 'file') === 'symlink' &&
416
+ !(m.kind === 'symlink' &&
267
417
  currentRelevantPackages.has(m.packageName) &&
268
418
  !desiredSymlinkEntries.some((entry) => entry.path === m.path)))
269
419
  .map((m) => [m.path, m]));
@@ -272,21 +422,20 @@ async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSy
272
422
  for (const entry of desiredSymlinkEntries) {
273
423
  const existingEntry = updatedByPath.get(entry.path);
274
424
  if (existingEntry &&
275
- (existingEntry.kind ?? 'file') === 'symlink' &&
425
+ existingEntry.kind === 'symlink' &&
276
426
  existingEntry.packageName === entry.packageName) {
277
427
  continue;
278
428
  }
279
429
  updatedByPath.set(entry.path, entry);
280
430
  }
281
431
  const updatedEntries = [...updatedByPath.values()];
282
- await (0, markers_1.writeMarker)((0, markers_1.markerPath)(outputDir), updatedEntries);
283
432
  if (verbose) {
284
- console.log(`[verbose] updateOutputDirMetadata: ${(0, utils_1.formatDisplayPath)(outputDir, cwd)}: marker updated (${updatedEntries.length} entries)`);
433
+ console.log(`[verbose] updateOutputDirMetadata: ${(0, utils_1.formatDisplayPath)(outputDir, cwd)}: marker prepared (${updatedEntries.length} entries)`);
285
434
  }
286
435
  // Update gitignore: include all remaining managed entries whose gitignore=true
287
436
  const resolvedByPath = new Map(resolvedFiles.filter((f) => f.outputDir === outputDir).map((f) => [f.relPath, f]));
288
437
  const gitignorePaths = updatedEntries
289
- .filter((e) => (e.kind ?? 'file') !== 'symlink')
438
+ .filter((e) => e.kind !== 'symlink')
290
439
  .filter((e) => {
291
440
  const resolved = resolvedByPath.get(e.path);
292
441
  // For files resolved in this run, honour their gitignore setting.
@@ -295,5 +444,29 @@ async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSy
295
444
  })
296
445
  .map((e) => e.path);
297
446
  await (0, gitignore_1.addToGitignore)(outputDir, gitignorePaths);
447
+ return updatedEntries;
448
+ }
449
+ /**
450
+ * Validate that the desired managed-file paths for an output directory match
451
+ * what is recorded in the lock file's managed_files map.
452
+ * Throws a descriptive error when files have been added or removed.
453
+ */
454
+ function validateFrozenManagedFiles(cwd, outputDir, resolvedFiles, managedFilesRecord) {
455
+ const key = (0, lockfile_1.outputDirKey)(cwd, outputDir);
456
+ const lockedPaths = new Set();
457
+ for (const line of managedFilesRecord[key] ?? []) {
458
+ const relPath = line.split('|')[0];
459
+ if (relPath)
460
+ lockedPaths.add(relPath);
461
+ }
462
+ const desiredPaths = new Set(resolvedFiles.filter((f) => f.outputDir === outputDir && f.managed).map((f) => f.relPath));
463
+ const missingInLock = [...desiredPaths].filter((p) => !lockedPaths.has(p));
464
+ const extraInLock = [...lockedPaths].filter((p) => !desiredPaths.has(p));
465
+ if (missingInLock.length > 0 || extraInLock.length > 0) {
466
+ throw new Error(`Frozen lockfile violation: managed file list changed for "${key}".\n` +
467
+ (missingInLock.length > 0 ? ` New files not in lock: ${missingInLock.join(', ')}\n` : '') +
468
+ (extraInLock.length > 0 ? ` Files removed from source: ${extraInLock.join(', ')}\n` : '') +
469
+ `Run 'filedist install' without --frozen-lockfile to update the lock file.`);
470
+ }
298
471
  }
299
- //# sourceMappingURL=action-extract.js.map
472
+ //# sourceMappingURL=action-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-install.js","sourceRoot":"","sources":["../../src/package/action-install.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,14 @@
1
1
  import { ManagedFileMetadata } from '../types';
2
2
  export type ListOptions = {
3
+ cwd: string;
3
4
  outputDir: string;
4
5
  verbose?: boolean;
6
+ /** Absolute path to the lock file. */
7
+ lockfilePath: string;
5
8
  };
6
9
  /**
7
- * Aggregate all managed files across unique output directories.
10
+ * List all managed files for an output directory from the central lock file.
8
11
  * Note: list always ignores --presets; reports all managed files.
9
12
  */
10
- export declare function actionList(options: ListOptions): Promise<ManagedFileMetadata[]>;
13
+ export declare function actionList(options: ListOptions): ManagedFileMetadata[];
11
14
  //# sourceMappingURL=action-list.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"action-list.d.ts","sourceRoot":"","sources":["../../src/package/action-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAI/C,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,mBAAmB,EAAE,CAGtE"}
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.actionList = actionList;
4
- const fileset_1 = require("../fileset");
4
+ const lockfile_1 = require("./lockfile");
5
5
  /**
6
- * Aggregate all managed files across unique output directories.
6
+ * List all managed files for an output directory from the central lock file.
7
7
  * Note: list always ignores --presets; reports all managed files.
8
8
  */
9
- async function actionList(options) {
10
- return (0, fileset_1.readOutputDirMarker)(options.outputDir);
9
+ function actionList(options) {
10
+ const { lockfilePath, cwd, outputDir } = options;
11
+ return (0, lockfile_1.readManagedFilesForDir)(lockfilePath, cwd, outputDir);
11
12
  }
12
13
  //# sourceMappingURL=action-list.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"action-list.js","sourceRoot":"","sources":["../../src/package/action-list.ts"],"names":[],"mappings":";;AAgBA,gCAGC;AAjBD,yCAAoD;AAUpD;;;GAGG;AACH,SAAgB,UAAU,CAAC,OAAoB;IAC7C,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACjD,OAAO,IAAA,iCAAsB,EAAC,YAAY,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;AAC9D,CAAC"}