UNPKG

@nestjs/core

Version:

Nest - modern, fast, powerful node.js web framework (@core)

73 lines (72 loc) 3.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RouteInfoPathExtractor = void 0; const common_1 = require("@nestjs/common"); const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); const utils_1 = require("../router/utils"); const route_path_factory_1 = require("./../router/route-path-factory"); class RouteInfoPathExtractor { constructor(applicationConfig) { this.applicationConfig = applicationConfig; this.routePathFactory = new route_path_factory_1.RoutePathFactory(applicationConfig); this.prefixPath = (0, shared_utils_1.stripEndSlash)((0, shared_utils_1.addLeadingSlash)(this.applicationConfig.getGlobalPrefix())); this.excludedGlobalPrefixRoutes = this.applicationConfig.getGlobalPrefixOptions().exclude; this.versioningConfig = this.applicationConfig.getVersioning(); } extractPathsFrom({ path, method, version }) { const versionPaths = this.extractVersionPathFrom(version); if (this.isAWildcard(path)) { const entries = versionPaths.length > 0 ? versionPaths .map(versionPath => [ this.prefixPath + versionPath + '$', this.prefixPath + versionPath + (0, shared_utils_1.addLeadingSlash)(path), ]) .flat() : this.prefixPath ? [this.prefixPath + '$', this.prefixPath + (0, shared_utils_1.addLeadingSlash)(path)] : [(0, shared_utils_1.addLeadingSlash)(path)]; return Array.isArray(this.excludedGlobalPrefixRoutes) ? [ ...entries, ...this.excludedGlobalPrefixRoutes.map(route => versionPaths + (0, shared_utils_1.addLeadingSlash)(route.path)), ] : entries; } return this.extractNonWildcardPathsFrom({ path, method, version }); } extractPathFrom(route) { if (this.isAWildcard(route.path) && !route.version) { return [(0, shared_utils_1.addLeadingSlash)(route.path)]; } return this.extractNonWildcardPathsFrom(route); } isAWildcard(path) { return ['*', '/*', '/*/', '(.*)', '/(.*)'].includes(path); } extractNonWildcardPathsFrom({ path, method, version, }) { const versionPaths = this.extractVersionPathFrom(version); if (Array.isArray(this.excludedGlobalPrefixRoutes) && (0, utils_1.isRouteExcluded)(this.excludedGlobalPrefixRoutes, path, method)) { if (!versionPaths.length) { return [(0, shared_utils_1.addLeadingSlash)(path)]; } return versionPaths.map(versionPath => versionPath + (0, shared_utils_1.addLeadingSlash)(path)); } if (!versionPaths.length) { return [this.prefixPath + (0, shared_utils_1.addLeadingSlash)(path)]; } return versionPaths.map(versionPath => this.prefixPath + versionPath + (0, shared_utils_1.addLeadingSlash)(path)); } extractVersionPathFrom(versionValue) { if (!versionValue || this.versioningConfig?.type !== common_1.VersioningType.URI) return []; const versionPrefix = this.routePathFactory.getVersionPrefix(this.versioningConfig); if (Array.isArray(versionValue)) { return versionValue.map(version => (0, shared_utils_1.addLeadingSlash)(versionPrefix + version.toString())); } return [(0, shared_utils_1.addLeadingSlash)(versionPrefix + versionValue.toString())]; } } exports.RouteInfoPathExtractor = RouteInfoPathExtractor;