UNPKG

thorish

Version:

This is a library of useful JS concepts and data structures for Node and the browser. It it, unashamedly, a dumping ground for code needed by [@samthor](https://twitter.com/samthor)'s projects.

97 lines (96 loc) 3.48 kB
/** * Returns a random signed int32, from the crypto lib via a pool. * * This is on par with {@link Math.random} rather than being significantly faster. * It has a 'startup cost' which makes benchmarking hard, and seems to get faster the more numbers you request. */ export declare const randInt32: () => number; /** * Returns a basic hash of the string or {@link ArrayLike}. */ export declare function hashCode(s: string | ArrayLike<number>): number; /** * Returns a basic hash of the given string based on its UTF-16 parts only. Empty string is zero. */ export declare function hashCodeString(s: string): number; /** * Returns a basic hash of the given array-like. Empty is zero. */ export declare function hashCodeArray(s: ArrayLike<number>): number; /** * Choose a random item from the {@link ArrayLike}. */ export declare function randomArrayChoice<X>(arr: ArrayLike<X>): X | undefined; /** * Pick a random item from the passed {@link Iterable}. Consumes the entire iterable. */ export declare function randomPick<X>(iter: Iterable<X>): X | undefined; /** * Picks a random N items from the passed {@link Iterable}. Consumes the entire iterable. */ export declare function randomPickN<X>(iter: Iterable<X>, count: number): X[]; /** * Lerp between low/high at the given position. */ export declare function lerp(low: number, high: number, at: number): number; /** * Finds the position (normally 0-1) between low-high. * * Will return `Infinity` if low and high are the same. */ export declare function inverseLerp(low: number, high: number, value: number): number; /** * Returns a random number in the given range. * This is the same semantics as {@link Math.random()}. */ export declare function randomRange(a: number, b?: number): number; /** * Returns a random integer number in the given range. * If only a single number is given, treated as `[0,n)`. * If two numbers are given, treated as `[a,b)`, regardless of relative order. * * For example: * - `(10)` can give values 0 through 9. * - `(1, 6)` can give values 1 through 5. * - `(0, -4)` can give values 0 through -3. * - `(-4, 0)` can give values -4 through -1. * * Same values always return that value. * */ export declare function randomRangeInt(a: number, b?: number): number; /** * Clamps a number between low and high. */ export declare const clamp: (low: number, high: number, number: number) => number; /** * Skews a value from a prior range to a new range. */ export declare const skew: (from: { low: number; high: number; }, to: { low: number; high: number; }, value: number) => number; /** * Generates seeded, random 32-bit numbers between `[-2147483648,2147483647]` (i.e., `[-2^31,(2^31)-1]`). * * The seed must be an integer, if a float is passed, only the integer part is used (e.g., `0.5` * becomes `0`). * * The best use is to clip these numbers with a mask, e.g., `gen() & 0xffff` for 16-bit. */ export declare function seeded32(s: number): () => number; /** * Generates seeded `Math.random()` behavior (i.e., >=0 and <1). Requires integer seed, just like * {@link seeded32}. */ export declare function seededRand(s: number): () => number; /** * Returns a random 36-alphabet string (0-9, a-z) for use as a random identifier. * * By default, generates a 6-character long ID, which is ~31 bits. The bits are linear with length; * each character is ~5.15 bits worth. */ export declare function randomId(length?: number): string;