UNPKG

1.6 kBJavaScriptView Raw
1'use strict';
2
3const Hoek = require('@hapi/hoek');
4const Validate = require('@hapi/validate');
5
6const Directory = require('./directory');
7const Etag = require('./etag');
8const File = require('./file');
9
10
11const internals = {
12 schema: Validate.object({
13 etagsCacheMaxSize: Validate.number().integer().min(0).default(1000)
14 }).required()
15};
16
17
18internals.fileMethod = function (path, responseOptions) {
19
20 // Set correct confine value
21
22 responseOptions = responseOptions || {};
23
24 if (typeof responseOptions.confine === 'undefined' || responseOptions.confine === true) {
25 responseOptions.confine = '.';
26 }
27
28 Hoek.assert(responseOptions.end === undefined || +responseOptions.start <= +responseOptions.end, 'options.start must be less than or equal to options.end');
29
30 return this.response(File.response(path, responseOptions, this.request));
31};
32
33
34exports.plugin = {
35 pkg: require('../package.json'),
36 once: true,
37 requirements: {
38 hapi: '>=19.0.0'
39 },
40
41 register(server, options) {
42
43 Hoek.assert(Object.keys(options).length === 0, 'Inert does not support registration options');
44 const settings = Validate.attempt(Hoek.reach(server.settings.plugins, 'inert') || {}, internals.schema, 'Invalid "inert" server options');
45
46 server.expose('_etags', settings.etagsCacheMaxSize > 0 ? new Etag.Cache(settings.etagsCacheMaxSize) : null);
47
48 server.decorate('handler', 'file', File.handler);
49 server.decorate('handler', 'directory', Directory.handler);
50 server.decorate('toolkit', 'file', internals.fileMethod);
51 }
52};