107 lines
4.2 KiB
JavaScript
107 lines
4.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.mapToClass = exports.filterMiddleware = exports.mapToExcludeRoute = void 0;
|
|
exports.isMiddlewareClass = isMiddlewareClass;
|
|
exports.assignToken = assignToken;
|
|
exports.isMiddlewareRouteExcluded = isMiddlewareRouteExcluded;
|
|
const common_1 = require("@nestjs/common");
|
|
const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
|
const iterare_1 = require("iterare");
|
|
const path_to_regexp_1 = require("path-to-regexp");
|
|
const uid_1 = require("uid");
|
|
const legacy_route_converter_1 = require("../router/legacy-route-converter");
|
|
const utils_1 = require("../router/utils");
|
|
const mapToExcludeRoute = (routes) => {
|
|
return routes.map(route => {
|
|
const originalPath = (0, shared_utils_1.isString)(route) ? route : route.path;
|
|
const path = legacy_route_converter_1.LegacyRouteConverter.tryConvert(originalPath);
|
|
try {
|
|
if ((0, shared_utils_1.isString)(route)) {
|
|
return {
|
|
path,
|
|
requestMethod: common_1.RequestMethod.ALL,
|
|
pathRegex: (0, path_to_regexp_1.pathToRegexp)((0, shared_utils_1.addLeadingSlash)(path)).regexp,
|
|
};
|
|
}
|
|
return {
|
|
path,
|
|
requestMethod: route.method,
|
|
pathRegex: (0, path_to_regexp_1.pathToRegexp)((0, shared_utils_1.addLeadingSlash)(path)).regexp,
|
|
};
|
|
}
|
|
catch (e) {
|
|
if (e instanceof TypeError) {
|
|
legacy_route_converter_1.LegacyRouteConverter.printError(originalPath);
|
|
}
|
|
throw e;
|
|
}
|
|
});
|
|
};
|
|
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) {
|
|
const middlewareStr = middleware.toString();
|
|
if (middlewareStr.substring(0, 5) === 'class') {
|
|
return true;
|
|
}
|
|
const middlewareArr = middlewareStr.split(' ');
|
|
return (middlewareArr[0] === 'function' &&
|
|
/[A-Z]/.test(middlewareArr[1]?.[0]) &&
|
|
(0, shared_utils_1.isFunction)(middleware.prototype?.use));
|
|
}
|
|
function assignToken(metatype, token = (0, uid_1.uid)(21)) {
|
|
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('?') : -1;
|
|
const pathname = queryParamsIndex >= 0
|
|
? originalUrl.slice(0, queryParamsIndex)
|
|
: originalUrl;
|
|
return (0, utils_1.isRouteExcluded)(excludedRoutes, pathname, common_1.RequestMethod[reqMethod]);
|
|
}
|