@coorpacademy/squirrel
Version:
Local mirror mecanism for ETCD
52 lines (36 loc) • 1.91 kB
JavaScript
;
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