Files
qmk-keymap-generator/lib/KeyMap.ts

51 lines
1011 B
TypeScript

import { ILayer, ILayers } from './Layer';
export interface IKeyMap extends IterableIterator<ILayer> {
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<ILayer> {
if (this.index < this.layers.length) {
return {
done: false,
value: this.layers[this.index++],
};
}
return {
done: true,
value: null,
};
}
[Symbol.iterator](): IterableIterator<ILayer> {
return this;
}
}
export const keymap = (...layers: ILayers): IKeyMap => new KeyMap(layers);
export default keymap;