let-it-go
Version:
❄️ Let your website snow instantly
46 lines (38 loc) • 1.39 kB
text/typescript
import { Range, Style } from '../types';
export * from './Vector';
export * from './Snowflake';
export function assert<TCond = unknown>(condition: TCond, message = 'internal error.'): asserts condition {
if (!condition) throw Error(`[let-it-go] ${message}`);
}
export function assertIsRange(range: Range): asserts range is Range {
assert(Array.isArray(range), 'Range must be an array.');
assert(range.length === 2, 'Range size must be 2.');
assert(range.every((value) => typeof value === 'number'), 'Range value must be a number.');
}
export function assertIsRadiusRange(range: Range): asserts range is Range {
assertIsRange(range);
assert(range.every((value) => value >= 0), 'Radius range value must be positive.');
}
export function assertIsAlphaRange(range: Range): asserts range is Range {
assertIsRange(range);
assert(range.every((value) => value >= 0 && value <= 1), 'Alpha range value must be from 0 to 1.');
}
export function getRandom(
min: number,
max: number,
): number {
return Math.random() * (max - min) + min;
}
export function setStyleProps(
element: HTMLElement,
style: Style = {},
): void {
Object
.entries(style)
.forEach(([key, value]) => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
// eslint-disable-next-line no-param-reassign
element.style[key] = value || '';
});
}