@ionic/app-scripts
Version:
Scripts for Ionic Projects
83 lines (82 loc) • 3.73 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var path_1 = require("path");
var events_1 = require("../util/events");
var logger_1 = require("../logger/logger");
var WatchMemorySystem = (function () {
function WatchMemorySystem(fileCache, srcDir) {
this.fileCache = fileCache;
this.srcDir = srcDir;
this.lastWatchEventTimestamp = Date.now();
}
WatchMemorySystem.prototype.close = function () {
this.isListening = false;
};
WatchMemorySystem.prototype.pause = function () {
this.isListening = false;
};
WatchMemorySystem.prototype.watch = function (filePathsBeingWatched, dirPaths, missing, startTime, options, aggregatedCallback, immediateCallback) {
this.filePathsBeingWatched = filePathsBeingWatched;
this.dirPaths = dirPaths;
this.missing = missing;
this.startTime = startTime;
this.options = options;
this.immediateCallback = immediateCallback;
this.aggregatedCallback = aggregatedCallback;
if (!this.isListening) {
this.startListening();
}
return {
pause: this.pause,
close: this.close
};
};
WatchMemorySystem.prototype.startListening = function () {
var _this = this;
this.isListening = true;
events_1.on(events_1.EventType.WebpackFilesChanged, function () {
_this.changes = new Set();
var filePaths = _this.fileCache.getAll().filter(function (file) { return file.timestamp >= _this.lastWatchEventTimestamp && file.path.startsWith(_this.srcDir) && path_1.extname(file.path) === '.ts'; }).map(function (file) { return file.path; });
logger_1.Logger.debug('filePaths: ', filePaths);
_this.lastWatchEventTimestamp = Date.now();
_this.processChanges(filePaths);
});
};
WatchMemorySystem.prototype.processChanges = function (filePaths) {
this.immediateCallback(filePaths[0], Date.now());
for (var _i = 0, filePaths_1 = filePaths; _i < filePaths_1.length; _i++) {
var path = filePaths_1[_i];
this.changes.add(path);
}
// don't bother waiting around, just call doneAggregating right away.
// keep it as a function in case we need to wait via setTimeout a bit in the future
this.doneAggregating(this.changes);
};
WatchMemorySystem.prototype.doneAggregating = function (changes) {
var _this = this;
this.isAggregating = false;
// process the changes
var filePaths = Array.from(changes);
var files = filePaths.filter(function (filePath) { return _this.filePathsBeingWatched.indexOf(filePath) >= 0; }).sort();
var dirs = filePaths.filter(function (filePath) { return _this.dirPaths.indexOf(filePath) >= 0; }).sort();
var missing = filePaths.filter(function (filePath) { return _this.missing.indexOf(filePath) >= 0; }).sort();
var times = this.getTimes(this.filePathsBeingWatched, this.startTime, this.fileCache);
this.aggregatedCallback(null, files, dirs, missing, times, times);
};
WatchMemorySystem.prototype.getTimes = function (allFiles, startTime, fileCache) {
var times = {};
for (var _i = 0, allFiles_1 = allFiles; _i < allFiles_1.length; _i++) {
var filePath = allFiles_1[_i];
var file = fileCache.get(filePath);
if (file) {
times[filePath] = file.timestamp;
}
else {
times[filePath] = startTime;
}
}
return times;
};
return WatchMemorySystem;
}());
exports.WatchMemorySystem = WatchMemorySystem;