UNPKG

marsdb-sync-client

Version:

Standalone Meteor DDP client based on MarsDB

143 lines (112 loc) 4.67 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports._removeConnection = _removeConnection; exports.getConnection = getConnection; exports.addManager = addManager; exports.call = call; exports.apply = apply; exports.subscribe = subscribe; exports.configure = configure; var _map2 = require('fast.js/map'); var _map3 = _interopRequireDefault(_map2); var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant); var _DDPConnection = require('./DDPConnection'); var _DDPConnection2 = _interopRequireDefault(_DDPConnection); var _SubscriptionManager = require('./SubscriptionManager'); var _SubscriptionManager2 = _interopRequireDefault(_SubscriptionManager); var _MethodCallManager = require('./MethodCallManager'); var _MethodCallManager2 = _interopRequireDefault(_MethodCallManager); var _ErrorManager = require('./ErrorManager'); var _ErrorManager2 = _interopRequireDefault(_ErrorManager); var _CollectionManager = require('./CollectionManager'); var _CursorWithSub = require('./CursorWithSub'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Collection = typeof window !== 'undefined' && window.Mars ? window.Mars.Collection : require('marsdb').Collection; // Internals var _managers = []; var _connection = null; function _removeConnection() { _connection = null; } /** * Returns current DDPConnection object or null * if connection is not configured * @return {DDPConnection} */ function getConnection() { return _connection; } /** * Adds manager for ddp connection, that will be created * when connection will be established. * @param {Class} managerClass */ function addManager(managerClass) { (0, _invariant2.default)(!_connection, 'addManager(...): you can add managers only at first execution cycle'); return _managers.push(managerClass); } /** * Call some remote method * @param {String} methodName * @param {Mixed} ...params * @return {MethodCall} */ function call() { var _connection$methodMan; (0, _invariant2.default)(_connection, 'call(...): connection is not established yet. Please use ' + 'Collection.startup(...) to initialize your app'); return (_connection$methodMan = _connection.methodManager).call.apply(_connection$methodMan, arguments); } /** * Apply some remote method * @param {String} methodName * @param {Array} params * @return {MethodCall} */ function apply() { var _connection$methodMan2; (0, _invariant2.default)(_connection, 'apply(...): connection is not established yet. Please use ' + 'Collection.startup(...) to initialize your app'); return (_connection$methodMan2 = _connection.methodManager).apply.apply(_connection$methodMan2, arguments); } /** * Subscribe by some publisher with arguments * @param {String} pubName * @param {String} ...args * @return {Subscription} */ function subscribe() { var _connection$subManage; (0, _invariant2.default)(_connection, 'subscribe(...): connection is not established yet. Please use ' + 'Collection.startup(...) to initialize your app'); return (_connection$subManage = _connection.subManager).subscribe.apply(_connection$subManage, arguments); } /** * Configure application to use MarsSync client. * Set high-order cursor and delegate in Collection. * Starts up the connection in Collection.startup(...) * @param {String} options.url * @param {Class} options.socket * @return {DDPConnection} */ function configure() { var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; (0, _invariant2.default)(options.socket || typeof WebSocket !== 'undefined', 'configure(...): no socket consturctor provided and not available in global'); (0, _invariant2.default)(!_connection, 'configure(...): connection already configured'); // Initiate DDPConnection options.socket = options.socket || WebSocket; _connection = new _DDPConnection2.default(options); Collection.defaultDelegate((0, _CollectionManager.createCollectionDelegate)(_connection)); Collection.defaultCursor((0, _CursorWithSub.createCursorWithSub)(_connection)); // Create connectionmanagers. // The order is IMPORTANT, firstest managers handle // connection state changes firstly. _connection.customManagers = (0, _map3.default)(_managers, function (x) { return new x(_connection); }); _connection.methodManager = new _MethodCallManager2.default(_connection); _connection.subManager = new _SubscriptionManager2.default(_connection); _connection.errorManager = new _ErrorManager2.default(_connection); _connection.connect(); return _connection; }