Skip to content

Commit 65a441e

Browse files
fix(storage, web): More explicit interop types (#17828)
* fix(storage, web): More explicit interop types * fix: lint and unneccesary casts * chore: format
1 parent d63c034 commit 65a441e

File tree

2 files changed

+17
-50
lines changed

2 files changed

+17
-50
lines changed

packages/firebase_storage/firebase_storage_web/lib/src/interop/storage.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,7 @@ class StorageReference
141141
/// Returns a [FullMetadata] from this reference at actual location.
142142
Future<FullMetadata> getMetadata() async {
143143
final data = await storage_interop.getMetadata(jsObject).toDart;
144-
return FullMetadata.getInstance(
145-
data! as storage_interop.FullMetadataJsImpl);
144+
return FullMetadata.getInstance(data);
146145
}
147146

148147
/// List items (files) and prefixes (folders) under this storage reference.
@@ -157,7 +156,7 @@ class StorageReference
157156
/// [list()] may fail if there are too many unsupported objects in the bucket.
158157
Future<ListResult> list(ListOptions? options) async {
159158
final data = await storage_interop.list(jsObject, options?.jsObject).toDart;
160-
return ListResult.getInstance(data! as storage_interop.ListResultJsImpl);
159+
return ListResult.getInstance(data);
161160
}
162161

163162
/// List all items (files) and prefixes (folders) under this storage reference.
@@ -173,7 +172,7 @@ class StorageReference
173172
/// too many results.
174173
Future<ListResult> listAll() async {
175174
final data = await storage_interop.listAll(jsObject).toDart;
176-
return ListResult.getInstance(data! as storage_interop.ListResultJsImpl);
175+
return ListResult.getInstance(data);
177176
}
178177

179178
/// Uploads data [blob] to the actual location with optional [metadata].

packages/firebase_storage/firebase_storage_web/lib/src/interop/storage_interop.dart

Lines changed: 14 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,16 @@ external JSPromise<JSString> getDownloadURL(ReferenceJsImpl ref);
4242

4343
@JS()
4444
@staticInterop
45-
external JSPromise /* FullMetadataJsImpl */ getMetadata(ReferenceJsImpl ref);
45+
external JSPromise<FullMetadataJsImpl> getMetadata(ReferenceJsImpl ref);
4646

4747
@JS()
4848
@staticInterop
49-
external JSPromise /* ListResultJsImpl */ list(ReferenceJsImpl ref,
49+
external JSPromise<ListResultJsImpl> list(ReferenceJsImpl ref,
5050
[ListOptionsJsImpl? listOptions]);
5151

5252
@JS()
5353
@staticInterop
54-
external JSPromise /* ListResultJsImpl */ listAll(ReferenceJsImpl ref);
54+
external JSPromise<ListResultJsImpl> listAll(ReferenceJsImpl ref);
5555

5656
@JS()
5757
@staticInterop
@@ -61,7 +61,7 @@ external ReferenceJsImpl ref(JSAny storageOrRef, [JSString? urlOrPath]);
6161

6262
@JS()
6363
@staticInterop
64-
external JSPromise /* FullMetadataJsImpl */ updateMetadata(
64+
external JSPromise<FullMetadataJsImpl> updateMetadata(
6565
ReferenceJsImpl ref, SettableMetadataJsImpl settableMetadata);
6666

6767
@JS()
@@ -81,11 +81,7 @@ extension EmulatorOptionsJsImplX on EmulatorOptions {
8181
external JSString? get mockUserToken;
8282
}
8383

84-
@JS('FirebaseStorage')
85-
@staticInterop
86-
abstract class StorageJsImpl {}
87-
88-
extension StorageJsImplX on StorageJsImpl {
84+
extension type StorageJsImpl._(JSObject _) implements JSObject {
8985
external AppJsImpl get app;
9086
external set app(AppJsImpl a);
9187
external JSNumber get maxOperationRetryTime;
@@ -94,11 +90,7 @@ extension StorageJsImplX on StorageJsImpl {
9490
external set maxUploadRetryTime(JSNumber t);
9591
}
9692

97-
@JS('StorageReference')
98-
@staticInterop
99-
abstract class ReferenceJsImpl {}
100-
101-
extension ReferenceJsImplX on ReferenceJsImpl {
93+
extension type ReferenceJsImpl._(JSObject _) implements JSObject {
10294
external JSString get bucket;
10395
external set bucket(JSString s);
10496
external JSString get fullPath;
@@ -114,9 +106,8 @@ extension ReferenceJsImplX on ReferenceJsImpl {
114106
}
115107

116108
@JS('FullMetadata')
117-
@staticInterop
118-
@anonymous
119-
class FullMetadataJsImpl extends UploadMetadataJsImpl {
109+
extension type FullMetadataJsImpl._(JSObject _)
110+
implements UploadMetadataJsImpl, JSObject {
120111
external factory FullMetadataJsImpl({
121112
JSString bucket,
122113
JSArray? downloadTokens,
@@ -136,9 +127,7 @@ class FullMetadataJsImpl extends UploadMetadataJsImpl {
136127
JSString? contentType,
137128
JSAny? customMetadata,
138129
});
139-
}
140130

141-
extension FullMetadataJsImplX on FullMetadataJsImpl {
142131
external JSString get bucket;
143132
// TODO - new API.
144133
external JSArray? get downloadTokens;
@@ -154,9 +143,8 @@ extension FullMetadataJsImplX on FullMetadataJsImpl {
154143
}
155144

156145
@JS('UploadMetadata')
157-
@staticInterop
158-
@anonymous
159-
class UploadMetadataJsImpl extends SettableMetadataJsImpl {
146+
extension type UploadMetadataJsImpl._(JSObject _)
147+
implements SettableMetadataJsImpl, JSObject {
160148
external factory UploadMetadataJsImpl(
161149
{JSString? md5Hash,
162150
JSString? cacheControl,
@@ -165,18 +153,12 @@ class UploadMetadataJsImpl extends SettableMetadataJsImpl {
165153
JSString? contentLanguage,
166154
JSString? contentType,
167155
JSAny? customMetadata});
168-
}
169156

170-
extension UploadMetadataJsImplX on UploadMetadataJsImpl {
171157
external JSString? get md5Hash;
172158
external set md5Hash(JSString? s);
173159
}
174160

175-
@JS('UploadTask')
176-
@staticInterop
177-
abstract class UploadTaskJsImpl {}
178-
179-
extension UploadTaskJsImplX on UploadTaskJsImpl {
161+
extension type UploadTaskJsImpl._(JSObject _) implements JSObject {
180162
external UploadTaskSnapshotJsImpl get snapshot;
181163
external set snapshot(UploadTaskSnapshotJsImpl t);
182164
external JSBoolean cancel();
@@ -188,12 +170,7 @@ extension UploadTaskJsImplX on UploadTaskJsImpl {
188170
[JSFunction? onResolve, JSFunction? onReject]);
189171
}
190172

191-
@JS('UploadTaskSnapshot')
192-
@staticInterop
193-
@anonymous
194-
abstract class UploadTaskSnapshotJsImpl {}
195-
196-
extension UploadTaskSnapshotJsImplX on UploadTaskSnapshotJsImpl {
173+
extension type UploadTaskSnapshotJsImpl._(JSObject _) implements JSObject {
197174
external JSNumber get bytesTransferred;
198175
external FullMetadataJsImpl get metadata;
199176
external ReferenceJsImpl get ref;
@@ -203,19 +180,15 @@ extension UploadTaskSnapshotJsImplX on UploadTaskSnapshotJsImpl {
203180
}
204181

205182
@JS('SettableMetadata')
206-
@staticInterop
207-
@anonymous
208-
class SettableMetadataJsImpl {
183+
extension type SettableMetadataJsImpl._(JSObject _) implements JSObject {
209184
external factory SettableMetadataJsImpl(
210185
{JSString? cacheControl,
211186
JSString? contentDisposition,
212187
JSString? contentEncoding,
213188
JSString? contentLanguage,
214189
JSString? contentType,
215190
JSAny? customMetadata});
216-
}
217191

218-
extension SettableMetadataJsImplX on SettableMetadataJsImpl {
219192
external JSString? get cacheControl;
220193
external set cacheControl(JSString? s);
221194
external JSString? get contentDisposition;
@@ -244,12 +217,7 @@ extension ListOptionsJsImplX on ListOptionsJsImpl {
244217
external JSString? get pageToken;
245218
}
246219

247-
@JS('ListResult')
248-
@staticInterop
249-
@anonymous
250-
class ListResultJsImpl {}
251-
252-
extension ListResultJsImplX on ListResultJsImpl {
220+
extension type ListResultJsImpl._(JSObject _) implements JSObject {
253221
external JSArray /* ReferenceJsImpl */ get items;
254222
external JSString? get nextPageToken;
255223
external JSArray /* ReferenceJsImpl */ get prefixes;

0 commit comments

Comments
 (0)