diff options
Diffstat (limited to 'src/shared/settings/Keymaps.ts')
| -rw-r--r-- | src/shared/settings/Keymaps.ts | 29 | 
1 files changed, 20 insertions, 9 deletions
| diff --git a/src/shared/settings/Keymaps.ts b/src/shared/settings/Keymaps.ts index a5558b0..7e510d1 100644 --- a/src/shared/settings/Keymaps.ts +++ b/src/shared/settings/Keymaps.ts @@ -1,4 +1,18 @@  import * as operations from '../operations'; +import Validator from './Validator'; + +const Schema = { +  type: 'object', +  patternProperties: { +    '.*': { +      type: 'object', +      properties: { +        type: { type: 'string' }, +      }, +      required: ['type'], +    }, +  } +};  export type KeymapsJSON = { [key: string]: operations.Operation }; @@ -8,16 +22,13 @@ export default class Keymaps {    ) {    } -  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]); +  static fromJSON(json: unknown): Keymaps { +    let obj = new Validator<KeymapsJSON>(Schema).validate(json); +    let entries: KeymapsJSON = {}; +    for (let key of Object.keys(obj)) { +      entries[key] = operations.valueOf(obj[key]);      } -    return new Keymaps(data); +    return new Keymaps(entries);    }    combine(other: Keymaps): Keymaps { | 
