rittenhop-dev/versions/5.94.2/node_modules/@tryghost/admin-api-schema/lib/utils/json-schema.js
2024-09-23 19:40:12 -04:00

57 lines
1.3 KiB
JavaScript

const _ = require('lodash');
const Ajv = require('ajv');
const isLowercaseKeyword = require('./is-lowercase-keyword');
const errors = require('@tryghost/errors');
const ajv = new Ajv({
allErrors: true,
useDefaults: true,
removeAdditional: true,
formats: {
'json-string': (data) => {
try {
JSON.parse(data);
return true;
} catch (e) {
return false;
}
}
}
});
isLowercaseKeyword(ajv);
const getValidation = (schema, def) => {
if (!ajv.getSchema(def.$id)) {
ajv.addSchema(def);
}
return ajv.getSchema(schema.$id) || ajv.compile(schema);
};
const validate = (schema, definition, data) => {
const validation = getValidation(schema, definition);
validation(data);
if (validation.errors) {
let key;
const dataPath = _.get(validation, 'errors[0].dataPath');
if (dataPath) {
key = dataPath.split('.').pop();
} else {
key = schema.$id.split('.')[0];
}
return Promise.reject(new errors.ValidationError({
message: `Validation failed for ${key}.`,
property: key,
errorDetails: validation.errors
}));
}
return Promise.resolve();
};
module.exports.validate = validate;