mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-09-14 19:02:35 +00:00
46 lines
1018 B
JavaScript
46 lines
1018 B
JavaScript
import Ajv from 'ajv/dist/2020.js';
|
|
import _ from "lodash";
|
|
import commonDefinitions from "../../schema/common.json" with { type: "json" };
|
|
import errs from "../error.js";
|
|
|
|
RegExp.prototype.toJSON = RegExp.prototype.toString;
|
|
|
|
const ajv = new Ajv({
|
|
verbose: true,
|
|
allErrors: true,
|
|
allowUnionTypes: true,
|
|
coerceTypes: true,
|
|
strict: false,
|
|
schemas: [commonDefinitions],
|
|
});
|
|
|
|
/**
|
|
*
|
|
* @param {Object} schema
|
|
* @param {Object} payload
|
|
* @returns {Promise}
|
|
*/
|
|
const validator = (schema, payload) => {
|
|
return new Promise((resolve, reject) => {
|
|
if (!payload) {
|
|
reject(new errs.InternalValidationError("Payload is falsy"));
|
|
} else {
|
|
try {
|
|
const validate = ajv.compile(schema);
|
|
const valid = validate(payload);
|
|
|
|
if (valid && !validate.errors) {
|
|
resolve(_.cloneDeep(payload));
|
|
} else {
|
|
const message = ajv.errorsText(validate.errors);
|
|
reject(new errs.InternalValidationError(message));
|
|
}
|
|
} catch (err) {
|
|
reject(err);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
export default validator;
|