UNPKG

snapi2

Version:

An API-first RESTful server framework built on Swagger and Restify

119 lines (101 loc) 3.57 kB
// Generated by CoffeeScript 1.12.7 'use strict'; 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); };