api-schema-builder
Version:
build schema with validators for each endpoint
45 lines (41 loc) • 1.6 kB
JavaScript
var Ajv = require('ajv');
const fileNameField = 'fieldname';
function missingElements(superSet, subset) {
const missingElements = [];
subset.every(function (subsetElement) {
if (!superSet.includes(subsetElement)) {
missingElements.push(subsetElement);
}
return true;
});
return missingElements;
};
module.exports = {
validate: function filesValidation(schema, data) {
filesValidation.errors = [];
const dataFileName = data.map((element) => { return element[fileNameField] });
const missingFiles = missingElements(dataFileName, schema.required);
if (missingFiles.length > 0) {
filesValidation.errors.push(new Ajv.ValidationError({
keyword: 'files',
message: `Missing required files: ${missingFiles.toString()}`,
params: { requiredFiles: schema.required, missingFiles: missingFiles }
}));
return false;
}
// Check that only the optional files exists
const allFiles = schema.required.concat(schema.optional);
const extraFiles = missingElements(allFiles, dataFileName);
if (extraFiles.length > 0) {
filesValidation.errors.push(new Ajv.ValidationError({
keyword: 'files',
message: `Extra files are not allowed. Not allowed files: ${extraFiles}`,
params: { allowedFiles: allFiles, extraFiles: extraFiles }
}));
return false;
} else {
return true;
}
},
errors: true
};