@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
JavaScript
// 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" />
;
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