dinoloop-es8
Version:
A lightweight REST API Library for building scalable Node.js server-side applications powered by Typescript
146 lines • 11.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const lib_1 = require("../lib");
const constants_1 = require("../constants");
const utility_1 = require("../utility");
const exceptions_1 = require("../builtin/exceptions");
class AttributeMetadata {
/**
* @Throws InvalidRouteException
*/
static defineHttpVerbMetadata(route, verb, target, property) {
if (utility_1.DataUtility.isUndefinedOrNull(route)) {
throw new exceptions_1.InvalidRouteException(route, verb, property, target.constructor.name);
}
lib_1.Reflector.defineMetadata(verb, route, target.constructor.prototype, property);
}
}
// we are creating an array of parameter values and saving it to metadata
/**
* @Throws InvalidArgumentException
*/
AttributeMetadata.parse = (cb, data, isQueryParam) => {
return (target, propertyKey, parameterIndex) => {
let args = utility_1.FunctionUtility.getParamNames(target[propertyKey]);
let parameterKey = args[parameterIndex];
if (!utility_1.DataUtility.isFunction(cb)) {
throw new exceptions_1.InvalidArgumentException(cb, `Controller: ${target.constructor.name}, Action: ${propertyKey}, Key: ${parameterKey}`);
}
// get already added metadata
let meta = lib_1.Reflector.getMetadata(constants_1.Attribute.parse, target.constructor.prototype, propertyKey);
const parseAttribute = {
handler: cb,
key: parameterKey,
controller: target,
action: propertyKey,
data: data,
isQueryParam: isQueryParam,
paramIndex: parameterIndex
};
if (!utility_1.DataUtility.isUndefinedOrNull(meta)) {
meta.push(parseAttribute);
// rewrite metadata by adding it to existing array
lib_1.Reflector.defineMetadata(constants_1.Attribute.parse, meta, target.constructor.prototype, propertyKey);
}
else {
// must be set as array for first save
lib_1.Reflector.defineMetadata(constants_1.Attribute.parse, [parseAttribute], target.constructor.prototype, propertyKey);
}
};
};
AttributeMetadata.sendsResponse = () => {
return (target, propertyKey) => {
lib_1.Reflector.defineMetadata(constants_1.Attribute.sendsResponse, 'sendsResponse', target.constructor.prototype, propertyKey);
};
};
AttributeMetadata.asyncAttr = () => {
return (target, propertyKey) => {
lib_1.Reflector.defineMetadata(constants_1.Attribute.asyncAttr, 'asyncAttr', target.constructor.prototype, propertyKey);
};
};
/**
* @Throws InvalidRouteException
*/
AttributeMetadata.httpGet = (route) => {
return (target, propertyKey) => {
AttributeMetadata
.defineHttpVerbMetadata(route, constants_1.Attribute.httpGet, target, propertyKey);
};
};
/**
* @Throws InvalidRouteException
*/
AttributeMetadata.httpPost = (route) => {
return (target, propertyKey) => {
AttributeMetadata
.defineHttpVerbMetadata(route, constants_1.Attribute.httpPost, target, propertyKey);
};
};
/**
* @Throws InvalidRouteException
*/
AttributeMetadata.httpDelete = (route) => {
return (target, propertyKey) => {
AttributeMetadata
.defineHttpVerbMetadata(route, constants_1.Attribute.httpDelete, target, propertyKey);
};
};
/**
* @Throws InvalidRouteException
*/
AttributeMetadata.httpPatch = (route) => {
return (target, propertyKey) => {
AttributeMetadata
.defineHttpVerbMetadata(route, constants_1.Attribute.httpPatch, target, propertyKey);
};
};
/**
* @Throws InvalidRouteException
*/
AttributeMetadata.httpPut = (route) => {
return (target, propertyKey) => {
AttributeMetadata
.defineHttpVerbMetadata(route, constants_1.Attribute.httpPut, target, propertyKey);
};
};
/**
* @Throws InvalidRouteException
*/
AttributeMetadata.httpHead = (route) => {
return (target, propertyKey) => {
AttributeMetadata
.defineHttpVerbMetadata(route, constants_1.Attribute.httpHead, target, propertyKey);
};
};
/**
* @Throws InvalidRouteException
*/
AttributeMetadata.httpAll = (route) => {
return (target, propertyKey) => {
AttributeMetadata
.defineHttpVerbMetadata(route, constants_1.Attribute.httpAll, target, propertyKey);
};
};
// handle null/undefined values, cleanse the data and pass onto inner methods
/**
* @Throws InvalidRouteException
*/
AttributeMetadata.controller = (prefix, attr) => {
return (target, propertyKey) => {
let attrs = utility_1.DataUtility.isUndefinedOrNull(attr) ? {} : attr;
if (utility_1.DataUtility.isUndefinedOrNull(prefix)) {
throw new exceptions_1.InvalidRouteException(prefix, undefined, undefined, target.constructor.name);
}
let val = {
prefix: prefix,
middlewares: utility_1.DataUtility.isUndefinedOrNull(attrs.middlewares) ? [] : attrs.middlewares,
filters: utility_1.DataUtility.isUndefinedOrNull(attrs.filters) ? [] : attrs.filters,
exceptions: utility_1.DataUtility.isUndefinedOrNull(attrs.exceptions) ? [] : attrs.exceptions,
result: utility_1.DataUtility.isUndefinedOrNull(attrs.result) ? [] : attrs.result,
use: utility_1.DataUtility.isUndefinedOrNull(attrs.use) ? [] : attrs.use
};
lib_1.Reflector.defineMetadata(constants_1.Attribute.controller, val, target.prototype);
};
};
exports.AttributeMetadata = AttributeMetadata;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZHVsZXMvbWV0YWRhdGEvYXR0cmlidXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsZ0NBQW1DO0FBQ25DLDRDQUF5QztBQUN6Qyx3Q0FBMEQ7QUFDMUQsc0RBRytCO0FBUS9CO0lBRUk7O09BRUc7SUFDSyxNQUFNLENBQUMsc0JBQXNCLENBQ2pDLEtBQXNCLEVBQ3RCLElBQVksRUFDWixNQUFXLEVBQ1gsUUFBZ0I7UUFFaEIsSUFBSSxxQkFBVyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxrQ0FBcUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUN2QyxRQUFRLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQztRQUNELGVBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQzs7QUFFRCx5RUFBeUU7QUFDekU7O0dBRUc7QUFDSSx1QkFBSyxHQUFHLENBQUMsRUFBaUIsRUFBRSxJQUFTLEVBQUUsWUFBcUIsRUFDSSxFQUFFO0lBRXJFLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBRSxjQUFzQixFQUFRLEVBQUU7UUFFdEUsSUFBSSxJQUFJLEdBQUcseUJBQWUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxxQkFBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM3QixNQUFNLElBQUkscUNBQXdCLENBQUMsRUFBRSxFQUNqQyxlQUFlLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxhQUFhLFdBQVcsVUFBVSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQy9GO1FBRUQsNkJBQTZCO1FBQzdCLElBQUksSUFBSSxHQUFzQixlQUFTLENBQUMsV0FBVyxDQUFDLHFCQUFTLENBQUMsS0FBSyxFQUMvRCxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUvQyxNQUFNLGNBQWMsR0FBb0I7WUFDcEMsT0FBTyxFQUFFLEVBQUU7WUFDWCxHQUFHLEVBQUUsWUFBWTtZQUNqQixVQUFVLEVBQUUsTUFBTTtZQUNsQixNQUFNLEVBQUUsV0FBVztZQUNuQixJQUFJLEVBQUUsSUFBSTtZQUNWLFlBQVksRUFBRSxZQUFZO1lBQzFCLFVBQVUsRUFBRSxjQUFjO1NBQzdCLENBQUM7UUFFRixJQUFJLENBQUMscUJBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRTFCLGtEQUFrRDtZQUNsRCxlQUFTLENBQUMsY0FBYyxDQUFDLHFCQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFDMUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDbEQ7YUFBTTtZQUNILHNDQUFzQztZQUN0QyxlQUFTLENBQUMsY0FBYyxDQUFDLHFCQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQ3RELE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0wsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFBO0FBRU0sK0JBQWEsR0FBRyxHQUErQyxFQUFFO0lBQ3BFLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBUSxFQUFFO1FBQzlDLGVBQVMsQ0FBQyxjQUFjLENBQUMscUJBQVMsQ0FBQyxhQUFhLEVBQzVDLGVBQWUsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUM7QUFDTixDQUFDLENBQUE7QUFFTSwyQkFBUyxHQUFHLEdBQStDLEVBQUU7SUFDaEUsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFRLEVBQUU7UUFDOUMsZUFBUyxDQUFDLGNBQWMsQ0FBQyxxQkFBUyxDQUFDLFNBQVMsRUFDeEMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQTtBQUVEOztHQUVHO0FBQ0kseUJBQU8sR0FBRyxDQUFDLEtBQXNCLEVBQThDLEVBQUU7SUFDcEYsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFRLEVBQUU7UUFDOUMsaUJBQWlCO2FBQ1osc0JBQXNCLENBQUMsS0FBSyxFQUFFLHFCQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMvRSxDQUFDLENBQUM7QUFDTixDQUFDLENBQUE7QUFFRDs7R0FFRztBQUNJLDBCQUFRLEdBQUcsQ0FBQyxLQUFzQixFQUE4QyxFQUFFO0lBQ3JGLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBUSxFQUFFO1FBQzlDLGlCQUFpQjthQUNaLHNCQUFzQixDQUFDLEtBQUssRUFBRSxxQkFBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEYsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSSw0QkFBVSxHQUFHLENBQUMsS0FBc0IsRUFBOEMsRUFBRTtJQUN2RixPQUFPLENBQUMsTUFBVyxFQUFFLFdBQW1CLEVBQVEsRUFBRTtRQUM5QyxpQkFBaUI7YUFDWixzQkFBc0IsQ0FBQyxLQUFLLEVBQUUscUJBQVMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2xGLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQTtBQUVEOztHQUVHO0FBQ0ksMkJBQVMsR0FBRyxDQUFDLEtBQXNCLEVBQThDLEVBQUU7SUFDdEYsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFRLEVBQUU7UUFDOUMsaUJBQWlCO2FBQ1osc0JBQXNCLENBQUMsS0FBSyxFQUFFLHFCQUFTLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRixDQUFDLENBQUM7QUFDTixDQUFDLENBQUE7QUFFRDs7R0FFRztBQUNJLHlCQUFPLEdBQUcsQ0FBQyxLQUFzQixFQUE4QyxFQUFFO0lBQ3BGLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUIsRUFBUSxFQUFFO1FBQzlDLGlCQUFpQjthQUNaLHNCQUFzQixDQUFDLEtBQUssRUFBRSxxQkFBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSSwwQkFBUSxHQUFHLENBQUMsS0FBc0IsRUFBOEMsRUFBRTtJQUNyRixPQUFPLENBQUMsTUFBVyxFQUFFLFdBQW1CLEVBQVEsRUFBRTtRQUM5QyxpQkFBaUI7YUFDWixzQkFBc0IsQ0FBQyxLQUFLLEVBQUUscUJBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hGLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQTtBQUVEOztHQUVHO0FBQ0kseUJBQU8sR0FBRyxDQUFDLEtBQXNCLEVBQThDLEVBQUU7SUFDcEYsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFRLEVBQUU7UUFDOUMsaUJBQWlCO2FBQ1osc0JBQXNCLENBQUMsS0FBSyxFQUFFLHFCQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMvRSxDQUFDLENBQUM7QUFDTixDQUFDLENBQUE7QUFFRCw2RUFBNkU7QUFDN0U7O0dBRUc7QUFDSSw0QkFBVSxHQUFHLENBQUMsTUFBYyxFQUFFLElBQTJCLEVBQ2pCLEVBQUU7SUFDN0MsT0FBTyxDQUFDLE1BQVcsRUFBRSxXQUFtQixFQUFRLEVBQUU7UUFDOUMsSUFBSSxLQUFLLEdBQUcscUJBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFNUQsSUFBSSxxQkFBVyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxrQ0FBcUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUM3QyxTQUFTLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksR0FBRyxHQUFpQztZQUNwQyxNQUFNLEVBQUUsTUFBTTtZQUNkLFdBQVcsRUFBRSxxQkFBVyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVztZQUN0RixPQUFPLEVBQUUscUJBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDMUUsVUFBVSxFQUFFLHFCQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQ25GLE1BQU0sRUFBRSxxQkFBVyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN2RSxHQUFHLEVBQUUscUJBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7U0FDakUsQ0FBQztRQUNGLGVBQVMsQ0FBQyxjQUFjLENBQUMscUJBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRSxDQUFDLENBQUM7QUFDTixDQUFDLENBQUE7QUE1S0wsOENBNktDIn0=