22 lines
750 B
TypeScript
22 lines
750 B
TypeScript
import { Router } from 'express';
|
|
import type { AnyAPIExecuter, APINamespace } from './defs.js';
|
|
|
|
export function buildAPISystem<N extends APINamespace, Q extends AnyAPIExecuter>(api: N | Q): Router {
|
|
const router = Router();
|
|
for (const [key, value] of Object.entries(api)) {
|
|
if (typeof value === 'function') {
|
|
const executer = new value() as Q;
|
|
if (!executer.reqType) {
|
|
throw new Error('APIExecuter.reqType is not defined');
|
|
}
|
|
router[executer.reqType](key, async (req, res) => {
|
|
await executer.run(req, res);
|
|
});
|
|
continue;
|
|
} else {
|
|
router.use(key, buildAPISystem(value));
|
|
}
|
|
}
|
|
return router;
|
|
}
|