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.
- package/README.md +301 -254
- 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 +9 -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 +8 -5
- package/dist/cli/argv.d.ts.map +1 -1
- package/dist/cli/argv.js +40 -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 +65 -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 +65 -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 +2 -1
- 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 +1 -2
- package/dist/fileset/markers.d.ts.map +1 -1
- package/dist/fileset/markers.js +6 -14
- 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 +19 -9
- package/dist/package/action-check.d.ts.map +1 -1
- package/dist/package/action-check.js +76 -32
- 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} +205 -32
- 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 +11 -13
- 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 +192 -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 +32 -11
- 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/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
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ProgressEvent } from '../types';
|
|
2
|
+
import { InstallResult } from './action-install';
|
|
3
|
+
export type RemoveOptions = {
|
|
4
|
+
/**
|
|
5
|
+
* Working directory; used to discover config file and resolve output paths.
|
|
6
|
+
*/
|
|
7
|
+
cwd: string;
|
|
8
|
+
/**
|
|
9
|
+
* When true, removes all set entries. Mutually exclusive with packageSpec.
|
|
10
|
+
*/
|
|
11
|
+
all?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Package spec to remove. Version/ref is ignored during matching, so both
|
|
14
|
+
* "xdrs-core" and "xdrs-core@1.0.0" match an entry whose package field
|
|
15
|
+
* starts with "xdrs-core". Required when all is not true.
|
|
16
|
+
*/
|
|
17
|
+
packageSpec?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Optional: restrict removal to entries whose output.path equals this value.
|
|
20
|
+
* When omitted, all entries for the package are removed.
|
|
21
|
+
*/
|
|
22
|
+
outputPath?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Optional: restrict removal to entries that contain ALL of these preset tags.
|
|
25
|
+
*/
|
|
26
|
+
presets?: string[];
|
|
27
|
+
/**
|
|
28
|
+
* Explicit path to the config file. When omitted, the config is auto-discovered
|
|
29
|
+
* via cosmiconfig (same as the `install` command).
|
|
30
|
+
*/
|
|
31
|
+
configFilePath: string;
|
|
32
|
+
lockfilePath: string;
|
|
33
|
+
dryRun?: boolean;
|
|
34
|
+
verbose?: boolean;
|
|
35
|
+
onProgress?: (event: ProgressEvent) => void;
|
|
36
|
+
};
|
|
37
|
+
export type RemoveSummary = {
|
|
38
|
+
/** Number of config entries that were removed (or would be removed in dry-run). */
|
|
39
|
+
removedEntries: number;
|
|
40
|
+
/** Result from the subsequent install run that cleared the output directories. */
|
|
41
|
+
install: InstallResult;
|
|
42
|
+
/** True when the lock file was deleted (only possible on --all with full cleanup). */
|
|
43
|
+
lockfileDeleted?: boolean;
|
|
44
|
+
/** True when the config file was deleted (only possible on --all with full cleanup). */
|
|
45
|
+
configFileDeleted?: boolean;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Remove matching config entries and run a full install with the remaining entries
|
|
49
|
+
* so that the lockfile is updated and removed files are deleted from output directories.
|
|
50
|
+
*
|
|
51
|
+
* Steps:
|
|
52
|
+
* 1. Discover the config file path (unless `configFilePath` is supplied). Throws when
|
|
53
|
+
* no config file is found — the config file is required for this command.
|
|
54
|
+
* 2. Partition the config sets: when `all=true`, all entries are removed; otherwise
|
|
55
|
+
* entries matching `packageSpec` (plus optional `outputPath` / `presets` filters)
|
|
56
|
+
* are removed. Throws when no matching entries are found.
|
|
57
|
+
* 3. Rewrite the config file on disk with only the `toKeep` entries.
|
|
58
|
+
* 4. Call `actionInstall` with the remaining entries (`frozenLockfile: false`)
|
|
59
|
+
* so the lockfile is updated and files for removed entries are deleted from disk.
|
|
60
|
+
*
|
|
61
|
+
* This has the same effect as manually deleting the matching sets from the config
|
|
62
|
+
* file and running `filedist install`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function actionRemove(options: RemoveOptions): Promise<RemoveSummary>;
|
|
65
|
+
//# sourceMappingURL=action-remove.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-remove.d.ts","sourceRoot":"","sources":["../../src/package/action-remove.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwB,aAAa,EAAE,MAAM,UAAU,CAAC;AAE/D,OAAO,EAAiB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGhE,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,mFAAmF;IACnF,cAAc,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,OAAO,EAAE,aAAa,CAAC;IACvB,sFAAsF;IACtF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wFAAwF;IACxF,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AA6CF;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA8HjF"}
|
|
@@ -0,0 +1,171 @@
|
|
|
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.actionRemove = actionRemove;
|
|
7
|
+
/* eslint-disable no-console */
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
10
|
+
const action_install_1 = require("./action-install");
|
|
11
|
+
const config_1 = require("./config");
|
|
12
|
+
/**
|
|
13
|
+
* Split config sets into the entries to remove and the entries to keep.
|
|
14
|
+
*/
|
|
15
|
+
function partitionSets(sets, targetName, outputPath, presets) {
|
|
16
|
+
const toRemove = [];
|
|
17
|
+
const toKeep = [];
|
|
18
|
+
for (const e of sets) {
|
|
19
|
+
if (!e.package) {
|
|
20
|
+
toKeep.push(e);
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const match = (0, config_1.packageNameWithoutRef)(e.package) === targetName;
|
|
24
|
+
// eslint-disable-next-line no-undefined
|
|
25
|
+
const outputMatch = outputPath === undefined || e.output?.path === outputPath;
|
|
26
|
+
// eslint-disable-next-line no-undefined
|
|
27
|
+
const presetsMatch = presets === undefined || presets.every((p) => e.presets?.includes(p));
|
|
28
|
+
if (match && outputMatch && presetsMatch) {
|
|
29
|
+
toRemove.push(e);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
toKeep.push(e);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { toRemove, toKeep };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Read and parse sets from a YAML config file. Returns [] when file is missing or empty.
|
|
39
|
+
*/
|
|
40
|
+
function readConfigSets(filePath) {
|
|
41
|
+
try {
|
|
42
|
+
const raw = node_fs_1.default.readFileSync(filePath, 'utf8');
|
|
43
|
+
const parsed = js_yaml_1.default.load(raw);
|
|
44
|
+
return parsed?.sets ?? [];
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Remove matching config entries and run a full install with the remaining entries
|
|
52
|
+
* so that the lockfile is updated and removed files are deleted from output directories.
|
|
53
|
+
*
|
|
54
|
+
* Steps:
|
|
55
|
+
* 1. Discover the config file path (unless `configFilePath` is supplied). Throws when
|
|
56
|
+
* no config file is found — the config file is required for this command.
|
|
57
|
+
* 2. Partition the config sets: when `all=true`, all entries are removed; otherwise
|
|
58
|
+
* entries matching `packageSpec` (plus optional `outputPath` / `presets` filters)
|
|
59
|
+
* are removed. Throws when no matching entries are found.
|
|
60
|
+
* 3. Rewrite the config file on disk with only the `toKeep` entries.
|
|
61
|
+
* 4. Call `actionInstall` with the remaining entries (`frozenLockfile: false`)
|
|
62
|
+
* so the lockfile is updated and files for removed entries are deleted from disk.
|
|
63
|
+
*
|
|
64
|
+
* This has the same effect as manually deleting the matching sets from the config
|
|
65
|
+
* file and running `filedist install`.
|
|
66
|
+
*/
|
|
67
|
+
// eslint-disable-next-line complexity
|
|
68
|
+
async function actionRemove(options) {
|
|
69
|
+
const { cwd, packageSpec, all = false, outputPath, presets, dryRun = false, verbose = false, onProgress, } = options;
|
|
70
|
+
// ── Resolve config file path ──────────────────────────────────────────────
|
|
71
|
+
const { configFilePath } = options;
|
|
72
|
+
const currentSets = readConfigSets(configFilePath);
|
|
73
|
+
// ── Determine which entries to remove and which to keep ───────────────────
|
|
74
|
+
let toRemove;
|
|
75
|
+
let toKeep;
|
|
76
|
+
if (all) {
|
|
77
|
+
toRemove = currentSets.slice();
|
|
78
|
+
toKeep = [];
|
|
79
|
+
if (verbose) {
|
|
80
|
+
console.log(`[verbose] actionRemove: removing all ${toRemove.length} config entries` +
|
|
81
|
+
(configFilePath ? ` from ${configFilePath}` : ''));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
if (!packageSpec) {
|
|
86
|
+
throw new Error('actionRemove: packageSpec is required when all is not true');
|
|
87
|
+
}
|
|
88
|
+
const targetName = (0, config_1.packageNameWithoutRef)(packageSpec);
|
|
89
|
+
if (verbose) {
|
|
90
|
+
console.log(`[verbose] actionRemove: removing entries for "${targetName}"` +
|
|
91
|
+
(outputPath ? ` (output: ${outputPath})` : '') +
|
|
92
|
+
(presets ? ` (presets: ${presets.join(',')})` : '') +
|
|
93
|
+
(configFilePath ? ` from ${configFilePath}` : ' (no config file found)'));
|
|
94
|
+
}
|
|
95
|
+
({ toRemove, toKeep } = partitionSets(currentSets, targetName, outputPath, presets));
|
|
96
|
+
if (toRemove.length === 0) {
|
|
97
|
+
throw new Error(`No entries found for "${packageSpec}"` +
|
|
98
|
+
(outputPath ? ` with output "${outputPath}"` : '') +
|
|
99
|
+
(presets ? ` and presets "${presets.join(',')}"` : '') +
|
|
100
|
+
'. Nothing removed.');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const removedEntries = toRemove.length;
|
|
104
|
+
if (verbose && removedEntries > 0) {
|
|
105
|
+
console.log(`[verbose] actionRemove: ${dryRun ? 'would remove' : 'removing'} ${removedEntries} config entries`);
|
|
106
|
+
}
|
|
107
|
+
// ── Rewrite config file with remaining entries ────────────────────────────
|
|
108
|
+
if (!dryRun && removedEntries > 0) {
|
|
109
|
+
let existingConfig = {};
|
|
110
|
+
try {
|
|
111
|
+
const raw = node_fs_1.default.readFileSync(configFilePath, 'utf8');
|
|
112
|
+
existingConfig = js_yaml_1.default.load(raw) ?? {};
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// no-op: file may not exist when using lockfile-only mode
|
|
116
|
+
}
|
|
117
|
+
existingConfig.sets = toKeep;
|
|
118
|
+
const isJson = configFilePath.endsWith('.json');
|
|
119
|
+
const content = isJson
|
|
120
|
+
? // eslint-disable-next-line unicorn/no-null
|
|
121
|
+
JSON.stringify(existingConfig, null, 2) + '\n'
|
|
122
|
+
: js_yaml_1.default.dump(existingConfig, { indent: 2 });
|
|
123
|
+
node_fs_1.default.writeFileSync(configFilePath, content, 'utf8');
|
|
124
|
+
}
|
|
125
|
+
// ── Run install with remaining entries to update lockfile ─────────────────
|
|
126
|
+
if (verbose) {
|
|
127
|
+
console.log(`[verbose] actionRemove: running install with ${toKeep.length} remaining entries`);
|
|
128
|
+
}
|
|
129
|
+
const { lockfilePath } = options;
|
|
130
|
+
const install = await (0, action_install_1.actionInstall)({
|
|
131
|
+
entries: toKeep,
|
|
132
|
+
cwd,
|
|
133
|
+
lockfilePath,
|
|
134
|
+
dryRun,
|
|
135
|
+
verbose,
|
|
136
|
+
frozenLockfile: false,
|
|
137
|
+
onProgress,
|
|
138
|
+
});
|
|
139
|
+
// When --all is used and all files were successfully removed, delete the lock
|
|
140
|
+
// file and config file since they would be empty/useless.
|
|
141
|
+
let lockfileDeleted = false;
|
|
142
|
+
let configFileDeleted = false;
|
|
143
|
+
if (all && !dryRun && install.added === 0 && install.modified === 0) {
|
|
144
|
+
try {
|
|
145
|
+
if (node_fs_1.default.existsSync(lockfilePath)) {
|
|
146
|
+
node_fs_1.default.unlinkSync(lockfilePath);
|
|
147
|
+
lockfileDeleted = true;
|
|
148
|
+
if (verbose) {
|
|
149
|
+
console.log(`[verbose] actionRemove: deleted lock file ${lockfilePath}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Ignore lock file deletion errors
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
if (node_fs_1.default.existsSync(configFilePath)) {
|
|
158
|
+
node_fs_1.default.unlinkSync(configFilePath);
|
|
159
|
+
configFileDeleted = true;
|
|
160
|
+
if (verbose) {
|
|
161
|
+
console.log(`[verbose] actionRemove: deleted config file ${configFilePath}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// Ignore config file deletion errors
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return { removedEntries, install, lockfileDeleted, configFileDeleted };
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=action-remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-remove.js","sourceRoot":"","sources":["../../src/package/action-remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BasicPackageOptions, FiledistExtractEntry, ProgressEvent } from '../types';
|
|
2
|
+
import { InstallResult } from './action-install';
|
|
3
|
+
export type UpdateOptions = Omit<BasicPackageOptions, 'entries'> & {
|
|
4
|
+
entries?: FiledistExtractEntry[];
|
|
5
|
+
onProgress?: (event: ProgressEvent) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Absolute path to the lock file. Derived from the config file path via getLockfilePath().
|
|
8
|
+
*/
|
|
9
|
+
lockfilePath: string;
|
|
10
|
+
/**
|
|
11
|
+
* When true (default), forces every entry selector to upgrade=true so the
|
|
12
|
+
* package manager fetches the latest matching version from the registry.
|
|
13
|
+
* Set to false to re-resolve from whatever is currently installed locally
|
|
14
|
+
* (useful for testing without registry access).
|
|
15
|
+
*/
|
|
16
|
+
upgrade?: boolean;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Update managed files to their latest available package versions.
|
|
20
|
+
*
|
|
21
|
+
* Reads the set definitions from .filedist.lock (falls back to the entries option
|
|
22
|
+
* when no lockfile is present). Forces upgrade=true on every entry selector so
|
|
23
|
+
* npm/git sources are re-fetched for the newest matching version. Then runs a
|
|
24
|
+
* full install (frozenLockfile=false), which resolves and writes an updated
|
|
25
|
+
* lockfile with new package refs, updated sets, and an updated managed files list.
|
|
26
|
+
*/
|
|
27
|
+
export declare function actionUpdate(options: UpdateOptions): Promise<InstallResult>;
|
|
28
|
+
//# sourceMappingURL=action-update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-update.d.ts","sourceRoot":"","sources":["../../src/package/action-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEpF,OAAO,EAAiB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGhE,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,GAAG;IACjE,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAwCjF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.actionUpdate = actionUpdate;
|
|
4
|
+
const action_install_1 = require("./action-install");
|
|
5
|
+
const lockfile_1 = require("./lockfile");
|
|
6
|
+
/**
|
|
7
|
+
* Update managed files to their latest available package versions.
|
|
8
|
+
*
|
|
9
|
+
* Reads the set definitions from .filedist.lock (falls back to the entries option
|
|
10
|
+
* when no lockfile is present). Forces upgrade=true on every entry selector so
|
|
11
|
+
* npm/git sources are re-fetched for the newest matching version. Then runs a
|
|
12
|
+
* full install (frozenLockfile=false), which resolves and writes an updated
|
|
13
|
+
* lockfile with new package refs, updated sets, and an updated managed files list.
|
|
14
|
+
*/
|
|
15
|
+
async function actionUpdate(options) {
|
|
16
|
+
const { cwd, verbose = false, onProgress, dryRun, upgrade = true } = options;
|
|
17
|
+
const { lockfilePath } = options;
|
|
18
|
+
const lockfileData = (0, lockfile_1.readLockfile)(lockfilePath);
|
|
19
|
+
// Prefer caller-supplied entries (user config) — same precedence as actionInstall.
|
|
20
|
+
// Fall back to set definitions recorded in .filedist.lock when no entries are provided.
|
|
21
|
+
let entries = (options.entries && options.entries.length > 0 ? options.entries : lockfileData?.sets) ?? [];
|
|
22
|
+
if (entries.length === 0) {
|
|
23
|
+
throw new Error(`No sets found. Run 'filedist install' first, or provide --packages to specify packages.`);
|
|
24
|
+
}
|
|
25
|
+
// Force upgrade on all selectors so the resolver fetches the newest matching version.
|
|
26
|
+
if (upgrade) {
|
|
27
|
+
entries = entries.map((entry) => ({
|
|
28
|
+
...entry,
|
|
29
|
+
selector: { ...entry.selector, upgrade: true },
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
if (verbose) {
|
|
33
|
+
console.log(`[verbose] actionUpdate: bumping ${entries.length} set(s) to latest package versions`);
|
|
34
|
+
}
|
|
35
|
+
return (0, action_install_1.actionInstall)({
|
|
36
|
+
entries,
|
|
37
|
+
cwd,
|
|
38
|
+
verbose,
|
|
39
|
+
dryRun,
|
|
40
|
+
onProgress,
|
|
41
|
+
lockfilePath,
|
|
42
|
+
frozenLockfile: false,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=action-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-update.js","sourceRoot":"","sources":["../../src/package/action-update.ts"],"names":[],"mappings":";;AA+BA,oCAwCC;AApED,qDAAgE;AAChE,yCAA0C;AAkB1C;;;;;;;;GAQG;AACI,KAAK,UAAU,YAAY,CAAC,OAAsB;IACvD,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC7E,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEjC,MAAM,YAAY,GAAG,IAAA,uBAAY,EAAC,YAAY,CAAC,CAAC;IAEhD,mFAAmF;IACnF,wFAAwF;IACxF,IAAI,OAAO,GACT,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAE/F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChC,GAAG,KAAK;YACR,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;SAC/C,CAAC,CAAC,CAAC;IACN,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CACT,mCAAmC,OAAO,CAAC,MAAM,oCAAoC,CACtF,CAAC;IACJ,CAAC;IAED,OAAO,IAAA,8BAAa,EAAC;QACnB,OAAO;QACP,GAAG;QACH,OAAO;QACP,MAAM;QACN,UAAU;QACV,YAAY;QACZ,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -8,5 +8,5 @@ import { ResolvedFile, DiffResult } from '../types';
|
|
|
8
8
|
*
|
|
9
9
|
* @returns DiffResult classifying each file as ok, missing, extra, or conflict.
|
|
10
10
|
*/
|
|
11
|
-
export declare function calculateDiff(resolvedFiles: ResolvedFile[], verbose?: boolean, cwd?: string, relevantPackagesByOutputDir?: Map<string, Set<string>>, compareWithSource?: boolean): Promise<DiffResult>;
|
|
11
|
+
export declare function calculateDiff(resolvedFiles: ResolvedFile[], verbose?: boolean, cwd?: string, relevantPackagesByOutputDir?: Map<string, Set<string>>, compareWithSource?: boolean, lockfilePath?: string): Promise<DiffResult>;
|
|
12
12
|
//# sourceMappingURL=calculate-diff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculate-diff.d.ts","sourceRoot":"","sources":["../../src/package/calculate-diff.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAuB,MAAM,UAAU,CAAC;AAQzE;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,CAAC,EAAE,OAAO,EACjB,GAAG,CAAC,EAAE,MAAM,EACZ,2BAA2B,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACtD,iBAAiB,CAAC,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"calculate-diff.d.ts","sourceRoot":"","sources":["../../src/package/calculate-diff.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAuB,MAAM,UAAU,CAAC;AAQzE;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,CAAC,EAAE,OAAO,EACjB,GAAG,CAAC,EAAE,MAAM,EACZ,2BAA2B,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACtD,iBAAiB,CAAC,EAAE,OAAO,EAC3B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,CAAC,CA4CrB"}
|
|
@@ -10,7 +10,7 @@ const node_fs_1 = __importDefault(require("node:fs"));
|
|
|
10
10
|
const node_path_1 = __importDefault(require("node:path"));
|
|
11
11
|
const gitignore_1 = require("../fileset/gitignore");
|
|
12
12
|
const utils_1 = require("../utils");
|
|
13
|
-
const
|
|
13
|
+
const lockfile_1 = require("./lockfile");
|
|
14
14
|
const content_replacements_1 = require("./content-replacements");
|
|
15
15
|
const symlinks_1 = require("./symlinks");
|
|
16
16
|
/**
|
|
@@ -22,7 +22,7 @@ const symlinks_1 = require("./symlinks");
|
|
|
22
22
|
*
|
|
23
23
|
* @returns DiffResult classifying each file as ok, missing, extra, or conflict.
|
|
24
24
|
*/
|
|
25
|
-
async function calculateDiff(resolvedFiles, verbose, cwd, relevantPackagesByOutputDir, compareWithSource) {
|
|
25
|
+
async function calculateDiff(resolvedFiles, verbose, cwd, relevantPackagesByOutputDir, compareWithSource, lockfilePath) {
|
|
26
26
|
const result = { ok: [], missing: [], extra: [], conflict: [] };
|
|
27
27
|
if (resolvedFiles.length === 0 &&
|
|
28
28
|
(!relevantPackagesByOutputDir || relevantPackagesByOutputDir.size === 0)) {
|
|
@@ -40,7 +40,7 @@ async function calculateDiff(resolvedFiles, verbose, cwd, relevantPackagesByOutp
|
|
|
40
40
|
...(relevantPackagesByOutputDir?.keys() ?? []),
|
|
41
41
|
]);
|
|
42
42
|
for (const outputDir of outputDirs) {
|
|
43
|
-
await appendOutputDirDiff(outputDir, byOutputDir.get(outputDir) ?? [], result, relevantPackagesByOutputDir?.get(outputDir), compareWithSource);
|
|
43
|
+
await appendOutputDirDiff(outputDir, byOutputDir.get(outputDir) ?? [], result, relevantPackagesByOutputDir?.get(outputDir), compareWithSource, cwd, lockfilePath);
|
|
44
44
|
if (verbose) {
|
|
45
45
|
console.log(`[verbose] calculateDiff: ${(0, utils_1.formatDisplayPath)(outputDir, cwd)}: ` +
|
|
46
46
|
`ok=${result.ok.length} missing=${result.missing.length} ` +
|
|
@@ -49,8 +49,11 @@ async function calculateDiff(resolvedFiles, verbose, cwd, relevantPackagesByOutp
|
|
|
49
49
|
}
|
|
50
50
|
return result;
|
|
51
51
|
}
|
|
52
|
-
async function appendOutputDirDiff(outputDir, desiredFiles, result, relevantPackages, compareWithSource) {
|
|
53
|
-
|
|
52
|
+
async function appendOutputDirDiff(outputDir, desiredFiles, result, relevantPackages, compareWithSource, cwd, lockfilePath) {
|
|
53
|
+
let existingMarker = [];
|
|
54
|
+
if (lockfilePath && cwd) {
|
|
55
|
+
existingMarker = (0, lockfile_1.readManagedFilesForDir)(lockfilePath, cwd, outputDir);
|
|
56
|
+
}
|
|
54
57
|
const managedByPath = new Map(existingMarker.map((m) => [m.path, m]));
|
|
55
58
|
const desiredSymlinks = (0, symlinks_1.collectManagedSymlinkTargets)(outputDir, desiredFiles);
|
|
56
59
|
const desiredPaths = new Set([
|
|
@@ -98,7 +101,7 @@ function classifyDesiredSymlink(desiredSymlink, outputDir, managedByPath, result
|
|
|
98
101
|
conflictReasons.push('content');
|
|
99
102
|
}
|
|
100
103
|
}
|
|
101
|
-
if (!existingEntry ||
|
|
104
|
+
if (!existingEntry || existingEntry.kind !== 'symlink') {
|
|
102
105
|
conflictReasons.push('managed');
|
|
103
106
|
}
|
|
104
107
|
if (conflictReasons.length === 0) {
|
|
@@ -153,19 +156,14 @@ async function classifyDesiredFile(desired, outputDir, managedByPath, gitignoreP
|
|
|
153
156
|
else {
|
|
154
157
|
// Check mode: compare disk against stored checksum (no source package needed).
|
|
155
158
|
// Mutable files are allowed to change locally — skip content verification.
|
|
156
|
-
// Files with no stored checksum cannot be verified — reported as no-checksum conflict.
|
|
157
159
|
if (existingEntry?.mutable) {
|
|
158
160
|
// File is intentionally mutable (e.g. extracted with mutable option); skip content check
|
|
159
161
|
}
|
|
160
|
-
else
|
|
162
|
+
else {
|
|
161
163
|
const destHash = (0, utils_1.shortenChecksum)(await (0, utils_1.hashFile)(destPath));
|
|
162
|
-
if (existingEntry
|
|
164
|
+
if (existingEntry?.checksum !== destHash)
|
|
163
165
|
conflictReasons.push('content');
|
|
164
166
|
}
|
|
165
|
-
else {
|
|
166
|
-
// No stored checksum: marker is from an old extraction; re-extract to repair
|
|
167
|
-
conflictReasons.push('no-checksum');
|
|
168
|
-
}
|
|
169
167
|
}
|
|
170
168
|
// Managed-state check
|
|
171
169
|
const isManaged = managedByPath.has(desired.relPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculate-diff.js","sourceRoot":"","sources":["../../src/package/calculate-diff.ts"],"names":[],"mappings":";;;;;AAsBA,
|
|
1
|
+
{"version":3,"file":"calculate-diff.js","sourceRoot":"","sources":["../../src/package/calculate-diff.ts"],"names":[],"mappings":"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"}
|
package/dist/package/config.d.ts
CHANGED
|
@@ -1,39 +1,52 @@
|
|
|
1
1
|
import { FiledistConfig, FiledistExtractEntry } from '../types';
|
|
2
|
+
/** Default bootstrap config filename. */
|
|
3
|
+
export declare const DEFAULT_CONFIG_FILENAME = ".filedist.yml";
|
|
4
|
+
/** Represents the structure of a .filedist.yml or .filedist-package.yml file. */
|
|
5
|
+
export type FiledistConfigFile = {
|
|
6
|
+
version: number;
|
|
7
|
+
sets: FiledistExtractEntry[];
|
|
8
|
+
};
|
|
9
|
+
/** Package config filename used by data packages to define their own sets. */
|
|
10
|
+
export declare const PACKAGE_CONFIG_FILENAME = ".filedist-package.yml";
|
|
2
11
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* - .filedistrc (JSON or YAML)
|
|
6
|
-
* - .filedistrc.json / .filedistrc.yaml / .filedistrc.js
|
|
7
|
-
* - filedist.config.js
|
|
8
|
-
* - "filedist" key in package.json
|
|
9
|
-
*
|
|
10
|
-
* Returns the FiledistConfig when found, or null when no configuration is present.
|
|
12
|
+
* Load the default filedist bootstrap config (.filedist.yml) from the given directory.
|
|
13
|
+
* Returns the FiledistConfig when found, or null when absent or empty.
|
|
11
14
|
*/
|
|
12
|
-
export declare function
|
|
15
|
+
export declare function loadDefaultConfig(cwd: string): FiledistConfig | null;
|
|
13
16
|
/**
|
|
14
|
-
* Load a filedist
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* Returns the FiledistConfig when found, or null when the file is empty or invalid.
|
|
17
|
+
* Load a filedist bootstrap config from an explicit YAML file path.
|
|
18
|
+
* Returns the FiledistConfig when found, or null when the file is empty or absent.
|
|
18
19
|
*/
|
|
19
|
-
export declare function loadFiledistConfigFile(filePath: string):
|
|
20
|
+
export declare function loadFiledistConfigFile(filePath: string): FiledistConfig | null;
|
|
20
21
|
/**
|
|
21
|
-
* Load filedist config
|
|
22
|
+
* Load a filedist package config (.filedist-package.yml) from the given directory.
|
|
23
|
+
* Data packages place this file in their root to define their sets, selectors, and presets.
|
|
24
|
+
* Returns the FiledistConfig when found, or null when absent or empty.
|
|
22
25
|
*/
|
|
23
|
-
export declare function
|
|
26
|
+
export declare function loadPackageConfig(directory: string): FiledistConfig | null;
|
|
27
|
+
export declare function upsertFiledistConfigEntries(directory: string, configFilePath: string, addEntries: FiledistExtractEntry[]): Promise<void>;
|
|
24
28
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
29
|
+
* Strip the version/ref from a package spec string, leaving only the package name.
|
|
30
|
+
*
|
|
31
|
+
* Examples:
|
|
32
|
+
* "my-pkg@^1.2.3" → "my-pkg"
|
|
33
|
+
* "@scope/pkg@1.0.0" → "@scope/pkg"
|
|
34
|
+
* "git:github.com/org/repo.git@main" → "git:github.com/org/repo.git"
|
|
35
|
+
* "my-pkg" → "my-pkg"
|
|
28
36
|
*/
|
|
29
|
-
export declare function
|
|
37
|
+
export declare function packageNameWithoutRef(spec: string): string;
|
|
30
38
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* -
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* -
|
|
39
|
+
* Remove entries from the filedist YAML config file that match the given package name.
|
|
40
|
+
*
|
|
41
|
+
* - `packageSpec` is matched against each entry's `package` field after stripping
|
|
42
|
+
* the version/ref from both sides, so "xdrs-core@1.0.0" and "xdrs-core" both
|
|
43
|
+
* match entries whose package field starts with "xdrs-core".
|
|
44
|
+
* - When `outputPath` is supplied, only entries whose `output.path` equals
|
|
45
|
+
* `outputPath` are removed (allows targeting a specific entry when the same
|
|
46
|
+
* package is installed to multiple output directories).
|
|
47
|
+
* - Returns the number of entries removed. Zero means the config was unchanged.
|
|
48
|
+
* - When `configFilePath` is not supplied, defaults to `.filedist.yml` in `directory`.
|
|
49
|
+
* - Throws if the config file exists but cannot be parsed.
|
|
37
50
|
*/
|
|
38
|
-
export declare function
|
|
51
|
+
export declare function removeFiledistConfigEntries(directory: string, packageSpec: string, outputPath?: string, configFilePath?: string): number;
|
|
39
52
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/package/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/package/config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAShE,yCAAyC;AACzC,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,iFAAiF;AACjF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,oBAAoB,EAAE,CAAC;CAC9B,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,0BAA0B,CAAC;AAsD/D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAEpE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAE9E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAE1E;AAuDD,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,oBAAoB,EAAE,GACjC,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAkCR"}
|