swagger-decorator
Version:
Decorator for Koa2 and koa-router, Auto-Generate Swagger Docs
221 lines (181 loc) • 5.23 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.apiRequestMapping = apiRequestMapping;
exports.apiDescription = apiDescription;
exports.pathParameter = pathParameter;
exports.queryParameter = queryParameter;
exports.bodyParameter = bodyParameter;
exports.apiResponse = apiResponse;
var _singleton = require("../internal/singleton");
var _definitions = require("./definitions");
/**
* Description 设置请求路径
* @param method
* @param path
* @returns {Function}
*/
function apiRequestMapping(method, path) {
return function (target, key, descriptor) {
var apiKey = target.name + "-" + key;
// 设置请求方法
descriptor.value.method = method;
// 设置请求路径
descriptor.value.path = path;
_initializeInnerAPIObject(target, key, descriptor);
_singleton.innerAPIObject[apiKey].requestMapping = {
method: method,
path: path
};
return descriptor;
};
}
/**
* Description 接口描述
* @param description
* @param produces
* @returns {Function}
*/
function apiDescription(description) {
var produces = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ["application/json"];
return function (target, key, descriptor) {
var apiKey = target.name + "-" + key;
_initializeInnerAPIObject(target, key, descriptor);
_singleton.innerAPIObject[apiKey].description = {
description: description,
produces: produces
};
return descriptor;
};
}
/**
* 路径参数
* @param name
* @param description
* @param type
* @param defaultValue
* @returns {Function}
*/
function pathParameter(_ref) {
var name = _ref.name,
description = _ref.description,
type = _ref.type,
defaultValue = _ref.defaultValue;
return function (target, key, descriptor) {
var apiKey = target.name + "-" + key;
_initializeInnerAPIObject(target, key, descriptor);
_singleton.innerAPIObject[apiKey].pathParameter || (_singleton.innerAPIObject[apiKey].pathParameter = []);
_singleton.innerAPIObject[apiKey].pathParameter.splice(0, 0, {
name: name,
description: description,
type: type,
in: "path",
required: true,
default: defaultValue
});
return descriptor;
};
}
/**
* Description 查询参数相关注释
* @param name
* @param description
* @param required
* @param type
* @param items
* @param defaultValue
* @returns {Function}
*/
function queryParameter(_ref2) {
var name = _ref2.name,
description = _ref2.description,
required = _ref2.required,
type = _ref2.type,
items = _ref2.items,
defaultValue = _ref2.defaultValue;
return function (target, key, descriptor) {
var apiKey = target.name + "-" + key;
_initializeInnerAPIObject(target, key, descriptor);
_singleton.innerAPIObject[apiKey].queryParameter || (_singleton.innerAPIObject[apiKey].queryParameter = []);
_singleton.innerAPIObject[apiKey].queryParameter.splice(0, 0, {
name: name,
description: description,
required: required,
type: type,
items: items,
in: "query",
default: defaultValue
});
return descriptor;
};
}
/**
* Description
* @param name
* @param description
* @param required
* @param schema
* @returns {Function}
*/
function bodyParameter(_ref3) {
var name = _ref3.name,
description = _ref3.description,
required = _ref3.required,
schema = _ref3.schema;
return function (target, key, descriptor) {
var apiKey = target.name + "-" + key;
_initializeInnerAPIObject(target, key, descriptor);
_singleton.innerAPIObject[apiKey].bodyParameter || (_singleton.innerAPIObject[apiKey].bodyParameter = []);
_singleton.innerAPIObject[apiKey].bodyParameter.splice(0, 0, {
name: name,
description: description,
required: required,
schema: schema,
in: "body"
});
// 根据传入的 Schema 构建定义
(0, _definitions.buildDefinitions)(schema);
return descriptor;
};
}
/**
* Description 设置请求响应
* @param statusCode
* @param description
* @param schema
* @returns {Function}
*/
function apiResponse(statusCode, description, schema) {
return function (target, key, descriptor) {
var apiKey = target.name + "-" + key;
_initializeInnerAPIObject(target, key, descriptor);
_singleton.innerAPIObject[apiKey].responses || (_singleton.innerAPIObject[apiKey].responses = []);
_singleton.innerAPIObject[apiKey].responses.splice(0, 0, {
statusCode: statusCode,
description: description,
schema: schema
});
// 根据传入的 Schema 构建定义
(0, _definitions.buildDefinitions)(schema);
return descriptor;
};
}
/**
* Description 初始化内部存放 API 信息的对象
* @param target
* @param key
* @param descriptor
* @private
*/
function _initializeInnerAPIObject(target, key, descriptor) {
var apiKey = target.name + "-" + key;
if (!_singleton.innerAPIObject[apiKey]) {
_singleton.innerAPIObject[apiKey] = {};
_singleton.innerAPIObject[apiKey].instance = {
target: target,
key: key,
descriptor: descriptor
};
}
}