UNPKG

@tsclean/core

Version:

Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.

95 lines 13 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.mapToClass = exports.filterMiddleware = exports.mapToExcludeRoute = void 0; exports.isMiddlewareClass = isMiddlewareClass; exports.assignToken = assignToken; exports.isMiddlewareRouteExcluded = isMiddlewareRouteExcluded; const iterare_1 = require("iterare"); const path_to_regexp_1 = __importDefault(require("path-to-regexp")); const uuid_1 = require("uuid"); const utils_1 = require("../router/utils"); const shared_utils_1 = require("../utils/shared.utils"); const enums_1 = require("../enums"); const mapToExcludeRoute = (routes) => { return routes.map(route => { if ((0, shared_utils_1.isString)(route)) { return { path: route, requestMethod: enums_1.RequestMethod.ALL, pathRegex: (0, path_to_regexp_1.default)((0, shared_utils_1.addLeadingSlash)(route)) }; } return { path: route.path, requestMethod: route.method, pathRegex: (0, path_to_regexp_1.default)((0, shared_utils_1.addLeadingSlash)(route.path)) }; }); }; exports.mapToExcludeRoute = mapToExcludeRoute; const filterMiddleware = (middleware, routes, httpAdapter) => { const excludedRoutes = (0, exports.mapToExcludeRoute)(routes); return (0, iterare_1.iterate)([]) .concat(middleware) .filter(shared_utils_1.isFunction) .map((item) => (0, exports.mapToClass)(item, excludedRoutes, httpAdapter)) .toArray(); }; exports.filterMiddleware = filterMiddleware; const mapToClass = (middleware, excludedRoutes, httpAdapter) => { if (isMiddlewareClass(middleware)) { if (excludedRoutes.length <= 0) return middleware; const MiddlewareHost = class extends middleware { use(...params) { const [req, _, next] = params; const isExcluded = isMiddlewareRouteExcluded(req, excludedRoutes, httpAdapter); if (isExcluded) { return next(); } return super.use(...params); } }; return assignToken(MiddlewareHost, middleware.name); } return assignToken(class { constructor() { this.use = (...params) => { const [req, _, next] = params; const isExcluded = isMiddlewareRouteExcluded(req, excludedRoutes, httpAdapter); if (isExcluded) { return next(); } return middleware(...params); }; } }); }; exports.mapToClass = mapToClass; function isMiddlewareClass(middleware) { var _a, _b; const middlewareStr = middleware.toString(); if (middlewareStr.substring(0, 5) === 'class') return true; const middlewareArr = middlewareStr.split(' '); return (middlewareArr[0] === 'function' && /[A-Z]/.test((_a = middlewareArr[1]) === null || _a === void 0 ? void 0 : _a[0]) && typeof ((_b = middleware.prototype) === null || _b === void 0 ? void 0 : _b.use) === 'function'); } function assignToken(metaType, token = (0, uuid_1.v4)()) { Object.defineProperty(metaType, 'name', { value: token }); return metaType; } function isMiddlewareRouteExcluded(req, excludedRoutes, httpAdapter) { if (excludedRoutes.length <= 0) return false; const reqMethod = httpAdapter.getRequestMethod(req); const originalUrl = httpAdapter.getRequestUrl(req); const queryParamsIndex = originalUrl && originalUrl.indexOf('?'); const pathname = queryParamsIndex >= 0 ? originalUrl.slice(0, queryParamsIndex) : originalUrl; return (0, utils_1.isRouteExcluded)(excludedRoutes, pathname, enums_1.RequestMethod[reqMethod]); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF5RkEsOENBVUM7QUFFRCxrQ0FHQztBQUVELDhEQWNDO0FBeEhELHFDQUFpQztBQUNqQyxvRUFBeUM7QUFDekMsK0JBQWlDO0FBRWpDLDJDQUFpRDtBQVFqRCx3REFBNkU7QUFDN0Usb0NBQXdDO0FBRWpDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsTUFBOEIsRUFDTixFQUFFO0lBQzFCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN4QixJQUFJLElBQUEsdUJBQVEsRUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsYUFBYSxFQUFFLHFCQUFhLENBQUMsR0FBRztnQkFDaEMsU0FBUyxFQUFFLElBQUEsd0JBQVksRUFBQyxJQUFBLDhCQUFlLEVBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEQsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLGFBQWEsRUFBRSxLQUFLLENBQUMsTUFBTTtZQUMzQixTQUFTLEVBQUUsSUFBQSx3QkFBWSxFQUFDLElBQUEsOEJBQWUsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckQsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBakJZLFFBQUEsaUJBQWlCLHFCQWlCN0I7QUFFTSxNQUFNLGdCQUFnQixHQUFHLENBQzlCLFVBQWUsRUFDZixNQUFtQixFQUNuQixXQUF1QixFQUN2QixFQUFFO0lBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBQSx5QkFBaUIsRUFBQyxNQUFNLENBQUMsQ0FBQTtJQUNoRCxPQUFPLElBQUEsaUJBQU8sRUFBQyxFQUFFLENBQUM7U0FDZixNQUFN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QU0sSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFNUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ25ELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNoRSxNQUFNLFFBQVEsR0FDWixnQkFBZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQTtJQUU5RSxPQUFPLElBQUEsdUJBQWUsRUFBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLHFCQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXRlcmF0ZSB9IGZyb20gJ2l0ZXJhcmUnXG5pbXBvcnQgcGF0aFRvUmVnZXhwIGZyb20gJ3BhdGgtdG8tcmVnZXhwJ1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnXG5cbmltcG9ydCB7IGlzUm91dGVFeGNsdWRlZCB9IGZyb20gJy4uL3JvdXRlci91dGlscydcbmltcG9ydCB7XG4gIEV4Y2x1ZGVSb3V0ZU1ldGFkYXRhLFxuICBFeGNsdWRlUm91dGVNZXRhZGF0YUludGVyZmFjZSxcbiAgSHR0cFNlcnZlcixcbiAgUm91dGVJbmZvLFxuICBUeXBlXG59IGZyb20gJy4uL2NvbnRyYWN0cydcbmltcG9ydCB7IGFkZExlYWRpbmdTbGFzaCwgaXNGdW5jdGlvbiwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscy9zaGFyZWQudXRpbHMnXG5pbXBvcnQgeyBSZXF1ZXN0TWV0aG9kIH0gZnJvbSAnLi4vZW51bXMnXG5cbmV4cG9ydCBjb25zdCBtYXBUb0V4Y2x1ZGVSb3V0ZSA9IChcbiAgcm91dGVzOiAoc3RyaW5nIHwgUm91dGVJbmZvKVtdXG4pOiBFeGNsdWRlUm91dGVNZXRhZGF0YVtdID0+IHtcbiAgcmV0dXJuIHJvdXRlcy5tYXAocm91dGUgPT4ge1xuICAgIGlmIChpc1N0cmluZyhyb3V0ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGg6IHJvdXRlLFxuICAgICAgICByZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kLkFMTCxcbiAgICAgICAgcGF0aFJlZ2V4OiBwYXRoVG9SZWdleHAoYWRkTGVhZGluZ1NsYXNoKHJvdXRlKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IHJvdXRlLnBhdGgsXG4gICAgICByZXF1ZXN0TWV0aG9kOiByb3V0ZS5tZXRob2QsXG4gICAgICBwYXRoUmVnZXg6IHBhdGhUb1JlZ2V4cChhZGRMZWFkaW5nU2xhc2gocm91dGUucGF0aCkpXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyTWlkZGxld2FyZSA9IDxUIGV4dGVuZHMgRnVuY3Rpb24gfCBUeXBlPGFueT4gPSBhbnk+KFxuICBtaWRkbGV3YXJlOiBUW10sXG4gIHJvdXRlczogUm91dGVJbmZvW10sXG4gIGh0dHBBZGFwdGVyOiBIdHRwU2VydmVyXG4pID0+IHtcbiAgY29uc3QgZXhjbHVkZWRSb3V0ZXMgPSBtYXBUb0V4Y2x1ZGVSb3V0ZShyb3V0ZXMpXG4gIHJldHVybiBpdGVyYXRlKFtdKVxuICAgIC5jb25jYXQobWlkZGxld2FyZSlcbiAgICAuZmlsdGVyKGlzRnVuY3Rpb24pXG4gICAgLm1hcCgoaXRlbTogVCkgPT4gbWFwVG9DbGFzcyhpdGVtLCBleGNsdWRlZFJvdXRlcywgaHR0cEFkYXB0ZXIpKVxuICAgIC50b0FycmF5KClcbn1cblxuZXhwb3J0IGNvbnN0IG1hcFRvQ2xhc3MgPSA8VCBleHRlbmRzIEZ1bmN0aW9uIHwgVHlwZTxhbnk+PihcbiAgbWlkZGxld2FyZTogVCxcbiAgZXhjbHVkZWRSb3V0ZXM6IEV4Y2x1ZGVSb3V0ZU1ldGFkYXRhSW50ZXJmYWNlW10sXG4gIGh0dHBBZGFwdGVyOiBIdHRwU2VydmVyXG4pID0+IHtcbiAgaWYgKGlzTWlkZGxld2FyZUNsYXNzKG1pZGRsZXdhcmUpKSB7XG4gICAgaWYgKGV4Y2x1ZGVkUm91dGVzLmxlbmd0aCA8PSAwKSByZXR1cm4gbWlkZGxld2FyZVxuXG4gICAgY29uc3QgTWlkZGxld2FyZUhvc3QgPSBjbGFzcyBleHRlbmRzIChtaWRkbGV3YXJlIGFzIFR5cGU8YW55Pikge1xuICAgICAgdXNlICguLi5wYXJhbXM6IHVua25vd25bXSkge1xuICAgICAgICBjb25zdCBbcmVxLCBfLCBuZXh0XSA9IHBhcmFtcyBhcyBbUmVjb3JkPHN0cmluZywgYW55PiwgYW55LCBGdW5jdGlvbl1cbiAgICAgICAgY29uc3QgaXNFeGNsdWRlZCA9IGlzTWlkZGxld2FyZVJvdXRlRXhjbHVkZWQoXG4gICAgICAgICAgcmVxLFxuICAgICAgICAgIGV4Y2x1ZGVkUm91dGVzLFxuICAgICAgICAgIGh0dHBBZGFwdGVyXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzRXhjbHVkZWQpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLnVzZSguLi5wYXJhbXMpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhc3NpZ25Ub2tlbihNaWRkbGV3YXJlSG9zdCwgbWlkZGxld2FyZS5uYW1lKVxuICB9XG4gIHJldHVybiBhc3NpZ25Ub2tlbihcbiAgICBjbGFzcyB7XG4gICAgICB1c2UgPSAoLi4ucGFyYW1zOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgY29uc3QgW3JlcSwgXywgbmV4dF0gPSBwYXJhbXMgYXMgW1JlY29yZDxzdHJpbmcsIGFueT4sIGFueSwgRnVuY3Rpb25dXG4gICAgICAgIGNvbnN0IGlzRXhjbHVkZWQgPSBpc01pZGRsZXdhcmVSb3V0ZUV4Y2x1ZGVkKFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgICBleGNsdWRlZFJvdXRlcyxcbiAgICAgICAgICBodHRwQWRhcHRlclxuICAgICAgICApXG4gICAgICAgIGlmIChpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHQoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobWlkZGxld2FyZSBhcyBGdW5jdGlvbikoLi4ucGFyYW1zKVxuICAgICAgfVxuICAgIH1cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNaWRkbGV3YXJlQ2xhc3MgKG1pZGRsZXdhcmU6IGFueSk6IG1pZGRsZXdhcmUgaXMgVHlwZTxhbnk+IHtcbiAgY29uc3QgbWlkZGxld2FyZVN0ciA9IG1pZGRsZXdhcmUudG9TdHJpbmcoKVxuICBpZiAobWlkZGxld2FyZVN0ci5zdWJzdHJpbmcoMCwgNSkgPT09ICdjbGFzcycpIHJldHVybiB0cnVlXG5cbiAgY29uc3QgbWlkZGxld2FyZUFyciA9IG1pZGRsZXdhcmVTdHIuc3BsaXQoJyAnKVxuICByZXR1cm4gKFxuICAgIG1pZGRsZXdhcmVBcnJbMF0gPT09ICdmdW5jdGlvbicgJiZcbiAgICAvW0EtWl0vLnRlc3QobWlkZGxld2FyZUFyclsxXT8uWzBdKSAmJlxuICAgIHR5cGVvZiBtaWRkbGV3YXJlLnByb3RvdHlwZT8udXNlID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblRva2VuIChtZXRhVHlwZTogVHlwZTxhbnk+LCB0b2tlbiA9IHV1aWQoKSk6IFR5cGU8YW55PiB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXRhVHlwZSwgJ25hbWUnLCB7IHZhbHVlOiB0b2tlbiB9KVxuICByZXR1cm4gbWV0YVR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWlkZGxld2FyZVJvdXRlRXhjbHVkZWQgKFxuICByZXE6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGV4Y2x1ZGVkUm91dGVzOiBFeGNsdWRlUm91dGVNZXRhZGF0YUludGVyZmFjZVtdLFxuICBodHRwQWRhcHRlcjogSHR0cFNlcnZlclxuKTogYm9vbGVhbiB7XG4gIGlmIChleGNsdWRlZFJvdXRlcy5sZW5ndGggPD0gMCkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcmVxTWV0aG9kID0gaHR0cEFkYXB0ZXIuZ2V0UmVxdWVzdE1ldGhvZChyZXEpXG4gIGNvbnN0IG9yaWdpbmFsVXJsID0gaHR0cEFkYXB0ZXIuZ2V0UmVxdWVzdFVybChyZXEpXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zSW5kZXggPSBvcmlnaW5hbFVybCAmJiBvcmlnaW5hbFVybC5pbmRleE9mKCc/JylcbiAgY29uc3QgcGF0aG5hbWUgPVxuICAgIHF1ZXJ5UGFyYW1zSW5kZXggPj0gMCA/IG9yaWdpbmFsVXJsLnNsaWNlKDAsIHF1ZXJ5UGFyYW1zSW5kZXgpIDogb3JpZ2luYWxVcmxcblxuICByZXR1cm4gaXNSb3V0ZUV4Y2x1ZGVkKGV4Y2x1ZGVkUm91dGVzLCBwYXRobmFtZSwgUmVxdWVzdE1ldGhvZFtyZXFNZXRob2RdKVxufVxuIl19