declare class HashSource { readonly url: URL; readonly width: number; readonly height: number; readonly hashSize: number; constructor(url: URL, hashSize?: number); calculateArea(): number; } interface HashableImageSouceConverter { convert(source: HashSource): Promise; } declare class DifferenceHashBuilder { private generator; private dHashConverter; constructor(dHashConverter?: HashableImageSouceConverter | null, document?: Document); build(url: URL, hashSize?: number): Promise; } declare class Hash { readonly rawHash: string; constructor(rawHash: string); getHammingDistance(hash: this): number; toString(): string; private arrayChunk; private calcuateHexadecimal; } declare const HashKind: unique symbol; type DHash = Hash & { readonly [HashKind]: 'dhash'; }; type AHash = Hash & { readonly [HashKind]: 'ahash'; }; type PHash = Hash & { readonly [HashKind]: 'phash'; }; type WHash = Hash & { readonly [HashKind]: 'whash'; }; declare class AverageHashBuilder { private converter; private generator; constructor(converter?: HashableImageSouceConverter | null, document?: Document); build(url: URL, hashSize?: number): Promise; } declare class PerceptualHashBuilder { private converter; private generator; constructor(converter?: HashableImageSouceConverter | null, document?: Document); build(url: URL, hashSize?: number, highfreqFactor?: number): Promise; } declare class WaveletHashBuilder { private converter; private generator; constructor(converter?: HashableImageSouceConverter | null, document?: Document); build(url: URL, hashSize?: number, imageScale?: number | null): Promise; } declare function HexadecimalToHash(source: string): Hash; export { type AHash, AverageHashBuilder, type DHash, DifferenceHashBuilder, Hash, HexadecimalToHash, type PHash, PerceptualHashBuilder, type WHash, WaveletHashBuilder };