Initial commit of the qmk keymap generator

This commit is contained in:
2019-10-10 13:17:57 +02:00
commit c4295039c9
11 changed files with 530 additions and 0 deletions

50
lib/KeyMap.ts Normal file
View File

@@ -0,0 +1,50 @@
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;