document-drive 1.0.0-alpha.73 → 1.0.0-alpha.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
package/src/server/index.ts
CHANGED
|
@@ -432,7 +432,7 @@ export class DocumentDriveServer extends BaseDocumentDriveServer {
|
|
|
432
432
|
public async getSynchronizationUnitIdInfo(
|
|
433
433
|
driveId: string,
|
|
434
434
|
syncId: string
|
|
435
|
-
): Promise<
|
|
435
|
+
): Promise<SynchronizationUnitQuery | undefined> {
|
|
436
436
|
const drive = await this.getDrive(driveId);
|
|
437
437
|
const node = drive.state.global.nodes.find(
|
|
438
438
|
node =>
|
|
@@ -605,9 +605,18 @@ export class DocumentDriveServer extends BaseDocumentDriveServer {
|
|
|
605
605
|
}
|
|
606
606
|
|
|
607
607
|
async deleteDrive(id: string) {
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
608
|
+
const result = await Promise.allSettled([
|
|
609
|
+
this.stopSyncRemoteDrive(id),
|
|
610
|
+
this.listenerStateManager.removeDrive(id),
|
|
611
|
+
this.cache.deleteDocument('drives', id),
|
|
612
|
+
this.storage.deleteDrive(id)
|
|
613
|
+
]);
|
|
614
|
+
|
|
615
|
+
result.forEach(r => {
|
|
616
|
+
if (r.status === "rejected") {
|
|
617
|
+
throw r.reason;
|
|
618
|
+
}
|
|
619
|
+
});
|
|
611
620
|
}
|
|
612
621
|
|
|
613
622
|
getDrives() {
|
|
@@ -53,7 +53,7 @@ export class ListenerManager extends BaseListenerManager {
|
|
|
53
53
|
driveId: string,
|
|
54
54
|
listenerId: string
|
|
55
55
|
): Promise<ITransmitter | undefined> {
|
|
56
|
-
return this.transmitters[driveId]?.[listenerId];
|
|
56
|
+
return Promise.resolve(this.transmitters[driveId]?.[listenerId]);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
async addListener(listener: Listener) {
|
|
@@ -106,7 +106,7 @@ export class ListenerManager extends BaseListenerManager {
|
|
|
106
106
|
const driveTransmitters = this.transmitters[drive] || {};
|
|
107
107
|
driveTransmitters[listener.listenerId] = transmitter;
|
|
108
108
|
this.transmitters[drive] = driveTransmitters;
|
|
109
|
-
return transmitter;
|
|
109
|
+
return Promise.resolve(transmitter);
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
async removeListener(driveId: string, listenerId: string) {
|
|
@@ -115,7 +115,7 @@ export class ListenerManager extends BaseListenerManager {
|
|
|
115
115
|
return false;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
return driveMap.delete(listenerId);
|
|
118
|
+
return Promise.resolve(driveMap.delete(listenerId));
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
async removeSyncUnits(driveId: string, syncUnits: Pick<SynchronizationUnit, "syncId">[]) {
|
|
@@ -128,6 +128,7 @@ export class ListenerManager extends BaseListenerManager {
|
|
|
128
128
|
listener.syncUnits.delete(syncUnit.syncId);
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
|
+
return Promise.resolve();
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
async updateSynchronizationRevisions(
|
|
@@ -203,6 +204,8 @@ export class ListenerManager extends BaseListenerManager {
|
|
|
203
204
|
} else {
|
|
204
205
|
listener.syncUnits.set(syncId, { listenerRev, lastUpdated });
|
|
205
206
|
}
|
|
207
|
+
|
|
208
|
+
return Promise.resolve();
|
|
206
209
|
}
|
|
207
210
|
|
|
208
211
|
triggerUpdate = debounce(
|
|
@@ -243,7 +246,7 @@ export class ListenerManager extends BaseListenerManager {
|
|
|
243
246
|
|
|
244
247
|
const opData: OperationUpdate[] = [];
|
|
245
248
|
try {
|
|
246
|
-
const data = await this.drive.getOperationData( // DEAL WITH INVALID SYNC ID ERROR
|
|
249
|
+
const data = await this.drive.getOperationData( // TODO - join queries, DEAL WITH INVALID SYNC ID ERROR
|
|
247
250
|
driveId,
|
|
248
251
|
syncUnit.syncId,
|
|
249
252
|
{
|
|
@@ -413,6 +416,14 @@ export class ListenerManager extends BaseListenerManager {
|
|
|
413
416
|
}
|
|
414
417
|
}
|
|
415
418
|
|
|
419
|
+
async removeDrive(driveId: string): Promise<void> {
|
|
420
|
+
this.listenerState.delete(driveId);
|
|
421
|
+
const transmitters = this.transmitters[driveId];
|
|
422
|
+
if (transmitters) {
|
|
423
|
+
await Promise.all(Object.values(transmitters).map(t => t.disconnect?.()));
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
416
427
|
getListener(driveId: string, listenerId: string): Promise<ListenerState> {
|
|
417
428
|
const drive = this.listenerState.get(driveId);
|
|
418
429
|
if (!drive) throw new Error('Drive not found');
|
|
@@ -12,6 +12,7 @@ import { logger } from '../../../utils/logger';
|
|
|
12
12
|
|
|
13
13
|
export interface IReceiver {
|
|
14
14
|
transmit: (strands: InternalTransmitterUpdate[]) => Promise<void>;
|
|
15
|
+
disconnect: () => Promise<void>;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
export type InternalTransmitterUpdate<
|
|
@@ -88,4 +89,8 @@ export class InternalTransmitter implements ITransmitter {
|
|
|
88
89
|
setReceiver(receiver: IReceiver) {
|
|
89
90
|
this.receiver = receiver;
|
|
90
91
|
}
|
|
92
|
+
|
|
93
|
+
async disconnect(): Promise<void> {
|
|
94
|
+
await this.receiver?.disconnect();
|
|
95
|
+
}
|
|
91
96
|
}
|
package/src/server/types.ts
CHANGED
|
@@ -351,6 +351,7 @@ export abstract class BaseListenerManager {
|
|
|
351
351
|
}
|
|
352
352
|
|
|
353
353
|
abstract initDrive(drive: DocumentDriveDocument): Promise<void>;
|
|
354
|
+
abstract removeDrive(driveId: DocumentDriveState["id"]): Promise<void>;
|
|
354
355
|
|
|
355
356
|
abstract addListener(listener: Listener): Promise<ITransmitter>;
|
|
356
357
|
abstract removeListener(
|