@oleksii-pavlov/ranges
Version:
The Ranges utils
47 lines (46 loc) • 1.69 kB
JavaScript
export class Range {
constructor(rangeValues) {
this.rangeValues = rangeValues;
}
getValues() {
return this.rangeValues;
}
within(value) {
if (value > this.rangeValues.max)
return this.rangeValues.max;
if (value < this.rangeValues.min)
return this.rangeValues.min;
return value;
}
isGreaterThanMinAndLessThanMax(value) {
return value > this.rangeValues.min && value < this.rangeValues.max;
}
isGreaterThanMinOrEqualAndLessThanMax(value) {
return value >= this.rangeValues.min && value < this.rangeValues.max;
}
isGreaterThanMinAndLessThanMaxOrEqual(value) {
return value > this.rangeValues.min && value <= this.rangeValues.max;
}
isGreaterThanMinOrEqualAndLessThanMaxOrEqual(value) {
return value >= this.rangeValues.min && value <= this.rangeValues.max;
}
getIntersection(rangeValues) {
const greaterMin = Math.max(this.rangeValues.min, rangeValues.min);
const lowerMax = Math.min(this.rangeValues.max, rangeValues.max);
if (greaterMin > lowerMax)
return null;
return new Range({ min: greaterMin, max: lowerMax });
}
isInRangeOf(rangeValues) {
return this.rangeValues.min >= rangeValues.min && this.rangeValues.max <= rangeValues.max;
}
containsRange(rangeValues) {
return this.rangeValues.min <= rangeValues.min && this.rangeValues.max >= rangeValues.max;
}
containsValue(value) {
return this.rangeValues.min <= value && this.rangeValues.max >= value;
}
}
export function mapValueToRange(value) {
return ({ min: value, max: value });
}