UNPKG

file-routing-expressjs

Version:

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

108 lines 3.37 kB
import { ENDPOINT_FILE_NAME_REGEX } from "../constants/regex"; import { filenameToJSorTS } from "./builders"; import { fileExistsAndIsJSorTS, functionIsExceptionHandler, functionIsRequestHandler } from "./validators"; function extractEndpointName(name) { const regex = ENDPOINT_FILE_NAME_REGEX; const match = name.match(regex); const isParam = !!match && match.length >= 2; name = isParam ? `:${match[1] || name}` : name; return { name, isParam }; } function extractDirConfig(dir) { const file = filenameToJSorTS(dir, "_config"); if (!file) { return {}; } const module = require(file); return module.config || module.default || {}; } function extractDirMiddlewares(dir) { const file = filenameToJSorTS(dir, "_middleware"); if (!file) { return []; } const module = require(file); let middlewares = module.middlewares || module.default; if (!Array.isArray(middlewares)) { middlewares = middlewares ? [middlewares] : []; } return middlewares.filter(functionIsRequestHandler); } function extractDirErrorMiddleware(dir) { const file = filenameToJSorTS(dir, "_error"); if (!file) { return void 0; } const module = require(file); const errorHandler = module.error || module.default || void 0; return functionIsExceptionHandler(errorHandler) ? errorHandler : void 0; } function extractFileConfig(module) { return module.config || {}; } function extractFileMiddlewares(module) { let middlewares = module.middlewares; if (!Array.isArray(middlewares)) { if (typeof middlewares === "object") { const entries = Object.entries(middlewares); for (let [method, middleware] of entries) { const expressMethod = method; if (!Array.isArray(middleware)) { middleware = middleware ? [middleware] : []; } middlewares[expressMethod] = middleware.filter(functionIsRequestHandler); } return middlewares; } middlewares = middlewares ? [middlewares] : []; } return middlewares.filter(functionIsRequestHandler); } function extractFileErrorMiddleware(module) { const errorHandler = module.error || void 0; if (functionIsExceptionHandler(errorHandler)) return errorHandler; if (typeof errorHandler === "object") { const entries = Object.entries(errorHandler); for (let [method, nestedErrorHandler] of entries) { const expressMethod = method; errorHandler[expressMethod] = functionIsExceptionHandler(nestedErrorHandler) ? nestedErrorHandler : void 0; } return errorHandler; } 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