UNPKG

@stryke/fs

Version:

A package containing various file system utilities that expand the functionality of NodeJs's built-in `fs` module.

130 lines (128 loc) 4.52 kB
import { isString } from "@stryke/type-checks/is-string"; import { coerce, inc, parse, satisfies, valid, validRange } from "semver"; import { isObject } from "@stryke/type-checks/is-object"; //#region src/semver-fns.ts const RELEASE_TYPES = [ "major", "premajor", "minor", "preminor", "patch", "prepatch", "prerelease", "release" ]; /** * Parse a semver string into a SemVer object * * @param semver - The semver string to parse * @param loose - Whether to use loose parsing * @returns The parsed SemVer object */ const parseVersion = (semver, loose = true) => parse(semver, loose); /** * Coerce a version string into a valid SemVer string * * @param version - The version string or number or {@link SemVer} to coerce * @param options - Options to use when coercing the version * @returns The coerced SemVer string or null if invalid */ const coerceVersion = (version, options) => { return coerce(version, options); }; /** * Type check for {@link SemVer} * * @param val - The value to check * @returns Whether the value is a valid {@link SemVer} */ const isSemver = (val) => { return isObject(val) && "version" in val; }; /** * Type check for {@link Range} * * @param val - The value to check * @returns Whether the value is a valid {@link Range} */ const isRange = (val) => { return isObject(val) && "range" in val; }; /** * Check if a {@link SemVer} string is valid * * @remarks * If you're looking for type checking, please use the {@link isSemver} function. * * @param semver - The semver string to check * @param loose - Whether to use loose parsing * @returns Whether the semver string is valid */ const isValidSemver = (semver, loose = true) => { return (isString(semver) || isSemver(semver)) && valid(semver, loose) !== null; }; /** * Check if a {@link Range} string is valid * * @remarks * If you're looking for type checking, please use the {@link isRange} function. * * @param range - The range string to check * @param loose - Whether to use loose parsing * @returns Whether the range string is valid */ const isValidRange = (range, loose = true) => { return (isString(range) || isRange(range)) && validRange(range, loose) !== null; }; /** * Check if a {@link SemVer} or {@link Range} string is valid * * @param version - The semver string to check * @param loose - Whether to use loose parsing * @returns Whether the semver string is valid */ const isValidVersion = (version, loose = true) => { return isValidSemver(version, loose) || isValidRange(version, loose); }; /** * Check if a semver string satisfies a range * * @param version - The semver string to check * @param range - The range to check against * @param loose - Whether to use loose parsing * @returns Whether the semver string satisfies the range */ const satisfiesVersion = (version, range, loose = true) => { if (!version || !range || !isValidSemver(version, loose) || !isValidRange(range, loose)) return false; return satisfies(version, range, { loose }); }; /** * Check if a string is a valid relative version keyword * * @param val - The string to check * @returns Whether the string is a valid relative version keyword */ const isRelativeVersionKeyword = (val) => { return RELEASE_TYPES.includes(val); }; /** * Derive a new semver version from the current version and a version specifier * * @param currentSemverVersion - The current semver version * @param semverSpecifier - The semver specifier to use * @param preid - The pre-release identifier to use * @returns The derived new semver version */ const deriveNewSemverVersion = (currentSemverVersion, semverSpecifier, preid) => { if (!valid(currentSemverVersion)) throw new Error(`Invalid semver version "${currentSemverVersion}" provided.`); let newVersion = semverSpecifier; if (isRelativeVersionKeyword(semverSpecifier)) { const derivedVersion = inc(currentSemverVersion, semverSpecifier, preid); if (!derivedVersion) throw new Error(`Unable to derive new version from current version "${currentSemverVersion}" and version specifier "${semverSpecifier}"`); newVersion = derivedVersion; } else if (!valid(semverSpecifier)) throw new Error(`Invalid semver version specifier "${semverSpecifier}" provided. Please provide either a valid semver version or a valid semver version keyword.`); return newVersion; }; //#endregion export { RELEASE_TYPES, coerceVersion, deriveNewSemverVersion, isRange, isRelativeVersionKeyword, isSemver, isValidRange, isValidSemver, isValidVersion, parseVersion, satisfiesVersion }; //# sourceMappingURL=semver-fns.mjs.map