Skip to content

Commit 5f799e6

Browse files
Untangle Platform
1 parent 65c05e2 commit 5f799e6

37 files changed

+421
-503
lines changed

packages/firestore/index.console.ts

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

18-
import './src/platform_browser/browser_init';
18+
// TODO(mrschmidt): Figure out console build
1919

2020
export { Firestore, FirestoreDatabase } from './src/api/database';
2121
export {

packages/firestore/index.memory.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import { MemoryComponentProvider } from './src/core/component_provider';
2323
import { configureForFirebase } from './src/platform/config';
2424

2525
import './register-module';
26-
import './src/platform_browser/browser_init';
2726

2827
import { name, version } from './package.json';
2928

packages/firestore/index.node.memory.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import { Firestore } from './src/api/database';
2222
import { MemoryComponentProvider } from './src/core/component_provider';
2323
import { configureForFirebase } from './src/platform/config';
2424
import './register-module';
25-
import './src/platform_node/node_init';
2625

2726
import { name, version } from './package.json';
2827

packages/firestore/index.node.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import { IndexedDbComponentProvider } from './src/core/component_provider';
2222
import { configureForFirebase } from './src/platform/config';
2323

2424
import './register-module';
25-
import './src/platform_node/node_init';
2625

2726
import { name, version } from './package.json';
2827

packages/firestore/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import { configureForFirebase } from './src/platform/config';
2424
import { name, version } from './package.json';
2525

2626
import './register-module';
27-
import './src/platform_browser/browser_init';
2827

2928
/**
3029
* Registers the main Firestore build with the components framework.

packages/firestore/lite/index.node.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ import { Firestore } from './src/api/database';
2020
import { version } from '../package.json';
2121
import { Component, ComponentType } from '@firebase/component';
2222

23-
import '../src/platform_node/node_init';
24-
2523
export {
2624
Firestore,
2725
initializeFirestore,

packages/firestore/lite/src/api/database.ts

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {
3333
newDatastore,
3434
terminateDatastore
3535
} from '../../../src/remote/datastore';
36-
import { PlatformSupport } from '../../../src/platform/platform';
36+
import { loadConnection, newSerializer } from '../../../src/platform/platform';
3737
import { Deferred } from '../../../src/util/promise';
3838
import { cast } from './util';
3939

@@ -83,19 +83,11 @@ export class Firestore implements firestore.FirebaseFirestore {
8383

8484
// Kick off initializing the datastore but don't actually wait for it.
8585
// eslint-disable-next-line @typescript-eslint/no-floating-promises
86-
PlatformSupport.getPlatform()
87-
.loadConnection(databaseInfo)
88-
.then(connection => {
89-
const serializer = PlatformSupport.getPlatform().newSerializer(
90-
databaseInfo.databaseId
91-
);
92-
const datastore = newDatastore(
93-
connection,
94-
this._credentials,
95-
serializer
96-
);
97-
this._datastoreDeferred.resolve(datastore);
98-
});
86+
loadConnection(databaseInfo).then(connection => {
87+
const serializer = newSerializer(databaseInfo.databaseId);
88+
const datastore = newDatastore(connection, this._credentials, serializer);
89+
this._datastoreDeferred.resolve(datastore);
90+
});
9991
}
10092

10193
_ensureClientConfigured(): Promise<Datastore> {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import {
3535
} from '../../../src/remote/datastore';
3636
import { hardAssert } from '../../../src/util/assert';
3737
import { DeleteMutation, Precondition } from '../../../src/model/mutation';
38-
import { PlatformSupport } from '../../../src/platform/platform';
38+
import { newSerializer } from '../../../src/platform/platform';
3939
import { applyFirestoreDataConverter } from '../../../src/api/database';
4040
import { DatabaseId } from '../../../src/core/database_info';
4141
import { FieldPath } from './field_path';
@@ -422,7 +422,7 @@ export function newUserDataReader(
422422
databaseId: DatabaseId,
423423
settings: firestore.Settings
424424
): UserDataReader {
425-
const serializer = PlatformSupport.getPlatform().newSerializer(databaseId);
425+
const serializer = newSerializer(databaseId);
426426
return new UserDataReader(
427427
databaseId,
428428
!!settings.ignoreUndefinedProperties,

packages/firestore/rollup.shared.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,26 @@ const browserDeps = Object.keys(
3131
const nodeDeps = [...browserDeps, 'util', 'path'];
3232

3333
/** Resolves the external dependencies for the browser build. */
34-
export function resolveBrowserExterns(id) {
34+
export function resolveBrowserExterns(id, importedFrom) {
35+
const resolvedPath = path.resolve(importedFrom, id);
36+
if (resolvedPath.indexOf('src/platform/platform') !== -1) {
37+
return id.replace(
38+
'src/platform/platform.ts',
39+
'src/platform_browser/browser_platform'
40+
);
41+
}
3542
return browserDeps.some(dep => id === dep || id.startsWith(`${dep}/`));
3643
}
3744

3845
/** Resolves the external dependencies for the Node build. */
39-
export function resolveNodeExterns(id) {
46+
export function resolveNodeExterns(id, importedFrom) {
47+
const resolvedPath = path.resolve(importedFrom, id);
48+
if (resolvedPath.indexOf('src/platform/platform') !== -1) {
49+
return id.replace(
50+
'src/platform/platform.ts',
51+
'src/platform_node/node_platform'
52+
);
53+
}
4054
return nodeDeps.some(dep => id === dep || id.startsWith(`${dep}/`));
4155
}
4256

packages/firestore/src/api/blob.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { PlatformSupport } from '../platform/platform';
18+
import { isBase64Available } from '../platform/platform';
1919
import { Code, FirestoreError } from '../util/error';
2020
import {
2121
invalidClassError,
@@ -36,7 +36,7 @@ function assertUint8ArrayAvailable(): void {
3636

3737
/** Helper function to assert Base64 functions are available at runtime. */
3838
function assertBase64Available(): void {
39-
if (!PlatformSupport.getPlatform().base64Available) {
39+
if (!isBase64Available()) {
4040
throw new FirestoreError(
4141
Code.UNIMPLEMENTED,
4242
'Blobs are unavailable in Firestore in this environment.'

packages/firestore/src/api/database.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ import { DeleteMutation, Mutation, Precondition } from '../model/mutation';
4646
import { FieldPath, ResourcePath } from '../model/path';
4747
import { isServerTimestamp } from '../model/server_timestamps';
4848
import { refValue } from '../model/values';
49-
import { PlatformSupport } from '../platform/platform';
5049
import { debugAssert, fail } from '../util/assert';
5150
import { AsyncObserver } from '../util/async_observer';
5251
import { AsyncQueue } from '../util/async_queue';
@@ -529,7 +528,6 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
529528
const databaseInfo = this.makeDatabaseInfo();
530529

531530
this._firestoreClient = new FirestoreClient(
532-
PlatformSupport.getPlatform(),
533531
databaseInfo,
534532
this._credentials,
535533
this._queue

packages/firestore/src/api/user_data_reader.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import { Blob } from './blob';
4242
import { BaseFieldPath, fromDotSeparatedString } from './field_path';
4343
import { DeleteFieldValueImpl, SerializableFieldValue } from './field_value';
4444
import { GeoPoint } from './geo_point';
45-
import { PlatformSupport } from '../platform/platform';
45+
import { newSerializer } from '../platform/platform';
4646

4747
const RESERVED_FIELD_REGEX = /^__.*__$/;
4848

@@ -302,8 +302,7 @@ export class UserDataReader {
302302
private readonly ignoreUndefinedProperties: boolean,
303303
serializer?: JsonProtoSerializer
304304
) {
305-
this.serializer =
306-
serializer || PlatformSupport.getPlatform().newSerializer(databaseId);
305+
this.serializer = serializer || newSerializer(databaseId);
307306
}
308307

309308
/** Parse document data from a set() call. */

packages/firestore/src/core/component_provider.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@ import { RemoteStore } from '../remote/remote_store';
2727
import { EventManager } from './event_manager';
2828
import { AsyncQueue } from '../util/async_queue';
2929
import { DatabaseInfo } from './database_info';
30-
import { Platform } from '../platform/platform';
30+
import {
31+
getDocument,
32+
getWindow,
33+
newConnectivityMonitor,
34+
newSerializer
35+
} from '../platform/platform';
3136
import { Datastore } from '../remote/datastore';
3237
import { User } from '../auth/user';
3338
import { PersistenceSettings } from './firestore_client';
@@ -51,7 +56,6 @@ const MEMORY_ONLY_PERSISTENCE_ERROR_MESSAGE =
5156
export interface ComponentConfiguration {
5257
asyncQueue: AsyncQueue;
5358
databaseInfo: DatabaseInfo;
54-
platform: Platform;
5559
datastore: Datastore;
5660
clientId: ClientId;
5761
initialUser: User;
@@ -152,7 +156,7 @@ export class MemoryComponentProvider implements ComponentProvider {
152156
onlineState,
153157
OnlineStateSource.RemoteStore
154158
),
155-
cfg.platform.newConnectivityMonitor()
159+
newConnectivityMonitor()
156160
);
157161
}
158162

@@ -250,14 +254,15 @@ export class IndexedDbComponentProvider extends MemoryComponentProvider {
250254
const persistenceKey = IndexedDbPersistence.buildStoragePrefix(
251255
cfg.databaseInfo
252256
);
253-
const serializer = cfg.platform.newSerializer(cfg.databaseInfo.databaseId);
257+
const serializer = newSerializer(cfg.databaseInfo.databaseId);
254258
return new IndexedDbPersistence(
255259
cfg.persistenceSettings.synchronizeTabs,
256260
persistenceKey,
257261
cfg.clientId,
258-
cfg.platform,
259262
LruParams.withCacheSize(cfg.persistenceSettings.cacheSizeBytes),
260263
cfg.asyncQueue,
264+
getWindow(),
265+
getDocument(),
261266
serializer,
262267
this.sharedClientState,
263268
cfg.persistenceSettings.forceOwningTab
@@ -269,7 +274,8 @@ export class IndexedDbComponentProvider extends MemoryComponentProvider {
269274
cfg.persistenceSettings.durable &&
270275
cfg.persistenceSettings.synchronizeTabs
271276
) {
272-
if (!WebStorageSharedClientState.isAvailable(cfg.platform)) {
277+
const window = getWindow();
278+
if (!WebStorageSharedClientState.isAvailable(window)) {
273279
throw new FirestoreError(
274280
Code.UNIMPLEMENTED,
275281
'IndexedDB persistence is only available on platforms that support LocalStorage.'
@@ -279,8 +285,8 @@ export class IndexedDbComponentProvider extends MemoryComponentProvider {
279285
cfg.databaseInfo
280286
);
281287
return new WebStorageSharedClientState(
288+
window,
282289
cfg.asyncQueue,
283-
cfg.platform,
284290
persistenceKey,
285291
cfg.clientId,
286292
cfg.initialUser

packages/firestore/src/core/firestore_client.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { GarbageCollectionScheduler, Persistence } from '../local/persistence';
2222
import { Document, NoDocument } from '../model/document';
2323
import { DocumentKey } from '../model/document_key';
2424
import { Mutation } from '../model/mutation';
25-
import { Platform } from '../platform/platform';
25+
import { loadConnection, newSerializer } from '../platform/platform';
2626
import { newDatastore } from '../remote/datastore';
2727
import { RemoteStore } from '../remote/remote_store';
2828
import { AsyncQueue, wrapInUserErrorIfRecoverable } from '../util/async_queue';
@@ -93,7 +93,6 @@ export class FirestoreClient {
9393
private readonly clientId = AutoId.newId();
9494

9595
constructor(
96-
private platform: Platform,
9796
private databaseInfo: DatabaseInfo,
9897
private credentials: CredentialsProvider,
9998
/**
@@ -235,16 +234,13 @@ export class FirestoreClient {
235234
// Datastore (without duplicating the initializing logic once per
236235
// provider).
237236

238-
const connection = await this.platform.loadConnection(this.databaseInfo);
239-
const serializer = this.platform.newSerializer(
240-
this.databaseInfo.databaseId
241-
);
237+
const connection = await loadConnection(this.databaseInfo);
238+
const serializer = newSerializer(this.databaseInfo.databaseId);
242239
const datastore = newDatastore(connection, this.credentials, serializer);
243240

244241
await componentProvider.initialize({
245242
asyncQueue: this.asyncQueue,
246243
databaseInfo: this.databaseInfo,
247-
platform: this.platform,
248244
datastore,
249245
clientId: this.clientId,
250246
initialUser: user,

packages/firestore/src/local/indexeddb_persistence.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { DatabaseInfo } from '../core/database_info';
2020
import { ListenSequence, SequenceNumberSyncer } from '../core/listen_sequence';
2121
import { ListenSequenceNumber, TargetId } from '../core/types';
2222
import { DocumentKey } from '../model/document_key';
23-
import { Platform } from '../platform/platform';
2423
import { JsonProtoSerializer } from '../remote/serializer';
2524
import { debugAssert, fail } from '../util/assert';
2625
import { AsyncQueue, DelayedOperation, TimerId } from '../util/async_queue';
@@ -75,6 +74,7 @@ import {
7574
SimpleDbStore,
7675
SimpleDbTransaction
7776
} from './simple_db';
77+
import { DocumentLike, WindowLike } from '../util/types';
7878

7979
const LOG_TAG = 'IndexedDbPersistence';
8080

@@ -191,9 +191,6 @@ export class IndexedDbPersistence implements Persistence {
191191
*/
192192
static MAIN_DATABASE = 'main';
193193

194-
private readonly document: Document | null;
195-
private readonly window: Window | null;
196-
197194
// Technically `simpleDb` should be `| undefined` because it is
198195
// initialized asynchronously by start(), but that would be more misleading
199196
// than useful.
@@ -239,9 +236,10 @@ export class IndexedDbPersistence implements Persistence {
239236

240237
private readonly persistenceKey: string,
241238
private readonly clientId: ClientId,
242-
platform: Platform,
243239
lruParams: LruParams,
244240
private readonly queue: AsyncQueue,
241+
private readonly window: WindowLike | null,
242+
private readonly document: DocumentLike | null,
245243
serializer: JsonProtoSerializer,
246244
private readonly sequenceNumberSyncer: SequenceNumberSyncer,
247245

@@ -261,7 +259,6 @@ export class IndexedDbPersistence implements Persistence {
261259
this.referenceDelegate = new IndexedDbLruDelegate(this, lruParams);
262260
this.dbName = persistenceKey + IndexedDbPersistence.MAIN_DATABASE;
263261
this.serializer = new LocalSerializer(serializer);
264-
this.document = platform.document;
265262
this.targetCache = new IndexedDbTargetCache(
266263
this.referenceDelegate,
267264
this.serializer
@@ -271,9 +268,8 @@ export class IndexedDbPersistence implements Persistence {
271268
this.serializer,
272269
this.indexManager
273270
);
274-
this.window = platform.window;
275-
if (platform.window && platform.window.localStorage) {
276-
this.webStorage = platform.window.localStorage;
271+
if (this.window && this.window.localStorage) {
272+
this.webStorage = this.window.localStorage;
277273
} else {
278274
this.webStorage = null;
279275
if (forceOwningTab === false) {

0 commit comments

Comments
 (0)