import { IterableActivity, Source, isSource } from "./activity"; export type MapCallback = (row: T, index: number) => U; function mapGen(callbackFn: MapCallback): IterableActivity { return function* (source: Source) { let i = -1; for (const item of source) { yield callbackFn(item, ++i); } }; } export function map(callbackFn: MapCallback): IterableActivity; export function map(source: Source, callbackFn: MapCallback): IterableIterator; export function map(s_or_cb: Source | MapCallback, callbackFn?: MapCallback): IterableActivity | IterableIterator { return isSource(s_or_cb) ? mapGen(callbackFn!)(s_or_cb) : mapGen(s_or_cb); }