Files
RenewCMS/web/src/lib/bodyCounts.ts
T

24 lines
738 B
TypeScript

const HTML_MIME = 'text/html'
const WHITESPACE = /\s+/
const EMPTY_DOCUMENT = '<p></p>'
const BLOCK_END = /<\/(?:p|h[1-6]|li|blockquote|pre|div)>|<br\s*\/?>/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 }
}