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