import { ILayer, ILayers } from './Layer'; export interface IKeyMap extends IterableIterator { layers: ILayers; [index: number]: ILayer; } export class KeyMap implements IKeyMap { layers: ILayers = []; index: number = 0; constructor(layers: ILayers) { this.layers = layers; this.index = 0; } [index: number]: ILayer; forEach(fn: (k: ILayer, i: number) => any): void { return this.layers.forEach(fn); } map(fn: (k: ILayer, i: number) => ILayer): ILayers { return this.layers.map(fn); } get length(): number { return this.layers.length; } public next(): IteratorResult { if (this.index < this.layers.length) { return { done: false, value: this.layers[this.index++], }; } return { done: true, value: null, }; } [Symbol.iterator](): IterableIterator { return this; } } export const keymap = (...layers: ILayers): IKeyMap => new KeyMap(layers); export default keymap;