diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/README.md b/README.md index dd87ee1..b23441f 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ ddpclient.call("login", [ ```js var DDPClient = require("ddp-client"); +// or "ddp-client/promise" for promisified versions of all async functions var ddpclient = new DDPClient({ // All properties optional, defaults shown diff --git a/index.js b/index.js index c2dfa9f..3d60b44 100644 --- a/index.js +++ b/index.js @@ -53,7 +53,6 @@ class DDPClient extends EventEmitter{ self._callbacks = {}; self._updatedCallbacks = {}; self._pendingMethods = {}; - self._observers = {}; } _prepareHandlers() { @@ -174,6 +173,7 @@ class DDPClient extends EventEmitter{ var item = { "_id": id }; + if (data.fields) { _.each(data.fields, function(value, key) { item[key] = value; @@ -190,7 +190,6 @@ class DDPClient extends EventEmitter{ // remove document from collection } else if (data.msg === "removed") { if (self.maintainCollections && data.collection) { - var name = data.collection, id = data.id; self.collections[name].remove({"_id": id}); } @@ -198,7 +197,6 @@ class DDPClient extends EventEmitter{ } else if (data.msg === "changed") { if (self.maintainCollections && data.collection) { var name = data.collection, id = data.id; - var item = { "_id": id }; @@ -206,7 +204,7 @@ class DDPClient extends EventEmitter{ if (data.fields) { _.each(data.fields, function(value, key) { item[key] = value; - }) + }); } self.collections[name].upsert(item); @@ -230,29 +228,11 @@ class DDPClient extends EventEmitter{ } } - _getNextId() { var self = this; return (self._nextId += 1).toString(); } - - _addObserver(observer) { - var self = this; - if (! self._observers[observer.name]) { - self._observers[observer.name] = {}; - } - self._observers[observer.name][observer._id] = observer; - } - - - _removeObserver(observer) { - var self = this; - if (! self._observers[observer.name]) { return; } - - delete self._observers[observer.name][observer._id]; - } - ////////////////////////////////////////////////////////////////////////// // USER functions -- use these to control the client @@ -285,7 +265,6 @@ class DDPClient extends EventEmitter{ var url = self._buildWsUrl(); self._makeWebSocketConnection(url); - } _endPendingMethodCalls() { @@ -334,7 +313,6 @@ class DDPClient extends EventEmitter{ self.removeAllListeners("failed"); } - // call a method on the server, // // callback = function(err, result) @@ -368,7 +346,6 @@ class DDPClient extends EventEmitter{ }); } - callWithRandomSeed(name, params, randomSeed, callback, updatedCallback) { var self = this; var id = self._getNextId(); @@ -416,39 +393,6 @@ class DDPClient extends EventEmitter{ id : id }); } - - /** - * Adds an observer to a collection and returns the observer. - * Observation can be stopped by calling the stop() method on the observer. - * Functions for added, updated and removed can be added to the observer - * afterward. - */ - observe(name, added, updated, removed) { - var self = this; - var observer = {}; - var id = self._getNextId(); - - // name, _id are immutable - Object.defineProperty(observer, "name", { - get: function() { return name; }, - enumerable: true - }); - - Object.defineProperty(observer, "_id", { get: function() { return id; }}); - - observer.added = added || function(){}; - observer.updated = updated || function(){}; - observer.removed = removed || function(){}; - - observer.stop = function() { - self._removeObserver(observer); - }; - - self._addObserver(observer); - - return observer; - } - } module.exports = DDPClient; diff --git a/package.json b/package.json index 58da7d8..dcf3f7c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ddp-client", - "version": "0.1.2", + "version": "0.1.3", "description": "DDP Client for browsers and native JS runtimes (no dependencies on document or 3rd party WebSocket libraries)", "main": "index.js", "keywords": [ diff --git a/promise.js b/promise.js new file mode 100644 index 0000000..e2a09bc --- /dev/null +++ b/promise.js @@ -0,0 +1,73 @@ +"use strict"; + +let DDPClient = require('./index.js'); + +class DDP extends DDPClient { + constructor(opts) { + super(opts); + } + + connect() { + return new Promise((resolve, reject) => { + super.connect((err, wasReconnect) => { + if (err) { + console.log('DDP connection error!'); + return reject(err); + } + + if (wasReconnect) { + console.log('Reestablishment of a connection.'); + } + + console.log('connected to Meteor server'); + resolve(this._isReconnecting); + }); + }); + } + + call(name, params) { + return new Promise((resolve, reject) => { + super.call(name, params, (err, res) => { + if (err) { + reject(err); + } else { + resolve(res); + } + }, () => { + // callback which fires when server has finished + }); + }); + } + + callWithRandomSeed(name, params, randomSeed) { + return new Promise((resolve, reject) => { + super.callWithRandomSeed(name, params, randomSeed, (err, res) => { + if (err) { r + reject(err); + } else { + resolve(res); + } + }, () => { + // callback which fires when server has finished + }); + }); + } + + subscribe(...args) { + return super.subscribe(...args); + } + + unsubscribe(...args) { + return super.unsubscribe(...args); + } + + close() { + return super.close(); + } + + observe(...args) { + return super.observe(...args); + } +} + +module.exports = DDP;