Skip to content

Commit 16037fb

Browse files
fix(database, web): more explicit interop types (#17823)
* fix(database, web): more explicit interop types * fix: interop types * fix: format
1 parent 64986b1 commit 16037fb

File tree

5 files changed

+26
-67
lines changed

5 files changed

+26
-67
lines changed

packages/firebase_database/firebase_database_web/lib/src/interop/data_snapshot_interop.dart

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@
44

55
part of 'database_interop.dart';
66

7-
@JS('DataSnapshot')
8-
@staticInterop
9-
@anonymous
10-
abstract class DataSnapshotJsImpl {}
11-
12-
extension DataSnapshotJsImpl$ on DataSnapshotJsImpl {
7+
extension type DataSnapshotJsImpl._(JSObject _) implements JSObject {
138
external JSString? get key;
149

1510
external JSAny? /* JSString | num | null*/ get priority;

packages/firebase_database/firebase_database_web/lib/src/interop/database.dart

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,7 @@ class Database
7878
/// can be used for reading or writing data to that database location.
7979
///
8080
/// See: <https://firebase.google.com/docs/reference/js/firebase.database.Reference>.
81-
class DatabaseReference<T extends database_interop.ReferenceJsImpl>
82-
extends Query<T> {
81+
class DatabaseReference extends Query<database_interop.ReferenceJsImpl> {
8382
static final _expando = Expando<DatabaseReference>();
8483

8584
/// The last part of the current path.
@@ -204,11 +203,9 @@ class DatabaseReference<T extends database_interop.ReferenceJsImpl>
204203
applyLocally: applyLocally.toJS),
205204
)
206205
.toDart;
207-
final castedJsTransaction =
208-
jsTransactionResult as database_interop.TransactionResultJsImpl;
209206
return Transaction(
210-
committed: (castedJsTransaction.committed).toDart,
211-
snapshot: DataSnapshot._fromJsObject(castedJsTransaction.snapshot),
207+
committed: (jsTransactionResult.committed).toDart,
208+
snapshot: DataSnapshot._fromJsObject(jsTransactionResult.snapshot),
212209
);
213210
} catch (e, s) {
214211
throw convertFirebaseDatabaseException(e, s);
@@ -317,8 +314,7 @@ class Query<T extends database_interop.QueryJsImpl> extends JsObjectWrapper<T> {
317314
final jsSnapshotPromise = database_interop.get(jsObject);
318315
final snapshot = await jsSnapshotPromise.toDart;
319316

320-
return DataSnapshot.getInstance(
321-
snapshot as database_interop.DataSnapshotJsImpl);
317+
return DataSnapshot.getInstance(snapshot);
322318
}
323319

324320
/// Returns a Query with the ending point [value]. The ending point
@@ -674,18 +670,18 @@ class OnDisconnect
674670
/// [Future] property.
675671
///
676672
/// See: <https://firebase.google.com/docs/reference/js/firebase.database.ThenableReference>.
677-
class ThenableReference
678-
extends DatabaseReference<database_interop.ThenableReferenceJsImpl> {
679-
late final Future<DatabaseReference> _future = jsObject
680-
.then(((database_interop.ReferenceJsImpl reference) {
681-
DatabaseReference.getInstance(reference);
682-
}).toJS)
683-
.toDart
684-
.then((value) => value as DatabaseReference);
673+
class ThenableReference extends DatabaseReference {
674+
late final Future<DatabaseReference> _future =
675+
(jsObject as database_interop.ThenableReferenceJsImpl)
676+
.then(((database_interop.ReferenceJsImpl reference) {
677+
DatabaseReference.getInstance(reference);
678+
}).toJS)
679+
.toDart
680+
.then((value) => value as DatabaseReference);
685681

686682
/// Creates a new ThenableReference from a [jsObject].
687683
ThenableReference.fromJsObject(
688-
super.jsObject,
684+
database_interop.ThenableReferenceJsImpl super.jsObject,
689685
) : super._fromJsObject();
690686

691687
/// A Future property.

packages/firebase_database/firebase_database_web/lib/src/interop/database_interop.dart

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ external void forceWebSockets();
5050

5151
@JS()
5252
@staticInterop
53-
external JSPromise /*DataSnapshotJsImpl*/ get(QueryJsImpl query);
53+
external JSPromise<DataSnapshotJsImpl> get(QueryJsImpl query);
5454

5555
@JS()
5656
@staticInterop
@@ -164,13 +164,13 @@ external ReferenceJsImpl refFromURL(
164164

165165
@JS()
166166
@staticInterop
167-
external JSPromise remove(
167+
external JSPromise<ReferenceJsImpl> remove(
168168
ReferenceJsImpl ref,
169169
);
170170

171171
@JS()
172172
@staticInterop
173-
external JSPromise/*<TransactionResultJsImpl>*/ runTransaction(
173+
external JSPromise<TransactionResultJsImpl> runTransaction(
174174
ReferenceJsImpl ref,
175175
JSFunction transactionUpdate,
176176
// Function(JSAny currentData) transactionUpdate,
@@ -220,29 +220,17 @@ abstract class ServerValue {
220220
external static JSAny get TIMESTAMP;
221221
}
222222

223-
@JS('Database')
224-
@staticInterop
225-
abstract class DatabaseJsImpl {}
226-
227-
extension DatabaseJsImplExtension on DatabaseJsImpl {
223+
extension type DatabaseJsImpl._(JSObject _) implements JSObject {
228224
external AppJsImpl get app;
229225
external set app(AppJsImpl a);
230226
external JSString get type;
231227
}
232228

233-
@JS('QueryConstraint')
234-
@staticInterop
235-
abstract class QueryConstraintJsImpl {}
236-
237-
extension QueryConstraintJsImplExtension on QueryConstraintJsImpl {
229+
extension type QueryConstraintJsImpl._(JSObject _) implements JSObject {
238230
external JSString get type;
239231
}
240232

241-
@JS('OnDisconnect')
242-
@staticInterop
243-
abstract class OnDisconnectJsImpl {}
244-
245-
extension OnDisconnectJsImplExtension on OnDisconnectJsImpl {
233+
extension type OnDisconnectJsImpl._(JSObject _) implements JSObject {
246234
external JSPromise cancel([
247235
JSFunction onComplete,
248236
//void Function(JSAny) onComplete
@@ -269,11 +257,8 @@ extension OnDisconnectJsImplExtension on OnDisconnectJsImpl {
269257
);
270258
}
271259

272-
@JS('ThenableReference')
273-
@staticInterop
274-
abstract class ThenableReferenceJsImpl extends ReferenceJsImpl {}
275-
276-
extension ThenableReferenceJsImplExtension on ThenableReferenceJsImpl {
260+
extension type ThenableReferenceJsImpl._(JSObject _)
261+
implements JSObject, ReferenceJsImpl {
277262
external JSPromise then([JSFunction? onResolve, JSFunction? onReject]);
278263
}
279264

@@ -302,12 +287,7 @@ abstract class ListenOptions {
302287
external static JSBoolean get onlyOnce;
303288
}
304289

305-
@JS()
306-
@staticInterop
307-
@anonymous
308-
abstract class FirebaseError {}
309-
310-
extension FirebaseErrorExtension on FirebaseError {
290+
extension type FirebaseError._(JSObject _) implements JSObject {
311291
external JSString get code;
312292
external JSString get message;
313293
external JSString get name;

packages/firebase_database/firebase_database_web/lib/src/interop/query_interop.dart

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,7 @@
44

55
part of 'database_interop.dart';
66

7-
@JS('Query')
8-
@staticInterop
9-
abstract class QueryJsImpl {}
10-
11-
extension ExtensionQueryJsImpl on QueryJsImpl {
7+
extension type QueryJsImpl._(JSObject _) implements JSObject {
128
external ReferenceJsImpl get ref;
139

1410
external JSBoolean isEqual(QueryJsImpl other);

packages/firebase_database/firebase_database_web/lib/src/interop/reference_interop.dart

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,13 @@
44

55
part of 'database_interop.dart';
66

7-
@JS('TransactionResult')
8-
@staticInterop
9-
abstract class TransactionResultJsImpl {}
10-
11-
extension TransactionResultJsImplExtension on TransactionResultJsImpl {
7+
extension type TransactionResultJsImpl._(JSObject _) implements JSObject {
128
external JSObject toJSON();
139
external JSBoolean get committed;
1410
external DataSnapshotJsImpl get snapshot;
1511
}
1612

17-
@JS('DatabaseReference')
18-
@staticInterop
19-
abstract class ReferenceJsImpl extends QueryJsImpl {}
20-
21-
extension ReferenceJsImplExtension on ReferenceJsImpl {
13+
extension type ReferenceJsImpl._(JSObject _) implements JSObject, QueryJsImpl {
2214
external JSString? get key;
2315

2416
external ReferenceJsImpl? get parent;

0 commit comments

Comments
 (0)