@cashfarm/tractor
Version:
A Hapi server with superpowers
68 lines • 2.87 kB
JavaScript
;
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