interface ISBNAudit { source: string; validIsbn: boolean; groupname?: string; clues: Array<{ message: string; candidate: string; groupname: string; }>; } interface ISBNBase { source: string; isValid: true; group: string; publisher: string; article: string; check: string; groupname: string; // input related fields isIsbn10: boolean; isIsbn13: boolean; // isbn13 related fields prefix: string; check13: string; isbn13: string; isbn13h: string; } // ISBN-13 only (no ISBN-10 equivalent) interface ISBN13Only extends ISBNBase { isbn10: undefined; check10: undefined; isbn10h: undefined; } // ISBN-10 specific fields interface ISBN13WithISBN10 extends ISBNBase { isbn10: string; check10: string; isbn10h: string; } type ISBN = ISBN13WithISBN10 | ISBN13Only; declare module "isbn3" { export function parse(isbn: string): ISBN | null; export function asIsbn13(isbn: string, hyphen?: boolean): string | null; export function asIsbn10(isbn: string, hyphen?: boolean): string | null; export function hyphenate(isbn: string): string; export function audit(isbn: string): ISBNAudit; export const groups: Record< string, { name: string; ranges: Array<[string, string]>; } >; }