UNPKG

@reflet/express

Version:

Well-defined and well-typed express decorators

254 lines (253 loc) 7.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractRoutes = exports.Route = exports.Delete = exports.Patch = exports.Put = exports.Post = exports.Get = void 0; const metadata_map_1 = require("./metadata-map"); const METAKEY_ROUTE = Symbol('route'); function Get(pathOrTarget = '', key) { if (key != null) { return Route('get', key)(pathOrTarget, key); } else { return Route('get', pathOrTarget); } } exports.Get = Get; function Post(pathOrTarget = '', key) { if (key != null) { return Route('post', key)(pathOrTarget, key); } else { return Route('post', pathOrTarget); } } exports.Post = Post; function Put(pathOrTarget = '', key) { if (key != null) { return Route('put', key)(pathOrTarget, key); } else { return Route('put', pathOrTarget); } } exports.Put = Put; function Patch(pathOrTarget = '', key) { if (key != null) { return Route('patch', key)(pathOrTarget, key); } else { return Route('patch', pathOrTarget); } } exports.Patch = Patch; function Delete(pathOrTarget = '', key) { if (key != null) { return Route('delete', key)(pathOrTarget, key); } else { return Route('delete', pathOrTarget); } } exports.Delete = Delete; /** * Routes an HTTP request. * @param method - HTTP method of the request, in lowercase. * @param path - path for which the decorated class method is invoked. * @see https://expressjs.com/en/4x/api.html#app.METHOD * @public */ function Route(method, path) { return (target, key, descriptor) => { // Attach routes to class instead of methods to extract and traverse all of them at once const routes = (0, metadata_map_1.getOwnMetadata)(METAKEY_ROUTE, target) || []; if (Array.isArray(method)) { for (const methodd of method) { routes.push({ path, method: methodd, key }); } } else { routes.push({ path, method, key }); } (0, metadata_map_1.defineMetadata)(METAKEY_ROUTE, routes, target); }; } exports.Route = Route; /* istanbul ignore next */ // tslint:disable: no-shadowed-variable (function (Route) { function Get(pathOrTarget = '', key) { if (key != null) { return Route('get', key)(pathOrTarget, key); } else { return Route('get', pathOrTarget); } } Route.Get = Get; function Post(pathOrTarget = '', key) { if (key != null) { return Route('post', key)(pathOrTarget, key); } else { return Route('post', pathOrTarget); } } Route.Post = Post; function Put(pathOrTarget = '', key) { if (key != null) { return Route('put', key)(pathOrTarget, key); } else { return Route('put', pathOrTarget); } } Route.Put = Put; function Patch(pathOrTarget = '', key) { if (key != null) { return Route('patch', key)(pathOrTarget, key); } else { return Route('patch', pathOrTarget); } } Route.Patch = Patch; function Delete(pathOrTarget = '', key) { if (key != null) { return Route('delete', key)(pathOrTarget, key); } else { return Route('delete', pathOrTarget); } } Route.Delete = Delete; function Head(pathOrTarget = '', key) { if (key != null) { return Route('head', key)(pathOrTarget, key); } else { return Route('head', pathOrTarget); } } Route.Head = Head; function Options(pathOrTarget = '', key) { if (key != null) { return Route('options', key)(pathOrTarget, key); } else { return Route('options', pathOrTarget); } } Route.Options = Options; function Trace(pathOrTarget = '', key) { if (key != null) { return Route('trace', key)(pathOrTarget, key); } else { return Route('trace', pathOrTarget); } } Route.Trace = Trace; function Notify(pathOrTarget = '', key) { if (key != null) { return Route('notify', key)(pathOrTarget, key); } else { return Route('notify', pathOrTarget); } } Route.Notify = Notify; function Subscribe(pathOrTarget = '', key) { if (key != null) { return Route('subscribe', key)(pathOrTarget, key); } else { return Route('subscribe', pathOrTarget); } } Route.Subscribe = Subscribe; function Unsubscribe(pathOrTarget = '', key) { if (key != null) { return Route('unsubscribe', key)(pathOrTarget, key); } else { return Route('unsubscribe', pathOrTarget); } } Route.Unsubscribe = Unsubscribe; function Purge(pathOrTarget = '', key) { if (key != null) { return Route('purge', key)(pathOrTarget, key); } else { return Route('purge', pathOrTarget); } } Route.Purge = Purge; function Checkout(pathOrTarget = '', key) { if (key != null) { return Route('checkout', key)(pathOrTarget, key); } else { return Route('checkout', pathOrTarget); } } Route.Checkout = Checkout; function Move(pathOrTarget = '', key) { if (key != null) { return Route('move', key)(pathOrTarget, key); } else { return Route('move', pathOrTarget); } } Route.Move = Move; function Copy(pathOrTarget = '', key) { if (key != null) { return Route('copy', key)(pathOrTarget, key); } else { return Route('copy', pathOrTarget); } } Route.Copy = Copy; function Merge(pathOrTarget = '', key) { if (key != null) { return Route('merge', key)(pathOrTarget, key); } else { return Route('merge', pathOrTarget); } } Route.Merge = Merge; function Report(pathOrTarget = '', key) { if (key != null) { return Route('report', key)(pathOrTarget, key); } else { return Route('report', pathOrTarget); } } Route.Report = Report; Route.MSearch = (path = '') => Route('m-search', path); Route.Mkactivity = (path = '') => Route('mkactivity', path); Route.Mkcol = (path = '') => Route('mkcol', path); Route.Search = (path = '') => Route('search', path); Route.Lock = (path = '') => Route('lock', path); Route.Unlock = (path = '') => Route('unlock', path); function All(pathOrTarget = '', key) { if (key != null) { return Route('all', key)(pathOrTarget, key); } else { return Route('all', pathOrTarget); } } Route.All = All; })(Route = exports.Route || (exports.Route = {})); /** * Retrieve routes of a class. * @internal */ function extractRoutes(target) { return (0, metadata_map_1.getOwnMetadata)(METAKEY_ROUTE, target.prototype) || []; } exports.extractRoutes = extractRoutes;