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.7.0
to
0.8.0
+20
cjs/components/route/middleware.js
"use strict";
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); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Middleware = void 0;
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); } }
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 _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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Middleware = /*#__PURE__*/_createClass(function Middleware(props) {
_classCallCheck(this, Middleware);
this.handler = props.handler;
this.nestingLevel = props.nestingLevel;
this.regexp = new RegExp(props.nestingLevel ? "^".concat(props.path, ".*?$") : '.*');
});
exports.Middleware = Middleware;
//# sourceMappingURL=middleware.js.map
{"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"}
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Route = void 0;
var _fp = require("../../utils/fp.utils");
var _object = require("../../utils/object.utils");
var _slugParam = require("../slug-param/slug-param");
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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
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); } }
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 _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); }
var Route = /*#__PURE__*/function () {
function Route(props) {
_classCallCheck(this, Route);
Object.assign(this, props);
}
_createClass(Route, [{
key: "getRouteParams",
value: function getRouteParams(pathname) {
var _RegExp$exec,
_this = this;
var groups = ((_RegExp$exec = new RegExp(this.regex).exec(pathname)) === null || _RegExp$exec === void 0 ? void 0 : _RegExp$exec.groups) || {};
return (0, _fp.pipe)((0, _object.filterValues)(Boolean), (0, _object.mapValues)(function (group, key) {
return _this.paramExtractors[key](group);
}), (0, _object.mapKeys)(_slugParam.decodeSlugParam))(groups);
}
}]);
return Route;
}();
exports.Route = Route;
//# sourceMappingURL=route.js.map
{"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"}
export class Middleware {
constructor(props) {
this.handler = props.handler;
this.nestingLevel = props.nestingLevel;
this.regexp = new RegExp(props.nestingLevel ? `^${props.path}.*?$` : '.*');
}
}
//# sourceMappingURL=middleware.mjs.map
{"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"}
import { pipe } from "../../utils/fp.utils.mjs";
import { filterValues, mapKeys, mapValues } from "../../utils/object.utils.mjs";
import { decodeSlugParam } from "../slug-param/slug-param.mjs";
export class Route {
constructor(props) {
Object.assign(this, props);
}
getRouteParams(pathname) {
const groups = new RegExp(this.regex).exec(pathname)?.groups || {};
return pipe(filterValues(Boolean), mapValues((group, key) => this.paramExtractors[key](group)), mapKeys(decodeSlugParam))(groups);
}
}
//# sourceMappingURL=route.mjs.map
{"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"}
interface Props {
path: string;
handler: (...args: unknown[]) => Promise<void>;
nestingLevel: number;
}
export declare class Middleware {
regexp: RegExp;
handler: (...args: unknown[]) => Promise<void>;
nestingLevel: number;
constructor(props: Props);
}
export {};
//# sourceMappingURL=middleware.d.ts.map
{"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"}
import type { Dictionary } from '../../types/dictionary';
import type { ParamExtractor } from '../dynamic-routes/common/route-params-parser';
import type { RequestHandler } from '../../types/request-handlers';
interface Props {
method?: string;
fileName: string;
handler: RequestHandler | Record<string, RequestHandler>;
regex: RegExp;
paramExtractors: Record<string, ParamExtractor>;
nestingLevel: number;
urlPath: string;
}
export declare class Route {
method?: string;
fileName: string;
handler: RequestHandler | Record<string, RequestHandler>;
regex: RegExp;
nestingLevel: number;
urlPath: string;
private paramExtractors;
constructor(props: Props);
getRouteParams(pathname: string): Dictionary<string>;
}
export {};
//# sourceMappingURL=route.d.ts.map
{"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"}
+32
-31

@@ -12,4 +12,4 @@ "use strict";

var _optionalCatchAllSegment = require("./dynamic-routes/optional-catch-all-segment");
var _routeHandler = require("./route-handler/route-handler");
var _middlewareHandler = require("./route-handler/middleware-handler");
var _route = require("./route/route");
var _middleware = require("./route/middleware");
var _env = require("../utils/env.utils");

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

entries,
routeHandlers,
middlewareHandlers,
routes,
middlewares,
_iterator,

@@ -107,4 +107,4 @@ _step,

_yield$this$processEn2,
middlewares,
routes,
childMiddlewares,
childRoutes,
_args2 = arguments;

@@ -123,4 +123,4 @@ return _regeneratorRuntime().wrap(function _callee2$(_context2) {

entries = _context2.sent;
routeHandlers = [];
middlewareHandlers = [];
routes = [];
middlewares = [];
_iterator = _createForOfIteratorHelper(entries);

@@ -140,6 +140,6 @@ _context2.prev = 9;

_yield$this$processEn2 = _slicedToArray(_yield$this$processEn, 2);
middlewares = _yield$this$processEn2[0];
routes = _yield$this$processEn2[1];
routeHandlers.push.apply(routeHandlers, _toConsumableArray(routes));
middlewareHandlers.push.apply(middlewareHandlers, _toConsumableArray(middlewares));
childMiddlewares = _yield$this$processEn2[0];
childRoutes = _yield$this$processEn2[1];
routes.push.apply(routes, _toConsumableArray(childRoutes));
middlewares.push.apply(middlewares, _toConsumableArray(childMiddlewares));
case 21:

@@ -160,3 +160,3 @@ _context2.next = 11;

case 31:
return _context2.abrupt("return", [middlewareHandlers, routeHandlers]);
return _context2.abrupt("return", [middlewares, routes]);
case 32:

@@ -177,8 +177,8 @@ case "end":

var _processEntry = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(directory, parentRoute, nestingLevel, entry) {
var routeHandlers, middlewareHandlers, fullPath, routePath, _yield$this$scanDirec3, _yield$this$scanDirec4, childMiddlewareHandlers, childHandlers, middlewareHandler, routeHandler;
var routes, middlewares, fullPath, routePath, _yield$this$scanDirec3, _yield$this$scanDirec4, childMiddlewares, childRoutes, middleware, route;
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
routeHandlers = [];
middlewareHandlers = [];
routes = [];
middlewares = [];
fullPath = _nodePath["default"].join(directory, entry.name);

@@ -195,6 +195,6 @@ routePath = "".concat(parentRoute, "/").concat(entry.name);

_yield$this$scanDirec4 = _slicedToArray(_yield$this$scanDirec3, 2);
childMiddlewareHandlers = _yield$this$scanDirec4[0];
childHandlers = _yield$this$scanDirec4[1];
routeHandlers.push.apply(routeHandlers, _toConsumableArray(childHandlers));
middlewareHandlers.push.apply(middlewareHandlers, _toConsumableArray(childMiddlewareHandlers));
childMiddlewares = _yield$this$scanDirec4[0];
childRoutes = _yield$this$scanDirec4[1];
routes.push.apply(routes, _toConsumableArray(childRoutes));
middlewares.push.apply(middlewares, _toConsumableArray(childMiddlewares));
_context3.next = 27;

@@ -214,4 +214,4 @@ break;

case 19:
middlewareHandler = _context3.sent;
middlewareHandlers.push(middlewareHandler);
middleware = _context3.sent;
middlewares.push(middleware);
_context3.next = 27;

@@ -223,6 +223,6 @@ break;

case 25:
routeHandler = _context3.sent;
routeHandlers.push(routeHandler);
route = _context3.sent;
routes.push(route);
case 27:
return _context3.abrupt("return", [middlewareHandlers, routeHandlers]);
return _context3.abrupt("return", [middlewares, routes]);
case 28:

@@ -286,3 +286,3 @@ case "end":

routePath = filePath.replace(FileRouteResolver.middlewareFilePattern, '');
return _context4.abrupt("return", new _middlewareHandler.MiddlewareHandler({
return _context4.abrupt("return", new _middleware.Middleware({
path: routePath,

@@ -307,3 +307,3 @@ handler: handler,

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, regex;
var handler, initialRoute, _this$extractMethodFr, _this$extractMethodFr2, method, pureRouteName, _this$parseDynamicPar, route, paramExtractors, isIndex, routeKey, formattedUrlPath;
return _regeneratorRuntime().wrap(function _callee5$(_context5) {

@@ -336,10 +336,11 @@ while (1) switch (_context5.prev = _context5.next) {

routeKey = isIndex ? route.replace(/\/index$/, '') : route;
regex = new RegExp("^".concat(routeKey, "/?$"));
return _context5.abrupt("return", new _routeHandler.RouteHandler({
formattedUrlPath = (isIndex ? pureRouteName.replace(/\/index$/, '') : pureRouteName) || '/';
return _context5.abrupt("return", new _route.Route({
method: method,
fileName: entry.name,
handler: handler,
regex: regex,
regex: new RegExp("^".concat(routeKey, "/?$")),
nestingLevel: nestingLevel,
paramExtractors: paramExtractors
paramExtractors: paramExtractors,
urlPath: formattedUrlPath
}));

@@ -346,0 +347,0 @@ case 11:

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

{"version":3,"file":"file-route-resolver.js","names":["_promises","_interopRequireDefault","require","_nodePath","_exactSlugSegment","_catchAllSegment","_optionalCatchAllSegment","_routeHandler","_middlewareHandler","_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","routeHandlers","middlewareHandlers","_iterator","_step","_yield$this$processEn","_yield$this$processEn2","_args2","_callee2$","_context2","fs","readdir","withFileTypes","processEntry","t0","_processEntry","_callee3","fullPath","routePath","_yield$this$scanDirec3","_yield$this$scanDirec4","childMiddlewareHandlers","childHandlers","middlewareHandler","routeHandler","_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","MiddlewareHandler","_x6","_x7","_x8","_processFileEntry","_callee5","initialRoute","_this$extractMethodFr","_this$extractMethodFr2","pureRouteName","_this$parseDynamicPar","route","paramExtractors","isIndex","routeKey","regex","_callee5$","_context5","FunctionOrClass","isClass","extractMethodFromRoute","parseDynamicParams","indexFilePattern","RegExp","RouteHandler","_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 { RouteHandler } from './route-handler/route-handler';\nimport { MiddlewareHandler } from './route-handler/middleware-handler';\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<[MiddlewareHandler[], RouteHandler[]]> {\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<[MiddlewareHandler[], RouteHandler[]]> {\n const entries = await fs.readdir(directory, { withFileTypes: true });\n const routeHandlers: RouteHandler[] = [];\n const middlewareHandlers: MiddlewareHandler[] = [];\n\n for (const entry of entries) {\n const [middlewares, routes] = await this.processEntry(\n directory,\n parentRoute,\n nestingLevel,\n entry\n );\n\n routeHandlers.push(...routes);\n middlewareHandlers.push(...middlewares);\n }\n\n return [middlewareHandlers, routeHandlers];\n }\n\n private async processEntry(\n directory: string,\n parentRoute: string,\n nestingLevel: number,\n entry: Dirent\n ) {\n const routeHandlers: RouteHandler[] = [];\n const middlewareHandlers: MiddlewareHandler[] = [];\n\n const fullPath = path.join(directory, entry.name);\n const routePath = `${parentRoute}/${entry.name}`;\n\n if (entry.isDirectory()) {\n const [childMiddlewareHandlers, childHandlers] = await this.scanDirectory(\n fullPath,\n routePath,\n nestingLevel + 1\n );\n routeHandlers.push(...childHandlers);\n middlewareHandlers.push(...childMiddlewareHandlers);\n } else if (entry.isFile() && this.isValidFile(entry.name)) {\n if (FileRouteResolver.middlewareFilePattern.test(entry.name)) {\n const middlewareHandler = await this.processMiddlewareEntry(\n fullPath,\n routePath,\n nestingLevel\n );\n\n middlewareHandlers.push(middlewareHandler);\n } else {\n const routeHandler = await this.processFileEntry(\n fullPath,\n entry,\n routePath,\n nestingLevel\n );\n\n routeHandlers.push(routeHandler);\n }\n }\n\n return [middlewareHandlers, routeHandlers] 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(\n left: RouteHandler,\n right: RouteHandler\n ): 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 MiddlewareHandler({\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<RouteHandler> {\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 regex = new RegExp(`^${routeKey}/?$`);\n\n return new RouteHandler({\n method,\n fileName: entry.name,\n handler,\n regex,\n nestingLevel,\n paramExtractors\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","_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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"}

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

adapter,
onInit,
getPathname,

@@ -95,3 +96,3 @@ defaultNotFoundHandler,

};
_ref = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}, _ref$baseDir = _ref.baseDir, baseDir = _ref$baseDir === void 0 ? 'api' : _ref$baseDir, ignoreFilesRegex = _ref.ignoreFilesRegex, _ref$clearImportCache = _ref.clearImportCache, clearImportCache = _ref$clearImportCache === void 0 ? false : _ref$clearImportCache, _ref$adapter = _ref.adapter, adapter = _ref$adapter === void 0 ? _httpAdapter.httpAdapter : _ref$adapter;
_ref = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}, _ref$baseDir = _ref.baseDir, baseDir = _ref$baseDir === void 0 ? 'api' : _ref$baseDir, ignoreFilesRegex = _ref.ignoreFilesRegex, _ref$clearImportCache = _ref.clearImportCache, clearImportCache = _ref$clearImportCache === void 0 ? false : _ref$clearImportCache, _ref$adapter = _ref.adapter, adapter = _ref$adapter === void 0 ? _httpAdapter.httpAdapter : _ref$adapter, onInit = _ref.onInit;
getPathname = adapter.getPathname, defaultNotFoundHandler = adapter.defaultNotFoundHandler, getMethod = adapter.getMethod;

@@ -125,2 +126,7 @@ normalizedBaseDir = path.isAbsolute(baseDir) ? baseDir : path.join(process.cwd(), baseDir);

notFoundHandler = _context.t0;
if (onInit) {
onInit({
routes: routeHandlers
});
}
return _context.abrupt("return", function requestHandler() {

@@ -137,3 +143,3 @@ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {

});
case 21:
case 22:
case "end":

@@ -140,0 +146,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","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","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 { Adapter } from './types/adapter';\nimport type { RequestHandler } from './types/request-handlers';\n\ninterface Options {\n baseDir?: string;\n ignoreFilesRegex?: RegExp[];\n adapter?: Adapter;\n clearImportCache?: boolean;\n}\n\nexport async function initFileRouter({\n baseDir = 'api',\n ignoreFilesRegex,\n clearImportCache = false,\n adapter = httpAdapter\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 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","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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"}

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

});
Object.defineProperty(exports, "Route", {
enumerable: true,
get: function get() {
return _route.Route;
}
});
Object.defineProperty(exports, "initFileRouter", {

@@ -14,2 +20,3 @@ enumerable: true,

var _fileRouter = require("./file-router");
var _route = require("./components/route/route");
//# sourceMappingURL=index.js.map

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

{"version":3,"file":"index.js","names":["_fileRouter","require"],"sources":["../../src/index.ts"],"sourcesContent":["export { initFileRouter } from './file-router';\nexport type {\n NextFunction,\n FileRouterRequestHandler\n} from './types/request-handlers';\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA"}
{"version":3,"file":"index.js","names":["_fileRouter","require","_route"],"sources":["../../src/index.ts"],"sourcesContent":["export { initFileRouter } from './file-router';\nexport type {\n NextFunction,\n FileRouterRequestHandler\n} from './types/request-handlers';\nexport { Route } from './components/route/route';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAKA,IAAAC,MAAA,GAAAD,OAAA"}

@@ -6,4 +6,4 @@ import fs from 'node:fs/promises';

import { optionalCatchAllSegment } from "./dynamic-routes/optional-catch-all-segment.mjs";
import { RouteHandler } from "./route-handler/route-handler.mjs";
import { MiddlewareHandler } from "./route-handler/middleware-handler.mjs";
import { Route } from "./route/route.mjs";
import { Middleware } from "./route/middleware.mjs";
import { isCommonJs } from "../utils/env.utils.mjs";

@@ -36,30 +36,30 @@ import { validateFileFormat } from "../validations/validations.mjs";

});
const routeHandlers = [];
const middlewareHandlers = [];
const routes = [];
const middlewares = [];
for (const entry of entries) {
const [middlewares, routes] = await this.processEntry(directory, parentRoute, nestingLevel, entry);
routeHandlers.push(...routes);
middlewareHandlers.push(...middlewares);
const [childMiddlewares, childRoutes] = await this.processEntry(directory, parentRoute, nestingLevel, entry);
routes.push(...childRoutes);
middlewares.push(...childMiddlewares);
}
return [middlewareHandlers, routeHandlers];
return [middlewares, routes];
}
async processEntry(directory, parentRoute, nestingLevel, entry) {
const routeHandlers = [];
const middlewareHandlers = [];
const routes = [];
const middlewares = [];
const fullPath = path.join(directory, entry.name);
const routePath = `${parentRoute}/${entry.name}`;
if (entry.isDirectory()) {
const [childMiddlewareHandlers, childHandlers] = await this.scanDirectory(fullPath, routePath, nestingLevel + 1);
routeHandlers.push(...childHandlers);
middlewareHandlers.push(...childMiddlewareHandlers);
const [childMiddlewares, childRoutes] = await this.scanDirectory(fullPath, routePath, nestingLevel + 1);
routes.push(...childRoutes);
middlewares.push(...childMiddlewares);
} else if (entry.isFile() && this.isValidFile(entry.name)) {
if (FileRouteResolver.middlewareFilePattern.test(entry.name)) {
const middlewareHandler = await this.processMiddlewareEntry(fullPath, routePath, nestingLevel);
middlewareHandlers.push(middlewareHandler);
const middleware = await this.processMiddlewareEntry(fullPath, routePath, nestingLevel);
middlewares.push(middleware);
} else {
const routeHandler = await this.processFileEntry(fullPath, entry, routePath, nestingLevel);
routeHandlers.push(routeHandler);
const route = await this.processFileEntry(fullPath, entry, routePath, nestingLevel);
routes.push(route);
}
}
return [middlewareHandlers, routeHandlers];
return [middlewares, routes];
}

@@ -85,3 +85,3 @@ isValidFile(name) {

const routePath = filePath.replace(FileRouteResolver.middlewareFilePattern, '');
return new MiddlewareHandler({
return new Middleware({
path: routePath,

@@ -105,10 +105,11 @@ handler,

const routeKey = isIndex ? route.replace(/\/index$/, '') : route;
const regex = new RegExp(`^${routeKey}/?$`);
return new RouteHandler({
const formattedUrlPath = (isIndex ? pureRouteName.replace(/\/index$/, '') : pureRouteName) || '/';
return new Route({
method,
fileName: entry.name,
handler,
regex,
regex: new RegExp(`^${routeKey}/?$`),
nestingLevel,
paramExtractors
paramExtractors,
urlPath: formattedUrlPath
});

@@ -115,0 +116,0 @@ }

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

{"version":3,"file":"file-route-resolver.mjs","names":["fs","path","exactSlugSegment","catchAllSegment","optionalCatchAllSegment","RouteHandler","MiddlewareHandler","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","routeHandlers","middlewareHandlers","entry","processEntry","push","fullPath","name","routePath","isDirectory","childMiddlewareHandlers","childHandlers","isFile","isValidFile","test","middlewareHandler","processMiddlewareEntry","routeHandler","processFileEntry","some","pattern","isDynamic","dynamicRoute","isMatch","fileName","filePath","require","cache","handler","then","module","default","replace","FunctionOrClass","initialRoute","method","pureRouteName","extractMethodFromRoute","route","paramExtractors","parseDynamicParams","isIndex","routeKey","regex","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 { RouteHandler } from './route-handler/route-handler';\nimport { MiddlewareHandler } from './route-handler/middleware-handler';\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<[MiddlewareHandler[], RouteHandler[]]> {\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<[MiddlewareHandler[], RouteHandler[]]> {\n const entries = await fs.readdir(directory, { withFileTypes: true });\n const routeHandlers: RouteHandler[] = [];\n const middlewareHandlers: MiddlewareHandler[] = [];\n\n for (const entry of entries) {\n const [middlewares, routes] = await this.processEntry(\n directory,\n parentRoute,\n nestingLevel,\n entry\n );\n\n routeHandlers.push(...routes);\n middlewareHandlers.push(...middlewares);\n }\n\n return [middlewareHandlers, routeHandlers];\n }\n\n private async processEntry(\n directory: string,\n parentRoute: string,\n nestingLevel: number,\n entry: Dirent\n ) {\n const routeHandlers: RouteHandler[] = [];\n const middlewareHandlers: MiddlewareHandler[] = [];\n\n const fullPath = path.join(directory, entry.name);\n const routePath = `${parentRoute}/${entry.name}`;\n\n if (entry.isDirectory()) {\n const [childMiddlewareHandlers, childHandlers] = await this.scanDirectory(\n fullPath,\n routePath,\n nestingLevel + 1\n );\n routeHandlers.push(...childHandlers);\n middlewareHandlers.push(...childMiddlewareHandlers);\n } else if (entry.isFile() && this.isValidFile(entry.name)) {\n if (FileRouteResolver.middlewareFilePattern.test(entry.name)) {\n const middlewareHandler = await this.processMiddlewareEntry(\n fullPath,\n routePath,\n nestingLevel\n );\n\n middlewareHandlers.push(middlewareHandler);\n } else {\n const routeHandler = await this.processFileEntry(\n fullPath,\n entry,\n routePath,\n nestingLevel\n );\n\n routeHandlers.push(routeHandler);\n }\n }\n\n return [middlewareHandlers, routeHandlers] 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(\n left: RouteHandler,\n right: RouteHandler\n ): 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 MiddlewareHandler({\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<RouteHandler> {\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 regex = new RegExp(`^${routeKey}/?$`);\n\n return new RouteHandler({\n method,\n fileName: entry.name,\n handler,\n regex,\n nestingLevel,\n paramExtractors\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","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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"}

@@ -13,3 +13,4 @@ import * as path from 'node:path';

clearImportCache = false,
adapter = httpAdapter
adapter = httpAdapter,
onInit
} = {}) {

@@ -61,2 +62,7 @@ const {

}
if (onInit) {
onInit({
routes: routeHandlers
});
}
return function requestHandler(...args) {

@@ -63,0 +69,0 @@ const pathname = getPathname(...args);

@@ -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","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","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 { Adapter } from './types/adapter';\nimport type { RequestHandler } from './types/request-handlers';\n\ninterface Options {\n baseDir?: string;\n ignoreFilesRegex?: RegExp[];\n adapter?: Adapter;\n clearImportCache?: boolean;\n}\n\nexport async function initFileRouter({\n baseDir = 'api',\n ignoreFilesRegex,\n clearImportCache = false,\n adapter = httpAdapter\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 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":"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;AAY/B,OAAO,eAAeC,cAAcA,CAAC;EACnCC,OAAO,GAAG,KAAK;EACfC,gBAAgB;EAChBC,gBAAgB,GAAG,KAAK;EACxBC,OAAO,GAAGP;AACH,CAAC,GAAG,CAAC,CAAC,EAAE;EACf,MAAM;IAAEQ,WAAW;IAAEC,sBAAsB;IAAEC;EAAU,CAAC,GAAGH,OAAO;EAElE,MAAMI,iBAAiB,GAAGjB,IAAI,CAACkB,UAAU,CAACR,OAAO,CAAC,GAC9CA,OAAO,GACPV,IAAI,CAACmB,IAAI,CAAClB,OAAO,CAACmB,GAAG,CAAC,CAAC,EAAEV,OAAO,CAAC;EAErC,MAAMH,wBAAwB,CAACU,iBAAiB,CAAC;EAEjD,MAAMI,iBAAiB,GAAG,IAAInB,iBAAiB,CAAC;IAC9CQ,OAAO,EAAEO,iBAAiB;IAC1BN,gBAAgB;IAChBC;EACF,CAAC,CAAC;EAEF,MAAM,CAACU,WAAW,EAAEC,aAAa,CAAC,GAAG,MAAMF,iBAAiB,CAACG,WAAW,CAAC,CAAC;EAC1E,MAAMC,eAAe,GACnB,CAAC,MAAMpB,sBAAsB,CAACY,iBAAiB,CAAC,KAAKF,sBAAsB;EAE7E,SAASW,kBAAkBA,CAACC,QAAgB,EAAE;IAC5C,OAAOL,WAAW,CACfM,MAAM,CAAC,CAAC;MAAEC;IAAO,CAAC,KAAKA,MAAM,CAACC,IAAI,CAAE,GAAEH,QAAS,GAAE,CAAC,CAAC,CACnDI,OAAO,CAAC,CAAC;MAAEC;IAAQ,CAAC,KAAMC,KAAK,CAACC,OAAO,CAACF,OAAO,CAAC,GAAGA,OAAO,GAAG,CAACA,OAAO,CAAE,CAAC;EAC7E;EAEA,SAASG,UAAUA,CACjBR,QAAgB,EAChBS,MAA0B,EAC1BC,IAAe,EACf;IACA,MAAMC,YAAY,GAAGf,aAAa,CAACgB,IAAI,CACrC,CAAC;MAAEC,KAAK;MAAEJ,MAAM,EAAEK;IAAY,CAAC,KAC7BD,KAAK,CAACV,IAAI,CAACH,QAAQ,CAAC,KAAK,CAACc,WAAW,IAAIL,MAAM,KAAKK,WAAW,CACnE,CAAC;IAED,IAAI,CAACH,YAAY,EAAE;MACjB,OAAOb,eAAe,CAAC,GAAGY,IAAI,CAAC;IACjC;IAEA,MAAM;MAAEL;IAAQ,CAAC,GAAGM,YAAY;IAChC,MAAMI,WAAW,GAAGJ,YAAY,CAACK,cAAc,CAAChB,QAAQ,CAAC;IAEzD,IAAIvB,YAAY,CAAiB4B,OAAO,CAAC,IAAII,MAAM,IAAIJ,OAAO,CAACI,MAAM,CAAC,EAAE;MACtE,OAAOJ,OAAO,CAACI,MAAM,CAAC,CAAC,GAAGC,IAAI,EAAEK,WAAW,CAAC;IAC9C;IAEA,IAAIvC,UAAU,CAAC6B,OAAO,CAAC,EAAE;MACvB,OAAOA,OAAO,CAAC,GAAGK,IAAI,EAAEK,WAAW,CAAC;IACtC;IAEA,IAAIT,KAAK,CAACC,OAAO,CAACF,OAAO,CAAC,EAAE;MAC1B,MAAM,CAACY,gBAAgB,EAAEC,YAAY,CAAC,GAAG,CACvCb,OAAO,CAACc,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACpBd,OAAO,CAACe,EAAE,CAAC,CAAC,CAAC,CAAC,CACf;MAED,OAAOvC,sBAAsB,CAC3BoC,gBAAgB,EAChBC,YAAY,EACZR,IAAI,EACJK,WACF,CAAC;IACH;IAEA,OAAOjB,eAAe,CAAC,GAAGY,IAAI,EAAEK,WAAW,CAAC;EAC9C;EAEA,OAAO,SAASM,cAAcA,CAAI,GAAGX,IAAe,EAAE;IACpD,MAAMV,QAAQ,GAAGb,WAAW,CAAC,GAAGuB,IAAI,CAAC;IACrC,MAAMD,MAAM,GAAGpB,SAAS,GAAGA,SAAS,CAAC,GAAGqB,IAAI,CAAC,GAAGY,SAAS;IACzD,MAAMC,kBAAkB,GAAGxB,kBAAkB,CAACC,QAAQ,CAAC;IAEvD,OAAOnB,sBAAsB,CAC3B0C,kBAAkB,EAClB,MAAMf,UAAU,CAAIR,QAAQ,EAAES,MAAM,EAAEC,IAAI,CAAC,EAC3CA,IACF,CAAC;EACH,CAAC;AACH"}
{"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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"}
export { initFileRouter } from "./file-router.mjs";
export { Route } from "./components/route/route.mjs";
//# sourceMappingURL=index.mjs.map

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

{"version":3,"file":"index.mjs","names":["initFileRouter"],"sources":["../../src/index.ts"],"sourcesContent":["export { initFileRouter } from './file-router';\nexport type {\n NextFunction,\n FileRouterRequestHandler\n} from './types/request-handlers';\n"],"mappings":"SAASA,cAAc"}
{"version":3,"file":"index.mjs","names":["initFileRouter","Route"],"sources":["../../src/index.ts"],"sourcesContent":["export { initFileRouter } from './file-router';\nexport type {\n NextFunction,\n FileRouterRequestHandler\n} from './types/request-handlers';\nexport { Route } from './components/route/route';\n"],"mappings":"SAASA,cAAc;AAAA,SAKdC,KAAK"}
{
"name": "node-file-router",
"version": "0.7.0",
"version": "0.8.0",
"description": "A powerful file-based routing for Express.js, Bun, pure Node.js and more",

@@ -5,0 +5,0 @@ "scripts": {

@@ -105,2 +105,3 @@ # Node File Router

* [Usage with Bun](https://node-file-router.js.org/docs/use-with-bun)
* [Get All Registered Routes](https://node-file-router.js.org/docs/usage-guide#get-all-registered-routes)

@@ -107,0 +108,0 @@ Methods routing:

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

import { RouteHandler } from './route-handler/route-handler';
import { MiddlewareHandler } from './route-handler/middleware-handler';
import { Route } from './route/route';
import { Middleware } from './route/middleware';
interface Props {

@@ -17,3 +17,3 @@ baseDir: string;

constructor(data: Props);
getHandlers(directory?: string): Promise<[MiddlewareHandler[], RouteHandler[]]>;
getHandlers(directory?: string): Promise<[Middleware[], Route[]]>;
private scanDirectory;

@@ -20,0 +20,0 @@ private processEntry;

@@ -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,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAQvE,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,iBAAiB,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;YASnC,aAAa;YAwBb,YAAY;IA4C1B,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,4BAA4B;YAiBtB,sBAAsB;YAyBtB,gBAAgB;IAwC9B,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":"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"}
import type { Adapter } from './types/adapter';
import type { Route } from './components/route/route';
interface InitParams {
routes: Route[];
}
interface Options {

@@ -7,5 +11,6 @@ baseDir?: string;

clearImportCache?: boolean;
onInit?: (params: InitParams) => void;
}
export declare function initFileRouter({ baseDir, ignoreFilesRegex, clearImportCache, adapter }?: Options): Promise<(<R>(...args: unknown[]) => Promise<void | R | undefined>)>;
export declare function initFileRouter({ baseDir, ignoreFilesRegex, clearImportCache, adapter, onInit }?: Options): Promise<(<R>(...args: unknown[]) => Promise<void | R | undefined>)>;
export {};
//# sourceMappingURL=file-router.d.ts.map

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

{"version":3,"file":"file-router.d.ts","sourceRoot":"","sources":["../../src/file-router.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,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;CAC5B;AAED,wBAAsB,cAAc,CAAC,EACnC,OAAe,EACf,gBAAgB,EAChB,gBAAwB,EACxB,OAAqB,EACtB,GAAE,OAAY,yBAmE8B,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;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"}
export { initFileRouter } from './file-router';
export type { NextFunction, FileRouterRequestHandler } from './types/request-handlers';
export { Route } from './components/route/route';
//# sourceMappingURL=index.d.ts.map

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

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EACV,YAAY,EACZ,wBAAwB,EACzB,MAAM,0BAA0B,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EACV,YAAY,EACZ,wBAAwB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC"}