sharyn
Version:
Combines all the other packages under one.
236 lines (186 loc) • 7.79 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.stopServer = exports.startServer = exports.DEFAULT_TESTING_PORT = exports.DEFAULT_PORT = void 0;
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
var _safe = _interopRequireDefault(require("colors/safe"));
var _exitHook = _interopRequireDefault(require("exit-hook"));
var _env = require("@sharyn/env");
var _checkSetup = require("@sharyn/check-setup");
/* eslint-disable import/no-extraneous-dependencies, import/no-dynamic-require, global-require */
// flow-disable-next-line
var Koa = (0, _checkSetup.hasPackage)('koa', true) && require("".concat(_checkSetup.appRoot, "/node_modules/koa")); // flow-disable-next-line
var Router = (0, _checkSetup.hasPackage)('koa-router', true) && require("".concat(_checkSetup.appRoot, "/node_modules/koa-router"));
var router = new Router();
var PREFIX = _safe.default.cyan('[sharyn/koa]');
var DEFAULT_PORT = 8020;
exports.DEFAULT_PORT = DEFAULT_PORT;
var DEFAULT_TESTING_PORT = 8021;
exports.DEFAULT_TESTING_PORT = DEFAULT_TESTING_PORT;
var port = _env.IS_TEST_ENV ? _env.TESTING_PORT || DEFAULT_TESTING_PORT : _env.PORT || DEFAULT_PORT;
var hasDocker = (0, _checkSetup.hasFile)('docker-compose.yml');
var server;
var stopServer_ = function stopServer_(options) {
if (server) {
if (!((options === null || options === void 0 ? void 0 : options.silent) || _env.IS_TEST_ENV)) {
// eslint-disable-next-line no-console
console.log(); // cross-os newline
// eslint-disable-next-line no-console
console.log("".concat(PREFIX, " Server stopped"));
}
var sharynDb = (0, _checkSetup.requireSharyn)('db');
sharynDb && sharynDb.knex.destroy();
var sharynRedis = hasDocker && (0, _checkSetup.requireSharyn)('redis');
sharynRedis && sharynRedis.quit();
return server.close();
}
throw Error('Tried to stop the server but no server was running');
};
var startServer_ = function startServer_(manualRouting, options) {
var routing = manualRouting || (0, _checkSetup.requireCascadeFromSource)('_server/routing.js', 'server/routing.js');
if (!routing) {
throw Error('You must pass a routing function to startServer, or have a _server/routing.js file exporting the routing function');
}
if (!((options === null || options === void 0 ? void 0 : options.silent) || _env.IS_TEST_ENV)) {
// eslint-disable-next-line no-console
console.log("\n".concat(PREFIX, " \uD83C\uDF39 Server running on PORT: ").concat(port, " | NODE_ENV: ").concat(_env.NODE_ENV, " | ENV_TYPE: ").concat(_env.ENV_TYPE));
}
(0, _exitHook.default)(function () {
return stopServer_();
});
var app = new Koa();
if ((0, _checkSetup.hasPackage)('koa-session')) {
app.keys = [_env.SESSION_SECRET_KEY];
}
app.use(
/*#__PURE__*/
function () {
var _ref = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee(ctx, next) {
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return next();
case 3:
_context.next = 10;
break;
case 5:
_context.prev = 5;
_context.t0 = _context["catch"](0);
ctx.status = _context.t0.status || 500;
ctx.redirect('/error');
ctx.app.emit('error', _context.t0, ctx);
case 10:
case "end":
return _context.stop();
}
}
}, _callee, this, [[0, 5]]);
}));
return function (_x, _x2) {
return _ref.apply(this, arguments);
};
}());
if ((0, _checkSetup.hasPackage)('koa-sslify')) {
// flow-disable-next-line
var enforceHttps = require('koa-sslify');
var hasHeroku = (0, _checkSetup.hasFile)('Procfile');
_env.IS_LOCAL_ENV_TYPE || app.use(enforceHttps({
trustProtoHeader: hasHeroku
}));
}
if ((0, _checkSetup.hasPackage)('koa-session')) {
// flow-disable-next-line
var session = require('koa-session');
var sessionOptions = {
maxAge: 1000 * 60 * 60 * 24 * 14,
// 2 weeks
rolling: true
};
var sharynRedis = hasDocker && (0, _checkSetup.requireSharyn)('redis');
if (sharynRedis) {
sessionOptions.store = {
get: function () {
var _get = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee2(key) {
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.t0 = JSON;
_context2.next = 3;
return sharynRedis.getAsync("session:".concat(key));
case 3:
_context2.t1 = _context2.sent;
return _context2.abrupt("return", _context2.t0.parse.call(_context2.t0, _context2.t1));
case 5:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
return function get(_x3) {
return _get.apply(this, arguments);
};
}(),
set: function set(key, sess) {
return sharynRedis.setAsync("session:".concat(key), (0, _stringify.default)(sess));
},
destroy: function destroy(key) {
return sharynRedis.delAsync(key);
}
};
}
app.use(session(sessionOptions, app));
}
if ((0, _checkSetup.hasPackage)('koa-body')) {
// flow-disable-next-line
app.use(require('koa-body')({
multipart: true
}));
}
if ((0, _checkSetup.hasPackage)('koa-compress')) {
// flow-disable-next-line
app.use(require('koa-compress')());
}
if ((0, _checkSetup.hasPackage)('koa-mount') && (0, _checkSetup.hasPackage)('koa-static')) {
// flow-disable-next-line
var mount = require('koa-mount'); // flow-disable-next-line
var serveStatic = require('koa-static');
app.use(mount('/static', serveStatic('dist'))).use(mount('/static', serveStatic('public'))).use(mount('/', serveStatic('public/root')));
}
if ((0, _checkSetup.hasPackage)('koa-favicon')) {
app.use( // flow-disable-next-line
require('koa-favicon')("./".concat((0, _checkSetup.pathCascade)('public/img/favicon/favicon.ico', 'public/img/favicon.ico', 'public/favicon.ico'))));
}
if ((0, _checkSetup.hasPackage)('apollo-server-koa')) {
var _ref2;
// flow-disable-next-line
var _require = require('apollo-server-koa'),
ApolloServer = _require.ApolloServer;
var apolloServer = new ApolloServer((_ref2 = options === null || options === void 0 ? void 0 : options.apolloConfig) !== null && _ref2 !== void 0 ? _ref2 : {});
apolloServer.applyMiddleware({
app: app
});
}
routing(router);
app.use(router.routes()).use(router.allowedMethods());
app.on('error', function (err) {
return console.error(err);
});
server = app.listen((options === null || options === void 0 ? void 0 : options.port) || port);
};
var startServer = startServer_;
exports.startServer = startServer;
var stopServer = stopServer_;
exports.stopServer = stopServer;