UNPKG

swagger-decorator

Version:
118 lines (97 loc) 3.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateEntityUUID = generateEntityUUID; exports.entity = entity; exports.entityProperty = entityProperty; var _singleton = require("../internal/singleton"); var _definitions = require("../swagger/definitions"); /** * Description 生成实体类的唯一标识,这里首先默认使用实体类名作为唯一标识 * @param target * @param key * @param descriptor */ function generateEntityUUID(target, key, descriptor) { return target.constructor.name; } /** * Description 为某个类加上注解,并且创建新的对象以触发内部迭代注解 * @param Class * @returns {*} */ function entity(Class) { new Class(); return Class; } /** * Description 创建某个属性的描述 * @param type 基础类型 self - 表示为自身 * @param description 描述 * @param required 是否为必要参数 * @param defaultValue 默认值 * @param pattern * @param primaryKey 是否为主键 * @returns {Function} */ function entityProperty(_ref) { var _ref$type = _ref.type, type = _ref$type === undefined ? "string" : _ref$type, _ref$description = _ref.description, description = _ref$description === undefined ? "" : _ref$description, _ref$required = _ref.required, required = _ref$required === undefined ? false : _ref$required, _ref$defaultValue = _ref.defaultValue, defaultValue = _ref$defaultValue === undefined ? undefined : _ref$defaultValue, _ref$pattern = _ref.pattern, pattern = _ref$pattern === undefined ? undefined : _ref$pattern, _ref$primaryKey = _ref.primaryKey, primaryKey = _ref$primaryKey === undefined ? false : _ref$primaryKey; return function (target, key, descriptor) { var entityUUID = generateEntityUUID(target, key, descriptor); // 确保实体键存在 _ensure(entityUUID, key); var valueObject = _singleton.innerEntityObject[entityUUID]["properties"][key]; // 判断是否为自身 if (type === "self" || type === undefined) { valueObject.type = target.constructor; } else if (Array.isArray(type) && (type[0] === "self" || type[0] === undefined)) { valueObject.type = [target.constructor]; } else { valueObject.type = type; // 这里动态编译关联的定义项目,需要根据输入的是否为数组来动态提取出具体的实体类或者对象 Array.isArray(type) ? (0, _definitions.buildDefinitions)(type[0]) : (0, _definitions.buildDefinitions)(type); } // 设置描述 valueObject.description = description; // 如果是必须属性,则添加到列表中 if (required) { _singleton.innerEntityObject[entityUUID]["required"].push(key); // 对应地不允许为空 valueObject.allowNull = false; } else { // 允许为空 valueObject.allowNull = true; } // 设置其他属性 valueObject.pattern = pattern; valueObject.defaultValue = defaultValue; valueObject.primaryKey = primaryKey; // 这里需要设置下 writeable 为 true descriptor.writable = true; return descriptor; }; } /** * Description 初始化存储对象 * @param entityUUID 实体唯一标识,目前也就是实体名 * @param property 当前的属性名 * @private */ function _ensure(entityUUID, property) { _singleton.innerEntityObject[entityUUID] || (_singleton.innerEntityObject[entityUUID] = {}); _singleton.innerEntityObject[entityUUID]["required"] || (_singleton.innerEntityObject[entityUUID]["required"] = []); _singleton.innerEntityObject[entityUUID]["properties"] || (_singleton.innerEntityObject[entityUUID]["properties"] = {}); _singleton.innerEntityObject[entityUUID]["properties"][property] || (_singleton.innerEntityObject[entityUUID]["properties"][property] = {}); }