UNPKG

@buka/nestjs-type-helper

Version:
103 lines (102 loc) 5.37 kB
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; (function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "ramda", "@nestjs/swagger/dist/services/model-properties-accessor", "@nestjs/swagger/dist/constants", "@nestjs/swagger/dist/plugin/plugin-constants", "@nestjs/swagger/dist/type-helpers/mapped-types.utils", "@nestjs/swagger", "@nestjs/common/utils/shared.utils", "@nestjs/swagger/dist/utils/is-built-in-type.util"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMetadataType = exports.overridePluginMetadata = exports.getMetadata = exports.getMetadataOfDecorator = exports.cloneMetadata = exports.cloneSwaggerPluginMetadataFactory = void 0; const R = __importStar(require("ramda")); const model_properties_accessor_1 = require("@nestjs/swagger/dist/services/model-properties-accessor"); const constants_1 = require("@nestjs/swagger/dist/constants"); const plugin_constants_1 = require("@nestjs/swagger/dist/plugin/plugin-constants"); const mapped_types_utils_1 = require("@nestjs/swagger/dist/type-helpers/mapped-types.utils"); const swagger_1 = require("@nestjs/swagger"); const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); const is_built_in_type_util_1 = require("@nestjs/swagger/dist/utils/is-built-in-type.util"); const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor(); /** * 克隆 @nestjs/swagger Plugin 添加的元数据 */ exports.cloneSwaggerPluginMetadataFactory = mapped_types_utils_1.clonePluginMetadataFactory; function cloneMetadata(target, source, keys) { (0, exports.cloneSwaggerPluginMetadataFactory)(target, source.prototype, (metadata) => R.pick(keys, metadata)); keys.forEach((propertyKey) => { const metadata = getMetadataOfDecorator(source, propertyKey); const decoratorFactory = (0, swagger_1.ApiProperty)(metadata); decoratorFactory(target.prototype, propertyKey); }); } exports.cloneMetadata = cloneMetadata; function getMetadataOfDecorator(classRef, propertyKey) { if (propertyKey) { return Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, propertyKey); } const props = modelPropertiesAccessor .getModelProperties(classRef.prototype); return R.fromPairs(props.map((prop) => [ prop, Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, prop), ])); } exports.getMetadataOfDecorator = getMetadataOfDecorator; function getMetadataOfPlugin(classRef, propertyKey) { const propsInPlugin = typeof classRef[plugin_constants_1.METADATA_FACTORY_NAME] === 'function' ? classRef[plugin_constants_1.METADATA_FACTORY_NAME]() : {}; if (propertyKey) return propsInPlugin[propertyKey]; return propsInPlugin; } function getMetadata(classRef, propertyKey) { const propsInDecorator = getMetadataOfDecorator(classRef); const propsInPlugin = getMetadataOfPlugin(classRef); const metadataMap = R.mergeRight(propsInPlugin, propsInDecorator); if (propertyKey) return metadataMap[propertyKey]; return metadataMap; } exports.getMetadata = getMetadata; /** * Set @ApiProperty() to all properties of the class. */ function overridePluginMetadata(classRef, props) { classRef[plugin_constants_1.METADATA_FACTORY_NAME] = () => props; } exports.overridePluginMetadata = overridePluginMetadata; function getMetadataType(metadata) { if ((0, shared_utils_1.isFunction)(metadata.type) && metadata.type.name === 'type') { return getMetadataType(metadata.type()); } else if ((0, shared_utils_1.isFunction)(metadata.type) && (0, is_built_in_type_util_1.isBuiltInType)(metadata.type)) { return metadata.type.name.toLowerCase(); } return metadata.type; } exports.getMetadataType = getMetadataType; });