From d156f080af9fefce82252c0920f7acab15aa4315 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Tue, 14 May 2013 20:13:55 -0700 Subject: [PATCH] Stop livedata from depending on routepolicy. That brought in all of webapp, which only works on "type: traditional" targets, not server-only. (We really should split the Node DDP Client code from the Node DDP Server code instead.) (Maybe routepolicy should just be part of webapp, or webapp should depend on routepolicy? It's awkward to need to list it separately in various places...) --- packages/livedata/package.js | 12 +++++------- packages/livedata/stream_server.js | 13 +++++++++---- tools/packages.js | 4 ++-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/packages/livedata/package.js b/packages/livedata/package.js index 6ae652d2bb..bf0ee19af3 100644 --- a/packages/livedata/package.js +++ b/packages/livedata/package.js @@ -10,22 +10,20 @@ Package.on_use(function (api) { api.use(['check', 'random', 'ejson', 'json', 'underscore', 'deps', 'logging'], ['client', 'server']); - // XXX we do NOT require webapp here, because it's OK to use this package on a - // server architecture without making a server (in order to do - // server-to-server DDP as a client). So if you want to provide a DDP server, - // you need to use webapp before you use livedata. + // XXX we do NOT require webapp or routepolicy here, because it's OK to use + // this package on a server architecture without making a server (in order to + // do server-to-server DDP as a client). So if you want to provide a DDP + // server, you need to use webapp before you use livedata. // Transport api.use('reload', 'client'); - api.use('routepolicy', 'server'); api.add_files(['sockjs-0.3.4.js', 'stream_client_sockjs.js'], 'client'); api.add_files('stream_client_nodejs.js', 'server'); api.add_files('stream_client_common.js', ['client', 'server']); api.add_files('stream_server.js', 'server'); - // livedata_connection.js uses a Minimongo collection internally to - // manage the current set of subscriptions. + // we depend on LocalCollection._diffObjects and ._applyChanges. api.use('minimongo', ['client', 'server']); api.add_files('writefence.js', 'server'); diff --git a/packages/livedata/stream_server.js b/packages/livedata/stream_server.js index e3125198c4..24a1ff8f8e 100644 --- a/packages/livedata/stream_server.js +++ b/packages/livedata/stream_server.js @@ -1,5 +1,3 @@ -Meteor._routePolicy.declare('/sockjs/', 'network'); - // unique id for this instantiation of the server. If this changes // between client reconnects, the client will reload. You can set the // environment variable "SERVER_ID" to control this. For example, if @@ -14,10 +12,16 @@ Meteor._DdpStreamServer = function () { self.registration_callbacks = []; self.open_sockets = []; + self.prefix = '/sockjs'; + // We don't depend directly on routepolicy because we don't want to pull in + // webapp stuff if we're just doing server-to-server DDP as a client. + if (Meteor._routePolicy) + Meteor._routePolicy.declare(self.prefix + '/', 'network'); + // set up sockjs var sockjs = Npm.require('sockjs'); self.server = sockjs.createServer({ - prefix: '/sockjs', log: function(){}, + prefix: self.prefix, log: function(){}, // this is the default, but we code it explicitly because we depend // on it in stream_client:HEARTBEAT_TIMEOUT heartbeat_delay: 25000, @@ -77,6 +81,7 @@ _.extend(Meteor._DdpStreamServer.prototype, { // Redirect /websocket to /sockjs/websocket in order to not expose // sockjs to clients that want to use raw websockets _redirectWebsocketEndpoint: function() { + var self = this; // Unfortunately we can't use a connect middleware here since // sockjs installs itself prior to all existing listeners // (meaning prior to any connect middlewares) so we need to take @@ -95,7 +100,7 @@ _.extend(Meteor._DdpStreamServer.prototype, { if (request.url === '/websocket' || request.url === '/websocket/') - request.url = '/sockjs/websocket'; + request.url = self.prefix + '/websocket'; _.each(oldAppListeners, function(oldListener) { oldListener.apply(app, args); diff --git a/tools/packages.js b/tools/packages.js index b37e0b2617..2e28248073 100644 --- a/tools/packages.js +++ b/tools/packages.js @@ -1479,8 +1479,8 @@ _.extend(Package.prototype, { var names = _.union( // standard client packages for the classic meteor stack. // XXX remove and make everyone explicitly declare all dependencies - ['meteor', 'webapp', 'deps', 'session', 'livedata', 'mongo-livedata', - 'spark', 'templating', 'startup', 'past', 'check'], + ['meteor', 'webapp', 'routepolicy', 'deps', 'session', 'livedata', + 'mongo-livedata', 'spark', 'templating', 'startup', 'past', 'check'], project.get_packages(appDir)); var arch = sliceName === "server" ? "native" : "browser";