UNPKG

@miyagi/core

Version:

miyagi is a component development tool for JavaScript template engines.

101 lines (84 loc) 2.58 kB
/** * Module for initializing miyagi * * @module init */ const express = require("express"); const handlebars = require("handlebars"); const handlebarsLayouts = require("handlebars-layouts"); const http = require("http"); const cookieParser = require("cookie-parser"); const appConfig = require("../config.json"); const build = require("../build/index.js"); const log = require("../logger.js"); const setEngines = require("./engines.js"); const setPartials = require("./partials.js"); const setRouter = require("./router.js"); const setState = require("../state"); const setStatic = require("./static.js"); const setViewHelpers = require("./view-helpers.js"); const setViews = require("./views.js"); const setWatcher = require("./watcher.js"); module.exports = async function init(mergedConfig) { const app = express(); app.use(cookieParser()); app.set("config", mergedConfig); app.set("view cache", app.get("config").isBuild); app.set("cache", app.get("config").isBuild); if (await setEngines(app)) { const port = process.env.PORT || appConfig.defaultPort; app.set("port", port); await setState(app, { sourceTree: true, menu: true, partials: true, fileContents: true, css: true, }); setStatic(app); setRouter(app); setViews(app); setViewHelpers(app); await setPartials.registerAll(app); handlebarsLayouts.register(handlebars); if (app.get("config").isBuild) { return build(app) .then(() => process.exit(0)) .catch(() => process.exit(1)); } const { server, port: actualPort } = await startServer( app, app.get("port") ); setWatcher(server, app); log( "success", `${appConfig.messages.serverStarted.replace("{{port}}", actualPort)}\n` ); return server; } return false; }; /** * @param {object} app - the express instance * @param {number} port - the port that should be used * @returns {Promise} gets resolved with the server instance and the actual port */ function startServer(app, port) { const server = http.createServer(app); return new Promise((resolve) => { server .listen(port, function () { resolve({ server, port }); }) .on("error", (error) => { if (error.code === "EADDRINUSE") { log("error", appConfig.messages.portInUse.replace("{{port}}", port)); server.close(async function () { const response = await startServer(app, port + 1); resolve(response); }); } }); }); }