UNPKG

@marblejs/middleware-joi

Version:

A joi validation middleware for Marble.js

28 lines (27 loc) 1.57 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 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)); };