filedist 0.30.0 → 0.33.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.
- package/README.md +318 -253
- package/dist/cli/actions/check.d.ts +5 -2
- package/dist/cli/actions/check.d.ts.map +1 -1
- package/dist/cli/actions/check.js +10 -3
- package/dist/cli/actions/check.js.map +1 -1
- package/dist/cli/actions/init.d.ts.map +1 -1
- package/dist/cli/actions/init.js +10 -3
- package/dist/cli/actions/init.js.map +1 -1
- package/dist/cli/actions/install.d.ts +7 -0
- package/dist/cli/actions/install.d.ts.map +1 -0
- package/dist/cli/actions/{extract.js → install.js} +15 -13
- package/dist/cli/actions/install.js.map +1 -0
- package/dist/cli/actions/list.d.ts +1 -1
- package/dist/cli/actions/list.d.ts.map +1 -1
- package/dist/cli/actions/list.js +4 -2
- package/dist/cli/actions/list.js.map +1 -1
- package/dist/cli/actions/remove.d.ts +20 -0
- package/dist/cli/actions/remove.d.ts.map +1 -0
- package/dist/cli/actions/remove.js +133 -0
- package/dist/cli/actions/remove.js.map +1 -0
- package/dist/cli/actions/update.d.ts +8 -0
- package/dist/cli/actions/update.d.ts.map +1 -0
- package/dist/cli/actions/update.js +40 -0
- package/dist/cli/actions/update.js.map +1 -0
- package/dist/cli/argv.d.ts +10 -5
- package/dist/cli/argv.d.ts.map +1 -1
- package/dist/cli/argv.js +41 -15
- package/dist/cli/argv.js.map +1 -1
- package/dist/cli/binpkg.d.ts +1 -12
- package/dist/cli/binpkg.d.ts.map +1 -1
- package/dist/cli/binpkg.js +64 -12
- package/dist/cli/binpkg.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +80 -41
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/usage.d.ts.map +1 -1
- package/dist/cli/usage.js +68 -33
- package/dist/cli/usage.js.map +1 -1
- package/dist/fileset/check.d.ts +0 -1
- package/dist/fileset/check.d.ts.map +1 -1
- package/dist/fileset/check.js +7 -8
- package/dist/fileset/check.js.map +1 -1
- package/dist/fileset/constants.d.ts.map +1 -1
- package/dist/fileset/constants.js +3 -2
- package/dist/fileset/constants.js.map +1 -1
- package/dist/fileset/execute.d.ts.map +1 -1
- package/dist/fileset/execute.js +3 -2
- package/dist/fileset/execute.js.map +1 -1
- package/dist/fileset/gitignore.js +3 -3
- package/dist/fileset/gitignore.js.map +1 -1
- package/dist/fileset/markers.d.ts +9 -4
- package/dist/fileset/markers.d.ts.map +1 -1
- package/dist/fileset/markers.js +31 -22
- package/dist/fileset/markers.js.map +1 -1
- package/dist/fileset/test-utils.d.ts.map +1 -1
- package/dist/fileset/test-utils.js +2 -1
- package/dist/fileset/test-utils.js.map +1 -1
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -5
- package/dist/index.js.map +1 -1
- package/dist/package/action-check.d.ts +25 -9
- package/dist/package/action-check.d.ts.map +1 -1
- package/dist/package/action-check.js +88 -12
- package/dist/package/action-check.js.map +1 -1
- package/dist/package/action-init.d.ts +6 -2
- package/dist/package/action-init.d.ts.map +1 -1
- package/dist/package/action-init.js +26 -15
- package/dist/package/action-init.js.map +1 -1
- package/dist/package/action-install.d.ts +22 -0
- package/dist/package/action-install.d.ts.map +1 -0
- package/dist/package/{action-extract.js → action-install.js} +211 -34
- package/dist/package/action-install.js.map +1 -0
- package/dist/package/action-list.d.ts +5 -2
- package/dist/package/action-list.d.ts.map +1 -1
- package/dist/package/action-list.js +5 -4
- package/dist/package/action-list.js.map +1 -1
- package/dist/package/action-remove.d.ts +65 -0
- package/dist/package/action-remove.d.ts.map +1 -0
- package/dist/package/action-remove.js +171 -0
- package/dist/package/action-remove.js.map +1 -0
- package/dist/package/action-update.d.ts +28 -0
- package/dist/package/action-update.d.ts.map +1 -0
- package/dist/package/action-update.js +45 -0
- package/dist/package/action-update.js.map +1 -0
- package/dist/package/calculate-diff.d.ts +1 -1
- package/dist/package/calculate-diff.d.ts.map +1 -1
- package/dist/package/calculate-diff.js +12 -14
- package/dist/package/calculate-diff.js.map +1 -1
- package/dist/package/config.d.ts +40 -27
- package/dist/package/config.d.ts.map +1 -1
- package/dist/package/config.js +164 -113
- package/dist/package/config.js.map +1 -1
- package/dist/package/index.d.ts +6 -4
- package/dist/package/index.d.ts.map +1 -1
- package/dist/package/index.js +7 -5
- package/dist/package/index.js.map +1 -1
- package/dist/package/lockfile.d.ts +69 -0
- package/dist/package/lockfile.d.ts.map +1 -0
- package/dist/package/lockfile.js +191 -0
- package/dist/package/lockfile.js.map +1 -0
- package/dist/package/resolve-files.d.ts +14 -0
- package/dist/package/resolve-files.d.ts.map +1 -1
- package/dist/package/resolve-files.js +5 -1
- package/dist/package/resolve-files.js.map +1 -1
- package/dist/package/source.d.ts +13 -0
- package/dist/package/source.d.ts.map +1 -1
- package/dist/package/source.js +33 -12
- package/dist/package/source.js.map +1 -1
- package/dist/package/symlinks.d.ts.map +1 -1
- package/dist/package/symlinks.js +8 -3
- package/dist/package/symlinks.js.map +1 -1
- package/dist/types.d.ts +7 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +6 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +9 -0
- package/dist/utils.js.map +1 -1
- package/package.json +1 -2
- package/dist/cli/actions/extract.d.ts +0 -7
- package/dist/cli/actions/extract.d.ts.map +0 -1
- package/dist/cli/actions/extract.js.map +0 -1
- package/dist/cli/actions/purge.d.ts +0 -6
- package/dist/cli/actions/purge.d.ts.map +0 -1
- package/dist/cli/actions/purge.js +0 -42
- package/dist/cli/actions/purge.js.map +0 -1
- package/dist/package/action-extract.d.ts +0 -20
- package/dist/package/action-extract.d.ts.map +0 -1
- package/dist/package/action-extract.js.map +0 -1
- package/dist/package/action-purge.d.ts +0 -19
- package/dist/package/action-purge.d.ts.map +0 -1
- package/dist/package/action-purge.js +0 -135
- package/dist/package/action-purge.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-check.js","sourceRoot":"","sources":["../../src/package/action-check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"action-check.js","sourceRoot":"","sources":["../../src/package/action-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
export type InitConfig = {
|
|
2
2
|
/** File glob patterns to include in the package and use as selector for filesets. */
|
|
3
3
|
files?: string[];
|
|
4
|
-
/**
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Optional config filename to embed in the generated bin shim so consumers use a
|
|
6
|
+
* named config file (e.g. `.mypackage.yml`) instead of the default `.filedist.yml`.
|
|
7
|
+
*/
|
|
8
|
+
baseConfigFile?: string;
|
|
6
9
|
};
|
|
7
10
|
/**
|
|
8
11
|
* Scaffold or update a publishable npm data package.
|
|
9
12
|
* If package.json already exists, updates it in place.
|
|
10
13
|
* Creates bin/filedist.js if it does not already exist.
|
|
14
|
+
* Writes .filedist-package.yml with the sets configuration.
|
|
11
15
|
*/
|
|
12
16
|
export declare function actionInit(outputDir: string, verbose: boolean, config?: InitConfig): Promise<void>;
|
|
13
17
|
//# sourceMappingURL=action-init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-init.d.ts","sourceRoot":"","sources":["../../src/package/action-init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"action-init.d.ts","sourceRoot":"","sources":["../../src/package/action-init.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,UAAU,GAAG;IACvB,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CA+Ef"}
|
|
@@ -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
|
|
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
|
|
43
|
-
const npmFiles = new Set([
|
|
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
|
-
//
|
|
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
|
|
51
|
-
|
|
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'
|
|
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":";;;;;
|
|
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.
|
|
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
|
-
*
|
|
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
|
|
28
|
-
const {
|
|
29
|
-
const
|
|
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]
|
|
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]
|
|
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]
|
|
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]
|
|
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]
|
|
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]
|
|
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]
|
|
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 =
|
|
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]
|
|
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
|
|
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
|
|
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)
|
|
@@ -229,28 +379,32 @@ async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSy
|
|
|
229
379
|
.filter((e) => e.outputDir === outputDir && e.desired?.managed)
|
|
230
380
|
.map((e) => {
|
|
231
381
|
const destPath = node_path_1.default.join(outputDir, e.relPath);
|
|
232
|
-
const checksumValue = node_fs_1.default.existsSync(destPath)
|
|
382
|
+
const checksumValue = node_fs_1.default.existsSync(destPath)
|
|
383
|
+
? (0, utils_1.shortenChecksum)((0, utils_1.hashFileSync)(destPath))
|
|
384
|
+
: '';
|
|
233
385
|
return {
|
|
234
386
|
path: e.relPath,
|
|
235
387
|
packageName: e.desired.packageName,
|
|
236
388
|
packageVersion: e.desired.packageVersion,
|
|
237
389
|
kind: 'file',
|
|
238
|
-
|
|
239
|
-
|
|
390
|
+
checksum: checksumValue,
|
|
391
|
+
mutable: e.desired.mutable,
|
|
240
392
|
};
|
|
241
393
|
}),
|
|
242
394
|
...diff.conflict
|
|
243
395
|
.filter((e) => e.outputDir === outputDir && !!e.desired && e.desired.managed && !e.desired.mutable)
|
|
244
396
|
.map((e) => {
|
|
245
397
|
const destPath = node_path_1.default.join(outputDir, e.relPath);
|
|
246
|
-
const checksumValue = node_fs_1.default.existsSync(destPath)
|
|
398
|
+
const checksumValue = node_fs_1.default.existsSync(destPath)
|
|
399
|
+
? (0, utils_1.shortenChecksum)((0, utils_1.hashFileSync)(destPath))
|
|
400
|
+
: '';
|
|
247
401
|
return {
|
|
248
402
|
path: e.relPath,
|
|
249
403
|
packageName: e.desired.packageName,
|
|
250
404
|
packageVersion: e.desired.packageVersion,
|
|
251
405
|
kind: 'file',
|
|
252
|
-
|
|
253
|
-
|
|
406
|
+
checksum: checksumValue,
|
|
407
|
+
mutable: e.desired.mutable,
|
|
254
408
|
};
|
|
255
409
|
}),
|
|
256
410
|
];
|
|
@@ -259,7 +413,7 @@ async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSy
|
|
|
259
413
|
const updatedByPath = new Map(existingMarker
|
|
260
414
|
.filter((m) => !deletedPaths.has(m.path) &&
|
|
261
415
|
!addedEntries.some((e) => e.path === m.path) &&
|
|
262
|
-
!(
|
|
416
|
+
!(m.kind === 'symlink' &&
|
|
263
417
|
currentRelevantPackages.has(m.packageName) &&
|
|
264
418
|
!desiredSymlinkEntries.some((entry) => entry.path === m.path)))
|
|
265
419
|
.map((m) => [m.path, m]));
|
|
@@ -268,21 +422,20 @@ async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSy
|
|
|
268
422
|
for (const entry of desiredSymlinkEntries) {
|
|
269
423
|
const existingEntry = updatedByPath.get(entry.path);
|
|
270
424
|
if (existingEntry &&
|
|
271
|
-
|
|
425
|
+
existingEntry.kind === 'symlink' &&
|
|
272
426
|
existingEntry.packageName === entry.packageName) {
|
|
273
427
|
continue;
|
|
274
428
|
}
|
|
275
429
|
updatedByPath.set(entry.path, entry);
|
|
276
430
|
}
|
|
277
431
|
const updatedEntries = [...updatedByPath.values()];
|
|
278
|
-
await (0, markers_1.writeMarker)((0, markers_1.markerPath)(outputDir), updatedEntries);
|
|
279
432
|
if (verbose) {
|
|
280
|
-
console.log(`[verbose] updateOutputDirMetadata: ${(0, utils_1.formatDisplayPath)(outputDir, cwd)}: marker
|
|
433
|
+
console.log(`[verbose] updateOutputDirMetadata: ${(0, utils_1.formatDisplayPath)(outputDir, cwd)}: marker prepared (${updatedEntries.length} entries)`);
|
|
281
434
|
}
|
|
282
435
|
// Update gitignore: include all remaining managed entries whose gitignore=true
|
|
283
436
|
const resolvedByPath = new Map(resolvedFiles.filter((f) => f.outputDir === outputDir).map((f) => [f.relPath, f]));
|
|
284
437
|
const gitignorePaths = updatedEntries
|
|
285
|
-
.filter((e) =>
|
|
438
|
+
.filter((e) => e.kind !== 'symlink')
|
|
286
439
|
.filter((e) => {
|
|
287
440
|
const resolved = resolvedByPath.get(e.path);
|
|
288
441
|
// For files resolved in this run, honour their gitignore setting.
|
|
@@ -291,5 +444,29 @@ async function updateOutputDirMetadata(outputDir, diff, resolvedFiles, desiredSy
|
|
|
291
444
|
})
|
|
292
445
|
.map((e) => e.path);
|
|
293
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
|
+
}
|
|
294
471
|
}
|
|
295
|
-
//# sourceMappingURL=action-
|
|
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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"}
|