@marblejs/middleware-joi
Version:
A joi validation middleware for Marble.js
28 lines (27 loc) • 1.57 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 core_1 = require("@marblejs/core");
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
const validator_schema_1 = require("./validator.schema");
const validateSource = (rules, options) => (req) => rxjs_1.from(rules.keys()).pipe(operators_1.mergeMap(rule => rxjs_1.of(req[rule]).pipe(operators_1.flatMap(item => rxjs_1.from(Joi.validate(item || {}, rules.get(rule), options)).pipe(operators_1.catchError((err) => {
const message = err.details[0].message;
return rxjs_1.throwError(new core_1.HttpError(message, core_1.HttpStatus.BAD_REQUEST));
}))), operators_1.map(result => (req[rule] = result)))), operators_1.toArray(), operators_1.mapTo(req));
/**
* @deprecated [#1] since version 2.0,
* [#2] use @marblejs/middlware-io instead,
*/
exports.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 rxjs_1.throwError(result.error);
}
return req$.pipe(operators_1.switchMap(validateSource(rules, options)), operators_1.map(req => req));
};