import { posix, SEPARATOR } from "../../deps/path.ts";
export function normalizePath(path: string, rootToRemove?: string) { if (rootToRemove) { path = path.replace(rootToRemove, ""); }
if (SEPARATOR !== "/") { path = path.replaceAll(SEPARATOR, "/");
if (path.includes(":/")) { if (rootToRemove && path.startsWith(rootToRemove)) { return posix.join("/", path.replace(rootToRemove, "")); }
return path; } }
const absolute = posix.join("/", path); return rootToRemove && absolute.startsWith(rootToRemove) ? posix.join("/", absolute.replace(rootToRemove, "")) : absolute;}
export function isUrl(path: string): boolean { return !!path.match(/^(https?|file):\/\//);}
export function isAbsolutePath(path: string): boolean { return SEPARATOR !== "/" ? /^\w:[\/\\]/.test(path) : path.startsWith("/");}
export function replaceExtension( path: string, ext: string,): string { return path.replace(/\.\w+$/, ext);}
export function getPathAndExtension(path: string): [string, string] { const extension = getExtension(path); const pathWithoutExtension = path.slice(0, -extension.length); return [pathWithoutExtension, extension];}
export function getExtension(path: string): string { const match = path.match(/\.\w+$/); return match ? match[0] : "";}
export type Extensions = string[] | "*";
export function matchExtension(exts: Extensions, path: string): boolean { if (exts === "*") { return true; }
return exts.some((ext) => path.endsWith(ext));}
export function resolveInclude( path: string, includesDir: string, fromDir?: string, rootToRemove?: string,): string { if (isUrl(path)) { return path; }
if (path.startsWith(".")) { if (!fromDir) { throw new Error(`Cannot load "${path}" without a base directory`); }
return normalizePath(posix.join(fromDir, path), rootToRemove); }
const normalized = normalizePath(path, rootToRemove);
return normalized.startsWith(normalizePath(posix.join(includesDir, "/"))) ? normalized : normalizePath(posix.join(includesDir, normalized));}