@kitmi/jacaranda
Version:
JavaScript application framework
74 lines (73 loc) • 3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _utils = require("@kitmi/utils");
const _loadModuleFrom_ = require("../helpers/loadModuleFrom_");
/**
* Simple RESTful router.
* @module Router_REST
*/ /**
* Create a RESTful router.
* @param {Routable} app
* @param {string} baseRoute
* @param {object} options
* @property {string} [options.$controllerPath]
* @property {object} [options.$errorOptions]
* @property {object|array} [options.$middlewares]
* @example
* '<base path>': {
* REST: {
* $controllerPath:
* $errorOptions:
* $middlewares:
* }
* }
*
* route http method function of ctrl
* /:resource get list
* /:resource post create
* /:resource/:id get detail
* /:resource/:id put update
* /:resource/:id delete remove
*/ const restRouter = async (app, baseRoute, options)=>{
let router = app.router.createRouter(baseRoute);
let resourcesPath = options.$controllerPath ?? 'resources';
const kebabify = options.$urlDasherize;
app.useMiddleware(router, await (await app.getMiddlewareFactory_('jsonError'))(options.$errorOptions, app), 'jsonError');
if (options.$middlewares) {
await app.useMiddlewares_(router, options.$middlewares);
}
const controllers = await (0, _loadModuleFrom_.loadControllers_)(app, options.$source, resourcesPath, options.$packageName);
await (0, _utils.batchAsync_)(controllers, async (controller, relPath)=>{
let batchUrl = _utils.text.ensureStartsWith(relPath.split('/').map((p)=>kebabify ? _utils.naming.kebabCase(p) : p).join('/'), '/');
let singleUrl = batchUrl + '/:id';
if (typeof controller === 'function') {
controller = new controller(app);
}
if ((0, _utils.hasMethod)(controller, 'list')) {
await app.addRoute_(router, 'get', batchUrl, (ctx)=>controller.list(ctx));
}
if ((0, _utils.hasMethod)(controller, 'create')) {
await app.addRoute_(router, 'post', batchUrl, (ctx)=>controller.create(ctx));
}
if ((0, _utils.hasMethod)(controller, 'detail')) {
await app.addRoute_(router, 'get', singleUrl, (ctx)=>controller.detail(ctx, ctx.params.id));
}
if ((0, _utils.hasMethod)(controller, 'update')) {
await app.addRoute_(router, 'put', singleUrl, (ctx)=>controller.update(ctx, ctx.params.id));
}
if ((0, _utils.hasMethod)(controller, 'remove')) {
await app.addRoute_(router, 'delete', singleUrl, (ctx)=>controller.remove(ctx, ctx.params.id));
}
});
app.addRouter(router);
};
const _default = restRouter;
//# sourceMappingURL=rest.js.map