UNPKG

sicksync

Version:

Don’t accept the available as the preferable. Go extra mile with extra speed.

95 lines (64 loc) 2.72 kB
'use strict'; 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;