koa-springboot
Version:
springboot-like koa
147 lines (146 loc) • 4.78 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const routerManager_1 = require("./routerManager");
const application_1 = require("./application");
const constants_1 = require("./constants");
function ControllerScan(...paths) {
return function (target, propertyKey) {
application_1.default.initParams.controllerPath = paths;
return target;
};
}
exports.ControllerScan = ControllerScan;
function ModelScan(...paths) {
return function (target, propertyKey) {
application_1.default.initParams.modelPath = paths;
return target;
};
}
exports.ModelScan = ModelScan;
function KoaApplication(constructor) {
return application_1.default;
}
exports.KoaApplication = KoaApplication;
function Controller(constructor) {
return constructor;
}
exports.Controller = Controller;
function doRequestMapping(target, action, value, method) {
let controller = target;
if (action) {
controller = target.constructor;
if (value) {
const config = {
pattern: value,
action,
};
if (method) {
config.method = method;
}
routerManager_1.default.setRouteConfig(controller, config);
}
}
else {
routerManager_1.default.setControllerConfig(controller, { baseUrl: value });
}
return controller;
}
function RequestMapping(value, method, rMethod) {
if (typeof value !== 'function' && typeof value !== 'object') {
return function (target, action) {
return doRequestMapping(target, action, value, method);
};
}
const target = value;
const action = method;
return doRequestMapping(target, action, '/', rMethod);
}
exports.RequestMapping = RequestMapping;
function mappingWrapper(value = '/', method, rMethod) {
if (typeof value !== 'object') {
return RequestMapping(value, rMethod);
}
else {
return RequestMapping(value, method, rMethod);
}
}
function GetMapping(value = '/', method) {
return mappingWrapper(value, method, constants_1.RequestMethod.GET);
}
exports.GetMapping = GetMapping;
function PostMapping(value = '/', method) {
return mappingWrapper(value, method, constants_1.RequestMethod.POST);
}
exports.PostMapping = PostMapping;
function PutMapping(value = '/', method) {
return mappingWrapper(value, method, constants_1.RequestMethod.PUT);
}
exports.PutMapping = PutMapping;
function DeleteMapping(value = '/', method) {
return mappingWrapper(value, method, constants_1.RequestMethod.DELETE);
}
exports.DeleteMapping = DeleteMapping;
function PatchMapping(value = '/', method) {
return mappingWrapper(value, method, constants_1.RequestMethod.PATCH);
}
exports.PatchMapping = PatchMapping;
function paramDecorator(type, value = '', required = false, defaultValue) {
return function (target, propertyKey, parameterIndex) {
routerManager_1.default.setParamVariable(target.constructor, propertyKey.toString(), {
name: value,
index: parameterIndex,
type,
required,
defaultValue
});
};
}
function PathVariable(name, required = false, defaultValue) {
return paramDecorator('PathVariable', name, required, defaultValue);
}
exports.PathVariable = PathVariable;
function RequestParam(name, required = false, defaultValue) {
return paramDecorator('RequestParam', name, required, defaultValue);
}
exports.RequestParam = RequestParam;
function RequestBody(target, propertyKey, parameterIndex) {
routerManager_1.default.setParamVariable(target.constructor, propertyKey.toString(), {
name: '',
index: parameterIndex,
type: 'RequestBody',
required: false,
});
}
exports.RequestBody = RequestBody;
function ResponseBody(target, action) {
let controller = target;
if (action) {
controller = target.constructor;
const config = {
action,
responseType: 'json'
};
routerManager_1.default.setRouteConfig(controller, config);
}
else {
routerManager_1.default.setControllerConfig(controller, { responseType: 'json' });
return controller;
}
}
exports.ResponseBody = ResponseBody;
function ResponseStatus(responseStatus) {
return function (target, action) {
const config = {
action,
responseStatus,
};
routerManager_1.default.setRouteConfig(target.constructor, config);
};
}
exports.ResponseStatus = ResponseStatus;
function Model(name) {
return function (target, propertyKey) {
routerManager_1.default.setInjectModel(target.constructor, propertyKey, name);
};
}
exports.Model = Model;