lynx-framework
Version:
lynx is a NodeJS framework for Web Development, based on decorators and the async/await support.
213 lines (211 loc) • 11.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Middleware = exports.IsDisabledOn = exports.AsyncVerify = exports.Verify = exports.Name = exports.MultipartForm = exports.API = exports.Body = exports.PATCH = exports.DELETE = exports.PUT = exports.POST = exports.GET = exports.Route = void 0;
var http_verb_1 = require("./http-verb");
var routes = [];
/**
* Decorator to set the base route of a controller.
* @param path the route path for the controller.
*/
function Route(path) {
return function (target) {
target.controllerPath = path;
target.routes = routes;
routes = [];
};
}
exports.Route = Route;
function setTarget(_, type, path, method) {
routes.push({
type: type,
path: path,
method: method,
body: undefined,
isAPI: false,
isMultipartForm: false,
verifiers: [],
isDisabledOn: undefined
});
}
function setBody(_, name, schema) {
if (!routes)
return;
routes[routes.length - 1].body = {
name: name,
schema: schema
};
}
function setApi(_) {
if (!routes)
return;
routes[routes.length - 1].isAPI = true;
}
function setMultipartForm(_) {
if (!routes)
return;
routes[routes.length - 1].isMultipartForm = true;
}
function setName(name) {
if (!routes)
return;
routes[routes.length - 1].name = name;
}
function setVerify(_, func) {
if (!routes)
return;
routes[routes.length - 1].verifiers.push({ fun: func, isAsync: false });
}
function setAsyncVerify(_, func) {
if (!routes)
return;
routes[routes.length - 1].verifiers.push({ fun: func, isAsync: true });
}
function setIsDisabledOn(_, func) {
if (!routes)
return;
routes[routes.length - 1].isDisabledOn = func;
}
/**
* Set the decorated method to a GET endpoint with the specified path.
* @param path the endpoint path
*/
function GET(path) {
return function (target, method, _) {
setTarget(target, http_verb_1.HttpVerb.GET, path, method);
};
}
exports.GET = GET;
/**
* Set the decorated method to a POST endpoint with the specified path.
* @param path the endpoint path
*/
function POST(path) {
return function (target, method, _) {
setTarget(target, http_verb_1.HttpVerb.POST, path, method);
};
}
exports.POST = POST;
/**
* Set the decorated method to a PUT endpoint with the specified path.
* @param path the endpoint path
*/
function PUT(path) {
return function (target, method, _) {
setTarget(target, http_verb_1.HttpVerb.PUT, path, method);
};
}
exports.PUT = PUT;
/**
* Set the decorated method to a DELETE endpoint with the specified path.
* @param path the endpoint path
*/
function DELETE(path) {
return function (target, method, _) {
setTarget(target, http_verb_1.HttpVerb.DELETE, path, method);
};
}
exports.DELETE = DELETE;
/**
* Set the decorated method to a PATH endpoint with the specified path.
* @param path the endpoint path
*/
function PATCH(path) {
return function (target, method, _) {
setTarget(target, http_verb_1.HttpVerb.PATCH, path, method);
};
}
exports.PATCH = PATCH;
/**
* Add to the decorated method a body to be injected. The body will be validated
* using the specified schema.
* @param name the name of the argument in the method to map the body
* @param schema a JOI schema to validate the body object
*/
function Body(name, schema) {
return function (target, _, __) {
setBody(target, name, schema);
};
}
exports.Body = Body;
/**
* Set the decorated method to an API endpoints.
* In this way, the returned value of the method will be encapsulated in a
* standard API envelope and serialized to JSON using the Lynx serialization system.
*/
function API() {
return function (target, _, __) {
setApi(target);
};
}
exports.API = API;
/**
* Set the decorated method to accept MultipartForm requested.
*/
function MultipartForm() {
return function (target, _, __) {
setMultipartForm(target);
};
}
exports.MultipartForm = MultipartForm;
/**
* Add to the decorated method a route name, in order to easely generate redirect
* or, more general, the execution of the `route` method.
* @param name the name of the route
*/
function Name(name) {
return function (_, __, ___) {
setName(name);
};
}
exports.Name = Name;
/**
* Add to the decorated method a verification function that will be executed
* BEFORE the route. The function must NOT be an async function, and it shell
* return a boolean value. If true is returned, the method is then executed.
* This method is fundamental to implement authorization to a single endpoint.
* NOTE: this is the sync version of the AsyncVerify decorator.
* @param func the verification function to be executed. It must NOT be an async function, and return a boolean value.
*/
function Verify(func) {
return function (target, _, __) {
setVerify(target, func);
};
}
exports.Verify = Verify;
/**
* Add to the decorated method a verification function that will be executed
* BEFORE the route. The function must NOT be an async function, and it shell
* return a boolean value. If true is returned, the method is then executed.
* This method is fundamental to implement authorization to a single endpoint.
* NOTE: this is the async version of the Verify decorator.
* @param func the verification function to be executed. It MUST BE an async function, and return a boolean value.
*/
function AsyncVerify(func) {
return function (target, _, __) {
setAsyncVerify(target, func);
};
}
exports.AsyncVerify = AsyncVerify;
/**
* Add to the decorated method a "disabled" function, that is verified at startup
* time. If the function return a truly value, the decorated method is not registered
* as an endpoint.
* @param func the disabling function to be executed. It shall return a boolean value.
*/
function IsDisabledOn(func) {
return function (target, _, __) {
setIsDisabledOn(target, func);
};
}
exports.IsDisabledOn = IsDisabledOn;
/**
* Add to the decorated class a path to be executed as middleware.
* @param path the endpoint path
*/
function Middleware(path) {
return function (target) {
target.middlewarePath = path;
};
}
exports.Middleware = Middleware;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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R0FLRztBQUNILFNBQWdCLElBQUksQ0FBQyxJQUFZLEVBQUUsTUFBVztJQUMxQyxPQUFPLFVBQUMsTUFBVyxFQUFFLENBQU0sRUFBRSxFQUFPO1FBQ2hDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFKRCxvQkFJQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixHQUFHO0lBQ2YsT0FBTyxVQUFDLE1BQVcsRUFBRSxDQUFNLEVBQUUsRUFBTztRQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUpELGtCQUlDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhO0lBQ3pCLE9BQU8sVUFBQyxNQUFXLEVBQUUsQ0FBTSxFQUFFLEVBQU87UUFDaEMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUpELHNDQUlDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLElBQUksQ0FBQyxJQUFZO0lBQzdCLE9BQU8sVUFBQyxDQUFNLEVBQUUsRUFBTyxFQUFFLEdBQVE7UUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUNOLENBQUM7QUFKRCxvQkFJQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixNQUFNLENBQUMsSUFBYztJQUNqQyxPQUFPLFVBQUMsTUFBVyxFQUFFLENBQU0sRUFBRSxFQUFPO1FBQ2hDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUpELHdCQUlDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFjO0lBQ3RDLE9BQU8sVUFBQyxNQUFXLEVBQUUsQ0FBTSxFQUFFLEVBQU87UUFDaEMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBSkQsa0NBSUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFjO0lBQ3ZDLE9BQU8sVUFBQyxNQUFXLEVBQUUsQ0FBTSxFQUFFLEVBQU87UUFDaEMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBSkQsb0NBSUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixVQUFVLENBQUMsSUFBWTtJQUNuQyxPQUFPLFVBQUMsTUFBVztRQUNmLE1BQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFKRCxnQ0FJQyIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlUm9vdCI6IiJ9