UNPKG

@flex-development/pathe

Version:

Universal drop-in replacement for node:path

74 lines (73 loc) 2.15 kB
import canParseURL from "#internal/can-parse-url"; import { DRIVE_PATH_REGEX } from "#internal/constants"; import validateString from "#internal/validate-string"; import validateURLString from "#internal/validate-url-string"; import delimiter from "#lib/delimiter"; import isSep from "#lib/is-sep"; import toPosix from "#lib/to-posix"; function basename(input, suffix) { if (suffix !== null && suffix !== void 0) { validateString(suffix, "suffix"); suffix = toPosix(suffix); } validateURLString(input, "input"); input = String(toPosix(input)); let start = 0; let end = -1; let separator = true; if (canParseURL(input)) { start = input.lastIndexOf(new URL(input).pathname); if (start === -1) start = input.length; if (DRIVE_PATH_REGEX.test(input.slice(start + 1))) start++; } if (DRIVE_PATH_REGEX.test(input.slice(start))) { start = input.indexOf(delimiter, start) + 1; } if (typeof suffix === "string" && suffix.length && suffix.length <= input.length) { if (input === suffix) return ""; let extIdx = suffix.length - 1; let firstNonSlashEnd = -1; for (let i = input.length - 1; i >= start; --i) { const char = input[i]; if (isSep(char)) { if (!separator) { start = i + 1; break; } } else { if (firstNonSlashEnd === -1) { separator = false; firstNonSlashEnd = i + 1; } if (extIdx >= 0) { if (char === suffix[extIdx]) { if (--extIdx === -1) end = i; } else { extIdx = -1; end = firstNonSlashEnd; } } } } if (start === end) end = firstNonSlashEnd; else if (end === -1) end = input.length; } else { for (let i = input.length - 1; i >= start; --i) { if (isSep(input[i])) { if (!separator) { start = i + 1; break; } } else if (end === -1) { separator = false; end = i + 1; } } if (end === -1) return ""; } return input.slice(start, end); } var basename_default = basename; export { basename_default as default };