UNPKG

@hkvstore/taco-cli

Version:

taco-cli is a command-line interface for rapid Apache Cordova development (forked from Microsoft taco-cli)

89 lines (87 loc) 4.2 kB
// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for details. /// <reference path="../../typings/tacoUtils.d.ts" /> /// <reference path="../../typings/node.d.ts" /> /// <reference path="../../typings/nopt.d.ts" /> /// <reference path="../../typings/tacoLiveReload.d.ts" /> "use strict"; var Q = require("q"); var tacoUtility = require("taco-utils"); var liveReload = require("taco-livereload"); var Logger = tacoUtility.Logger; var ProjectHelper = tacoUtility.ProjectHelper; var CordovaHelper = tacoUtility.CordovaHelper; /** * Run * * handles "taco run" */ var LiveReload = (function () { function LiveReload() { } LiveReload.hookLiveReload = function (options, platforms) { Logger.log("Setting up livereload ..."); var projectRoot = ProjectHelper.getProjectRoot(); return LiveReload.getTargetPlatforms(projectRoot, platforms) .then(function (targetPlatforms) { return CordovaHelper.tryInvokeCordova(function (cordova) { var startOptions = { ghostMode: !!options.devicesync, tunnel: !!options.tunnel, ignore: options.ignore, cb: function (event, file, lrHandle) { // After a file changes, first run `cordova prepare`, then reload. return cordova.raw.prepare().then(function () { var patcher = new liveReload.Patcher(projectRoot, targetPlatforms); return patcher.removeCSP(); }).then(function () { if (event === 'change') { return lrHandle.tryReloadingFile(file); } // If new files got added or deleted, reload the whole app instead of specific files only // e.g: index.html references a logo file 'img/logo.png' // deleting the 'img/logo.png' file will trigger a reload that will remove it from the rendered app // likewise, adding the 'img/logo.png' file will trigger it to be shown on the app return lrHandle.reloadBrowsers(); }).fail(function (err) { var msg = ' - An error occurred: ' + err; Logger.log(msg); lrHandle.stop(); }); } }; liveReload.on("livereload:error", function (err) { Logger.log("TACO Livereload Error occured: - " + err); }); // Display prompt to the user letting them know that livereload has started // Note: we do it this way because doing it after `lr.start()`, it would get lost // among all the run command details output. cordova.on("after_run", function () { if (liveReload.isLiveReloadActive()) { Logger.logLine(); Logger.log("TACO Live Reload started."); Logger.logLine(); Logger.log("Press CTRL+C to exit"); } }); cordova.on("after_prepare", function () { if (!liveReload.isLiveReloadActive()) { return liveReload.start(projectRoot, targetPlatforms, startOptions); } }); return Q({}); }, function () { return Q.reject(new Error("live-reload is not supported for project without taco.json ")); }, {}); }); }; LiveReload.getTargetPlatforms = function (projectRoot, platforms) { if (platforms && platforms.length > 0) { return Q(platforms); } return ProjectHelper.getInstalledComponents(projectRoot, "platforms"); }; return LiveReload; }()); module.exports = LiveReload; //# sourceMappingURL=liveReload.js.map