import { AttributeCollectionType, AttributeType } from './type/attribute-type.type';
import { AttributeValueType } from './type/attribute-value-type.type';
import { Attribute } from './type/attribute.type';
/**
 * Detects the dynamoDB type to which an collection value should be mapped. Empty collections will be mapped to L(ist).
 * Collections of type array where all the values are either String | Number | Binary will be mapped to the corresponding S(et)
 * type. If the item types are heterogeneous or it is a non supported set type the returned type will be L(ist).
 * The logic for collection fo type Set is the same.
 *
 * @param {any[] | Set<any>} collection
 * @returns {AttributeCollectionType}
 */
export declare function detectCollectionTypeFromValue(collection: any[] | Set<any>): AttributeCollectionType;
export declare function isHomogeneous(collection: Set<any> | any[]): {
    homogeneous: boolean;
    type?: AttributeType | null;
};
export declare function isCollection(value: any): boolean;
export declare function isSet(value: any): value is Set<any>;
export declare function detectType(value: any): AttributeType;
/**
 * Will resolve the type based on given property value
 */
export declare function typeOf(propertyValue: any): AttributeValueType;
export declare function typeOfFromDb(attributeValue?: Attribute): AttributeValueType;
export declare function isBinary(data: any): boolean;
export declare function isBufferType(type: any): boolean;
export declare function isType(obj: any, type: any): boolean;
export declare function isBrowser(): any;
export declare function isNode(): boolean;
/**
 * Returns the name of the given Type. null and undefined are special cases were we return 'Null' vs. 'Undefined'
 * @param type
 * @returns {string}
 */
export declare function typeName(type: any): 'Null' | 'Undefined' | string;
