Skip to content

Commit 9dd1d28

Browse files
authored
Merge fb010a6 into b6a9bf0
2 parents b6a9bf0 + fb010a6 commit 9dd1d28

File tree

5 files changed

+60
-53
lines changed

5 files changed

+60
-53
lines changed

packages/firebase/index.d.ts

+22-7
Original file line numberDiff line numberDiff line change
@@ -7617,6 +7617,19 @@ declare namespace firebase.storage {
76177617
md5Hash?: string | null;
76187618
}
76197619

7620+
/**
7621+
* An error returned by the Firebase Storage SDK.
7622+
*/
7623+
interface FirebaseStorageError extends FirebaseError {
7624+
serverResponse: string | null;
7625+
}
7626+
7627+
interface StorageObserver<T> {
7628+
next?: NextFn<T> | null;
7629+
error?: (error: FirebaseStorageError) => void | null;
7630+
complete?: CompleteFn | null;
7631+
}
7632+
76207633
/**
76217634
* Represents the process of uploading an object. Allows you to monitor and
76227635
* manage the upload.
@@ -7630,7 +7643,7 @@ declare namespace firebase.storage {
76307643
/**
76317644
* Equivalent to calling `then(null, onRejected)`.
76327645
*/
7633-
catch(onRejected: (a: Error) => any): Promise<any>;
7646+
catch(onRejected: (error: FirebaseStorageError) => any): Promise<any>;
76347647
/**
76357648
* Listens for events on this task.
76367649
*
@@ -7730,7 +7743,7 @@ declare namespace firebase.storage {
77307743
* The `next` function, which gets called for each item in
77317744
* the event stream, or an observer object with some or all of these three
77327745
* properties (`next`, `error`, `complete`).
7733-
* @param error A function that gets called with an Error
7746+
* @param error A function that gets called with a `FirebaseStorageError`
77347747
* if the event stream ends due to an error.
77357748
* @param complete A function that gets called if the
77367749
* event stream ends normally.
@@ -7743,10 +7756,10 @@ declare namespace firebase.storage {
77437756
on(
77447757
event: firebase.storage.TaskEvent,
77457758
nextOrObserver?:
7746-
| Partial<firebase.Observer<UploadTaskSnapshot>>
7759+
| StorageObserver<UploadTaskSnapshot>
77477760
| null
7748-
| ((a: UploadTaskSnapshot) => any),
7749-
error?: ((a: Error) => any) | null,
7761+
| ((snapshot: UploadTaskSnapshot) => any),
7762+
error?: ((error: FirebaseStorageError) => any) | null,
77507763
complete?: firebase.Unsubscribe | null
77517764
): Function;
77527765
/**
@@ -7771,8 +7784,10 @@ declare namespace firebase.storage {
77717784
* @param onRejected The rejection callback.
77727785
*/
77737786
then(
7774-
onFulfilled?: ((a: firebase.storage.UploadTaskSnapshot) => any) | null,
7775-
onRejected?: ((a: Error) => any) | null
7787+
onFulfilled?:
7788+
| ((snapshot: firebase.storage.UploadTaskSnapshot) => any)
7789+
| null,
7790+
onRejected?: ((error: FirebaseStorageError) => any) | null
77767791
): Promise<any>;
77777792
}
77787793

packages/storage-types/index.d.ts

+19-9
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { FirebaseApp, FirebaseNamespace } from '@firebase/app-types';
19-
import { Observer, Unsubscribe } from '@firebase/util';
18+
import { FirebaseApp } from '@firebase/app-types';
19+
import { CompleteFn, FirebaseError, NextFn, Unsubscribe } from '@firebase/util';
2020

2121
export interface FullMetadata extends UploadMetadata {
2222
bucket: string;
@@ -48,7 +48,7 @@ export interface Reference {
4848
metadata?: UploadMetadata
4949
): UploadTask;
5050
root: Reference;
51-
storage: Storage;
51+
storage: FirebaseStorage;
5252
toString(): string;
5353
updateMetadata(metadata: SettableMetadata): Promise<FullMetadata>;
5454
listAll(): Promise<ListResult>;
@@ -85,24 +85,34 @@ export interface UploadMetadata extends SettableMetadata {
8585
md5Hash?: string | null;
8686
}
8787

88+
interface FirebaseStorageError extends FirebaseError {
89+
serverResponse: string | null;
90+
}
91+
92+
export interface StorageObserver<T> {
93+
next?: NextFn<T> | null;
94+
error?: (error: FirebaseStorageError) => void | null;
95+
complete?: CompleteFn | null;
96+
}
97+
8898
export interface UploadTask {
8999
cancel(): boolean;
90-
catch(onRejected: (a: Error) => any): Promise<any>;
100+
catch(onRejected: (error: FirebaseStorageError) => any): Promise<any>;
91101
on(
92102
event: TaskEvent,
93103
nextOrObserver?:
94-
| Partial<Observer<UploadTaskSnapshot>>
104+
| StorageObserver<UploadTaskSnapshot>
95105
| null
96-
| ((a: UploadTaskSnapshot) => any),
97-
error?: ((a: Error) => any) | null,
106+
| ((snapshot: UploadTaskSnapshot) => any),
107+
error?: ((a: FirebaseStorageError) => any) | null,
98108
complete?: Unsubscribe | null
99109
): Function;
100110
pause(): boolean;
101111
resume(): boolean;
102112
snapshot: UploadTaskSnapshot;
103113
then(
104-
onFulfilled?: ((a: UploadTaskSnapshot) => any) | null,
105-
onRejected?: ((a: Error) => any) | null
114+
onFulfilled?: ((snapshot: UploadTaskSnapshot) => any) | null,
115+
onRejected?: ((error: FirebaseStorageError) => any) | null
106116
): Promise<any>;
107117
}
108118

packages/storage/src/implementation/error.ts

+16-34
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { FirebaseError } from '@firebase/util';
12
/**
23
* @license
34
* Copyright 2017 Google LLC
@@ -16,53 +17,34 @@
1617
*/
1718
import { CONFIG_STORAGE_BUCKET_KEY } from './constants';
1819

19-
export class FirebaseStorageError implements Error {
20-
private code_: string;
21-
private message_: string;
22-
private serverResponse_: string | null;
23-
private name_: string;
20+
export class FirebaseStorageError extends FirebaseError {
21+
customData: { serverResponse: string | null } = { serverResponse: null };
2422

2523
constructor(code: Code, message: string) {
26-
this.code_ = prependCode(code);
27-
this.message_ = 'Firebase Storage: ' + message;
28-
this.serverResponse_ = null;
29-
this.name_ = 'FirebaseError';
30-
}
31-
32-
codeProp(): string {
33-
return this.code;
24+
super(prependCode(code), 'Firebase Storage: ' + message);
25+
// Without this, `instanceof FirebaseStorageError`, in tests for example,
26+
// returns false.
27+
Object.setPrototypeOf(this, FirebaseStorageError.prototype);
3428
}
3529

3630
codeEquals(code: Code): boolean {
37-
return prependCode(code) === this.codeProp();
38-
}
39-
40-
serverResponseProp(): string | null {
41-
return this.serverResponse_;
42-
}
43-
44-
setServerResponseProp(serverResponse: string | null): void {
45-
this.serverResponse_ = serverResponse;
46-
}
47-
48-
get name(): string {
49-
return this.name_;
50-
}
51-
52-
get code(): string {
53-
return this.code_;
31+
return prependCode(code) === this.code;
5432
}
5533

5634
get message(): string {
57-
if (this.serverResponse_) {
58-
return this.message_ + '\n' + this.serverResponse_;
35+
if (this.customData.serverResponse) {
36+
return this.message + '\n' + this.customData.serverResponse;
5937
} else {
60-
return this.message_;
38+
return this.message;
6139
}
6240
}
6341

6442
get serverResponse(): null | string {
65-
return this.serverResponse_;
43+
return this.customData.serverResponse;
44+
}
45+
46+
set serverResponse(serverResponse: string | null) {
47+
this.customData.serverResponse = serverResponse;
6648
}
6749
}
6850

packages/storage/src/implementation/request.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ class NetworkRequest<T> implements Request<T> {
188188
} else {
189189
if (xhr !== null) {
190190
const err = unknown();
191-
err.setServerResponseProp(xhr.getResponseText());
191+
err.serverResponse = xhr.getResponseText();
192192
if (self.errorCallback_) {
193193
reject(self.errorCallback_(xhr, err));
194194
} else {

packages/storage/src/implementation/requests.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ export function sharedErrorHandler(
114114
}
115115
}
116116
}
117-
newErr.setServerResponseProp(err.serverResponseProp());
117+
newErr.serverResponse = err.serverResponse;
118118
return newErr;
119119
}
120120
return errorHandler;
@@ -133,7 +133,7 @@ export function objectErrorHandler(
133133
if (xhr.getStatus() === 404) {
134134
newErr = objectNotFound(location.path);
135135
}
136-
newErr.setServerResponseProp(err.serverResponseProp());
136+
newErr.serverResponse = err.serverResponse;
137137
return newErr;
138138
}
139139
return errorHandler;

0 commit comments

Comments
 (0)