aboutsummaryrefslogtreecommitdiff
path: root/src/shared/settings/Validator.ts
blob: 6aac07f9185c7dc19e066755dead0bb8a39eafda (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import Ajv from 'ajv';

export default class Validator<T> {
  constructor(
    private schema: object | boolean,
  ) {
  }

  validate(data: any): T {
    let ajv = new Ajv();
    let valid = ajv.validate(this.schema, data);
    if (!valid) {
      let message = ajv.errors!!
        .map(err => `'${err.dataPath}' of ${err.keyword} ${err.message}`)
        .join('; ');
      throw new TypeError(message);
    }
    return data as T;
  }
}