npmdata 0.11.0 → 0.13.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 +47 -42
- package/dist/cli/actions/check.d.ts +6 -0
- package/dist/cli/actions/check.d.ts.map +1 -0
- package/dist/cli/actions/check.js +45 -0
- package/dist/cli/actions/check.js.map +1 -0
- package/dist/cli/actions/extract.d.ts +7 -0
- package/dist/cli/actions/extract.d.ts.map +1 -0
- package/dist/cli/actions/extract.js +67 -0
- package/dist/cli/actions/extract.js.map +1 -0
- package/dist/cli/actions/init.d.ts +6 -0
- package/dist/cli/actions/init.d.ts.map +1 -0
- package/dist/cli/actions/init.js +30 -0
- package/dist/cli/actions/init.js.map +1 -0
- package/dist/cli/actions/list.d.ts +7 -0
- package/dist/cli/actions/list.d.ts.map +1 -0
- package/dist/cli/actions/list.js +36 -0
- package/dist/cli/actions/list.js.map +1 -0
- package/dist/cli/actions/purge.d.ts +6 -0
- package/dist/cli/actions/purge.d.ts.map +1 -0
- package/dist/cli/actions/purge.js +33 -0
- package/dist/cli/actions/purge.js.map +1 -0
- package/dist/cli/argv.d.ts +35 -0
- package/dist/cli/argv.d.ts.map +1 -0
- package/dist/cli/argv.js +125 -0
- package/dist/cli/argv.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +11 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/binpkg.d.ts +8 -0
- package/dist/cli/binpkg.d.ts.map +1 -0
- package/dist/cli/binpkg.js +24 -0
- package/dist/cli/binpkg.js.map +1 -0
- package/dist/cli/cli.d.ts +10 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +72 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/usage.d.ts +6 -0
- package/dist/cli/usage.d.ts.map +1 -0
- package/dist/cli/usage.js +126 -0
- package/dist/cli/usage.js.map +1 -0
- package/dist/fileset/check.d.ts +15 -0
- package/dist/fileset/check.d.ts.map +1 -0
- package/dist/fileset/check.js +68 -0
- package/dist/fileset/check.js.map +1 -0
- package/dist/fileset/constants.d.ts +13 -0
- package/dist/fileset/constants.d.ts.map +1 -0
- package/dist/fileset/constants.js +22 -0
- package/dist/fileset/constants.js.map +1 -0
- package/dist/fileset/diff.d.ts +16 -0
- package/dist/fileset/diff.d.ts.map +1 -0
- package/dist/fileset/diff.js +116 -0
- package/dist/fileset/diff.js.map +1 -0
- package/dist/fileset/execute.d.ts +29 -0
- package/dist/fileset/execute.d.ts.map +1 -0
- package/dist/fileset/execute.js +136 -0
- package/dist/fileset/execute.js.map +1 -0
- package/dist/fileset/gitignore.d.ts +16 -0
- package/dist/fileset/gitignore.d.ts.map +1 -0
- package/dist/fileset/gitignore.js +82 -0
- package/dist/fileset/gitignore.js.map +1 -0
- package/dist/fileset/index.d.ts +5 -0
- package/dist/fileset/index.d.ts.map +1 -0
- package/dist/fileset/index.js +21 -0
- package/dist/fileset/index.js.map +1 -0
- package/dist/fileset/list.d.ts +6 -0
- package/dist/fileset/list.d.ts.map +1 -0
- package/dist/fileset/list.js +11 -0
- package/dist/fileset/list.js.map +1 -0
- package/dist/fileset/markers.d.ts +22 -0
- package/dist/fileset/markers.d.ts.map +1 -0
- package/dist/fileset/markers.js +68 -0
- package/dist/fileset/markers.js.map +1 -0
- package/dist/fileset/package-files.d.ts +14 -0
- package/dist/fileset/package-files.d.ts.map +1 -0
- package/dist/fileset/package-files.js +81 -0
- package/dist/fileset/package-files.js.map +1 -0
- package/dist/fileset/purge.d.ts +12 -0
- package/dist/fileset/purge.d.ts.map +1 -0
- package/dist/fileset/purge.js +95 -0
- package/dist/fileset/purge.js.map +1 -0
- package/dist/fileset/test-utils.d.ts +12 -0
- package/dist/fileset/test-utils.d.ts.map +1 -0
- package/dist/fileset/test-utils.js +65 -0
- package/dist/fileset/test-utils.js.map +1 -0
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -20
- package/dist/index.js.map +1 -1
- package/dist/npmdata-0.0.1.tgz +0 -0
- package/dist/package/action-check.d.ts +20 -0
- package/dist/package/action-check.d.ts.map +1 -0
- package/dist/package/action-check.js +61 -0
- package/dist/package/action-check.js.map +1 -0
- package/dist/package/action-extract.d.ts +21 -0
- package/dist/package/action-extract.d.ts.map +1 -0
- package/dist/package/action-extract.js +186 -0
- package/dist/package/action-extract.js.map +1 -0
- package/dist/package/action-init.d.ts +13 -0
- package/dist/package/action-init.d.ts.map +1 -0
- package/dist/package/action-init.js +77 -0
- package/dist/package/action-init.js.map +1 -0
- package/dist/package/action-list.d.ts +14 -0
- package/dist/package/action-list.d.ts.map +1 -0
- package/dist/package/action-list.js +46 -0
- package/dist/package/action-list.js.map +1 -0
- package/dist/package/action-purge.d.ts +21 -0
- package/dist/package/action-purge.d.ts.map +1 -0
- package/dist/package/action-purge.js +60 -0
- package/dist/package/action-purge.js.map +1 -0
- package/dist/package/config-merge.d.ts +18 -0
- package/dist/package/config-merge.d.ts.map +1 -0
- package/dist/package/config-merge.js +48 -0
- package/dist/package/config-merge.js.map +1 -0
- package/dist/package/config.d.ts +13 -0
- package/dist/package/config.d.ts.map +1 -0
- package/dist/package/config.js +29 -0
- package/dist/package/config.js.map +1 -0
- package/dist/package/content-replacements.d.ts +21 -0
- package/dist/package/content-replacements.d.ts.map +1 -0
- package/dist/package/content-replacements.js +96 -0
- package/dist/package/content-replacements.js.map +1 -0
- package/dist/package/index.d.ts +10 -0
- package/dist/package/index.d.ts.map +1 -0
- package/dist/package/index.js +16 -0
- package/dist/package/index.js.map +1 -0
- package/dist/package/symlinks.d.ts +17 -0
- package/dist/package/symlinks.d.ts.map +1 -0
- package/dist/package/symlinks.js +125 -0
- package/dist/package/symlinks.js.map +1 -0
- package/dist/types.d.ts +181 -277
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -12
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +25 -55
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +82 -181
- package/dist/utils.js.map +1 -1
- package/package.json +5 -3
- package/bin/npmdata.js +0 -4
- package/dist/cli.d.ts +0 -6
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -570
- package/dist/cli.js.map +0 -1
- package/dist/consumer.d.ts +0 -74
- package/dist/consumer.d.ts.map +0 -1
- package/dist/consumer.js +0 -820
- package/dist/consumer.js.map +0 -1
- package/dist/main.d.ts +0 -3
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js +0 -21
- package/dist/main.js.map +0 -1
- package/dist/publisher.d.ts +0 -38
- package/dist/publisher.d.ts.map +0 -1
- package/dist/publisher.js +0 -164
- package/dist/publisher.js.map +0 -1
- package/dist/runner.d.ts +0 -117
- package/dist/runner.d.ts.map +0 -1
- package/dist/runner.js +0 -812
- package/dist/runner.js.map +0 -1
|
@@ -0,0 +1,96 @@
|
|
|
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.applyContentReplacementsToBuffer = applyContentReplacementsToBuffer;
|
|
7
|
+
exports.applyContentReplacements = applyContentReplacements;
|
|
8
|
+
/* eslint-disable no-restricted-syntax */
|
|
9
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const minimatch_1 = require("minimatch");
|
|
12
|
+
const utils_1 = require("../utils");
|
|
13
|
+
/**
|
|
14
|
+
* Apply content replacement rules to an in-memory string (pure function).
|
|
15
|
+
* Used during check comparison to apply the same transformations before hashing,
|
|
16
|
+
* so replaced files are not falsely reported as modified.
|
|
17
|
+
*
|
|
18
|
+
* @param content The file content as a string.
|
|
19
|
+
* @param replacements List of ContentReplacementConfig to apply.
|
|
20
|
+
* @returns Transformed content string.
|
|
21
|
+
*/
|
|
22
|
+
function applyContentReplacementsToBuffer(content, replacements) {
|
|
23
|
+
let result = content;
|
|
24
|
+
for (const replacement of replacements) {
|
|
25
|
+
const regex = new RegExp(replacement.match, 'g');
|
|
26
|
+
result = result.replace(regex, replacement.replace);
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Apply content replacement rules to files on disk matching the given glob patterns.
|
|
32
|
+
* Skips binary files.
|
|
33
|
+
*
|
|
34
|
+
* @param files List of absolute file paths to apply replacements to.
|
|
35
|
+
* Pre-resolved by the caller via glob matching.
|
|
36
|
+
* @param replacements List of ContentReplacementConfig to apply.
|
|
37
|
+
*/
|
|
38
|
+
async function applyContentReplacements(cwd, replacements) {
|
|
39
|
+
if (replacements.length === 0)
|
|
40
|
+
return;
|
|
41
|
+
// Find all files matching any replacement's files glob under cwd
|
|
42
|
+
const allFiles = collectFilesForReplacements(cwd, replacements);
|
|
43
|
+
for (const filePath of allFiles) {
|
|
44
|
+
if ((0, utils_1.isBinaryFile)(filePath))
|
|
45
|
+
continue;
|
|
46
|
+
try {
|
|
47
|
+
const content = node_fs_1.default.readFileSync(filePath, 'utf8');
|
|
48
|
+
const transformed = applyContentReplacementsToBuffer(content, replacements);
|
|
49
|
+
if (transformed !== content) {
|
|
50
|
+
// Make writable, write, restore writability status
|
|
51
|
+
const stat = node_fs_1.default.statSync(filePath);
|
|
52
|
+
// eslint-disable-next-line no-bitwise
|
|
53
|
+
const wasReadOnly = (stat.mode & 0o200) === 0;
|
|
54
|
+
if (wasReadOnly)
|
|
55
|
+
node_fs_1.default.chmodSync(filePath, 0o644);
|
|
56
|
+
node_fs_1.default.writeFileSync(filePath, transformed, 'utf8');
|
|
57
|
+
if (wasReadOnly)
|
|
58
|
+
node_fs_1.default.chmodSync(filePath, 0o444);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Skip unreadable files
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Collect all files under cwd matching at least one replacement's files glob.
|
|
68
|
+
*/
|
|
69
|
+
function collectFilesForReplacements(cwd, replacements) {
|
|
70
|
+
const globs = replacements.map((r) => r.files);
|
|
71
|
+
const results = [];
|
|
72
|
+
const walk = (dir) => {
|
|
73
|
+
for (const entry of node_fs_1.default.readdirSync(dir)) {
|
|
74
|
+
const fullPath = node_path_1.default.join(dir, entry);
|
|
75
|
+
const stat = node_fs_1.default.lstatSync(fullPath);
|
|
76
|
+
if (stat.isSymbolicLink())
|
|
77
|
+
continue;
|
|
78
|
+
if (stat.isDirectory()) {
|
|
79
|
+
walk(fullPath);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const relPath = node_path_1.default.relative(cwd, fullPath);
|
|
83
|
+
if (globs.some((glob) => (0, minimatch_1.minimatch)(relPath, glob, { dot: true }))) {
|
|
84
|
+
results.push(fullPath);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
try {
|
|
89
|
+
walk(cwd);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// ignore
|
|
93
|
+
}
|
|
94
|
+
return results;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=content-replacements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-replacements.js","sourceRoot":"","sources":["../../src/package/content-replacements.ts"],"names":[],"mappings":";;;;;AAkBA,4EAUC;AAUD,4DA2BC;AAjED,yCAAyC;AACzC,sDAAyB;AACzB,0DAA6B;AAE7B,yCAAsC;AAGtC,oCAAwC;AAExC;;;;;;;;GAQG;AACH,SAAgB,gCAAgC,CAC9C,OAAe,EACf,YAAwC;IAExC,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,wBAAwB,CAC5C,GAAW,EACX,YAAwC;IAExC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEtC,iEAAiE;IACjE,MAAM,QAAQ,GAAG,2BAA2B,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAEhE,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,IAAA,oBAAY,EAAC,QAAQ,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,gCAAgC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC5E,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC5B,mDAAmD;gBACnD,MAAM,IAAI,GAAG,iBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnC,sCAAsC;gBACtC,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,WAAW;oBAAE,iBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC/C,iBAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;gBAChD,IAAI,WAAW;oBAAE,iBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAClC,GAAW,EACX,YAAwC;IAExC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,KAAK,MAAM,KAAK,IAAI,iBAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,iBAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,cAAc,EAAE;gBAAE,SAAS;YACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACf,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,mBAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,qBAAS,EAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { actionExtract } from './action-extract';
|
|
2
|
+
export type { ExtractOptions, ExtractResult } from './action-extract';
|
|
3
|
+
export { actionCheck } from './action-check';
|
|
4
|
+
export type { CheckOptions, CheckSummary } from './action-check';
|
|
5
|
+
export { actionList } from './action-list';
|
|
6
|
+
export type { ListOptions } from './action-list';
|
|
7
|
+
export { actionPurge } from './action-purge';
|
|
8
|
+
export type { PurgeOptions, PurgeSummary } from './action-purge';
|
|
9
|
+
export { mergeSelectorConfig, mergeOutputConfig } from './config-merge';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/package/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeOutputConfig = exports.mergeSelectorConfig = exports.actionPurge = exports.actionList = exports.actionCheck = exports.actionExtract = void 0;
|
|
4
|
+
// Public package-layer API
|
|
5
|
+
var action_extract_1 = require("./action-extract");
|
|
6
|
+
Object.defineProperty(exports, "actionExtract", { enumerable: true, get: function () { return action_extract_1.actionExtract; } });
|
|
7
|
+
var action_check_1 = require("./action-check");
|
|
8
|
+
Object.defineProperty(exports, "actionCheck", { enumerable: true, get: function () { return action_check_1.actionCheck; } });
|
|
9
|
+
var action_list_1 = require("./action-list");
|
|
10
|
+
Object.defineProperty(exports, "actionList", { enumerable: true, get: function () { return action_list_1.actionList; } });
|
|
11
|
+
var action_purge_1 = require("./action-purge");
|
|
12
|
+
Object.defineProperty(exports, "actionPurge", { enumerable: true, get: function () { return action_purge_1.actionPurge; } });
|
|
13
|
+
var config_merge_1 = require("./config-merge");
|
|
14
|
+
Object.defineProperty(exports, "mergeSelectorConfig", { enumerable: true, get: function () { return config_merge_1.mergeSelectorConfig; } });
|
|
15
|
+
Object.defineProperty(exports, "mergeOutputConfig", { enumerable: true, get: function () { return config_merge_1.mergeOutputConfig; } });
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/package/index.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AAC3B,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAGtB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAGpB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAGnB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAGpB,+CAAwE;AAA/D,mHAAA,mBAAmB,OAAA;AAAE,iHAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SymlinkConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Create symlinks for all files/dirs in outputDir matching source globs.
|
|
4
|
+
* Each matching source is symlinked into the target directory.
|
|
5
|
+
* Symlinks are created as relative paths.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createSymlinks(outputDir: string, configs: SymlinkConfig[]): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Remove stale symlinks in outputDir that no longer match their source globs.
|
|
10
|
+
* (Called at the start of each extract run before diffing.)
|
|
11
|
+
*/
|
|
12
|
+
export declare function removeStaleSymlinks(outputDir: string, configs: SymlinkConfig[]): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Remove ALL symlinks pointing into outputDir (used during purge).
|
|
15
|
+
*/
|
|
16
|
+
export declare function removeAllSymlinks(outputDir: string): Promise<number>;
|
|
17
|
+
//# sourceMappingURL=symlinks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symlinks.d.ts","sourceRoot":"","sources":["../../src/package/symlinks.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB/F;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB1E"}
|
|
@@ -0,0 +1,125 @@
|
|
|
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.createSymlinks = createSymlinks;
|
|
7
|
+
exports.removeStaleSymlinks = removeStaleSymlinks;
|
|
8
|
+
exports.removeAllSymlinks = removeAllSymlinks;
|
|
9
|
+
/* eslint-disable no-restricted-syntax */
|
|
10
|
+
/* eslint-disable functional/no-try-statements */
|
|
11
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
12
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
13
|
+
const minimatch_1 = require("minimatch");
|
|
14
|
+
const utils_1 = require("../utils");
|
|
15
|
+
/**
|
|
16
|
+
* Create symlinks for all files/dirs in outputDir matching source globs.
|
|
17
|
+
* Each matching source is symlinked into the target directory.
|
|
18
|
+
* Symlinks are created as relative paths.
|
|
19
|
+
*/
|
|
20
|
+
async function createSymlinks(outputDir, configs) {
|
|
21
|
+
for (const config of configs) {
|
|
22
|
+
const targetDir = node_path_1.default.resolve(outputDir, config.target);
|
|
23
|
+
(0, utils_1.ensureDir)(targetDir);
|
|
24
|
+
const matches = findMatchingPaths(outputDir, config.source);
|
|
25
|
+
for (const relPath of matches) {
|
|
26
|
+
const srcAbsPath = node_path_1.default.join(outputDir, relPath);
|
|
27
|
+
const linkName = node_path_1.default.basename(relPath);
|
|
28
|
+
const linkPath = node_path_1.default.join(targetDir, linkName);
|
|
29
|
+
// Remove existing symlink if present
|
|
30
|
+
if (node_fs_1.default.existsSync(linkPath) || isSymlink(linkPath)) {
|
|
31
|
+
node_fs_1.default.unlinkSync(linkPath);
|
|
32
|
+
}
|
|
33
|
+
// Create relative symlink
|
|
34
|
+
const relTarget = node_path_1.default.relative(targetDir, srcAbsPath);
|
|
35
|
+
node_fs_1.default.symlinkSync(relTarget, linkPath);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Remove stale symlinks in outputDir that no longer match their source globs.
|
|
41
|
+
* (Called at the start of each extract run before diffing.)
|
|
42
|
+
*/
|
|
43
|
+
async function removeStaleSymlinks(outputDir, configs) {
|
|
44
|
+
for (const config of configs) {
|
|
45
|
+
const targetDir = node_path_1.default.resolve(outputDir, config.target);
|
|
46
|
+
if (!node_fs_1.default.existsSync(targetDir))
|
|
47
|
+
continue;
|
|
48
|
+
const currentMatches = new Set(findMatchingPaths(outputDir, config.source).map((p) => node_path_1.default.basename(p)));
|
|
49
|
+
for (const entry of node_fs_1.default.readdirSync(targetDir)) {
|
|
50
|
+
const linkPath = node_path_1.default.join(targetDir, entry);
|
|
51
|
+
if (!isSymlink(linkPath))
|
|
52
|
+
continue;
|
|
53
|
+
if (!currentMatches.has(entry)) {
|
|
54
|
+
try {
|
|
55
|
+
node_fs_1.default.unlinkSync(linkPath);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// ignore
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Remove ALL symlinks pointing into outputDir (used during purge).
|
|
66
|
+
*/
|
|
67
|
+
async function removeAllSymlinks(outputDir) {
|
|
68
|
+
let count = 0;
|
|
69
|
+
const walk = (dir) => {
|
|
70
|
+
if (!node_fs_1.default.existsSync(dir))
|
|
71
|
+
return;
|
|
72
|
+
for (const entry of node_fs_1.default.readdirSync(dir)) {
|
|
73
|
+
const fullPath = node_path_1.default.join(dir, entry);
|
|
74
|
+
if (isSymlink(fullPath)) {
|
|
75
|
+
try {
|
|
76
|
+
const target = node_fs_1.default.readlinkSync(fullPath);
|
|
77
|
+
const absTarget = node_path_1.default.resolve(node_path_1.default.dirname(fullPath), target);
|
|
78
|
+
if (absTarget.startsWith(outputDir)) {
|
|
79
|
+
node_fs_1.default.unlinkSync(fullPath);
|
|
80
|
+
count += 1;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// ignore
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else if (node_fs_1.default.statSync(fullPath).isDirectory()) {
|
|
88
|
+
walk(fullPath);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
walk(outputDir);
|
|
93
|
+
return count;
|
|
94
|
+
}
|
|
95
|
+
function findMatchingPaths(outputDir, glob) {
|
|
96
|
+
const results = [];
|
|
97
|
+
const walk = (dir, baseDir) => {
|
|
98
|
+
if (!node_fs_1.default.existsSync(dir))
|
|
99
|
+
return;
|
|
100
|
+
for (const entry of node_fs_1.default.readdirSync(dir)) {
|
|
101
|
+
const fullPath = node_path_1.default.join(dir, entry);
|
|
102
|
+
const relPath = node_path_1.default.relative(baseDir, fullPath);
|
|
103
|
+
const lstat = node_fs_1.default.lstatSync(fullPath);
|
|
104
|
+
if (lstat.isSymbolicLink())
|
|
105
|
+
continue;
|
|
106
|
+
if ((0, minimatch_1.minimatch)(relPath, glob, { dot: true })) {
|
|
107
|
+
results.push(relPath);
|
|
108
|
+
}
|
|
109
|
+
if (lstat.isDirectory()) {
|
|
110
|
+
walk(fullPath, baseDir);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
walk(outputDir, outputDir);
|
|
115
|
+
return results;
|
|
116
|
+
}
|
|
117
|
+
function isSymlink(filePath) {
|
|
118
|
+
try {
|
|
119
|
+
return node_fs_1.default.lstatSync(filePath).isSymbolicLink();
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=symlinks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symlinks.js","sourceRoot":"","sources":["../../src/package/symlinks.ts"],"names":[],"mappings":"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"}
|