Initial commit of the qmk keymap generator
This commit is contained in:
50
lib/KeyMap.ts
Normal file
50
lib/KeyMap.ts
Normal 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;
|
||||
Reference in New Issue
Block a user