You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.5 KiB
91 lines
2.5 KiB
var utils = require("./utils"); |
|
/** |
|
* Apply the operators that apply to the 'file:changed' event |
|
* @param {Rx.Observable} subject |
|
* @param options |
|
* @return {Rx.Observable<{type: string, files: Array<any>}>} |
|
*/ |
|
function fileChanges(subject, options) { |
|
var operators = [ |
|
{ |
|
option: "reloadThrottle", |
|
fnName: "throttle" |
|
}, |
|
{ |
|
option: "reloadDelay", |
|
fnName: "delay" |
|
} |
|
]; |
|
var scheduler = options.getIn(["debug", "scheduler"]); |
|
/** |
|
* Create a stream buffered/debounced stream of events |
|
*/ |
|
var initial = getAggregatedDebouncedStream(subject, options, scheduler); |
|
return applyOperators(operators, initial, options, scheduler) |
|
.map(function (items) { |
|
var paths = items.map(function (x) { return x.path; }); |
|
if (utils.willCauseReload(paths, options.get("injectFileTypes").toJS())) { |
|
return { |
|
type: "reload", |
|
files: items |
|
}; |
|
} |
|
return { |
|
type: "inject", |
|
files: items |
|
}; |
|
}); |
|
} |
|
module.exports.fileChanges = fileChanges; |
|
/** |
|
* Apply the operators that apply to the 'browser:reload' event |
|
* @param {Rx.Observable} subject |
|
* @param options |
|
* @returns {Rx.Observable} |
|
*/ |
|
function applyReloadOperators(subject, options) { |
|
var operators = [ |
|
{ |
|
option: "reloadDebounce", |
|
fnName: "debounce" |
|
}, |
|
{ |
|
option: "reloadThrottle", |
|
fnName: "throttle" |
|
}, |
|
{ |
|
option: "reloadDelay", |
|
fnName: "delay" |
|
} |
|
]; |
|
return applyOperators(operators, subject, options, options.getIn(["debug", "scheduler"])); |
|
} |
|
module.exports.applyReloadOperators = applyReloadOperators; |
|
/** |
|
* @param items |
|
* @param subject |
|
* @param options |
|
* @param scheduler |
|
*/ |
|
function applyOperators(items, subject, options, scheduler) { |
|
return items.reduce(function (subject, item) { |
|
var value = options.get(item.option); |
|
if (value > 0) { |
|
return subject[item.fnName].call(subject, value, scheduler); |
|
} |
|
return subject; |
|
}, subject); |
|
} |
|
/** |
|
* @param subject |
|
* @param options |
|
* @param scheduler |
|
*/ |
|
function getAggregatedDebouncedStream(subject, options, scheduler) { |
|
return subject |
|
.filter(function (x) { |
|
return options.get("watchEvents").indexOf(x.event) > -1; |
|
}) |
|
.buffer(subject.debounce(options.get("reloadDebounce"), scheduler)); |
|
} |
|
//# sourceMappingURL=file-event-handler.js.map
|