UNPKG

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
"use strict"; 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