refactor(install): share safe install path helpers

This commit is contained in:
Peter Steinberger
2026-02-15 04:27:30 +00:00
parent 568e7c4f67
commit e93764350d
3 changed files with 68 additions and 76 deletions

View File

@@ -0,0 +1,37 @@
import path from "node:path";
export function unscopedPackageName(name: string): string {
const trimmed = name.trim();
if (!trimmed) {
return trimmed;
}
return trimmed.includes("/") ? (trimmed.split("/").pop() ?? trimmed) : trimmed;
}
export function safeDirName(input: string): string {
const trimmed = input.trim();
if (!trimmed) {
return trimmed;
}
return trimmed.replaceAll("/", "__").replaceAll("\\", "__");
}
export function resolveSafeInstallDir(params: {
baseDir: string;
id: string;
invalidNameMessage: string;
}): { ok: true; path: string } | { ok: false; error: string } {
const targetDir = path.join(params.baseDir, safeDirName(params.id));
const resolvedBase = path.resolve(params.baseDir);
const resolvedTarget = path.resolve(targetDir);
const relative = path.relative(resolvedBase, resolvedTarget);
if (
!relative ||
relative === ".." ||
relative.startsWith(`..${path.sep}`) ||
path.isAbsolute(relative)
) {
return { ok: false, error: params.invalidNameMessage };
}
return { ok: true, path: targetDir };
}