/* --------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ export interface IteratorDefinedResult { readonly done: false; readonly value: T; } export interface IteratorUndefinedResult { readonly done: true; readonly value: undefined; } export const FIN: IteratorUndefinedResult = { done: true, value: undefined }; export type IteratorResult = IteratorDefinedResult | IteratorUndefinedResult; export interface Iterator { next(): IteratorResult; } export function filter(iterable: Iterable, predicate: (t: T) => t is R): Iterable; export function filter(iterable: Iterable, predicate: (t: T) => boolean): Iterable; export function* filter(iterable: Iterable, predicate: (t: T) => boolean): Iterable { for (const element of iterable) { if (predicate(element)) { yield element; } } } export function* map(iterable: Iterable, fn: (t: T, index: number) => R): Iterable { let index = 0; for (const element of iterable) { yield fn(element, index++); } }