Skip to content

Commit 36d1deb

Browse files
committed
Merge branch 'master' into peterjs.liveQueryAsync
2 parents acf6d18 + 617be9f commit 36d1deb

File tree

11 files changed

+98
-14
lines changed

11 files changed

+98
-14
lines changed

gulpfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ gulp.task('compile', function() {
5757

5858
gulp.task('browserify', function() {
5959
var stream = browserify({
60-
builtins: { _process: true },
60+
builtins: ['_process', 'events'],
6161
entries: 'lib/browser/Parse.js',
6262
standalone: 'Parse'
6363
})

integration/test/ParseUserTest.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,24 @@ describe('Parse User', () => {
289289
});
290290
});
291291

292+
it('preserves the session token when querying the current user', (done) => {
293+
let user = new Parse.User();
294+
user.set('password', 'asdf');
295+
user.set('email', '[email protected]');
296+
user.set('username', 'zxcv');
297+
user.signUp().then(() => {
298+
assert(user.has('sessionToken'));
299+
let query = new Parse.Query(Parse.User);
300+
return query.get(user.id);
301+
}).then((u) => {
302+
// Old object maintains token
303+
assert(user.has('sessionToken'));
304+
// New object doesn't have token
305+
assert(!u.has('sessionToken'));
306+
done();
307+
});
308+
});
309+
292310
it('does not log in a user when saving', (done) => {
293311
Parse.User.enableUnsafeCurrentUser();
294312
let user = new Parse.User();

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "parse",
3-
"version": "1.8.0",
3+
"version": "1.8.1",
44
"description": "The Parse JavaScript SDK",
55
"homepage": "https://www.parse.com",
66
"keywords": [

src/EventEmitter.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* Copyright (c) 2015-present, Parse, LLC.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
* This is a simple wrapper to unify EventEmitter implementations across platforms.
10+
*/
11+
12+
if (process.env.PARSE_BUILD === 'react-native') {
13+
module.exports = require('EventEmitter');
14+
} else {
15+
module.exports = require('events').EventEmitter;
16+
}

src/LiveQueryClient.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*/
1010

11-
import events from 'events';
11+
import EventEmitter from './EventEmitter';
1212
import ParsePromise from './ParsePromise';
1313
import ParseObject from './ParseObject';
1414
import LiveQuerySubscription from './LiveQuerySubscription';
@@ -122,7 +122,7 @@ let generateInterval = (k) => {
122122
*
123123
*
124124
*/
125-
export default class LiveQueryClient extends events.EventEmitter {
125+
export default class LiveQueryClient extends EventEmitter {
126126
attempts: number;
127127
id: number;
128128
requestId: number;
@@ -321,15 +321,13 @@ export default class LiveQueryClient extends events.EventEmitter {
321321
}
322322

323323
_getWebSocketImplementation(): any {
324-
let WebSocketImplementation;
325324
if (process.env.PARSE_BUILD === 'node') {
326-
WebSocketImplementation = require('ws');
325+
return require('ws');
327326
} else if (process.env.PARSE_BUILD === 'browser') {
328-
if (window.WebSocket) {
329-
WebSocketImplementation = WebSocket;
330-
}
327+
return typeof WebSocket === 'function' ? WebSocket : null;
328+
} else if (process.env.PARSE_BUILD === 'react-native') {
329+
return WebSocket;
331330
}
332-
return WebSocketImplementation;
333331
}
334332

335333
// ensure we start with valid state if connect is called again after close

src/LiveQuerySubscription.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*/
1010

11-
import events from 'events';
11+
import EventEmitter from './EventEmitter';
1212
import CoreManager from './CoreManager';
1313

1414
/**
@@ -90,7 +90,7 @@ import CoreManager from './CoreManager';
9090
*
9191
*
9292
*/
93-
export default class Subscription extends events.EventEmitter {
93+
export default class Subscription extends EventEmitter {
9494
constructor(id, query, sessionToken) {
9595
super();
9696
this.id = id;

src/ParseLiveQuery.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import events from 'events';
1+
import EventEmitter from './EventEmitter';
22
import LiveQueryClient from './LiveQueryClient';
33
import CoreManager from './CoreManager';
44
import ParsePromise from './ParsePromise';
@@ -42,7 +42,7 @@ function close() {
4242
* @static
4343
*
4444
*/
45-
let LiveQuery = new events.EventEmitter();
45+
let LiveQuery = new EventEmitter();
4646

4747
/**
4848
* After open is called, the LiveQuery will try to send a connect request

src/ParseObject.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1361,7 +1361,14 @@ export default class ParseObject {
13611361
if (otherAttributes.objectId) {
13621362
o.id = otherAttributes.objectId;
13631363
}
1364+
let preserved = null;
1365+
if (typeof o._preserveFieldsOnFetch === 'function') {
1366+
preserved = o._preserveFieldsOnFetch();
1367+
}
13641368
o._clearServerData();
1369+
if (preserved) {
1370+
o._finishFetch(preserved);
1371+
}
13651372
}
13661373
o._finishFetch(otherAttributes);
13671374
if (json.objectId) {

src/ParseUser.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,16 @@ export default class ParseUser extends ParseObject {
249249
}
250250
}
251251

252+
/**
253+
* Class instance method used to maintain specific keys when a fetch occurs.
254+
* Used to ensure that the session token is not lost.
255+
*/
256+
_preserveFieldsOnFetch(): AttributeMap {
257+
return {
258+
sessionToken: this.get('sessionToken'),
259+
};
260+
}
261+
252262
/**
253263
* Returns true if <code>current</code> would return this user.
254264
* @method isCurrent

src/__tests__/LiveQueryClient-test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ jest.dontMock('../decode');
1515
jest.dontMock('../encode');
1616
jest.dontMock('../equals');
1717
jest.dontMock('../escape');
18+
jest.dontMock('../EventEmitter');
1819
jest.dontMock('../ObjectStateMutations');
1920
jest.dontMock('../parseDate');
2021
jest.dontMock('../ParseError');

0 commit comments

Comments
 (0)