1 | 'use strict';
|
2 |
|
3 | const Hoek = require('@hapi/hoek');
|
4 | const Validate = require('@hapi/validate');
|
5 |
|
6 | const Directory = require('./directory');
|
7 | const Etag = require('./etag');
|
8 | const File = require('./file');
|
9 |
|
10 |
|
11 | const internals = {
|
12 | schema: Validate.object({
|
13 | etagsCacheMaxSize: Validate.number().integer().min(0).default(1000)
|
14 | }).required()
|
15 | };
|
16 |
|
17 |
|
18 | internals.fileMethod = function (path, responseOptions) {
|
19 |
|
20 |
|
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 |
|
34 | exports.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 | };
|