UNPKG

@compass-docgen/server

Version:

This is a package to run your doc mate server

99 lines (98 loc) 4.48 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CompassServer = void 0; const express_1 = __importDefault(require("express")); const component_resolver_1 = __importDefault(require("./graphql/resolvers/component.resolver")); const server_1 = require("@apollo/server"); const express4_1 = require("@apollo/server/express4"); const drainHttpServer_1 = require("@apollo/server/plugin/drainHttpServer"); const http_1 = __importDefault(require("http")); const cors_1 = __importDefault(require("cors")); const fs = __importStar(require("fs")); const compression_1 = __importDefault(require("compression")); const path_1 = __importDefault(require("path")); const core_1 = require("@compass-docgen/core"); class CompassServer { async start(conf = { env: 'PROD' }) { const app = (0, express_1.default)(); const httpServer = http_1.default.createServer(app); const typeDefs = fs.readFileSync(path_1.default.resolve(path_1.default.dirname(__filename), './graphql/typedefs/index.graphql'), 'utf8'); let baseFolder = ''; if (fs.existsSync('build')) { baseFolder = 'build'; } const customProcessEnv = process.env; customProcessEnv.NODE_ENV = conf.env; const server = new server_1.ApolloServer({ typeDefs, resolvers: component_resolver_1.default, plugins: [(0, drainHttpServer_1.ApolloServerPluginDrainHttpServer)({ httpServer })], }); await server.start(); app.use(express_1.default.static(path_1.default.join(process.cwd(), baseFolder))); app.use((0, compression_1.default)()); app.use('/graphql', (0, cors_1.default)(), express_1.default.json(), // an Apollo Server instance and optional configuration options (0, express4_1.expressMiddleware)(server, { context: async ({ req }) => ({ token: req.headers.token }), })); app.use(express_1.default.static(__dirname, { extensions: ['html'], setHeaders: (res, path) => { if (path.match(/(\.html|\/sw\.js)$/)) { this.setNoCache(res); return; } if (path.match(/\.(js|css|png|jpg|jpeg|gif|ico|json)$/)) { this.setLongTermCache(res); } }, })); app.get('*', (req, res) => { res.sendFile(path_1.default.join(process.cwd(), baseFolder, 'index.html')); }); const CONFIG = await core_1.AppConfig.read(); await new Promise((resolve) => httpServer.listen({ port: CONFIG.port }, resolve)); console.log(`🚀 Server is running at http://localhost:${CONFIG.port}`); } setNoCache(res) { const date = new Date(); date.setFullYear(date.getFullYear() - 1); res.setHeader('Expires', date.toUTCString()); res.setHeader('Pragma', 'no-cache'); res.setHeader('Cache-Control', 'public, no-cache'); } setLongTermCache(res) { const date = new Date(); date.setFullYear(date.getFullYear() + 1); res.setHeader('Expires', date.toUTCString()); res.setHeader('Cache-Control', 'public, max-age=31536000, immutable'); } } exports.CompassServer = CompassServer;