New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

node-file-router

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-file-router - npm Package Compare versions

Comparing version
0.8.0
to
0.9.0
+30
cjs/components/dynamic-routes/parse-dynamic-route.js
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.parseDynamicRoute = parseDynamicRoute;
var _exactSlugSegment = require("./exact-slug-segment");
var _catchAllSegment = require("./catch-all-segment");
var _optionalCatchAllSegment = require("./optional-catch-all-segment");
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
function parseDynamicRoute(initialRoute) {
return [_exactSlugSegment.exactSlugSegment, _catchAllSegment.catchAllSegment, _optionalCatchAllSegment.optionalCatchAllSegment].filter(function (dynamicRoute) {
return dynamicRoute.isMatch(initialRoute);
}).reduce(function (acc, route) {
var parsedRoute = route.parse(acc.route);
return {
route: parsedRoute.route,
paramExtractors: _objectSpread(_objectSpread({}, acc.paramExtractors), parsedRoute.paramExtractors)
};
}, {
route: initialRoute,
paramExtractors: {}
});
}
//# sourceMappingURL=parse-dynamic-route.js.map
{"version":3,"file":"parse-dynamic-route.js","names":["_exactSlugSegment","require","_catchAllSegment","_optionalCatchAllSegment","_typeof","obj","Symbol","iterator","constructor","prototype","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","toPrimitive","undefined","res","call","TypeError","Number","parseDynamicRoute","initialRoute","exactSlugSegment","catchAllSegment","optionalCatchAllSegment","dynamicRoute","isMatch","reduce","acc","route","parsedRoute","parse","paramExtractors"],"sources":["../../../../src/components/dynamic-routes/parse-dynamic-route.ts"],"sourcesContent":["import { exactSlugSegment } from './exact-slug-segment';\nimport { catchAllSegment } from './catch-all-segment';\nimport { optionalCatchAllSegment } from './optional-catch-all-segment';\nimport type { ParamExtractor } from './common/route-params-parser';\n\nexport interface ParsedDynamicRoute {\n route: string;\n paramExtractors: Record<string, ParamExtractor>;\n}\n\nexport function parseDynamicRoute(initialRoute: string): ParsedDynamicRoute {\n return [exactSlugSegment, catchAllSegment, optionalCatchAllSegment]\n .filter((dynamicRoute) => dynamicRoute.isMatch(initialRoute))\n .reduce(\n (acc, route) => {\n const parsedRoute = route.parse(acc.route);\n return {\n route: parsedRoute.route,\n paramExtractors: {\n ...acc.paramExtractors,\n ...parsedRoute.paramExtractors\n }\n };\n },\n { route: initialRoute, paramExtractors: {} }\n );\n}\n"],"mappings":"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"}
import { exactSlugSegment } from "./exact-slug-segment.mjs";
import { catchAllSegment } from "./catch-all-segment.mjs";
import { optionalCatchAllSegment } from "./optional-catch-all-segment.mjs";
export function parseDynamicRoute(initialRoute) {
return [exactSlugSegment, catchAllSegment, optionalCatchAllSegment].filter(dynamicRoute => dynamicRoute.isMatch(initialRoute)).reduce((acc, route) => {
const parsedRoute = route.parse(acc.route);
return {
route: parsedRoute.route,
paramExtractors: {
...acc.paramExtractors,
...parsedRoute.paramExtractors
}
};
}, {
route: initialRoute,
paramExtractors: {}
});
}
//# sourceMappingURL=parse-dynamic-route.mjs.map
{"version":3,"file":"parse-dynamic-route.mjs","names":["exactSlugSegment","catchAllSegment","optionalCatchAllSegment","parseDynamicRoute","initialRoute","filter","dynamicRoute","isMatch","reduce","acc","route","parsedRoute","parse","paramExtractors"],"sources":["../../../../src/components/dynamic-routes/parse-dynamic-route.ts"],"sourcesContent":["import { exactSlugSegment } from './exact-slug-segment';\nimport { catchAllSegment } from './catch-all-segment';\nimport { optionalCatchAllSegment } from './optional-catch-all-segment';\nimport type { ParamExtractor } from './common/route-params-parser';\n\nexport interface ParsedDynamicRoute {\n route: string;\n paramExtractors: Record<string, ParamExtractor>;\n}\n\nexport function parseDynamicRoute(initialRoute: string): ParsedDynamicRoute {\n return [exactSlugSegment, catchAllSegment, optionalCatchAllSegment]\n .filter((dynamicRoute) => dynamicRoute.isMatch(initialRoute))\n .reduce(\n (acc, route) => {\n const parsedRoute = route.parse(acc.route);\n return {\n route: parsedRoute.route,\n paramExtractors: {\n ...acc.paramExtractors,\n ...parsedRoute.paramExtractors\n }\n };\n },\n { route: initialRoute, paramExtractors: {} }\n );\n}\n"],"mappings":"SAASA,gBAAgB;AAAA,SAChBC,eAAe;AAAA,SACfC,uBAAuB;AAQhC,OAAO,SAASC,iBAAiBA,CAACC,YAAoB,EAAsB;EAC1E,OAAO,CAACJ,gBAAgB,EAAEC,eAAe,EAAEC,uBAAuB,CAAC,CAChEG,MAAM,CAAEC,YAAY,IAAKA,YAAY,CAACC,OAAO,CAACH,YAAY,CAAC,CAAC,CAC5DI,MAAM,CACL,CAACC,GAAG,EAAEC,KAAK,KAAK;IACd,MAAMC,WAAW,GAAGD,KAAK,CAACE,KAAK,CAACH,GAAG,CAACC,KAAK,CAAC;IAC1C,OAAO;MACLA,KAAK,EAAEC,WAAW,CAACD,KAAK;MACxBG,eAAe,EAAE;QACf,GAAGJ,GAAG,CAACI,eAAe;QACtB,GAAGF,WAAW,CAACE;MACjB;IACF,CAAC;EACH,CAAC,EACD;IAAEH,KAAK,EAAEN,YAAY;IAAES,eAAe,EAAE,CAAC;EAAE,CAC7C,CAAC;AACL"}
import type { ParamExtractor } from './common/route-params-parser';
export interface ParsedDynamicRoute {
route: string;
paramExtractors: Record<string, ParamExtractor>;
}
export declare function parseDynamicRoute(initialRoute: string): ParsedDynamicRoute;
//# sourceMappingURL=parse-dynamic-route.d.ts.map
{"version":3,"file":"parse-dynamic-route.d.ts","sourceRoot":"","sources":["../../../../src/components/dynamic-routes/parse-dynamic-route.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACjD;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAgB1E"}
+47
-29

@@ -9,7 +9,8 @@ "use strict";

var _nodePath = _interopRequireDefault(require("node:path"));
var _route = require("./route/route");
var _middleware = require("./route/middleware");
var _catchAllSegment = require("./dynamic-routes/catch-all-segment");
var _exactSlugSegment = require("./dynamic-routes/exact-slug-segment");
var _catchAllSegment = require("./dynamic-routes/catch-all-segment");
var _optionalCatchAllSegment = require("./dynamic-routes/optional-catch-all-segment");
var _route = require("./route/route");
var _middleware = require("./route/middleware");
var _parseDynamicRoute2 = require("./dynamic-routes/parse-dynamic-route");
var _env = require("../utils/env.utils");

@@ -20,4 +21,2 @@ var _validations = require("../validations/validations");

function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }

@@ -214,3 +213,3 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

_context3.next = 25;
return this.processFileEntry(fullPath, entry, routePath, nestingLevel);
return this.processFileEntry(fullPath, entry, routePath, nestingLevel, parentRoute);
case 25:

@@ -278,3 +277,3 @@ route = _context3.sent;

handler = _context4.sent;
routePath = filePath.replace(FileRouteResolver.middlewareFilePattern, '');
routePath = this.normalizeMiddlewarePath(filePath);
return _context4.abrupt("return", new _middleware.Middleware({

@@ -299,4 +298,4 @@ path: routePath,

value: function () {
var _processFileEntry = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(fullPath, entry, routePath, nestingLevel) {
var handler, initialRoute, _this$extractMethodFr, _this$extractMethodFr2, method, pureRouteName, _this$parseDynamicPar, route, paramExtractors, isIndex, routeKey, formattedUrlPath;
var _processFileEntry = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(fullPath, entry, routePath, nestingLevel, parentRoute) {
var handler, initialRoute, _this$extractMethodFr, _this$extractMethodFr2, method, pureRouteName, _parseDynamicRoute, route, paramExtractors, isIndex, routeKey, formattedUrlPath, directoryPaths;
return _regeneratorRuntime().wrap(function _callee5$(_context5) {

@@ -326,6 +325,7 @@ while (1) switch (_context5.prev = _context5.next) {

_this$extractMethodFr = this.extractMethodFromRoute(initialRoute), _this$extractMethodFr2 = _slicedToArray(_this$extractMethodFr, 2), method = _this$extractMethodFr2[0], pureRouteName = _this$extractMethodFr2[1];
_this$parseDynamicPar = this.parseDynamicParams(pureRouteName), route = _this$parseDynamicPar.route, paramExtractors = _this$parseDynamicPar.paramExtractors;
_parseDynamicRoute = (0, _parseDynamicRoute2.parseDynamicRoute)(pureRouteName), route = _parseDynamicRoute.route, paramExtractors = _parseDynamicRoute.paramExtractors;
isIndex = FileRouteResolver.indexFilePattern.test(entry.name);
routeKey = isIndex ? route.replace(/\/index$/, '') : route;
formattedUrlPath = (isIndex ? pureRouteName.replace(/\/index$/, '') : pureRouteName) || '/';
directoryPaths = this.buildDirectoryPaths(parentRoute);
return _context5.abrupt("return", new _route.Route({

@@ -338,5 +338,6 @@ method: method,

paramExtractors: paramExtractors,
urlPath: formattedUrlPath
urlPath: formattedUrlPath,
directoryPaths: directoryPaths
}));
case 11:
case 12:
case "end":

@@ -347,3 +348,3 @@ return _context5.stop();

}));
function processFileEntry(_x9, _x10, _x11, _x12) {
function processFileEntry(_x9, _x10, _x11, _x12, _x13) {
return _processFileEntry.apply(this, arguments);

@@ -354,18 +355,2 @@ }

}, {
key: "parseDynamicParams",
value: function parseDynamicParams(initialRoute) {
return [_exactSlugSegment.exactSlugSegment, _catchAllSegment.catchAllSegment, _optionalCatchAllSegment.optionalCatchAllSegment].filter(function (dynamicRoute) {
return dynamicRoute.isMatch(initialRoute);
}).reduce(function (acc, route) {
var parsedRoute = route.parse(acc.route);
return {
route: parsedRoute.route,
paramExtractors: _objectSpread(_objectSpread({}, acc.paramExtractors), parsedRoute.paramExtractors)
};
}, {
route: initialRoute,
paramExtractors: {}
});
}
}, {
key: "extractMethodFromRoute",

@@ -383,2 +368,35 @@ value: function extractMethodFromRoute(route) {

}
}, {
key: "normalizeMiddlewarePath",
value: function normalizeMiddlewarePath(filePath) {
var pathWithoutFile = filePath.replace(FileRouteResolver.middlewareFilePattern, '');
if (pathWithoutFile === '/' || pathWithoutFile === '') {
return '/';
}
return pathWithoutFile.replace(/\/$/, '');
}
}, {
key: "buildDirectoryPaths",
value: function buildDirectoryPaths(parentRoute) {
var directories = ['/'];
if (!parentRoute) {
return directories;
}
var segments = parentRoute.split('/').filter(Boolean);
var currentPath = '';
var _iterator2 = _createForOfIteratorHelper(segments),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var segment = _step2.value;
currentPath += "/".concat(segment);
directories.push(currentPath);
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
return directories;
}
}]);

@@ -385,0 +403,0 @@ return FileRouteResolver;

@@ -1,1 +0,1 @@

{"version":3,"file":"file-route-resolver.js","names":["_promises","_interopRequireDefault","require","_nodePath","_exactSlugSegment","_catchAllSegment","_optionalCatchAllSegment","_route","_middleware","_env","_validations","_common","obj","__esModule","_typeof","Symbol","iterator","constructor","prototype","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","cache","has","get","newObj","hasPropertyDescriptor","hasOwnProperty","call","desc","set","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","iter","Array","from","isArray","_arrayLikeToArray","_createForOfIteratorHelper","o","allowArrayLike","it","F","s","n","done","value","e","_e2","f","normalCompletion","didErr","err","step","next","_e3","_regeneratorRuntime","exports","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","configurable","writable","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","undefined","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","val","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","minLen","toString","test","len","arr2","_i","_s","_e","_x","_r","_arr","_n","_d","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","_toPrimitive","String","input","hint","prim","toPrimitive","res","Number","FileRouteResolver","data","baseDir","ignoreFilesRegex","clearImportCache","isCommonJs","console","warn","_getHandlers","_callee","directory","_yield$this$scanDirec","_yield$this$scanDirec2","middlewares","routes","_args","_callee$","_context","scanDirectory","sort","left","right","nestingLevel","compareByNestingLevelAndType","getHandlers","_scanDirectory","_callee2","parentRoute","entries","_iterator","_step","_yield$this$processEn","_yield$this$processEn2","childMiddlewares","childRoutes","_args2","_callee2$","_context2","fs","readdir","withFileTypes","processEntry","t0","_processEntry","_callee3","fullPath","routePath","_yield$this$scanDirec3","_yield$this$scanDirec4","middleware","route","_callee3$","_context3","path","join","concat","isDirectory","isFile","isValidFile","middlewareFilePattern","processMiddlewareEntry","processFileEntry","_x2","_x3","_x4","_x5","some","pattern","fileExtensionPattern","isDynamic","optionalCatchAllSegment","catchAllSegment","exactSlugSegment","dynamicRoute","isMatch","fileName","_processMiddlewareEntry","_callee4","filePath","handler","_callee4$","_context4","specifier","r","module","validateFileFormat","replace","Middleware","_x6","_x7","_x8","_processFileEntry","_callee5","initialRoute","_this$extractMethodFr","_this$extractMethodFr2","pureRouteName","_this$parseDynamicPar","paramExtractors","isIndex","routeKey","formattedUrlPath","_callee5$","_context5","FunctionOrClass","isClass","extractMethodFromRoute","parseDynamicParams","indexFilePattern","Route","regex","RegExp","urlPath","_x9","_x10","_x11","_x12","reduce","acc","parsedRoute","parse","match","_match","pureRoute","fileExtensions"],"sources":["../../../src/components/file-route-resolver.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { exactSlugSegment } from './dynamic-routes/exact-slug-segment';\nimport { catchAllSegment } from './dynamic-routes/catch-all-segment';\nimport { optionalCatchAllSegment } from './dynamic-routes/optional-catch-all-segment';\nimport { Route } from './route/route';\nimport { Middleware } from './route/middleware';\nimport { isCommonJs } from '../utils/env.utils';\nimport { validateFileFormat } from '../validations/validations';\n\nimport { isClass } from '../utils/common.utils';\nimport type { ParamExtractor } from './dynamic-routes/common/route-params-parser';\nimport type { Dirent } from 'node:fs';\n\ninterface Props {\n baseDir: string;\n ignoreFilesRegex?: RegExp[];\n clearImportCache: boolean;\n}\n\ninterface RouteWithParams {\n route: string;\n paramExtractors: Record<string, ParamExtractor>;\n}\n\nexport class FileRouteResolver {\n private static readonly fileExtensions = ['js', 'mjs', 'cjs', 'ts'].join('|');\n private static readonly fileExtensionPattern = new RegExp(\n `\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n private static readonly middlewareFilePattern = new RegExp(\n `middleware\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n // Matches: index.js and index.[get].js\n private static readonly indexFilePattern = new RegExp(\n `index(\\\\.\\\\[[^\\\\]]+\\\\])?\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n\n private readonly baseDir: string;\n private readonly ignoreFilesRegex: RegExp[];\n private readonly clearImportCache: boolean = false;\n\n constructor(data: Props) {\n this.baseDir = data.baseDir;\n this.ignoreFilesRegex = data.ignoreFilesRegex || [];\n\n if (data.clearImportCache && !isCommonJs()) {\n console.warn('Cache clearing is only supported for CommonJS modules');\n } else {\n this.clearImportCache = data.clearImportCache;\n }\n }\n\n async getHandlers(\n directory = this.baseDir\n ): Promise<[Middleware[], Route[]]> {\n const [middlewares, routes] = await this.scanDirectory(directory);\n\n return [\n middlewares.sort((left, right) => left.nestingLevel - right.nestingLevel),\n routes.sort(this.compareByNestingLevelAndType)\n ];\n }\n\n private async scanDirectory(\n directory = this.baseDir,\n parentRoute = '',\n nestingLevel = 0\n ): Promise<[Middleware[], Route[]]> {\n const entries = await fs.readdir(directory, { withFileTypes: true });\n const routes: Route[] = [];\n const middlewares: Middleware[] = [];\n\n for (const entry of entries) {\n const [childMiddlewares, childRoutes] = await this.processEntry(\n directory,\n parentRoute,\n nestingLevel,\n entry\n );\n\n routes.push(...childRoutes);\n middlewares.push(...childMiddlewares);\n }\n\n return [middlewares, routes];\n }\n\n private async processEntry(\n directory: string,\n parentRoute: string,\n nestingLevel: number,\n entry: Dirent\n ) {\n const routes: Route[] = [];\n const middlewares: Middleware[] = [];\n\n const fullPath = path.join(directory, entry.name);\n const routePath = `${parentRoute}/${entry.name}`;\n\n if (entry.isDirectory()) {\n const [childMiddlewares, childRoutes] = await this.scanDirectory(\n fullPath,\n routePath,\n nestingLevel + 1\n );\n routes.push(...childRoutes);\n middlewares.push(...childMiddlewares);\n } else if (entry.isFile() && this.isValidFile(entry.name)) {\n if (FileRouteResolver.middlewareFilePattern.test(entry.name)) {\n const middleware = await this.processMiddlewareEntry(\n fullPath,\n routePath,\n nestingLevel\n );\n\n middlewares.push(middleware);\n } else {\n const route = await this.processFileEntry(\n fullPath,\n entry,\n routePath,\n nestingLevel\n );\n\n routes.push(route);\n }\n }\n\n return [middlewares, routes] as const;\n }\n\n private isValidFile(name: string): boolean {\n if (this.ignoreFilesRegex.some((pattern) => pattern.test(name))) {\n return false;\n }\n\n return FileRouteResolver.fileExtensionPattern.test(name);\n }\n\n private compareByNestingLevelAndType(left: Route, right: Route): number {\n if (left.nestingLevel !== right.nestingLevel) {\n return right.nestingLevel - left.nestingLevel;\n }\n\n const isDynamic = [\n optionalCatchAllSegment,\n catchAllSegment,\n exactSlugSegment\n ].some((dynamicRoute) => dynamicRoute.isMatch(left.fileName));\n\n return isDynamic ? 1 : -1;\n }\n\n private async processMiddlewareEntry(\n fullPath: string,\n filePath: string,\n nestingLevel: number\n ) {\n if (this.clearImportCache) {\n delete require.cache[fullPath];\n }\n\n const handler = await import(fullPath)\n .then((module) => validateFileFormat(fullPath, module))\n .then((module) => module.default);\n\n const routePath = filePath.replace(\n FileRouteResolver.middlewareFilePattern,\n ''\n );\n\n return new Middleware({\n path: routePath,\n handler,\n nestingLevel\n });\n }\n\n private async processFileEntry(\n fullPath: string,\n entry: Dirent,\n routePath: string,\n nestingLevel: number\n ): Promise<Route> {\n if (this.clearImportCache) {\n delete require.cache[fullPath];\n }\n\n const handler = await import(fullPath)\n .then((module) => validateFileFormat(fullPath, module))\n .then((module) => module.default)\n .then((FunctionOrClass) =>\n isClass(FunctionOrClass) ? new FunctionOrClass() : FunctionOrClass\n );\n\n const initialRoute = routePath.replace(\n FileRouteResolver.fileExtensionPattern,\n ''\n );\n\n const [method, pureRouteName] = this.extractMethodFromRoute(initialRoute);\n const { route, paramExtractors } = this.parseDynamicParams(pureRouteName);\n\n const isIndex = FileRouteResolver.indexFilePattern.test(entry.name);\n const routeKey = isIndex ? route.replace(/\\/index$/, '') : route;\n\n const formattedUrlPath =\n (isIndex ? pureRouteName.replace(/\\/index$/, '') : pureRouteName) || '/';\n\n return new Route({\n method,\n fileName: entry.name,\n handler,\n regex: new RegExp(`^${routeKey}/?$`),\n nestingLevel,\n paramExtractors,\n urlPath: formattedUrlPath\n });\n }\n\n private parseDynamicParams(initialRoute: string): RouteWithParams {\n return [exactSlugSegment, catchAllSegment, optionalCatchAllSegment]\n .filter((dynamicRoute) => dynamicRoute.isMatch(initialRoute))\n .reduce(\n (acc, route) => {\n const parsedRoute = route.parse(acc.route);\n return {\n route: parsedRoute.route,\n paramExtractors: {\n ...acc.paramExtractors,\n ...parsedRoute.paramExtractors\n }\n };\n },\n { route: initialRoute, paramExtractors: {} }\n );\n }\n\n private extractMethodFromRoute(route: string): [string | undefined, string] {\n const pattern = /\\.\\[([^\\]]+)\\](\\..+)?$/;\n\n const match = route.match(pattern);\n if (!match) {\n return [undefined, route];\n }\n\n const [, method] = match;\n const pureRoute = route.replace(pattern, '');\n\n return [method, pureRoute];\n }\n}\n"],"mappings":"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"}
{"version":3,"file":"file-route-resolver.js","names":["_promises","_interopRequireDefault","require","_nodePath","_route","_middleware","_catchAllSegment","_exactSlugSegment","_optionalCatchAllSegment","_parseDynamicRoute2","_env","_validations","_common","obj","__esModule","_typeof","Symbol","iterator","constructor","prototype","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","hasOwnProperty","call","desc","set","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","iter","Array","from","isArray","_arrayLikeToArray","_createForOfIteratorHelper","o","allowArrayLike","it","length","i","F","s","n","done","value","e","_e2","f","normalCompletion","didErr","err","step","next","_e3","_regeneratorRuntime","exports","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","undefined","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","minLen","toString","test","len","arr2","_i","_s","_e","_x","_r","_arr","_n","_d","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","_defineProperty","_toPrimitive","String","input","hint","prim","toPrimitive","res","Number","FileRouteResolver","data","baseDir","ignoreFilesRegex","clearImportCache","isCommonJs","console","warn","_getHandlers","_callee","directory","_yield$this$scanDirec","_yield$this$scanDirec2","middlewares","routes","_args","_callee$","_context","scanDirectory","sort","left","right","nestingLevel","compareByNestingLevelAndType","getHandlers","_scanDirectory","_callee2","parentRoute","entries","_iterator","_step","_yield$this$processEn","_yield$this$processEn2","childMiddlewares","childRoutes","_args2","_callee2$","_context2","fs","readdir","withFileTypes","processEntry","t0","_processEntry","_callee3","fullPath","routePath","_yield$this$scanDirec3","_yield$this$scanDirec4","middleware","route","_callee3$","_context3","path","join","concat","isDirectory","isFile","isValidFile","middlewareFilePattern","processMiddlewareEntry","processFileEntry","_x2","_x3","_x4","_x5","some","pattern","fileExtensionPattern","isDynamic","optionalCatchAllSegment","catchAllSegment","exactSlugSegment","dynamicRoute","isMatch","fileName","_processMiddlewareEntry","_callee4","filePath","handler","_callee4$","_context4","specifier","r","module","validateFileFormat","normalizeMiddlewarePath","Middleware","_x6","_x7","_x8","_processFileEntry","_callee5","initialRoute","_this$extractMethodFr","_this$extractMethodFr2","pureRouteName","_parseDynamicRoute","paramExtractors","isIndex","routeKey","formattedUrlPath","directoryPaths","_callee5$","_context5","FunctionOrClass","isClass","replace","extractMethodFromRoute","parseDynamicRoute","indexFilePattern","buildDirectoryPaths","Route","regex","RegExp","urlPath","_x9","_x10","_x11","_x12","_x13","match","_match","pureRoute","pathWithoutFile","directories","segments","split","filter","Boolean","currentPath","_iterator2","_step2","segment","fileExtensions"],"sources":["../../../src/components/file-route-resolver.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { Route } from './route/route';\nimport { Middleware } from './route/middleware';\nimport { catchAllSegment } from './dynamic-routes/catch-all-segment';\nimport { exactSlugSegment } from './dynamic-routes/exact-slug-segment';\nimport { optionalCatchAllSegment } from './dynamic-routes/optional-catch-all-segment';\nimport { parseDynamicRoute } from './dynamic-routes/parse-dynamic-route';\nimport { isCommonJs } from '../utils/env.utils';\nimport { validateFileFormat } from '../validations/validations';\n\nimport { isClass } from '../utils/common.utils';\nimport type { Dirent } from 'node:fs';\n\ninterface Props {\n baseDir: string;\n ignoreFilesRegex?: RegExp[];\n clearImportCache: boolean;\n}\n\nexport class FileRouteResolver {\n private static readonly fileExtensions = ['js', 'mjs', 'cjs', 'ts'].join('|');\n private static readonly fileExtensionPattern = new RegExp(\n `\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n private static readonly middlewareFilePattern = new RegExp(\n `middleware\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n // Matches: index.js and index.[get].js\n private static readonly indexFilePattern = new RegExp(\n `index(\\\\.\\\\[[^\\\\]]+\\\\])?\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n\n private readonly baseDir: string;\n private readonly ignoreFilesRegex: RegExp[];\n private readonly clearImportCache: boolean = false;\n\n constructor(data: Props) {\n this.baseDir = data.baseDir;\n this.ignoreFilesRegex = data.ignoreFilesRegex || [];\n\n if (data.clearImportCache && !isCommonJs()) {\n console.warn('Cache clearing is only supported for CommonJS modules');\n } else {\n this.clearImportCache = data.clearImportCache;\n }\n }\n\n async getHandlers(\n directory = this.baseDir\n ): Promise<[Middleware[], Route[]]> {\n const [middlewares, routes] = await this.scanDirectory(directory);\n\n return [\n middlewares.sort((left, right) => left.nestingLevel - right.nestingLevel),\n routes.sort(this.compareByNestingLevelAndType)\n ];\n }\n\n private async scanDirectory(\n directory = this.baseDir,\n parentRoute = '',\n nestingLevel = 0\n ): Promise<[Middleware[], Route[]]> {\n const entries = await fs.readdir(directory, { withFileTypes: true });\n const routes: Route[] = [];\n const middlewares: Middleware[] = [];\n\n for (const entry of entries) {\n const [childMiddlewares, childRoutes] = await this.processEntry(\n directory,\n parentRoute,\n nestingLevel,\n entry\n );\n\n routes.push(...childRoutes);\n middlewares.push(...childMiddlewares);\n }\n\n return [middlewares, routes];\n }\n\n private async processEntry(\n directory: string,\n parentRoute: string,\n nestingLevel: number,\n entry: Dirent\n ) {\n const routes: Route[] = [];\n const middlewares: Middleware[] = [];\n\n const fullPath = path.join(directory, entry.name);\n const routePath = `${parentRoute}/${entry.name}`;\n\n if (entry.isDirectory()) {\n const [childMiddlewares, childRoutes] = await this.scanDirectory(\n fullPath,\n routePath,\n nestingLevel + 1\n );\n routes.push(...childRoutes);\n middlewares.push(...childMiddlewares);\n } else if (entry.isFile() && this.isValidFile(entry.name)) {\n if (FileRouteResolver.middlewareFilePattern.test(entry.name)) {\n const middleware = await this.processMiddlewareEntry(\n fullPath,\n routePath,\n nestingLevel\n );\n\n middlewares.push(middleware);\n } else {\n const route = await this.processFileEntry(\n fullPath,\n entry,\n routePath,\n nestingLevel,\n parentRoute\n );\n\n routes.push(route);\n }\n }\n\n return [middlewares, routes] as const;\n }\n\n private isValidFile(name: string): boolean {\n if (this.ignoreFilesRegex.some((pattern) => pattern.test(name))) {\n return false;\n }\n\n return FileRouteResolver.fileExtensionPattern.test(name);\n }\n\n private compareByNestingLevelAndType(left: Route, right: Route): number {\n if (left.nestingLevel !== right.nestingLevel) {\n return right.nestingLevel - left.nestingLevel;\n }\n\n const isDynamic = [\n optionalCatchAllSegment,\n catchAllSegment,\n exactSlugSegment\n ].some((dynamicRoute) => dynamicRoute.isMatch(left.fileName));\n\n return isDynamic ? 1 : -1;\n }\n\n private async processMiddlewareEntry(\n fullPath: string,\n filePath: string,\n nestingLevel: number\n ) {\n if (this.clearImportCache) {\n delete require.cache[fullPath];\n }\n\n const handler = await import(fullPath)\n .then((module) => validateFileFormat(fullPath, module))\n .then((module) => module.default);\n\n const routePath = this.normalizeMiddlewarePath(filePath);\n\n return new Middleware({\n path: routePath,\n handler,\n nestingLevel\n });\n }\n\n private async processFileEntry(\n fullPath: string,\n entry: Dirent,\n routePath: string,\n nestingLevel: number,\n parentRoute: string\n ): Promise<Route> {\n if (this.clearImportCache) {\n delete require.cache[fullPath];\n }\n\n const handler = await import(fullPath)\n .then((module) => validateFileFormat(fullPath, module))\n .then((module) => module.default)\n .then((FunctionOrClass) =>\n isClass(FunctionOrClass) ? new FunctionOrClass() : FunctionOrClass\n );\n\n const initialRoute = routePath.replace(\n FileRouteResolver.fileExtensionPattern,\n ''\n );\n\n const [method, pureRouteName] = this.extractMethodFromRoute(initialRoute);\n const { route, paramExtractors } = parseDynamicRoute(pureRouteName);\n\n const isIndex = FileRouteResolver.indexFilePattern.test(entry.name);\n const routeKey = isIndex ? route.replace(/\\/index$/, '') : route;\n\n const formattedUrlPath =\n (isIndex ? pureRouteName.replace(/\\/index$/, '') : pureRouteName) || '/';\n const directoryPaths = this.buildDirectoryPaths(parentRoute);\n\n return new Route({\n method,\n fileName: entry.name,\n handler,\n regex: new RegExp(`^${routeKey}/?$`),\n nestingLevel,\n paramExtractors,\n urlPath: formattedUrlPath,\n directoryPaths\n });\n }\n\n private extractMethodFromRoute(route: string): [string | undefined, string] {\n const pattern = /\\.\\[([^\\]]+)\\](\\..+)?$/;\n\n const match = route.match(pattern);\n if (!match) {\n return [undefined, route];\n }\n\n const [, method] = match;\n const pureRoute = route.replace(pattern, '');\n\n return [method, pureRoute];\n }\n\n private normalizeMiddlewarePath(filePath: string) {\n const pathWithoutFile = filePath.replace(\n FileRouteResolver.middlewareFilePattern,\n ''\n );\n\n if (pathWithoutFile === '/' || pathWithoutFile === '') {\n return '/';\n }\n\n return pathWithoutFile.replace(/\\/$/, '');\n }\n\n private buildDirectoryPaths(parentRoute: string): string[] {\n const directories = ['/'];\n\n if (!parentRoute) {\n return directories;\n }\n\n const segments = parentRoute.split('/').filter(Boolean);\n let currentPath = '';\n\n for (const segment of segments) {\n currentPath += `/${segment}`;\n directories.push(currentPath);\n }\n\n return directories;\n }\n}\n"],"mappings":"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"}

@@ -8,2 +8,3 @@ "use strict";

exports.Middleware = void 0;
var _parseDynamicRoute2 = require("../dynamic-routes/parse-dynamic-route");
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }

@@ -14,9 +15,18 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function createMiddlewareRegExp(path, nestingLevel) {
if (!nestingLevel || path === '/') {
return /.*/;
}
var _parseDynamicRoute = (0, _parseDynamicRoute2.parseDynamicRoute)(path),
route = _parseDynamicRoute.route;
return new RegExp("^".concat(route, "(?:\\/.*)?$"));
}
var Middleware = /*#__PURE__*/_createClass(function Middleware(props) {
_classCallCheck(this, Middleware);
this.path = props.path;
this.handler = props.handler;
this.nestingLevel = props.nestingLevel;
this.regexp = new RegExp(props.nestingLevel ? "^".concat(props.path, ".*?$") : '.*');
this.regexp = createMiddlewareRegExp(props.path, props.nestingLevel);
});
exports.Middleware = Middleware;
//# sourceMappingURL=middleware.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"middleware.js","names":["Middleware","_createClass","props","_classCallCheck","handler","nestingLevel","regexp","RegExp","concat","path","exports"],"sources":["../../../../src/components/route/middleware.ts"],"sourcesContent":["interface Props {\n path: string;\n handler: (...args: unknown[]) => Promise<void>;\n nestingLevel: number;\n}\n\nexport class Middleware {\n regexp: RegExp;\n handler: (...args: unknown[]) => Promise<void>;\n nestingLevel: number;\n\n constructor(props: Props) {\n this.handler = props.handler;\n this.nestingLevel = props.nestingLevel;\n this.regexp = new RegExp(props.nestingLevel ? `^${props.path}.*?$` : '.*');\n }\n}\n"],"mappings":";;;;;;;;;;;;IAMaA,UAAU,gBAAAC,YAAA,CAKrB,SAAAD,WAAYE,KAAY,EAAE;EAAAC,eAAA,OAAAH,UAAA;EACxB,IAAI,CAACI,OAAO,GAAGF,KAAK,CAACE,OAAO;EAC5B,IAAI,CAACC,YAAY,GAAGH,KAAK,CAACG,YAAY;EACtC,IAAI,CAACC,MAAM,GAAG,IAAIC,MAAM,CAACL,KAAK,CAACG,YAAY,OAAAG,MAAA,CAAON,KAAK,CAACO,IAAI,YAAS,IAAI,CAAC;AAC5E,CAAC;AAAAC,OAAA,CAAAV,UAAA,GAAAA,UAAA"}
{"version":3,"file":"middleware.js","names":["_parseDynamicRoute2","require","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","_createClass","Constructor","protoProps","staticProps","prototype","arg","_toPrimitive","_typeof","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","_classCallCheck","instance","createMiddlewareRegExp","path","nestingLevel","_parseDynamicRoute","parseDynamicRoute","route","RegExp","concat","Middleware","handler","regexp","exports"],"sources":["../../../../src/components/route/middleware.ts"],"sourcesContent":["import { parseDynamicRoute } from '../dynamic-routes/parse-dynamic-route';\n\ninterface Props {\n path: string;\n handler: (...args: unknown[]) => Promise<void>;\n nestingLevel: number;\n}\n\nfunction createMiddlewareRegExp(path: string, nestingLevel: number) {\n if (!nestingLevel || path === '/') {\n return /.*/;\n }\n\n const { route } = parseDynamicRoute(path);\n\n return new RegExp(`^${route}(?:\\\\/.*)?$`);\n}\n\nexport class Middleware {\n path: string;\n regexp: RegExp;\n handler: (...args: unknown[]) => Promise<void>;\n nestingLevel: number;\n\n constructor(props: Props) {\n this.path = props.path;\n this.handler = props.handler;\n this.nestingLevel = props.nestingLevel;\n this.regexp = createMiddlewareRegExp(props.path, props.nestingLevel);\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AAA0E,SAAAC,kBAAAC,MAAA,EAAAC,KAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAAD,CAAA,UAAAE,UAAA,GAAAH,KAAA,CAAAC,CAAA,GAAAE,UAAA,CAAAC,UAAA,GAAAD,UAAA,CAAAC,UAAA,WAAAD,UAAA,CAAAE,YAAA,wBAAAF,UAAA,EAAAA,UAAA,CAAAG,QAAA,SAAAC,MAAA,CAAAC,cAAA,CAAAT,MAAA,EAAAU,cAAA,CAAAN,UAAA,CAAAO,GAAA,GAAAP,UAAA;AAAA,SAAAQ,aAAAC,WAAA,EAAAC,UAAA,EAAAC,WAAA,QAAAD,UAAA,EAAAf,iBAAA,CAAAc,WAAA,CAAAG,SAAA,EAAAF,UAAA,OAAAC,WAAA,EAAAhB,iBAAA,CAAAc,WAAA,EAAAE,WAAA,GAAAP,MAAA,CAAAC,cAAA,CAAAI,WAAA,iBAAAN,QAAA,mBAAAM,WAAA;AAAA,SAAAH,eAAAO,GAAA,QAAAN,GAAA,GAAAO,YAAA,CAAAD,GAAA,oBAAAE,OAAA,CAAAR,GAAA,iBAAAA,GAAA,GAAAS,MAAA,CAAAT,GAAA;AAAA,SAAAO,aAAAG,KAAA,EAAAC,IAAA,QAAAH,OAAA,CAAAE,KAAA,kBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAG,MAAA,CAAAC,WAAA,OAAAF,IAAA,KAAAG,SAAA,QAAAC,GAAA,GAAAJ,IAAA,CAAAK,IAAA,CAAAP,KAAA,EAAAC,IAAA,oBAAAH,OAAA,CAAAQ,GAAA,uBAAAA,GAAA,YAAAE,SAAA,4DAAAP,IAAA,gBAAAF,MAAA,GAAAU,MAAA,EAAAT,KAAA;AAAA,SAAAU,gBAAAC,QAAA,EAAAnB,WAAA,UAAAmB,QAAA,YAAAnB,WAAA,eAAAgB,SAAA;AAQ1E,SAASI,sBAAsBA,CAACC,IAAY,EAAEC,YAAoB,EAAE;EAClE,IAAI,CAACA,YAAY,IAAID,IAAI,KAAK,GAAG,EAAE;IACjC,OAAO,IAAI;EACb;EAEA,IAAAE,kBAAA,GAAkB,IAAAC,qCAAiB,EAACH,IAAI,CAAC;IAAjCI,KAAK,GAAAF,kBAAA,CAALE,KAAK;EAEb,OAAO,IAAIC,MAAM,KAAAC,MAAA,CAAKF,KAAK,gBAAa,CAAC;AAC3C;AAAC,IAEYG,UAAU,gBAAA7B,YAAA,CAMrB,SAAA6B,WAAYxC,KAAY,EAAE;EAAA8B,eAAA,OAAAU,UAAA;EACxB,IAAI,CAACP,IAAI,GAAGjC,KAAK,CAACiC,IAAI;EACtB,IAAI,CAACQ,OAAO,GAAGzC,KAAK,CAACyC,OAAO;EAC5B,IAAI,CAACP,YAAY,GAAGlC,KAAK,CAACkC,YAAY;EACtC,IAAI,CAACQ,MAAM,GAAGV,sBAAsB,CAAChC,KAAK,CAACiC,IAAI,EAAEjC,KAAK,CAACkC,YAAY,CAAC;AACtE,CAAC;AAAAS,OAAA,CAAAH,UAAA,GAAAA,UAAA"}

@@ -1,1 +0,1 @@

{"version":3,"file":"route.js","names":["_fp","require","_object","_slugParam","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","_createClass","protoProps","staticProps","arg","_toPrimitive","String","input","hint","prim","toPrimitive","undefined","res","call","Number","Route","assign","value","getRouteParams","pathname","_RegExp$exec","_this","groups","RegExp","regex","exec","pipe","filterValues","Boolean","mapValues","group","paramExtractors","mapKeys","decodeSlugParam","exports"],"sources":["../../../../src/components/route/route.ts"],"sourcesContent":["import { pipe } from '../../utils/fp.utils';\nimport { filterValues, mapKeys, mapValues } from '../../utils/object.utils';\nimport { decodeSlugParam } from '../slug-param/slug-param';\nimport type { Dictionary } from '../../types/dictionary';\nimport type { ParamExtractor } from '../dynamic-routes/common/route-params-parser';\n\nimport type { RequestHandler } from '../../types/request-handlers';\n\ninterface Props {\n method?: string;\n fileName: string;\n handler: RequestHandler | Record<string, RequestHandler>;\n regex: RegExp;\n paramExtractors: Record<string, ParamExtractor>;\n nestingLevel: number;\n urlPath: string;\n}\n\nexport class Route {\n method?: string;\n fileName: string;\n handler: RequestHandler | Record<string, RequestHandler>;\n regex: RegExp;\n nestingLevel: number;\n urlPath: string;\n\n private paramExtractors: Record<string, ParamExtractor>;\n\n constructor(props: Props) {\n Object.assign(this, props);\n }\n\n getRouteParams(pathname: string): Dictionary<string> {\n const groups = new RegExp(this.regex).exec(pathname)?.groups || {};\n return pipe(\n filterValues<string>(Boolean),\n mapValues<string, string | string[]>((group, key) =>\n this.paramExtractors[key](group)\n ),\n mapKeys(decodeSlugParam)\n )(groups);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,GAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAA2D,SAAAG,QAAAC,GAAA,sCAAAD,OAAA,wBAAAE,MAAA,uBAAAA,MAAA,CAAAC,QAAA,aAAAF,GAAA,kBAAAA,GAAA,gBAAAA,GAAA,WAAAA,GAAA,yBAAAC,MAAA,IAAAD,GAAA,CAAAG,WAAA,KAAAF,MAAA,IAAAD,GAAA,KAAAC,MAAA,CAAAG,SAAA,qBAAAJ,GAAA,KAAAD,OAAA,CAAAC,GAAA;AAAA,SAAAK,gBAAAC,QAAA,EAAAC,WAAA,UAAAD,QAAA,YAAAC,WAAA,eAAAC,SAAA;AAAA,SAAAC,kBAAAC,MAAA,EAAAC,KAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAAD,CAAA,UAAAE,UAAA,GAAAH,KAAA,CAAAC,CAAA,GAAAE,UAAA,CAAAC,UAAA,GAAAD,UAAA,CAAAC,UAAA,WAAAD,UAAA,CAAAE,YAAA,wBAAAF,UAAA,EAAAA,UAAA,CAAAG,QAAA,SAAAC,MAAA,CAAAC,cAAA,CAAAT,MAAA,EAAAU,cAAA,CAAAN,UAAA,CAAAO,GAAA,GAAAP,UAAA;AAAA,SAAAQ,aAAAf,WAAA,EAAAgB,UAAA,EAAAC,WAAA,QAAAD,UAAA,EAAAd,iBAAA,CAAAF,WAAA,CAAAH,SAAA,EAAAmB,UAAA,OAAAC,WAAA,EAAAf,iBAAA,CAAAF,WAAA,EAAAiB,WAAA,GAAAN,MAAA,CAAAC,cAAA,CAAAZ,WAAA,iBAAAU,QAAA,mBAAAV,WAAA;AAAA,SAAAa,eAAAK,GAAA,QAAAJ,GAAA,GAAAK,YAAA,CAAAD,GAAA,oBAAA1B,OAAA,CAAAsB,GAAA,iBAAAA,GAAA,GAAAM,MAAA,CAAAN,GAAA;AAAA,SAAAK,aAAAE,KAAA,EAAAC,IAAA,QAAA9B,OAAA,CAAA6B,KAAA,kBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAA3B,MAAA,CAAA8B,WAAA,OAAAD,IAAA,KAAAE,SAAA,QAAAC,GAAA,GAAAH,IAAA,CAAAI,IAAA,CAAAN,KAAA,EAAAC,IAAA,oBAAA9B,OAAA,CAAAkC,GAAA,uBAAAA,GAAA,YAAAzB,SAAA,4DAAAqB,IAAA,gBAAAF,MAAA,GAAAQ,MAAA,EAAAP,KAAA;AAAA,IAgB9CQ,KAAK;EAUhB,SAAAA,MAAYzB,KAAY,EAAE;IAAAN,eAAA,OAAA+B,KAAA;IACxBlB,MAAM,CAACmB,MAAM,CAAC,IAAI,EAAE1B,KAAK,CAAC;EAC5B;EAACW,YAAA,CAAAc,KAAA;IAAAf,GAAA;IAAAiB,KAAA,EAED,SAAAC,eAAeC,QAAgB,EAAsB;MAAA,IAAAC,YAAA;QAAAC,KAAA;MACnD,IAAMC,MAAM,GAAG,EAAAF,YAAA,OAAIG,MAAM,CAAC,IAAI,CAACC,KAAK,CAAC,CAACC,IAAI,CAACN,QAAQ,CAAC,cAAAC,YAAA,uBAArCA,YAAA,CAAuCE,MAAM,KAAI,CAAC,CAAC;MAClE,OAAO,IAAAI,QAAI,EACT,IAAAC,oBAAY,EAASC,OAAO,CAAC,EAC7B,IAAAC,iBAAS,EAA4B,UAACC,KAAK,EAAE9B,GAAG;QAAA,OAC9CqB,KAAI,CAACU,eAAe,CAAC/B,GAAG,CAAC,CAAC8B,KAAK,CAAC;MAAA,CAClC,CAAC,EACD,IAAAE,eAAO,EAACC,0BAAe,CACzB,CAAC,CAACX,MAAM,CAAC;IACX;EAAC;EAAA,OAAAP,KAAA;AAAA;AAAAmB,OAAA,CAAAnB,KAAA,GAAAA,KAAA"}
{"version":3,"file":"route.js","names":["_fp","require","_object","_slugParam","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","_createClass","protoProps","staticProps","arg","_toPrimitive","String","input","hint","prim","toPrimitive","undefined","res","call","Number","Route","assign","value","getRouteParams","pathname","_RegExp$exec","_this","groups","RegExp","regex","exec","pipe","filterValues","Boolean","mapValues","group","paramExtractors","mapKeys","decodeSlugParam","exports"],"sources":["../../../../src/components/route/route.ts"],"sourcesContent":["import { pipe } from '../../utils/fp.utils';\nimport { filterValues, mapKeys, mapValues } from '../../utils/object.utils';\nimport { decodeSlugParam } from '../slug-param/slug-param';\nimport type { Dictionary } from '../../types/dictionary';\nimport type { ParamExtractor } from '../dynamic-routes/common/route-params-parser';\n\nimport type { RequestHandler } from '../../types/request-handlers';\n\ninterface Props {\n method?: string;\n fileName: string;\n handler: RequestHandler | Record<string, RequestHandler>;\n regex: RegExp;\n paramExtractors: Record<string, ParamExtractor>;\n nestingLevel: number;\n urlPath: string;\n directoryPaths: string[];\n}\n\nexport class Route {\n method?: string;\n fileName: string;\n handler: RequestHandler | Record<string, RequestHandler>;\n regex: RegExp;\n nestingLevel: number;\n urlPath: string;\n directoryPaths: string[];\n\n private paramExtractors: Record<string, ParamExtractor>;\n\n constructor(props: Props) {\n Object.assign(this, props);\n }\n\n getRouteParams(pathname: string): Dictionary<string> {\n const groups = new RegExp(this.regex).exec(pathname)?.groups || {};\n return pipe(\n filterValues<string>(Boolean),\n mapValues<string, string | string[]>((group, key) =>\n this.paramExtractors[key](group)\n ),\n mapKeys(decodeSlugParam)\n )(groups);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,GAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAA2D,SAAAG,QAAAC,GAAA,sCAAAD,OAAA,wBAAAE,MAAA,uBAAAA,MAAA,CAAAC,QAAA,aAAAF,GAAA,kBAAAA,GAAA,gBAAAA,GAAA,WAAAA,GAAA,yBAAAC,MAAA,IAAAD,GAAA,CAAAG,WAAA,KAAAF,MAAA,IAAAD,GAAA,KAAAC,MAAA,CAAAG,SAAA,qBAAAJ,GAAA,KAAAD,OAAA,CAAAC,GAAA;AAAA,SAAAK,gBAAAC,QAAA,EAAAC,WAAA,UAAAD,QAAA,YAAAC,WAAA,eAAAC,SAAA;AAAA,SAAAC,kBAAAC,MAAA,EAAAC,KAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAAD,CAAA,UAAAE,UAAA,GAAAH,KAAA,CAAAC,CAAA,GAAAE,UAAA,CAAAC,UAAA,GAAAD,UAAA,CAAAC,UAAA,WAAAD,UAAA,CAAAE,YAAA,wBAAAF,UAAA,EAAAA,UAAA,CAAAG,QAAA,SAAAC,MAAA,CAAAC,cAAA,CAAAT,MAAA,EAAAU,cAAA,CAAAN,UAAA,CAAAO,GAAA,GAAAP,UAAA;AAAA,SAAAQ,aAAAf,WAAA,EAAAgB,UAAA,EAAAC,WAAA,QAAAD,UAAA,EAAAd,iBAAA,CAAAF,WAAA,CAAAH,SAAA,EAAAmB,UAAA,OAAAC,WAAA,EAAAf,iBAAA,CAAAF,WAAA,EAAAiB,WAAA,GAAAN,MAAA,CAAAC,cAAA,CAAAZ,WAAA,iBAAAU,QAAA,mBAAAV,WAAA;AAAA,SAAAa,eAAAK,GAAA,QAAAJ,GAAA,GAAAK,YAAA,CAAAD,GAAA,oBAAA1B,OAAA,CAAAsB,GAAA,iBAAAA,GAAA,GAAAM,MAAA,CAAAN,GAAA;AAAA,SAAAK,aAAAE,KAAA,EAAAC,IAAA,QAAA9B,OAAA,CAAA6B,KAAA,kBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAA3B,MAAA,CAAA8B,WAAA,OAAAD,IAAA,KAAAE,SAAA,QAAAC,GAAA,GAAAH,IAAA,CAAAI,IAAA,CAAAN,KAAA,EAAAC,IAAA,oBAAA9B,OAAA,CAAAkC,GAAA,uBAAAA,GAAA,YAAAzB,SAAA,4DAAAqB,IAAA,gBAAAF,MAAA,GAAAQ,MAAA,EAAAP,KAAA;AAAA,IAiB9CQ,KAAK;EAWhB,SAAAA,MAAYzB,KAAY,EAAE;IAAAN,eAAA,OAAA+B,KAAA;IACxBlB,MAAM,CAACmB,MAAM,CAAC,IAAI,EAAE1B,KAAK,CAAC;EAC5B;EAACW,YAAA,CAAAc,KAAA;IAAAf,GAAA;IAAAiB,KAAA,EAED,SAAAC,eAAeC,QAAgB,EAAsB;MAAA,IAAAC,YAAA;QAAAC,KAAA;MACnD,IAAMC,MAAM,GAAG,EAAAF,YAAA,OAAIG,MAAM,CAAC,IAAI,CAACC,KAAK,CAAC,CAACC,IAAI,CAACN,QAAQ,CAAC,cAAAC,YAAA,uBAArCA,YAAA,CAAuCE,MAAM,KAAI,CAAC,CAAC;MAClE,OAAO,IAAAI,QAAI,EACT,IAAAC,oBAAY,EAASC,OAAO,CAAC,EAC7B,IAAAC,iBAAS,EAA4B,UAACC,KAAK,EAAE9B,GAAG;QAAA,OAC9CqB,KAAI,CAACU,eAAe,CAAC/B,GAAG,CAAC,CAAC8B,KAAK,CAAC;MAAA,CAClC,CAAC,EACD,IAAAE,eAAO,EAACC,0BAAe,CACzB,CAAC,CAACX,MAAM,CAAC;IACX;EAAC;EAAA,OAAAP,KAAA;AAAA;AAAAmB,OAAA,CAAAnB,KAAA,GAAAA,KAAA"}

@@ -56,2 +56,3 @@ "use strict";

extractMiddlewares,
matchRoute,
runHandler,

@@ -62,8 +63,3 @@ _args = arguments;

case 0:
runHandler = function _runHandler(pathname, method, args) {
var matchedRoute = routeHandlers.find(function (_ref4) {
var regex = _ref4.regex,
routeMethod = _ref4.method;
return regex.test(pathname) && (!routeMethod || method === routeMethod);
});
runHandler = function _runHandler(method, args, matchedRoute, routeParams) {
if (!matchedRoute) {

@@ -73,3 +69,2 @@ return notFoundHandler.apply(void 0, _toConsumableArray(args));

var handler = matchedRoute.handler;
var routeParams = matchedRoute.getRouteParams(pathname);
if ((0, _object.isRecordWith)(handler) && method && handler[method]) {

@@ -82,5 +77,5 @@ return handler[method].apply(handler, _toConsumableArray(args).concat([routeParams]));

if (Array.isArray(handler)) {
var _ref5 = [handler.slice(0, -1), handler.at(-1)],
routeMiddlewares = _ref5[0],
routeHandler = _ref5[1];
var _ref6 = [handler.slice(0, -1), handler.at(-1)],
routeMiddlewares = _ref6[0],
routeHandler = _ref6[1];
return (0, _middlewareExecuter.executeWithMiddlewares)(routeMiddlewares, routeHandler, args, routeParams);

@@ -90,8 +85,25 @@ }

};
extractMiddlewares = function _extractMiddlewares(pathname) {
return middlewares.filter(function (_ref2) {
var regexp = _ref2.regexp;
return regexp.test("".concat(pathname, "/"));
}).flatMap(function (_ref3) {
var handler = _ref3.handler;
matchRoute = function _matchRoute(pathname, method) {
return routeHandlers.find(function (_ref5) {
var regex = _ref5.regex,
routeMethod = _ref5.method;
return regex.test(pathname) && (!routeMethod || method === routeMethod);
});
};
extractMiddlewares = function _extractMiddlewares(pathname, matchedRoute) {
var matched;
if (matchedRoute) {
var allowedPaths = new Set(matchedRoute.directoryPaths);
matched = middlewares.filter(function (_ref2) {
var middlewarePath = _ref2.path;
return allowedPaths.has(middlewarePath);
});
} else {
matched = middlewares.filter(function (_ref3) {
var regexp = _ref3.regexp;
return regexp.test(pathname);
});
}
return matched.flatMap(function (_ref4) {
var handler = _ref4.handler;
return Array.isArray(handler) ? handler : [handler];

@@ -103,5 +115,5 @@ });

normalizedBaseDir = path.isAbsolute(baseDir) ? baseDir : path.join(process.cwd(), baseDir);
_context.next = 7;
_context.next = 8;
return (0, _validations.validateBaseDirExistence)(normalizedBaseDir);
case 7:
case 8:
fileRouteResolver = new _fileRouteResolver.FileRouteResolver({

@@ -112,5 +124,5 @@ baseDir: normalizedBaseDir,

});
_context.next = 10;
_context.next = 11;
return fileRouteResolver.getHandlers();
case 10:
case 11:
_yield$fileRouteResol = _context.sent;

@@ -120,12 +132,12 @@ _yield$fileRouteResol2 = _slicedToArray(_yield$fileRouteResol, 2);

routeHandlers = _yield$fileRouteResol2[1];
_context.next = 16;
_context.next = 17;
return (0, _notFoundResolver.resolveNotFoundHandler)(normalizedBaseDir);
case 16:
case 17:
_context.t0 = _context.sent;
if (_context.t0) {
_context.next = 19;
_context.next = 20;
break;
}
_context.t0 = defaultNotFoundHandler;
case 19:
case 20:
notFoundHandler = _context.t0;

@@ -143,8 +155,10 @@ if (onInit) {

var method = getMethod ? getMethod.apply(void 0, args) : undefined;
var matchedMiddlewares = extractMiddlewares(pathname);
var matchedRoute = matchRoute(pathname, method);
var routeParams = matchedRoute === null || matchedRoute === void 0 ? void 0 : matchedRoute.getRouteParams(pathname);
var matchedMiddlewares = extractMiddlewares(pathname, matchedRoute);
return (0, _middlewareExecuter.executeWithMiddlewares)(matchedMiddlewares, function () {
return runHandler(pathname, method, args);
}, args);
return runHandler(method, args, matchedRoute, routeParams);
}, args, routeParams);
});
case 22:
case 23:
case "end":

@@ -151,0 +165,0 @@ return _context.stop();

@@ -1,1 +0,1 @@

{"version":3,"file":"file-router.js","names":["path","_interopRequireWildcard","require","process","_fileRouteResolver","_object","_notFoundResolver","_httpAdapter","_validations","_middlewareExecuter","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_regeneratorRuntime","exports","Op","hasOwn","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","o","minLen","n","toString","test","len","arr2","_i","_s","_e","_x","_r","_arr","_n","_d","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","initFileRouter","_initFileRouter","_callee","_ref","_ref$baseDir","baseDir","ignoreFilesRegex","_ref$clearImportCache","clearImportCache","_ref$adapter","adapter","onInit","getPathname","defaultNotFoundHandler","getMethod","normalizedBaseDir","fileRouteResolver","_yield$fileRouteResol","_yield$fileRouteResol2","middlewares","routeHandlers","notFoundHandler","extractMiddlewares","runHandler","_args","_callee$","_context","_runHandler","pathname","matchedRoute","find","_ref4","regex","routeMethod","handler","routeParams","getRouteParams","isRecordWith","concat","isFunction","_ref5","at","routeMiddlewares","routeHandler","executeWithMiddlewares","_extractMiddlewares","filter","_ref2","regexp","flatMap","_ref3","httpAdapter","isAbsolute","join","cwd","validateBaseDirExistence","FileRouteResolver","getHandlers","resolveNotFoundHandler","t0","routes","requestHandler","_len","_key","matchedMiddlewares"],"sources":["../../src/file-router.ts"],"sourcesContent":["import * as path from 'node:path';\nimport * as process from 'node:process';\n\nimport { FileRouteResolver } from './components/file-route-resolver';\nimport { isFunction, isRecordWith } from './utils/object.utils';\nimport { resolveNotFoundHandler } from './components/not-found-resolver';\nimport { httpAdapter } from './adapters/http-adapter';\nimport { validateBaseDirExistence } from './validations/validations';\nimport { executeWithMiddlewares } from './components/middleware-executer';\n\nimport type { RequestHandler } from './types/request-handlers';\nimport type { Adapter } from './types/adapter';\nimport type { Route } from './components/route/route';\n\ninterface InitParams {\n routes: Route[];\n}\n\ninterface Options {\n baseDir?: string;\n ignoreFilesRegex?: RegExp[];\n adapter?: Adapter;\n clearImportCache?: boolean;\n onInit?: (params: InitParams) => void;\n}\n\nexport async function initFileRouter({\n baseDir = 'api',\n ignoreFilesRegex,\n clearImportCache = false,\n adapter = httpAdapter,\n onInit\n}: Options = {}) {\n const { getPathname, defaultNotFoundHandler, getMethod } = adapter;\n\n const normalizedBaseDir = path.isAbsolute(baseDir)\n ? baseDir\n : path.join(process.cwd(), baseDir);\n\n await validateBaseDirExistence(normalizedBaseDir);\n\n const fileRouteResolver = new FileRouteResolver({\n baseDir: normalizedBaseDir,\n ignoreFilesRegex,\n clearImportCache\n });\n\n const [middlewares, routeHandlers] = await fileRouteResolver.getHandlers();\n const notFoundHandler =\n (await resolveNotFoundHandler(normalizedBaseDir)) || defaultNotFoundHandler;\n\n function extractMiddlewares(pathname: string) {\n return middlewares\n .filter(({ regexp }) => regexp.test(`${pathname}/`))\n .flatMap(({ handler }) => (Array.isArray(handler) ? handler : [handler]));\n }\n\n function runHandler<R>(\n pathname: string,\n method: string | undefined,\n args: unknown[]\n ) {\n const matchedRoute = routeHandlers.find(\n ({ regex, method: routeMethod }) =>\n regex.test(pathname) && (!routeMethod || method === routeMethod)\n );\n\n if (!matchedRoute) {\n return notFoundHandler(...args);\n }\n\n const { handler } = matchedRoute;\n const routeParams = matchedRoute.getRouteParams(pathname);\n\n if (isRecordWith<RequestHandler>(handler) && method && handler[method]) {\n return handler[method](...args, routeParams);\n }\n\n if (isFunction(handler)) {\n return handler(...args, routeParams);\n }\n\n if (Array.isArray(handler)) {\n const [routeMiddlewares, routeHandler] = [\n handler.slice(0, -1),\n handler.at(-1)\n ];\n\n return executeWithMiddlewares<R>(\n routeMiddlewares,\n routeHandler,\n args,\n routeParams\n );\n }\n\n return notFoundHandler(...args, routeParams);\n }\n\n if (onInit) {\n onInit({ routes: routeHandlers });\n }\n\n return function requestHandler<R>(...args: unknown[]) {\n const pathname = getPathname(...args);\n const method = getMethod ? getMethod(...args) : undefined;\n const matchedMiddlewares = extractMiddlewares(pathname);\n\n return executeWithMiddlewares<R>(\n matchedMiddlewares,\n () => runHandler<R>(pathname, method, args),\n args\n );\n };\n}\n"],"mappings":"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"}
{"version":3,"file":"file-router.js","names":["path","_interopRequireWildcard","require","process","_fileRouteResolver","_object","_notFoundResolver","_httpAdapter","_validations","_middlewareExecuter","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_regeneratorRuntime","exports","Op","hasOwn","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","o","minLen","n","toString","test","len","arr2","_i","_s","_e","_x","_r","_arr","_n","_d","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","initFileRouter","_initFileRouter","_callee","_ref","_ref$baseDir","baseDir","ignoreFilesRegex","_ref$clearImportCache","clearImportCache","_ref$adapter","adapter","onInit","getPathname","defaultNotFoundHandler","getMethod","normalizedBaseDir","fileRouteResolver","_yield$fileRouteResol","_yield$fileRouteResol2","middlewares","routeHandlers","notFoundHandler","extractMiddlewares","matchRoute","runHandler","_args","_callee$","_context","_runHandler","matchedRoute","routeParams","handler","isRecordWith","concat","isFunction","_ref6","at","routeMiddlewares","routeHandler","executeWithMiddlewares","_matchRoute","pathname","find","_ref5","regex","routeMethod","_extractMiddlewares","matched","allowedPaths","Set","directoryPaths","filter","_ref2","middlewarePath","_ref3","regexp","flatMap","_ref4","httpAdapter","isAbsolute","join","cwd","validateBaseDirExistence","FileRouteResolver","getHandlers","resolveNotFoundHandler","t0","routes","requestHandler","_len","_key","getRouteParams","matchedMiddlewares"],"sources":["../../src/file-router.ts"],"sourcesContent":["import * as path from 'node:path';\nimport * as process from 'node:process';\n\nimport { FileRouteResolver } from './components/file-route-resolver';\nimport { isFunction, isRecordWith } from './utils/object.utils';\nimport { resolveNotFoundHandler } from './components/not-found-resolver';\nimport { httpAdapter } from './adapters/http-adapter';\nimport { validateBaseDirExistence } from './validations/validations';\nimport { executeWithMiddlewares } from './components/middleware-executer';\n\nimport type { RequestHandler } from './types/request-handlers';\nimport type { Adapter } from './types/adapter';\nimport type { Route } from './components/route/route';\nimport type { Dictionary } from './types/dictionary';\n\ninterface InitParams {\n routes: Route[];\n}\n\ninterface Options {\n baseDir?: string;\n ignoreFilesRegex?: RegExp[];\n adapter?: Adapter;\n clearImportCache?: boolean;\n onInit?: (params: InitParams) => void;\n}\n\nexport async function initFileRouter({\n baseDir = 'api',\n ignoreFilesRegex,\n clearImportCache = false,\n adapter = httpAdapter,\n onInit\n}: Options = {}) {\n const { getPathname, defaultNotFoundHandler, getMethod } = adapter;\n\n const normalizedBaseDir = path.isAbsolute(baseDir)\n ? baseDir\n : path.join(process.cwd(), baseDir);\n\n await validateBaseDirExistence(normalizedBaseDir);\n\n const fileRouteResolver = new FileRouteResolver({\n baseDir: normalizedBaseDir,\n ignoreFilesRegex,\n clearImportCache\n });\n\n const [middlewares, routeHandlers] = await fileRouteResolver.getHandlers();\n const notFoundHandler =\n (await resolveNotFoundHandler(normalizedBaseDir)) || defaultNotFoundHandler;\n\n function extractMiddlewares(pathname: string, matchedRoute?: Route) {\n let matched;\n if (matchedRoute) {\n const allowedPaths = new Set(matchedRoute.directoryPaths);\n matched = middlewares.filter(({ path: middlewarePath }) =>\n allowedPaths.has(middlewarePath)\n );\n } else {\n matched = middlewares.filter(({ regexp }) => regexp.test(pathname));\n }\n\n return matched.flatMap(({ handler }) =>\n Array.isArray(handler) ? handler : [handler]\n );\n }\n\n function matchRoute(pathname: string, method: string | undefined) {\n return routeHandlers.find(\n ({ regex, method: routeMethod }) =>\n regex.test(pathname) && (!routeMethod || method === routeMethod)\n );\n }\n\n function runHandler<R>(\n method: string | undefined,\n args: unknown[],\n matchedRoute?: Route,\n routeParams?: Dictionary<string>\n ) {\n if (!matchedRoute) {\n return notFoundHandler(...args);\n }\n\n const { handler } = matchedRoute;\n\n if (isRecordWith<RequestHandler>(handler) && method && handler[method]) {\n return handler[method](...args, routeParams);\n }\n\n if (isFunction(handler)) {\n return handler(...args, routeParams);\n }\n\n if (Array.isArray(handler)) {\n const [routeMiddlewares, routeHandler] = [\n handler.slice(0, -1),\n handler.at(-1)\n ];\n\n return executeWithMiddlewares<R>(\n routeMiddlewares,\n routeHandler,\n args,\n routeParams\n );\n }\n\n return notFoundHandler(...args, routeParams);\n }\n\n if (onInit) {\n onInit({ routes: routeHandlers });\n }\n\n return function requestHandler<R>(...args: unknown[]) {\n const pathname = getPathname(...args);\n const method = getMethod ? getMethod(...args) : undefined;\n const matchedRoute = matchRoute(pathname, method);\n const routeParams = matchedRoute?.getRouteParams(pathname);\n const matchedMiddlewares = extractMiddlewares(pathname, matchedRoute);\n\n return executeWithMiddlewares<R>(\n matchedMiddlewares,\n () => runHandler<R>(method, args, matchedRoute, routeParams),\n args,\n routeParams\n );\n };\n}\n"],"mappings":"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"}
import fs from 'node:fs/promises';
import path from 'node:path';
import { Route } from "./route/route.mjs";
import { Middleware } from "./route/middleware.mjs";
import { catchAllSegment } from "./dynamic-routes/catch-all-segment.mjs";
import { exactSlugSegment } from "./dynamic-routes/exact-slug-segment.mjs";
import { catchAllSegment } from "./dynamic-routes/catch-all-segment.mjs";
import { optionalCatchAllSegment } from "./dynamic-routes/optional-catch-all-segment.mjs";
import { Route } from "./route/route.mjs";
import { Middleware } from "./route/middleware.mjs";
import { parseDynamicRoute } from "./dynamic-routes/parse-dynamic-route.mjs";
import { isCommonJs } from "../utils/env.utils.mjs";

@@ -58,3 +59,3 @@ import { validateFileFormat } from "../validations/validations.mjs";

} else {
const route = await this.processFileEntry(fullPath, entry, routePath, nestingLevel);
const route = await this.processFileEntry(fullPath, entry, routePath, nestingLevel, parentRoute);
routes.push(route);

@@ -83,3 +84,3 @@ }

const handler = await import(fullPath).then(module => validateFileFormat(fullPath, module)).then(module => module.default);
const routePath = filePath.replace(FileRouteResolver.middlewareFilePattern, '');
const routePath = this.normalizeMiddlewarePath(filePath);
return new Middleware({

@@ -91,3 +92,3 @@ path: routePath,

}
async processFileEntry(fullPath, entry, routePath, nestingLevel) {
async processFileEntry(fullPath, entry, routePath, nestingLevel, parentRoute) {
if (this.clearImportCache) {

@@ -102,6 +103,7 @@ delete require.cache[fullPath];

paramExtractors
} = this.parseDynamicParams(pureRouteName);
} = parseDynamicRoute(pureRouteName);
const isIndex = FileRouteResolver.indexFilePattern.test(entry.name);
const routeKey = isIndex ? route.replace(/\/index$/, '') : route;
const formattedUrlPath = (isIndex ? pureRouteName.replace(/\/index$/, '') : pureRouteName) || '/';
const directoryPaths = this.buildDirectoryPaths(parentRoute);
return new Route({

@@ -114,20 +116,6 @@ method,

paramExtractors,
urlPath: formattedUrlPath
urlPath: formattedUrlPath,
directoryPaths
});
}
parseDynamicParams(initialRoute) {
return [exactSlugSegment, catchAllSegment, optionalCatchAllSegment].filter(dynamicRoute => dynamicRoute.isMatch(initialRoute)).reduce((acc, route) => {
const parsedRoute = route.parse(acc.route);
return {
route: parsedRoute.route,
paramExtractors: {
...acc.paramExtractors,
...parsedRoute.paramExtractors
}
};
}, {
route: initialRoute,
paramExtractors: {}
});
}
extractMethodFromRoute(route) {

@@ -143,3 +131,23 @@ const pattern = /\.\[([^\]]+)\](\..+)?$/;

}
normalizeMiddlewarePath(filePath) {
const pathWithoutFile = filePath.replace(FileRouteResolver.middlewareFilePattern, '');
if (pathWithoutFile === '/' || pathWithoutFile === '') {
return '/';
}
return pathWithoutFile.replace(/\/$/, '');
}
buildDirectoryPaths(parentRoute) {
const directories = ['/'];
if (!parentRoute) {
return directories;
}
const segments = parentRoute.split('/').filter(Boolean);
let currentPath = '';
for (const segment of segments) {
currentPath += `/${segment}`;
directories.push(currentPath);
}
return directories;
}
}
//# sourceMappingURL=file-route-resolver.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"file-route-resolver.mjs","names":["fs","path","exactSlugSegment","catchAllSegment","optionalCatchAllSegment","Route","Middleware","isCommonJs","validateFileFormat","isClass","FileRouteResolver","fileExtensions","join","fileExtensionPattern","RegExp","middlewareFilePattern","indexFilePattern","clearImportCache","constructor","data","baseDir","ignoreFilesRegex","console","warn","getHandlers","directory","middlewares","routes","scanDirectory","sort","left","right","nestingLevel","compareByNestingLevelAndType","parentRoute","entries","readdir","withFileTypes","entry","childMiddlewares","childRoutes","processEntry","push","fullPath","name","routePath","isDirectory","isFile","isValidFile","test","middleware","processMiddlewareEntry","route","processFileEntry","some","pattern","isDynamic","dynamicRoute","isMatch","fileName","filePath","require","cache","handler","then","module","default","replace","FunctionOrClass","initialRoute","method","pureRouteName","extractMethodFromRoute","paramExtractors","parseDynamicParams","isIndex","routeKey","formattedUrlPath","regex","urlPath","filter","reduce","acc","parsedRoute","parse","match","undefined","pureRoute"],"sources":["../../../src/components/file-route-resolver.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { exactSlugSegment } from './dynamic-routes/exact-slug-segment';\nimport { catchAllSegment } from './dynamic-routes/catch-all-segment';\nimport { optionalCatchAllSegment } from './dynamic-routes/optional-catch-all-segment';\nimport { Route } from './route/route';\nimport { Middleware } from './route/middleware';\nimport { isCommonJs } from '../utils/env.utils';\nimport { validateFileFormat } from '../validations/validations';\n\nimport { isClass } from '../utils/common.utils';\nimport type { ParamExtractor } from './dynamic-routes/common/route-params-parser';\nimport type { Dirent } from 'node:fs';\n\ninterface Props {\n baseDir: string;\n ignoreFilesRegex?: RegExp[];\n clearImportCache: boolean;\n}\n\ninterface RouteWithParams {\n route: string;\n paramExtractors: Record<string, ParamExtractor>;\n}\n\nexport class FileRouteResolver {\n private static readonly fileExtensions = ['js', 'mjs', 'cjs', 'ts'].join('|');\n private static readonly fileExtensionPattern = new RegExp(\n `\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n private static readonly middlewareFilePattern = new RegExp(\n `middleware\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n // Matches: index.js and index.[get].js\n private static readonly indexFilePattern = new RegExp(\n `index(\\\\.\\\\[[^\\\\]]+\\\\])?\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n\n private readonly baseDir: string;\n private readonly ignoreFilesRegex: RegExp[];\n private readonly clearImportCache: boolean = false;\n\n constructor(data: Props) {\n this.baseDir = data.baseDir;\n this.ignoreFilesRegex = data.ignoreFilesRegex || [];\n\n if (data.clearImportCache && !isCommonJs()) {\n console.warn('Cache clearing is only supported for CommonJS modules');\n } else {\n this.clearImportCache = data.clearImportCache;\n }\n }\n\n async getHandlers(\n directory = this.baseDir\n ): Promise<[Middleware[], Route[]]> {\n const [middlewares, routes] = await this.scanDirectory(directory);\n\n return [\n middlewares.sort((left, right) => left.nestingLevel - right.nestingLevel),\n routes.sort(this.compareByNestingLevelAndType)\n ];\n }\n\n private async scanDirectory(\n directory = this.baseDir,\n parentRoute = '',\n nestingLevel = 0\n ): Promise<[Middleware[], Route[]]> {\n const entries = await fs.readdir(directory, { withFileTypes: true });\n const routes: Route[] = [];\n const middlewares: Middleware[] = [];\n\n for (const entry of entries) {\n const [childMiddlewares, childRoutes] = await this.processEntry(\n directory,\n parentRoute,\n nestingLevel,\n entry\n );\n\n routes.push(...childRoutes);\n middlewares.push(...childMiddlewares);\n }\n\n return [middlewares, routes];\n }\n\n private async processEntry(\n directory: string,\n parentRoute: string,\n nestingLevel: number,\n entry: Dirent\n ) {\n const routes: Route[] = [];\n const middlewares: Middleware[] = [];\n\n const fullPath = path.join(directory, entry.name);\n const routePath = `${parentRoute}/${entry.name}`;\n\n if (entry.isDirectory()) {\n const [childMiddlewares, childRoutes] = await this.scanDirectory(\n fullPath,\n routePath,\n nestingLevel + 1\n );\n routes.push(...childRoutes);\n middlewares.push(...childMiddlewares);\n } else if (entry.isFile() && this.isValidFile(entry.name)) {\n if (FileRouteResolver.middlewareFilePattern.test(entry.name)) {\n const middleware = await this.processMiddlewareEntry(\n fullPath,\n routePath,\n nestingLevel\n );\n\n middlewares.push(middleware);\n } else {\n const route = await this.processFileEntry(\n fullPath,\n entry,\n routePath,\n nestingLevel\n );\n\n routes.push(route);\n }\n }\n\n return [middlewares, routes] as const;\n }\n\n private isValidFile(name: string): boolean {\n if (this.ignoreFilesRegex.some((pattern) => pattern.test(name))) {\n return false;\n }\n\n return FileRouteResolver.fileExtensionPattern.test(name);\n }\n\n private compareByNestingLevelAndType(left: Route, right: Route): number {\n if (left.nestingLevel !== right.nestingLevel) {\n return right.nestingLevel - left.nestingLevel;\n }\n\n const isDynamic = [\n optionalCatchAllSegment,\n catchAllSegment,\n exactSlugSegment\n ].some((dynamicRoute) => dynamicRoute.isMatch(left.fileName));\n\n return isDynamic ? 1 : -1;\n }\n\n private async processMiddlewareEntry(\n fullPath: string,\n filePath: string,\n nestingLevel: number\n ) {\n if (this.clearImportCache) {\n delete require.cache[fullPath];\n }\n\n const handler = await import(fullPath)\n .then((module) => validateFileFormat(fullPath, module))\n .then((module) => module.default);\n\n const routePath = filePath.replace(\n FileRouteResolver.middlewareFilePattern,\n ''\n );\n\n return new Middleware({\n path: routePath,\n handler,\n nestingLevel\n });\n }\n\n private async processFileEntry(\n fullPath: string,\n entry: Dirent,\n routePath: string,\n nestingLevel: number\n ): Promise<Route> {\n if (this.clearImportCache) {\n delete require.cache[fullPath];\n }\n\n const handler = await import(fullPath)\n .then((module) => validateFileFormat(fullPath, module))\n .then((module) => module.default)\n .then((FunctionOrClass) =>\n isClass(FunctionOrClass) ? new FunctionOrClass() : FunctionOrClass\n );\n\n const initialRoute = routePath.replace(\n FileRouteResolver.fileExtensionPattern,\n ''\n );\n\n const [method, pureRouteName] = this.extractMethodFromRoute(initialRoute);\n const { route, paramExtractors } = this.parseDynamicParams(pureRouteName);\n\n const isIndex = FileRouteResolver.indexFilePattern.test(entry.name);\n const routeKey = isIndex ? route.replace(/\\/index$/, '') : route;\n\n const formattedUrlPath =\n (isIndex ? pureRouteName.replace(/\\/index$/, '') : pureRouteName) || '/';\n\n return new Route({\n method,\n fileName: entry.name,\n handler,\n regex: new RegExp(`^${routeKey}/?$`),\n nestingLevel,\n paramExtractors,\n urlPath: formattedUrlPath\n });\n }\n\n private parseDynamicParams(initialRoute: string): RouteWithParams {\n return [exactSlugSegment, catchAllSegment, optionalCatchAllSegment]\n .filter((dynamicRoute) => dynamicRoute.isMatch(initialRoute))\n .reduce(\n (acc, route) => {\n const parsedRoute = route.parse(acc.route);\n return {\n route: parsedRoute.route,\n paramExtractors: {\n ...acc.paramExtractors,\n ...parsedRoute.paramExtractors\n }\n };\n },\n { route: initialRoute, paramExtractors: {} }\n );\n }\n\n private extractMethodFromRoute(route: string): [string | undefined, string] {\n const pattern = /\\.\\[([^\\]]+)\\](\\..+)?$/;\n\n const match = route.match(pattern);\n if (!match) {\n return [undefined, route];\n }\n\n const [, method] = match;\n const pureRoute = route.replace(pattern, '');\n\n return [method, pureRoute];\n }\n}\n"],"mappings":"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"}
{"version":3,"file":"file-route-resolver.mjs","names":["fs","path","Route","Middleware","catchAllSegment","exactSlugSegment","optionalCatchAllSegment","parseDynamicRoute","isCommonJs","validateFileFormat","isClass","FileRouteResolver","fileExtensions","join","fileExtensionPattern","RegExp","middlewareFilePattern","indexFilePattern","clearImportCache","constructor","data","baseDir","ignoreFilesRegex","console","warn","getHandlers","directory","middlewares","routes","scanDirectory","sort","left","right","nestingLevel","compareByNestingLevelAndType","parentRoute","entries","readdir","withFileTypes","entry","childMiddlewares","childRoutes","processEntry","push","fullPath","name","routePath","isDirectory","isFile","isValidFile","test","middleware","processMiddlewareEntry","route","processFileEntry","some","pattern","isDynamic","dynamicRoute","isMatch","fileName","filePath","require","cache","handler","then","module","default","normalizeMiddlewarePath","FunctionOrClass","initialRoute","replace","method","pureRouteName","extractMethodFromRoute","paramExtractors","isIndex","routeKey","formattedUrlPath","directoryPaths","buildDirectoryPaths","regex","urlPath","match","undefined","pureRoute","pathWithoutFile","directories","segments","split","filter","Boolean","currentPath","segment"],"sources":["../../../src/components/file-route-resolver.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { Route } from './route/route';\nimport { Middleware } from './route/middleware';\nimport { catchAllSegment } from './dynamic-routes/catch-all-segment';\nimport { exactSlugSegment } from './dynamic-routes/exact-slug-segment';\nimport { optionalCatchAllSegment } from './dynamic-routes/optional-catch-all-segment';\nimport { parseDynamicRoute } from './dynamic-routes/parse-dynamic-route';\nimport { isCommonJs } from '../utils/env.utils';\nimport { validateFileFormat } from '../validations/validations';\n\nimport { isClass } from '../utils/common.utils';\nimport type { Dirent } from 'node:fs';\n\ninterface Props {\n baseDir: string;\n ignoreFilesRegex?: RegExp[];\n clearImportCache: boolean;\n}\n\nexport class FileRouteResolver {\n private static readonly fileExtensions = ['js', 'mjs', 'cjs', 'ts'].join('|');\n private static readonly fileExtensionPattern = new RegExp(\n `\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n private static readonly middlewareFilePattern = new RegExp(\n `middleware\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n // Matches: index.js and index.[get].js\n private static readonly indexFilePattern = new RegExp(\n `index(\\\\.\\\\[[^\\\\]]+\\\\])?\\\\.(${FileRouteResolver.fileExtensions})$`\n );\n\n private readonly baseDir: string;\n private readonly ignoreFilesRegex: RegExp[];\n private readonly clearImportCache: boolean = false;\n\n constructor(data: Props) {\n this.baseDir = data.baseDir;\n this.ignoreFilesRegex = data.ignoreFilesRegex || [];\n\n if (data.clearImportCache && !isCommonJs()) {\n console.warn('Cache clearing is only supported for CommonJS modules');\n } else {\n this.clearImportCache = data.clearImportCache;\n }\n }\n\n async getHandlers(\n directory = this.baseDir\n ): Promise<[Middleware[], Route[]]> {\n const [middlewares, routes] = await this.scanDirectory(directory);\n\n return [\n middlewares.sort((left, right) => left.nestingLevel - right.nestingLevel),\n routes.sort(this.compareByNestingLevelAndType)\n ];\n }\n\n private async scanDirectory(\n directory = this.baseDir,\n parentRoute = '',\n nestingLevel = 0\n ): Promise<[Middleware[], Route[]]> {\n const entries = await fs.readdir(directory, { withFileTypes: true });\n const routes: Route[] = [];\n const middlewares: Middleware[] = [];\n\n for (const entry of entries) {\n const [childMiddlewares, childRoutes] = await this.processEntry(\n directory,\n parentRoute,\n nestingLevel,\n entry\n );\n\n routes.push(...childRoutes);\n middlewares.push(...childMiddlewares);\n }\n\n return [middlewares, routes];\n }\n\n private async processEntry(\n directory: string,\n parentRoute: string,\n nestingLevel: number,\n entry: Dirent\n ) {\n const routes: Route[] = [];\n const middlewares: Middleware[] = [];\n\n const fullPath = path.join(directory, entry.name);\n const routePath = `${parentRoute}/${entry.name}`;\n\n if (entry.isDirectory()) {\n const [childMiddlewares, childRoutes] = await this.scanDirectory(\n fullPath,\n routePath,\n nestingLevel + 1\n );\n routes.push(...childRoutes);\n middlewares.push(...childMiddlewares);\n } else if (entry.isFile() && this.isValidFile(entry.name)) {\n if (FileRouteResolver.middlewareFilePattern.test(entry.name)) {\n const middleware = await this.processMiddlewareEntry(\n fullPath,\n routePath,\n nestingLevel\n );\n\n middlewares.push(middleware);\n } else {\n const route = await this.processFileEntry(\n fullPath,\n entry,\n routePath,\n nestingLevel,\n parentRoute\n );\n\n routes.push(route);\n }\n }\n\n return [middlewares, routes] as const;\n }\n\n private isValidFile(name: string): boolean {\n if (this.ignoreFilesRegex.some((pattern) => pattern.test(name))) {\n return false;\n }\n\n return FileRouteResolver.fileExtensionPattern.test(name);\n }\n\n private compareByNestingLevelAndType(left: Route, right: Route): number {\n if (left.nestingLevel !== right.nestingLevel) {\n return right.nestingLevel - left.nestingLevel;\n }\n\n const isDynamic = [\n optionalCatchAllSegment,\n catchAllSegment,\n exactSlugSegment\n ].some((dynamicRoute) => dynamicRoute.isMatch(left.fileName));\n\n return isDynamic ? 1 : -1;\n }\n\n private async processMiddlewareEntry(\n fullPath: string,\n filePath: string,\n nestingLevel: number\n ) {\n if (this.clearImportCache) {\n delete require.cache[fullPath];\n }\n\n const handler = await import(fullPath)\n .then((module) => validateFileFormat(fullPath, module))\n .then((module) => module.default);\n\n const routePath = this.normalizeMiddlewarePath(filePath);\n\n return new Middleware({\n path: routePath,\n handler,\n nestingLevel\n });\n }\n\n private async processFileEntry(\n fullPath: string,\n entry: Dirent,\n routePath: string,\n nestingLevel: number,\n parentRoute: string\n ): Promise<Route> {\n if (this.clearImportCache) {\n delete require.cache[fullPath];\n }\n\n const handler = await import(fullPath)\n .then((module) => validateFileFormat(fullPath, module))\n .then((module) => module.default)\n .then((FunctionOrClass) =>\n isClass(FunctionOrClass) ? new FunctionOrClass() : FunctionOrClass\n );\n\n const initialRoute = routePath.replace(\n FileRouteResolver.fileExtensionPattern,\n ''\n );\n\n const [method, pureRouteName] = this.extractMethodFromRoute(initialRoute);\n const { route, paramExtractors } = parseDynamicRoute(pureRouteName);\n\n const isIndex = FileRouteResolver.indexFilePattern.test(entry.name);\n const routeKey = isIndex ? route.replace(/\\/index$/, '') : route;\n\n const formattedUrlPath =\n (isIndex ? pureRouteName.replace(/\\/index$/, '') : pureRouteName) || '/';\n const directoryPaths = this.buildDirectoryPaths(parentRoute);\n\n return new Route({\n method,\n fileName: entry.name,\n handler,\n regex: new RegExp(`^${routeKey}/?$`),\n nestingLevel,\n paramExtractors,\n urlPath: formattedUrlPath,\n directoryPaths\n });\n }\n\n private extractMethodFromRoute(route: string): [string | undefined, string] {\n const pattern = /\\.\\[([^\\]]+)\\](\\..+)?$/;\n\n const match = route.match(pattern);\n if (!match) {\n return [undefined, route];\n }\n\n const [, method] = match;\n const pureRoute = route.replace(pattern, '');\n\n return [method, pureRoute];\n }\n\n private normalizeMiddlewarePath(filePath: string) {\n const pathWithoutFile = filePath.replace(\n FileRouteResolver.middlewareFilePattern,\n ''\n );\n\n if (pathWithoutFile === '/' || pathWithoutFile === '') {\n return '/';\n }\n\n return pathWithoutFile.replace(/\\/$/, '');\n }\n\n private buildDirectoryPaths(parentRoute: string): string[] {\n const directories = ['/'];\n\n if (!parentRoute) {\n return directories;\n }\n\n const segments = parentRoute.split('/').filter(Boolean);\n let currentPath = '';\n\n for (const segment of segments) {\n currentPath += `/${segment}`;\n directories.push(currentPath);\n }\n\n return directories;\n }\n}\n"],"mappings":"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"}

@@ -0,8 +1,19 @@

import { parseDynamicRoute } from "../dynamic-routes/parse-dynamic-route.mjs";
function createMiddlewareRegExp(path, nestingLevel) {
if (!nestingLevel || path === '/') {
return /.*/;
}
const {
route
} = parseDynamicRoute(path);
return new RegExp(`^${route}(?:\\/.*)?$`);
}
export class Middleware {
constructor(props) {
this.path = props.path;
this.handler = props.handler;
this.nestingLevel = props.nestingLevel;
this.regexp = new RegExp(props.nestingLevel ? `^${props.path}.*?$` : '.*');
this.regexp = createMiddlewareRegExp(props.path, props.nestingLevel);
}
}
//# sourceMappingURL=middleware.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"middleware.mjs","names":["Middleware","constructor","props","handler","nestingLevel","regexp","RegExp","path"],"sources":["../../../../src/components/route/middleware.ts"],"sourcesContent":["interface Props {\n path: string;\n handler: (...args: unknown[]) => Promise<void>;\n nestingLevel: number;\n}\n\nexport class Middleware {\n regexp: RegExp;\n handler: (...args: unknown[]) => Promise<void>;\n nestingLevel: number;\n\n constructor(props: Props) {\n this.handler = props.handler;\n this.nestingLevel = props.nestingLevel;\n this.regexp = new RegExp(props.nestingLevel ? `^${props.path}.*?$` : '.*');\n }\n}\n"],"mappings":"AAMA,OAAO,MAAMA,UAAU,CAAC;EAKtBC,WAAWA,CAACC,KAAY,EAAE;IACxB,IAAI,CAACC,OAAO,GAAGD,KAAK,CAACC,OAAO;IAC5B,IAAI,CAACC,YAAY,GAAGF,KAAK,CAACE,YAAY;IACtC,IAAI,CAACC,MAAM,GAAG,IAAIC,MAAM,CAACJ,KAAK,CAACE,YAAY,GAAI,IAAGF,KAAK,CAACK,IAAK,MAAK,GAAG,IAAI,CAAC;EAC5E;AACF"}
{"version":3,"file":"middleware.mjs","names":["parseDynamicRoute","createMiddlewareRegExp","path","nestingLevel","route","RegExp","Middleware","constructor","props","handler","regexp"],"sources":["../../../../src/components/route/middleware.ts"],"sourcesContent":["import { parseDynamicRoute } from '../dynamic-routes/parse-dynamic-route';\n\ninterface Props {\n path: string;\n handler: (...args: unknown[]) => Promise<void>;\n nestingLevel: number;\n}\n\nfunction createMiddlewareRegExp(path: string, nestingLevel: number) {\n if (!nestingLevel || path === '/') {\n return /.*/;\n }\n\n const { route } = parseDynamicRoute(path);\n\n return new RegExp(`^${route}(?:\\\\/.*)?$`);\n}\n\nexport class Middleware {\n path: string;\n regexp: RegExp;\n handler: (...args: unknown[]) => Promise<void>;\n nestingLevel: number;\n\n constructor(props: Props) {\n this.path = props.path;\n this.handler = props.handler;\n this.nestingLevel = props.nestingLevel;\n this.regexp = createMiddlewareRegExp(props.path, props.nestingLevel);\n }\n}\n"],"mappings":"SAASA,iBAAiB;AAQ1B,SAASC,sBAAsBA,CAACC,IAAY,EAAEC,YAAoB,EAAE;EAClE,IAAI,CAACA,YAAY,IAAID,IAAI,KAAK,GAAG,EAAE;IACjC,OAAO,IAAI;EACb;EAEA,MAAM;IAAEE;EAAM,CAAC,GAAGJ,iBAAiB,CAACE,IAAI,CAAC;EAEzC,OAAO,IAAIG,MAAM,CAAE,IAAGD,KAAM,aAAY,CAAC;AAC3C;AAEA,OAAO,MAAME,UAAU,CAAC;EAMtBC,WAAWA,CAACC,KAAY,EAAE;IACxB,IAAI,CAACN,IAAI,GAAGM,KAAK,CAACN,IAAI;IACtB,IAAI,CAACO,OAAO,GAAGD,KAAK,CAACC,OAAO;IAC5B,IAAI,CAACN,YAAY,GAAGK,KAAK,CAACL,YAAY;IACtC,IAAI,CAACO,MAAM,GAAGT,sBAAsB,CAACO,KAAK,CAACN,IAAI,EAAEM,KAAK,CAACL,YAAY,CAAC;EACtE;AACF"}

@@ -1,1 +0,1 @@

{"version":3,"file":"route.mjs","names":["pipe","filterValues","mapKeys","mapValues","decodeSlugParam","Route","constructor","props","Object","assign","getRouteParams","pathname","groups","RegExp","regex","exec","Boolean","group","key","paramExtractors"],"sources":["../../../../src/components/route/route.ts"],"sourcesContent":["import { pipe } from '../../utils/fp.utils';\nimport { filterValues, mapKeys, mapValues } from '../../utils/object.utils';\nimport { decodeSlugParam } from '../slug-param/slug-param';\nimport type { Dictionary } from '../../types/dictionary';\nimport type { ParamExtractor } from '../dynamic-routes/common/route-params-parser';\n\nimport type { RequestHandler } from '../../types/request-handlers';\n\ninterface Props {\n method?: string;\n fileName: string;\n handler: RequestHandler | Record<string, RequestHandler>;\n regex: RegExp;\n paramExtractors: Record<string, ParamExtractor>;\n nestingLevel: number;\n urlPath: string;\n}\n\nexport class Route {\n method?: string;\n fileName: string;\n handler: RequestHandler | Record<string, RequestHandler>;\n regex: RegExp;\n nestingLevel: number;\n urlPath: string;\n\n private paramExtractors: Record<string, ParamExtractor>;\n\n constructor(props: Props) {\n Object.assign(this, props);\n }\n\n getRouteParams(pathname: string): Dictionary<string> {\n const groups = new RegExp(this.regex).exec(pathname)?.groups || {};\n return pipe(\n filterValues<string>(Boolean),\n mapValues<string, string | string[]>((group, key) =>\n this.paramExtractors[key](group)\n ),\n mapKeys(decodeSlugParam)\n )(groups);\n }\n}\n"],"mappings":"SAASA,IAAI;AAAA,SACJC,YAAY,EAAEC,OAAO,EAAEC,SAAS;AAAA,SAChCC,eAAe;AAgBxB,OAAO,MAAMC,KAAK,CAAC;EAUjBC,WAAWA,CAACC,KAAY,EAAE;IACxBC,MAAM,CAACC,MAAM,CAAC,IAAI,EAAEF,KAAK,CAAC;EAC5B;EAEAG,cAAcA,CAACC,QAAgB,EAAsB;IACnD,MAAMC,MAAM,GAAG,IAAIC,MAAM,CAAC,IAAI,CAACC,KAAK,CAAC,CAACC,IAAI,CAACJ,QAAQ,CAAC,EAAEC,MAAM,IAAI,CAAC,CAAC;IAClE,OAAOZ,IAAI,CACTC,YAAY,CAASe,OAAO,CAAC,EAC7Bb,SAAS,CAA4B,CAACc,KAAK,EAAEC,GAAG,KAC9C,IAAI,CAACC,eAAe,CAACD,GAAG,CAAC,CAACD,KAAK,CACjC,CAAC,EACDf,OAAO,CAACE,eAAe,CACzB,CAAC,CAACQ,MAAM,CAAC;EACX;AACF"}
{"version":3,"file":"route.mjs","names":["pipe","filterValues","mapKeys","mapValues","decodeSlugParam","Route","constructor","props","Object","assign","getRouteParams","pathname","groups","RegExp","regex","exec","Boolean","group","key","paramExtractors"],"sources":["../../../../src/components/route/route.ts"],"sourcesContent":["import { pipe } from '../../utils/fp.utils';\nimport { filterValues, mapKeys, mapValues } from '../../utils/object.utils';\nimport { decodeSlugParam } from '../slug-param/slug-param';\nimport type { Dictionary } from '../../types/dictionary';\nimport type { ParamExtractor } from '../dynamic-routes/common/route-params-parser';\n\nimport type { RequestHandler } from '../../types/request-handlers';\n\ninterface Props {\n method?: string;\n fileName: string;\n handler: RequestHandler | Record<string, RequestHandler>;\n regex: RegExp;\n paramExtractors: Record<string, ParamExtractor>;\n nestingLevel: number;\n urlPath: string;\n directoryPaths: string[];\n}\n\nexport class Route {\n method?: string;\n fileName: string;\n handler: RequestHandler | Record<string, RequestHandler>;\n regex: RegExp;\n nestingLevel: number;\n urlPath: string;\n directoryPaths: string[];\n\n private paramExtractors: Record<string, ParamExtractor>;\n\n constructor(props: Props) {\n Object.assign(this, props);\n }\n\n getRouteParams(pathname: string): Dictionary<string> {\n const groups = new RegExp(this.regex).exec(pathname)?.groups || {};\n return pipe(\n filterValues<string>(Boolean),\n mapValues<string, string | string[]>((group, key) =>\n this.paramExtractors[key](group)\n ),\n mapKeys(decodeSlugParam)\n )(groups);\n }\n}\n"],"mappings":"SAASA,IAAI;AAAA,SACJC,YAAY,EAAEC,OAAO,EAAEC,SAAS;AAAA,SAChCC,eAAe;AAiBxB,OAAO,MAAMC,KAAK,CAAC;EAWjBC,WAAWA,CAACC,KAAY,EAAE;IACxBC,MAAM,CAACC,MAAM,CAAC,IAAI,EAAEF,KAAK,CAAC;EAC5B;EAEAG,cAAcA,CAACC,QAAgB,EAAsB;IACnD,MAAMC,MAAM,GAAG,IAAIC,MAAM,CAAC,IAAI,CAACC,KAAK,CAAC,CAACC,IAAI,CAACJ,QAAQ,CAAC,EAAEC,MAAM,IAAI,CAAC,CAAC;IAClE,OAAOZ,IAAI,CACTC,YAAY,CAASe,OAAO,CAAC,EAC7Bb,SAAS,CAA4B,CAACc,KAAK,EAAEC,GAAG,KAC9C,IAAI,CAACC,eAAe,CAACD,GAAG,CAAC,CAACD,KAAK,CACjC,CAAC,EACDf,OAAO,CAACE,eAAe,CACzB,CAAC,CAACQ,MAAM,CAAC;EACX;AACF"}

@@ -30,14 +30,25 @@ import * as path from 'node:path';

const notFoundHandler = (await resolveNotFoundHandler(normalizedBaseDir)) || defaultNotFoundHandler;
function extractMiddlewares(pathname) {
return middlewares.filter(({
regexp
}) => regexp.test(`${pathname}/`)).flatMap(({
function extractMiddlewares(pathname, matchedRoute) {
let matched;
if (matchedRoute) {
const allowedPaths = new Set(matchedRoute.directoryPaths);
matched = middlewares.filter(({
path: middlewarePath
}) => allowedPaths.has(middlewarePath));
} else {
matched = middlewares.filter(({
regexp
}) => regexp.test(pathname));
}
return matched.flatMap(({
handler
}) => Array.isArray(handler) ? handler : [handler]);
}
function runHandler(pathname, method, args) {
const matchedRoute = routeHandlers.find(({
function matchRoute(pathname, method) {
return routeHandlers.find(({
regex,
method: routeMethod
}) => regex.test(pathname) && (!routeMethod || method === routeMethod));
}
function runHandler(method, args, matchedRoute, routeParams) {
if (!matchedRoute) {

@@ -49,3 +60,2 @@ return notFoundHandler(...args);

} = matchedRoute;
const routeParams = matchedRoute.getRouteParams(pathname);
if (isRecordWith(handler) && method && handler[method]) {

@@ -71,6 +81,8 @@ return handler[method](...args, routeParams);

const method = getMethod ? getMethod(...args) : undefined;
const matchedMiddlewares = extractMiddlewares(pathname);
return executeWithMiddlewares(matchedMiddlewares, () => runHandler(pathname, method, args), args);
const matchedRoute = matchRoute(pathname, method);
const routeParams = matchedRoute?.getRouteParams(pathname);
const matchedMiddlewares = extractMiddlewares(pathname, matchedRoute);
return executeWithMiddlewares(matchedMiddlewares, () => runHandler(method, args, matchedRoute, routeParams), args, routeParams);
};
}
//# sourceMappingURL=file-router.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"file-router.mjs","names":["path","process","FileRouteResolver","isFunction","isRecordWith","resolveNotFoundHandler","httpAdapter","validateBaseDirExistence","executeWithMiddlewares","initFileRouter","baseDir","ignoreFilesRegex","clearImportCache","adapter","onInit","getPathname","defaultNotFoundHandler","getMethod","normalizedBaseDir","isAbsolute","join","cwd","fileRouteResolver","middlewares","routeHandlers","getHandlers","notFoundHandler","extractMiddlewares","pathname","filter","regexp","test","flatMap","handler","Array","isArray","runHandler","method","args","matchedRoute","find","regex","routeMethod","routeParams","getRouteParams","routeMiddlewares","routeHandler","slice","at","routes","requestHandler","undefined","matchedMiddlewares"],"sources":["../../src/file-router.ts"],"sourcesContent":["import * as path from 'node:path';\nimport * as process from 'node:process';\n\nimport { FileRouteResolver } from './components/file-route-resolver';\nimport { isFunction, isRecordWith } from './utils/object.utils';\nimport { resolveNotFoundHandler } from './components/not-found-resolver';\nimport { httpAdapter } from './adapters/http-adapter';\nimport { validateBaseDirExistence } from './validations/validations';\nimport { executeWithMiddlewares } from './components/middleware-executer';\n\nimport type { RequestHandler } from './types/request-handlers';\nimport type { Adapter } from './types/adapter';\nimport type { Route } from './components/route/route';\n\ninterface InitParams {\n routes: Route[];\n}\n\ninterface Options {\n baseDir?: string;\n ignoreFilesRegex?: RegExp[];\n adapter?: Adapter;\n clearImportCache?: boolean;\n onInit?: (params: InitParams) => void;\n}\n\nexport async function initFileRouter({\n baseDir = 'api',\n ignoreFilesRegex,\n clearImportCache = false,\n adapter = httpAdapter,\n onInit\n}: Options = {}) {\n const { getPathname, defaultNotFoundHandler, getMethod } = adapter;\n\n const normalizedBaseDir = path.isAbsolute(baseDir)\n ? baseDir\n : path.join(process.cwd(), baseDir);\n\n await validateBaseDirExistence(normalizedBaseDir);\n\n const fileRouteResolver = new FileRouteResolver({\n baseDir: normalizedBaseDir,\n ignoreFilesRegex,\n clearImportCache\n });\n\n const [middlewares, routeHandlers] = await fileRouteResolver.getHandlers();\n const notFoundHandler =\n (await resolveNotFoundHandler(normalizedBaseDir)) || defaultNotFoundHandler;\n\n function extractMiddlewares(pathname: string) {\n return middlewares\n .filter(({ regexp }) => regexp.test(`${pathname}/`))\n .flatMap(({ handler }) => (Array.isArray(handler) ? handler : [handler]));\n }\n\n function runHandler<R>(\n pathname: string,\n method: string | undefined,\n args: unknown[]\n ) {\n const matchedRoute = routeHandlers.find(\n ({ regex, method: routeMethod }) =>\n regex.test(pathname) && (!routeMethod || method === routeMethod)\n );\n\n if (!matchedRoute) {\n return notFoundHandler(...args);\n }\n\n const { handler } = matchedRoute;\n const routeParams = matchedRoute.getRouteParams(pathname);\n\n if (isRecordWith<RequestHandler>(handler) && method && handler[method]) {\n return handler[method](...args, routeParams);\n }\n\n if (isFunction(handler)) {\n return handler(...args, routeParams);\n }\n\n if (Array.isArray(handler)) {\n const [routeMiddlewares, routeHandler] = [\n handler.slice(0, -1),\n handler.at(-1)\n ];\n\n return executeWithMiddlewares<R>(\n routeMiddlewares,\n routeHandler,\n args,\n routeParams\n );\n }\n\n return notFoundHandler(...args, routeParams);\n }\n\n if (onInit) {\n onInit({ routes: routeHandlers });\n }\n\n return function requestHandler<R>(...args: unknown[]) {\n const pathname = getPathname(...args);\n const method = getMethod ? getMethod(...args) : undefined;\n const matchedMiddlewares = extractMiddlewares(pathname);\n\n return executeWithMiddlewares<R>(\n matchedMiddlewares,\n () => runHandler<R>(pathname, method, args),\n args\n );\n };\n}\n"],"mappings":"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"}
{"version":3,"file":"file-router.mjs","names":["path","process","FileRouteResolver","isFunction","isRecordWith","resolveNotFoundHandler","httpAdapter","validateBaseDirExistence","executeWithMiddlewares","initFileRouter","baseDir","ignoreFilesRegex","clearImportCache","adapter","onInit","getPathname","defaultNotFoundHandler","getMethod","normalizedBaseDir","isAbsolute","join","cwd","fileRouteResolver","middlewares","routeHandlers","getHandlers","notFoundHandler","extractMiddlewares","pathname","matchedRoute","matched","allowedPaths","Set","directoryPaths","filter","middlewarePath","has","regexp","test","flatMap","handler","Array","isArray","matchRoute","method","find","regex","routeMethod","runHandler","args","routeParams","routeMiddlewares","routeHandler","slice","at","routes","requestHandler","undefined","getRouteParams","matchedMiddlewares"],"sources":["../../src/file-router.ts"],"sourcesContent":["import * as path from 'node:path';\nimport * as process from 'node:process';\n\nimport { FileRouteResolver } from './components/file-route-resolver';\nimport { isFunction, isRecordWith } from './utils/object.utils';\nimport { resolveNotFoundHandler } from './components/not-found-resolver';\nimport { httpAdapter } from './adapters/http-adapter';\nimport { validateBaseDirExistence } from './validations/validations';\nimport { executeWithMiddlewares } from './components/middleware-executer';\n\nimport type { RequestHandler } from './types/request-handlers';\nimport type { Adapter } from './types/adapter';\nimport type { Route } from './components/route/route';\nimport type { Dictionary } from './types/dictionary';\n\ninterface InitParams {\n routes: Route[];\n}\n\ninterface Options {\n baseDir?: string;\n ignoreFilesRegex?: RegExp[];\n adapter?: Adapter;\n clearImportCache?: boolean;\n onInit?: (params: InitParams) => void;\n}\n\nexport async function initFileRouter({\n baseDir = 'api',\n ignoreFilesRegex,\n clearImportCache = false,\n adapter = httpAdapter,\n onInit\n}: Options = {}) {\n const { getPathname, defaultNotFoundHandler, getMethod } = adapter;\n\n const normalizedBaseDir = path.isAbsolute(baseDir)\n ? baseDir\n : path.join(process.cwd(), baseDir);\n\n await validateBaseDirExistence(normalizedBaseDir);\n\n const fileRouteResolver = new FileRouteResolver({\n baseDir: normalizedBaseDir,\n ignoreFilesRegex,\n clearImportCache\n });\n\n const [middlewares, routeHandlers] = await fileRouteResolver.getHandlers();\n const notFoundHandler =\n (await resolveNotFoundHandler(normalizedBaseDir)) || defaultNotFoundHandler;\n\n function extractMiddlewares(pathname: string, matchedRoute?: Route) {\n let matched;\n if (matchedRoute) {\n const allowedPaths = new Set(matchedRoute.directoryPaths);\n matched = middlewares.filter(({ path: middlewarePath }) =>\n allowedPaths.has(middlewarePath)\n );\n } else {\n matched = middlewares.filter(({ regexp }) => regexp.test(pathname));\n }\n\n return matched.flatMap(({ handler }) =>\n Array.isArray(handler) ? handler : [handler]\n );\n }\n\n function matchRoute(pathname: string, method: string | undefined) {\n return routeHandlers.find(\n ({ regex, method: routeMethod }) =>\n regex.test(pathname) && (!routeMethod || method === routeMethod)\n );\n }\n\n function runHandler<R>(\n method: string | undefined,\n args: unknown[],\n matchedRoute?: Route,\n routeParams?: Dictionary<string>\n ) {\n if (!matchedRoute) {\n return notFoundHandler(...args);\n }\n\n const { handler } = matchedRoute;\n\n if (isRecordWith<RequestHandler>(handler) && method && handler[method]) {\n return handler[method](...args, routeParams);\n }\n\n if (isFunction(handler)) {\n return handler(...args, routeParams);\n }\n\n if (Array.isArray(handler)) {\n const [routeMiddlewares, routeHandler] = [\n handler.slice(0, -1),\n handler.at(-1)\n ];\n\n return executeWithMiddlewares<R>(\n routeMiddlewares,\n routeHandler,\n args,\n routeParams\n );\n }\n\n return notFoundHandler(...args, routeParams);\n }\n\n if (onInit) {\n onInit({ routes: routeHandlers });\n }\n\n return function requestHandler<R>(...args: unknown[]) {\n const pathname = getPathname(...args);\n const method = getMethod ? getMethod(...args) : undefined;\n const matchedRoute = matchRoute(pathname, method);\n const routeParams = matchedRoute?.getRouteParams(pathname);\n const matchedMiddlewares = extractMiddlewares(pathname, matchedRoute);\n\n return executeWithMiddlewares<R>(\n matchedMiddlewares,\n () => runHandler<R>(method, args, matchedRoute, routeParams),\n args,\n routeParams\n );\n };\n}\n"],"mappings":"AAAA,OAAO,KAAKA,IAAI,MAAM,WAAW;AACjC,OAAO,KAAKC,OAAO,MAAM,cAAc;AAAC,SAE/BC,iBAAiB;AAAA,SACjBC,UAAU,EAAEC,YAAY;AAAA,SACxBC,sBAAsB;AAAA,SACtBC,WAAW;AAAA,SACXC,wBAAwB;AAAA,SACxBC,sBAAsB;AAmB/B,OAAO,eAAeC,cAAcA,CAAC;EACnCC,OAAO,GAAG,KAAK;EACfC,gBAAgB;EAChBC,gBAAgB,GAAG,KAAK;EACxBC,OAAO,GAAGP,WAAW;EACrBQ;AACO,CAAC,GAAG,CAAC,CAAC,EAAE;EACf,MAAM;IAAEC,WAAW;IAAEC,sBAAsB;IAAEC;EAAU,CAAC,GAAGJ,OAAO;EAElE,MAAMK,iBAAiB,GAAGlB,IAAI,CAACmB,UAAU,CAACT,OAAO,CAAC,GAC9CA,OAAO,GACPV,IAAI,CAACoB,IAAI,CAACnB,OAAO,CAACoB,GAAG,CAAC,CAAC,EAAEX,OAAO,CAAC;EAErC,MAAMH,wBAAwB,CAACW,iBAAiB,CAAC;EAEjD,MAAMI,iBAAiB,GAAG,IAAIpB,iBAAiB,CAAC;IAC9CQ,OAAO,EAAEQ,iBAAiB;IAC1BP,gBAAgB;IAChBC;EACF,CAAC,CAAC;EAEF,MAAM,CAACW,WAAW,EAAEC,aAAa,CAAC,GAAG,MAAMF,iBAAiB,CAACG,WAAW,CAAC,CAAC;EAC1E,MAAMC,eAAe,GACnB,CAAC,MAAMrB,sBAAsB,CAACa,iBAAiB,CAAC,KAAKF,sBAAsB;EAE7E,SAASW,kBAAkBA,CAACC,QAAgB,EAAEC,YAAoB,EAAE;IAClE,IAAIC,OAAO;IACX,IAAID,YAAY,EAAE;MAChB,MAAME,YAAY,GAAG,IAAIC,GAAG,CAACH,YAAY,CAACI,cAAc,CAAC;MACzDH,OAAO,GAAGP,WAAW,CAACW,MAAM,CAAC,CAAC;QAAElC,IAAI,EAAEmC;MAAe,CAAC,KACpDJ,YAAY,CAACK,GAAG,CAACD,cAAc,CACjC,CAAC;IACH,CAAC,MAAM;MACLL,OAAO,GAAGP,WAAW,CAACW,MAAM,CAAC,CAAC;QAAEG;MAAO,CAAC,KAAKA,MAAM,CAACC,IAAI,CAACV,QAAQ,CAAC,CAAC;IACrE;IAEA,OAAOE,OAAO,CAACS,OAAO,CAAC,CAAC;MAAEC;IAAQ,CAAC,KACjCC,KAAK,CAACC,OAAO,CAACF,OAAO,CAAC,GAAGA,OAAO,GAAG,CAACA,OAAO,CAC7C,CAAC;EACH;EAEA,SAASG,UAAUA,CAACf,QAAgB,EAAEgB,MAA0B,EAAE;IAChE,OAAOpB,aAAa,CAACqB,IAAI,CACvB,CAAC;MAAEC,KAAK;MAAEF,MAAM,EAAEG;IAAY,CAAC,KAC7BD,KAAK,CAACR,IAAI,CAACV,QAAQ,CAAC,KAAK,CAACmB,WAAW,IAAIH,MAAM,KAAKG,WAAW,CACnE,CAAC;EACH;EAEA,SAASC,UAAUA,CACjBJ,MAA0B,EAC1BK,IAAe,EACfpB,YAAoB,EACpBqB,WAAgC,EAChC;IACA,IAAI,CAACrB,YAAY,EAAE;MACjB,OAAOH,eAAe,CAAC,GAAGuB,IAAI,CAAC;IACjC;IAEA,MAAM;MAAET;IAAQ,CAAC,GAAGX,YAAY;IAEhC,IAAIzB,YAAY,CAAiBoC,OAAO,CAAC,IAAII,MAAM,IAAIJ,OAAO,CAACI,MAAM,CAAC,EAAE;MACtE,OAAOJ,OAAO,CAACI,MAAM,CAAC,CAAC,GAAGK,IAAI,EAAEC,WAAW,CAAC;IAC9C;IAEA,IAAI/C,UAAU,CAACqC,OAAO,CAAC,EAAE;MACvB,OAAOA,OAAO,CAAC,GAAGS,IAAI,EAAEC,WAAW,CAAC;IACtC;IAEA,IAAIT,KAAK,CAACC,OAAO,CAACF,OAAO,CAAC,EAAE;MAC1B,MAAM,CAACW,gBAAgB,EAAEC,YAAY,CAAC,GAAG,CACvCZ,OAAO,CAACa,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACpBb,OAAO,CAACc,EAAE,CAAC,CAAC,CAAC,CAAC,CACf;MAED,OAAO9C,sBAAsB,CAC3B2C,gBAAgB,EAChBC,YAAY,EACZH,IAAI,EACJC,WACF,CAAC;IACH;IAEA,OAAOxB,eAAe,CAAC,GAAGuB,IAAI,EAAEC,WAAW,CAAC;EAC9C;EAEA,IAAIpC,MAAM,EAAE;IACVA,MAAM,CAAC;MAAEyC,MAAM,EAAE/B;IAAc,CAAC,CAAC;EACnC;EAEA,OAAO,SAASgC,cAAcA,CAAI,GAAGP,IAAe,EAAE;IACpD,MAAMrB,QAAQ,GAAGb,WAAW,CAAC,GAAGkC,IAAI,CAAC;IACrC,MAAML,MAAM,GAAG3B,SAAS,GAAGA,SAAS,CAAC,GAAGgC,IAAI,CAAC,GAAGQ,SAAS;IACzD,MAAM5B,YAAY,GAAGc,UAAU,CAACf,QAAQ,EAAEgB,MAAM,CAAC;IACjD,MAAMM,WAAW,GAAGrB,YAAY,EAAE6B,cAAc,CAAC9B,QAAQ,CAAC;IAC1D,MAAM+B,kBAAkB,GAAGhC,kBAAkB,CAACC,QAAQ,EAAEC,YAAY,CAAC;IAErE,OAAOrB,sBAAsB,CAC3BmD,kBAAkB,EAClB,MAAMX,UAAU,CAAIJ,MAAM,EAAEK,IAAI,EAAEpB,YAAY,EAAEqB,WAAW,CAAC,EAC5DD,IAAI,EACJC,WACF,CAAC;EACH,CAAC;AACH"}
{
"name": "node-file-router",
"version": "0.8.0",
"version": "0.9.0",
"description": "A powerful file-based routing for Express.js, Bun, pure Node.js and more",

@@ -70,3 +70,3 @@ "scripts": {

"eslint-config-prettier": "8.9.0",
"eslint-plugin-prettier": "5.0.0",
"eslint-plugin-prettier": "5.5.4",
"husky": "8.0.3",

@@ -73,0 +73,0 @@ "prettier": "3.0.0",

@@ -24,6 +24,7 @@ import { Route } from './route/route';

private processFileEntry;
private parseDynamicParams;
private extractMethodFromRoute;
private normalizeMiddlewarePath;
private buildDirectoryPaths;
}
export {};
//# sourceMappingURL=file-route-resolver.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"file-route-resolver.d.ts","sourceRoot":"","sources":["../../../src/components/file-route-resolver.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQhD,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAOD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAwC;IAC9E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAE1C;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAE3C;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAEtC;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;gBAEvC,IAAI,EAAE,KAAK;IAWjB,WAAW,CACf,SAAS,SAAe,GACvB,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YASrB,aAAa;YAwBb,YAAY;IA4C1B,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,4BAA4B;YActB,sBAAsB;YAyBtB,gBAAgB;IA0C9B,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,sBAAsB;CAa/B"}
{"version":3,"file":"file-route-resolver.d.ts","sourceRoot":"","sources":["../../../src/components/file-route-resolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAWhD,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAwC;IAC9E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAE1C;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAE3C;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAEtC;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;gBAEvC,IAAI,EAAE,KAAK;IAWjB,WAAW,CACf,SAAS,SAAe,GACvB,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YASrB,aAAa;YAwBb,YAAY;IA6C1B,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,4BAA4B;YActB,sBAAsB;YAsBtB,gBAAgB;IA6C9B,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,mBAAmB;CAiB5B"}

@@ -7,2 +7,3 @@ interface Props {

export declare class Middleware {
path: string;
regexp: RegExp;

@@ -9,0 +10,0 @@ handler: (...args: unknown[]) => Promise<void>;

@@ -1,1 +0,1 @@

{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/components/route/middleware.ts"],"names":[],"mappings":"AAAA,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,UAAU;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;gBAET,KAAK,EAAE,KAAK;CAKzB"}
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/components/route/middleware.ts"],"names":[],"mappings":"AAEA,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;CACtB;AAYD,qBAAa,UAAU;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;gBAET,KAAK,EAAE,KAAK;CAMzB"}

@@ -12,2 +12,3 @@ import type { Dictionary } from '../../types/dictionary';

urlPath: string;
directoryPaths: string[];
}

@@ -21,2 +22,3 @@ export declare class Route {

urlPath: string;
directoryPaths: string[];
private paramExtractors;

@@ -23,0 +25,0 @@ constructor(props: Props);

@@ -1,1 +0,1 @@

{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/components/route/route.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAEnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,KAAK;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,eAAe,CAAiC;gBAE5C,KAAK,EAAE,KAAK;IAIxB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;CAUrD"}
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/components/route/route.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAEnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,qBAAa,KAAK;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,OAAO,CAAC,eAAe,CAAiC;gBAE5C,KAAK,EAAE,KAAK;IAIxB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;CAUrD"}

@@ -1,1 +0,1 @@

{"version":3,"file":"file-router.d.ts","sourceRoot":"","sources":["../../src/file-router.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD,UAAU,UAAU;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,UAAU,OAAO;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAED,wBAAsB,cAAc,CAAC,EACnC,OAAe,EACf,gBAAgB,EAChB,gBAAwB,EACxB,OAAqB,EACrB,MAAM,EACP,GAAE,OAAY,yBAuE8B,OAAO,EAAE,qCAWrD"}
{"version":3,"file":"file-router.d.ts","sourceRoot":"","sources":["../../src/file-router.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAGtD,UAAU,UAAU;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,UAAU,OAAO;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAED,wBAAsB,cAAc,CAAC,EACnC,OAAe,EACf,gBAAgB,EAChB,gBAAwB,EACxB,OAAqB,EACrB,MAAM,EACP,GAAE,OAAY,yBAmF8B,OAAO,EAAE,qCAcrD"}