import { ExtEntry } from "../lib/ext-registry";
import { QEncoder } from "./encoder";
/**
 * encodeable binary data type
 */
export type EncodeableBinary = Uint8ClampedArray | Uint8Array | Uint16Array | Uint32Array | BigUint64Array | Int8Array | Int16Array | Int32Array | BigInt64Array | Float32Array | Float64Array | DataView;
/**
 * encodeable data type that supported by QEncoder
 */
export type Encodeable = Date | number | string | boolean | object | bigint | undefined | null | EncodeableBinary | {
    constructor: ExtEntry<object>;
};
/**
 * encoder sync handler
 */
export type EncoderSyncHandler<T> = (encoder: QEncoder, data: T) => boolean;
export type _EncoderSyncHandler<T> = T extends Encodeable ? EncoderSyncHandler<T> : never;
/**
 * create encoder handler map
 * @returns encoder handler map
 */
export declare function createEncoder(): WeakMap<object, _EncoderSyncHandler<Encodeable> | _EncoderSyncHandler<Encodeable[]> | _EncoderSyncHandler<Map<unknown, unknown>>>;
