UNPKG

1.1 kBJavaScriptView Raw
1const parser = require('jsonlint').parser;
2const jjv = require('jjv');
3const schemaError = require('./schema-error');
4const pkg = require('../package');
5
6function parse(source) {
7 try {
8 return parser.parse(source);
9 } catch (error) {
10 error.type = pkg.name;
11 error.step = 'parse';
12 throw error;
13 }
14}
15
16function validate(data, settings, schema) {
17 if (!schema) {
18 return data;
19 }
20
21 const environment = jjv(settings.env);
22 environment.addSchema('default', schema);
23 const errors = environment.validate('default', data);
24
25 if (errors) {
26 const message = schemaError(errors, schema)
27 .filter(Boolean).join('\n');
28 const error = new Error(message);
29 error.type = pkg.name;
30 error.step = 'validation';
31 throw error;
32 }
33
34 return data;
35}
36
37module.exports = (source, settings, schema) => {
38 try {
39 const json = source.toString();
40 const parsed = parse(json, settings);
41 return validate(parsed, settings, schema);
42 } catch (error) {
43 const intro = `${source.path} ${error.step}`;
44 error.file = error.file || source.path;
45 error.message = `${intro}:\n${error.message}`;
46 throw error;
47 }
48};