snapi2
Version:
An API-first RESTful server framework built on Swagger and Restify
119 lines (101 loc) • 3.57 kB
JavaScript
// Generated by CoffeeScript 1.12.7
;
var Logger, Promise, Responder, addMiddleware, addParsers, configureLogging, error, initializeSwagger, response, restify, restifyPlugins, router, swaggerParameterReplacer, swaggerTools;
Promise = require('bluebird');
restify = require('restify');
restifyPlugins = require('restify-plugins');
swaggerTools = require('swagger-tools');
Logger = require('./logger');
Responder = require('./responder');
router = require('./router');
error = require('./error');
swaggerParameterReplacer = require('./middleware/swaggerParameterReplacer');
response = require('./response');
exports.Response = response.Response;
exports.RedirectResponse = response.RedirectResponse;
addParsers = function(server, parsers) {
var i, len, parser, results;
if (Array.isArray(parsers)) {
results = [];
for (i = 0, len = parsers.length; i < len; i++) {
parser = parsers[i];
results.push(server.use(parser.parser(parser.options)));
}
return results;
} else {
server.use(restifyPlugins.bodyParser({
mapParams: false
}));
server.use(restifyPlugins.authorizationParser());
return server.use(restifyPlugins.queryParser());
}
};
addMiddleware = function(server, middleware) {
var i, len, middlewareFunc, results;
if (Array.isArray(middleware)) {
results = [];
for (i = 0, len = middleware.length; i < len; i++) {
middlewareFunc = middleware[i];
if (typeof middlewareFunc === 'function') {
results.push(server.use(middlewareFunc));
} else {
results.push(void 0);
}
}
return results;
}
};
configureLogging = function(server, opts) {
var logger;
logger = new Logger(opts);
server.on('after', restifyPlugins.auditLogger({
name: 'audit',
log: logger.log
}));
Promise.onPossiblyUnhandledRejection(logger.unhandledRejection());
process.on('uncaughtException', logger.unhandledProcessException());
server.on('uncaughtException', logger.unhandledRestifyException());
return server.logger = logger;
};
initializeSwagger = function(server, opts) {
if (!opts.api) {
throw new error.MissingApiConfigError();
}
return new Promise(function(resolve) {
return swaggerTools.initializeMiddleware(opts.api, function(swaggerMiddleware) {
server.use(swaggerMiddleware.swaggerMetadata());
server.use(swaggerMiddleware.swaggerValidator());
server.use(swaggerParameterReplacer());
return resolve();
});
});
};
exports.createServer = function(opts) {
var server;
server = void 0;
return Promise["try"](function() {
opts = opts || {};
opts.restify = opts.restify || {};
opts.middleware = opts.middleware || {};
server = restify.createServer(opts.restify);
addParsers(server, opts.parsers);
addMiddleware(server, opts.middleware.afterParsers);
configureLogging(server, opts);
server.responder = new Responder(server.logger, opts.responder);
return initializeSwagger(server, opts);
}).then(function() {
var i, len, results, staticRoute, staticRoutes;
addMiddleware(server, opts.middleware.beforeRoutes);
router.registerRoutes(server, opts.api, opts);
staticRoutes = opts.serveStatic || [];
if (!staticRoutes.length) {
staticRoutes = [staticRoutes];
}
results = [];
for (i = 0, len = staticRoutes.length; i < len; i++) {
staticRoute = staticRoutes[i];
results.push(server.get(staticRoute.url, restifyPlugins.serveStatic(staticRoute)));
}
return results;
})["return"](server);
};