Skip to content

Commit 6b1b0ca

Browse files
authored
Drop isSupported injection, bump rxfire (#3588)
* Bump rxfire dep * Drop isSupported inject in favor of PLATFORM_ID test * Analytics is technically isPlatformBrowser rather than !isPlatformServer, prolly no diff
1 parent e18d8da commit 6b1b0ca

22 files changed

+59
-186
lines changed

package-lock.json

+6-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
"jsonc-parser": "^3.0.0",
6666
"open": "^7.0.3 || ^8.0.0",
6767
"ora": "^5.3.0",
68-
"rxfire": "^6.0.5",
68+
"rxfire": "^6.1.0",
6969
"rxjs": "~7.8.0",
7070
"semver": "^7.1.3",
7171
"triple-beam": "^1.3.0",

src/analytics/analytics.module.ts

+9-17
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
1+
import { isPlatformBrowser } from '@angular/common';
12
import {
2-
APP_INITIALIZER,
33
EnvironmentProviders,
44
InjectionToken,
55
Injector,
66
NgModule,
77
NgZone,
88
Optional,
9+
PLATFORM_ID,
910
makeEnvironmentProviders,
1011
} from '@angular/core';
1112
import { VERSION, ɵAngularFireSchedulers, ɵgetDefaultInstanceOf } from '@angular/fire';
1213
import { FirebaseApp, FirebaseApps } from '@angular/fire/app';
1314
import { Analytics as FirebaseAnalytics } from 'firebase/analytics';
1415
import { registerVersion } from 'firebase/app';
1516
import { ANALYTICS_PROVIDER_NAME, Analytics, AnalyticsInstances } from './analytics';
16-
import { isAnalyticsSupportedFactory } from './is-analytics-supported-factory';
1717
import { ScreenTrackingService } from './screen-tracking.service';
1818
import { UserTrackingService } from './user-tracking.service';
1919

2020
export const PROVIDED_ANALYTICS_INSTANCES = new InjectionToken<Analytics[]>('angularfire2.analytics-instances');
2121

22-
export function defaultAnalyticsInstanceFactory(provided: FirebaseAnalytics[]|undefined, defaultApp: FirebaseApp) {
23-
if (!isAnalyticsSupportedFactory.sync()) { return null; }
22+
export function defaultAnalyticsInstanceFactory(provided: FirebaseAnalytics[]|undefined, defaultApp: FirebaseApp, platformId: object) {
23+
if (!isPlatformBrowser(platformId)) { return null; }
2424
const defaultAnalytics = ɵgetDefaultInstanceOf<FirebaseAnalytics>(ANALYTICS_PROVIDER_NAME, provided, defaultApp);
2525
return defaultAnalytics && new Analytics(defaultAnalytics);
2626
}
2727

2828
export function analyticsInstanceFactory(fn: (injector: Injector) => FirebaseAnalytics) {
29-
return (zone: NgZone, injector: Injector) => {
30-
if (!isAnalyticsSupportedFactory.sync()) { return null; }
29+
return (zone: NgZone, injector: Injector, platformId: object) => {
30+
if (!isPlatformBrowser(platformId)) { return null; }
3131
const analytics = zone.runOutsideAngular(() => fn(injector));
3232
return new Analytics(analytics);
3333
};
@@ -46,18 +46,14 @@ const DEFAULT_ANALYTICS_INSTANCE_PROVIDER = {
4646
deps: [
4747
[new Optional(), PROVIDED_ANALYTICS_INSTANCES ],
4848
FirebaseApp,
49+
PLATFORM_ID,
4950
]
5051
};
5152

5253
@NgModule({
5354
providers: [
5455
DEFAULT_ANALYTICS_INSTANCE_PROVIDER,
55-
ANALYTICS_INSTANCES_PROVIDER,
56-
{
57-
provide: APP_INITIALIZER,
58-
useValue: isAnalyticsSupportedFactory.async,
59-
multi: true,
60-
}
56+
ANALYTICS_INSTANCES_PROVIDER
6157
]
6258
})
6359
export class AnalyticsModule {
@@ -75,18 +71,14 @@ export function provideAnalytics(fn: (injector: Injector) => FirebaseAnalytics,
7571
return makeEnvironmentProviders([
7672
DEFAULT_ANALYTICS_INSTANCE_PROVIDER,
7773
ANALYTICS_INSTANCES_PROVIDER,
78-
{
79-
provide: APP_INITIALIZER,
80-
useValue: isAnalyticsSupportedFactory.async,
81-
multi: true,
82-
},
8374
{
8475
provide: PROVIDED_ANALYTICS_INSTANCES,
8576
useFactory: analyticsInstanceFactory(fn),
8677
multi: true,
8778
deps: [
8879
NgZone,
8980
Injector,
81+
PLATFORM_ID,
9082
ɵAngularFireSchedulers,
9183
FirebaseApps,
9284
...deps,

src/analytics/analytics.spec.ts

+1-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { TestBed } from '@angular/core/testing';
2-
import { Analytics, getAnalytics, isSupported, provideAnalytics } from '@angular/fire/analytics';
2+
import { Analytics, getAnalytics, provideAnalytics } from '@angular/fire/analytics';
33
import { FirebaseApp, getApp, initializeApp, provideFirebaseApp } from '@angular/fire/app';
44
import { COMMON_CONFIG_TOO } from '../test-config';
55
import { rando } from '../utils';
@@ -10,14 +10,6 @@ describe('Analytics', () => {
1010
let providedAnalytics: Analytics;
1111
let appName: string;
1212

13-
beforeAll(done => {
14-
// The APP_INITIALIZER that is making isSupported() sync for DI may not
15-
// be done evaulating by the time we inject from the TestBed. We can
16-
// ensure correct behavior by waiting for the (global) isSuppported() promise
17-
// to resolve.
18-
isSupported().then(() => done());
19-
});
20-
2113
describe('single injection', () => {
2214

2315
beforeEach(() => {

src/analytics/firebase.ts

+2-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/analytics/is-analytics-supported-factory.ts

-19
This file was deleted.

src/analytics/overrides.ts

-4
This file was deleted.

src/auth/auth.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe('Auth', () => {
1919
provideFirebaseApp(() => initializeApp(COMMON_CONFIG, appName)),
2020
provideAuth(() => {
2121
providedAuth = getAuth(getApp(appName));
22-
connectAuthEmulator(providedAuth, `http://localhost:${authEmulatorPort}`);
22+
connectAuthEmulator(providedAuth, `http://localhost:${authEmulatorPort}`, { disableWarnings: true });
2323
return providedAuth;
2424
}),
2525
],

src/compat/analytics/user-tracking.service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isPlatformServer } from '@angular/common';
1+
import { isPlatformBrowser } from '@angular/common';
22
import { Inject, Injectable, NgZone, OnDestroy, PLATFORM_ID } from '@angular/core';
33
import { VERSION } from '@angular/fire';
44
import { AngularFireAuth } from '@angular/fire/compat/auth';
@@ -21,7 +21,7 @@ export class UserTrackingService implements OnDestroy {
2121
zone: NgZone,
2222
) {
2323
firebase.registerVersion('angularfire', VERSION.full, 'compat-user-tracking');
24-
if (!isPlatformServer(platformId)) {
24+
if (isPlatformBrowser(platformId)) {
2525
let resolveInitialized;
2626
this.initialized = zone.runOutsideAngular(() => new Promise(resolve => resolveInitialized = resolve));
2727
this.disposables = [

src/messaging/firebase.ts

+2-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/messaging/is-messaging-supported-factory.ts

-20
This file was deleted.

src/messaging/messaging.module.ts

+9-16
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
1+
import { isPlatformServer } from '@angular/common';
12
import {
2-
APP_INITIALIZER, EnvironmentProviders,
3+
EnvironmentProviders,
34
InjectionToken,
45
Injector,
56
NgModule,
67
NgZone,
78
Optional,
9+
PLATFORM_ID,
810
makeEnvironmentProviders,
911
} from '@angular/core';
1012
import { VERSION, ɵAngularFireSchedulers, ɵgetDefaultInstanceOf } from '@angular/fire';
1113
import { FirebaseApp, FirebaseApps } from '@angular/fire/app';
1214
import { registerVersion } from 'firebase/app';
1315
import { Messaging as FirebaseMessaging } from 'firebase/messaging';
14-
import { isMessagingSupportedFactory } from './is-messaging-supported-factory';
1516
import { MESSAGING_PROVIDER_NAME, Messaging, MessagingInstances } from './messaging';
1617

1718
const PROVIDED_MESSAGING_INSTANCES = new InjectionToken<Messaging[]>('angularfire2.messaging-instances');
1819

19-
export function defaultMessagingInstanceFactory(provided: FirebaseMessaging[]|undefined, defaultApp: FirebaseApp) {
20-
if (!isMessagingSupportedFactory.sync()) { return null; }
20+
export function defaultMessagingInstanceFactory(provided: FirebaseMessaging[]|undefined, defaultApp: FirebaseApp, platformId: object) {
21+
if (isPlatformServer(platformId)) { return null; }
2122
const defaultMessaging = ɵgetDefaultInstanceOf<FirebaseMessaging>(MESSAGING_PROVIDER_NAME, provided, defaultApp);
2223
return defaultMessaging && new Messaging(defaultMessaging);
2324
}
2425

2526
export function messagingInstanceFactory(fn: (injector: Injector) => FirebaseMessaging) {
26-
return (zone: NgZone, injector: Injector) => {
27-
if (!isMessagingSupportedFactory.sync()) { return null; }
27+
return (zone: NgZone, injector: Injector, platformId: object) => {
28+
if (isPlatformServer(platformId)) { return null; }
2829
const messaging = zone.runOutsideAngular(() => fn(injector));
2930
return new Messaging(messaging);
3031
};
@@ -43,18 +44,14 @@ const DEFAULT_MESSAGING_INSTANCE_PROVIDER = {
4344
deps: [
4445
[new Optional(), PROVIDED_MESSAGING_INSTANCES ],
4546
FirebaseApp,
47+
PLATFORM_ID,
4648
]
4749
};
4850

4951
@NgModule({
5052
providers: [
5153
DEFAULT_MESSAGING_INSTANCE_PROVIDER,
5254
MESSAGING_INSTANCES_PROVIDER,
53-
{
54-
provide: APP_INITIALIZER,
55-
useValue: isMessagingSupportedFactory.async,
56-
multi: true,
57-
},
5855
]
5956
})
6057
export class MessagingModule {
@@ -69,18 +66,14 @@ export function provideMessaging(fn: (injector: Injector) => FirebaseMessaging,
6966
return makeEnvironmentProviders([
7067
DEFAULT_MESSAGING_INSTANCE_PROVIDER,
7168
MESSAGING_INSTANCES_PROVIDER,
72-
{
73-
provide: APP_INITIALIZER,
74-
useValue: isMessagingSupportedFactory.async,
75-
multi: true,
76-
},
7769
{
7870
provide: PROVIDED_MESSAGING_INSTANCES,
7971
useFactory: messagingInstanceFactory(fn),
8072
multi: true,
8173
deps: [
8274
NgZone,
8375
Injector,
76+
PLATFORM_ID,
8477
ɵAngularFireSchedulers,
8578
FirebaseApps,
8679
...deps,

src/messaging/messaging.spec.ts

+9-20
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,6 @@ describe('Messaging', () => {
99
let providedMessaging: Messaging;
1010
let appName: string;
1111

12-
beforeAll(done => {
13-
// The APP_INITIALIZER that is making isSupported() sync for DI may not
14-
// be done evaulating by the time we inject from the TestBed. We can
15-
// ensure correct behavior by waiting for the (global) isSuppported() promise
16-
// to resolve.
17-
isSupported().then(() => done());
18-
});
19-
2012
describe('single injection', () => {
2113

2214
beforeEach(() => {
@@ -33,18 +25,15 @@ describe('Messaging', () => {
3325
messaging = TestBed.inject(Messaging);
3426
});
3527

36-
it('should be injectable', done => {
37-
(async () => {
38-
const supported = await isSupported();
39-
if (supported) {
40-
expect(providedMessaging).toBeTruthy();
41-
expect(messaging).toEqual(providedMessaging);
42-
} else {
43-
expect(providedMessaging).toBeUndefined();
44-
expect(messaging).toBeNull();
45-
}
46-
done();
47-
})();
28+
it('should be injectable', async () => {
29+
const supported = await TestBed.runInInjectionContext(isSupported);
30+
if (supported) {
31+
expect(providedMessaging).toBeTruthy();
32+
expect(messaging).toEqual(providedMessaging);
33+
} else {
34+
expect(providedMessaging).toBeUndefined();
35+
expect(messaging).toBeNull();
36+
}
4837
});
4938

5039
});

src/messaging/overrides.ts

-3
This file was deleted.

src/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
},
3838
"dependencies": {
3939
"firebase": "^11.0.2",
40-
"rxfire": "^6.0.5",
40+
"rxfire": "^6.1.0",
4141
"@angular-devkit/schematics": "^19.0.0",
4242
"@schematics/angular": "^19.0.0",
4343
"tslib": "^2.3.0"

0 commit comments

Comments
 (0)