inert
Version:
Static file and directory handlers plugin for hapi.js
53 lines (35 loc) • 1.57 kB
JavaScript
;
const Hoek = require('hoek');
const Joi = require('joi');
const Directory = require('./directory');
const Etag = require('./etag');
const File = require('./file');
const internals = {
schema: Joi.object({
etagsCacheMaxSize: Joi.number().integer().min(0).default(1000)
}).required()
};
internals.fileMethod = function (path, responseOptions) {
// Set correct confine value
responseOptions = responseOptions || {};
if (typeof responseOptions.confine === 'undefined' || responseOptions.confine === true) {
responseOptions.confine = '.';
}
Hoek.assert(responseOptions.end === undefined || +responseOptions.start <= +responseOptions.end, 'options.start must be less than or equal to options.end');
return this.response(File.response(path, responseOptions, this.request));
};
exports.plugin = {
pkg: require('../package.json'),
once: true,
requirements: {
hapi: '>=17.7.0'
},
register(server, options) {
Hoek.assert(Object.keys(options).length === 0, 'Inert does not support registration options');
const settings = Joi.attempt(Hoek.reach(server.settings.plugins, 'inert') || {}, internals.schema, 'Invalid "inert" server options');
server.expose('_etags', settings.etagsCacheMaxSize > 0 ? new Etag.Cache(settings.etagsCacheMaxSize) : null);
server.decorate('handler', 'file', File.handler);
server.decorate('handler', 'directory', Directory.handler);
server.decorate('toolkit', 'file', internals.fileMethod);
}
};