UNPKG

sicksync

Version:

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

176 lines (128 loc) 5.51 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.start = start; exports.once = once; var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _os = require('os'); var _os2 = _interopRequireDefault(_os); var _untildify = require('untildify'); var _untildify2 = _interopRequireDefault(_untildify); var _parseGitignore = require('parse-gitignore'); var _parseGitignore2 = _interopRequireDefault(_parseGitignore); var _fsHelper = require('./fs-helper'); var _wsClient = require('./ws-client'); var _constants = require('../../conf/constants'); var _constants2 = _interopRequireDefault(_constants); var _text = require('../../conf/text'); var _text2 = _interopRequireDefault(_text); var _events = require('../../conf/events'); var _events2 = _interopRequireDefault(_events); var _bigSync = require('../big-sync'); var _util = require('../util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const hostname = _os2.default.hostname(); /** * Client * * Entry point into the client portion of sicksync */ const wsEvents = _events2.default.WS.LOCAL; const fsEvents = _events2.default.FS.LOCAL; function triggerBigSync(project, params, cb) { (0, _bigSync.bigSync)({ project: project.project, excludes: project.excludes, sourceLocation: (0, _util.ensureTrailingSlash)(project.sourceLocation), destinationLocation: (0, _util.ensureTrailingSlash)(project.destinationLocation), hostname: project.hostname, username: project.username }, params, cb); } function start(config, projects) { const foundProjects = (0, _util.getProjectsFromConfig)(config, projects); if (_lodash2.default.isEmpty(foundProjects)) { return logProjectsNotFound(foundProjects); } _lodash2.default.each(foundProjects, project => { startProject(config, project); }); } function startProject(config, projectConf) { const FSHelper = (0, _util.uniqInstance)(_constants2.default.FS_TOKEN, _fsHelper.FSHelper); const WebSocketClient = (0, _util.uniqInstance)(_constants2.default.WS_TOKEN, _wsClient.WSClient); const localLog = (0, _util.generateLog)(projectConf.project, hostname); const remoteLog = (0, _util.generateLog)(projectConf.project, projectConf.hostname); const sourceLocation = (0, _util.ensureTrailingSlash)(projectConf.sourceLocation); const destinationLocation = (0, _util.ensureTrailingSlash)(projectConf.destinationLocation); const secret = (0, _util.getId)(); const fsHelper = new FSHelper({ sourceLocation: sourceLocation, followSymlinks: projectConf.followSymlinks, excludes: _lodash2.default.concat(projectConf.excludes, _lodash2.default.chain(projectConf.excludesFile).map(_untildify2.default).map(_parseGitignore2.default).flatten().value()) }); const wsClient = new WebSocketClient({ username: projectConf.username, hostname: projectConf.hostname, websocketPort: projectConf.websocketPort, secret: secret, prefersEncrypted: projectConf.prefersEncrypted }); // WS events wsClient.on(wsEvents.READY, () => { triggerBigSync(projectConf, { debug: config.debug }, () => { fsHelper.watch(); localLog(_text2.default.SYNC_ON_CONNECT, projectConf.hostname, projectConf.prefersEncrypted ? 'using' : 'not using', 'encryption'); }); }); wsClient.on(wsEvents.RECONNECTING, _lodash2.default.partial(_lodash2.default.ary(localLog, 1), _text2.default.SYNC_ON_RECONNECT)); wsClient.on(wsEvents.DISCONNECTED, () => { localLog(_text2.default.SYNC_ON_DISCONNECT); process.exit(); }); wsClient.on(wsEvents.REMOTE_NOT_FOUND, err => { localLog(_text2.default.SYNC_ON_REMOTE_NOT_FOUND, projectConf.hostname, err); process.exit(); }); wsClient.on(wsEvents.REMOTE_MESSAGE, message => { // Since WS can be shared amongst projects, filter out // any that are not in this project if (_lodash2.default.includes(message, destinationLocation)) { remoteLog(message); } }); // FS events fsHelper.on(fsEvents.CHANGE, fileChange => { fileChange.destinationpath = destinationLocation + fileChange.sourcepath; fileChange.subject = 'file'; localLog('>', fileChange.changeType, fileChange.sourcepath); wsClient.send(fileChange); }); fsHelper.on(fsEvents.LARGE, () => { localLog(_text2.default.SYNC_ON_LARGE_CHANGE); fsHelper.pauseWatch(); triggerBigSync(projectConf, { debug: config.debug }, () => { localLog(_text2.default.SYNC_ON_LARGE_CHANGE_DONE); fsHelper.watch(); }); }); } function once(config, projects, opts) { const foundProjects = (0, _util.getProjectsFromConfig)(config, projects); if (_lodash2.default.isEmpty(foundProjects)) { return logProjectsNotFound(foundProjects); } _lodash2.default.each(foundProjects, project => { const localLog = (0, _util.generateLog)(project.project, hostname); localLog(_text2.default.SYNC_ON_ONCE); triggerBigSync(project, { dry: opts.dryRun, debug: config.debug }, _lodash2.default.partial(localLog, _text2.default.SYNC_ON_ONCE_DONE)); }); } function logProjectsNotFound(projects) { const projectsWanted = projects.length ? projects : process.cwd(); console.info(_text2.default.PROJECT_NOT_FOUND, projectsWanted); }