Project Files
src / pathUtils.ts
import path from "path";
export function isAbsolutePathLike(input: string): boolean {
if (!input) return false;
if (path.isAbsolute(input)) return true;
// Windows drive-letter or UNC style, even when running on a non-Windows host.
return /^[a-zA-Z]:[\\/]/.test(input) || /^\\\\/.test(input);
}
export function normalizeTargetDir(input: string | undefined, fallback: string): string {
const value = (input ?? "").trim();
return value.length ? value : fallback;
}
export function resolveForgeTarget(workspaceRoot: string, targetDir: string): string {
const trimmed = targetDir.trim();
if (!trimmed) {
throw new Error("target_dir is required");
}
if (isAbsolutePathLike(trimmed)) {
return path.resolve(trimmed);
}
const slug = trimmed
.toLowerCase()
.replace(/[^a-z0-9]+/g, "-")
.replace(/^-+|-+$/g, "")
.slice(0, 64) || "plugin";
return path.resolve(workspaceRoot, ".forge-generated", slug);
}