@graffy/client
Version:
Graffy client library for the browser.
98 lines (84 loc) • 2.84 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
var _stream = require("@graffy/stream");
var _common = require("@graffy/common");
var _Socket = _interopRequireDefault(require("./Socket"));
var _default = function _default(url, _temp) {
var _ref = _temp === void 0 ? {} : _temp,
_ref$getOptions = _ref.getOptions,
getOptions = _ref$getOptions === void 0 ? function () {} : _ref$getOptions,
watch = _ref.watch,
_ref$connInfoPath = _ref.connInfoPath,
connInfoPath = _ref$connInfoPath === void 0 ? '/connection' : _ref$connInfoPath;
return function (store) {
if (!WebSocket) throw Error('client.websocket.unavailable');
connInfoPath = (0, _common.makePath)(connInfoPath);
var socket = new _Socket.default(url, {
onUnhandled: onUnhandled,
onStatusChange: onStatusChange
});
var status = false;
var statusWatcher = (0, _common.makeWatcher)();
function onUnhandled(id) {
socket.stop(id, ['unwatch']);
}
function onStatusChange(newStatus) {
status = newStatus;
statusWatcher.write({
status: status
});
}
function once(op, payload, options) {
return new _promise.default(function (resolve, reject) {
var id = socket.start([op, payload, getOptions(op, options)], function (error, result) {
socket.stop(id);
error ? reject(Error('server.' + error)) : resolve(result);
});
});
}
store.onWrite(connInfoPath, function () {
status = socket.isAlive();
return {
status: status
};
});
store.onRead(connInfoPath, function () {
return {
status: status
};
});
store.onWatch(connInfoPath, function () {
return statusWatcher.watch({
status: status
});
});
store.on('read', function (query, options) {
return once('read', query, options);
});
store.on('write', function (change, options) {
return once('write', change, options);
});
store.on('watch', function (query, options) {
if (watch === 'none') throw Error('client.no_watch');
var op = 'watch';
return (0, _stream.makeStream)(function (push, end) {
var id = socket.start([op, query, getOptions(op, options)], function (error, result) {
if (error) {
socket.stop(id);
end(Error('server.' + error));
return;
}
push(result);
});
return function () {
socket.stop(id, ['unwatch']);
};
});
});
};
};
exports.default = _default;
module.exports = exports.default;