in src/watcher.js [31:111]
async start() {
const watch = this.argv.watch || process.cwd();
if (watch &&
// each of these triggers listening
( this.argv.livereload
|| this.argv.onBuild
|| this.argv.onChange
|| this.argv.invokeParams
|| this.argv.invokeAction )
) {
log.spinner('Initializing source watching');
this.liveReloadServer = livereload.createServer({
port: this.argv.livereloadPort,
noListen: !this.argv.livereload,
exclusions: [this.argv.buildPath, "**/node_modules/**", "**/.*"],
exts: this.argv.watchExts || ["json", "js", "ts", "coffee", "py", "rb", "erb", "go", "java", "scala", "php", "swift", "rs", "cs", "bal", "php", "php5"],
extraExts: []
});
this.liveReloadServer.watch(watch);
// overwrite function to get notified on changes
const refresh = this.liveReloadServer.refresh;
const argv = this.argv;
const wsk = this.wsk;
this.liveReloadServer.refresh = function(filepath) {
try {
let result = [];
log.verbose("File modified:", filepath);
// call original function if we are listening
if (argv.livereload) {
result = refresh.call(this, filepath);
}
// run build command before invoke triggers below
if (argv.onBuild) {
log.highlight("On build: ", argv.onBuild);
spawnSync(argv.onBuild, {shell: true, stdio: "inherit"});
}
// run shell command
if (argv.onChange) {
log.highlight("On run: ", argv.onChange);
spawnSync(argv.onChange, {shell: true, stdio: "inherit"});
}
// action invoke
if (argv.invokeParams || argv.invokeAction) {
let json = {};
if (argv.invokeParams) {
if (argv.invokeParams.trim().startsWith("{")) {
json = JSON.parse(argv.invokeParams);
} else {
json = JSON.parse(fs.readFileSync(argv.invokeParams, {encoding: 'utf8'}));
}
}
const action = argv.invokeAction || argv.action;
wsk.actions.invoke({
name: action,
params: json
}).then(response => {
log.step(`Invoked action ${action} with params ${argv.invokeParams}: ${response.activationId}`);
}).catch(err => {
log.error("Error invoking action:", err);
});
}
return result;
} catch (e) {
log.error(e);
}
};
if (this.argv.livereload) {
log.log(`LiveReload enabled for ${log.highlightColor(watch)} on port ${this.liveReloadServer.config.port}`);
}
log.debug("started source file watching");
}
}