@firesystem/core
Version:
Virtual File System core interfaces and types
69 lines (58 loc) • 1.44 kB
text/typescript
/**
* Path utilities for virtual file systems
*/
/**
* Normalize a path
*/
export function normalizePath(path: string): string {
// Handle empty path as root
if (!path) return "/";
// Ensure path starts with /
if (!path.startsWith("/")) {
path = "/" + path;
}
// Remove duplicate slashes
path = path.replace(/\/+/g, "/");
// Remove trailing slash except for root
if (path.length > 1 && path.endsWith("/")) {
path = path.slice(0, -1);
}
return path;
}
/**
* Get directory name from path
*/
export function dirname(path: string): string {
const normalized = normalizePath(path);
const lastSlash = normalized.lastIndexOf("/");
return lastSlash === 0 ? "/" : normalized.slice(0, lastSlash);
}
/**
* Get base name from path
*/
export function basename(path: string): string {
const normalized = normalizePath(path);
const lastSlash = normalized.lastIndexOf("/");
return normalized.slice(lastSlash + 1);
}
/**
* Join path segments
*/
export function join(...segments: string[]): string {
const joined = segments.join("/");
return normalizePath(joined);
}
/**
* Check if path is absolute
*/
export function isAbsolute(path: string): boolean {
return path.startsWith("/");
}
/**
* Get file extension
*/
export function extname(path: string): string {
const base = basename(path);
const lastDot = base.lastIndexOf(".");
return lastDot === -1 ? "" : base.slice(lastDot);
}