mysticsymbolic.github.io/lib/util.ts

81 wiersze
1.8 KiB
TypeScript

export function float(value: string | number | undefined): number {
if (typeof value === "number") return value;
if (value === undefined) value = "";
const float = parseFloat(value);
if (isNaN(float)) {
throw new Error(`Expected '${value}' to be a float!`);
}
return float;
}
export function flatten<T>(arr: T[][]): T[] {
const result: T[] = [];
for (let subarr of arr) {
result.push(...subarr);
}
return result;
}
/**
* Convert radians to degrees.
*/
export function rad2deg(radians: number): number {
return (radians * 180) / Math.PI;
}
export type NumericInterval = {
min: number;
max: number;
};
export type NumericRange = NumericInterval & {
step: number;
};
/**
* Return numbers within the given range, inclusive.
*/
export function inclusiveRange({ min, max, step }: NumericRange): number[] {
const result: number[] = [];
for (let i = min; i <= max; i += step) {
result.push(i);
}
return result;
}
/**
* Return an array containing the numbers from 0 to one
* less than the given value, increasing.
*/
export function range(count: number): number[] {
return inclusiveRange({ min: 0, max: count - 1, step: 1 });
}
/**
* Slugify the given string.
*
* Taken from: https://gist.github.com/mathewbyrne/1280286
*/
export function slugify(text: string) {
return text
.toString()
.toLowerCase()
.replace(/\s+/g, "-") // Replace spaces with -
.replace(/[^\w\-]+/g, "") // Remove all non-word chars
.replace(/\-\-+/g, "-") // Replace multiple - with single -
.replace(/^-+/, "") // Trim - from start of text
.replace(/-+$/, ""); // Trim - from end of text
}
/** Returns whether the given number is even (as opposed to odd). */
export function isEvenNumber(value: number) {
return value % 2 === 0;
}