feat(nbstore): remove async on connection api (#9187)

We should not use async on `connect` and `disconnect`, for `WebSocketConnection` will never connect when offline.

We should handle the connection status of each storage in sync, using the `connection.waitForConnect`

This PR also puts the connection reference count on the `connect` and disconnect`
This commit is contained in:
EYHN
2024-12-18 03:59:49 +00:00
parent 3fddf050a4
commit 64b017dc1b
20 changed files with 160 additions and 226 deletions
+8 -9
View File
@@ -25,7 +25,8 @@ export class IDBConnection extends Connection<{
blocking: () => {
// if, for example, an tab with newer version is opened, this function will be called.
// we should close current connection to allow the new version to upgrade the db.
this.close(
this.setStatus(
'closed',
new Error('Blocking a new version. Closing the connection.')
);
},
@@ -38,13 +39,11 @@ export class IDBConnection extends Connection<{
};
}
override async doDisconnect() {
this.close();
}
private close(error?: Error) {
this.maybeConnection?.channel.close();
this.maybeConnection?.db.close();
this.setStatus('closed', error);
override doDisconnect(db: {
db: IDBPDatabase<DocStorageSchema>;
channel: BroadcastChannel;
}) {
db.channel.close();
db.db.close();
}
}
+1 -2
View File
@@ -1,4 +1,3 @@
import { share } from '../../connection';
import {
type DocClock,
type DocClocks,
@@ -17,7 +16,7 @@ interface ChannelMessage {
}
export class IndexedDBDocStorage extends DocStorage {
readonly connection = share(new IDBConnection(this.options));
readonly connection = new IDBConnection(this.options);
get db() {
return this.connection.inner.db;
@@ -28,7 +28,7 @@ export class DocIDBConnection extends Connection<IDBPDatabase<DocDBSchema>> {
});
}
override async doDisconnect(conn: IDBPDatabase<DocDBSchema>) {
override doDisconnect(conn: IDBPDatabase<DocDBSchema>) {
conn.close();
}
}
@@ -57,7 +57,7 @@ export class BlobIDBConnection extends Connection<IDBPDatabase<BlobDBSchema>> {
});
}
override async doDisconnect(conn: IDBPDatabase<BlobDBSchema>) {
override doDisconnect(conn: IDBPDatabase<BlobDBSchema>) {
conn.close();
}
}