Fix persistence provider types
This commit is contained in:
parent
5ba898df7d
commit
9f46af4a65
4 changed files with 18 additions and 15 deletions
|
|
@ -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`);
|
||||||
|
|
|
||||||
|
|
@ -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>;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue