import { IterableActivity, Source, isSource } from "./activity"; export type SortCallback = (a: T, b: T) => number; function sortGen(compareFn?: SortCallback): IterableActivity { return function* (source: Source) { yield* (Array.isArray(source) ? source : [...source]).sort(compareFn); }; } export function sort(callbackFn: SortCallback): IterableActivity; export function sort(source: Source, callbackFn: SortCallback): IterableIterator; export function sort(s_or_cb: Source | SortCallback, callbackFn?: SortCallback): IterableActivity | IterableIterator { return isSource(s_or_cb) ? sortGen(callbackFn!)(s_or_cb) : sortGen(s_or_cb); }