import {EventEmitter} from 'events'; type WithRequiredProperties = T & Required>; declare class Keyv = Record> extends EventEmitter { /** * `this.opts` is an object containing at least the properties listed * below. However, `Keyv.Options` allows arbitrary properties as well. * These properties can be specified as the second type parameter to `Keyv`. */ opts: WithRequiredProperties< Keyv.Options, 'deserialize' | 'namespace' | 'serialize' | 'store' | 'uri' > & Options; /** * @param opts The options object is also passed through to the storage adapter. Check your storage adapter docs for any extra options. */ constructor(options?: Keyv.Options & Options); /** * @param uri The connection string URI. * * Merged into the options object as options.uri. * @param opts The options object is also passed through to the storage adapter. Check your storage adapter docs for any extra options. */ constructor(uri?: string, options?: Keyv.Options & Options); /** Returns the value. */ get(key: string, options?: {raw?: Raw}): Promise<(Raw extends false ? Value : Keyv.DeserializedData) | undefined>; /** * Set a value. * * By default keys are persistent. You can set an expiry TTL in milliseconds. */ set(key: string, value: Value, ttl?: number): Promise; /** * Deletes an entry. * * Returns `true` if the key existed, `false` if not. */ delete(key: string): Promise; /** Delete all entries in the current namespace. */ clear(): Promise; } declare namespace Keyv { interface Options { [key: string]: any; /** Namespace for the current instance. */ namespace?: string | undefined; /** A custom serialization function. */ serialize?: ((data: DeserializedData) => string) | undefined; /** A custom deserialization function. */ deserialize?: ((data: string) => DeserializedData | undefined) | undefined; /** The connection string URI. */ uri?: string | undefined; /** The storage adapter instance to be used by Keyv. */ store?: Store | undefined; /** Default TTL. Can be overridden by specififying a TTL on `.set()`. */ ttl?: number | undefined; /** Specify an adapter to use. e.g `'redis'` or `'mongodb'`. */ adapter?: 'redis' | 'mongodb' | 'mongo' | 'sqlite' | 'postgresql' | 'postgres' | 'mysql' | undefined; } interface DeserializedData { value: Value; expires: number | undefined; } interface Store { get(key: string): Value | Promise | undefined; set(key: string, value: Value, ttl?: number): any; delete(key: string): boolean | Promise; clear(): void | Promise; } } export = Keyv;