UNPKG

@chezearth/swagger-node-runner

Version:
75 lines (61 loc) 1.78 kB
'use strict'; module.exports = init; var debug = require('debug')('swagger:hapi_middleware'); function init(runner) { return new Hapi(runner); } function Hapi(runner) { this.runner = runner; this.config = runner.config; var connectMiddleware = runner.connectMiddleware(); var chain = connectMiddleware.middleware(); this.plugin = { register: function(server, options, next) { server.ext('onRequest', function(request, reply) { var req = request.raw.req; var res = newResponse(reply); chain(req, res, function(err) { if (err) { if (err.statusCode) { res.statusCode = err.statusCode; } res.end(err.message); } res.finish(); }); }); /* istanbul ignore next */ server.on('request-error', function (request, err) { debug('Request: %s error: %s', request.id, err.stack); }); next(); } }; this.plugin.register.attributes = { name: 'swagger-node-runner', version: version() }; } function version() { return require('../package.json').version; } function newResponse(reply) { return { getHeader: function getHeader(name) { return this.headers ? this.headers[name.toLowerCase()] : null; }, setHeader: function setHeader(name, value) { if (!this.headers) { this.headers = {}; } this.headers[name.toLowerCase()] = value; }, end: function end(string) { this.res = reply(string); this.res.statusCode = this.statusCode; if (this.headers) { for (var header in this.headers) { this.res.header(header, this.headers[header]); } } }, finish: function finish() { if (!this.res) { reply.continue(); } } }; }