Skip to content

Commit f58881b

Browse files
committed
Switch to a JSON Schema validator with later draft support
1 parent 93522f3 commit f58881b

File tree

3 files changed

+33
-27
lines changed

3 files changed

+33
-27
lines changed

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
],
2020
"dependencies": {},
2121
"devDependencies": {
22-
"jsonschema": "^1.2.4",
22+
"@hyperjump/json-schema": "^0.4.2",
2323
"mdv": "^1.0.7",
2424
"node-readfiles": "^0.2.0",
25-
"yaml": "^1.7.2"
25+
"yaml": "^1.8.3"
2626
},
2727
"keywords": [
2828
"OpenAPI",

scripts/validateExamples/index.js

+11-12
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,37 @@ const util = require('util');
66

77
const yaml = require('yaml');
88
const rf = require('node-readfiles');
9-
const jsonschema = require('jsonschema').Validator;
10-
const options = { };
11-
const validator = new jsonschema(options);
9+
const jsonschema = require('@hyperjump/json-schema');
1210

1311
const schema = {};
1412
schema["v2.0"] = yaml.parse(fs.readFileSync('./schemas/v2.0/schema.json','utf8'));
15-
schema.draft4 = yaml.parse(fs.readFileSync('./schemas/jsonSchema/draft-04/metaschema.json','utf8'));
1613
schema["v3.0"] = yaml.parse(fs.readFileSync('./schemas/v3.0/schema.yaml','utf8'));
1714

18-
validator.addSchema(schema.draft4);
15+
jsonschema.add(schema["v2.0"]);
16+
jsonschema.add(schema["v3.0"]);
1917

2018
async function main(path,schema,propName) {
2119
return new Promise(async function(resolve,reject){
2220
let files = await rf(path, { readContents: false, filenameFormat: rf.FULL_PATH });
2321
files = files.sort();
2422
for (let file of files) {
25-
const contentStr = fs.readFileSync(file,'utf8');
26-
let contentObj;
23+
const instanceStr = fs.readFileSync(file,'utf8');
24+
let instanceObj;
2725
try {
28-
contentObj = yaml.parse(contentStr,{prettyErrors:true});
26+
instanceObj = yaml.parse(instanceStr,{prettyErrors:true});
2927
}
3028
catch (ex) {
3129
process.exitCode = 1;
3230
console.warn(file,ex.message);
3331
}
34-
if (contentObj && contentObj[propName]) {
32+
if (instanceObj && instanceObj[propName]) {
3533
console.log('Validating',file);
3634
try {
37-
const result = await validator.validate(contentObj,schema);
38-
if (result.errors && result.errors.length) {
35+
const schemaObj = await jsonschema.get(schema.id);
36+
const result = await jsonschema.validate(schemaObj, instanceObj, jsonschema.DETAILED);
37+
if (!result.valid) {
3938
process.exitCode = 1;
40-
console.warn(file,util.inspect(result.errors));
39+
console.warn(file,util.inspect(result.errors, {depth:null}));
4140
}
4241
}
4342
catch (ex) {

scripts/validateSchema/index.js

+20-13
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,29 @@ const fs = require('fs');
55
const util = require('util');
66

77
const yaml = require('yaml');
8-
const jsonschema = require('jsonschema').Validator;
9-
const options = { base: process.argv[2] };
10-
const validator = new jsonschema(options);
8+
const jsonschema = require('@hyperjump/json-schema');
119

1210
const schema = yaml.parse(fs.readFileSync(process.argv[2],'utf8'));
1311
const metaSchema = yaml.parse(fs.readFileSync(process.argv[3],'utf8'));
1412

15-
console.log('Checking',process.argv[2]);
16-
17-
const result = validator.validate(schema, metaSchema);
18-
19-
if (result.errors.length) {
20-
console.warn(util.inspect(result.errors));
21-
process.exit(1);
22-
}
23-
else {
24-
console.log('OK');
13+
async function main() {
14+
jsonschema.add(metaSchema);
15+
const msObj = await jsonschema.get(metaSchema.id);
16+
let result;
17+
try {
18+
result = await jsonschema.validate(msObj, schema, jsonschema.DETAILED);
19+
}
20+
catch (ex) {
21+
result = { valid: false, errors: [ ex ] };
22+
}
23+
if (!result.valid) {
24+
console.warn(util.inspect(result.errors, {depth:null}));
25+
process.exit(1);
26+
}
27+
else {
28+
console.log('OK');
29+
}
2530
}
2631

32+
console.log('Checking',process.argv[2]);
33+
main();

0 commit comments

Comments
 (0)