UNPKG

@frontity/core

Version:

The core package of the Frontity framework.

72 lines (71 loc) 2.64 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = __importDefault(require("express")); const create_server_1 = __importDefault(require("./create-server")); const open_browser_1 = require("./open-browser"); /** * Create an express app ready to be used with webpack-dev-middleware. * * @param options - Defined in {@link DevOptions}. * * @returns - An object with the app and a callback function that starts the * server when Webpack has finished. */ exports.default = async ({ mode, port, isHttps, target, openBrowser = true, publicPath = "/static", }) => { // Create the app. const app = (0, express_1.default)(); // Use the http or https modules to create the server. const server = await (0, create_server_1.default)({ app, isHttps }); // Start listening once webpack has finished. let clientFinished = false; let serverFinished = false; let isListening = false; const url = `${isHttps ? "https" : "http"}://localhost:${port}`; // Do not return a response until webpack has finished loading. app.use((_, ___, next) => { if (!isListening) { const interval = setInterval(() => { if (isListening) { clearInterval(interval); next(); } }, 1000); } else { next(); } }); // Start listening. server.listen(port, () => { console.log(`\n\nSERVER STARTED -- Listening @ ${url}\n - mode: ${mode}\n - target: ${target}\n - public-path: ${publicPath}\n\n`); }); // Open localhost on the local browser. if (openBrowser) (0, open_browser_1.openBrowserTab)(url); // /** * Check if webpack has finished (both the client and server bundles). * * @param compiler - A {@link MultiCompiler} from Webpack. */ const done = (compiler) => { compiler.compilers[0].hooks.done.tapAsync("frontity-dev-server", (_, cb) => { clientFinished = true; if (clientFinished && serverFinished && !isListening) { isListening = true; } cb(); }); compiler.compilers[1].hooks.done.tapAsync("frontity-dev-server", (_, cb) => { serverFinished = true; if (clientFinished && serverFinished && !isListening) { isListening = true; } cb(); }); }; return { app, done }; };