1
0
mirror of https://github.com/thangisme/notes.git synced 2024-12-22 17:56:53 -05:00
notes/node_modules/ajv-keywords/keywords/propertyNames.js
Patrick Marsceill b7b0d0d7bf
Initial commit
2017-03-09 13:16:08 -05:00

52 lines
1.4 KiB
JavaScript

'use strict';
module.exports = function defFunc(ajv) {
defFunc.definition = {
type: 'object',
compile: function(schema) {
var validate = ajv.compile(schema);
return ajv._opts.allErrors ? vAllErrors : vBreakOnError;
function vBreakOnError(data) {
for (var prop in data) {
if (!validate(prop)) {
vBreakOnError.errors = validate.errors;
addPropertyNameError(vBreakOnError.errors, prop);
return false;
}
}
return true;
}
function vAllErrors(data) {
var errors = [];
for (var prop in data) {
if (!validate(prop)) {
errors = errors.concat(validate.errors);
addPropertyNameError(errors, prop);
}
}
if (errors.length) vAllErrors.errors = errors;
return errors.length == 0;
}
function addPropertyNameError(errors, propName) {
errors.push({
keyword: 'propertyNames',
params: { propertyName: propName },
message: 'should have valid property name of "' + propName + '"'
});
}
},
metaSchema: {
$ref: ajv._opts.v5
? 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#'
: 'http://json-schema.org/draft-04/schema#'
},
errors: true
};
ajv.addKeyword('propertyNames', defFunc.definition);
return ajv;
};