33 lines
959 B
TypeScript
33 lines
959 B
TypeScript
import { MaybeAsyncFunction } from "../types.js";
|
|
|
|
export type ElementPredicate<T = any> = (index: number, obj: T) => boolean;
|
|
export type ElementWeight<T = any> = (index: number, obj: T) => number;
|
|
export type RandomGenerator = () => number;
|
|
|
|
export type RandomOptions<T = any> = {
|
|
predicate?: ElementPredicate<T>;
|
|
weight?: ElementWeight<T>;
|
|
random?: RandomGenerator;
|
|
};
|
|
|
|
export type MaybeAsyncElementPredicate<T = any> = MaybeAsyncFunction<ElementPredicate<T>>;
|
|
export type MaybeAsyncElementWeight<T = any> = MaybeAsyncFunction<ElementWeight<T>>;
|
|
|
|
export type AsyncRandomOptions<T = any> = {
|
|
predicate?: MaybeAsyncElementPredicate<T>;
|
|
weight?: MaybeAsyncElementWeight<T>;
|
|
random?: RandomGenerator;
|
|
};
|
|
|
|
type RandomElementFound<T> = {
|
|
found: true;
|
|
element: T;
|
|
index: number;
|
|
};
|
|
type RandomElementNotFound = {
|
|
found: false;
|
|
element: undefined;
|
|
index: -1;
|
|
};
|
|
export type RandomElement<T> = RandomElementFound<T> | RandomElementNotFound;
|