UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

31 lines (30 loc) 1.43 kB
import { RequiredError } from "../error/RequiredError.js"; /** * Split a filename into its base name and extension in a single pass. * - Extension with no leading dot, e.g. `"ts"`. * - Returns `undefined` for either part if the filename has no dot or starts with a dot only. * * @example `splitFileExtension("array.ts")` returns `["array", ".ts"]` * @example `splitFileExtension("no-ext")` returns `["no-ext", undefined]` * @example `splitFileExtension(".gitignore")` returns `[undefined, "gitignore"]` * @example `splitFileExtension(undefined)` returns `[undefined, undefined]` */ export function splitFileExtension(file = "") { if (!file) return [undefined, undefined]; const i = file.lastIndexOf("."); if (i < 0) return [file, undefined]; return [file.slice(0, i) || undefined, file.slice(i + 1) || undefined]; } /** Get the file extension from a file path, e.g. `"md"`, or return `undefined` if the input has no extension. */ export function getFileExtension(file) { return splitFileExtension(file)[1]; } /** Get the file extension from a file path e.g. `"tsx"`, or throw `RequiredError` if the input has no extension. */ export function requireFileExtension(file, caller = requireFileExtension) { const extension = getFileExtension(file); if (!extension) throw new RequiredError("File extension is required", { received: file, caller }); return extension; }