UNPKG

@coorpacademy/squirrel

Version:
52 lines (36 loc) 1.91 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _rxjs = require("rxjs"); var _debug = _interopRequireDefault(require("debug")); var _fetch = _interopRequireDefault(require("./fetch")); var _command = require("./command"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const debug = (0, _debug.default)('squirrel:etcd:watch'); const error = debug.extend('error'); const createWatcher$ = client => { return _rxjs.Observable.create(observer => { const watcher$ = client.watch().prefix('').create(); observer.next(watcher$); observer.complete(); return async () => { const watcher = await watcher$; watcher.cancel(); }; }).mergeMap(p => _rxjs.Observable.fromPromise(p)).mergeMap(watcher => { const connected$ = _rxjs.Observable.fromEvent(watcher, 'connected').do(() => debug(`Watcher is reconnected`)); const disconnected$ = _rxjs.Observable.fromEvent(watcher, 'disconnected').do(err => { debug(`Watcher is disconnected`); error(err.message); }).ignoreElements(); const connecting$ = _rxjs.Observable.fromEvent(watcher, 'connecting').do(() => debug(`Watcher is connecting`)).ignoreElements(); const resync$ = _rxjs.Observable.merge(connected$, disconnected$, connecting$).concatMap(() => (0, _fetch.default)(client)); const put$ = _rxjs.Observable.fromEvent(watcher, 'put').do(record => debug(`%o was updated to v%i`, record.key.toString('utf8'), record.mod_revision)); const delete$ = _rxjs.Observable.fromEvent(watcher, 'delete').do(record => debug(`%o was removed`, record.key.toString('utf8'))); const mutation$ = _rxjs.Observable.merge(put$, delete$).map(_command.createWatchCommand); return _rxjs.Observable.merge(resync$, mutation$); }); }; var _default = createWatcher$; exports.default = _default; //# sourceMappingURL=watch.js.map