diff --git a/packages/livedata/livedata_common.js b/packages/livedata/livedata_common.js index 7f88ada63d..7064c6272b 100644 --- a/packages/livedata/livedata_common.js +++ b/packages/livedata/livedata_common.js @@ -109,6 +109,11 @@ Meteor._stringifyDDP = function (msg) { Meteor._CurrentInvocation = new Meteor.EnvironmentVariable; +// Note: The DDP server assumes that Meteor.Error EJSON-serializes as an object +// containing 'error' and optionally 'reason' and 'details'. +// The DDP client manually puts these into Meteor.Error objects. (We don't use +// EJSON.addType here because the type is determined by location in the +// protocol, not text on the wire.) Meteor.Error = function (error, reason, details) { var self = this; diff --git a/packages/livedata/livedata_connection.js b/packages/livedata/livedata_connection.js index f2b01f7a7f..466427c837 100644 --- a/packages/livedata/livedata_connection.js +++ b/packages/livedata/livedata_connection.js @@ -1191,7 +1191,6 @@ _.extend(Meteor._LivedataConnection.prototype, { currentMethodBlock.splice(i, 1); if (_.has(msg, 'error')) { - // XXX should we hook Meteor.Error in to EJSON? m.receiveResult(new Meteor.Error( msg.error.error, msg.error.reason, msg.error.details)); diff --git a/packages/livedata/livedata_connection_tests.js b/packages/livedata/livedata_connection_tests.js index 3ba2c350ed..f32c724b53 100644 --- a/packages/livedata/livedata_connection_tests.js +++ b/packages/livedata/livedata_connection_tests.js @@ -1418,7 +1418,7 @@ Tinytest.add("livedata stub - subscribe failure", function (test) { // Reject the sub. stream.receive({msg: 'nosub', id: subMessage.id, - error: {error: 404, reason: "Subscription not found"}}); + error: new Meteor.Error(404, "Subscription not found")}); test.isFalse(onReadyFired); test.instanceOf(subError, Meteor.Error); test.equal(subError.error, 404); diff --git a/packages/livedata/livedata_server.js b/packages/livedata/livedata_server.js index a35d386eba..8868908c25 100644 --- a/packages/livedata/livedata_server.js +++ b/packages/livedata/livedata_server.js @@ -569,7 +569,7 @@ _.extend(Meteor._LivedataSession.prototype, { if (!handler) { self.send({ msg: 'result', id: msg.id, - error: {error: 404, reason: "Method not found"}}); + error: new Meteor.Error(404, "Method not found")}); fence.arm(); return; } diff --git a/packages/test-helpers/package.js b/packages/test-helpers/package.js index 663d9d63d9..ff065d5b5d 100644 --- a/packages/test-helpers/package.js +++ b/packages/test-helpers/package.js @@ -6,6 +6,8 @@ Package.describe({ Package.on_use(function (api, where) { where = where || ["client", "server"]; + api.use('ejson'); + // XXX These files have various dependencies on other packages // that aren't specified here. :( // This package should probably get split into several packages, diff --git a/packages/test-helpers/stub_stream.js b/packages/test-helpers/stub_stream.js index 1ca1491302..ff32dbc650 100644 --- a/packages/test-helpers/stub_stream.js +++ b/packages/test-helpers/stub_stream.js @@ -36,7 +36,7 @@ _.extend(Meteor._StubStream.prototype, { var self = this; if (typeof data === 'object') { - data = JSON.stringify(data); + data = EJSON.stringify(data); } _.each(self.callbacks['message'], function (cb) {