Skip to content
This repository was archived by the owner on May 19, 2025. It is now read-only.

Commit a06dc61

Browse files
authored
Firebase v6 & dynamic imports (#577)
1 parent 5d9d78c commit a06dc61

20 files changed

Lines changed: 3217 additions & 3734 deletions

File tree

.eslintrc.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module.exports = {
44
ecmaVersion: 2017,
55
sourceType: 'module'
66
},
7+
parser: 'babel-eslint',
78
plugins: [
89
'ember'
910
],

.nvmrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8.12.0
1+
lts/*

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import FirestoreAdapter from 'emberfire/adapters/firestore';
3535

3636
export default FirestoreAdapter.extend({
3737
enablePersistence: true,
38-
persistenceSettings: { experimentalTabSynchronization: true }
38+
persistenceSettings: { synchronizeTabs: true }
3939
});
4040
```
4141

addon/adapters/firestore.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export default class FirestoreAdapter extends DS.Adapter.extend({
9292
*
9393
* export default FirestoreAdapter.extend({
9494
* enablePersistence: true,
95-
* persistenceSettings: { experimentalTabSynchronization: true }
95+
* persistenceSettings: { synchronizeTabs: true }
9696
* });
9797
* ```
9898
*
@@ -299,7 +299,7 @@ const getFirestore = (adapter: FirestoreAdapter) => {
299299
});
300300
set(adapter, 'firestore', cachedFirestoreInstance);
301301
}
302-
return cachedFirestoreInstance;
302+
return cachedFirestoreInstance!;
303303
};
304304

305305
declare module 'ember-data' {

addon/adapters/realtime-database.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ const databaseInstance = (adapter: RealtimeDatabaseAdapter) => {
238238
database = app.database(databaseURL);
239239
set(adapter, 'database', database);
240240
}
241-
return database;
241+
return database!;
242242
}
243243

244244
declare module 'ember-data' {

addon/initializers/emberfire.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
import * as firebase from 'firebase/app';
1+
// @ts-ignore export for Node problem
2+
import _firebase from 'firebase/app';
23
import FirebaseAppService from '../services/firebase-app';
34
import RealtimeListenerService from '../services/realtime-listener';
45
import FirestoreAdapter from '../adapters/firestore';
56
import FirestoreSerializer from '../serializers/firestore';
67
import RealtimeDatabaseAdapater from '../adapters/realtime-database';
78
import RealtimeDatabaseSerializer from '../serializers/realtime-database';
89

10+
const firebase = _firebase as typeof import('firebase/app');
11+
912
const initialize = (application: any) => {
1013
const environment = application.resolveRegistration('config:environment');
1114
if (!environment || typeof environment.firebase !== 'object') {

addon/serializers/firestore.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import DS from 'ember-data';
2-
import { firestore } from 'firebase';
2+
import { firestore } from 'firebase/app';
33

44
export type DocumentSnapshot = firestore.DocumentSnapshot | firestore.QueryDocumentSnapshot;
55
export type Snapshot = firestore.DocumentSnapshot | firestore.QuerySnapshot;

addon/serializers/realtime-database.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import DS from 'ember-data';
22

3-
import { database } from 'firebase';
3+
import { database } from 'firebase/app';
44

55
export default class RealtimeDatabaseSerializer extends DS.JSONSerializer {
66

addon/services/firebase-app.ts

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,7 @@ import FirebaseService from './firebase';
77
import RSVP from 'rsvp';
88
const { resolve } = RSVP;
99

10-
// TODO move these over to dynamic imports
11-
import 'firebase/auth';
12-
import 'firebase/database';
13-
import 'firebase/firestore';
14-
import 'firebase/functions';
15-
import 'firebase/messaging';
16-
import 'firebase/storage';
17-
18-
// @ts-ignore
19-
import { app, auth, database, firestore, functions, messaging, storage } from 'firebase/app';
20-
21-
const getApp = (service: FirebaseAppService): app.App => {
10+
const getApp = (service: FirebaseAppService) => {
2211
const firebase = get(service, 'firebase');
2312
const name = get(service, 'name');
2413
return firebase.app(name);
@@ -37,12 +26,16 @@ export default class FirebaseAppService extends Service.extend({
3726
options?: object;
3827

3928
delete = () => getApp(this).delete();
40-
auth = () => resolve(getApp(this).auth());
41-
database = (databaseURL?: string) => resolve(getApp(this).database(databaseURL));
42-
firestore = () => resolve(getApp(this).firestore());
43-
functions = (region?: string) => resolve(getApp(this).functions(region));
44-
messaging = () => resolve(getApp(this).messaging());
45-
storage = (storageBucket?: string) => resolve(getApp(this).storage(storageBucket));
29+
30+
auth = () => resolve(import('firebase/auth') ).then(() => getApp(this).auth());
31+
firestore = () => resolve(import('firebase/firestore')).then(() => getApp(this).firestore());
32+
messaging = () => resolve(import('firebase/messaging')).then(() => getApp(this).messaging());
33+
database = (url?: string) => resolve(import('firebase/database') ).then(() => getApp(this).database(url));
34+
functions = (region?: string) => resolve(import('firebase/functions')).then(() => getApp(this).functions(region));
35+
36+
// TODO: drop the <any> once firebase-js-sdk #1792 and #1812 and patched in, they were missing typings
37+
performance = () => resolve(import(<any>'firebase/performance')).then(() => getApp(this).performance());
38+
storage = (url?: string) => resolve(import(<any>'firebase/storage') ).then(() => getApp(this).storage(url));
4639

4740
init() {
4841
this._super(...arguments);
@@ -56,4 +49,4 @@ declare module '@ember/service' {
5649
interface Registry {
5750
"firebase-app": FirebaseAppService;
5851
}
59-
}
52+
}

addon/services/firebase.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
import * as firebase from 'firebase/app';
1+
// @ts-ignore Node.js issues
2+
import _firebase from 'firebase/app';
23
import Service from '@ember/service';
34

5+
const firebase = _firebase as typeof import('firebase/app');
6+
47
export default class FirebaseService extends Service {
58

69
app = (name?: string) => firebase.app(name);
710
apps = firebase.apps;
8-
initializeApp = (options: Object, nameOrConfig?: string|Object) => firebase.initializeApp(options, nameOrConfig as string|undefined);
11+
initializeApp = (options: Object, nameOrConfig?: string|Object) => firebase.initializeApp(options, nameOrConfig as string | undefined);
912

1013
}
1114

1215
declare module '@ember/service' {
1316
interface Registry {
1417
firebase: FirebaseService;
1518
}
16-
}
19+
}

0 commit comments

Comments
 (0)