// SPDX-License-Identifier: AGPL-3.0-or-later import {decode} from 'html-entities'; import _ from 'lodash'; function isInvisibleContentCodePoint(codePoint: number): boolean { return ( codePoint === 0x0000 || codePoint === 0x00ad || codePoint === 0x034f || codePoint === 0x061c || codePoint === 0x115f || codePoint === 0x1160 || codePoint === 0x17b4 || codePoint === 0x17b5 || codePoint === 0x180e || (codePoint >= 0x200b && codePoint <= 0x200f) || (codePoint >= 0x202a && codePoint <= 0x202e) || (codePoint >= 0x2060 && codePoint <= 0x2069) || codePoint === 0x2800 || codePoint === 0x3164 || (codePoint >= 0xfe00 && codePoint <= 0xfe0f) || codePoint === 0xfeff || codePoint === 0xffa0 || (codePoint >= 0xe0100 && codePoint <= 0xe01ef) ); } export function hasVisibleContent(value: string): boolean { for (const char of value) { if (char.trim().length === 0) { continue; } const codePoint = char.codePointAt(0); if (codePoint == null || isInvisibleContentCodePoint(codePoint)) { continue; } return true; } return false; } export function parseString(value: string, maxLength: number) { return _.truncate(decode(value).trim(), {length: maxLength}); }