UNPKG

@cashfarm/tractor

Version:

A Hapi server with superpowers

68 lines 2.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); // tslint:disable:no-console // tslint:disable:no-import-side-effect require("reflect-metadata"); const betterErrors_1 = require("./ext/betterErrors"); const config_1 = require("./config"); require("./router"); const plow_1 = require("@cashfarm/plow"); const container_config_1 = require("./container.config"); const decorators_1 = require("./decorators"); const util_1 = require("./util"); const debug = require('debug')('tractor'); const Glue = require('glue'); const composeOptions = { relativeTo: __dirname }; function createServer(serviceName, override, customContainer) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { const container = customContainer || plow_1.container; const options = { debug: true, enableCors: true, port: 3000 }; if (typeof override === 'object') { Object.assign(options, override); } const criteria = { env: process.env.NODE_ENV || 'development', debug: 'on' }; const manifest = config_1.default.get('/', criteria); // @todo Find a better way to configure the port manifest.connections[0].port = options.port; Glue.compose(manifest, composeOptions, (err, server) => { if (err) { return reject(err); } container_config_1.setupContainer(container, serviceName, server, options); server.decorate('server', 'getContainer', () => container); if (options.enableCors) { const addCorsHeaders = require('hapi-cors-headers'); server.ext('onPreResponse', addCorsHeaders); } if (options.debug) { server.settings.debug = { log: ['error', 'uncaught'], request: ['error', 'uncaught'] }; server.ext('onPreResponse', betterErrors_1.betterErrors); } if (typeof override === 'function') { override(server); } server.on('start', () => { const ctrls = container.getAll(decorators_1.Controllers); debug('Controllers:', ctrls); server.getRouter().addControllers(ctrls); debug(`Container (${container.guid}) bindings so far`); util_1.listContainerBindings(container).map((b, i) => debug(i, b)); }); resolve(server); }); }); }); } exports.createServer = createServer; //# sourceMappingURL=server.js.map