aboutsummaryrefslogtreecommitdiffstats
path: root/packages/json-schemas/src/schema_validator.ts
diff options
context:
space:
mode:
authorJacob Evans <dekz@dekz.net>2017-11-16 07:25:09 +0800
committerGitHub <noreply@github.com>2017-11-16 07:25:09 +0800
commitd7e5c6f9b5bbe4e9216d3a91ade71bfab7785cdd (patch)
tree4e1d4197d52203b648493301fe74e577e1d99e3e /packages/json-schemas/src/schema_validator.ts
parent85c3b2996d7097f8d390f4b8f6199b983928defb (diff)
parent557faba31b149ab52f6cc4b1930f457205b00229 (diff)
downloaddexon-sol-tools-d7e5c6f9b5bbe4e9216d3a91ade71bfab7785cdd.tar
dexon-sol-tools-d7e5c6f9b5bbe4e9216d3a91ade71bfab7785cdd.tar.gz
dexon-sol-tools-d7e5c6f9b5bbe4e9216d3a91ade71bfab7785cdd.tar.bz2
dexon-sol-tools-d7e5c6f9b5bbe4e9216d3a91ade71bfab7785cdd.tar.lz
dexon-sol-tools-d7e5c6f9b5bbe4e9216d3a91ade71bfab7785cdd.tar.xz
dexon-sol-tools-d7e5c6f9b5bbe4e9216d3a91ade71bfab7785cdd.tar.zst
dexon-sol-tools-d7e5c6f9b5bbe4e9216d3a91ade71bfab7785cdd.zip
Merge branch 'development' into syncSubscribe
Diffstat (limited to 'packages/json-schemas/src/schema_validator.ts')
-rw-r--r--packages/json-schemas/src/schema_validator.ts28
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;
+ }
+}