Skip to content

Commit 6b1b0ca

Browse files
authoredDec 12, 2024··
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

Lines changed: 6 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

Lines changed: 1 addition & 1 deletion
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

Lines changed: 9 additions & 17 deletions
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

Lines changed: 1 addition & 9 deletions
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

Lines changed: 2 additions & 4 deletions
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

Lines changed: 0 additions & 19 deletions
This file was deleted.

‎src/analytics/overrides.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.

‎src/auth/auth.spec.ts

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 2 additions & 4 deletions
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

Lines changed: 0 additions & 20 deletions
This file was deleted.

‎src/messaging/messaging.module.ts

Lines changed: 9 additions & 16 deletions
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

Lines changed: 9 additions & 20 deletions
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

Lines changed: 0 additions & 3 deletions
This file was deleted.

‎src/package.json

Lines changed: 1 addition & 1 deletion
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"

‎src/remote-config/firebase.ts

Lines changed: 2 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/remote-config/is-remote-config-supported-factory.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

‎src/remote-config/overrides.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.

‎src/remote-config/remote-config.module.ts

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,35 @@
1+
import { isPlatformServer } 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 { registerVersion } from 'firebase/app';
1415
import { RemoteConfig as FirebaseRemoteConfig } from 'firebase/remote-config';
15-
import { isRemoteConfigSupportedFactory } from './is-remote-config-supported-factory';
1616
import { REMOTE_CONFIG_PROVIDER_NAME, RemoteConfig, RemoteConfigInstances } from './remote-config';
1717

1818
export const PROVIDED_REMOTE_CONFIG_INSTANCES = new InjectionToken<RemoteConfig[]>('angularfire2.remote-config-instances');
1919

2020
export function defaultRemoteConfigInstanceFactory(
2121
provided: FirebaseRemoteConfig[]|undefined,
2222
defaultApp: FirebaseApp,
23+
platformId: object,
2324
) {
24-
if (!isRemoteConfigSupportedFactory.sync()) { return null; }
25+
if (isPlatformServer(platformId)) { return null; }
2526
const defaultRemoteConfig = ɵgetDefaultInstanceOf<FirebaseRemoteConfig>(REMOTE_CONFIG_PROVIDER_NAME, provided, defaultApp);
2627
return defaultRemoteConfig && new RemoteConfig(defaultRemoteConfig);
2728
}
2829

2930
export function remoteConfigInstanceFactory(fn: (injector: Injector) => FirebaseRemoteConfig) {
30-
return (zone: NgZone, injector: Injector) => {
31-
if (!isRemoteConfigSupportedFactory.sync()) { return null; }
31+
return (zone: NgZone, injector: Injector, platformId: object) => {
32+
if (isPlatformServer(platformId)) { return null; }
3233
const remoteConfig = zone.runOutsideAngular(() => fn(injector));
3334
return new RemoteConfig(remoteConfig);
3435
};
@@ -47,18 +48,14 @@ const DEFAULT_REMOTE_CONFIG_INSTANCE_PROVIDER = {
4748
deps: [
4849
[new Optional(), PROVIDED_REMOTE_CONFIG_INSTANCES ],
4950
FirebaseApp,
51+
PLATFORM_ID,
5052
]
5153
};
5254

5355
@NgModule({
5456
providers: [
5557
DEFAULT_REMOTE_CONFIG_INSTANCE_PROVIDER,
5658
REMOTE_CONFIG_INSTANCES_PROVIDER,
57-
{
58-
provide: APP_INITIALIZER,
59-
useValue: isRemoteConfigSupportedFactory.async,
60-
multi: true,
61-
},
6259
]
6360
})
6461
export class RemoteConfigModule {
@@ -75,18 +72,14 @@ export function provideRemoteConfig(
7572
return makeEnvironmentProviders([
7673
DEFAULT_REMOTE_CONFIG_INSTANCE_PROVIDER,
7774
REMOTE_CONFIG_INSTANCES_PROVIDER,
78-
{
79-
provide: APP_INITIALIZER,
80-
useValue: isRemoteConfigSupportedFactory.async,
81-
multi: true,
82-
},
8375
{
8476
provide: PROVIDED_REMOTE_CONFIG_INSTANCES,
8577
useFactory: remoteConfigInstanceFactory(fn),
8678
multi: true,
8779
deps: [
8880
NgZone,
8981
Injector,
82+
PLATFORM_ID,
9083
ɵAngularFireSchedulers,
9184
FirebaseApps,
9285
...deps,

‎src/remote-config/remote-config.spec.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { TestBed } from '@angular/core/testing';
22
import { FirebaseApp, getApp, initializeApp, provideFirebaseApp } from '@angular/fire/app';
3-
import { RemoteConfig, getRemoteConfig, isSupported, provideRemoteConfig } from '@angular/fire/remote-config';
3+
import { RemoteConfig, getRemoteConfig, provideRemoteConfig } from '@angular/fire/remote-config';
44
import { COMMON_CONFIG } from '../test-config';
55
import { rando } from '../utils';
66

@@ -10,14 +10,6 @@ describe('RemoteConfig', () => {
1010
let providedRemoteConfig: RemoteConfig;
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(() => {

‎tools/build.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,7 @@ ${exportedZoneWrappedFns}
6464
await writeFile(filePath, fileOutput);
6565
};
6666
return Promise.all([
67-
reexport('analytics', 'firebase', 'firebase/analytics', tsKeys<typeof import('firebase/analytics')>(), {
68-
isSupported: { override: true },
69-
}),
67+
reexport('analytics', 'firebase', 'firebase/analytics', tsKeys<typeof import('firebase/analytics')>()),
7068
reexport('app', 'firebase', 'firebase/app', tsKeys<typeof import('firebase/app')>()),
7169
reexport('app-check', 'firebase', 'firebase/app-check', tsKeys<typeof import('firebase/app-check')>()),
7270
reexport('auth', 'rxfire', 'rxfire/auth', tsKeys<typeof import('rxfire/auth')>()),
@@ -91,8 +89,8 @@ ${exportedZoneWrappedFns}
9189
}),
9290
reexport('functions', 'firebase', 'firebase/functions', tsKeys<typeof import('firebase/functions')>()),
9391
reexport('messaging', 'firebase', 'firebase/messaging', tsKeys<typeof import('firebase/messaging')>(), {
94-
onMessage: { blockUntilFirst: false },
95-
isSupported: { override: true },
92+
isSupported: { blockUntilFirst: false },
93+
onMessage: { blockUntilFirst: false }
9694
}),
9795
reexport('remote-config', 'rxfire', 'rxfire/remote-config', tsKeys<typeof import('rxfire/remote-config')>(), {
9896
getValue: { exportName: 'getValueChanges' },
@@ -101,9 +99,7 @@ ${exportedZoneWrappedFns}
10199
getBoolean: { exportName: 'getBooleanChanges' },
102100
getAll: { exportName: 'getAllChanges' },
103101
}),
104-
reexport('remote-config', 'firebase', 'firebase/remote-config', tsKeys<typeof import('firebase/remote-config')>(), {
105-
isSupported: { override: true },
106-
}),
102+
reexport('remote-config', 'firebase', 'firebase/remote-config', tsKeys<typeof import('firebase/remote-config')>()),
107103
reexport('storage', 'rxfire', 'rxfire/storage', tsKeys<typeof import('rxfire/storage')>(), {
108104
getDownloadURL: null,
109105
getMetadata: null,

‎tsconfig.build.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"compilerOptions": {
66
"outDir": "tools",
77
"skipLibCheck": true,
8-
"lib": ["es2019"],
8+
"lib": ["es2019", "dom"],
99
"module": "commonjs",
1010
"target": "ES2020",
1111
"plugins": [

0 commit comments

Comments
 (0)
Please sign in to comment.