Source: index.js

/** @module sequelize-admin-panel */
/* eslint no-console: 0 */
const ModelAdmin = require('./ModelAdmin')
const modelList = require('./controllers/models')
const serveStatic = require('serve-static')
const path = require('path')
const { checkSession, login, logout } = require('./userSession')
const cli = require('./cli')

String.prototype.capitalize = function() {
  return this.charAt(0).toLocaleUpperCase() + this.slice(1)
}

/**
 * Creates middleware
 * @method sequelizeAdmin
 * @param {Express} express Express
 * @param {Sequelize.Instance} sequelizeInstance - db connection
 * @param {Object} [{ models, translation }] options
 * @returns {Function} sequelize-admin-panel middleware
 */
function sequelizeAdmin(
  express,
  sequelizeInstance,
  { models, translation = {}, formidableOpts = {} } = {}
) {
  const router = express.Router()
  // static paths
  ;[
    'static',
    '../node_modules/bootstrap/dist',
    '../node_modules/jquery/dist',
    '../node_modules/popper.js/dist',
    '../node_modules/bootstrap4-datetimepicker/build',
    '../node_modules/moment/min',
    '../node_modules/moment-timezone/builds',
    '../node_modules/open-iconic/font'
  ].map(lib => router.use('/static', serveStatic(path.join(__dirname, lib))))

  router.use(require('./middleware/formidable-body-parser')(formidableOpts))

  // auth session
  router.use(require('./middleware/session'))

  // keep useful parameters in request
  router.use(
    require('./middleware/extend-request')(
      sequelizeInstance,
      models,
      translation
    )
  )
  router.use(require('./middleware/through-params'))

  // use own render method for app engine sanity
  router.use(require('./middleware/pugrender'))

  // login
  router.all('/login', login)
  router.get('/logout', logout)
  router.use(checkSession)

  router.all('/entry/:model/:id', require('./controllers/entry'))
  router.all('/model/:model', require('./controllers/model'))
  router.get('/', modelList)

  router.use((req, res, next) => res.pugrender('404'))

  /* eslint no-unused-vars:0 */
  router.use(function(error, req, res, next) {
    console.error(error)
    res.pugrender('error', {
      error
    })
  })
  return router
}

module.exports = {
  /** @prop {Function} sequelizeAdmin middleware builder*/
  sequelizeAdmin,
  /** @prop {ModelAdmin} ModelAdmin - ModelAdmin base class*/
  ModelAdmin,
  /** @prop {Function} cli - cli interface*/
  cli
}