pvmed-server-libs
Version: 
pvmed server libs
51 lines (43 loc) • 1.51 kB
JavaScript
const Router = require('koa-joi-router')
class PVmedJoiRouter extends Router {
  constructor() {
    super()
  }
  assemble() {
    const router = this.router;
    const middleware = Array.prototype.slice.call(arguments);
    let path;
    // support array of paths
    if (Array.isArray(middleware[0]) && typeof middleware[0][0] === 'string') {
      middleware[0].forEach(function(p) {
        router.use.apply(router, [p].concat(middleware.slice(1)));
      });
      return this;
    }
    var hasPath = typeof middleware[0] === 'string';
    if (hasPath) {
      path = middleware.shift();
    }
    middleware.forEach(function(m) {
      if (m.router) {
        m.router.stack.forEach(function(nestedLayer) {
          nestedLayer.joiRouter = Object.assign({}, m.routes.find((item) => {
            return nestedLayer.methods.includes(item.method[0].toUpperCase()) && item.path === nestedLayer.path
          }), { group: path, groupDescription: m.description })
          if (path) nestedLayer.setPrefix(path);
          if (router.opts.prefix) nestedLayer.setPrefix(router.opts.prefix);
          router.stack.push(nestedLayer);
        });
        if (router.params) {
          Object.keys(router.params).forEach(function(key) {
            m.router.param(key, router.params[key]);
          });
        }
      } else {
        router.register(path || '(.*)', [], m, { end: false, ignoreCaptures: !hasPath });
      }
    });
    return this.router;
  }
}
module.exports = PVmedJoiRouter