UNPKG

sharyn

Version:

Combines all the other packages under one.

236 lines (186 loc) 7.79 kB
"use strict"; 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;