linvail
Version:
Provenancial Equality for JavaScript
60 lines (55 loc) • 1.1 kB
JavaScript
const {
isNaN,
Number: { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER },
Math: { trunc },
} = globalThis;
/**
* @type {(
* main: number,
* recovery: number,
* ) => number}
*/
export const resolveNaN = (main, recovery) => (isNaN(main) ? recovery : main);
/**
* @type {(
* target: number,
* min: number,
* max: number,
* ) => number}
*/
export const clamp = (target, min, max) => {
// non-strict equality because -0 is not strictly lower than 0
if (target <= min) {
return min;
}
if (target >= max) {
return max;
}
return target;
};
/**
* @type {(
* target: number,
* fallback: number,
* ) => number}
*/
export const toInteger = (target, fallback) => {
if (isNaN(target)) {
return fallback;
}
if (target < MIN_SAFE_INTEGER) {
return MIN_SAFE_INTEGER;
}
if (target > MAX_SAFE_INTEGER) {
return MAX_SAFE_INTEGER;
}
return trunc(target);
};
/**
* @type {(
* target: number,
* increment: number,
* ) => number}
*/
export const incrementWhenNegative = (target, increment) =>
target < 0 ? target + increment : target;