npmdata 0.18.15 → 0.20.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 +83 -46
- package/dist/cli/argv.d.ts +4 -1
- package/dist/cli/argv.d.ts.map +1 -1
- package/dist/cli/argv.js +13 -0
- package/dist/cli/argv.js.map +1 -1
- package/dist/cli/usage.d.ts.map +1 -1
- package/dist/cli/usage.js +4 -0
- package/dist/cli/usage.js.map +1 -1
- package/dist/fileset/constants.d.ts.map +1 -1
- package/dist/fileset/constants.js +3 -0
- package/dist/fileset/constants.js.map +1 -1
- package/dist/fileset/markers.d.ts.map +1 -1
- package/dist/fileset/markers.js +7 -1
- package/dist/fileset/markers.js.map +1 -1
- package/dist/fileset/test-utils.d.ts +9 -0
- package/dist/fileset/test-utils.d.ts.map +1 -1
- package/dist/fileset/test-utils.js +32 -1
- package/dist/fileset/test-utils.js.map +1 -1
- package/dist/package/action-check.d.ts.map +1 -1
- package/dist/package/action-check.js +8 -1
- package/dist/package/action-check.js.map +1 -1
- package/dist/package/action-extract.d.ts.map +1 -1
- package/dist/package/action-extract.js +56 -47
- package/dist/package/action-extract.js.map +1 -1
- package/dist/package/action-purge.d.ts.map +1 -1
- package/dist/package/action-purge.js +4 -0
- package/dist/package/action-purge.js.map +1 -1
- package/dist/package/config-merge.d.ts +1 -1
- package/dist/package/config-merge.d.ts.map +1 -1
- package/dist/package/config-merge.js +2 -1
- package/dist/package/config-merge.js.map +1 -1
- package/dist/package/config.d.ts +4 -0
- package/dist/package/config.d.ts.map +1 -1
- package/dist/package/config.js +36 -0
- package/dist/package/config.js.map +1 -1
- package/dist/package/resolve-files.d.ts +3 -0
- package/dist/package/resolve-files.d.ts.map +1 -1
- package/dist/package/resolve-files.js +35 -34
- package/dist/package/resolve-files.js.map +1 -1
- package/dist/package/source.d.ts +20 -0
- package/dist/package/source.d.ts.map +1 -0
- package/dist/package/source.js +193 -0
- package/dist/package/source.js.map +1 -0
- package/dist/package/symlinks.d.ts +12 -4
- package/dist/package/symlinks.d.ts.map +1 -1
- package/dist/package/symlinks.js +87 -17
- package/dist/package/symlinks.js.map +1 -1
- package/dist/types.d.ts +17 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -6,16 +6,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.resolveFiles = resolveFiles;
|
|
7
7
|
exports.resolveFilesDetailed = resolveFilesDetailed;
|
|
8
8
|
/* eslint-disable no-console */
|
|
9
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
11
10
|
const utils_1 = require("../utils");
|
|
12
11
|
const package_files_1 = require("../fileset/package-files");
|
|
12
|
+
const config_1 = require("./config");
|
|
13
13
|
const config_merge_1 = require("./config-merge");
|
|
14
|
+
const source_1 = require("./source");
|
|
14
15
|
function addRelevantPackage(relevantPackagesByOutputDir, outputDir, packageName) {
|
|
15
16
|
const relevantPackages = relevantPackagesByOutputDir.get(outputDir) ?? new Set();
|
|
16
17
|
relevantPackages.add(packageName);
|
|
17
18
|
relevantPackagesByOutputDir.set(outputDir, relevantPackages);
|
|
18
19
|
}
|
|
20
|
+
function markNoSyncOutput(noSyncOutputDirs, outputDir, noSync) {
|
|
21
|
+
if (noSync) {
|
|
22
|
+
noSyncOutputDirs.add(outputDir);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
19
25
|
/** Unique key for an entry used for recursion-cycle detection. */
|
|
20
26
|
function entryKey(entry, output, selector, currentPkgPath) {
|
|
21
27
|
const packageScope = entry.package ?? `__self__:${currentPkgPath ?? ''}`;
|
|
@@ -41,21 +47,24 @@ async function resolveFiles(entries, options) {
|
|
|
41
47
|
async function resolveFilesDetailed(entries, options) {
|
|
42
48
|
const visited = new Set();
|
|
43
49
|
const relevantPackagesByOutputDir = new Map();
|
|
50
|
+
const noSyncOutputDirs = new Set();
|
|
51
|
+
const sourceRuntime = options.sourceRuntime ?? (0, source_1.createSourceRuntime)(options.cwd, options.verbose);
|
|
44
52
|
const raw = await resolveFilesInternal(entries, { path: '.' }, {},
|
|
45
53
|
// eslint-disable-next-line no-undefined
|
|
46
54
|
undefined,
|
|
47
55
|
// eslint-disable-next-line no-undefined
|
|
48
56
|
undefined,
|
|
49
57
|
// eslint-disable-next-line no-undefined
|
|
50
|
-
undefined, options, relevantPackagesByOutputDir, visited);
|
|
58
|
+
undefined, { ...options, sourceRuntime }, relevantPackagesByOutputDir, noSyncOutputDirs, visited);
|
|
51
59
|
return {
|
|
52
60
|
files: deduplicateAndCheckConflicts(raw),
|
|
53
61
|
relevantPackagesByOutputDir,
|
|
62
|
+
noSyncOutputDirs,
|
|
54
63
|
};
|
|
55
64
|
}
|
|
56
65
|
// eslint-disable-next-line complexity
|
|
57
|
-
async function resolveFilesInternal(entries, inheritedOutput, inheritedSelector, currentPkgPath, currentPkgName, currentPkgVersion, options, relevantPackagesByOutputDir, visited) {
|
|
58
|
-
const { cwd, verbose, onProgress } = options;
|
|
66
|
+
async function resolveFilesInternal(entries, inheritedOutput, inheritedSelector, currentPkgPath, currentPkgName, currentPkgVersion, options, relevantPackagesByOutputDir, noSyncOutputDirs, visited) {
|
|
67
|
+
const { cwd, verbose, onProgress, sourceRuntime } = options;
|
|
59
68
|
const resolvedEntries = entries.map((entry) => {
|
|
60
69
|
const mergedOutput = (0, config_merge_1.mergeOutputConfig)(inheritedOutput, entry.output ?? {});
|
|
61
70
|
const entrySelector = entry.selector ?? {};
|
|
@@ -84,6 +93,7 @@ async function resolveFilesInternal(entries, inheritedOutput, inheritedSelector,
|
|
|
84
93
|
}
|
|
85
94
|
const outputDir = node_path_1.default.resolve(cwd, mergedOutput.path ?? '.');
|
|
86
95
|
addRelevantPackage(relevantPackagesByOutputDir, outputDir, currentPkgName);
|
|
96
|
+
markNoSyncOutput(noSyncOutputDirs, outputDir, mergedOutput.noSync === true);
|
|
87
97
|
const files = await (0, package_files_1.enumeratePackageFiles)(currentPkgPath, mergedSelector);
|
|
88
98
|
if (verbose) {
|
|
89
99
|
console.log(`[verbose] resolveFiles: self-package "${currentPkgName}" → ${files.length} file(s) to ${(0, utils_1.formatDisplayPath)(outputDir, cwd)}`);
|
|
@@ -94,55 +104,45 @@ async function resolveFilesInternal(entries, inheritedOutput, inheritedSelector,
|
|
|
94
104
|
}
|
|
95
105
|
else {
|
|
96
106
|
// ── External-package entry ────────────────────────────────────────────
|
|
97
|
-
const pkg = (0,
|
|
107
|
+
const pkg = (0, source_1.parsePackageTarget)(entry.package, entry.source);
|
|
98
108
|
const upgrade = mergedSelector.upgrade ?? false;
|
|
99
109
|
onProgress?.({
|
|
100
110
|
type: 'package-start',
|
|
101
|
-
packageName: pkg.
|
|
102
|
-
packageVersion: pkg.
|
|
111
|
+
packageName: pkg.packageName,
|
|
112
|
+
packageVersion: pkg.requestedVersion ?? 'latest',
|
|
103
113
|
});
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const pkgJsonContent = JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(pkgPath, 'package.json')).toString());
|
|
108
|
-
installedVersion = pkgJsonContent.version;
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
// fallback
|
|
112
|
-
}
|
|
114
|
+
const resolvedPackage = await sourceRuntime.resolvePackage(entry, upgrade);
|
|
115
|
+
const pkgPath = resolvedPackage.packagePath;
|
|
116
|
+
const installedVersion = resolvedPackage.packageVersion;
|
|
113
117
|
if (verbose) {
|
|
114
|
-
console.log(`[verbose] resolveFiles: resolved "${
|
|
118
|
+
console.log(`[verbose] resolveFiles: resolved "${resolvedPackage.packageName}@${installedVersion}" at ${(0, utils_1.formatDisplayPath)(pkgPath, cwd)}`);
|
|
115
119
|
}
|
|
116
120
|
// Check whether this package declares its own npmdata.sets
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const depPkgJson = JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(pkgPath, 'package.json')).toString());
|
|
120
|
-
pkgNpmdataSets = depPkgJson.npmdata?.sets;
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
// no sets
|
|
124
|
-
}
|
|
121
|
+
const depConfig = await (0, config_1.loadNpmdataConfigFromDirectory)(pkgPath);
|
|
122
|
+
const pkgNpmdataSets = depConfig?.sets;
|
|
125
123
|
const outputDir = node_path_1.default.resolve(cwd, mergedOutput.path ?? '.');
|
|
126
|
-
addRelevantPackage(relevantPackagesByOutputDir, outputDir,
|
|
124
|
+
addRelevantPackage(relevantPackagesByOutputDir, outputDir, resolvedPackage.packageName);
|
|
125
|
+
markNoSyncOutput(noSyncOutputDirs, outputDir, mergedOutput.noSync === true);
|
|
127
126
|
const hasSelfSet = (pkgNpmdataSets ?? []).some((setEntry) => !setEntry.package);
|
|
128
127
|
// When a package declares self sets, those sets define how its own files are split
|
|
129
128
|
// across outputs and managed flags. In that case, skip the blanket own-file pass.
|
|
130
129
|
const ownFiles = hasSelfSet ? [] : await (0, package_files_1.enumeratePackageFiles)(pkgPath, mergedSelector);
|
|
131
130
|
if (verbose) {
|
|
132
|
-
console.log(`[verbose] resolveFiles: "${
|
|
131
|
+
console.log(`[verbose] resolveFiles: "${resolvedPackage.packageName}" own files → ${ownFiles.length} file(s) to ${(0, utils_1.formatDisplayPath)(outputDir, cwd)}`);
|
|
133
132
|
}
|
|
134
133
|
for (const relPath of ownFiles) {
|
|
135
|
-
results.push(buildResolvedFile(relPath, pkgPath,
|
|
134
|
+
results.push(buildResolvedFile(relPath, pkgPath, resolvedPackage.packageName, installedVersion, outputDir, mergedOutput));
|
|
136
135
|
}
|
|
137
136
|
if (pkgNpmdataSets && pkgNpmdataSets.length > 0) {
|
|
138
137
|
for (const pkgSet of pkgNpmdataSets) {
|
|
139
138
|
const setOutput = (0, config_merge_1.mergeOutputConfig)(mergedOutput, pkgSet.output ?? {});
|
|
140
139
|
const setOutputDir = node_path_1.default.resolve(cwd, setOutput.path ?? '.');
|
|
140
|
+
markNoSyncOutput(noSyncOutputDirs, setOutputDir, setOutput.noSync === true);
|
|
141
141
|
if (pkgSet.package) {
|
|
142
|
-
addRelevantPackage(relevantPackagesByOutputDir, setOutputDir, (0,
|
|
142
|
+
addRelevantPackage(relevantPackagesByOutputDir, setOutputDir, (0, source_1.parsePackageTarget)(pkgSet.package, pkgSet.source).packageName);
|
|
143
143
|
}
|
|
144
144
|
else {
|
|
145
|
-
addRelevantPackage(relevantPackagesByOutputDir, setOutputDir,
|
|
145
|
+
addRelevantPackage(relevantPackagesByOutputDir, setOutputDir, resolvedPackage.packageName);
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
// Apply preset filter
|
|
@@ -151,7 +151,7 @@ async function resolveFilesInternal(entries, inheritedOutput, inheritedSelector,
|
|
|
151
151
|
mergedSelector.presets.length > 0 &&
|
|
152
152
|
pkgNpmdataSets.length > 0 &&
|
|
153
153
|
presetFilteredSets.length === 0) {
|
|
154
|
-
throw new Error(`Presets (${mergedSelector.presets.join(', ')}) not found in any set of package "${
|
|
154
|
+
throw new Error(`Presets (${mergedSelector.presets.join(', ')}) not found in any set of package "${resolvedPackage.packageName}"`);
|
|
155
155
|
}
|
|
156
156
|
// Preemptively mark preset-excluded sets as visited
|
|
157
157
|
for (const e of pkgNpmdataSets) {
|
|
@@ -167,17 +167,17 @@ async function resolveFilesInternal(entries, inheritedOutput, inheritedSelector,
|
|
|
167
167
|
// the preset selection above.
|
|
168
168
|
const setsToFollow = presetFilteredSets.filter((e) => typeof e.package === 'string' || hasSelfSet);
|
|
169
169
|
if (verbose && setsToFollow.length > 0) {
|
|
170
|
-
console.log(`[verbose] resolveFiles: "${
|
|
170
|
+
console.log(`[verbose] resolveFiles: "${resolvedPackage.packageName}" has ${pkgNpmdataSets.length} set(s)` +
|
|
171
171
|
`, ${setsToFollow.length} to follow after preset/self-ref filter`);
|
|
172
172
|
}
|
|
173
173
|
if (setsToFollow.length > 0) {
|
|
174
|
-
const subResults = await resolveFilesInternal(setsToFollow, mergedOutput, mergedSelector, pkgPath,
|
|
174
|
+
const subResults = await resolveFilesInternal(setsToFollow, mergedOutput, mergedSelector, pkgPath, resolvedPackage.packageName, installedVersion, options, relevantPackagesByOutputDir, noSyncOutputDirs, visited);
|
|
175
175
|
results.push(...subResults);
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
onProgress?.({
|
|
179
179
|
type: 'package-end',
|
|
180
|
-
packageName:
|
|
180
|
+
packageName: resolvedPackage.packageName,
|
|
181
181
|
packageVersion: installedVersion,
|
|
182
182
|
});
|
|
183
183
|
}
|
|
@@ -195,6 +195,7 @@ function buildResolvedFile(relPath, pkgPath, packageName, packageVersion, output
|
|
|
195
195
|
gitignore: output.gitignore !== false,
|
|
196
196
|
force: output.force ?? false,
|
|
197
197
|
ignoreIfExisting: output.keepExisting ?? false,
|
|
198
|
+
noSync: output.noSync === true,
|
|
198
199
|
contentReplacements: output.contentReplacements ?? [],
|
|
199
200
|
symlinks: output.symlinks ?? [],
|
|
200
201
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-files.js","sourceRoot":"","sources":["../../src/package/resolve-files.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"resolve-files.js","sourceRoot":"","sources":["../../src/package/resolve-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NpmdataExtractEntry, SourceKind } from '../types';
|
|
2
|
+
export type PackageTarget = {
|
|
3
|
+
source: 'npm' | 'git';
|
|
4
|
+
packageName: string;
|
|
5
|
+
requestedVersion?: string;
|
|
6
|
+
repository?: string;
|
|
7
|
+
};
|
|
8
|
+
export type ResolvedPackageSource = {
|
|
9
|
+
source: 'npm' | 'git';
|
|
10
|
+
packageName: string;
|
|
11
|
+
packageVersion: string;
|
|
12
|
+
packagePath: string;
|
|
13
|
+
};
|
|
14
|
+
export type SourceRuntime = {
|
|
15
|
+
resolvePackage: (entry: NpmdataExtractEntry, upgrade: boolean) => Promise<ResolvedPackageSource>;
|
|
16
|
+
cleanup: () => void;
|
|
17
|
+
};
|
|
18
|
+
export declare function parsePackageTarget(spec: string, requestedSource?: SourceKind): PackageTarget;
|
|
19
|
+
export declare function createSourceRuntime(cwd: string, verbose?: boolean): SourceRuntime;
|
|
20
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/package/source.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3D,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjG,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAIF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,eAAe,GAAE,UAAmB,GACnC,aAAa,CAsBf;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,aAAa,CAiE/E"}
|
|
@@ -0,0 +1,193 @@
|
|
|
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.parsePackageTarget = parsePackageTarget;
|
|
7
|
+
exports.createSourceRuntime = createSourceRuntime;
|
|
8
|
+
/* eslint-disable no-console */
|
|
9
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
10
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
11
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
+
const utils_1 = require("../utils");
|
|
13
|
+
const GIT_SOURCE_REGEX = /^(?:https?|ssh|git|file):\/\/|^git@/i;
|
|
14
|
+
function parsePackageTarget(spec, requestedSource = 'auto') {
|
|
15
|
+
const source = resolveSourceKind(spec, requestedSource);
|
|
16
|
+
if (source === 'npm') {
|
|
17
|
+
const atIdx = spec.lastIndexOf('@');
|
|
18
|
+
if (atIdx > 0) {
|
|
19
|
+
const requestedVersion = spec.slice(atIdx + 1);
|
|
20
|
+
return {
|
|
21
|
+
source,
|
|
22
|
+
packageName: spec.slice(0, atIdx),
|
|
23
|
+
...(requestedVersion ? { requestedVersion } : {}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return { source, packageName: spec };
|
|
27
|
+
}
|
|
28
|
+
const { repository, ref } = splitGitSpec(spec);
|
|
29
|
+
return {
|
|
30
|
+
source,
|
|
31
|
+
packageName: normalizeGitRepository(repository),
|
|
32
|
+
...(ref ? { requestedVersion: ref } : {}),
|
|
33
|
+
repository,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function createSourceRuntime(cwd, verbose = false) {
|
|
37
|
+
const packageCache = new Map();
|
|
38
|
+
const cloneDirs = new Set();
|
|
39
|
+
const tempRoot = node_path_1.default.join(cwd, '.npmdata-tmp');
|
|
40
|
+
const ensureTempRoot = () => {
|
|
41
|
+
if (!node_fs_1.default.existsSync(tempRoot)) {
|
|
42
|
+
node_fs_1.default.mkdirSync(tempRoot, { recursive: true });
|
|
43
|
+
if (verbose) {
|
|
44
|
+
console.log(`[verbose] source: created temp git directory ${(0, utils_1.formatDisplayPath)(tempRoot, cwd)}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
ensureGitignoreContains(cwd, '.npmdata-tmp');
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
async resolvePackage(entry, upgrade) {
|
|
51
|
+
if (!entry.package) {
|
|
52
|
+
throw new Error('resolvePackage requires an entry with a package spec');
|
|
53
|
+
}
|
|
54
|
+
const target = parsePackageTarget(entry.package, entry.source);
|
|
55
|
+
const cacheKey = `${target.source}|${target.packageName}|${target.requestedVersion ?? ''}`;
|
|
56
|
+
if (!upgrade) {
|
|
57
|
+
const cached = packageCache.get(cacheKey);
|
|
58
|
+
if (cached)
|
|
59
|
+
return cached;
|
|
60
|
+
}
|
|
61
|
+
const resolved = target.source === 'git'
|
|
62
|
+
? resolveGitPackage(target, cwd, tempRoot, ensureTempRoot, verbose)
|
|
63
|
+
: resolveNpmPackage(target, upgrade, cwd, verbose);
|
|
64
|
+
const packageSource = await resolved;
|
|
65
|
+
packageCache.set(cacheKey, packageSource);
|
|
66
|
+
if (packageSource.source === 'git') {
|
|
67
|
+
cloneDirs.add(packageSource.packagePath);
|
|
68
|
+
}
|
|
69
|
+
return packageSource;
|
|
70
|
+
},
|
|
71
|
+
cleanup() {
|
|
72
|
+
for (const cloneDir of cloneDirs) {
|
|
73
|
+
if (node_fs_1.default.existsSync(cloneDir)) {
|
|
74
|
+
node_fs_1.default.rmSync(cloneDir, { recursive: true, force: true });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
cloneDirs.clear();
|
|
78
|
+
if (node_fs_1.default.existsSync(tempRoot)) {
|
|
79
|
+
try {
|
|
80
|
+
if (node_fs_1.default.readdirSync(tempRoot).length === 0) {
|
|
81
|
+
node_fs_1.default.rmdirSync(tempRoot);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// ignore cleanup failures
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function resolveSourceKind(spec, requestedSource) {
|
|
92
|
+
if (requestedSource === 'npm' || requestedSource === 'git')
|
|
93
|
+
return requestedSource;
|
|
94
|
+
return GIT_SOURCE_REGEX.test(spec) ? 'git' : 'npm';
|
|
95
|
+
}
|
|
96
|
+
function splitGitSpec(spec) {
|
|
97
|
+
if (spec.startsWith('git@')) {
|
|
98
|
+
const firstAt = spec.indexOf('@');
|
|
99
|
+
const lastAt = spec.lastIndexOf('@');
|
|
100
|
+
if (lastAt > firstAt) {
|
|
101
|
+
const ref = spec.slice(lastAt + 1);
|
|
102
|
+
return { repository: spec.slice(0, lastAt), ...(ref ? { ref } : {}) };
|
|
103
|
+
}
|
|
104
|
+
return { repository: spec };
|
|
105
|
+
}
|
|
106
|
+
const schemeEnd = spec.indexOf('://');
|
|
107
|
+
if (schemeEnd !== -1) {
|
|
108
|
+
const authStart = schemeEnd + 3;
|
|
109
|
+
const pathStart = spec.indexOf('/', authStart);
|
|
110
|
+
const authEnd = pathStart === -1 ? spec.length : pathStart;
|
|
111
|
+
const lastAt = spec.lastIndexOf('@');
|
|
112
|
+
if (lastAt >= authEnd) {
|
|
113
|
+
const ref = spec.slice(lastAt + 1);
|
|
114
|
+
return { repository: spec.slice(0, lastAt), ...(ref ? { ref } : {}) };
|
|
115
|
+
}
|
|
116
|
+
return { repository: spec };
|
|
117
|
+
}
|
|
118
|
+
throw new Error(`Git source requires a URL-like package spec. Received "${spec}". ` +
|
|
119
|
+
'Use source="git" with a full repository URL such as https://host/org/repo@ref.');
|
|
120
|
+
}
|
|
121
|
+
function normalizeGitRepository(repository) {
|
|
122
|
+
return repository.replace(/\/+$/, '');
|
|
123
|
+
}
|
|
124
|
+
async function resolveNpmPackage(target, upgrade, cwd, verbose) {
|
|
125
|
+
const packagePath = await (0, utils_1.installOrUpgradePackage)(target.packageName, target.requestedVersion, upgrade, cwd, verbose);
|
|
126
|
+
let installedVersion = '0.0.0';
|
|
127
|
+
try {
|
|
128
|
+
const pkgJsonContent = JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(packagePath, 'package.json')).toString());
|
|
129
|
+
installedVersion = pkgJsonContent.version;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// fallback
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
source: 'npm',
|
|
136
|
+
packageName: target.packageName,
|
|
137
|
+
packageVersion: installedVersion,
|
|
138
|
+
packagePath,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
async function resolveGitPackage(target, cwd, tempRoot, ensureTempRoot, verbose) {
|
|
142
|
+
ensureTempRoot();
|
|
143
|
+
const cloneDir = node_path_1.default.join(tempRoot, buildCloneDirName(target));
|
|
144
|
+
if (node_fs_1.default.existsSync(cloneDir)) {
|
|
145
|
+
node_fs_1.default.rmSync(cloneDir, { recursive: true, force: true });
|
|
146
|
+
}
|
|
147
|
+
if (verbose) {
|
|
148
|
+
console.log(`[verbose] source: cloning ${target.repository} into ${(0, utils_1.formatDisplayPath)(cloneDir, cwd)}`);
|
|
149
|
+
}
|
|
150
|
+
(0, utils_1.spawnWithLog)('git', ['clone', target.repository, cloneDir], cwd, verbose, true);
|
|
151
|
+
if (target.requestedVersion) {
|
|
152
|
+
(0, utils_1.spawnWithLog)('git', ['-C', cloneDir, 'checkout', target.requestedVersion], cwd, verbose, true);
|
|
153
|
+
}
|
|
154
|
+
const revision = (0, utils_1.spawnWithLog)('git', ['-C', cloneDir, 'rev-parse', 'HEAD'], cwd, verbose, true)
|
|
155
|
+
.stdout.toString()
|
|
156
|
+
.trim();
|
|
157
|
+
const gitDir = node_path_1.default.join(cloneDir, '.git');
|
|
158
|
+
if (node_fs_1.default.existsSync(gitDir)) {
|
|
159
|
+
node_fs_1.default.rmSync(gitDir, { recursive: true, force: true });
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
source: 'git',
|
|
163
|
+
packageName: target.packageName,
|
|
164
|
+
packageVersion: revision || target.requestedVersion || 'HEAD',
|
|
165
|
+
packagePath: cloneDir,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function buildCloneDirName(target) {
|
|
169
|
+
const pathSegments = target.packageName.split(/[/:]/).filter(Boolean);
|
|
170
|
+
const lastPathSegment = pathSegments.at(-1);
|
|
171
|
+
const baseName = lastPathSegment?.replace(/\.git$/, '')?.replace(/[^\w.-]+/g, '-') ?? 'repo';
|
|
172
|
+
const digest = node_crypto_1.default
|
|
173
|
+
.createHash('sha1')
|
|
174
|
+
.update(`${target.packageName}@${target.requestedVersion ?? ''}`)
|
|
175
|
+
.digest('hex')
|
|
176
|
+
.slice(0, 12);
|
|
177
|
+
return `${baseName}-${digest}`;
|
|
178
|
+
}
|
|
179
|
+
function ensureGitignoreContains(cwd, entry) {
|
|
180
|
+
const gitignorePath = node_path_1.default.join(cwd, '.gitignore');
|
|
181
|
+
if (!node_fs_1.default.existsSync(gitignorePath)) {
|
|
182
|
+
node_fs_1.default.writeFileSync(gitignorePath, `${entry}\n`);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const lines = node_fs_1.default
|
|
186
|
+
.readFileSync(gitignorePath, 'utf8')
|
|
187
|
+
.split(/\r?\n/)
|
|
188
|
+
.map((line) => line.trim());
|
|
189
|
+
if (!lines.includes(entry)) {
|
|
190
|
+
node_fs_1.default.appendFileSync(gitignorePath, `\n${entry}\n`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/package/source.ts"],"names":[],"mappings":";;;;;AA6BA,gDAyBC;AAED,kDAiEC;AAzHD,+BAA+B;AAC/B,8DAAiC;AACjC,sDAAyB;AACzB,0DAA6B;AAG7B,oCAAoF;AAqBpF,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAEhE,SAAgB,kBAAkB,CAChC,IAAY,EACZ,kBAA8B,MAAM;IAEpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/C,OAAO;gBACL,MAAM;gBACN,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;gBACjC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO;QACL,MAAM;QACN,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC;QAC/C,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAW,EAAE,OAAO,GAAG,KAAK;IAC9D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAEhD,MAAM,cAAc,GAAG,GAAS,EAAE;QAChC,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,iBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CACT,gDAAgD,IAAA,yBAAiB,EAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CACnF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,uBAAuB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,cAAc,CAClB,KAA0B,EAC1B,OAAgB;YAEhB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;YAE3F,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC1C,IAAI,MAAM;oBAAE,OAAO,MAAM,CAAC;YAC5B,CAAC;YAED,MAAM,QAAQ,GACZ,MAAM,CAAC,MAAM,KAAK,KAAK;gBACrB,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC;gBACnE,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAEvD,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC;YACrC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAC1C,IAAI,aAAa,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACnC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,OAAO;YACL,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,iBAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;YACD,SAAS,CAAC,KAAK,EAAE,CAAC;YAElB,IAAI,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,IAAI,iBAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC1C,iBAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,0BAA0B;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,eAA2B;IAClE,IAAI,eAAe,KAAK,KAAK,IAAI,eAAe,KAAK,KAAK;QAAE,OAAO,eAAe,CAAC;IACnF,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,IAAI,KAAK,CACb,0DAA0D,IAAI,KAAK;QACjE,gFAAgF,CACnF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAkB;IAChD,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAqB,EACrB,OAAgB,EAChB,GAAW,EACX,OAAgB;IAEhB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAuB,EAC/C,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,gBAAgB,EACvB,OAAO,EACP,GAAG,EACH,OAAO,CACR,CAAC;IAEF,IAAI,gBAAgB,GAAG,OAAO,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC/B,iBAAE,CAAC,YAAY,CAAC,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC5C,CAAC;QACzB,gBAAgB,GAAG,cAAc,CAAC,OAAO,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,WAAW;IACb,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,gBAAgB;QAChC,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAqB,EACrB,GAAW,EACX,QAAgB,EAChB,cAA0B,EAC1B,OAAgB;IAEhB,cAAc,EAAE,CAAC;IAEjB,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,IAAI,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,iBAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CACT,6BAA6B,MAAM,CAAC,UAAU,SAAS,IAAA,yBAAiB,EAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;IACD,IAAA,oBAAY,EAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,UAAW,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACjF,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,IAAA,oBAAY,EAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC;SAC5F,MAAM,CAAC,QAAQ,EAAE;SACjB,IAAI,EAAE,CAAC;IACV,MAAM,MAAM,GAAG,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,iBAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,iBAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,QAAQ,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM;QAC7D,WAAW,EAAE,QAAQ;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAqB;IAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,eAAe,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC;IAC7F,MAAM,MAAM,GAAG,qBAAM;SAClB,UAAU,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;SAChE,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAW,EAAE,KAAa;IACzD,MAAM,aAAa,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,iBAAE,CAAC,aAAa,CAAC,aAAa,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,iBAAE;SACb,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;SACnC,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,iBAAE,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;IACnD,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SymlinkConfig } from '../types';
|
|
1
|
+
import { ManagedFileMetadata, ResolvedFile, SymlinkConfig } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Create symlinks for all files/dirs in outputDir matching source globs.
|
|
4
4
|
* Each matching source is symlinked into the target directory.
|
|
@@ -6,10 +6,18 @@ import { SymlinkConfig } from '../types';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function createSymlinks(outputDir: string, configs: SymlinkConfig[]): Promise<void>;
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Collect marker entries for managed symlinks created in an output directory.
|
|
10
|
+
*
|
|
11
|
+
* Symlink ownership is attributed to the package/config combination that declared
|
|
12
|
+
* the symlink operation. Duplicate output paths keep the first discovered owner.
|
|
11
13
|
*/
|
|
12
|
-
export declare function
|
|
14
|
+
export declare function collectManagedSymlinkEntries(outputDir: string, files: ResolvedFile[]): ManagedFileMetadata[];
|
|
15
|
+
/** Remove only marker-managed symlinks that are no longer desired for this run. */
|
|
16
|
+
export declare function removeStaleSymlinks(outputDir: string, managedEntries: ManagedFileMetadata[], desiredPaths: Set<string>): Promise<string[]>;
|
|
17
|
+
export declare function isManagedSymlinkEntry(entry: ManagedFileMetadata): boolean;
|
|
18
|
+
export declare function isManagedFileEntry(entry: ManagedFileMetadata): boolean;
|
|
19
|
+
export declare function findManagedSymlinkEntries(entries: ManagedFileMetadata[], relevantPackages?: Set<string>): ManagedFileMetadata[];
|
|
20
|
+
export declare function uniqueSymlinkConfigs(files: ResolvedFile[]): SymlinkConfig[];
|
|
13
21
|
/**
|
|
14
22
|
* Remove ALL symlinks pointing into outputDir (used during purge).
|
|
15
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symlinks.d.ts","sourceRoot":"","sources":["../../src/package/symlinks.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"symlinks.d.ts","sourceRoot":"","sources":["../../src/package/symlinks.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG5E;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB/F;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,EAAE,GACpB,mBAAmB,EAAE,CAuCvB;AAED,mFAAmF;AACnF,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,mBAAmB,EAAE,EACrC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAEtE;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,mBAAmB,EAAE,CAMvB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAc3E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB1E"}
|
package/dist/package/symlinks.js
CHANGED
|
@@ -4,7 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createSymlinks = createSymlinks;
|
|
7
|
+
exports.collectManagedSymlinkEntries = collectManagedSymlinkEntries;
|
|
7
8
|
exports.removeStaleSymlinks = removeStaleSymlinks;
|
|
9
|
+
exports.isManagedSymlinkEntry = isManagedSymlinkEntry;
|
|
10
|
+
exports.isManagedFileEntry = isManagedFileEntry;
|
|
11
|
+
exports.findManagedSymlinkEntries = findManagedSymlinkEntries;
|
|
12
|
+
exports.uniqueSymlinkConfigs = uniqueSymlinkConfigs;
|
|
8
13
|
exports.removeAllSymlinks = removeAllSymlinks;
|
|
9
14
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
15
|
const node_path_1 = __importDefault(require("node:path"));
|
|
@@ -35,29 +40,94 @@ async function createSymlinks(outputDir, configs) {
|
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
43
|
+
* Collect marker entries for managed symlinks created in an output directory.
|
|
44
|
+
*
|
|
45
|
+
* Symlink ownership is attributed to the package/config combination that declared
|
|
46
|
+
* the symlink operation. Duplicate output paths keep the first discovered owner.
|
|
40
47
|
*/
|
|
41
|
-
|
|
42
|
-
|
|
48
|
+
function collectManagedSymlinkEntries(outputDir, files) {
|
|
49
|
+
const uniqueConfigs = new Map();
|
|
50
|
+
for (const file of files) {
|
|
51
|
+
if (!file.managed)
|
|
52
|
+
continue;
|
|
53
|
+
for (const config of file.symlinks) {
|
|
54
|
+
const key = `${file.packageName}|${file.packageVersion}|${JSON.stringify(config)}`;
|
|
55
|
+
if (!uniqueConfigs.has(key)) {
|
|
56
|
+
uniqueConfigs.set(key, {
|
|
57
|
+
packageName: file.packageName,
|
|
58
|
+
packageVersion: file.packageVersion,
|
|
59
|
+
config,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const byPath = new Map();
|
|
65
|
+
for (const { packageName, packageVersion, config } of uniqueConfigs.values()) {
|
|
43
66
|
const targetDir = node_path_1.default.resolve(outputDir, config.target);
|
|
44
|
-
|
|
67
|
+
const matches = findMatchingPaths(outputDir, config.source);
|
|
68
|
+
for (const relPath of matches) {
|
|
69
|
+
const linkPath = node_path_1.default.join(targetDir, node_path_1.default.basename(relPath));
|
|
70
|
+
const linkRelPath = node_path_1.default.relative(outputDir, linkPath);
|
|
71
|
+
if (!byPath.has(linkRelPath)) {
|
|
72
|
+
byPath.set(linkRelPath, {
|
|
73
|
+
path: linkRelPath,
|
|
74
|
+
packageName,
|
|
75
|
+
packageVersion,
|
|
76
|
+
kind: 'symlink',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return [...byPath.values()];
|
|
82
|
+
}
|
|
83
|
+
/** Remove only marker-managed symlinks that are no longer desired for this run. */
|
|
84
|
+
async function removeStaleSymlinks(outputDir, managedEntries, desiredPaths) {
|
|
85
|
+
const removed = [];
|
|
86
|
+
const seen = new Set();
|
|
87
|
+
for (const entry of managedEntries) {
|
|
88
|
+
if ((entry.kind ?? 'file') !== 'symlink' || seen.has(entry.path))
|
|
45
89
|
continue;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
90
|
+
seen.add(entry.path);
|
|
91
|
+
if (desiredPaths.has(entry.path))
|
|
92
|
+
continue;
|
|
93
|
+
const linkPath = node_path_1.default.join(outputDir, entry.path);
|
|
94
|
+
if (!isSymlink(linkPath))
|
|
95
|
+
continue;
|
|
96
|
+
try {
|
|
97
|
+
node_fs_1.default.unlinkSync(linkPath);
|
|
98
|
+
removed.push(entry.path);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// eslint-disable-next-line no-console
|
|
102
|
+
console.log(`Failed to remove stale symlink at ${linkPath}`);
|
|
103
|
+
// ignore
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return removed;
|
|
107
|
+
}
|
|
108
|
+
function isManagedSymlinkEntry(entry) {
|
|
109
|
+
return (entry.kind ?? 'file') === 'symlink';
|
|
110
|
+
}
|
|
111
|
+
function isManagedFileEntry(entry) {
|
|
112
|
+
return (entry.kind ?? 'file') !== 'symlink';
|
|
113
|
+
}
|
|
114
|
+
function findManagedSymlinkEntries(entries, relevantPackages) {
|
|
115
|
+
return entries.filter((entry) => isManagedSymlinkEntry(entry) &&
|
|
116
|
+
(!relevantPackages || relevantPackages.has(entry.packageName)));
|
|
117
|
+
}
|
|
118
|
+
function uniqueSymlinkConfigs(files) {
|
|
119
|
+
const seen = new Set();
|
|
120
|
+
const result = [];
|
|
121
|
+
for (const f of files) {
|
|
122
|
+
for (const s of f.symlinks) {
|
|
123
|
+
const key = JSON.stringify(s);
|
|
124
|
+
if (!seen.has(key)) {
|
|
125
|
+
seen.add(key);
|
|
126
|
+
result.push(s);
|
|
58
127
|
}
|
|
59
128
|
}
|
|
60
129
|
}
|
|
130
|
+
return result;
|
|
61
131
|
}
|
|
62
132
|
/**
|
|
63
133
|
* Remove ALL symlinks pointing into outputDir (used during purge).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symlinks.js","sourceRoot":"","sources":["../../src/package/symlinks.ts"],"names":[],"mappings":";;;;;AAaA,wCAqBC;
|
|
1
|
+
{"version":3,"file":"symlinks.js","sourceRoot":"","sources":["../../src/package/symlinks.ts"],"names":[],"mappings":"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"}
|