{"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":[]}