expressCart/lib/schema.js

51 lines
1.3 KiB
JavaScript
Raw Normal View History

const path = require('path');
const fs = require('fs');
const moment = require('moment');
2019-07-11 15:35:03 +10:00
const glob = require('glob');
2019-11-16 09:01:57 +10:00
const Ajv = require('ajv');
const ajv = new Ajv();
const addSchemas = () => {
2019-07-11 15:35:03 +10:00
const schemaFiles = glob.sync('./lib/**/*.json');
2019-11-16 09:01:57 +10:00
schemaFiles.forEach((file) => {
const fileData = JSON.parse(fs.readFileSync(file, 'utf-8'));
2019-11-16 09:01:57 +10:00
ajv.addSchema(fileData, path.basename(file, '.json'));
});
2019-11-16 12:22:54 +10:00
// Email format
const emailRegex = /^([\w-.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
ajv.addFormat('emailAddress', emailRegex);
// Amount format
const amountRegex = /^\d+\.\d\d$/;
2019-11-16 12:22:54 +10:00
ajv.addFormat('amount', amountRegex);
2019-11-16 20:57:48 +10:00
// Datetime format
ajv.addFormat('datetime', {
validate: (dateTimeString) => {
return moment(dateTimeString, 'DD/MM/YYYY HH:mm').isValid();
}
});
2019-11-16 20:57:48 +10:00
ajv.addKeyword('isNotEmpty', {
type: 'string',
validate: (schema, data) => {
return typeof data === 'string' && data.trim() !== '';
},
errors: false
});
};
const validateJson = (schema, json) => {
2019-11-16 12:22:54 +10:00
const result = ajv.validate(schema, json);
2020-02-21 12:21:56 +10:00
return {
2019-11-16 12:22:54 +10:00
result,
errors: ajv.errors
};
};
module.exports = {
addSchemas,
validateJson
};