swagger-decorator
Version:
Decorator for Koa2 and koa-router, Auto-Generate Swagger Docs
121 lines (90 loc) • 3.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _keys = require("babel-runtime/core-js/object/keys");
var _keys2 = _interopRequireDefault(_keys);
var _getIterator2 = require("babel-runtime/core-js/get-iterator");
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _assign = require("babel-runtime/core-js/object/assign");
var _assign2 = _interopRequireDefault(_assign);
exports.buildDefinitions = buildDefinitions;
var _swagger = require("./template/swagger.json");
var _type = require("../entity/type");
var _singleton = require("../internal/singleton");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Description 构建实例定义
* @private
*/
function buildDefinitions(Class) {
// 为了避免部分情况下传入的是 Class 数组,因此首先进行递归处理
while (Array.isArray(Class)) {
Class = Class[0];
}
// 初始化 Swagger JSON 中的 definitions 字段
_swagger.swaggerJSON["definitions"] || (_swagger.swaggerJSON["definitions"] = {});
// 如果非类对象,直接返回
if (!Class || !(typeof Class === "function")) {
return;
}
// 类型名
var entityName = Class.name;
// 如果已经构建过,则直接返回
if (_swagger.swaggerJSON["definitions"][entityName]) {
return;
}
// 从实体类中推导出属性定义
var properties = (0, _type.inferenceEntityProperties)(Class, _singleton.innerEntityObject);
// 重构 properties
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)((0, _keys2.default)(properties)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var propertyName = _step.value;
var property = properties[propertyName];
// 截止到这里 type 在还是存放的原始用户输入的数据
if (Array.isArray(property.type)) {
var originType = property.type;
property.type = "array";
var realType = originType[0];
property.items = typeof realType === "function" ? {
$ref: "#/definitions/" + originType[0].name
} : {
type: "" + originType[0]
};
}
// 如果为函数类型
if (typeof property.type === "function") {
var _originType = property.type;
property.type = "object";
property["$ref"] = "#/definitions/" + _originType.name;
}
// 重定义默认属性
property["default"] = property.defaultValue;
// 移除不必要的属性
delete property["primaryKey"];
delete property["allowNull"];
delete property["defaultValue"];
}
// 设置原属性的定义
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
_swagger.swaggerJSON["definitions"][entityName] = (0, _assign2.default)({}, _singleton.innerEntityObject[entityName], {
properties: properties,
type: "object"
});
}