Skip to content

Commit e6202d7

Browse files
author
Martin Pfannemüller
committed
Revert "feat: Add support for custom EventEmitter (parse-community#1999)"
This reverts commit ca568a6. # Conflicts: # src/Parse.ts
1 parent b3cd1a0 commit e6202d7

10 files changed

+76
-137
lines changed

integration/test/ParseLocalDatastoreTest.js

Lines changed: 27 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,36 @@
11
'use strict';
22

33
const assert = require('assert');
4+
const Parse = require('../../node');
45

56
global.localStorage = require('./mockLocalStorage');
6-
global.WebSocket = require('ws');
77
const mockRNStorage = require('./mockRNStorage');
8-
const serverURL = 'http://localhost:1337/parse';
8+
const LocalDatastoreUtils = require('../../lib/node/LocalDatastoreUtils');
99

10-
function runTest(controller) {
11-
const Parse = require(`../../${controller.name}`);
12-
const LocalDatastoreUtils = require('../../lib/node/LocalDatastoreUtils');
13-
14-
const { DEFAULT_PIN, PIN_PREFIX, isLocalDatastoreKey } = LocalDatastoreUtils;
15-
16-
const Item = Parse.Object.extend('Item');
17-
const TestObject = Parse.Object.extend('TestObject');
10+
const { DEFAULT_PIN, PIN_PREFIX, isLocalDatastoreKey } = LocalDatastoreUtils;
1811

19-
function LDS_KEY(object) {
20-
return Parse.LocalDatastore.getKeyForObject(object);
21-
}
22-
function LDS_FULL_JSON(object) {
23-
const json = object._toFullJSON();
24-
if (object._localId) {
25-
json._localId = object._localId;
26-
}
27-
return json;
12+
function LDS_KEY(object) {
13+
return Parse.LocalDatastore.getKeyForObject(object);
14+
}
15+
function LDS_FULL_JSON(object) {
16+
const json = object._toFullJSON();
17+
if (object._localId) {
18+
json._localId = object._localId;
2819
}
29-
20+
return json;
21+
}
22+
function runTest(controller) {
3023
describe(`Parse Object Pinning (${controller.name})`, () => {
3124
beforeEach(async () => {
3225
const StorageController = require(controller.file);
3326
Parse.CoreManager.setAsyncStorage(mockRNStorage);
3427
Parse.CoreManager.setLocalDatastoreController(StorageController);
35-
Parse.CoreManager.setEventEmitter(require('events').EventEmitter);
36-
Parse.User.enableUnsafeCurrentUser();
37-
await Parse.LocalDatastore._clear();
38-
Parse.initialize('integration');
39-
Parse.CoreManager.set('SERVER_URL', serverURL);
40-
Parse.CoreManager.set('MASTER_KEY', 'notsosecret');
41-
const RESTController = Parse.CoreManager.getRESTController();
42-
RESTController._setXHR(require('xmlhttprequest').XMLHttpRequest);
4328
Parse.enableLocalDatastore();
29+
await Parse.LocalDatastore._clear();
4430
});
45-
4631
function getStorageCount(storage) {
4732
return Object.keys(storage).reduce((acc, key) => acc + (isLocalDatastoreKey(key) ? 1 : 0), 1);
4833
}
49-
5034
it(`${controller.name} can clear localDatastore`, async () => {
5135
const obj1 = new TestObject();
5236
const obj2 = new TestObject();
@@ -1076,15 +1060,8 @@ function runTest(controller) {
10761060
const StorageController = require(controller.file);
10771061
Parse.CoreManager.setAsyncStorage(mockRNStorage);
10781062
Parse.CoreManager.setLocalDatastoreController(StorageController);
1079-
Parse.CoreManager.setEventEmitter(require('events').EventEmitter);
1080-
Parse.LocalDatastore._clear();
1081-
Parse.User.enableUnsafeCurrentUser();
1082-
Parse.initialize('integration');
1083-
Parse.CoreManager.set('SERVER_URL', serverURL);
1084-
Parse.CoreManager.set('MASTER_KEY', 'notsosecret');
1085-
const RESTController = Parse.CoreManager.getRESTController();
1086-
RESTController._setXHR(require('xmlhttprequest').XMLHttpRequest);
10871063
Parse.enableLocalDatastore();
1064+
Parse.LocalDatastore._clear();
10881065

10891066
const numbers = [];
10901067
for (let i = 0; i < 10; i++) {
@@ -2972,10 +2949,20 @@ function runTest(controller) {
29722949
}
29732950

29742951
describe('Parse LocalDatastore', () => {
2952+
beforeEach(() => {
2953+
Parse.CoreManager.getInstallationController()._setInstallationIdCache('1234');
2954+
Parse.enableLocalDatastore();
2955+
Parse.User.enableUnsafeCurrentUser();
2956+
});
2957+
29752958
const controllers = [
2976-
{ name: 'node', file: '../../lib/node/LocalDatastoreController' },
2977-
{ name: 'react-native', file: '../../lib/react-native/LocalDatastoreController.react-native' },
2959+
{ name: 'Default', file: '../../lib/node/LocalDatastoreController' },
2960+
{
2961+
name: 'React-Native',
2962+
file: '../../lib/node/LocalDatastoreController.react-native',
2963+
},
29782964
];
2965+
29792966
for (let i = 0; i < controllers.length; i += 1) {
29802967
const controller = controllers[i];
29812968
runTest(controller);

src/CoreManager.js

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -217,13 +217,6 @@ const CoreManager = {
217217
config[key] = value;
218218
},
219219

220-
setIfNeeded: function (key: string, value: any): any {
221-
if (!config.hasOwnProperty(key)) {
222-
config[key] = value;
223-
}
224-
return config[key];
225-
},
226-
227220
/* Specialized Controller Setters/Getters */
228221

229222
setAnalyticsController(controller: AnalyticsController) {
@@ -262,14 +255,6 @@ const CoreManager = {
262255
return config['CryptoController'];
263256
},
264257

265-
setEventEmitter(eventEmitter: any) {
266-
config['EventEmitter'] = eventEmitter;
267-
},
268-
269-
getEventEmitter(): any {
270-
return config['EventEmitter'];
271-
},
272-
273258
setFileController(controller: FileController) {
274259
requireMethods('FileController', ['saveFile', 'saveBase64'], controller);
275260
config['FileController'] = controller;
@@ -288,14 +273,6 @@ const CoreManager = {
288273
return config['InstallationController'];
289274
},
290275

291-
setLiveQuery(liveQuery: any) {
292-
config['LiveQuery'] = liveQuery;
293-
},
294-
295-
getLiveQuery(): any {
296-
return config['LiveQuery'];
297-
},
298-
299276
setObjectController(controller: ObjectController) {
300277
requireMethods('ObjectController', ['save', 'fetch', 'destroy'], controller);
301278
config['ObjectController'] = controller;

src/EventEmitter.js

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,13 @@
22
* This is a simple wrapper to unify EventEmitter implementations across platforms.
33
*/
44

5-
let EventEmitter;
6-
7-
try {
8-
if (process.env.PARSE_BUILD === 'react-native') {
9-
EventEmitter = require('react-native/Libraries/vendor/emitter/EventEmitter');
10-
if (EventEmitter.default) {
11-
EventEmitter = EventEmitter.default;
12-
}
13-
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
14-
} else {
15-
EventEmitter = require('events').EventEmitter;
5+
if (process.env.PARSE_BUILD === 'react-native') {
6+
let EventEmitter = require('react-native/Libraries/vendor/emitter/EventEmitter');
7+
if (EventEmitter.default) {
8+
EventEmitter = EventEmitter.default;
169
}
17-
} catch (_) {
18-
// EventEmitter unavailable
10+
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
11+
module.exports = EventEmitter;
12+
} else {
13+
module.exports = require('events').EventEmitter;
1914
}
20-
module.exports = EventEmitter;

src/LiveQueryClient.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* global WebSocket */
22

33
import CoreManager from './CoreManager';
4+
import EventEmitter from './EventEmitter';
45
import ParseObject from './ParseObject';
56
import LiveQuerySubscription from './LiveQuerySubscription';
67
import { resolvingPromise } from './promiseUtils';
@@ -62,6 +63,7 @@ const generateInterval = k => {
6263

6364
/**
6465
* Creates a new LiveQueryClient.
66+
* Extends events.EventEmitter
6567
* <a href="https://nodejs.org/api/events.html#events_class_eventemitter">cloud functions</a>.
6668
*
6769
* A wrapper of a standard WebSocket client. We add several useful methods to
@@ -103,7 +105,7 @@ const generateInterval = k => {
103105
*
104106
* @alias Parse.LiveQueryClient
105107
*/
106-
class LiveQueryClient {
108+
class LiveQueryClient extends EventEmitter {
107109
attempts: number;
108110
id: number;
109111
requestId: number;
@@ -136,6 +138,8 @@ class LiveQueryClient {
136138
sessionToken,
137139
installationId,
138140
}) {
141+
super();
142+
139143
if (!serverURL || serverURL.indexOf('ws') !== 0) {
140144
throw new Error(
141145
'You need to set a proper Parse LiveQuery server url before using LiveQueryClient'
@@ -156,11 +160,7 @@ class LiveQueryClient {
156160
this.connectPromise = resolvingPromise();
157161
this.subscriptions = new Map();
158162
this.state = CLIENT_STATE.INITIALIZED;
159-
const EventEmitter = CoreManager.getEventEmitter();
160-
this.emitter = new EventEmitter();
161163

162-
this.on = this.emitter.on;
163-
this.emit = this.emitter.emit;
164164
// adding listener so process does not crash
165165
// best practice is for developer to register their own listener
166166
this.on('error', () => {});

src/LiveQuerySubscription.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
import EventEmitter from './EventEmitter';
12
import CoreManager from './CoreManager';
23
import { resolvingPromise } from './promiseUtils';
34

45
/**
56
* Creates a new LiveQuery Subscription.
7+
* Extends events.EventEmitter
68
* <a href="https://nodejs.org/api/events.html#events_class_eventemitter">cloud functions</a>.
79
*
810
* <p>Response Object - Contains data from the client that made the request
@@ -82,25 +84,24 @@ import { resolvingPromise } from './promiseUtils';
8284
* subscription.on('close', () => {
8385
*
8486
* });</pre></p>
87+
*
88+
* @alias Parse.LiveQuerySubscription
8589
*/
86-
class Subscription {
90+
class Subscription extends EventEmitter {
8791
/*
8892
* @param {string} id - subscription id
8993
* @param {string} query - query to subscribe to
9094
* @param {string} sessionToken - optional session token
9195
*/
9296
constructor(id, query, sessionToken) {
97+
super();
9398
this.id = id;
9499
this.query = query;
95100
this.sessionToken = sessionToken;
96101
this.subscribePromise = resolvingPromise();
97102
this.unsubscribePromise = resolvingPromise();
98103
this.subscribed = false;
99-
const EventEmitter = CoreManager.getEventEmitter();
100-
this.emitter = new EventEmitter();
101104

102-
this.on = this.emitter.on;
103-
this.emit = this.emitter.emit;
104105
// adding listener so process does not crash
105106
// best practice is for developer to register their own listener
106107
this.on('error', () => {});

src/Parse.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import AnonymousUtils from './AnonymousUtils'
1212
import * as Cloud from './Cloud';
1313
import CLP from './ParseCLP';
1414
import CoreManager from './CoreManager';
15-
import EventEmitter from './EventEmitter';
1615
import Config from './ParseConfig'
1716
import ParseError from './ParseError'
1817
import FacebookUtils from './FacebookUtils'
@@ -78,7 +77,7 @@ interface ParseType {
7877
Session: typeof Session,
7978
Storage: typeof Storage,
8079
User: typeof User,
81-
LiveQuery?: typeof LiveQuery,
80+
LiveQuery: typeof LiveQuery,
8281
LiveQueryClient: typeof LiveQueryClient,
8382

8483
initialize(applicationId: string, javaScriptKey: string): void,
@@ -145,12 +144,13 @@ const Parse: ParseType = {
145144
Session: Session,
146145
Storage: Storage,
147146
User: User,
147+
LiveQuery: LiveQuery,
148148
LiveQueryClient: LiveQueryClient,
149-
LiveQuery: undefined,
150149
IndexedDB: undefined,
151150
Hooks: undefined,
152151
Parse: undefined,
153152

153+
154154
/**
155155
* Call this method first to set up your authentication tokens for Parse.
156156
*
@@ -180,10 +180,6 @@ const Parse: ParseType = {
180180
CoreManager.set('JAVASCRIPT_KEY', javaScriptKey);
181181
CoreManager.set('MASTER_KEY', masterKey);
182182
CoreManager.set('USE_MASTER_KEY', false);
183-
CoreManager.setIfNeeded('EventEmitter', EventEmitter);
184-
185-
Parse.LiveQuery = new LiveQuery();
186-
CoreManager.setIfNeeded('LiveQuery', Parse.LiveQuery);
187183

188184
if (process.env.PARSE_BUILD === 'browser') {
189185
Parse.IndexedDB = CoreManager.setIfNeeded('IndexedDBStorageController', IndexedDBStorageController);
@@ -431,6 +427,7 @@ const Parse: ParseType = {
431427
isEncryptedUserEnabled () {
432428
return this.encryptedUser;
433429
},
430+
434431
};
435432

436433
CoreManager.setCryptoController(CryptoController);

0 commit comments

Comments
 (0)