Fix persistence provider types

This commit is contained in:
Andras Schmelczer 2025-02-23 10:43:28 +00:00
parent 5ba898df7d
commit 9f46af4a65
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
4 changed files with 18 additions and 15 deletions

View file

@ -11,7 +11,7 @@ export interface DocumentMetadata {
import type { Logger } from "src/tracing/logger"; import type { Logger } from "src/tracing/logger";
export interface StoredDatabase { export interface StoredDatabase {
documents: Map<RelativePath, DocumentMetadata>; documents: Record<RelativePath, DocumentMetadata>;
lastSeenUpdateId: VaultUpdateId | undefined; lastSeenUpdateId: VaultUpdateId | undefined;
} }
@ -22,15 +22,14 @@ export class Database {
public constructor( public constructor(
private readonly logger: Logger, private readonly logger: Logger,
initialState: Partial<StoredDatabase> | undefined, initialState: Partial<StoredDatabase> | undefined,
private readonly saveData: (data: unknown) => Promise<void> private readonly saveData: (data: StoredDatabase) => Promise<void>
) { ) {
initialState ??= {}; initialState ??= {};
if (initialState.documents) { if (initialState.documents) {
for (const [relativePath, metadata] of Object.entries( for (const [relativePath, metadata] of Object.entries(
initialState.documents initialState.documents
)) { )) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion this.documents.set(relativePath, metadata);
this.documents.set(relativePath, metadata as DocumentMetadata);
} }
} }
this.logger.debug(`Loaded ${this.documents.size} documents`); this.logger.debug(`Loaded ${this.documents.size} documents`);

View file

@ -1,4 +1,4 @@
export interface PersistenceProvider { export interface PersistenceProvider<T extends object> {
load: () => Promise<unknown>; load: () => Promise<T | undefined>;
save: (data: unknown) => Promise<void>; save: (data: T | undefined) => Promise<void>;
} }

View file

@ -36,7 +36,7 @@ export class Settings {
public constructor( public constructor(
private readonly logger: Logger, private readonly logger: Logger,
initialState: Partial<SyncSettings> | undefined, initialState: Partial<SyncSettings> | undefined,
private readonly saveData: (data: unknown) => Promise<void> private readonly saveData: (data: SyncSettings) => Promise<void>
) { ) {
this.settings = { this.settings = {
...DEFAULT_SETTINGS, ...DEFAULT_SETTINGS,

View file

@ -3,7 +3,9 @@ import wasmBin from "sync_lib/sync_lib_bg.wasm";
import type { PersistenceProvider } from "./persistence/persistence"; import type { PersistenceProvider } from "./persistence/persistence";
import { SyncHistory } from "./tracing/sync-history"; import { SyncHistory } from "./tracing/sync-history";
import { Logger } from "./tracing/logger"; import { Logger } from "./tracing/logger";
import type { StoredDatabase } from "./persistence/database";
import { Database } from "./persistence/database"; import { Database } from "./persistence/database";
import type { SyncSettings } from "./persistence/settings";
import { Settings } from "./persistence/settings"; import { Settings } from "./persistence/settings";
import type { CheckConnectionResult } from "./services/sync-service"; import type { CheckConnectionResult } from "./services/sync-service";
import { SyncService } from "./services/sync-service"; import { SyncService } from "./services/sync-service";
@ -45,7 +47,12 @@ export class SyncClient {
public static async create( public static async create(
fs: FileSystemOperations, fs: FileSystemOperations,
persistence: PersistenceProvider persistence: PersistenceProvider<
Partial<{
settings: Partial<SyncSettings>;
database: Partial<StoredDatabase>;
}>
>
): Promise<SyncClient> { ): Promise<SyncClient> {
const logger = new Logger(); const logger = new Logger();
const history = new SyncHistory(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 (wasmBin as any).default // it is loaded as a base64 string by webpack
); );
let state: Partial<{ let state = (await persistence.load()) ?? {
settings: any;
database: any;
}> = (await persistence.load()) ?? {
settings: undefined, settings: undefined,
database: undefined database: undefined
}; };
const database = new Database( const database = new Database(
logger, logger,
state.database, state.database,
async (data: unknown): Promise<void> => { async (data): Promise<void> => {
state = { ...state, database: data }; state = { ...state, database: data };
return persistence.save(state); return persistence.save(state);
} }
@ -75,7 +79,7 @@ export class SyncClient {
const settings = new Settings( const settings = new Settings(
logger, logger,
state.settings, state.settings,
async (data: unknown): Promise<void> => { async (data): Promise<void> => {
state = { ...state, settings: data }; state = { ...state, settings: data };
return persistence.save(state); return persistence.save(state);
} }