Skip to content

Commit 9200feb

Browse files
Make MemoryLru tree-shakeable (#2767)
1 parent cbc191d commit 9200feb

File tree

5 files changed

+40
-36
lines changed

5 files changed

+40
-36
lines changed

packages/firestore/src/local/memory_persistence.ts

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -87,34 +87,17 @@ export class MemoryPersistence implements Persistence {
8787

8888
private _started = false;
8989

90-
readonly referenceDelegate: MemoryLruDelegate | MemoryEagerDelegate;
91-
92-
static createLruPersistence(
93-
clientId: ClientId,
94-
params: LruParams
95-
): MemoryPersistence {
96-
const factory = (p: MemoryPersistence): MemoryLruDelegate =>
97-
new MemoryLruDelegate(p, params);
98-
return new MemoryPersistence(clientId, factory);
99-
}
100-
101-
static createEagerPersistence(clientId: ClientId): MemoryPersistence {
102-
const factory = (p: MemoryPersistence): MemoryEagerDelegate =>
103-
new MemoryEagerDelegate(p);
104-
return new MemoryPersistence(clientId, factory);
105-
}
106-
90+
readonly referenceDelegate: MemoryReferenceDelegate;
91+
10792
/**
10893
* The constructor accepts a factory for creating a reference delegate. This
10994
* allows both the delegate and this instance to have strong references to
11095
* each other without having nullable fields that would then need to be
11196
* checked or asserted on every access.
11297
*/
113-
private constructor(
98+
constructor(
11499
private readonly clientId: ClientId,
115-
referenceDelegateFactory: (
116-
p: MemoryPersistence
117-
) => MemoryLruDelegate | MemoryEagerDelegate
100+
referenceDelegateFactory: (p: MemoryPersistence) => MemoryReferenceDelegate
118101
) {
119102
this._started = true;
120103
this.referenceDelegate = referenceDelegateFactory(this);
@@ -226,7 +209,13 @@ export class MemoryTransaction extends PersistenceTransaction {
226209
}
227210
}
228211

229-
export class MemoryEagerDelegate implements ReferenceDelegate {
212+
export interface MemoryReferenceDelegate extends ReferenceDelegate {
213+
documentSize(doc: MaybeDocument): number;
214+
onTransactionStarted(): void;
215+
onTransactionCommitted(txn: PersistenceTransaction): PersistencePromise<void>;
216+
}
217+
218+
export class MemoryEagerDelegate implements MemoryReferenceDelegate {
230219
private inMemoryPins: ReferenceSet | null = null;
231220
private _orphanedDocuments: Set<DocumentKey> | null = null;
232221

@@ -545,7 +534,10 @@ export class MemoryPersistenceProvider implements PersistenceProvider {
545534

546535
getPersistence(): Persistence {
547536
assert(!!this.clientId, 'initialize() not called');
548-
return MemoryPersistence.createEagerPersistence(this.clientId);
537+
return new MemoryPersistence(
538+
this.clientId,
539+
p => new MemoryEagerDelegate(p)
540+
);
549541
}
550542

551543
getSharedClientState(): SharedClientState {

packages/firestore/test/unit/generate_spec_json.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ function main(args) {
6565
var testName = specName.replace(/^specs\//, '');
6666
var filename = testName.replace(/[^A-Za-z\d]/g, '_') + '.json';
6767
var outputFile = outputPath + '/' + filename;
68-
console.log("Generating " + outputFile);
68+
console.log('Generating ' + outputFile);
6969
writeToJSON(testFiles[i], outputFile);
7070
}
7171

packages/firestore/test/unit/local/persistence_test_helpers.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ import {
2929
import { IndexedDbPersistence } from '../../../src/local/indexeddb_persistence';
3030
import { LocalSerializer } from '../../../src/local/local_serializer';
3131
import { LruParams } from '../../../src/local/lru_garbage_collector';
32-
import { MemoryPersistence } from '../../../src/local/memory_persistence';
32+
import {
33+
MemoryEagerDelegate,
34+
MemoryLruDelegate,
35+
MemoryPersistence
36+
} from '../../../src/local/memory_persistence';
3337
import {
3438
ClientId,
3539
WebStorageSharedClientState
@@ -122,13 +126,16 @@ export async function testIndexedDbPersistence(
122126

123127
/** Creates and starts a MemoryPersistence instance for testing. */
124128
export async function testMemoryEagerPersistence(): Promise<MemoryPersistence> {
125-
return MemoryPersistence.createEagerPersistence(AutoId.newId());
129+
return new MemoryPersistence(AutoId.newId(), p => new MemoryEagerDelegate(p));
126130
}
127131

128132
export async function testMemoryLruPersistence(
129133
params: LruParams = LruParams.DEFAULT
130134
): Promise<MemoryPersistence> {
131-
return MemoryPersistence.createLruPersistence(AutoId.newId(), params);
135+
return new MemoryPersistence(
136+
AutoId.newId(),
137+
p => new MemoryLruDelegate(p, params)
138+
);
132139
}
133140

134141
/** Clears the persistence in tests */

packages/firestore/test/unit/specs/spec_test_runner.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ import {
4747
} from '../../../src/local/indexeddb_schema';
4848
import { LocalStore } from '../../../src/local/local_store';
4949
import { LruParams } from '../../../src/local/lru_garbage_collector';
50-
import { MemoryPersistence } from '../../../src/local/memory_persistence';
50+
import {
51+
MemoryEagerDelegate,
52+
MemoryLruDelegate,
53+
MemoryPersistence
54+
} from '../../../src/local/memory_persistence';
5155
import { Persistence } from '../../../src/local/persistence';
5256
import {
5357
ClientId,
@@ -1151,7 +1155,9 @@ abstract class TestRunner {
11511155
expect(actualTarget.query).to.deep.equal(expectedTarget.query);
11521156
expect(actualTarget.targetId).to.equal(expectedTarget.targetId);
11531157
expect(actualTarget.readTime).to.equal(expectedTarget.readTime);
1154-
expect(actualTarget.resumeToken || '').to.equal(expectedTarget.resumeToken || '');
1158+
expect(actualTarget.resumeToken || '').to.equal(
1159+
expectedTarget.resumeToken || ''
1160+
);
11551161
delete actualTargets[targetId];
11561162
});
11571163
expect(obj.size(actualTargets)).to.equal(
@@ -1236,12 +1242,11 @@ class MemoryTestRunner extends TestRunner {
12361242
gcEnabled: boolean
12371243
): Promise<Persistence> {
12381244
return Promise.resolve(
1239-
gcEnabled
1240-
? MemoryPersistence.createEagerPersistence(this.clientId)
1241-
: MemoryPersistence.createLruPersistence(
1242-
this.clientId,
1243-
LruParams.DEFAULT
1244-
)
1245+
new MemoryPersistence(this.clientId, p =>
1246+
gcEnabled
1247+
? new MemoryEagerDelegate(p)
1248+
: new MemoryLruDelegate(p, LruParams.DEFAULT)
1249+
)
12451250
);
12461251
}
12471252
}

packages/firestore/test/util/test_platform.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ export class TestPlatform implements Platform {
265265
}
266266

267267
/** Returns true if we are running under Node. */
268-
export function isNode() : boolean {
268+
export function isNode(): boolean {
269269
return (
270270
typeof process !== 'undefined' &&
271271
process.title !== undefined &&

0 commit comments

Comments
 (0)