bpframework
Version:
Web framework like java springboot and springcloud
105 lines • 3.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports._RequestParamDo = exports.RequestParam = void 0;
require("reflect-metadata");
const febs = require("febs");
const RequestMapping_1 = require("./RequestMapping");
var queryString = require('../../../utils/qs/dist');
const _RequestParamMetadataKey = Symbol('_RequestParamMetadataKey');
function RequestParam(cfg) {
if (typeof cfg === 'string') {
cfg = { name: cfg };
}
if (febs.string.isEmpty(cfg.name)) {
throw new Error('@RequestParam need \'name\' parameter');
}
cfg.required = febs.utils.isNull(cfg.required) ? true : cfg.required;
return (target, propertyKey, parameterIndex) => {
let existingParameters = Reflect.getOwnMetadata(_RequestParamMetadataKey, target, propertyKey) || [];
existingParameters.push({
name: cfg.name,
required: cfg.required,
defaultValue: cfg.defaultValue,
castType: cfg.castType,
parameterIndex,
});
Reflect.defineMetadata(_RequestParamMetadataKey, existingParameters, target, propertyKey);
(0, RequestMapping_1._RequestMappingPushParams)(target, propertyKey, {
name: cfg.name,
required: cfg.required,
defaultValue: cfg.defaultValue,
castType: cfg.castType,
parameterIndex,
type: 'rp'
});
};
}
exports.RequestParam = RequestParam;
function _RequestParamDo(target, propertyKey, args, requestMapping) {
let parameters = Reflect.getOwnMetadata(_RequestParamMetadataKey, target, propertyKey);
if (parameters) {
let qs = '';
for (let parameter of parameters) {
let val = args[parameter.parameterIndex];
if (parameter.required) {
if (parameter.parameterIndex >= args.length || febs.utils.isNull(val)) {
if (!parameter.defaultValue) {
throw new febs.exception("@RequestParam Missing required argument.", febs.exception.PARAM, __filename, __line, __column);
}
}
}
if (febs.utils.isNull(val)) {
val = parameter.defaultValue;
}
let obj = {};
obj[parameter.name] = val;
if (qs.length > 0) {
qs += '&';
}
qs += queryString.stringify(obj);
}
if (qs.length > 0) {
if (Array.isArray(requestMapping.path)) {
if (requestMapping.path.length > 0) {
requestMapping.qs = [];
}
for (const key in requestMapping.path) {
let p = requestMapping.path[key];
let i = p.indexOf('?');
if (i == p.length - 1) {
p += qs;
}
else if (i < 0) {
p += '?' + qs;
}
else {
p += '&' + qs;
}
requestMapping.qs.push(p);
}
}
else {
let p = requestMapping.path;
let i = p.indexOf('?');
if (i == p.length - 1) {
p += qs;
}
else if (i < 0) {
p += '?' + qs;
}
else {
p += '&' + qs;
}
requestMapping.qs = p;
}
}
if (!requestMapping.qs) {
requestMapping.qs = requestMapping.path;
}
}
else {
requestMapping.qs = requestMapping.path;
}
}
exports._RequestParamDo = _RequestParamDo;
//# sourceMappingURL=RequestParam.js.map