37 lines
888 B
JavaScript
37 lines
888 B
JavaScript
const _ = require("lodash");
|
|
|
|
const resolvePointer = require('./resolvePointer.cjs');
|
|
|
|
module.exports = (ajv) =>
|
|
ajv.addKeyword({
|
|
keyword: "sumOf",
|
|
validate: function validate(
|
|
{ list, map },
|
|
total,
|
|
_parent,
|
|
{ rootData, instancePath }
|
|
) {
|
|
if (list.$data) {
|
|
list = resolvePointer(rootData, instancePath, list.$data);
|
|
}
|
|
|
|
if (map) list = _.map(list, map);
|
|
|
|
if (_.sum(list) === total) return true;
|
|
|
|
validate.errors = [
|
|
{
|
|
keyword: "sumOf",
|
|
message: "should add up to sum total",
|
|
params: {
|
|
list,
|
|
},
|
|
},
|
|
];
|
|
|
|
return false;
|
|
},
|
|
$data: true,
|
|
errors: true,
|
|
});
|