UNPKG

decode-named-character-reference

Version:
37 lines (31 loc) 1.24 kB
/// <reference lib="dom" /> /* eslint-env browser */ const element = document.createElement('i') /** * @param {string} value * @returns {string | false} */ export function decodeNamedCharacterReference(value) { const characterReference = '&' + value + ';' element.innerHTML = characterReference const character = element.textContent // Some named character references do not require the closing semicolon // (`&not`, for instance), which leads to situations where parsing the assumed // named reference of `&notit;` will result in the string `¬it;`. // When we encounter a trailing semicolon after parsing, and the character // reference to decode was not a semicolon (`&semi;`), we can assume that the // matching was not complete. if ( // @ts-expect-error: TypeScript is wrong that `textContent` on elements can // yield `null`. character.charCodeAt(character.length - 1) === 59 /* `;` */ && value !== 'semi' ) { return false } // If the decoded string is equal to the input, the character reference was // not valid. // @ts-expect-error: TypeScript is wrong that `textContent` on elements can // yield `null`. return character === characterReference ? false : character }