server.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // @ts-ignore -- generated package
  2. import "src/utils/environment";
  3. import * as sapper from "@sapper/server"; // eslint-disable-line import/no-unresolved
  4. import compression from "compression";
  5. import express, { Express } from "express";
  6. import session from "cookie-session";
  7. // @ts-ignore -- doesn't package its own types until 1.0.0-next.6
  8. import sirv from "sirv";
  9. import { logger } from "./utils/logging";
  10. const PORT = process.env.PORT; // eslint-disable-line prefer-destructuring
  11. // @ts-ignore -- creates a warning after `rollup-plugin-replace` (set up in `rollup.config.js`)
  12. // replaces `process.env.NODE_ENV` with `"production"` during `prod`
  13. const dev = process.env.NODE_ENV === "development";
  14. logger.info("Staring webserver");
  15. const key = process.env.WEB_COOKIE_KEY;
  16. if (!key) {
  17. logger.error("WEB_COOKIE_KEY is not set, cannot run!");
  18. process.exit();
  19. }
  20. const createSapperServer = async (): Promise<Express> => {
  21. const app = express();
  22. app.use(
  23. session({
  24. secret: key,
  25. name: "session",
  26. }),
  27. compression({ threshold: 0 }),
  28. sirv("static", { dev }),
  29. sapper.middleware({
  30. session: (req) => ({
  31. userId: req.session?.userId,
  32. }),
  33. }),
  34. );
  35. return app;
  36. };
  37. createSapperServer().then((app) => {
  38. app.listen(PORT, (err?: any): void => { // eslint-disable-line
  39. if (err) logger.error("Error on webserver: %s", err);
  40. });
  41. });
  42. export { sapper };