// Type definitions for CrossFilter // Project: https://github.com/square/crossfilter // Definitions by: Schmulik Raskin // Definitions: https://github.com/borisyankov/DefinitelyTyped declare module CrossFilter { export interface Selector { (value: T): any; } export interface CrossFilterStatic { (data: T[]): CrossFilter; version: string; permute(array: T[], index: number[]): T[]; bisect: { (array: T[], value: T, lo: number, hi: number): number; by(value: Selector): Bisector; } heap: { (array: T[], lo: number, hi: number): T[]; by(value: Selector): Heap; } heapselect: { (array: T[], lo: number, hi: number, k: number): T[]; by(value: Selector): HeapSelect; } insertionsort: { (array: T[], lo: number, hi: number): T[]; by(value: Selector): Sort; } quicksort: { (array: T[], lo: number, hi: number): T[]; by(value: Selector): Sort; } } export interface Bisection { (array: T[], value: T, lo: number, hi: number): number; } export interface Bisector extends Bisection { left: Bisection right: Bisection } export interface Heap { (array: T[], lo: number, hi: number): T[]; sort(array: T[], lo: number, hi: number): T[]; } export interface HeapSelect { (array: T[], lo: number, hi: number, k: number): T[]; } export interface Sort { (array: T[], lo: number, hi: number): T[]; } export interface GroupAll { reduce(add: (p: TValue, v: T) => TValue, remove: (p: TValue, v: T) => TValue, initial: () => TValue): GroupAll; reduceCount(): GroupAll; reduceSum(value: Selector): GroupAll; dispose(): GroupAll; value(): TValue; } export interface Grouping { key: TKey; value: TValue; } export interface Group { top(k: number): Grouping[]; all(): Grouping[]; reduce(add: (p: TGroup, v: T) => TGroup, remove: (p: TGroup, v: T) => TGroup, initial: () => TGroup): Group; reduceCount(): Group; reduceSum(value: (data: T) => TGroup): Group; order(value?: Selector): Group; orderNatural(): Group; size(): number; dispose(): Group; } export interface CrossFilter { add(records: T[]): CrossFilter; remove(): CrossFilter; size(): number; GroupAll(): GroupAll; groupAll(): GroupAll; dimension(value: (data: T) => TDimension): Dimension; isElementFiltered(index: number, ignore_dimensions?: Dimension[]): boolean; } export interface Dimension { filter(value: TDimension[]): Dimension; filter(value: TDimension): Dimension; filter(value: Selector): Dimension; filterExact(value: TDimension): Dimension; filterRange(value: TDimension[]): Dimension; filterFunction(value: Selector): Dimension; filterAll(): Dimension; top(k: number): T[]; bottom(k: number): T[]; dispose(): void; group(): Group; group(groupValue: (data: TDimension) => TGroup): Group; groupAll(): GroupAll; groupAll(): GroupAll; } } declare var crossfilter: CrossFilter.CrossFilterStatic;