const HTML_MIME = 'text/html' const WHITESPACE = /\s+/ const EMPTY_DOCUMENT = '

' const BLOCK_END = /<\/(?:p|h[1-6]|li|blockquote|pre|div)>|/gi export const LARGE_BODY_CHARACTERS = 50000 export function isLargeBody(characters: number) { return characters >= LARGE_BODY_CHARACTERS } export type BodyCounts = { words: number; characters: number } export function bodyCounts(html: string): BodyCounts { if (html.length === 0 || html === EMPTY_DOCUMENT) { return { words: 0, characters: 0 } } const text = new DOMParser().parseFromString(html.replace(BLOCK_END, '$& '), HTML_MIME).body .textContent ?? '' const words = text.split(WHITESPACE).filter(Boolean).length return { words, characters: html.length } }