Skip to content

Commit 6a95a7a

Browse files
authored
Fix messaging being optional and isSupported type definitions (#793)
Fixes firebase.messaging() method being optional in TS types. Modifies isSupported so it is a namespace export and not a property on the factory function, which is not actually exported.
1 parent 4ff990a commit 6a95a7a

File tree

3 files changed

+20
-26
lines changed

3 files changed

+20
-26
lines changed

packages/firebase/index.d.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ declare namespace firebase {
107107

108108
function initializeApp(options: Object, name?: string): firebase.app.App;
109109

110-
const messaging: firebase.messaging.MessagingFactory;
110+
function messaging(app?: firebase.app.App): firebase.messaging.Messaging;
111111

112112
function storage(app?: firebase.app.App): firebase.storage.Storage;
113113

@@ -121,7 +121,7 @@ declare namespace firebase.app {
121121
auth(): firebase.auth.Auth;
122122
database(): firebase.database.Database;
123123
delete(): Promise<any>;
124-
messaging: firebase.messaging.MessagingFactory;
124+
messaging(): firebase.messaging.Messaging;
125125
name: string;
126126
options: Object;
127127
storage(url?: string): firebase.storage.Storage;
@@ -549,11 +549,6 @@ declare namespace firebase.database.ServerValue {
549549
}
550550

551551
declare namespace firebase.messaging {
552-
interface MessagingFactory {
553-
(app?: firebase.app.App): Messaging;
554-
isSupported(): boolean;
555-
}
556-
557552
interface Messaging {
558553
deleteToken(token: string): Promise<boolean>;
559554
getToken(): Promise<string | null>;
@@ -574,6 +569,8 @@ declare namespace firebase.messaging {
574569
useServiceWorker(registration: ServiceWorkerRegistration): void;
575570
usePublicVapidKey(b64PublicKey: string): void;
576571
}
572+
573+
function isSupported(): boolean;
577574
}
578575

579576
declare namespace firebase.storage {

packages/messaging/index.ts

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,16 @@ import {
1919
_FirebaseNamespace,
2020
FirebaseServiceFactory
2121
} from '@firebase/app-types/private';
22+
import { FirebaseMessaging } from '@firebase/messaging-types';
2223

2324
import { SwController } from './src/controllers/sw-controller';
2425
import { WindowController } from './src/controllers/window-controller';
2526
import { ERROR_CODES, errorFactory } from './src/models/errors';
2627

27-
import * as types from '@firebase/messaging-types';
28-
29-
export interface MessagingServiceFactory extends FirebaseServiceFactory {
30-
isSupported?(): boolean;
31-
}
32-
3328
export function registerMessaging(instance: _FirebaseNamespace): void {
3429
const messagingName = 'messaging';
3530

36-
const factoryMethod: MessagingServiceFactory = app => {
31+
const factoryMethod: FirebaseServiceFactory = app => {
3732
if (!isSupported()) {
3833
throw errorFactory.create(ERROR_CODES.UNSUPPORTED_BROWSER);
3934
}
@@ -46,11 +41,9 @@ export function registerMessaging(instance: _FirebaseNamespace): void {
4641
return new WindowController(app);
4742
}
4843
};
49-
factoryMethod.isSupported = isSupported;
5044

5145
const namespaceExports = {
52-
// no-inline
53-
Messaging: WindowController
46+
isSupported
5447
};
5548

5649
instance.INTERNAL.registerService(
@@ -67,13 +60,13 @@ registerMessaging(firebase as _FirebaseNamespace);
6760
*/
6861
declare module '@firebase/app-types' {
6962
interface FirebaseNamespace {
70-
messaging?: {
71-
(app?: FirebaseApp): types.FirebaseMessaging;
72-
Messaging: typeof types.FirebaseMessaging;
63+
messaging: {
64+
(app?: FirebaseApp): FirebaseMessaging;
65+
isSupported(): boolean;
7366
};
7467
}
7568
interface FirebaseApp {
76-
messaging?(): types.FirebaseMessaging;
69+
messaging(): FirebaseMessaging;
7770
}
7871
}
7972

packages/messaging/test/index.test.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@ import { expect } from 'chai';
1818
import { sandbox, SinonSandbox, SinonStub } from 'sinon';
1919

2020
import { FirebaseApp } from '@firebase/app-types';
21-
import { _FirebaseNamespace } from '@firebase/app-types/private';
21+
import {
22+
_FirebaseNamespace,
23+
FirebaseServiceFactory
24+
} from '@firebase/app-types/private';
2225

23-
import { MessagingServiceFactory, registerMessaging } from '../index';
26+
import { registerMessaging } from '../index';
2427
import { ERROR_CODES } from '../src/models/errors';
2528

2629
import { SwController } from '../src/controllers/sw-controller';
@@ -52,7 +55,7 @@ describe('Firebase Messaging > registerMessaging', () => {
5255
});
5356

5457
describe('factoryMethod', () => {
55-
let factoryMethod: MessagingServiceFactory;
58+
let factoryMethod: FirebaseServiceFactory;
5659
let fakeApp: FirebaseApp;
5760

5861
beforeEach(() => {
@@ -65,8 +68,9 @@ describe('Firebase Messaging > registerMessaging', () => {
6568
});
6669

6770
describe('isSupported', () => {
68-
it('is a static method on factoryMethod', () => {
69-
expect(factoryMethod.isSupported).to.be.a('function');
71+
it('is a namespace export', () => {
72+
const namespaceExports = registerService.getCall(0).args[2];
73+
expect(namespaceExports.isSupported).to.be.a('function');
7074
});
7175
});
7276

0 commit comments

Comments
 (0)