import { ConnectorOptions } from 'db0'; import { BuiltinDriverOptions, BuiltinDriverName, Driver, Storage } from 'unstorage'; type ObjectShape = T extends object ? T : Record; type FarmStorageBuiltinDriverWithoutDB0 = Exclude, "db0">; type FarmStorageBuiltinDriverConfigMap = { [K in FarmStorageBuiltinDriverWithoutDB0]: { driver: K; options?: BuiltinDriverOptions[K]; } & Partial>; }; type FarmStorageDatabaseDriverMap = { sqlite: "node-sqlite"; "node-sqlite": "node-sqlite"; sqlite3: "sqlite3"; "better-sqlite3": "better-sqlite3"; postgres: "postgresql"; postgresql: "postgresql"; pg: "postgresql"; mysql: "mysql2"; mysql2: "mysql2"; pglite: "pglite"; planetscale: "planetscale"; libsql: "libsql"; "libsql-node": "libsql-node"; "libsql-http": "libsql-http"; }; type FarmStorageDatabaseDriverName = keyof FarmStorageDatabaseDriverMap; type FarmStorageDatabaseConfigMap = { [K in FarmStorageDatabaseDriverName]: { driver: K; options?: ConnectorOptions[FarmStorageDatabaseDriverMap[K]]; tableName?: string; } & Partial>; }; type FarmStorageMemoryDriverConfig = { driver?: "memory"; }; type FarmStorageLocalDriverConfig = { driver: "local"; options?: BuiltinDriverOptions["fs-lite"]; } & Partial>; type FarmStorageDB0DriverConfig = { driver: "db0"; options: BuiltinDriverOptions["db0"]; }; type FarmStorageBuiltinDriverConfig = FarmStorageMemoryDriverConfig | FarmStorageLocalDriverConfig | FarmStorageDB0DriverConfig | FarmStorageBuiltinDriverConfigMap[FarmStorageBuiltinDriverWithoutDB0]; interface FarmStorageClient extends Storage { readonly kind: "farm-storage-client"; ready(): Promise; createStorage(): Promise; resolveDriver(): Promise; } type FarmStorageRuntimeClient = object | (() => unknown | Promise); interface FarmStorageCustomDriverConfig { driver: Driver | (() => Driver | Promise); } type FarmStorageDatabaseConfig = FarmStorageDatabaseConfigMap[FarmStorageDatabaseDriverName]; type FarmStorageClientConfig = FarmStorageBuiltinDriverConfig | FarmStorageDatabaseConfig | FarmStorageCustomDriverConfig; type FarmStorageMountConfig = FarmStorageClientConfig | FarmStorageClient; type FarmStorageMounts = Record; type FarmStorageConfigObject = FarmStorageClientConfig & { /** * Existing FarmStorageClient instances still drive Farm's key/value storage. * Other objects/functions are treated as application runtime clients for * schema-backed integration persistence via @farming-labs/orm. */ client?: FarmStorageClient | FarmStorageRuntimeClient; mounts?: FarmStorageMounts; }; type FarmStorageUserConfig = FarmStorageConfigObject | FarmStorageClient; export type { FarmStorageClient as F, FarmStorageClientConfig as a, FarmStorageLocalDriverConfig as b, FarmStorageDatabaseConfig as c, FarmStorageUserConfig as d, FarmStorageBuiltinDriverConfig as e, FarmStorageConfigObject as f, FarmStorageCustomDriverConfig as g, FarmStorageDatabaseDriverName as h, FarmStorageRuntimeClient as i, FarmStorageMountConfig as j, FarmStorageMounts as k };