UNPKG

6.15 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.stopServer = exports.startServer = exports.DEFAULT_TESTING_PORT = exports.DEFAULT_PORT = void 0;
9
10var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
11
12var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
13
14var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
15
16var _safe = _interopRequireDefault(require("colors/safe"));
17
18var _exitHook = _interopRequireDefault(require("exit-hook"));
19
20var _env = require("@sharyn/env");
21
22var _checkSetup = require("@sharyn/check-setup");
23
24/* eslint-disable import/no-extraneous-dependencies, import/no-dynamic-require, global-require */
25// flow-disable-next-line
26var Koa = (0, _checkSetup.hasPackage)('koa', true) && require("".concat(_checkSetup.appRoot, "/node_modules/koa")); // flow-disable-next-line
27
28
29var Router = (0, _checkSetup.hasPackage)('koa-router', true) && require("".concat(_checkSetup.appRoot, "/node_modules/koa-router"));
30
31var router = new Router();
32
33var PREFIX = _safe.default.cyan('[sharyn/koa]');
34
35var DEFAULT_PORT = 8020;
36exports.DEFAULT_PORT = DEFAULT_PORT;
37var DEFAULT_TESTING_PORT = 8021;
38exports.DEFAULT_TESTING_PORT = DEFAULT_TESTING_PORT;
39var port = _env.IS_TEST_ENV ? _env.TESTING_PORT || DEFAULT_TESTING_PORT : _env.PORT || DEFAULT_PORT;
40var server;
41
42var stopServer_ = function stopServer_(options) {
43 if (server) {
44 if (!((options === null || options === void 0 ? void 0 : options.silent) || _env.IS_TEST_ENV)) {
45 // eslint-disable-next-line no-console
46 console.log(); // cross-os newline
47 // eslint-disable-next-line no-console
48
49 console.log("".concat(PREFIX, " Server stopped"));
50 }
51
52 var sharynDb = (0, _checkSetup.requireSharyn)('db');
53 sharynDb && sharynDb.knex.destroy();
54 var sharynRedis = (0, _checkSetup.requireSharyn)('redis');
55 sharynRedis && sharynRedis.quit();
56 return server.close();
57 }
58
59 throw Error('Tried to stop the server but no server was running');
60};
61
62var startServer_ = function startServer_(manualRouting, options) {
63 var routing = manualRouting || (0, _checkSetup.requireCascadeFromSource)('_server/routing.js', 'server/routing.js');
64
65 if (!routing) {
66 throw Error('You must pass a routing function to startServer, or have a _server/routing.js file exporting the routing function');
67 }
68
69 if (!((options === null || options === void 0 ? void 0 : options.silent) || _env.IS_TEST_ENV)) {
70 // eslint-disable-next-line no-console
71 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));
72 }
73
74 (0, _exitHook.default)(function () {
75 return stopServer_();
76 });
77 var app = new Koa();
78
79 if ((0, _checkSetup.hasPackage)('koa-session')) {
80 app.keys = [_env.SESSION_SECRET_KEY];
81 }
82
83 if ((0, _checkSetup.hasPackage)('koa-sslify')) {
84 // flow-disable-next-line
85 var enforceHttps = require('koa-sslify');
86
87 var hasHeroku = (0, _checkSetup.hasFile)('Procfile');
88 _env.IS_LOCAL_ENV_TYPE || app.use(enforceHttps({
89 trustProtoHeader: hasHeroku
90 }));
91 }
92
93 if ((0, _checkSetup.hasPackage)('koa-session')) {
94 // flow-disable-next-line
95 var session = require('koa-session');
96
97 var sessionOptions = {
98 maxAge: 1000 * 60 * 60 * 24 * 14,
99 // 2 weeks
100 rolling: true
101 };
102 var sharynRedis = (0, _checkSetup.requireSharyn)('redis');
103
104 if (sharynRedis) {
105 sessionOptions.store = {
106 get: function () {
107 var _get = (0, _asyncToGenerator2.default)(
108 /*#__PURE__*/
109 _regenerator.default.mark(function _callee(key) {
110 return _regenerator.default.wrap(function _callee$(_context) {
111 while (1) {
112 switch (_context.prev = _context.next) {
113 case 0:
114 _context.t0 = JSON;
115 _context.next = 3;
116 return sharynRedis.getAsync("session:".concat(key));
117
118 case 3:
119 _context.t1 = _context.sent;
120 return _context.abrupt("return", _context.t0.parse.call(_context.t0, _context.t1));
121
122 case 5:
123 case "end":
124 return _context.stop();
125 }
126 }
127 }, _callee, this);
128 }));
129
130 return function get(_x) {
131 return _get.apply(this, arguments);
132 };
133 }(),
134 set: function set(key, sess) {
135 return sharynRedis.setAsync("session:".concat(key), (0, _stringify.default)(sess));
136 },
137 destroy: function destroy(key) {
138 return sharynRedis.delAsync(key);
139 }
140 };
141 }
142
143 app.use(session(sessionOptions, app));
144 }
145
146 if ((0, _checkSetup.hasPackage)('koa-body')) {
147 // flow-disable-next-line
148 app.use(require('koa-body')({
149 multipart: true
150 }));
151 }
152
153 if ((0, _checkSetup.hasPackage)('koa-compress')) {
154 // flow-disable-next-line
155 app.use(require('koa-compress')());
156 }
157
158 if ((0, _checkSetup.hasPackage)('koa-mount') && (0, _checkSetup.hasPackage)('koa-static')) {
159 // flow-disable-next-line
160 var mount = require('koa-mount'); // flow-disable-next-line
161
162
163 var serveStatic = require('koa-static');
164
165 app.use(mount('/static', serveStatic('dist'))).use(mount('/static', serveStatic('public')));
166 }
167
168 if ((0, _checkSetup.hasPackage)('koa-favicon')) {
169 app.use( // flow-disable-next-line
170 require('koa-favicon')("./".concat((0, _checkSetup.pathCascade)('public/img/favicon/favicon.ico', 'public/img/favicon.ico', 'public/favicon.ico'))));
171 }
172
173 routing(router);
174 app.use(router.routes()).use(router.allowedMethods());
175 server = app.listen((options === null || options === void 0 ? void 0 : options.port) || port);
176};
177
178var startServer = startServer_;
179exports.startServer = startServer;
180var stopServer = stopServer_;
181exports.stopServer = stopServer;
\No newline at end of file