UNPKG

file-routing-expressjs

Version:

A dependency-free, flexible, system-based file routing for Express.

111 lines 3.85 kB
import { ENDPOINT_FILE_NAME_REGEX } from "../constants/regex"; import { filenameToJSorTS } from "./builders"; import { fileExistsAndIsJSorTS, isErrorHandler, isRequestHandler } from "./validators"; function extractEndpointName(name) { const match = name.match(ENDPOINT_FILE_NAME_REGEX); const isParam = !!match && match.length >= 2; name = isParam ? `:${match[1] || name}` : name; return { name, isParam }; } function extractDirConfig(dir) { var _a, _b, _c, _d; const file = filenameToJSorTS(dir, "_config"); if (!file) return {}; const module = require(file); return (_d = (_c = (_b = module.config) != null ? _b : (_a = module.default) == null ? void 0 : _a.config) != null ? _c : module.default) != null ? _d : {}; } function extractDirMiddlewares(dir) { var _a, _b, _c; const file = filenameToJSorTS(dir, "_middleware"); if (!file) return []; const module = require(file); let middlewares = (_c = (_b = module.middlewares) != null ? _b : (_a = module.default) == null ? void 0 : _a.middleware) != null ? _c : module.default; if (!Array.isArray(middlewares)) { middlewares = middlewares ? [middlewares] : []; } return middlewares.filter(isRequestHandler); } function extractDirErrorMiddleware(dir) { var _a, _b, _c, _d; const file = filenameToJSorTS(dir, "_error"); if (!file) return void 0; const module = require(file); const errorHandler = (_d = (_c = (_b = module.error) != null ? _b : (_a = module.default) == null ? void 0 : _a.error) != null ? _c : module.default) != null ? _d : void 0; return isErrorHandler(errorHandler) ? errorHandler : void 0; } function extractFileConfig(module) { var _a, _b, _c; return (_c = (_b = module.config) != null ? _b : (_a = module.default) == null ? void 0 : _a.config) != null ? _c : {}; } function extractFileMiddlewares(module) { var _a, _b; let middlewares = (_b = module.middlewares) != null ? _b : (_a = module.default) == null ? void 0 : _a.middlewares; if (middlewares && typeof middlewares === "object" && !Array.isArray(middlewares)) { const result = {}; for (const [method, middleware] of Object.entries(middlewares)) { const expressMethod = method; const list = Array.isArray(middleware) ? middleware : middleware ? [middleware] : []; result[expressMethod] = list.filter(isRequestHandler); } return result; } if (!Array.isArray(middlewares)) { middlewares = middlewares ? [middlewares] : []; } return middlewares.filter(isRequestHandler); } function extractFileErrorMiddleware(module) { var _a, _b, _c; const raw = (_c = (_b = module.error) != null ? _b : (_a = module.default) == null ? void 0 : _a.error) != null ? _c : void 0; if (isErrorHandler(raw)) { return raw; } if (raw && typeof raw === "object") { const result = {}; for (const [method, handler] of Object.entries(raw)) { const expressMethod = method; result[expressMethod] = isErrorHandler(handler) ? handler : void 0; } return result; } return void 0; } function extractDirContext(target) { const config = extractDirConfig(target); const middlewares = extractDirMiddlewares(target); const errorHandler = extractDirErrorMiddleware(target); return { config, middlewares, errorHandler }; } function extractFileContext(target) { if (!fileExistsAndIsJSorTS(target)) { return { config: {}, middlewares: [], errorHandler: void 0 }; } const module = require(target); const config = extractFileConfig(module); const middlewares = extractFileMiddlewares(module); const errorHandler = extractFileErrorMiddleware(module); return { config, middlewares, errorHandler }; } export { extractDirConfig, extractDirContext, extractEndpointName, extractFileContext }; //# sourceMappingURL=extractors.mjs.map