Skip to content

Commit 0dcdd71

Browse files
Fix unit test
2 parents 9559642 + 4aa169b commit 0dcdd71

15 files changed

+200
-230
lines changed

packages/firestore/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
"author": "Firebase <[email protected]> (https://firebase.google.com/)",
99
"scripts": {
1010
"prebuild": "tsc -m es2015 --moduleResolution node scripts/*.ts ",
11+
"prebuild:lite": "yarn prebuild",
12+
"prebuild:exp": "yarn prebuild",
1113
"prebuild:release": "yarn prebuild",
1214
"build": "rollup -c rollup.config.es2017.js && rollup -c rollup.config.es5.js && yarn build:lite && yarn build:exp",
1315
"build:release": "rollup -c rollup.config.es2017.js && rollup -c rollup.config.es5.js",

packages/firestore/rollup.config.es2017.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ import pkg from './package.json';
2929
import memoryPkg from './memory/package.json';
3030

3131
import {
32-
firestoreTransformers,
32+
removeAssertTransformer,
33+
removeAssertAndPrefixInternalTransformer,
3334
manglePrivatePropertiesOptions,
3435
resolveNodeExterns,
3536
resolveBrowserExterns,
@@ -72,7 +73,7 @@ const browserBuildPlugins = [
7273
}
7374
},
7475
clean: true,
75-
transformers: firestoreTransformers
76+
transformers: removeAssertAndPrefixInternalTransformer
7677
}),
7778
json({ preferConst: true }),
7879
terser(manglePrivatePropertiesOptions)
@@ -144,7 +145,8 @@ const nodeBuildPlugins = [
144145
target: 'es2017'
145146
}
146147
},
147-
clean: true
148+
clean: true,
149+
transformers: removeAssertTransformer
148150
}),
149151
json(),
150152
// Needed as we also use the *.proto files

packages/firestore/rollup.config.exp.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@ import path from 'path';
2323
import { terser } from 'rollup-plugin-terser';
2424

2525
import {
26-
firestoreTransformers,
26+
resolveNodeExterns,
2727
generateAliasConfig,
28-
manglePrivatePropertiesOptions,
2928
resolveBrowserExterns,
30-
resolveNodeExterns
29+
removeAssertTransformer,
30+
removeAssertAndPrefixInternalTransformer,
31+
manglePrivatePropertiesOptions
3132
} from './rollup.shared';
3233

3334
import pkg from './exp/package.json';
@@ -40,7 +41,8 @@ const nodePlugins = [
4041
target: 'es5'
4142
}
4243
},
43-
clean: true
44+
clean: true,
45+
transformers: removeAssertTransformer
4446
}),
4547
json({ preferConst: true })
4648
];
@@ -54,7 +56,7 @@ const browserPlugins = [
5456
}
5557
},
5658
clean: true,
57-
transformers: firestoreTransformers
59+
transformers: removeAssertAndPrefixInternalTransformer
5860
}),
5961
json({ preferConst: true }),
6062
terser(manglePrivatePropertiesOptions)

packages/firestore/rollup.config.lite.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ import {
2525
resolveNodeExterns,
2626
generateAliasConfig,
2727
resolveBrowserExterns,
28-
firestoreTransformers,
28+
removeAssertTransformer,
29+
removeAssertAndPrefixInternalTransformer,
2930
manglePrivatePropertiesOptions
3031
} from './rollup.shared';
3132

@@ -40,7 +41,8 @@ const nodePlugins = [
4041
target: 'es5'
4142
}
4243
},
43-
clean: true
44+
clean: true,
45+
transformers: removeAssertTransformer
4446
}),
4547
json({ preferConst: true })
4648
];
@@ -54,7 +56,7 @@ const browserPlugins = [
5456
}
5557
},
5658
clean: true,
57-
transformers: firestoreTransformers
59+
transformers: removeAssertAndPrefixInternalTransformer
5860
}),
5961
json({ preferConst: true }),
6062
terser(manglePrivatePropertiesOptions)

packages/firestore/rollup.shared.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,22 @@ export function resolveNodeExterns(id) {
5959
const externsPaths = externs.map(p => path.resolve(__dirname, '../../', p));
6060
const publicIdentifiers = extractPublicIdentifiers(externsPaths);
6161

62+
/**
63+
* Transformers that remove calls to `debugAssert` and messages for 'fail` and
64+
* `hardAssert`.
65+
*/
66+
export const removeAssertTransformer = [
67+
service => ({
68+
before: [removeAsserts(service.getProgram())],
69+
after: []
70+
})
71+
];
72+
6273
/**
6374
* Transformers that remove calls to `debugAssert`, messages for 'fail` and
6475
* `hardAssert` and appends a __PRIVATE_ prefix to all internal symbols.
6576
*/
66-
export const firestoreTransformers = [
77+
export const removeAssertAndPrefixInternalTransformer = [
6778
service => ({
6879
before: [
6980
removeAsserts(service.getProgram()),

packages/firestore/src/core/component_provider.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@ import {
2323
} from '../local/shared_client_state';
2424
import {
2525
LocalStore,
26-
MultiTabLocalStore,
2726
newLocalStore,
28-
newMultiTabLocalStore
27+
synchronizeLastDocumentChangeReadTime
2928
} from '../local/local_store';
3029
import {
3130
MultiTabSyncEngine,
@@ -133,7 +132,6 @@ export class MemoryComponentProvider implements ComponentProvider {
133132
);
134133
this.remoteStore.syncEngine = this.syncEngine;
135134

136-
await this.localStore.start();
137135
await this.sharedClientState.start();
138136
await this.remoteStore.start();
139137

@@ -298,7 +296,6 @@ export class IndexedDbComponentProvider extends MemoryComponentProvider {
298296
* `synchronizeTabs` will be enabled.
299297
*/
300298
export class MultiTabIndexedDbComponentProvider extends IndexedDbComponentProvider {
301-
localStore!: MultiTabLocalStore;
302299
syncEngine!: MultiTabSyncEngine;
303300

304301
async initialize(cfg: ComponentConfiguration): Promise<void> {
@@ -318,14 +315,12 @@ export class MultiTabIndexedDbComponentProvider extends IndexedDbComponentProvid
318315
}
319316
}
320317
});
321-
}
322318

323-
createLocalStore(cfg: ComponentConfiguration): LocalStore {
324-
return newMultiTabLocalStore(
325-
this.persistence,
326-
new IndexFreeQueryEngine(),
327-
cfg.initialUser
328-
);
319+
// In multi-tab mode, we need to read the last document change marker from
320+
// persistence once during client initialization. The next call to
321+
// `getNewDocumentChanges()` will then only read changes that were persisted
322+
// since client startup.
323+
await synchronizeLastDocumentChangeReadTime(this.localStore);
329324
}
330325

331326
createSyncEngine(cfg: ComponentConfiguration): SyncEngine {

packages/firestore/src/core/firestore_client.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,8 @@ export class FirestoreClient {
202202
enableNetwork(): Promise<void> {
203203
this.verifyNotTerminated();
204204
return this.asyncQueue.enqueue(() => {
205-
return this.syncEngine.enableNetwork();
205+
this.persistence.setNetworkEnabled(true);
206+
return this.remoteStore.enableNetwork();
206207
});
207208
}
208209

@@ -334,7 +335,8 @@ export class FirestoreClient {
334335
disableNetwork(): Promise<void> {
335336
this.verifyNotTerminated();
336337
return this.asyncQueue.enqueue(() => {
337-
return this.syncEngine.disableNetwork();
338+
this.persistence.setNetworkEnabled(false);
339+
return this.remoteStore.disableNetwork();
338340
});
339341
}
340342

packages/firestore/src/core/sync_engine.ts

Lines changed: 12 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@
1717

1818
import { User } from '../auth/user';
1919
import {
20+
getNewDocumentChanges,
21+
getCachedTarget,
2022
ignoreIfPrimaryLeaseLoss,
2123
LocalStore,
22-
MultiTabLocalStore
24+
getCurrentlyActiveClients,
25+
lookupMutationDocuments,
26+
removeCachedMutationBatchMetadata
2327
} from '../local/local_store';
2428
import { LocalViewChanges } from '../local/local_view_changes';
2529
import { ReferenceSet } from '../local/reference_set';
@@ -225,10 +229,6 @@ export interface SyncEngine extends RemoteSyncer {
225229

226230
handleCredentialChange(user: User): Promise<void>;
227231

228-
enableNetwork(): Promise<void>;
229-
230-
disableNetwork(): Promise<void>;
231-
232232
getRemoteKeysForTarget(targetId: TargetId): DocumentKeySet;
233233
}
234234

@@ -940,14 +940,6 @@ class SyncEngineImpl implements SyncEngine {
940940
}
941941
}
942942

943-
enableNetwork(): Promise<void> {
944-
return this.remoteStore.enableNetwork();
945-
}
946-
947-
disableNetwork(): Promise<void> {
948-
return this.remoteStore.disableNetwork();
949-
}
950-
951943
getRemoteKeysForTarget(targetId: TargetId): DocumentKeySet {
952944
const limboResolution = this.activeLimboResolutionsByTarget.get(targetId);
953945
if (limboResolution && limboResolution.receivedDocument) {
@@ -1016,38 +1008,10 @@ class MultiTabSyncEngineImpl extends SyncEngineImpl {
10161008
// `isPrimary` is true.
10171009
private _isPrimaryClient: undefined | boolean = undefined;
10181010

1019-
constructor(
1020-
protected localStore: MultiTabLocalStore,
1021-
remoteStore: RemoteStore,
1022-
datastore: Datastore,
1023-
sharedClientState: SharedClientState,
1024-
currentUser: User,
1025-
maxConcurrentLimboResolutions: number
1026-
) {
1027-
super(
1028-
localStore,
1029-
remoteStore,
1030-
datastore,
1031-
sharedClientState,
1032-
currentUser,
1033-
maxConcurrentLimboResolutions
1034-
);
1035-
}
1036-
10371011
get isPrimaryClient(): boolean {
10381012
return this._isPrimaryClient === true;
10391013
}
10401014

1041-
enableNetwork(): Promise<void> {
1042-
this.localStore.setNetworkEnabled(true);
1043-
return super.enableNetwork();
1044-
}
1045-
1046-
disableNetwork(): Promise<void> {
1047-
this.localStore.setNetworkEnabled(false);
1048-
return super.disableNetwork();
1049-
}
1050-
10511015
/**
10521016
* Reconcile the list of synced documents in an existing view with those
10531017
* from persistence.
@@ -1097,7 +1061,7 @@ class MultiTabSyncEngineImpl extends SyncEngineImpl {
10971061
error?: FirestoreError
10981062
): Promise<void> {
10991063
this.assertSubscribed('applyBatchState()');
1100-
const documents = await this.localStore.lookupMutationDocuments(batchId);
1064+
const documents = await lookupMutationDocuments(this.localStore, batchId);
11011065

11021066
if (documents === null) {
11031067
// A throttled tab may not have seen the mutation before it was completed
@@ -1120,7 +1084,7 @@ class MultiTabSyncEngineImpl extends SyncEngineImpl {
11201084
// NOTE: Both these methods are no-ops for batches that originated from
11211085
// other clients.
11221086
this.processUserCallback(batchId, error ? error : null);
1123-
this.localStore.removeCachedMutationBatchMetadata(batchId);
1087+
removeCachedMutationBatchMetadata(this.localStore, batchId);
11241088
} else {
11251089
fail(`Unknown batchState: ${batchState}`);
11261090
}
@@ -1236,7 +1200,7 @@ class MultiTabSyncEngineImpl extends SyncEngineImpl {
12361200
);
12371201
// For queries that never executed on this client, we need to
12381202
// allocate the target in LocalStore and initialize a new View.
1239-
const target = await this.localStore.getTarget(targetId);
1203+
const target = await getCachedTarget(this.localStore, targetId);
12401204
debugAssert(!!target, `Target for id ${targetId} not found`);
12411205
targetData = await this.localStore.allocateTarget(target);
12421206
await this.initializeViewAndComputeSnapshot(
@@ -1277,7 +1241,7 @@ class MultiTabSyncEngineImpl extends SyncEngineImpl {
12771241
}
12781242

12791243
getActiveClients(): Promise<ClientId[]> {
1280-
return this.localStore.getActiveClients();
1244+
return getCurrentlyActiveClients(this.localStore);
12811245
}
12821246

12831247
async applyTargetState(
@@ -1296,7 +1260,7 @@ class MultiTabSyncEngineImpl extends SyncEngineImpl {
12961260
switch (state) {
12971261
case 'current':
12981262
case 'not-current': {
1299-
const changes = await this.localStore.getNewDocumentChanges();
1263+
const changes = await getNewDocumentChanges(this.localStore);
13001264
const synthesizedRemoteEvent = RemoteEvent.createSynthesizedRemoteEventForCurrentChange(
13011265
targetId,
13021266
state === 'current'
@@ -1336,7 +1300,7 @@ class MultiTabSyncEngineImpl extends SyncEngineImpl {
13361300
continue;
13371301
}
13381302

1339-
const target = await this.localStore.getTarget(targetId);
1303+
const target = await getCachedTarget(this.localStore, targetId);
13401304
debugAssert(
13411305
!!target,
13421306
`Query data for active target ${targetId} not found`
@@ -1370,7 +1334,7 @@ class MultiTabSyncEngineImpl extends SyncEngineImpl {
13701334
}
13711335

13721336
export function newMultiTabSyncEngine(
1373-
localStore: MultiTabLocalStore,
1337+
localStore: LocalStore,
13741338
remoteStore: RemoteStore,
13751339
datastore: Datastore,
13761340
sharedClientState: SharedClientState,

0 commit comments

Comments
 (0)