diff options
author | Brandon Millman <brandon.millman@gmail.com> | 2017-11-14 08:32:01 +0800 |
---|---|---|
committer | Brandon Millman <brandon.millman@gmail.com> | 2017-11-14 22:42:50 +0800 |
commit | 56b5619d24b44d23f770b58b0c9e1d4a63b89aca (patch) | |
tree | 52c047aa9ce6dbd5af93f495dbb21a8c3a662a6f /packages/json-schemas/src/schema_validator.ts | |
parent | 08963f269b543d0f6f125ff77efdda23339865ed (diff) | |
download | dexon-sol-tools-56b5619d24b44d23f770b58b0c9e1d4a63b89aca.tar.gz dexon-sol-tools-56b5619d24b44d23f770b58b0c9e1d4a63b89aca.tar.zst dexon-sol-tools-56b5619d24b44d23f770b58b0c9e1d4a63b89aca.zip |
Add json-schemas package to mono repo
Diffstat (limited to 'packages/json-schemas/src/schema_validator.ts')
-rw-r--r-- | packages/json-schemas/src/schema_validator.ts | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/packages/json-schemas/src/schema_validator.ts b/packages/json-schemas/src/schema_validator.ts new file mode 100644 index 000000000..0bc88cc45 --- /dev/null +++ b/packages/json-schemas/src/schema_validator.ts @@ -0,0 +1,28 @@ +import values = require('lodash.values'); +import {Validator, ValidatorResult, Schema} from 'jsonschema'; +import {schemas} from './schemas'; + +export class SchemaValidator { + private validator: Validator; + constructor() { + this.validator = new Validator(); + for (const schema of values(schemas)) { + this.validator.addSchema(schema, schema.id); + } + } + public addSchema(schema: Schema) { + this.validator.addSchema(schema, schema.id); + } + // In order to validate a complex JS object using jsonschema, we must replace any complex + // sub-types (e.g BigNumber) with a simpler string representation. Since BigNumber and other + // complex types implement the `toString` method, we can stringify the object and + // then parse it. The resultant object can then be checked using jsonschema. + public validate(instance: any, schema: Schema): ValidatorResult { + const jsonSchemaCompatibleObject = JSON.parse(JSON.stringify(instance)); + return this.validator.validate(jsonSchemaCompatibleObject, schema); + } + public isValid(instance: any, schema: Schema): boolean { + const isValid = this.validate(instance, schema).errors.length === 0; + return isValid; + } +} |