UNPKG

6.66 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 hasDocker = (0, _checkSetup.hasFile)('docker-compose.yml');
41var server;
42
43var stopServer_ = function stopServer_(options) {
44 if (server) {
45 if (!((options === null || options === void 0 ? void 0 : options.silent) || _env.IS_TEST_ENV)) {
46 // eslint-disable-next-line no-console
47 console.log(); // cross-os newline
48 // eslint-disable-next-line no-console
49
50 console.log("".concat(PREFIX, " Server stopped"));
51 }
52
53 var sharynDb = (0, _checkSetup.requireSharyn)('db');
54 sharynDb && sharynDb.knex.destroy();
55 var sharynRedis = hasDocker && (0, _checkSetup.requireSharyn)('redis');
56 sharynRedis && sharynRedis.quit();
57 return server.close();
58 }
59
60 throw Error('Tried to stop the server but no server was running');
61};
62
63var startServer_ = function startServer_(manualRouting, options) {
64 var routing = manualRouting || (0, _checkSetup.requireCascadeFromSource)('_server/routing.js', 'server/routing.js');
65
66 if (!routing) {
67 throw Error('You must pass a routing function to startServer, or have a _server/routing.js file exporting the routing function');
68 }
69
70 if (!((options === null || options === void 0 ? void 0 : options.silent) || _env.IS_TEST_ENV)) {
71 // eslint-disable-next-line no-console
72 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));
73 }
74
75 (0, _exitHook.default)(function () {
76 return stopServer_();
77 });
78 var app = new Koa();
79
80 if ((0, _checkSetup.hasPackage)('koa-session')) {
81 app.keys = [_env.SESSION_SECRET_KEY];
82 }
83
84 if ((0, _checkSetup.hasPackage)('koa-sslify')) {
85 // flow-disable-next-line
86 var enforceHttps = require('koa-sslify');
87
88 var hasHeroku = (0, _checkSetup.hasFile)('Procfile');
89 _env.IS_LOCAL_ENV_TYPE || app.use(enforceHttps({
90 trustProtoHeader: hasHeroku
91 }));
92 }
93
94 if ((0, _checkSetup.hasPackage)('koa-session')) {
95 // flow-disable-next-line
96 var session = require('koa-session');
97
98 var sessionOptions = {
99 maxAge: 1000 * 60 * 60 * 24 * 14,
100 // 2 weeks
101 rolling: true
102 };
103 var sharynRedis = hasDocker && (0, _checkSetup.requireSharyn)('redis');
104
105 if (sharynRedis) {
106 sessionOptions.store = {
107 get: function () {
108 var _get = (0, _asyncToGenerator2.default)(
109 /*#__PURE__*/
110 _regenerator.default.mark(function _callee(key) {
111 return _regenerator.default.wrap(function _callee$(_context) {
112 while (1) {
113 switch (_context.prev = _context.next) {
114 case 0:
115 _context.t0 = JSON;
116 _context.next = 3;
117 return sharynRedis.getAsync("session:".concat(key));
118
119 case 3:
120 _context.t1 = _context.sent;
121 return _context.abrupt("return", _context.t0.parse.call(_context.t0, _context.t1));
122
123 case 5:
124 case "end":
125 return _context.stop();
126 }
127 }
128 }, _callee, this);
129 }));
130
131 return function get(_x) {
132 return _get.apply(this, arguments);
133 };
134 }(),
135 set: function set(key, sess) {
136 return sharynRedis.setAsync("session:".concat(key), (0, _stringify.default)(sess));
137 },
138 destroy: function destroy(key) {
139 return sharynRedis.delAsync(key);
140 }
141 };
142 }
143
144 app.use(session(sessionOptions, app));
145 }
146
147 if ((0, _checkSetup.hasPackage)('koa-body')) {
148 // flow-disable-next-line
149 app.use(require('koa-body')({
150 multipart: true
151 }));
152 }
153
154 if ((0, _checkSetup.hasPackage)('koa-compress')) {
155 // flow-disable-next-line
156 app.use(require('koa-compress')());
157 }
158
159 if ((0, _checkSetup.hasPackage)('koa-mount') && (0, _checkSetup.hasPackage)('koa-static')) {
160 // flow-disable-next-line
161 var mount = require('koa-mount'); // flow-disable-next-line
162
163
164 var serveStatic = require('koa-static');
165
166 app.use(mount('/static', serveStatic('dist'))).use(mount('/static', serveStatic('public')));
167 }
168
169 if ((0, _checkSetup.hasPackage)('koa-favicon')) {
170 app.use( // flow-disable-next-line
171 require('koa-favicon')("./".concat((0, _checkSetup.pathCascade)('public/img/favicon/favicon.ico', 'public/img/favicon.ico', 'public/favicon.ico'))));
172 }
173
174 if ((0, _checkSetup.hasPackage)('apollo-server-koa')) {
175 var _ref;
176
177 // flow-disable-next-line
178 var _require = require('apollo-server-koa'),
179 ApolloServer = _require.ApolloServer;
180
181 var apolloServer = new ApolloServer((_ref = options === null || options === void 0 ? void 0 : options.apolloConfig) !== null && _ref !== void 0 ? _ref : {});
182 apolloServer.applyMiddleware({
183 app: app
184 });
185 }
186
187 routing(router);
188 app.use(router.routes()).use(router.allowedMethods());
189 server = app.listen((options === null || options === void 0 ? void 0 : options.port) || port);
190};
191
192var startServer = startServer_;
193exports.startServer = startServer;
194var stopServer = stopServer_;
195exports.stopServer = stopServer;
\No newline at end of file