import { CookieOptions } from 'browser-cookies';
import { PersistentRunesOptions } from './index.js';
import * as macfja from '@macfja/serializer';
import * as dv from 'devalue';
import ESSerializer from 'esserializer';
import { NJSON } from 'next-json';
import * as PhpSerialize from 'php-serialize';

declare function PhpSerializeSerializerFactory(options?: {
    givenOptions?: Parameters<typeof PhpSerialize.serialize>[2];
    scope?: Parameters<typeof PhpSerialize.serialize>[1];
}): PersistentRunesSerializer;
declare function SerializeAnythingSerializerFactory(options?: {
    maxDepth?: number;
    pretty?: boolean;
}): PersistentRunesSerializer;
declare function JsonSerializerFactory(options?: {
    replacer?: Parameters<typeof JSON.stringify>[1];
    reviver?: Parameters<typeof JSON.parse>[1];
    space?: Parameters<typeof JSON.stringify>[2];
}): PersistentRunesSerializer;
declare function DevalueSerializerFactory(options?: {
    reducers?: Parameters<typeof dv.stringify>[1];
    revivers?: Parameters<typeof dv.parse>[1];
}): PersistentRunesSerializer;
declare function ESSerializerSerializerFactory(options?: {
    serializeOption?: Parameters<typeof ESSerializer.serialize>[1];
    classes?: Parameters<typeof ESSerializer.deserialize>[1];
}): PersistentRunesSerializer;
declare function MacfjaSerializerFactory(options?: {
    allowedClasses?: Parameters<typeof macfja.deserialize>[1];
}): PersistentRunesSerializer;
declare function NextJsonSerializerFactory(options?: {
    stringifyOptionsOrReplacer?: Parameters<typeof NJSON.stringify>[1];
    space?: Parameters<typeof NJSON.stringify>[2];
    parseOptionsOrReviver?: Parameters<typeof NJSON.parse>[1];
}): PersistentRunesSerializer;

type PersistentRunesStorage = Pick<PersistentRunesOptions, "storageWrite" | "storageRead">;
type PersistentRunesSerializer = Pick<PersistentRunesOptions, "serialize" | "deserialize">;
declare const SuperJsonSerializer: PersistentRunesSerializer;
declare function BrowserCookieStorageFactory(cookieOptions?: CookieOptions): PersistentRunesStorage;
declare const BrowserLocalStorage: PersistentRunesStorage;
declare const BrowserSessionStorage: PersistentRunesStorage;
declare function addEncryptionStorage(onStorage: PersistentRunesStorage, encryptionKey: string, iv?: string): PersistentRunesStorage;
declare const BrowserCookieStorage: PersistentRunesStorage;
declare const JsonSerializer: PersistentRunesSerializer;
declare const DevalueSerializer: PersistentRunesSerializer;
declare const ESSerializerSerializer: PersistentRunesSerializer;
declare const MacfjaSerializer: PersistentRunesSerializer;
declare const NextJsonSerializer: PersistentRunesSerializer;
declare const PhpSerializeSerializer: PersistentRunesSerializer;
declare const SerializeAnythingSerializer: PersistentRunesSerializer;
/**
 * Create a `PersistentRunesOptions` from a serializer and a storage
 * @param serializer The serializer to use (if `undefined` then `JsonSerializer` will be used)
 * @param storage The storage to use (if `undefined` then `BrowserLocalStorage` will be used)
 */
declare function buildOptions(serializer: PersistentRunesSerializer | undefined, storage: PersistentRunesStorage | undefined): PersistentRunesOptions;

export { BrowserCookieStorage, BrowserCookieStorageFactory, BrowserLocalStorage, BrowserSessionStorage, DevalueSerializer, DevalueSerializerFactory, ESSerializerSerializer, ESSerializerSerializerFactory, JsonSerializer, JsonSerializerFactory, MacfjaSerializer, MacfjaSerializerFactory, NextJsonSerializer, NextJsonSerializerFactory, type PersistentRunesSerializer, type PersistentRunesStorage, PhpSerializeSerializer, PhpSerializeSerializerFactory, SerializeAnythingSerializer, SerializeAnythingSerializerFactory, SuperJsonSerializer, addEncryptionStorage, buildOptions };
