Skip to content

Commit a8ff3db

Browse files
authored
Change Error to FirestoreError (#3418)
1 parent 3d9b5a5 commit a8ff3db

File tree

11 files changed

+49
-39
lines changed

11 files changed

+49
-39
lines changed

.changeset/thin-buses-fail.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@firebase/firestore': minor
3+
'@firebase/firestore-types': minor
4+
---
5+
6+
Use FirestoreError instead of Error in onSnapshot*() error callbacks.

packages/firebase/index.d.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -8215,7 +8215,7 @@ declare namespace firebase.firestore {
82158215
*/
82168216
onSnapshotsInSync(observer: {
82178217
next?: (value: void) => void;
8218-
error?: (error: Error) => void;
8218+
error?: (error: FirestoreError) => void;
82198219
complete?: () => void;
82208220
}): () => void;
82218221

@@ -8843,7 +8843,7 @@ declare namespace firebase.firestore {
88438843
options: SnapshotListenOptions,
88448844
observer: {
88458845
next?: (snapshot: DocumentSnapshot<T>) => void;
8846-
error?: (error: Error) => void;
8846+
error?: (error: FirestoreError) => void;
88478847
complete?: () => void;
88488848
}
88498849
): () => void;
@@ -8864,7 +8864,7 @@ declare namespace firebase.firestore {
88648864
*/
88658865
onSnapshot(
88668866
onNext: (snapshot: DocumentSnapshot<T>) => void,
8867-
onError?: (error: Error) => void,
8867+
onError?: (error: FirestoreError) => void,
88688868
onCompletion?: () => void
88698869
): () => void;
88708870
/**
@@ -8886,7 +8886,7 @@ declare namespace firebase.firestore {
88868886
onSnapshot(
88878887
options: SnapshotListenOptions,
88888888
onNext: (snapshot: DocumentSnapshot<T>) => void,
8889-
onError?: (error: Error) => void,
8889+
onError?: (error: FirestoreError) => void,
88908890
onCompletion?: () => void
88918891
): () => void;
88928892

@@ -9273,7 +9273,7 @@ declare namespace firebase.firestore {
92739273
*/
92749274
onSnapshot(observer: {
92759275
next?: (snapshot: QuerySnapshot<T>) => void;
9276-
error?: (error: Error) => void;
9276+
error?: (error: FirestoreError) => void;
92779277
complete?: () => void;
92789278
}): () => void;
92799279
/**
@@ -9294,7 +9294,7 @@ declare namespace firebase.firestore {
92949294
options: SnapshotListenOptions,
92959295
observer: {
92969296
next?: (snapshot: QuerySnapshot<T>) => void;
9297-
error?: (error: Error) => void;
9297+
error?: (error: FirestoreError) => void;
92989298
complete?: () => void;
92999299
}
93009300
): () => void;
@@ -9316,7 +9316,7 @@ declare namespace firebase.firestore {
93169316
*/
93179317
onSnapshot(
93189318
onNext: (snapshot: QuerySnapshot<T>) => void,
9319-
onError?: (error: Error) => void,
9319+
onError?: (error: FirestoreError) => void,
93209320
onCompletion?: () => void
93219321
): () => void;
93229322
/**
@@ -9339,7 +9339,7 @@ declare namespace firebase.firestore {
93399339
onSnapshot(
93409340
options: SnapshotListenOptions,
93419341
onNext: (snapshot: QuerySnapshot<T>) => void,
9342-
onError?: (error: Error) => void,
9342+
onError?: (error: FirestoreError) => void,
93439343
onCompletion?: () => void
93449344
): () => void;
93459345

packages/firestore-types/index.d.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ export class FirebaseFirestore {
8787

8888
onSnapshotsInSync(observer: {
8989
next?: (value: void) => void;
90-
error?: (error: Error) => void;
90+
error?: (error: FirestoreError) => void;
9191
complete?: () => void;
9292
}): () => void;
9393
onSnapshotsInSync(onSync: () => void): () => void;
@@ -235,19 +235,19 @@ export class DocumentReference<T = DocumentData> {
235235
options: SnapshotListenOptions,
236236
observer: {
237237
next?: (snapshot: DocumentSnapshot<T>) => void;
238-
error?: (error: Error) => void;
238+
error?: (error: FirestoreError) => void;
239239
complete?: () => void;
240240
}
241241
): () => void;
242242
onSnapshot(
243243
onNext: (snapshot: DocumentSnapshot<T>) => void,
244-
onError?: (error: Error) => void,
244+
onError?: (error: FirestoreError) => void,
245245
onCompletion?: () => void
246246
): () => void;
247247
onSnapshot(
248248
options: SnapshotListenOptions,
249249
onNext: (snapshot: DocumentSnapshot<T>) => void,
250-
onError?: (error: Error) => void,
250+
onError?: (error: FirestoreError) => void,
251251
onCompletion?: () => void
252252
): () => void;
253253

@@ -338,26 +338,26 @@ export class Query<T = DocumentData> {
338338

339339
onSnapshot(observer: {
340340
next?: (snapshot: QuerySnapshot<T>) => void;
341-
error?: (error: Error) => void;
341+
error?: (error: FirestoreError) => void;
342342
complete?: () => void;
343343
}): () => void;
344344
onSnapshot(
345345
options: SnapshotListenOptions,
346346
observer: {
347347
next?: (snapshot: QuerySnapshot<T>) => void;
348-
error?: (error: Error) => void;
348+
error?: (error: FirestoreError) => void;
349349
complete?: () => void;
350350
}
351351
): () => void;
352352
onSnapshot(
353353
onNext: (snapshot: QuerySnapshot<T>) => void,
354-
onError?: (error: Error) => void,
354+
onError?: (error: FirestoreError) => void,
355355
onCompletion?: () => void
356356
): () => void;
357357
onSnapshot(
358358
options: SnapshotListenOptions,
359359
onNext: (snapshot: QuerySnapshot<T>) => void,
360-
onError?: (error: Error) => void,
360+
onError?: (error: FirestoreError) => void,
361361
onCompletion?: () => void
362362
): () => void;
363363

packages/firestore/exp/test/shim.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ export class FirebaseFirestore implements legacy.FirebaseFirestore {
153153

154154
onSnapshotsInSync(observer: {
155155
next?: (value: void) => void;
156-
error?: (error: Error) => void;
156+
error?: (error: legacy.FirestoreError) => void;
157157
complete?: () => void;
158158
}): () => void;
159159
onSnapshotsInSync(onSync: () => void): () => void;
@@ -370,19 +370,19 @@ export class DocumentReference<T = legacy.DocumentData>
370370
options: legacy.SnapshotListenOptions,
371371
observer: {
372372
next?: (snapshot: DocumentSnapshot<T>) => void;
373-
error?: (error: Error) => void;
373+
error?: (error: legacy.FirestoreError) => void;
374374
complete?: () => void;
375375
}
376376
): () => void;
377377
onSnapshot(
378378
onNext: (snapshot: DocumentSnapshot<T>) => void,
379-
onError?: (error: Error) => void,
379+
onError?: (error: legacy.FirestoreError) => void,
380380
onCompletion?: () => void
381381
): () => void;
382382
onSnapshot(
383383
options: legacy.SnapshotListenOptions,
384384
onNext: (snapshot: DocumentSnapshot<T>) => void,
385-
onError?: (error: Error) => void,
385+
onError?: (error: legacy.FirestoreError) => void,
386386
onCompletion?: () => void
387387
): () => void;
388388
onSnapshot(...args: any): () => void {
@@ -530,26 +530,26 @@ export class Query<T = legacy.DocumentData> implements legacy.Query<T> {
530530

531531
onSnapshot(observer: {
532532
next?: (snapshot: QuerySnapshot<T>) => void;
533-
error?: (error: Error) => void;
533+
error?: (error: legacy.FirestoreError) => void;
534534
complete?: () => void;
535535
}): () => void;
536536
onSnapshot(
537537
options: legacy.SnapshotListenOptions,
538538
observer: {
539539
next?: (snapshot: QuerySnapshot<T>) => void;
540-
error?: (error: Error) => void;
540+
error?: (error: legacy.FirestoreError) => void;
541541
complete?: () => void;
542542
}
543543
): () => void;
544544
onSnapshot(
545545
onNext: (snapshot: QuerySnapshot<T>) => void,
546-
onError?: (error: Error) => void,
546+
onError?: (error: legacy.FirestoreError) => void,
547547
onCompletion?: () => void
548548
): () => void;
549549
onSnapshot(
550550
options: legacy.SnapshotListenOptions,
551551
onNext: (snapshot: QuerySnapshot<T>) => void,
552-
onError?: (error: Error) => void,
552+
onError?: (error: legacy.FirestoreError) => void,
553553
onCompletion?: () => void
554554
): () => void;
555555
onSnapshot(...args: any): () => void {

packages/firestore/src/api/observer.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@
1616
*/
1717

1818
import { JsonObject } from '../model/object_value';
19+
import { FirestoreError } from '../util/error';
1920

2021
/**
2122
* Observer/Subscribe interfaces.
2223
*/
2324
export type NextFn<T> = (value: T) => void;
24-
export type ErrorFn = (error: Error) => void;
25+
export type ErrorFn = (error: FirestoreError) => void;
2526
export type CompleteFn = () => void;
2627

2728
// Allow for any of the Observer methods to be undefined.

packages/firestore/src/api/user_data_reader.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ export class ParseContext {
262262
return this.contextWith({ path: undefined, arrayElement: true });
263263
}
264264

265-
createError(reason: string): Error {
265+
createError(reason: string): FirestoreError {
266266
return createError(
267267
reason,
268268
this.settings.methodName,
@@ -832,7 +832,7 @@ function createError(
832832
hasConverter: boolean,
833833
path?: FieldPath,
834834
targetDoc?: DocumentKey
835-
): Error {
835+
): FirestoreError {
836836
const hasPath = path && !path.isEmpty();
837837
const hasDocument = targetDoc !== undefined;
838838
let message = `Function ${methodName}() called with invalid data`;

packages/firestore/src/core/event_manager.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717

1818
import { debugAssert, debugCast } from '../util/assert';
19+
import { FirestoreError } from '../util/error';
1920
import { EventHandler } from '../util/misc';
2021
import { ObjectMap } from '../util/obj_map';
2122
import { canonifyQuery, Query, queryEquals, stringifyQuery } from './query';
@@ -37,7 +38,7 @@ class QueryListenersInfo {
3738
*/
3839
export interface Observer<T> {
3940
next: EventHandler<T>;
40-
error: EventHandler<Error>;
41+
error: EventHandler<FirestoreError>;
4142
}
4243

4344
/**
@@ -175,7 +176,7 @@ export function eventManagerOnWatchChange(
175176
export function eventManagerOnWatchError(
176177
eventManager: EventManager,
177178
query: Query,
178-
error: Error
179+
error: FirestoreError
179180
): void {
180181
const eventManagerImpl = debugCast(eventManager, EventManagerImpl);
181182

@@ -323,7 +324,7 @@ export class QueryListener {
323324
return raisedEvent;
324325
}
325326

326-
onError(error: Error): void {
327+
onError(error: FirestoreError): void {
327328
this.queryObserver.error(error);
328329
}
329330

packages/firestore/src/core/sync_engine.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ export interface SyncEngineListener {
156156
onWatchChange(snapshots: ViewSnapshot[]): void;
157157

158158
/** Handles the failure of a query. */
159-
onWatchError(query: Query, error: Error): void;
159+
onWatchError(query: Query, error: FirestoreError): void;
160160

161161
/** Handles a change in online state. */
162162
onOnlineStateChange(onlineState: OnlineState): void;
@@ -817,7 +817,7 @@ function addMutationCallback(
817817
export function processUserCallback(
818818
syncEngine: SyncEngine,
819819
batchId: BatchId,
820-
error: Error | null
820+
error: FirestoreError | null
821821
): void {
822822
const syncEngineImpl = debugCast(syncEngine, SyncEngineImpl);
823823
let newCallbacks =
@@ -848,7 +848,7 @@ export function processUserCallback(
848848
function removeAndCleanupTarget(
849849
syncEngineImpl: SyncEngineImpl,
850850
targetId: number,
851-
error: Error | null = null
851+
error: FirestoreError | null = null
852852
): void {
853853
syncEngineImpl.sharedClientState.removeLocalQueryTarget(targetId);
854854

packages/firestore/src/util/async_observer.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import { Observer } from '../core/event_manager';
1919
import { EventHandler } from './misc';
20+
import { FirestoreError } from './error';
2021

2122
/*
2223
* A wrapper implementation of Observer<T> that will dispatch events
@@ -38,7 +39,7 @@ export class AsyncObserver<T> implements Observer<T> {
3839
}
3940
}
4041

41-
error(error: Error): void {
42+
error(error: FirestoreError): void {
4243
if (this.observer.error) {
4344
this.scheduleEvent(this.observer.error, error);
4445
} else {

packages/firestore/src/util/async_queue.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ export class AsyncQueue {
220220
private delayedOperations: Array<DelayedOperation<unknown>> = [];
221221

222222
// visible for testing
223-
failure: Error | null = null;
223+
failure: FirestoreError | null = null;
224224

225225
// Flag set while there's an outstanding AsyncQueue operation, used for
226226
// assertion sanity-checks.

packages/firestore/test/unit/core/event_manager.test.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { View } from '../../../src/core/view';
3232
import { ChangeType, ViewSnapshot } from '../../../src/core/view_snapshot';
3333
import { documentKeySet } from '../../../src/model/collections';
3434
import { DocumentSet } from '../../../src/model/document_set';
35+
import { Code, FirestoreError } from '../../../src/util/error';
3536
import { addEqualityMatcher } from '../../util/equality_matcher';
3637
import {
3738
ackTarget,
@@ -164,7 +165,7 @@ describe('QueryListener', () => {
164165
function queryListener(
165166
query: Query,
166167
events?: ViewSnapshot[],
167-
errors?: Error[],
168+
errors?: FirestoreError[],
168169
options?: ListenOptions
169170
): QueryListener {
170171
return new QueryListener(
@@ -175,7 +176,7 @@ describe('QueryListener', () => {
175176
events.push(snap);
176177
}
177178
},
178-
error: (error: Error) => {
179+
error: (error: FirestoreError) => {
179180
if (errors !== undefined) {
180181
errors.push(error);
181182
}
@@ -228,11 +229,11 @@ describe('QueryListener', () => {
228229
});
229230

230231
it('raises error event', () => {
231-
const events: Error[] = [];
232+
const events: FirestoreError[] = [];
232233
const query1 = query('rooms/Eros');
233234

234235
const listener = queryListener(query1, [], events);
235-
const error = new Error('bad');
236+
const error = new FirestoreError(Code.UNKNOWN, 'bad');
236237

237238
listener.onError(error);
238239
expect(events[0]).to.deep.equal(error);

0 commit comments

Comments
 (0)