From 9f46af4a652507b94aad07ff3c2f4f90b613f690 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Sun, 23 Feb 2025 10:43:28 +0000 Subject: [PATCH] Fix persistence provider types --- .../sync-client/src/persistence/database.ts | 7 +++---- .../sync-client/src/persistence/persistence.ts | 6 +++--- .../sync-client/src/persistence/settings.ts | 2 +- frontend/sync-client/src/sync-client.ts | 18 +++++++++++------- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/frontend/sync-client/src/persistence/database.ts b/frontend/sync-client/src/persistence/database.ts index 2926af10..4d36e867 100644 --- a/frontend/sync-client/src/persistence/database.ts +++ b/frontend/sync-client/src/persistence/database.ts @@ -11,7 +11,7 @@ export interface DocumentMetadata { import type { Logger } from "src/tracing/logger"; export interface StoredDatabase { - documents: Map; + documents: Record; lastSeenUpdateId: VaultUpdateId | undefined; } @@ -22,15 +22,14 @@ export class Database { public constructor( private readonly logger: Logger, initialState: Partial | undefined, - private readonly saveData: (data: unknown) => Promise + private readonly saveData: (data: StoredDatabase) => Promise ) { initialState ??= {}; if (initialState.documents) { for (const [relativePath, metadata] of Object.entries( initialState.documents )) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion - this.documents.set(relativePath, metadata as DocumentMetadata); + this.documents.set(relativePath, metadata); } } this.logger.debug(`Loaded ${this.documents.size} documents`); diff --git a/frontend/sync-client/src/persistence/persistence.ts b/frontend/sync-client/src/persistence/persistence.ts index 43f992b9..3e57e0e0 100644 --- a/frontend/sync-client/src/persistence/persistence.ts +++ b/frontend/sync-client/src/persistence/persistence.ts @@ -1,4 +1,4 @@ -export interface PersistenceProvider { - load: () => Promise; - save: (data: unknown) => Promise; +export interface PersistenceProvider { + load: () => Promise; + save: (data: T | undefined) => Promise; } diff --git a/frontend/sync-client/src/persistence/settings.ts b/frontend/sync-client/src/persistence/settings.ts index 295824af..75433b37 100644 --- a/frontend/sync-client/src/persistence/settings.ts +++ b/frontend/sync-client/src/persistence/settings.ts @@ -36,7 +36,7 @@ export class Settings { public constructor( private readonly logger: Logger, initialState: Partial | undefined, - private readonly saveData: (data: unknown) => Promise + private readonly saveData: (data: SyncSettings) => Promise ) { this.settings = { ...DEFAULT_SETTINGS, diff --git a/frontend/sync-client/src/sync-client.ts b/frontend/sync-client/src/sync-client.ts index 009a87d3..8cac7fa2 100644 --- a/frontend/sync-client/src/sync-client.ts +++ b/frontend/sync-client/src/sync-client.ts @@ -3,7 +3,9 @@ import wasmBin from "sync_lib/sync_lib_bg.wasm"; import type { PersistenceProvider } from "./persistence/persistence"; import { SyncHistory } from "./tracing/sync-history"; import { Logger } from "./tracing/logger"; +import type { StoredDatabase } from "./persistence/database"; import { Database } from "./persistence/database"; +import type { SyncSettings } from "./persistence/settings"; import { Settings } from "./persistence/settings"; import type { CheckConnectionResult } from "./services/sync-service"; import { SyncService } from "./services/sync-service"; @@ -45,7 +47,12 @@ export class SyncClient { public static async create( fs: FileSystemOperations, - persistence: PersistenceProvider + persistence: PersistenceProvider< + Partial<{ + settings: Partial; + database: Partial; + }> + > ): Promise { const logger = new Logger(); const history = new SyncHistory(logger); @@ -56,17 +63,14 @@ export class SyncClient { (wasmBin as any).default // it is loaded as a base64 string by webpack ); - let state: Partial<{ - settings: any; - database: any; - }> = (await persistence.load()) ?? { + let state = (await persistence.load()) ?? { settings: undefined, database: undefined }; const database = new Database( logger, state.database, - async (data: unknown): Promise => { + async (data): Promise => { state = { ...state, database: data }; return persistence.save(state); } @@ -75,7 +79,7 @@ export class SyncClient { const settings = new Settings( logger, state.settings, - async (data: unknown): Promise => { + async (data): Promise => { state = { ...state, settings: data }; return persistence.save(state); }