UNPKG

@decorators/server

Version:

node decorators - decorators for express library

50 lines 6.99 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ParamValidator = void 0; const di_1 = require("@decorators/di"); const class_transformer_1 = require("class-transformer"); const class_validator_1 = require("class-validator"); const utils_1 = require("../utils"); const errors_1 = require("./errors"); let ParamValidator = exports.ParamValidator = class ParamValidator { async validate(params, args) { for (const [i, arg] of args.entries()) { const validator = params[i].paramValidator; const type = (0, utils_1.isClass)(validator) ? validator : params[i].argType; if ((0, utils_1.isFunction)(validator)) { await this.useFunctionValidator(params[i], arg); } if (this.hasDecorators(type)) { await this.useMetadataValidator(type, params[i], arg); } } } hasDecorators(type) { const metadataStorage = (0, class_validator_1.getMetadataStorage)(); const metadatas = metadataStorage.getTargetValidationMetadatas(type, null, null, null); return metadatas.length > 0; } async useFunctionValidator(meta, arg) { if (await meta.paramValidator(arg)) { return; } throw new errors_1.BadRequestError(`Invalid param "${meta.argName}". "${typeof arg}" received`); } async useMetadataValidator(type, meta, arg) { const instance = (0, class_transformer_1.plainToInstance)(type, arg); const errors = await (0, class_validator_1.validate)(instance, { validationError: { target: false } }); if (errors.length) { throw new errors_1.BadRequestError(`Invalid param "${meta.argName}".`, errors); } } }; exports.ParamValidator = ParamValidator = __decorate([ (0, di_1.Injectable)() ], ParamValidator); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW0tdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvaGVscGVycy9wYXJhbS12YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsdUNBQTRDO0FBQzVDLHlEQUFvRDtBQUNwRCxxREFBK0Q7QUFHL0Qsb0NBQStDO0FBQy9DLHFDQUEyQztBQUdwQyxJQUFNLGNBQWMsNEJBQXBCLE1BQU0sY0FBYztJQUN6QixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQXVCLEVBQUUsSUFBVztRQUNqRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7WUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBQSxlQUFPLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUVoRSxJQUFJLElBQUEsa0JBQVUsRUFBQyxTQUFTLENBQUMsRUFBRTtnQkFDekIsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ2pEO1lBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM1QixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUF3QixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUMzRTtTQUNGO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFnQztRQUNwRCxNQUFNLGVBQWUsR0FBRyxJQUFBLG9DQUFrQixHQUFFLENBQUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLDRCQUE0QixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXZGLE9BQU8sU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFtQixFQUFFLEdBQVE7UUFDOUQsSUFBSSxNQUFPLElBQUksQ0FBQyxjQUEwQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLE9BQU87U0FDUjtRQUVELE1BQU0sSUFBSSx3QkFBZSxDQUN2QixrQkFBa0IsSUFBSSxDQUFDLE9BQU8sT0FBTyxPQUFPLEdBQUcsWUFBWSxDQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFzQixFQUFFLElBQW1CLEVBQUUsR0FBUTtRQUN0RixNQUFNLFFBQVEsR0FBRyxJQUFBLG1DQUFlLEVBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSwwQkFBUSxFQUFDLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFaEYsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2pCLE1BQU0sSUFBSSx3QkFBZSxDQUFDLGtCQUFrQixJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDdkU7SUFDSCxDQUFDO0NBQ0YsQ0FBQTt5QkF6Q1ksY0FBYztJQUQxQixJQUFBLGVBQVUsR0FBRTtHQUNBLGNBQWMsQ0F5QzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0BkZWNvcmF0b3JzL2RpJztcbmltcG9ydCB7IHBsYWluVG9JbnN0YW5jZSB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IGdldE1ldGFkYXRhU3RvcmFnZSwgdmFsaWRhdGUgfSBmcm9tICdjbGFzcy12YWxpZGF0b3InO1xuXG5pbXBvcnQgeyBDbGFzc0NvbnN0cnVjdG9yLCBIYW5kbGVyLCBQYXJhbU1ldGFkYXRhIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNDbGFzcywgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEJhZFJlcXVlc3RFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBhcmFtVmFsaWRhdG9yIHtcbiAgYXN5bmMgdmFsaWRhdGUocGFyYW1zOiBQYXJhbU1ldGFkYXRhW10sIGFyZ3M6IGFueVtdKSB7XG4gICAgZm9yIChjb25zdCBbaSwgYXJnXSBvZiBhcmdzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gcGFyYW1zW2ldLnBhcmFtVmFsaWRhdG9yO1xuICAgICAgY29uc3QgdHlwZSA9IGlzQ2xhc3ModmFsaWRhdG9yKSA/IHZhbGlkYXRvciA6IHBhcmFtc1tpXS5hcmdUeXBlO1xuXG4gICAgICBpZiAoaXNGdW5jdGlvbih2YWxpZGF0b3IpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXNlRnVuY3Rpb25WYWxpZGF0b3IocGFyYW1zW2ldLCBhcmcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oYXNEZWNvcmF0b3JzKHR5cGUpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXNlTWV0YWRhdGFWYWxpZGF0b3IodHlwZSBhcyBDbGFzc0NvbnN0cnVjdG9yLCBwYXJhbXNbaV0sIGFyZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNEZWNvcmF0b3JzKHR5cGU6IEhhbmRsZXIgfCBDbGFzc0NvbnN0cnVjdG9yKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWV0YWRhdGFTdG9yYWdlID0gZ2V0TWV0YWRhdGFTdG9yYWdlKCk7XG4gICAgY29uc3QgbWV0YWRhdGFzID0gbWV0YWRhdGFTdG9yYWdlLmdldFRhcmdldFZhbGlkYXRpb25NZXRhZGF0YXModHlwZSwgbnVsbCwgbnVsbCwgbnVsbCk7XG5cbiAgICByZXR1cm4gbWV0YWRhdGFzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVzZUZ1bmN0aW9uVmFsaWRhdG9yKG1ldGE6IFBhcmFtTWV0YWRhdGEsIGFyZzogYW55KSB7XG4gICAgaWYgKGF3YWl0IChtZXRhLnBhcmFtVmFsaWRhdG9yIGFzIEhhbmRsZXIpKGFyZykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKFxuICAgICAgYEludmFsaWQgcGFyYW0gXCIke21ldGEuYXJnTmFtZX1cIi4gXCIke3R5cGVvZiBhcmd9XCIgcmVjZWl2ZWRgLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVzZU1ldGFkYXRhVmFsaWRhdG9yKHR5cGU6IENsYXNzQ29uc3RydWN0b3IsIG1ldGE6IFBhcmFtTWV0YWRhdGEsIGFyZzogYW55KSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBwbGFpblRvSW5zdGFuY2UodHlwZSwgYXJnKTtcbiAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCB2YWxpZGF0ZShpbnN0YW5jZSwgeyB2YWxpZGF0aW9uRXJyb3I6IHsgdGFyZ2V0OiBmYWxzZSB9IH0pO1xuXG4gICAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoYEludmFsaWQgcGFyYW0gXCIke21ldGEuYXJnTmFtZX1cIi5gLCBlcnJvcnMpO1xuICAgIH1cbiAgfVxufVxuIl19