UNPKG

file-routing-expressjs

Version:

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

1 lines 6.93 kB
{"version":3,"sources":["../../src/helpers/extractors.ts"],"sourcesContent":["import {\n RouteGroupContext,\n RouteErrorHandler,\n ExpressMethod,\n RouteDefinitionContext,\n RouteConfig,\n RouteErrorMap,\n RouteMiddleware\n} from \"../types\";\n\nimport { ENDPOINT_FILE_NAME_REGEX } from \"../constants/regex\";\nimport { filenameToJSorTS } from \"./builders\";\nimport {\n fileExistsAndIsJSorTS,\n isErrorHandler,\n isRequestHandler\n} from \"./validators\";\n\nimport { RequestHandler } from \"express\";\n\nexport function extractEndpointName(name: string) {\n const match = name.match(ENDPOINT_FILE_NAME_REGEX);\n const isParam = !!match && match.length >= 2;\n\n name = isParam ? `:${match![1] || name}` : name;\n\n return { name, isParam };\n}\n\nexport function extractDirConfig(dir: string): RouteConfig {\n const file = filenameToJSorTS(dir, \"_config\");\n\n if (!file) return {};\n\n const module = require(file);\n return module.config ?? module.default?.config ?? module.default ?? {};\n}\n\nfunction extractDirMiddlewares(dir: string): RequestHandler[] {\n const file = filenameToJSorTS(dir, \"_middleware\");\n if (!file) return [];\n\n const module = require(file);\n\n let middlewares: RequestHandler[] =\n module.middlewares ?? module.default?.middleware ?? module.default;\n\n if (!Array.isArray(middlewares)) {\n middlewares = middlewares ? [middlewares] : [];\n }\n\n return middlewares.filter(isRequestHandler);\n}\n\nfunction extractDirErrorMiddleware(dir: string): RouteErrorHandler | undefined {\n const file = filenameToJSorTS(dir, \"_error\");\n if (!file) return undefined;\n\n const module = require(file);\n\n const errorHandler =\n module.error ?? module.default?.error ?? module.default ?? undefined;\n\n return isErrorHandler(errorHandler)\n ? errorHandler\n : undefined;\n}\n\nfunction extractFileConfig(module: any): RouteConfig {\n return module.config ?? module.default?.config ?? {};\n}\n\nfunction extractFileMiddlewares(module: any): RouteMiddleware {\n let middlewares: RouteMiddleware =\n module.middlewares ?? module.default?.middlewares;\n\n if (middlewares && typeof middlewares === \"object\" && !Array.isArray(middlewares)) {\n const result: Partial<Record<ExpressMethod, RequestHandler[]>> = {};\n\n for (const [method, middleware] of Object.entries(middlewares)) {\n const expressMethod = method as ExpressMethod;\n\n const list = Array.isArray(middleware)\n ? middleware\n : middleware\n ? [middleware]\n : [];\n\n result[expressMethod] = list.filter(isRequestHandler);\n }\n\n return result;\n }\n\n if (!Array.isArray(middlewares)) {\n middlewares = middlewares ? [middlewares] : [];\n }\n\n return middlewares.filter(isRequestHandler);\n}\n\nfunction extractFileErrorMiddleware(module: any): RouteErrorMap {\n const raw =\n module.error ?? module.default?.error ?? undefined;\n\n if (isErrorHandler(raw)) {\n return raw;\n }\n\n if (raw && typeof raw === \"object\") {\n const result: Partial<Record<ExpressMethod, RouteErrorHandler | undefined>> = {};\n\n for (const [method, handler] of Object.entries(raw)) {\n const expressMethod = method as ExpressMethod;\n\n result[expressMethod] = isErrorHandler(handler)\n ? handler\n : undefined;\n }\n\n return result;\n }\n\n return undefined;\n}\n\nexport function extractDirContext(target: string): RouteGroupContext {\n const config = extractDirConfig(target);\n const middlewares = extractDirMiddlewares(target);\n const errorHandler = extractDirErrorMiddleware(target);\n\n return {\n config,\n middlewares,\n errorHandler\n };\n}\n\nexport function extractFileContext(target: string): RouteDefinitionContext {\n if (!fileExistsAndIsJSorTS(target)) {\n return {\n config: {},\n middlewares: [],\n errorHandler: undefined\n };\n }\n\n const module = require(target);\n\n const config = extractFileConfig(module);\n const middlewares = extractFileMiddlewares(module);\n const errorHandler = extractFileErrorMiddleware(module);\n\n return {\n config,\n middlewares,\n errorHandler\n };\n}"],"mappings":"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","names":[]}