UNPKG

@visulima/path

Version:

Drop-in replacement of the Node.js path module.

437 lines (432 loc) 18.6 kB
var __defProp$2 = Object.defineProperty; var __name$2 = (target, value) => __defProp$2(target, "name", { value, configurable: true }); let _lazyMatch = /* @__PURE__ */ __name$2(() => { var __lib__ = (() => { var y = Object.defineProperty, G = Object.getOwnPropertyDescriptor, Q = Object.getOwnPropertyNames, H = Object.prototype.hasOwnProperty, J = /* @__PURE__ */ __name$2((r, e) => { for (var t in e) y(r, t, { get: e[t], enumerable: true }); }, "J"), T = /* @__PURE__ */ __name$2((r, e, t, a) => { if (e && typeof e == "object" || typeof e == "function") for (let n of Q(e)) !H.call(r, n) && n !== t && y(r, n, { get: /* @__PURE__ */ __name$2(() => e[n], "get"), enumerable: !(a = G(e, n)) || a.enumerable }); return r; }, "T"), W = /* @__PURE__ */ __name$2((r) => T(y({}, "__esModule", { value: true }), r), "W"), b = {}; J(b, { zeptomatch: /* @__PURE__ */ __name$2(() => ne, "zeptomatch") }); var k = /* @__PURE__ */ __name$2((r) => Array.isArray(r), "k"), x = /* @__PURE__ */ __name$2((r) => typeof r == "function", "x"), K = /* @__PURE__ */ __name$2((r) => r.length === 0, "K"), X = (() => { const { toString: r } = Function.prototype, e = /(?:^\(\s*(?:[^,.()]|\.(?!\.\.))*\s*\)\s*=>|^\s*[a-zA-Z$_][a-zA-Z0-9$_]*\s*=>)/; return (t) => (t.length === 0 || t.length === 1) && e.test(r.call(t)); })(), Y = /* @__PURE__ */ __name$2((r) => typeof r == "number", "Y"), rr = /* @__PURE__ */ __name$2((r) => typeof r == "object" && r !== null, "rr"), er = /* @__PURE__ */ __name$2((r) => r instanceof RegExp, "er"), tr = /* @__PURE__ */ (() => { const r = /\\\(|\((?!\?(?::|=|!|<=|<!))/; return (e) => r.test(e.source); })(), nr = /* @__PURE__ */ (() => { const r = /^[a-zA-Z0-9_-]+$/; return (e) => r.test(e.source) && !e.flags.includes("i"); })(), M = /* @__PURE__ */ __name$2((r) => typeof r == "string", "M"), f = /* @__PURE__ */ __name$2((r) => r === void 0, "f"), ar = /* @__PURE__ */ __name$2((r) => { const e = /* @__PURE__ */ new Map(); return (t) => { const a = e.get(t); if (a !== void 0) return a; const n = r(t); return e.set(t, n), n; }; }, "ar"), or = /* @__PURE__ */ __name$2((r, e, t = {}) => { const a = { cache: {}, input: r, index: 0, indexBacktrackMax: 0, options: t, output: [] }, n = d(e)(a), s = Math.max(a.index, a.indexBacktrackMax); if (n && a.index === r.length) return a.output; throw new Error(`Failed to parse at index ${s}`); }, "or"), o = /* @__PURE__ */ __name$2((r, e) => k(r) ? ir(r, e) : M(r) ? R(r, e) : ur(r, e), "o"), ir = /* @__PURE__ */ __name$2((r, e) => { const t = {}; for (const a of r) { if (a.length !== 1) throw new Error(`Invalid character: "${a}"`); const n = a.charCodeAt(0); t[n] = true; } return (a) => { const n = a.input; let s = a.index, i = s; for (; i < n.length && n.charCodeAt(i) in t; ) i += 1; if (i > s) { if (!f(e) && !a.options.silent) { const u = n.slice(s, i), c = x(e) ? e(u, n, `${s}`) : e; f(c) || a.output.push(c); } a.index = i; } return true; }; }, "ir"), ur = /* @__PURE__ */ __name$2((r, e) => { if (nr(r)) return R(r.source, e); { const t = r.source, a = r.flags.replace(/y|$/, "y"), n = new RegExp(t, a); return tr(r) && x(e) && !X(e) ? sr(n, e) : cr(n, e); } }, "ur"), sr = /* @__PURE__ */ __name$2((r, e) => (t) => { const a = t.index, n = t.input; r.lastIndex = a; const s = r.exec(n); if (s) { const i = r.lastIndex; if (!t.options.silent) { const u = e(...s, n, `${a}`); f(u) || t.output.push(u); } return t.index = i, true; } else return false; }, "sr"), cr = /* @__PURE__ */ __name$2((r, e) => (t) => { const a = t.index, n = t.input; if (r.lastIndex = a, r.test(n)) { const i = r.lastIndex; if (!f(e) && !t.options.silent) { const u = x(e) ? e(n.slice(a, i), n, `${a}`) : e; f(u) || t.output.push(u); } return t.index = i, true; } else return false; }, "cr"), R = /* @__PURE__ */ __name$2((r, e) => (t) => { const a = t.index, n = t.input; if (n.startsWith(r, a)) { if (!f(e) && !t.options.silent) { const i = x(e) ? e(r, n, `${a}`) : e; f(i) || t.output.push(i); } return t.index += r.length, true; } else return false; }, "R"), O = /* @__PURE__ */ __name$2((r, e, t, a) => { const n = d(r), s = e > 1; return w(C(P((i) => { let u = 0; for (; u < t; ) { const c = i.index; if (!n(i) || (u += 1, i.index === c)) break; } return u >= e; }, s), a)); }, "O"), lr = /* @__PURE__ */ __name$2((r, e) => O(r, 0, 1, e), "lr"), m = /* @__PURE__ */ __name$2((r, e) => O(r, 0, 1 / 0, e), "m"), _ = /* @__PURE__ */ __name$2((r, e) => { const t = r.map(d); return w(C(P((a) => { for (let n = 0, s = t.length; n < s; n++) if (!t[n](a)) return false; return true; }), e)); }, "_"), p = /* @__PURE__ */ __name$2((r, e) => { const t = r.map(d); return w(C((a) => { for (let n = 0, s = t.length; n < s; n++) if (t[n](a)) return true; return false; }, e)); }, "p"), P = /* @__PURE__ */ __name$2((r, e = true, t = false) => { const a = d(r); return e ? (n) => { const s = n.index, i = n.output.length, u = a(n); return !u && !t && (n.indexBacktrackMax = Math.max(n.indexBacktrackMax, n.index)), (!u || t) && (n.index = s, n.output.length !== i && (n.output.length = i)), u; } : a; }, "P"), C = /* @__PURE__ */ __name$2((r, e) => { const t = d(r); return e ? (a) => { if (a.options.silent) return t(a); const n = a.output.length; if (t(a)) { const i = a.output.splice(n, 1 / 0), u = e(i); return f(u) || a.output.push(u), true; } else return false; } : t; }, "C"), w = /* @__PURE__ */ (() => { let r = 0; return (e) => { const t = d(e), a = r += 1; return (n) => { var s; if (n.options.memoization === false) return t(n); const i = n.index, u = (s = n.cache)[a] || (s[a] = { indexMax: -1, queue: [] }), c = u.queue; if (i <= u.indexMax) { const g = u.store || (u.store = /* @__PURE__ */ new Map()); if (c.length) { for (let h = 0, ie = c.length; h < ie; h += 2) { const ue = c[h * 2], se = c[h * 2 + 1]; g.set(ue, se); } c.length = 0; } const l = g.get(i); if (l === false) return false; if (Y(l)) return n.index = l, true; if (l) return n.index = l.index, l.output?.length && n.output.push(...l.output), true; } const V = n.output.length, oe = t(n); if (u.indexMax = Math.max(u.indexMax, i), oe) { const g = n.index, l = n.output.length; if (l > V) { const h = n.output.slice(V, l); c.push(i, { index: g, output: h }); } else c.push(i, g); return true; } else return c.push(i, false), false; }; }; })(), A = /* @__PURE__ */ __name$2((r) => { let e; return (t) => (e || (e = d(r())), e(t)); }, "A"), d = ar((r) => { if (x(r)) return K(r) ? A(r) : r; if (M(r) || er(r)) return o(r); if (k(r)) return _(r); if (rr(r)) return p(Object.values(r)); throw new Error("Invalid rule"); }), v = /* @__PURE__ */ __name$2((r) => r, "v"), z = /* @__PURE__ */ __name$2((r) => (e) => or(e, r, { memoization: false }).join(""), "z"), pr = /* @__PURE__ */ __name$2((r) => { const e = {}; return (t) => e[t] ?? (e[t] = r(t)); }, "pr"), B = "abcdefghijklmnopqrstuvwxyz", vr = /* @__PURE__ */ __name$2((r) => { let e = ""; for (; r > 0; ) { const t = (r - 1) % 26; e = B[t] + e, r = Math.floor((r - 1) / 26); } return e; }, "vr"), N = /* @__PURE__ */ __name$2((r) => { let e = 0; for (let t = 0, a = r.length; t < a; t++) e = e * 26 + B.indexOf(r[t]) + 1; return e; }, "N"), $ = /* @__PURE__ */ __name$2((r, e) => { if (e < r) return $(e, r); const t = []; for (; r <= e; ) t.push(r++); return t; }, "$"), fr = /* @__PURE__ */ __name$2((r, e, t) => $(r, e).map((a) => String(a).padStart(t, "0")), "fr"), j = /* @__PURE__ */ __name$2((r, e) => $(N(r), N(e)).map(vr), "j"), E = o(/\\./, v), dr = o(/[$.*+?^(){}[\]\|]/, (r) => `\\${r}`), hr = o(/./, v), xr = o(/^(?:!!)*!(.*)$/, (r, e) => `(?!^${q(e)}$).*?`), gr = o(/^(!!)+/, ""), mr = p([xr, gr]), _r = o(/\/(\*\*\/)+/, "(?:[\\\\/].+[\\\\/]|[\\\\/])"), Sr = o(/^(\*\*\/)+/, "(?:^|.*[\\\\/])"), yr = o(/\/(\*\*)$/, "(?:[\\\\/].*|$)"), Cr = o(/\*\*/, ".*"), I = p([_r, Sr, yr, Cr]), wr = o(/\*\/(?!\*\*\/|\*$)/, "[^\\\\/]*[\\\\/]"), $r = o(/\*/, "[^\\\\/]*"), L = p([wr, $r]), F = o("?", "[^\\\\/]"), Er = o("[", v), br = o("]", v), kr = o(/[!^]/, "^\\\\/"), Mr = o(/[a-z]-[a-z]|[0-9]-[0-9]/i, v), Rr = o(/[$.*+?^(){}[\|]/, (r) => `\\${r}`), Or = o(/[^\]]/, v), Pr = p([E, Rr, Mr, Or]), U = _([Er, lr(kr), m(Pr), br]), Ar = o("{", "(?:"), zr = o("}", ")"), Br = o(/(\d+)\.\.(\d+)/, (r, e, t) => fr(+e, +t, Math.min(e.length, t.length)).join("|")), Nr = o(/([a-z]+)\.\.([a-z]+)/, (r, e, t) => j(e, t).join("|")), jr = o(/([A-Z]+)\.\.([A-Z]+)/, (r, e, t) => j(e.toLowerCase(), t.toLowerCase()).join("|").toUpperCase()), Ir = p([Br, Nr, jr]), Z = _([Ar, Ir, zr]), Lr = o("{", "(?:"), Fr = o("}", ")"), Ur = o(",", "|"), Zr = o(/[$.*+?^(){[\]\|]/, (r) => `\\${r}`), Dr = o(/[^}]/, v), qr = A(() => D), Vr = p([I, L, F, U, Z, qr, E, Zr, Ur, Dr]), D = _([Lr, m(Vr), Fr]), Gr = m(p([mr, I, L, F, U, Z, D, E, dr, hr])), Qr = Gr, Hr = z(Qr), q = Hr, Jr = o(/\\./, v), Tr = o(/./, v), Wr = o(/\*\*\*+/, "*"), Kr = o(/([^/{[(!])\*\*/, (r, e) => `${e}*`), Xr = o(/(^|.)\*\*(?=[^*/)\]}])/, (r, e) => `${e}*`), Yr = m(p([Jr, Wr, Kr, Xr, Tr])), re = Yr, ee = z(re), te = ee, S = /* @__PURE__ */ __name$2((r, e) => Array.isArray(r) ? r.map(S.compile).some((n) => n.test(e)) : S.compile(r).test(e), "S"); S.compile = pr((r) => new RegExp(`^${q(te(r))}[\\\\/]?$`, "s")); var ne = S; return W(b); })(); return __lib__.default || __lib__; }, "_lazyMatch"); let _match; const zeptomatch = /* @__PURE__ */ __name$2((path, pattern) => { if (!_match) { _match = _lazyMatch(); _lazyMatch = null; } return _match(path, pattern); }, "default"); var __defProp$1 = Object.defineProperty; var __name$1 = (target, value) => __defProp$1(target, "name", { value, configurable: true }); const DRIVE_LETTER_START_RE = /^[A-Z]:\//i; const normalizeWindowsPath = /* @__PURE__ */ __name$1((input = "") => { if (!input) { return input; } return input.replaceAll("\\", "/").replace(DRIVE_LETTER_START_RE, (r) => r.toUpperCase()); }, "normalizeWindowsPath"); var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); const UNC_REGEX = /^[/\\]{2}/; const IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Z]:[/\\]/i; const DRIVE_LETTER_RE = /^[A-Z]:$/i; const ROOT_FOLDER_RE = /^\/([A-Z]:)?$/i; const EXTNAME_RE = /.(\.[^./]+)$/; const PATH_ROOT_RE = /^[/\\]|^[a-z]:[/\\]/i; const cwd = /* @__PURE__ */ __name(() => { if (typeof process.cwd === "function") { return process.cwd().replaceAll("\\", "/"); } return "/"; }, "cwd"); const sep = "/"; const delimiter = /^win/i.test(globalThis.process?.platform) ? ";" : ":"; const normalizeString = /* @__PURE__ */ __name((path, allowAboveRoot) => { let result = ""; let lastSegmentLength = 0; let lastSlash = -1; let dots = 0; let char = null; for (let index = 0; index <= path.length; ++index) { if (index < path.length) { char = path[index]; } else if (char === "/") { break; } else { char = "/"; } if (char === "/") { if (lastSlash === index - 1 || dots === 1) ; else if (dots === 2) { if (result.length < 2 || lastSegmentLength !== 2 || !result.endsWith(".") || result.at(-2) !== ".") { if (result.length > 2) { const lastSlashIndex = result.lastIndexOf("/"); if (lastSlashIndex === -1) { result = ""; lastSegmentLength = 0; } else { result = result.slice(0, lastSlashIndex); lastSegmentLength = result.length - 1 - result.lastIndexOf("/"); } lastSlash = index; dots = 0; continue; } else if (result.length > 0) { result = ""; lastSegmentLength = 0; lastSlash = index; dots = 0; continue; } } if (allowAboveRoot) { result += result.length > 0 ? "/.." : ".."; lastSegmentLength = 2; } } else { if (result.length > 0) { result += `/${path.slice(lastSlash + 1, index)}`; } else { result = path.slice(lastSlash + 1, index); } lastSegmentLength = index - lastSlash - 1; } lastSlash = index; dots = 0; } else if (char === "." && dots !== -1) { ++dots; } else { dots = -1; } } return result; }, "normalizeString"); const isAbsolute = /* @__PURE__ */ __name((path) => IS_ABSOLUTE_RE.test(path), "isAbsolute"); const normalize = /* @__PURE__ */ __name(function(path) { if (path.length === 0) { return "."; } path = normalizeWindowsPath(path); const isUNCPath = UNC_REGEX.exec(path); const isPathAbsolute = isAbsolute(path); const trailingSeparator = path.at(-1) === "/"; path = normalizeString(path, !isPathAbsolute); if (path.length === 0) { if (isPathAbsolute) { return "/"; } return trailingSeparator ? "./" : "."; } if (trailingSeparator) { path += "/"; } if (DRIVE_LETTER_RE.test(path)) { path += "/"; } if (isUNCPath) { if (!isPathAbsolute) { return `//./${path}`; } return `//${path}`; } return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path; }, "normalize"); const join = /* @__PURE__ */ __name((...segments) => { let path = ""; for (const seg of segments) { if (!seg) { continue; } if (path.length > 0) { const pathTrailing = path[path.length - 1] === "/"; const segLeading = seg[0] === "/"; const both = pathTrailing && segLeading; if (both) { path += seg.slice(1); } else { path += pathTrailing || segLeading ? seg : `/${seg}`; } } else { path += seg; } } return normalize(path); }, "join"); const resolve = /* @__PURE__ */ __name(function(...arguments_) { arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument)); let resolvedPath = ""; let resolvedAbsolute = false; for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) { const path = index >= 0 ? arguments_[index] : cwd(); if (!path || path.length === 0) { continue; } resolvedPath = `${path}/${resolvedPath}`; resolvedAbsolute = isAbsolute(path); } resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute); if (resolvedAbsolute && !isAbsolute(resolvedPath)) { return `/${resolvedPath}`; } return resolvedPath.length > 0 ? resolvedPath : "."; }, "resolve"); const toNamespacedPath = /* @__PURE__ */ __name(function(p) { return normalizeWindowsPath(p); }, "toNamespacedPath"); const extname = /* @__PURE__ */ __name(function(p) { const match = EXTNAME_RE.exec(normalizeWindowsPath(p)); return match?.[1] ?? ""; }, "extname"); const relative = /* @__PURE__ */ __name(function(from, to) { const splitFrom = resolve(from).replace(ROOT_FOLDER_RE, "$1").split("/"); const splitTo = resolve(to).replace(ROOT_FOLDER_RE, "$1").split("/"); if (splitTo[0][1] === ":" && splitFrom[0][1] === ":" && splitFrom[0] !== splitTo[0]) { return splitTo.join("/"); } const fromCopy = [...splitFrom]; for (const segment of fromCopy) { if (splitTo[0] !== segment) { break; } splitFrom.shift(); splitTo.shift(); } return [...splitFrom.map(() => ".."), ...splitTo].join("/"); }, "relative"); const dirname = /* @__PURE__ */ __name((path) => { const segments = normalizeWindowsPath(path).replace(/\/$/, "").split("/").slice(0, -1); if (segments.length === 1 && DRIVE_LETTER_RE.test(segments[0])) { segments[0] += "/"; } return segments.join("/") || (isAbsolute(path) ? "/" : "."); }, "dirname"); const format = /* @__PURE__ */ __name(function(pathObject) { const segments = [pathObject.root, pathObject.dir, pathObject.base ?? pathObject.name + pathObject.ext].filter(Boolean); return normalizeWindowsPath(pathObject.root ? resolve(...segments) : segments.join("/")); }, "format"); const basename = /* @__PURE__ */ __name((path, extension) => { const lastSegment = normalizeWindowsPath(path).split("/").pop(); if (extension && lastSegment.endsWith(extension)) { return lastSegment.slice(0, -extension.length); } return lastSegment; }, "basename"); const parse = /* @__PURE__ */ __name(function(p) { const root = PATH_ROOT_RE.exec(p)?.[0]?.replace(/\\/g, "/") ?? ""; const base = basename(p); const extension = extname(base); return { base, dir: dirname(p), ext: extension, name: base.slice(0, base.length - extension.length), root }; }, "parse"); const matchesGlob = /* @__PURE__ */ __name((path, pattern) => ( // https://github.com/nodejs/node/blob/main/lib/internal/fs/glob.js#L660 zeptomatch(pattern, normalize(path)) ), "matchesGlob"); const path = /*#__PURE__*/Object.defineProperty({ __proto__: null, basename, delimiter, dirname, extname, format, isAbsolute, join, matchesGlob, normalize, normalizeString, parse, relative, resolve, sep, toNamespacedPath }, Symbol.toStringTag, { value: 'Module' }); export { dirname as a, basename as b, normalizeString as c, delimiter as d, extname as e, format as f, parse as g, resolve as h, isAbsolute as i, join as j, normalizeWindowsPath as k, matchesGlob as m, normalize as n, path as p, relative as r, sep as s, toNamespacedPath as t };