UNPKG

covertable

Version:

A flexible pairwise tool written in TypeScript

52 lines (51 loc) 1.73 kB
import type { Controller } from "./controller"; export type ScalarType = number | string; export type DictType = { [s: string]: any; }; export type ListType = { [index: number]: any[]; }; export type SerialsType = Map<ScalarType, PairType>; export type ParentsType = Map<number, ScalarType>; export type IndicesType = Map<number, number>; export type FilterRowType = { [key: string]: any; [index: number]: any; }; export type ArrayTupleType = any[][]; export type ArrayObjectType = { [s: string]: any[]; }; export type FactorsType = ArrayTupleType | ArrayObjectType; export type SuggestRowType<T extends FactorsType> = T extends ArrayTupleType ? T[number][number][] : T extends ArrayObjectType ? { [K in keyof T]: T[K][number]; } : unknown; export type FilterType = (row: FilterRowType) => boolean; export type SuggestFilterType<T extends FactorsType> = (row: SuggestRowType<T>) => boolean; export type PairType = number[]; export type PairByKeyType = Map<ScalarType, PairType>; export type CandidateType = [ScalarType, number][]; export interface RowType { consumed: PairByKeyType; } export type SorterType = (pairs: PairType[], sortArgs: SortArgsType) => PairType[]; export interface SortArgsType { seed: ScalarType; indices: IndicesType; } export interface CriterionArgsType { row: RowType; parents: ParentsType; length: number; tolerance: number; } export interface OptionsType<T extends FactorsType> { length?: number; sorter?: SorterType; criterion?: (ctrl: Controller<T>) => IterableIterator<PairType>; seed?: ScalarType; tolerance?: number; preFilter?: FilterType | SuggestFilterType<T>; postFilter?: FilterType | SuggestFilterType<T>; }