UNPKG

@nestjs/swagger

Version:

Nest - modern, fast, powerful node.js web framework (@swagger)

37 lines (36 loc) 1.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); const lodash_1 = require("lodash"); const constants_1 = require("../constants"); const is_body_parameter_util_1 = require("../utils/is-body-parameter.util"); class ParametersMetadataMapper { constructor(modelPropertiesAccessor) { this.modelPropertiesAccessor = modelPropertiesAccessor; } transformModelToProperties(parameters) { const properties = lodash_1.flatMap(parameters, (param) => { if (!param || param.type === Object) { return undefined; } if (param.name) { return param; } if (is_body_parameter_util_1.isBodyParameter(param)) { const isCtor = param.type && shared_utils_1.isFunction(param.type); const name = isCtor ? param.type.name : param.type; return Object.assign(Object.assign({}, param), { name }); } const { prototype } = param.type; const modelProperties = this.modelPropertiesAccessor.getModelProperties(prototype); return modelProperties.map(key => this.mergeImplicitWithExplicit(key, prototype, param)); }); return properties.filter(lodash_1.identity); } mergeImplicitWithExplicit(key, prototype, param) { const reflectedParam = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, prototype, key) || {}; return Object.assign(Object.assign(Object.assign({}, param), reflectedParam), { name: reflectedParam.name || key }); } } exports.ParametersMetadataMapper = ParametersMetadataMapper;