@marblejs-contrib/middleware-joi
Version:
A joi validation middleware for Marble.js
29 lines (28 loc) • 1.64 kB
JavaScript
;
/* eslint-disable import/no-duplicates */
Object.defineProperty(exports, "__esModule", { value: true });
exports.validator$ = void 0;
const Joi = require("joi");
require("./validator.interface");
const http_1 = require("@marblejs/http");
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
const validator_schema_1 = require("./validator.schema");
const validateSource = (rules, options) => (req) => (0, rxjs_1.from)(rules.keys()).pipe((0, operators_1.mergeMap)(rule => (0, rxjs_1.of)(req[rule]).pipe((0, operators_1.mergeMap)(item => (0, rxjs_1.from)(Joi.validate(item || {}, rules.get(rule), options)).pipe((0, operators_1.catchError)((err) => {
const message = err.details[0].message;
return (0, rxjs_1.throwError)(() => new http_1.HttpError(message, http_1.HttpStatus.BAD_REQUEST));
}))), (0, operators_1.map)(result => (req[rule] = result)))), (0, operators_1.toArray)(), (0, operators_1.mapTo)(req));
/**
* @deprecated [#1] since version 2.0,
* [#2] use @marblejs/middlware-io instead,
*/
const validator$ = (schema, options = {}) => (req$) => {
console.warn('Deprecation warning: @marblejs/middleware-joi is deprecated since v2.0. Use @marblejs/middlware-io instead.');
const result = Joi.validate(schema, validator_schema_1.SchemaValidator);
const rules = Object.keys(schema).reduce((acc, value) => acc.set(value, Joi.compile(schema[value])), new Map());
if (result && result.error) {
return (0, rxjs_1.throwError)(() => result.error);
}
return req$.pipe((0, operators_1.mergeMap)(validateSource(rules, options)));
};
exports.validator$ = validator$;