UNPKG

@marblejs-contrib/middleware-joi

Version:

A joi validation middleware for Marble.js

29 lines (28 loc) 1.64 kB
"use strict"; /* 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$;