@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
JavaScript
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