file-routing-expressjs
Version:
A dependency-free, flexible, system-based file routing for Express.
111 lines • 3.85 kB
JavaScript
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