diff --git a/plugin/src/plugin.ts b/plugin/src/plugin.ts index 25801066..41c14258 100644 --- a/plugin/src/plugin.ts +++ b/plugin/src/plugin.ts @@ -32,6 +32,8 @@ export default class SyncPlugin extends Plugin { ) ); + lib.setPanicHook(); + const database = new Database( await this.loadData(), this.saveData.bind(this) @@ -106,7 +108,7 @@ export default class SyncPlugin extends Plugin { this.registerView( HistoryView.TYPE, - (leaf) => new HistoryView(leaf, this.history) + (leaf) => new HistoryView(leaf, database, this.history) ); this.registerView(LogsView.TYPE, (leaf) => new LogsView(leaf)); diff --git a/plugin/src/services/sync-service.ts b/plugin/src/services/sync-service.ts index 22f6f737..4713bedc 100644 --- a/plugin/src/services/sync-service.ts +++ b/plugin/src/services/sync-service.ts @@ -84,7 +84,7 @@ export class SyncService { }, }, body: { - contentBase64: lib.bytes_to_base64(contentBytes), + contentBase64: lib.bytesToBase64(contentBytes), createdDate: createdDate.toISOString(), relativePath, }, @@ -137,7 +137,7 @@ export class SyncService { }, body: { parentVersionId, - contentBase64: lib.bytes_to_base64(contentBytes), + contentBase64: lib.bytesToBase64(contentBytes), createdDate: createdDate.toISOString(), relativePath, }, diff --git a/plugin/src/sync-operations/syncer.ts b/plugin/src/sync-operations/syncer.ts index 2d067081..8d08a0f1 100644 --- a/plugin/src/sync-operations/syncer.ts +++ b/plugin/src/sync-operations/syncer.ts @@ -1,25 +1,21 @@ -import { Database } from "src/database/database"; -import { RelativePath } from "src/database/document-metadata"; -import { FileOperations } from "src/file-operations/file-operations"; +import type { Database } from "src/database/database"; +import type { RelativePath } from "src/database/document-metadata"; +import type { FileOperations } from "src/file-operations/file-operations"; import * as lib from "../../../backend/sync_lib/pkg/sync_lib.js"; -import { SyncService } from "src/services/sync-service"; +import type { SyncService } from "src/services/sync-service"; import { Logger } from "src/tracing/logger"; -import { - SyncHistory, - SyncSource, - SyncStatus, - SyncType, -} from "src/tracing/sync-history"; +import type { SyncHistory } from "src/tracing/sync-history"; +import { SyncSource, SyncStatus, SyncType } from "src/tracing/sync-history"; import { unlockDocument, waitForDocumentLock } from "./document-lock"; import PQueue from "p-queue"; import { EMPTY_HASH, hash } from "src/utils/hash"; -import { components } from "src/services/types.js"; +import type { components } from "src/services/types.js"; export class Syncer { - private database: Database; - private syncServer: SyncService; - private operations: FileOperations; - private history: SyncHistory; + private readonly database: Database; + private readonly syncServer: SyncService; + private readonly operations: FileOperations; + private readonly history: SyncHistory; private isRunningOfflineSync = false; @@ -57,16 +53,16 @@ export class Syncer { this.offlineSyncQueue.concurrency = settings.syncConcurrency; }); - this.fileSyncQueue.on("active", () => + this.fileSyncQueue.on("active", () => { this.emitRemainingOperationsChange( this.fileSyncQueue.size + this.offlineSyncQueue.size - ) - ); - this.offlineSyncQueue.on("active", () => + ); + }); + this.offlineSyncQueue.on("active", () => { this.emitRemainingOperationsChange( this.fileSyncQueue.size + this.offlineSyncQueue.size - ) - ); + ); + }); } public addRemainingOperationsListener( @@ -105,9 +101,7 @@ export class Syncer { type: SyncType.CREATE, }); - const responseBytes = lib.base64_to_bytes( - response.contentBase64 - ); + const responseBytes = lib.base64ToBytes(response.contentBase64); const responseHash = hash(responseBytes); if (contentHash !== responseHash) { @@ -270,9 +264,7 @@ export class Syncer { return; } - const responseBytes = lib.base64_to_bytes( - response.contentBase64 - ); + const responseBytes = lib.base64ToBytes(response.contentBase64); const responseHash = hash(responseBytes); if (response.relativePath != relativePath) { @@ -359,7 +351,7 @@ export class Syncer { ].filter(([path, _]) => !allLocalFiles.includes(path)); await Promise.all( - allLocalFiles.map((relativePath) => + allLocalFiles.map(async (relativePath) => this.offlineSyncQueue.add(async () => { const metadata = this.database.getDocument(relativePath); @@ -474,7 +466,7 @@ export class Syncer { documentId: remoteVersion.documentId, }) ).contentBase64; - const contentBytes = lib.base64_to_bytes(content); + const contentBytes = lib.base64ToBytes(content); const contentHash = hash(contentBytes); await this.operations.create( @@ -539,7 +531,7 @@ export class Syncer { documentId: remoteVersion.documentId, }) ).contentBase64; - const contentBytes = lib.base64_to_bytes(content); + const contentBytes = lib.base64ToBytes(content); const contentHash = hash(contentBytes); if (relativePath !== remoteVersion.relativePath) { @@ -592,7 +584,9 @@ export class Syncer { await this.fileSyncQueue.onEmpty(); await this.database.resetSyncState(); this.history.reset(); - this.remainingOperationsListeners.forEach((listener) => listener(0)); + this.remainingOperationsListeners.forEach((listener) => { + listener(0); + }); } private async safelySync(