@reflet/express
Version:
Well-defined and well-typed express decorators
254 lines (253 loc) • 7.33 kB
JavaScript
"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;