forked from MiniProfiler/node
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathhapi.js
More file actions
executable file
·61 lines (52 loc) · 1.85 KB
/
Copy pathhapi.js
File metadata and controls
executable file
·61 lines (52 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
'use strict';
const asyncContext = require('../async-context');
module.exports = {
buildMiddleware: function(provider) {
var plugin = {
register: (server, options, next) => {
server.ext('onRequest', function(request, reply) {
provider.handler(request.raw.req, request.raw.res, () => {
return reply.continue();
});
});
next();
}
};
plugin.register.attributes = {
name: `miniprofiler-hapi-${provider.name}`,
version: require('../../package.json').version
};
return plugin;
},
mainMiddleware: function(enable, authorize, handleRequest) {
var plugin = {
register: (server, options, next) => {
server.ext('onRequest', function(request, reply) {
handleRequest(enable, authorize, request.raw.req, request.raw.res).then((handled) => {
asyncContext.set(request.raw.req.miniprofiler);
Object.defineProperty(request.app, 'miniprofiler', { get: () => asyncContext.get() });
Object.defineProperty(request.raw.req, 'miniprofiler', { get: () => asyncContext.get() });
if (!handled)
reply.continue();
});
});
next();
}
};
plugin.register.attributes = {
name: 'miniprofiler-hapi',
version: require('../../package.json').version
};
//That's a bad monkey patch, didn't like it, needs refactor...
plugin.vision = (server) => {
var view = server._replier._decorations['view'];
server._replier._decorations['view'] = function(template, context, options) {
var viewArguments = arguments;
this.request.raw.req.miniprofiler.step(`Render: ${template}`, () => {
return view.apply(this, viewArguments);
});
};
};
return plugin;
}
};