makeomatic/mservice

View on GitHub
packages/plugin-router-hapi/src/plugin.ts

Summary

Maintainability
A
0 mins
Test Coverage
import type * as _ from '@microfleet/plugin-hapi'
import type * as __ from '@microfleet/plugin-validator'
import { strict as assert } from 'assert'
import { resolve } from 'path'
import { Microfleet, PluginTypes } from '@microfleet/core'

import attachRouter from './attach'
import { RouterHapiPluginConfig } from './types/plugin'
import { PluginInterface } from '@microfleet/core-types'

export const name = 'routerHapi'
export const type = PluginTypes.transport
export const priority = 30 // should be after plugin-hapi and plugin router

declare module '@microfleet/core-types' {
  interface ConfigurationOptional {
    routerHapi: RouterHapiPluginConfig
  }
}

/**
 * Attaches HTTP handler.
 * @param config - HTTP handler configuration to attach.
 */
export async function attach(
  this: Microfleet,
  options: Partial<RouterHapiPluginConfig> = {}
): Promise<PluginInterface> {
  assert(this.hasPlugin('validator'), 'validator module must be included')

  await this.validator.addLocation(resolve(__dirname, '../schemas'))

  const config = this.validator.ifError<RouterHapiPluginConfig>('router-hapi', options)
  const routerPlugin = attachRouter(this, config)

  return {
    async connect(this: Microfleet) {
      await this.hapi.register(routerPlugin)
    }
  }
}