geninq
Version:
A JavaScript version of the Linq library for Generators
34 lines (30 loc) • 791 B
text/typescript
import { Build, Promised } from "./utils";
declare global {
interface Generator<T = unknown, TReturn = any, TNext = unknown> {
select<TResult>(
selector: (item: T, index: number) => TResult
): Generator<TResult, TReturn, TNext>;
}
interface AsyncGenerator<T = unknown, TReturn = any, TNext = unknown> {
select<TResult>(
selector: (item: T, index: number) => Promised<TResult>
): AsyncGenerator<TResult, TReturn, TNext>;
}
}
Build(
"select",
function* (selector) {
let index = 0;
for (const item of this) {
yield selector(item, index);
index++;
}
},
async function* (selector) {
let index = 0;
for await (const item of this) {
yield await Promise.resolve(selector(item, index));
index++;
}
}
);