UNPKG

simplr-gulp

Version:

Fully functional gulpfile.js implementation. Tailored for Single Page Application. Written in TypeScript.

109 lines (108 loc) 4.77 kB
Object.defineProperty(exports, "__esModule", { value: true }); const express = require("express"); const http = require("http"); const logger_1 = require("./utils/logger"); const configuration_1 = require("./configuration/configuration"); const child_process_1 = require("child_process"); const path = require("path"); const connectLiveReload = require("connect-livereload"); const tinyLr = require("tiny-lr"); const actions_emitter_1 = require("./utils/actions-emitter"); const live_reload_actions_1 = require("./actions/live-reload/live-reload-actions"); class Server { constructor() { this.server = express(); this.liveReloadServer = tinyLr({}); this.actionsListeners = new Array(); this.onReloadFilesList = (action) => { this.reloadFiles(action.FilesNames.join(",")); }; this.onReloadPage = (action) => { this.reloadFiles("index.html"); }; this.onRequest = (req, res) => { let { Build } = configuration_1.Configuration.GulpConfig.Directories; res.sendFile('index.html', { root: Build }); }; this.onClose = () => { logger_1.LoggerInstance.info(`Server closed.`); this.removeActionsListeners(); }; this.onError = (err) => { if (err.code === 'EADDRINUSE') { logger_1.LoggerInstance.error(`Port ${configuration_1.Configuration.GulpConfig.ServerConfig.Port} already in use.`); this.Listener.close(); } else { logger_1.LoggerInstance.error(`Exeption not handled. Please create issues with error code "${err.code}" here: https://github.com/QuatroCode/simplr-gulp/issues \n`, err); } }; let { ServerConfig, Directories } = configuration_1.Configuration.GulpConfig; let serverUrl = `http://${ServerConfig.Ip}:${ServerConfig.Port}`; this.configureServer(Directories.Build); this.startListeners(ServerConfig.Port, ServerConfig.LiveReloadPort); this.addEventListeners(); this.openBrowser(serverUrl); logger_1.LoggerInstance.info(`Server started at '${serverUrl}'`); this.addActionsListeners(); } get isQuiet() { return (process.argv.findIndex(x => x === "--quiet") !== -1 || process.argv.findIndex(x => x === "-Q") !== -1); } addActionsListeners() { this.actionsListeners.push(actions_emitter_1.Emitter.addListener(live_reload_actions_1.ReloadFiles, this.onReloadFilesList)); this.actionsListeners.push(actions_emitter_1.Emitter.addListener(live_reload_actions_1.ReloadPage, this.onReloadPage)); } removeActionsListeners() { this.actionsListeners.forEach(x => { x.remove(); }); this.actionsListeners = new Array(); } reloadFiles(files) { http.get({ hostname: configuration_1.Configuration.GulpConfig.ServerConfig.Ip, port: configuration_1.Configuration.GulpConfig.ServerConfig.LiveReloadPort, path: `/changed?files=${files}`, agent: false }); } configureServer(wwwroot) { this.server.use(connectLiveReload({ port: configuration_1.Configuration.GulpConfig.ServerConfig.LiveReloadPort })); this.server.use(express.static(wwwroot)); } startListeners(serverPort, liveReloadServerPort) { this.Listener = this.server.listen(serverPort); this.liveReloadServer.listen(liveReloadServerPort); } openBrowser(serverUrl) { if (!this.isQuiet) { let opener = ''; switch (process.platform) { case 'darwin': opener = 'open'; break; case 'win32': opener = 'start ""'; break; default: opener = path.join(__dirname, '../vendor/xdg-open'); break; } if (process.env.SUDO_USER) { opener = `sudo -u ${process.env.SUDO_USER} ${opener}`; } try { child_process_1.exec(`${opener} "${serverUrl}"`); } catch (error) { logger_1.LoggerInstance.error("Error with openBrowser.", error); logger_1.LoggerInstance.info("Please create new issue here: https://github.com/quatrocode/simplr-gulp/issues"); } } } addEventListeners() { this.Listener.once("close", this.onClose); this.Listener.once('error', this.onError); this.server.all('/*', this.onRequest); } } exports.Server = Server;