Skip to content

Commit 72b1096

Browse files
authored
Require _delegate in compat classes (#4662)
1 parent 4cb0945 commit 72b1096

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+349
-407
lines changed

common/api-review/auth-exp.api.md

+21-16
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,10 @@ export class EmailAuthProvider implements AuthProvider {
216216
readonly providerId = ProviderId.PASSWORD;
217217
}
218218

219+
// Warning: (ae-forgotten-export) The symbol "BaseOAuthProvider" needs to be exported by the entry point index.d.ts
220+
//
219221
// @public
220-
export class FacebookAuthProvider extends OAuthProvider {
222+
export class FacebookAuthProvider extends BaseOAuthProvider {
221223
constructor();
222224
static credential(accessToken: string): OAuthCredential;
223225
static credentialFromError(error: FirebaseError): OAuthCredential | null;
@@ -255,7 +257,7 @@ export function getMultiFactorResolver(auth: Auth, error: MultiFactorError_2): M
255257
export function getRedirectResult(auth: Auth, resolver?: PopupRedirectResolver): Promise<UserCredential | null>;
256258

257259
// @public
258-
export class GithubAuthProvider extends OAuthProvider {
260+
export class GithubAuthProvider extends BaseOAuthProvider {
259261
constructor();
260262
static credential(accessToken: string): OAuthCredential;
261263
static credentialFromError(error: FirebaseError): OAuthCredential | null;
@@ -265,7 +267,7 @@ export class GithubAuthProvider extends OAuthProvider {
265267
}
266268

267269
// @public
268-
export class GoogleAuthProvider extends OAuthProvider {
270+
export class GoogleAuthProvider extends BaseOAuthProvider {
269271
constructor();
270272
static credential(idToken?: string | null, accessToken?: string | null): OAuthCredential;
271273
static credentialFromError(error: FirebaseError): OAuthCredential | null;
@@ -380,23 +382,13 @@ export interface OAuthCredentialOptions {
380382
}
381383

382384
// @public
383-
export class OAuthProvider implements AuthProvider {
384-
constructor(providerId: string);
385-
addScope(scope: string): AuthProvider;
385+
export class OAuthProvider extends BaseOAuthProvider {
386386
credential(params: OAuthCredentialOptions): OAuthCredential;
387387
static credentialFromError(error: FirebaseError): OAuthCredential | null;
388388
// (undocumented)
389389
static credentialFromJSON(json: object | string): OAuthCredential;
390390
static credentialFromResult(userCredential: UserCredential): OAuthCredential | null;
391-
// @internal (undocumented)
392-
defaultLanguageCode: string | null;
393-
getCustomParameters(): CustomParameters;
394-
getScopes(): string[];
395-
// (undocumented)
396-
readonly providerId: string;
397-
setCustomParameters(customOAuthParameters: CustomParameters): AuthProvider;
398-
setDefaultLanguage(languageCode: string | null): void;
399-
}
391+
}
400392

401393
// @public
402394
export function onAuthStateChanged(auth: Auth, nextOrObserver: NextOrObserver<User>, error?: ErrorFn, completed?: CompleteFn): Unsubscribe;
@@ -566,6 +558,19 @@ export class RecaptchaVerifier implements ApplicationVerifierInternal {
566558
// @public
567559
export function reload(user: User): Promise<void>;
568560

561+
// Warning: (ae-forgotten-export) The symbol "FederatedAuthProvider" needs to be exported by the entry point index.d.ts
562+
//
563+
// @public
564+
export class SAMLAuthProvider extends FederatedAuthProvider {
565+
constructor(providerId: string);
566+
// (undocumented)
567+
static credentialFromError(error: FirebaseError): AuthCredential | null;
568+
// (undocumented)
569+
static credentialFromJSON(json: string | object): AuthCredential;
570+
// (undocumented)
571+
static credentialFromResult(userCredential: UserCredential): AuthCredential | null;
572+
}
573+
569574
// @public
570575
export function sendEmailVerification(user: User, actionCodeSettings?: ActionCodeSettings | null): Promise<void>;
571576

@@ -626,7 +631,7 @@ export function signInWithRedirect(auth: Auth, provider: AuthProvider, resolver?
626631
export function signOut(auth: Auth): Promise<void>;
627632

628633
// @public
629-
export class TwitterAuthProvider extends OAuthProvider {
634+
export class TwitterAuthProvider extends BaseOAuthProvider {
630635
constructor();
631636
static credential(token: string, secret: string): OAuthCredential;
632637
static credentialFromError(error: FirebaseError): OAuthCredential | null;

common/api-review/firestore-exp.api.md

+6
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ export class CollectionReference<T = DocumentData> extends Query<T> {
5353
get path(): string;
5454
// (undocumented)
5555
readonly type = "collection";
56+
withConverter(converter: null): CollectionReference<DocumentData>;
57+
// (undocumented)
5658
withConverter<U>(converter: FirestoreDataConverter<U>): CollectionReference<U>;
5759
}
5860

@@ -101,6 +103,8 @@ export class DocumentReference<T = DocumentData> {
101103
get parent(): CollectionReference<T>;
102104
get path(): string;
103105
readonly type = "document";
106+
withConverter(converter: null): DocumentReference<DocumentData>;
107+
// (undocumented)
104108
withConverter<U>(converter: FirestoreDataConverter<U>): DocumentReference<U>;
105109
}
106110

@@ -318,6 +322,8 @@ export class Query<T = DocumentData> {
318322
protected constructor();
319323
readonly firestore: FirebaseFirestore;
320324
readonly type: 'query' | 'collection';
325+
withConverter(converter: null): Query<DocumentData>;
326+
// (undocumented)
321327
withConverter<U>(converter: FirestoreDataConverter<U>): Query<U>;
322328
}
323329

common/api-review/firestore-lite.api.md

+6
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ export class CollectionReference<T = DocumentData> extends Query<T> {
4747
get path(): string;
4848
// (undocumented)
4949
readonly type = "collection";
50+
withConverter(converter: null): CollectionReference<DocumentData>;
51+
// (undocumented)
5052
withConverter<U>(converter: FirestoreDataConverter<U>): CollectionReference<U>;
5153
}
5254

@@ -81,6 +83,8 @@ export class DocumentReference<T = DocumentData> {
8183
get parent(): CollectionReference<T>;
8284
get path(): string;
8385
readonly type = "document";
86+
withConverter(converter: null): DocumentReference<DocumentData>;
87+
// (undocumented)
8488
withConverter<U>(converter: FirestoreDataConverter<U>): DocumentReference<U>;
8589
}
8690

@@ -195,6 +199,8 @@ export class Query<T = DocumentData> {
195199
protected constructor();
196200
readonly firestore: FirebaseFirestore;
197201
readonly type: 'query' | 'collection';
202+
withConverter(converter: null): Query<DocumentData>;
203+
// (undocumented)
198204
withConverter<U>(converter: FirestoreDataConverter<U>): Query<U>;
199205
}
200206

packages-exp/analytics-compat/src/index.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
* limitations under the License.
1616
*/
1717

18-
import firebase, { _FirebaseNamespace } from '@firebase/app-compat';
18+
import firebase, {
19+
_FirebaseNamespace,
20+
FirebaseApp
21+
} from '@firebase/app-compat';
1922
import { FirebaseAnalytics } from '@firebase/analytics-types';
2023
import { name, version } from '../package.json';
2124
import { AnalyticsService } from './service';
@@ -25,7 +28,6 @@ import {
2528
ComponentType,
2629
InstanceFactory
2730
} from '@firebase/component';
28-
import { FirebaseApp } from '@firebase/app-types';
2931
import {
3032
settings as settingsExp,
3133
isSupported as isSupportedExp

packages-exp/analytics-compat/src/service.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616
*/
1717
import { expect, use } from 'chai';
1818
import { AnalyticsService } from './service';
19-
import { firebase } from '@firebase/app-compat';
20-
import { FirebaseApp } from '@firebase/app-types';
19+
import { firebase, FirebaseApp } from '@firebase/app-compat';
2120
import * as analyticsExp from '@firebase/analytics-exp';
2221
import { stub, match, SinonStub } from 'sinon';
2322
import * as sinonChai from 'sinon-chai';

packages-exp/analytics-compat/src/service.ts

+8-13
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
EventParams,
2222
FirebaseAnalytics
2323
} from '@firebase/analytics-types';
24-
import { FirebaseApp } from '@firebase/app-types';
2524
import {
2625
Analytics as AnalyticsServiceExp,
2726
logEvent as logEventExp,
@@ -30,42 +29,38 @@ import {
3029
setUserId as setUserIdExp,
3130
setUserProperties as setUserPropertiesExp
3231
} from '@firebase/analytics-exp';
32+
import { _FirebaseService, FirebaseApp } from '@firebase/app-compat';
3333

34-
export class AnalyticsService implements FirebaseAnalytics {
34+
export class AnalyticsService implements FirebaseAnalytics, _FirebaseService {
3535
constructor(
3636
public app: FirebaseApp,
37-
private _analyticsServiceExp: AnalyticsServiceExp
37+
readonly _delegate: AnalyticsServiceExp
3838
) {}
3939

4040
logEvent(
4141
eventName: string,
4242
eventParams?: EventParams | CustomParams,
4343
options?: AnalyticsCallOptions
4444
): void {
45-
logEventExp(
46-
this._analyticsServiceExp,
47-
eventName as '',
48-
eventParams,
49-
options
50-
);
45+
logEventExp(this._delegate, eventName as '', eventParams, options);
5146
}
5247

5348
setCurrentScreen(screenName: string, options?: AnalyticsCallOptions): void {
54-
setCurrentScreenExp(this._analyticsServiceExp, screenName, options);
49+
setCurrentScreenExp(this._delegate, screenName, options);
5550
}
5651

5752
setUserId(id: string, options?: AnalyticsCallOptions): void {
58-
setUserIdExp(this._analyticsServiceExp, id, options);
53+
setUserIdExp(this._delegate, id, options);
5954
}
6055

6156
setUserProperties(
6257
properties: CustomParams,
6358
options?: AnalyticsCallOptions
6459
): void {
65-
setUserPropertiesExp(this._analyticsServiceExp, properties, options);
60+
setUserPropertiesExp(this._delegate, properties, options);
6661
}
6762

6863
setAnalyticsCollectionEnabled(enabled: boolean): void {
69-
setAnalyticsCollectionEnabledExp(this._analyticsServiceExp, enabled);
64+
setAnalyticsCollectionEnabledExp(this._delegate, enabled);
7065
}
7166
}

packages-exp/app-compat/src/firebaseApp.ts

+16-15
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@ import {
3030
_FirebaseAppInternal as _FirebaseAppExp
3131
} from '@firebase/app-exp';
3232
import { _FirebaseService, _FirebaseNamespace } from './types';
33+
import { Compat } from '@firebase/util';
3334

3435
// eslint-disable-next-line @typescript-eslint/naming-convention
35-
export interface _FirebaseApp {
36+
export interface _FirebaseApp extends Compat<_FirebaseAppExp> {
3637
/**
3738
* The (read-only) name (identifier) for this App. '[DEFAULT]' is the default
3839
* App.
@@ -62,41 +63,41 @@ export class FirebaseAppImpl implements _FirebaseApp {
6263
private container: ComponentContainer;
6364

6465
constructor(
65-
private readonly app: _FirebaseAppExp,
66+
readonly _delegate: _FirebaseAppExp,
6667
private readonly firebase: _FirebaseNamespace
6768
) {
6869
// add itself to container
6970
_addComponent(
70-
app,
71+
_delegate,
7172
new Component('app-compat', () => this, ComponentType.PUBLIC)
7273
);
7374

74-
this.container = app.container;
75+
this.container = _delegate.container;
7576
}
7677

7778
get automaticDataCollectionEnabled(): boolean {
78-
return this.app.automaticDataCollectionEnabled;
79+
return this._delegate.automaticDataCollectionEnabled;
7980
}
8081

8182
set automaticDataCollectionEnabled(val) {
82-
this.app.automaticDataCollectionEnabled = val;
83+
this._delegate.automaticDataCollectionEnabled = val;
8384
}
8485

8586
get name(): string {
86-
return this.app.name;
87+
return this._delegate.name;
8788
}
8889

8990
get options(): FirebaseOptions {
90-
return this.app.options;
91+
return this._delegate.options;
9192
}
9293

9394
delete(): Promise<void> {
9495
return new Promise<void>(resolve => {
95-
this.app.checkDestroyed();
96+
this._delegate.checkDestroyed();
9697
resolve();
9798
}).then(() => {
9899
this.firebase.INTERNAL.removeApp(this.name);
99-
return deleteApp(this.app);
100+
return deleteApp(this._delegate);
100101
});
101102
}
102103

@@ -118,10 +119,10 @@ export class FirebaseAppImpl implements _FirebaseApp {
118119
name: string,
119120
instanceIdentifier: string = _DEFAULT_ENTRY_NAME
120121
): _FirebaseService {
121-
this.app.checkDestroyed();
122+
this._delegate.checkDestroyed();
122123

123124
// getImmediate will always succeed because _getService is only called for registered components.
124-
return (this.app.container.getProvider(name as Name).getImmediate({
125+
return (this._delegate.container.getProvider(name as Name).getImmediate({
125126
identifier: instanceIdentifier
126127
}) as unknown) as _FirebaseService;
127128
}
@@ -140,7 +141,7 @@ export class FirebaseAppImpl implements _FirebaseApp {
140141
name: string,
141142
instanceIdentifier: string = _DEFAULT_ENTRY_NAME
142143
): void {
143-
this.app.container
144+
this._delegate.container
144145
// eslint-disable-next-line @typescript-eslint/no-explicit-any
145146
.getProvider(name as any)
146147
.clearInstance(instanceIdentifier);
@@ -151,11 +152,11 @@ export class FirebaseAppImpl implements _FirebaseApp {
151152
* @internal
152153
*/
153154
_addComponent(component: Component): void {
154-
_addComponent(this.app, component);
155+
_addComponent(this._delegate, component);
155156
}
156157

157158
_addOrOverwriteComponent(component: Component): void {
158-
_addOrOverwriteComponent(this.app, component);
159+
_addOrOverwriteComponent(this._delegate, component);
159160
}
160161

161162
toJSON(): object {

packages-exp/app-compat/src/lite/firebaseAppLite.ts

+11-9
Original file line numberDiff line numberDiff line change
@@ -24,42 +24,44 @@ import {
2424
_FirebaseAppInternal as FirebaseAppExp
2525
} from '@firebase/app-exp';
2626
import { Component, ComponentType, Name } from '@firebase/component';
27+
import { Compat } from '@firebase/util';
2728

2829
/**
2930
* Global context object for a collection of services using
3031
* a shared authentication state.
3132
*/
32-
export class FirebaseAppLiteImpl implements FirebaseApp {
33+
export class FirebaseAppLiteImpl
34+
implements FirebaseApp, Compat<FirebaseAppExp> {
3335
constructor(
34-
private readonly app: FirebaseAppExp,
36+
readonly _delegate: FirebaseAppExp,
3537
private readonly firebase: _FirebaseNamespace
3638
) {
3739
// add itself to container
3840
_addComponent(
39-
app,
41+
_delegate,
4042
new Component('app-compat', () => this, ComponentType.PUBLIC)
4143
);
4244
}
4345

4446
get automaticDataCollectionEnabled(): boolean {
45-
return this.app.automaticDataCollectionEnabled;
47+
return this._delegate.automaticDataCollectionEnabled;
4648
}
4749

4850
set automaticDataCollectionEnabled(val) {
4951
this.automaticDataCollectionEnabled = val;
5052
}
5153

5254
get name(): string {
53-
return this.app.name;
55+
return this._delegate.name;
5456
}
5557

5658
get options(): FirebaseOptions {
57-
return this.app.options;
59+
return this._delegate.options;
5860
}
5961

6062
delete(): Promise<void> {
6163
this.firebase.INTERNAL.removeApp(this.name);
62-
return deleteApp(this.app);
64+
return deleteApp(this._delegate);
6365
}
6466

6567
/**
@@ -80,10 +82,10 @@ export class FirebaseAppLiteImpl implements FirebaseApp {
8082
name: string,
8183
instanceIdentifier: string = _DEFAULT_ENTRY_NAME
8284
): _FirebaseService {
83-
this.app.checkDestroyed();
85+
this._delegate.checkDestroyed();
8486

8587
// getImmediate will always succeed because _getService is only called for registered components.
86-
return (this.app.container.getProvider(name as Name).getImmediate({
88+
return (this._delegate.container.getProvider(name as Name).getImmediate({
8789
identifier: instanceIdentifier
8890
}) as unknown) as _FirebaseService;
8991
}

0 commit comments

Comments
 (0)