sicksync
Version:
Don’t accept the available as the preferable. Go extra mile with extra speed.
95 lines (64 loc) • 2.72 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.FSHelper = undefined;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _os = require('os');
var _os2 = _interopRequireDefault(_os);
var _chokidar = require('chokidar');
var _events = require('events');
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _untildify = require('untildify');
var _untildify2 = _interopRequireDefault(_untildify);
var _util = require('../util');
var util = _interopRequireWildcard(_util);
var _constants = require('../../conf/constants');
var _constants2 = _interopRequireDefault(_constants);
var _events2 = require('../../conf/events');
var _events3 = _interopRequireDefault(_events2);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const fsEvents = _events3.default.FS.LOCAL;
class FSHelper extends _events.EventEmitter {
constructor(params) {
super();
this._sourceLocation = (0, _untildify2.default)(params.sourceLocation);
this._excludes = params.excludes || [];
this._followSymLinks = params.followSymlinks || false;
this._baseDir = _path2.default.parse(this._sourceLocation).base + '/';
this._paused = true;
// Node/watcher only work with full file-paths (no ~'s)
this._watcher = (0, _chokidar.watch)(this._sourceLocation, {
cwd: this._sourceLocation,
ignored: this._excludes,
persistent: true,
followSymlinks: this._followSymlinks,
ignoreInitial: true
}).on('all', util.rebounce(this.onFileChange.bind(this), _lodash2.default.partial(this.emit, fsEvents.LARGE), _constants2.default.NUM_FILES_FOR_RSYNC, _constants2.default.FILE_CHANGE_COOLDOWN_MS));
}
onFileChange(evt, sourcepath) {
if (_os2.default.platform() === 'win32') {
sourcepath = sourcepath.replace(/\\/g, '/');
}
let fileContents = null;
if (this._paused || util.isExcluded(sourcepath, this._excludes)) return;
if (evt === 'add' || evt === 'change') fileContents = _fs2.default.readFileSync(sourcepath).toString();
this.emit(fsEvents.CHANGE, {
sourcepath: sourcepath,
changeType: evt,
contents: fileContents
});
}
pauseWatch() {
this._paused = true;
}
watch() {
this._paused = false;
}
}
exports.FSHelper = FSHelper;
;