@fdm-monster/server
Version:
FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.
43 lines (42 loc) • 1.51 kB
JavaScript
import _virtual_controllers_default from "../_virtual/_virtual_controllers.js";
import { Router } from "express";
import { HttpVerbs, getStateAndTarget, makeInvoker, rollUpState } from "awilix-express";
//#region src/shared/load-controllers.ts
async function loadControllersFunc() {
const found = await findControllers();
const router = Router();
found.forEach(_registerController.bind(null, router));
return router;
}
async function findControllers() {
return _virtual_controllers_default.map(extractStateAndTargetFromExports).flat();
}
function extractStateAndTargetFromExports(exports) {
const items = [];
if (exports) {
const stateAndTarget = getStateAndTarget(exports);
if (stateAndTarget) {
items.push(stateAndTarget);
return items;
}
for (const key of Object.keys(exports)) {
const stateAndTarget = getStateAndTarget(exports[key]);
if (stateAndTarget) items.push(stateAndTarget);
}
}
return items;
}
function _registerController(router, stateAndTarget) {
if (!stateAndTarget) return;
const { state, target } = stateAndTarget;
rollUpState(state).forEach((methodCfg, methodName) => {
methodCfg.verbs.forEach((httpVerb) => {
let method = httpVerb.toLowerCase();
if (httpVerb === HttpVerbs.ALL) method = "all";
router[method](methodCfg.paths, ...methodCfg.beforeMiddleware, makeInvoker(target)(methodName), ...methodCfg.afterMiddleware);
});
});
}
//#endregion
export { findControllers, loadControllersFunc };
//# sourceMappingURL=load-controllers.js.map