UNPKG

@nestjs/swagger

Version:

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

35 lines (34 loc) 1.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PartialType = void 0; const mapped_types_1 = require("@nestjs/mapped-types"); const lodash_1 = require("lodash"); const constants_1 = require("../constants"); const decorators_1 = require("../decorators"); const plugin_constants_1 = require("../plugin/plugin-constants"); const model_properties_accessor_1 = require("../services/model-properties-accessor"); const mapped_types_utils_1 = require("./mapped-types.utils"); const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); function PartialType(classRef) { const fields = modelPropertiesAccessor.getModelProperties(classRef.prototype); class PartialTypeClass { constructor() { mapped_types_1.inheritPropertyInitializers(this, classRef); } } mapped_types_1.inheritValidationMetadata(classRef, PartialTypeClass); mapped_types_1.inheritTransformationMetadata(classRef, PartialTypeClass); mapped_types_utils_1.clonePluginMetadataFactory(PartialTypeClass, classRef.prototype, (metadata) => lodash_1.mapValues(metadata, (item) => (Object.assign(Object.assign({}, item), { required: false })))); fields.forEach((key) => { const metadata = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, key) || {}; const decoratorFactory = decorators_1.ApiProperty(Object.assign(Object.assign({}, metadata), { required: false })); decoratorFactory(PartialTypeClass.prototype, key); mapped_types_1.applyIsOptionalDecorator(PartialTypeClass, key); }); if (PartialTypeClass[plugin_constants_1.METADATA_FACTORY_NAME]) { const pluginFields = Object.keys(PartialTypeClass[plugin_constants_1.METADATA_FACTORY_NAME]()); pluginFields.forEach((key) => mapped_types_1.applyIsOptionalDecorator(PartialTypeClass, key)); } return PartialTypeClass; } exports.PartialType = PartialType;