import ObjectID from 'bson-objectid';

declare type ObjectIDType<O = undefined> = string | ObjectID | O;
declare const ObjectIDHelper: {
    isEqual(valueA: unknown, valueB: unknown): boolean;
    isObjectID: (value: unknown) => value is ObjectID;
    isValidObjectID(value: unknown): value is string | ObjectID;
    toObjectIDStrict<O>(value: ObjectIDType<O> | undefined): ObjectID;
    toObjectID<O_1>(value: ObjectIDType<O_1> | undefined): ObjectID | undefined;
    isCollectionOfObjectID(document: unknown): boolean;
    toString(value: unknown): string | undefined;
    toStringStrict(value: unknown): string;
    toStringRecurse<T>(maybe: T, stackLimit?: number): T | T[Extract<keyof T, string>] | undefined;
    generateObjectID(hexStringOrTime?: string | number | Date): ObjectID;
    generateObjectIDString(hexStringOrTime?: string | number | Date): string;
    replaceOIDtoObjectID(object: unknown, parentKey?: string, parentObject?: unknown): void;
};
declare const ObjectIDtoStringRecurse: <T>(maybe: T, stackLimit?: number) => T | T[Extract<keyof T, string>] | undefined;
declare const ObjectIDtoString: (value: unknown) => string | undefined;
declare const ObjectIDtoStringStrict: (value: unknown) => string;
declare const generateObjectID: (hexStringOrTime?: string | number | Date) => ObjectID;
declare const isCollectionOfObjectID: (document: unknown) => boolean;
declare const isObjectID: (value: unknown) => value is ObjectID;
declare const isValidObjectID: (value: unknown) => value is string | ObjectID;
declare const toObjectIDStrict: <O>(value: ObjectIDType<O> | undefined) => ObjectID;
declare const toObjectID: <O>(value: ObjectIDType<O> | undefined) => ObjectID | undefined;

export { ObjectIDHelper, ObjectIDType, ObjectIDtoString, ObjectIDtoStringRecurse, ObjectIDtoStringStrict, generateObjectID, isCollectionOfObjectID, isObjectID, isValidObjectID, toObjectID, toObjectIDStrict };
