UNPKG

simplr-gulp

Version:

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

123 lines (122 loc) 5.82 kB
Object.defineProperty(exports, "__esModule", { value: true }); const gulp = require("gulp"); const fs = require("fs"); const configuration_1 = require("../configuration/configuration"); const logger_1 = require("../utils/logger"); const path = require("path"); const live_reload_actions_creators_1 = require("../actions/live-reload/live-reload-actions-creators"); const tasks_handler_1 = require("../tasks/tasks-handler"); const watch_assets_task_1 = require("./tasks/watch-assets/watch-assets-task"); const watch_configs_task_1 = require("./tasks/watch-configs/watch-configs-task"); const watch_html_task_1 = require("./tasks/watch-html/watch-html-task"); const watch_scripts_task_1 = require("./tasks/watch-scripts/watch-scripts-task"); const watch_styles_task_1 = require("./tasks/watch-styles/watch-styles-task"); class WatcherTasksHandler extends tasks_handler_1.TasksHandler { constructor() { super((config) => { config.Name = "Watch"; config.Tasks = [watch_assets_task_1.WatchAssetsTask, watch_configs_task_1.WatchConfigsTask, watch_html_task_1.WatchHtmlTask, watch_scripts_task_1.WatchScriptsTask, watch_styles_task_1.WatchStylesTask]; return config; }); this.watchers = {}; this.runningTasks = new Array(); this.onTaskStart = (taskName) => { this.runningTasks.push(taskName); }; this.onTaskEnd = (taskName) => { let found = this.runningTasks.indexOf(taskName); if (found > -1) { this.runningTasks.splice(found, 1); } if (this.runningTasks.length === 0) { this.onAllTaskEnded(); } }; this.pendingReloadFiles = new Array(); this.fileChangeHandler = (pathName, stats) => { let targetPathName = this.removeRootSourcePath(pathName); targetPathName = this.changeExtensionToBuilded(targetPathName); this.pendingReloadFiles.push(targetPathName); logger_1.LoggerInstance.log(`'${pathName}' was changed.`); }; this.fileUnlinkHandler = (pathName) => { let targetPathName = this.changeExtensionToBuilded(pathName); targetPathName = this.changeRootPathToBuild(targetPathName); fs.unlink(targetPathName, (err) => { if (err != null) { if (err.code === "ENOENT") { logger_1.LoggerInstance.warn(`'${targetPathName}' has already been deleted.`); } else { logger_1.LoggerInstance.error(`Failed to delete file '${targetPathName}'\n`, err); } } else { logger_1.LoggerInstance.log(`'${targetPathName}' was deleted successfully.`); } }); }; this.registerWatchers(); logger_1.LoggerInstance.info(`Started watching files in '${configuration_1.Configuration.GulpConfig.Directories.Source}' folder.`); } registerWatchers() { Object.keys(this.constructedTasks).forEach(name => { let task = this.constructedTasks[name]; let process = gulp.parallel(this.generateName(task.Name)); this.watchers[task.Name] = gulp.watch(task.Globs, { ignoreInitial: true }, process); this.watchers[task.Name].on("unlink", (path) => { this.fileUnlinkHandler(path); if (task.Unlink != null) { task.Unlink(path); } }); this.watchers[task.Name].on("change", (pathName, stats) => { this.fileChangeHandler(pathName, stats); if (task.Change != null) { task.Change(pathName, stats); } }); task.On("start", this.onTaskStart.bind(this, task.Name)); task.On("end", this.onTaskEnd.bind(this, task.Name)); }); } onAllTaskEnded() { live_reload_actions_creators_1.LiveReloadActionsCreators.ReloadFiles(...this.pendingReloadFiles); this.pendingReloadFiles = new Array(); } removeRootSourcePath(pathName) { let pathList = pathName.split(path.sep); if (pathList[0] === configuration_1.Configuration.GulpConfig.Directories.Source) { pathList[0] = ""; return path.join(...pathList); } else { return pathName; } } changeExtensionToBuilded(pathName) { let currentExtension = path.extname(pathName); if (currentExtension.length > 1) { let currentExtensionTarget = currentExtension.slice(1); let targetExtension = configuration_1.Configuration.DefaultExtensions[currentExtensionTarget]; if (targetExtension !== undefined) { return pathName.slice(0, -currentExtensionTarget.length) + targetExtension; } } return pathName; } changeRootPathToBuild(pathName) { let pathList = pathName.split(path.sep); if (pathList[0] === configuration_1.Configuration.GulpConfig.Directories.Source) { pathList[0] = configuration_1.Configuration.GulpConfig.Directories.Build; return path.join(...pathList); } else { logger_1.LoggerInstance .withType("WarcherTasksHandler.changeRootPathToBuild()") .warn(`"${pathName}" path root is not under Source directory (${configuration_1.Configuration.GulpConfig.Directories.Source}) `); return pathName; } } } exports.WatcherTasksHandler = WatcherTasksHandler;