34 lines
789 B
TypeScript
34 lines
789 B
TypeScript
import { createUpstashClient } from './upstash';
|
|
import { createWebDavClient } from './webdav';
|
|
|
|
export enum ProviderType {
|
|
WebDAV = 'webdav',
|
|
UpStash = 'upstash',
|
|
}
|
|
|
|
export const SyncClients = {
|
|
[ProviderType.UpStash]: createUpstashClient,
|
|
[ProviderType.WebDAV]: createWebDavClient,
|
|
} as const;
|
|
|
|
type SyncClientConfig = {
|
|
[K in keyof typeof SyncClients]: (typeof SyncClients)[K] extends (
|
|
_: infer C,
|
|
) => any
|
|
? C
|
|
: never;
|
|
};
|
|
|
|
export interface SyncClient {
|
|
get: (key: string) => Promise<string>;
|
|
set: (key: string, value: string) => Promise<void>;
|
|
check: () => Promise<boolean>;
|
|
}
|
|
|
|
export function createSyncClient<T extends ProviderType>(
|
|
provider: T,
|
|
config: SyncClientConfig[T],
|
|
): SyncClient {
|
|
return SyncClients[provider](config as any) as any;
|
|
}
|