UNPKG

@graffy/client

Version:

Graffy client library for the browser.

98 lines (84 loc) 2.84 kB
"use strict"; 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;