Skip to content

Commit 6b34bc9

Browse files
WIP
1 parent 1fb82be commit 6b34bc9

File tree

7 files changed

+56
-201
lines changed

7 files changed

+56
-201
lines changed

packages/firestore/exp/src/api/reference.ts

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ import { debugAssert } from '../../../src/util/assert';
3131
import { cast } from '../../../lite/src/api/util';
3232
import { DocumentSnapshot, QuerySnapshot } from './snapshot';
3333
import {
34-
addDocSnapshotListener,
35-
addQuerySnapshotListener,
36-
addSnapshotsInSyncListener,
3734
applyFirestoreDataConverter,
3835
getDocsViaSnapshotListener,
3936
getDocViaSnapshotListener,
@@ -60,6 +57,7 @@ import {
6057
Unsubscribe
6158
} from '../../../src/api/observer';
6259
import { getFirestoreClient } from './components';
60+
import { newQueryForPath } from '../../../src/core/query';
6361

6462
export function getDoc<T>(
6563
reference: firestore.DocumentReference<T>
@@ -369,7 +367,7 @@ export function onSnapshot<T>(
369367
args[currArg + 2] = userObserver.complete?.bind(userObserver);
370368
}
371369

372-
let asyncObserver: Promise<Unsubscribe>;
370+
let asyncUnsubscribe: Promise<Unsubscribe>;
373371

374372
if (ref instanceof DocumentReference) {
375373
const firestore = cast(ref.firestore, Firestore);
@@ -386,12 +384,11 @@ export function onSnapshot<T>(
386384
complete: args[currArg + 2] as CompleteFn
387385
};
388386

389-
asyncObserver = getFirestoreClient(firestore).then(firestoreClient =>
390-
addDocSnapshotListener(
391-
firestoreClient,
392-
ref._key,
393-
internalOptions,
394-
observer
387+
asyncUnsubscribe = getFirestoreClient(firestore).then(firestoreClient =>
388+
firestoreClient.listen(
389+
newQueryForPath(ref._key.path),
390+
observer,
391+
internalOptions
395392
)
396393
);
397394
} else {
@@ -412,21 +409,16 @@ export function onSnapshot<T>(
412409

413410
validateHasExplicitOrderByForLimitToLast(query._query);
414411

415-
asyncObserver = getFirestoreClient(firestore).then(firestoreClient =>
416-
addQuerySnapshotListener(
417-
firestoreClient,
418-
query._query,
419-
internalOptions,
420-
observer
421-
)
412+
asyncUnsubscribe = getFirestoreClient(firestore).then(firestoreClient =>
413+
firestoreClient.listen(query._query, observer, internalOptions)
422414
);
423415
}
424416

425417
// TODO(firestorexp): Add test that verifies that we don't raise a snapshot if
426418
// unsubscribe is called before `asyncObserver` resolves.
427419
return () => {
428420
// eslint-disable-next-line @typescript-eslint/no-floating-promises
429-
asyncObserver.then(unsubscribe => unsubscribe());
421+
asyncUnsubscribe.then(unsubscribe => unsubscribe());
430422
};
431423
}
432424

@@ -458,7 +450,7 @@ export function onSnapshotsInSync(
458450
const asyncObserver = getFirestoreClient(
459451
firestoreImpl
460452
).then(firestoreClient =>
461-
addSnapshotsInSyncListener(firestoreClient, observer)
453+
firestoreClient.addSnapshotsInSyncListener(observer)
462454
);
463455

464456
// TODO(firestorexp): Add test that verifies that we don't raise a snapshot if

packages/firestore/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"description": "The Cloud Firestore component of the Firebase JS SDK.",
88
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
99
"scripts": {
10-
"build": "rollup -c rollup.config.es2017.js && rollup -c rollup.config.es5.js && yarn build:lite && yarn build:exp",
10+
"build": "rollup -c rollup.config.es2017.js && rollup -c rollup.config.es5.js",
1111
"build:scripts": "tsc -moduleResolution node --module commonjs scripts/*.ts && ls scripts/*.js | xargs -I % sh -c 'terser % -o %'",
1212
"build:release": "rollup -c rollup.config.es2017.js && rollup -c rollup.config.es5.js",
1313
"build:deps": "lerna run --scope @firebase/'{app,firestore}' --include-dependencies build",

packages/firestore/rollup.config.es2017.js

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,6 @@ const browserBuilds = [
8383
},
8484
plugins: browserBuildPlugins,
8585
external: util.resolveBrowserExterns
86-
},
87-
// Memory-only build
88-
{
89-
input: 'index.memory.ts',
90-
output: {
91-
file: path.resolve('./memory', memoryPkg.esm2017),
92-
format: 'es',
93-
sourcemap: true
94-
},
95-
plugins: browserBuildPlugins,
96-
external: util.resolveBrowserExterns
9786
}
9887
];
9988

@@ -158,20 +147,7 @@ const nodeBuilds = [
158147
output: [{ file: pkg['main-esm2017'], format: 'es', sourcemap: true }],
159148
plugins: nodeBuildPlugins,
160149
external: util.resolveNodeExterns
161-
},
162-
// Memory-only build
163-
{
164-
input: 'index.node.memory.ts',
165-
output: [
166-
{
167-
file: path.resolve('./memory', memoryPkg['main-esm2017']),
168-
format: 'es',
169-
sourcemap: true
170-
}
171-
],
172-
plugins: nodeBuildPlugins,
173-
external: util.resolveNodeExterns
174150
}
175151
];
176152

177-
export default [...browserBuilds, ...reactNativeBuilds, ...nodeBuilds];
153+
export default [...browserBuilds, ...nodeBuilds];

packages/firestore/rollup.config.es5.js

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -68,31 +68,11 @@ const browserBuilds = [
6868
plugins: browserPlugins,
6969
external: util.resolveBrowserExterns
7070
},
71-
{
72-
input: path.resolve('./memory', memoryPkg.esm2017),
73-
output: {
74-
file: path.resolve('./memory', memoryPkg.module),
75-
format: 'es',
76-
sourcemap: true
77-
},
78-
plugins: browserPlugins,
79-
external: util.resolveBrowserExterns
80-
},
8171
{
8272
input: pkg.esm2017,
8373
output: { file: pkg.browser, format: 'cjs', sourcemap: true },
8474
plugins: browserPlugins,
8575
external: util.resolveBrowserExterns
86-
},
87-
{
88-
input: path.resolve('./memory', memoryPkg.esm2017),
89-
output: {
90-
file: path.resolve('./memory', memoryPkg.browser),
91-
format: 'cjs',
92-
sourcemap: true
93-
},
94-
plugins: browserPlugins,
95-
external: util.resolveBrowserExterns
9676
}
9777
];
9878

@@ -102,18 +82,6 @@ const nodeBuilds = [
10282
output: [{ file: pkg.main, format: 'cjs', sourcemap: true }],
10383
plugins: nodePlugins,
10484
external: util.resolveNodeExterns
105-
},
106-
{
107-
input: path.resolve('./memory', memoryPkg['main-esm2017']),
108-
output: [
109-
{
110-
file: path.resolve('./memory', memoryPkg.main),
111-
format: 'cjs',
112-
sourcemap: true
113-
}
114-
],
115-
plugins: nodePlugins,
116-
external: util.resolveNodeExterns
11785
}
11886
];
11987

packages/firestore/src/api/database.ts

Lines changed: 14 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -691,22 +691,7 @@ export function addSnapshotsInSyncListener(
691691
firestoreClient: FirestoreClient,
692692
observer: PartialObserver<void>
693693
): Unsubscribe {
694-
const errHandler = (err: Error): void => {
695-
throw fail('Uncaught Error in onSnapshotsInSync');
696-
};
697-
const asyncObserver = new AsyncObserver<void>({
698-
next: () => {
699-
if (observer.next) {
700-
observer.next();
701-
}
702-
},
703-
error: errHandler
704-
});
705-
firestoreClient.addSnapshotsInSyncListener(asyncObserver);
706-
return () => {
707-
asyncObserver.mute();
708-
firestoreClient.removeSnapshotsInSyncListener(asyncObserver);
709-
};
694+
return firestoreClient.addSnapshotsInSyncListener(observer);
710695
}
711696

712697
/**
@@ -1319,31 +1304,7 @@ export function addDocSnapshotListener(
13191304
options: ListenOptions,
13201305
observer: PartialObserver<ViewSnapshot>
13211306
): Unsubscribe {
1322-
let errHandler = (err: Error): void => {
1323-
console.error('Uncaught Error in onSnapshot:', err);
1324-
};
1325-
if (observer.error) {
1326-
errHandler = observer.error.bind(observer);
1327-
}
1328-
1329-
const asyncObserver = new AsyncObserver<ViewSnapshot>({
1330-
next: snapshot => {
1331-
if (observer.next) {
1332-
observer.next(snapshot);
1333-
}
1334-
},
1335-
error: errHandler
1336-
});
1337-
const internalListener = firestoreClient.listen(
1338-
newQueryForPath(key.path),
1339-
asyncObserver,
1340-
options
1341-
);
1342-
1343-
return () => {
1344-
asyncObserver.mute();
1345-
firestoreClient.unlisten(internalListener);
1346-
};
1307+
return firestoreClient.listen(newQueryForPath(key.path), observer, options);
13471308
}
13481309

13491310
/**
@@ -1356,13 +1317,8 @@ export function getDocViaSnapshotListener(
13561317
options?: firestore.GetOptions
13571318
): Promise<ViewSnapshot> {
13581319
const result = new Deferred<ViewSnapshot>();
1359-
const unlisten = addDocSnapshotListener(
1360-
firestoreClient,
1361-
key,
1362-
{
1363-
includeMetadataChanges: true,
1364-
waitForSyncWhenOnline: true
1365-
},
1320+
const unlisten = firestoreClient.listen(
1321+
newQueryForPath(key.path),
13661322
{
13671323
next: (snap: ViewSnapshot) => {
13681324
// Remove query first before passing event to user to avoid
@@ -1404,6 +1360,10 @@ export function getDocViaSnapshotListener(
14041360
}
14051361
},
14061362
error: e => result.reject(e)
1363+
},
1364+
{
1365+
includeMetadataChanges: true,
1366+
waitForSyncWhenOnline: true
14071367
}
14081368
);
14091369
return result.promise;
@@ -2220,12 +2180,7 @@ export class Query<T = firestore.DocumentData> implements firestore.Query<T> {
22202180

22212181
validateHasExplicitOrderByForLimitToLast(this._query);
22222182
const firestoreClient = this.firestore.ensureClientConfigured();
2223-
return addQuerySnapshotListener(
2224-
firestoreClient,
2225-
this._query,
2226-
options,
2227-
observer
2228-
);
2183+
return firestoreClient.listen(this._query, observer, options);
22292184
}
22302185

22312186
get(options?: firestore.GetOptions): Promise<firestore.QuerySnapshot<T>> {
@@ -2254,13 +2209,8 @@ export function getDocsViaSnapshotListener(
22542209
options?: firestore.GetOptions
22552210
): Promise<ViewSnapshot> {
22562211
const result = new Deferred<ViewSnapshot>();
2257-
const unlisten = addQuerySnapshotListener(
2258-
firestore,
2212+
const unlisten = firestore.listen(
22592213
query,
2260-
{
2261-
includeMetadataChanges: true,
2262-
waitForSyncWhenOnline: true
2263-
},
22642214
{
22652215
next: snapshot => {
22662216
// Remove query first before passing event to user to avoid
@@ -2282,40 +2232,15 @@ export function getDocsViaSnapshotListener(
22822232
}
22832233
},
22842234
error: e => result.reject(e)
2235+
},
2236+
{
2237+
includeMetadataChanges: true,
2238+
waitForSyncWhenOnline: true
22852239
}
22862240
);
22872241
return result.promise;
22882242
}
22892243

2290-
/** Registers an internal snapshot listener for `query`. */
2291-
export function addQuerySnapshotListener(
2292-
firestore: FirestoreClient,
2293-
query: InternalQuery,
2294-
options: ListenOptions,
2295-
observer: PartialObserver<ViewSnapshot>
2296-
): Unsubscribe {
2297-
let errHandler = (err: Error): void => {
2298-
console.error('Uncaught Error in onSnapshot:', err);
2299-
};
2300-
if (observer.error) {
2301-
errHandler = observer.error.bind(observer);
2302-
}
2303-
const asyncObserver = new AsyncObserver<ViewSnapshot>({
2304-
next: (result: ViewSnapshot): void => {
2305-
if (observer.next) {
2306-
observer.next(result);
2307-
}
2308-
},
2309-
error: errHandler
2310-
});
2311-
2312-
const internalListener = firestore.listen(query, asyncObserver, options);
2313-
return (): void => {
2314-
asyncObserver.mute();
2315-
firestore.unlisten(internalListener);
2316-
};
2317-
}
2318-
23192244
export class QuerySnapshot<T = firestore.DocumentData>
23202245
implements firestore.QuerySnapshot<T> {
23212246
private _cachedChanges: Array<firestore.DocumentChange<T>> | null = null;

0 commit comments

Comments
 (0)