Skip to content

Commit 2a8e78a

Browse files
Use composition
1 parent 37e1f0f commit 2a8e78a

File tree

18 files changed

+535
-460
lines changed

18 files changed

+535
-460
lines changed

packages/firebase/firestore/memory/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@
1515
* limitations under the License.
1616
*/
1717

18-
import '@firbease/firestore/memory';
18+
import '../../../firestore/dist/index.memory.esm';

packages/firestore/index.memory.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,19 @@
1818
import firebase from '@firebase/app';
1919
import { FirebaseNamespace } from '@firebase/app-types';
2020

21+
import {MemoryPersistenceProvider} from "./src/local/memory_persistence";
2122
import { configureForFirebase } from './src/platform/config';
23+
2224
import './register-module';
2325
import './src/platform_browser/browser_init';
2426

2527
import { name, version } from './package.json';
26-
import { Firestore, PublicMemoryFirestore } from './src/api/database';
2728

29+
/**
30+
* Registers the memory-only Firestore build with the components framework.
31+
*/
2832
export function registerFirestore(instance: FirebaseNamespace): void {
29-
configureForFirebase(instance, PublicMemoryFirestore, Firestore);
33+
configureForFirebase(instance, () => new MemoryPersistenceProvider());
3034
instance.registerVersion(name, version);
3135
}
3236

packages/firestore/index.node.memory.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,19 @@
1818
import firebase from '@firebase/app';
1919
import { FirebaseNamespace } from '@firebase/app-types';
2020

21+
import {MemoryPersistenceProvider} from "./src/local/memory_persistence";
2122
import { configureForFirebase } from './src/platform/config';
2223
import './register-module';
2324
import './src/platform_node/node_init';
2425

2526
import { name, version } from './package.json';
26-
import { Firestore, PublicMemoryFirestore } from './src/api/database';
2727

28+
/**
29+
* Registers the memory-only Firestore build for Node with the components
30+
* framework.
31+
*/
2832
export function registerFirestore(instance: FirebaseNamespace): void {
29-
configureForFirebase(instance, PublicMemoryFirestore, Firestore);
33+
configureForFirebase(instance, () => new MemoryPersistenceProvider());
3034
instance.registerVersion(name, version);
3135
}
3236

packages/firestore/index.node.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,24 @@
1515
* limitations under the License.
1616
*/
1717
import firebase from '@firebase/app';
18+
import { FirebaseNamespace } from '@firebase/app-types';
19+
20+
import {IndexedDbPersistenceProvider} from "./src/local/indexeddb_persistence";
1821
import { configureForFirebase } from './src/platform/config';
22+
1923
import './register-module';
2024
import './src/platform_node/node_init';
21-
import { FirebaseNamespace } from '@firebase/app-types';
2225

2326
import { name, version } from './package.json';
24-
import {
25-
PersistenceFirestore,
26-
PublicPersistenceFirestore
27-
} from './src/api/persistence';
2827

28+
/**
29+
* Registers the main Firestore Node build with the components framework.
30+
* Persistence can be enabled via `firebase.firestore().enablePersistence()`.
31+
*/
2932
export function registerFirestore(instance: FirebaseNamespace): void {
3033
configureForFirebase(
3134
instance,
32-
PublicPersistenceFirestore,
33-
PersistenceFirestore
35+
() => new IndexedDbPersistenceProvider()
3436
);
3537
instance.registerVersion(name, version, 'node');
3638
}

packages/firestore/index.ts

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,22 @@
1616
*/
1717

1818
import firebase from '@firebase/app';
19-
import { configureForFirebase } from './src/platform/config';
20-
import './register-module';
21-
import './src/platform_browser/browser_init';
22-
2319
import { FirebaseNamespace } from '@firebase/app-types';
2420

21+
import {IndexedDbPersistenceProvider} from "./src/local/indexeddb_persistence";
22+
import { configureForFirebase } from './src/platform/config';
2523
import { name, version } from './package.json';
26-
import {
27-
PersistenceFirestore,
28-
PublicPersistenceFirestore
29-
} from './src/api/persistence';
3024

25+
import './register-module';
26+
import './src/platform_browser/browser_init';
27+
28+
/**
29+
* Registers the main Firestore build with the components framework.
30+
* Persistence can be enabled via `firebase.firestore().enablePersistence()`.
31+
*/
3132
export function registerFirestore(instance: FirebaseNamespace): void {
3233
configureForFirebase(
33-
instance,
34-
PublicPersistenceFirestore,
35-
PersistenceFirestore
34+
instance, () => new IndexedDbPersistenceProvider()
3635
);
3736
instance.registerVersion(name, version);
3837
}

packages/firestore/rollup.config.js

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import memoryPkg from './memory/package.json';
3131
import {
3232
appendPrivatePrefixTransformers,
3333
manglePrivatePropertiesOptions,
34-
resolveMemoryExterns
3534
} from './terser.config';
3635

3736
// This Firestore Rollup configuration provides a number of different builds:
@@ -55,10 +54,49 @@ const browserDeps = Object.keys(
5554
Object.assign({}, pkg.peerDependencies, pkg.dependencies)
5655
);
5756

57+
const nodeDeps = [...browserDeps, 'util', 'path'];
58+
59+
/** Resolves the external dependencies for the browser build. */
5860
function resolveBrowserExterns(id) {
5961
return browserDeps.some(dep => id === dep || id.startsWith(`${dep}/`));
6062
}
6163

64+
/** Resolves the external dependencies for the NOde build. */
65+
function resolveNodeExterns(id) {
66+
return nodeDeps.some(dep => id === dep || id.startsWith(`${dep}/`));
67+
}
68+
69+
/**
70+
* Resolves the external dependencies for the Memory-based Firestore
71+
* implementation. Verifies that no persistence sources are used by Firestore's
72+
* memory-only implementation.
73+
*/
74+
export function resolveMemoryExterns(deps, externsId, referencedBy) {
75+
const externalRef = path
76+
.resolve(path.dirname(referencedBy), externsId)
77+
.replace('.ts', '');
78+
79+
const persistenceRef = [
80+
'local/indexeddb_persistence.ts',
81+
'local/indexeddb_index_manager.ts',
82+
'local/indexeddb_mutation_queue.ts',
83+
'local/indexeddb_remote_document_cache.ts',
84+
'local/indexeddb_schema.ts',
85+
'local/indexeddb_target_cache.ts',
86+
'local/local_serializer.ts',
87+
'local/lru_garbage_collector.ts',
88+
'local/simple_db.ts',
89+
'api/persistence.ts'
90+
].map(p => path.resolve(__dirname, 'src', p));
91+
92+
if (persistenceRef.indexOf(externalRef) !== -1) {
93+
throw new Error('Unexpected reference in Memory-only client on ' + id);
94+
}
95+
96+
return deps.some(dep => externsId === dep || externsId.startsWith(`${dep}/`));
97+
}
98+
99+
62100
const es5BuildPlugins = [
63101
typescriptPlugin({
64102
typescript,
@@ -151,12 +189,6 @@ const browserBuilds = [
151189

152190
// MARK: Node builds
153191

154-
const nodeDeps = [...browserDeps, 'util', 'path'];
155-
156-
function resolveNodeExterns(id) {
157-
return nodeDeps.some(dep => id === dep || id.startsWith(`${dep}/`));
158-
}
159-
160192
const nodeBuildPlugins = [
161193
...es5BuildPlugins,
162194
// Needed as we also use the *.proto files

0 commit comments

Comments
 (0)