99 lines
2.2 KiB
JavaScript
99 lines
2.2 KiB
JavaScript
"use strict";
|
|
|
|
var path = require("path");
|
|
var utils = require("../utils");
|
|
var defaultConfig = require("../default-config");
|
|
|
|
/**
|
|
* @param {BrowserSync} browserSync
|
|
* @returns {Function}
|
|
*/
|
|
module.exports = function (browserSync) {
|
|
|
|
var events = browserSync.events;
|
|
|
|
function emitReload(path, log) {
|
|
events.emit("file:changed", {
|
|
path: path,
|
|
log: log,
|
|
namespace: "core"
|
|
});
|
|
}
|
|
|
|
function emitBrowserReload() {
|
|
events.emit("browser:reload");
|
|
}
|
|
|
|
function emitInfo(changed) {
|
|
events.emit("stream:changed", {changed: changed});
|
|
}
|
|
|
|
return function (arg) {
|
|
|
|
if (typeof arg === "string") {
|
|
return emitReload(arg, true);
|
|
}
|
|
|
|
if (Array.isArray(arg)) {
|
|
|
|
if (utils.willCauseReload(arg, defaultConfig.injectFileTypes)) {
|
|
return emitBrowserReload();
|
|
}
|
|
|
|
return arg.forEach(function (filepath) {
|
|
emitReload(filepath, true);
|
|
});
|
|
}
|
|
|
|
if (arg && arg.stream === true) {
|
|
|
|
// Handle Streams here...
|
|
var emitted = false;
|
|
var once = arg.once || false;
|
|
var Transform = require("stream").Transform;
|
|
var reload = new Transform({objectMode:true});
|
|
var changed = [];
|
|
|
|
reload._transform = function (file, encoding, next) {
|
|
|
|
if (once === true && !emitted) {
|
|
|
|
emitBrowserReload();
|
|
|
|
emitted = true;
|
|
|
|
} else { // handle multiple
|
|
|
|
if (once === true && emitted) {
|
|
|
|
} else {
|
|
|
|
if (file.path) {
|
|
|
|
emitted = true;
|
|
emitReload(file.path, false);
|
|
changed.push(path.basename(file.path));
|
|
}
|
|
}
|
|
}
|
|
|
|
this.push(file); // always send the file down-stream
|
|
|
|
next();
|
|
};
|
|
|
|
reload._flush = function (next) {
|
|
|
|
emitInfo(changed);
|
|
|
|
next();
|
|
};
|
|
|
|
return reload;
|
|
}
|
|
|
|
return emitBrowserReload();
|
|
|
|
};
|
|
};
|