@visulima/path
Version:
Drop-in replacement of the Node.js path module.
363 lines (356 loc) • 6.51 kB
JavaScript
import { fileURLToPath } from 'node:url';
import { k as normalizeWindowsPath, j as join, e as extname } from './packem_shared/path-lU4hG9gZ.mjs';
function getDefaultExportFromCjs (x) {
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}
var binaryExtensions$1;
var hasRequiredBinaryExtensions;
function requireBinaryExtensions () {
if (hasRequiredBinaryExtensions) return binaryExtensions$1;
hasRequiredBinaryExtensions = 1;
binaryExtensions$1 = [
"3dm",
"3ds",
"3g2",
"3gp",
"7z",
"a",
"aac",
"adp",
"afdesign",
"afphoto",
"afpub",
"ai",
"aif",
"aiff",
"alz",
"ape",
"apk",
"appimage",
"ar",
"arj",
"asf",
"au",
"avi",
"bak",
"baml",
"bh",
"bin",
"bk",
"bmp",
"btif",
"bz2",
"bzip2",
"cab",
"caf",
"cgm",
"class",
"cmx",
"cpio",
"cr2",
"cr3",
"cur",
"dat",
"dcm",
"deb",
"dex",
"djvu",
"dll",
"dmg",
"dng",
"doc",
"docm",
"docx",
"dot",
"dotm",
"dra",
"DS_Store",
"dsk",
"dts",
"dtshd",
"dvb",
"dwg",
"dxf",
"ecelp4800",
"ecelp7470",
"ecelp9600",
"egg",
"eol",
"eot",
"epub",
"exe",
"f4v",
"fbs",
"fh",
"fla",
"flac",
"flatpak",
"fli",
"flv",
"fpx",
"fst",
"fvt",
"g3",
"gh",
"gif",
"graffle",
"gz",
"gzip",
"h261",
"h263",
"h264",
"icns",
"ico",
"ief",
"img",
"ipa",
"iso",
"jar",
"jpeg",
"jpg",
"jpgv",
"jpm",
"jxr",
"key",
"ktx",
"lha",
"lib",
"lvp",
"lz",
"lzh",
"lzma",
"lzo",
"m3u",
"m4a",
"m4v",
"mar",
"mdi",
"mht",
"mid",
"midi",
"mj2",
"mka",
"mkv",
"mmr",
"mng",
"mobi",
"mov",
"movie",
"mp3",
"mp4",
"mp4a",
"mpeg",
"mpg",
"mpga",
"mxu",
"nef",
"npx",
"numbers",
"nupkg",
"o",
"odp",
"ods",
"odt",
"oga",
"ogg",
"ogv",
"otf",
"ott",
"pages",
"pbm",
"pcx",
"pdb",
"pdf",
"pea",
"pgm",
"pic",
"png",
"pnm",
"pot",
"potm",
"potx",
"ppa",
"ppam",
"ppm",
"pps",
"ppsm",
"ppsx",
"ppt",
"pptm",
"pptx",
"psd",
"pya",
"pyc",
"pyo",
"pyv",
"qt",
"rar",
"ras",
"raw",
"resources",
"rgb",
"rip",
"rlc",
"rmf",
"rmvb",
"rpm",
"rtf",
"rz",
"s3m",
"s7z",
"scpt",
"sgi",
"shar",
"snap",
"sil",
"sketch",
"slk",
"smv",
"snk",
"so",
"stl",
"suo",
"sub",
"swf",
"tar",
"tbz",
"tbz2",
"tga",
"tgz",
"thmx",
"tif",
"tiff",
"tlz",
"ttc",
"ttf",
"txz",
"udf",
"uvh",
"uvi",
"uvm",
"uvp",
"uvs",
"uvu",
"viv",
"vob",
"war",
"wav",
"wax",
"wbmp",
"wdp",
"weba",
"webm",
"webp",
"whl",
"wim",
"wm",
"wma",
"wmv",
"wmx",
"woff",
"woff2",
"wrm",
"wvx",
"xbm",
"xif",
"xla",
"xlam",
"xls",
"xlsb",
"xlsm",
"xlsx",
"xlt",
"xltm",
"xltx",
"xm",
"xmind",
"xpi",
"xpm",
"xwd",
"xz",
"z",
"zip",
"zipx"
];
return binaryExtensions$1;
}
var binaryExtensionsExports = /*@__PURE__*/ requireBinaryExtensions();
const binaryExtensions = /*@__PURE__*/getDefaultExportFromCjs(binaryExtensionsExports);
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
const extensions = new Set(binaryExtensions);
const pathSeparators = /* @__PURE__ */ new Set(["/", "\\", void 0]);
const normalizedAliasSymbol = Symbol.for("pathe:normalizedAlias");
const FILENAME_RE = /(^|[/\\])([^/\\]+?)(?=(?:\.[^.]+)?$)/;
const compareAliases = /* @__PURE__ */ __name((a, b) => b.split("/").length - a.split("/").length, "compareAliases");
const hasTrailingSlash = /* @__PURE__ */ __name((path = "/") => {
const lastChar = path.at(-1);
return lastChar === "/" || lastChar === "\\";
}, "hasTrailingSlash");
const normalizeAliases = /* @__PURE__ */ __name((_aliases) => {
if (_aliases[normalizedAliasSymbol]) {
return _aliases;
}
const aliases = Object.fromEntries(Object.entries(_aliases).sort(([a], [b]) => compareAliases(a, b)));
for (const key in aliases) {
for (const alias in aliases) {
if (alias === key || key.startsWith(alias)) {
continue;
}
if (aliases[key].startsWith(alias) && pathSeparators.has(aliases[key][alias.length])) {
aliases[key] = aliases[alias] + aliases[key].slice(alias.length);
}
}
}
Object.defineProperty(aliases, normalizedAliasSymbol, {
enumerable: false,
value: true
});
return aliases;
}, "normalizeAliases");
const resolveAlias = /* @__PURE__ */ __name((path, aliases) => {
path = normalizeWindowsPath(path);
aliases = normalizeAliases(aliases);
for (const [alias, to] of Object.entries(aliases)) {
if (!path.startsWith(alias)) {
continue;
}
const stripedAlias = hasTrailingSlash(alias) ? alias.slice(0, -1) : alias;
if (hasTrailingSlash(path[stripedAlias.length])) {
return join(to, path.slice(alias.length));
}
}
return path;
}, "resolveAlias");
const filename = /* @__PURE__ */ __name((path) => FILENAME_RE.exec(path)?.[2], "filename");
const reverseResolveAlias = /* @__PURE__ */ __name((path, aliases) => {
path = normalizeWindowsPath(path);
aliases = normalizeAliases(aliases);
for (const [to, alias] of Object.entries(aliases).reverse()) {
if (!path.startsWith(alias)) {
continue;
}
const stripedAlias = hasTrailingSlash(alias) ? alias.slice(0, -1) : alias;
if (hasTrailingSlash(path[stripedAlias.length])) {
return join(to, path.slice(alias.length));
}
}
return path;
}, "reverseResolveAlias");
const isRelative = /* @__PURE__ */ __name((path) => /^(?:\.?\.[/\\]|\.\.\B)/.test(path) || path === "..", "isRelative");
const isBinaryPath = /* @__PURE__ */ __name((path) => extensions.has(extname(path).slice(1).toLowerCase()), "isBinaryPath");
const toPath = /* @__PURE__ */ __name((urlOrPath) => normalizeWindowsPath(urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath), "toPath");
const isWindows = /* @__PURE__ */ __name(() => {
if (!globalThis?.process) {
return false;
}
if (globalThis?.process?.platform === "win32" || globalThis?.process?.platform === "cygwin") {
return true;
}
const osType = globalThis?.process?.env.OSTYPE;
if (!(typeof osType === "string")) {
return false;
}
return /^(?:msys|cygwin)$/.test(osType);
}, "isWindows");
export { filename, isBinaryPath, isRelative, isWindows, normalizeAliases, resolveAlias, reverseResolveAlias, toPath };