/** * Core type definitions for the Ultimate Lodash library */ export type Primitive = string | number | boolean | symbol | null | undefined; export type DeepReadonly = { readonly [P in keyof T]: T[P] extends Primitive ? T[P] : DeepReadonly; }; export type DeepPartial = { [P in keyof T]?: T[P] extends object ? DeepPartial : T[P]; }; export type DeepRequired = { [P in keyof T]-?: T[P] extends object ? DeepRequired : T[P]; }; export type NonNullable = T extends null | undefined ? never : T; export type Predicate = (value: T, index?: number, collection?: readonly T[]) => boolean; export type ObjectPredicate = (value: T[keyof T], key: keyof T, object: T) => boolean; export type Iteratee = (value: T, index?: number, collection?: readonly T[]) => R; export type ObjectIteratee = (value: T[keyof T], key: keyof T, object: T) => R; export type PropertyPath = string | number | symbol | (string | number | symbol)[]; export type PropertyName = string | number | symbol; export type Comparator = (a: T, b: T) => number; export type ValueIteratee = ((value: T) => R) | PropertyPath | Partial; export type AnyFunction = (...args: any[]) => any; export type VoidFunction = (...args: any[]) => void; export type CurriedFunction1 = { (): CurriedFunction1; (t1: T1): R; }; export type CurriedFunction2 = { (): CurriedFunction2; (t1: T1): CurriedFunction1; (t1: T1, t2: T2): R; }; export type CurriedFunction3 = { (): CurriedFunction3; (t1: T1): CurriedFunction2; (t1: T1, t2: T2): CurriedFunction1; (t1: T1, t2: T2, t3: T3): R; }; export type CurriedFunction4 = { (): CurriedFunction4; (t1: T1): CurriedFunction3; (t1: T1, t2: T2): CurriedFunction2; (t1: T1, t2: T2, t3: T3): CurriedFunction1; (t1: T1, t2: T2, t3: T3, t4: T4): R; }; export interface LodashWrapper { value(): T; valueOf(): T; toJSON(): T; toString(): string; } export interface CollectionChain extends LodashWrapper { chunk(size?: number): CollectionChain; compact(): CollectionChain>; filter(predicate?: Predicate): CollectionChain; map(iteratee: Iteratee): CollectionChain; reduce(iteratee: (accumulator: U, value: T, index: number, collection: T[]) => U, initialValue?: U): LodashWrapper; } export interface MemoizeOptions { ttl?: number; maxSize?: number; resolver?: (...args: any[]) => string; } export interface DebounceOptions { leading?: boolean; trailing?: boolean; maxWait?: number; } export interface ThrottleOptions { leading?: boolean; trailing?: boolean; } export type PathValue = P extends string | number | symbol ? T extends Record ? T[P] : never : P extends readonly [infer Key, ...infer Rest] ? Key extends keyof T ? Rest extends PropertyPath ? PathValue : never : never : never; export type SortOrder = "asc" | "desc"; export interface TemplateOptions { interpolate?: RegExp; evaluate?: RegExp; escape?: RegExp; variable?: string; } export interface SlugifyOptions { replacement?: string; lower?: boolean; strict?: boolean; locale?: string; trim?: boolean; } export interface PromiseSettledResult { status: "fulfilled" | "rejected"; value?: T; reason?: any; } export type TypeGuard = (value: T) => value is U; export type GroupedResult = Record; export interface StatisticalResult { mean: number; median: number; mode: number[]; standardDeviation: number; variance: number; min: number; max: number; sum: number; count: number; }