@buka/nestjs-type-helper
Version:
An easy to use nestjs config module
103 lines (102 loc) • 5.37 kB
JavaScript
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;
});