Make Keymap class
This commit is contained in:
parent
b496cea582
commit
410ffbb037
15 changed files with 223 additions and 129 deletions
37
src/shared/settings/Keymaps.ts
Normal file
37
src/shared/settings/Keymaps.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import * as operations from '../operations';
|
||||
|
||||
export type KeymapsJSON = { [key: string]: operations.Operation };
|
||||
|
||||
export default class Keymaps {
|
||||
constructor(
|
||||
private readonly data: KeymapsJSON,
|
||||
) {
|
||||
}
|
||||
|
||||
static fromJSON(json: any): Keymaps {
|
||||
if (typeof json !== 'object' || json === null) {
|
||||
throw new TypeError('invalid keymaps type: ' + JSON.stringify(json));
|
||||
}
|
||||
|
||||
let data: KeymapsJSON = {};
|
||||
for (let key of Object.keys(json)) {
|
||||
data[key] = operations.valueOf(json[key]);
|
||||
}
|
||||
return new Keymaps(data);
|
||||
}
|
||||
|
||||
combine(other: Keymaps): Keymaps {
|
||||
return new Keymaps({
|
||||
...this.data,
|
||||
...other.data,
|
||||
});
|
||||
}
|
||||
|
||||
toJSON(): KeymapsJSON {
|
||||
return this.data;
|
||||
}
|
||||
|
||||
entries(): [string, operations.Operation][] {
|
||||
return Object.entries(this.data);
|
||||
}
|
||||
}
|
Reference in a new issue