@evpower/ocpp-ts
Version:
OCPP 1.6: Open Charge Point Protocol
48 lines • 4.49 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SchemaValidator = void 0;
const ajv_1 = __importDefault(require("ajv"));
const OcppError_1 = require("./OcppError");
class SchemaValidator {
constructor(schema) {
this.schema = schema;
delete this.schema.$schema;
this.validateFn = SchemaValidator.ajv.compile(this.schema);
}
/**
* @throws {OcppError}
*/
validate(payload) {
if (!this.schema) {
throw new OcppError_1.OcppError(OcppError_1.ERROR_PROTOCOLERROR, 'Schema for request not found');
}
const valid = this.validateFn(payload);
if (!valid) {
this.validateFn.errors?.forEach((error) => {
if (error.keyword === 'additionalProperties') {
throw new OcppError_1.OcppError(OcppError_1.ERROR_FORMATIONVIOLATION, 'Payload for Action is syntactically incorrect or not conform the PDU structure for'
+ ' Action', error);
}
else if (['maxLength', 'enum'].includes(error.keyword)) {
throw new OcppError_1.OcppError(OcppError_1.ERROR_PROPERTYCONSTRAINTVIOLATION, 'Payload is syntactically correct but at least one field contains an invalid value', error);
}
else if (['type'].includes(error.keyword)) {
throw new OcppError_1.OcppError(OcppError_1.ERROR_TYPECONSTRAINTVIOLATION, 'Payload for Action is syntactically correct but at least one of the fields violates data type', error);
}
else if (error.keyword === 'required') {
throw new OcppError_1.OcppError(OcppError_1.ERROR_PROTOCOLERROR, 'Payload for Action is incomplete', error);
}
else {
throw new OcppError_1.OcppError(OcppError_1.ERROR_FORMATIONVIOLATION, 'Payload for Action is syntactically incorrect or not conform the PDU structure for Action', error);
}
});
throw new OcppError_1.OcppError(OcppError_1.ERROR_FORMATIONVIOLATION, 'Payload for Action is syntactically incorrect or not conform the PDU structure for Action');
}
}
}
exports.SchemaValidator = SchemaValidator;
SchemaValidator.ajv = new ajv_1.default();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hVmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ltcGwvU2NoZW1hVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhDQUErQztBQUMvQywyQ0FNcUI7QUFFckIsTUFBYSxlQUFlO0lBSTFCLFlBQVksTUFBYztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxPQUFZO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLHFCQUFTLENBQUMsK0JBQW1CLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUEyQixFQUFFLEVBQUU7Z0JBQzlELElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxzQkFBc0IsRUFBRSxDQUFDO29CQUM3QyxNQUFNLElBQUkscUJBQVMsQ0FDakIsb0NBQXdCLEVBQ3hCLG9GQUFvRjswQkFDbEYsU0FBUyxFQUNYLEtBQUssQ0FDTixDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3pELE1BQU0sSUFBSSxxQkFBUyxDQUNqQiw2Q0FBaUMsRUFDakMsbUZBQW1GLEVBQ25GLEtBQUssQ0FDTixDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsTUFBTSxJQUFJLHFCQUFTLENBQ2pCLHlDQUE2QixFQUM3QiwrRkFBK0YsRUFDL0YsS0FBSyxDQUNOLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ3hDLE1BQU0sSUFBSSxxQkFBUyxDQUNqQiwrQkFBbUIsRUFDbkIsa0NBQWtDLEVBQ2xDLEtBQUssQ0FDTixDQUFDO2dCQUNKLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLElBQUkscUJBQVMsQ0FDakIsb0NBQXdCLEVBQ3hCLDJGQUEyRixFQUMzRixLQUFLLENBQ04sQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLElBQUkscUJBQVMsQ0FDakIsb0NBQXdCLEVBQ3hCLDJGQUEyRixDQUM1RixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7O0FBMURILDBDQTJEQztBQXhEUSxtQkFBRyxHQUFpQixJQUFJLGFBQUcsRUFBRSxDQUFDIn0=