pimatic
Version:
A home automation server and framework for the Raspberry PI running on node.js
74 lines (57 loc) • 1.79 kB
JavaScript
// simple command-line validation
var JaySchema = require('../lib/jayschema.js')
, fs = require('fs')
, path = require('path')
;
// support Node 0.6.x
var existsSync = fs.existsSync || path.existsSync;
var META_SCHEMA_PATH = path.join(__dirname, '..', 'lib', 'suites', 'draft-04',
'json-schema-draft-v4.json');
var META_SCHEMA = require(META_SCHEMA_PATH);
var instance = process.argv[2];
var schema = process.argv[3] || META_SCHEMA_PATH;
var syntax = function() {
console.log('Syntax: jayschema <instance> [<schema>]');
console.log('\tif <schema> is omitted, the <instance> will be validated');
console.log('\tagainst the JSON Schema Draft v4 meta-schema');
};
if (!instance || !schema) {
return syntax();
}
if (!existsSync(instance)) {
console.error('ERR: instance', '"' + instance + '"', 'not found');
return;
}
if (!existsSync(schema)) {
console.error('ERR: schema', '"' + schema + '"', 'not found');
return;
}
var instanceRaw = fs.readFileSync(instance);
var schemaRaw = fs.readFileSync(schema);
try {
var instanceJson = JSON.parse(instanceRaw);
} catch (e) {
console.error('ERR: instance is not valid JSON');
return;
}
try {
var schemaJson = JSON.parse(schemaRaw);
} catch (e) {
console.error('ERR: schema is not valid JSON');
return;
}
var js = new JaySchema();
var schemaErrors = js.validate(schemaJson, META_SCHEMA);
if (schemaErrors.length) {
console.error('ERR: schema is not valid JSON Schema Draft v4');
console.log(require('util').inspect(schemaErrors, false, null));
return;
}
var result = js.validate(instanceJson, schemaJson);
if (result.length === 0) {
console.log('validation OK');
} else {
console.log('validation errors:');
console.log(require('util').inspect(result, false, null));
}