import { Rupert, Config, Inject, IPlugin, IPluginHandler, ILogger } from '../rupert'; import * as express from 'express'; export class Static implements IPlugin { public handlers: IPluginHandler[] = []; ready(): Promise { return Promise.resolve(); } constructor(@Inject(Rupert) app: Rupert, @Inject(Config) config: Config, @Inject(ILogger) logger: ILogger) { let statics = config.find('static.routes', {}); let staticOptions = { dotfiles: config.find('static.dotfiles', 'ignore'), etag: config.find('static.etag', true), index: config.find('static.index', 'index.html'), lastModified: config.find('static.lastModified', true), maxAge: config.find('static.maxAge', 0), redirect: config.find('static.redirect', true) }; const roots = Object.keys(statics); logger.verbose(`Attaching ${roots.length} static handlers.`); roots.forEach((prefix) => { let path = config.find(`static.routes.${prefix}`, ''); logger.debug(`${prefix} => ${path}`); app.app.use(prefix, express.static(statics[prefix], staticOptions)); }); } }