const ATTR_REGEX = /[&"<]/g; | |
const CONTENT_REGEX = /[&<]/g; | |
/** | |
* Note: this method is performance sensitive and has been optimized | |
* https://github.com/sveltejs/svelte/pull/5701 | |
* @param {unknown} value | |
* @returns {string} | |
*/ | |
export function escape(value, is_attr = false) { | |
const str = String(value); | |
const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX; | |
pattern.lastIndex = 0; | |
let escaped = ''; | |
let last = 0; | |
while (pattern.test(str)) { | |
const i = pattern.lastIndex - 1; | |
const ch = str[i]; | |
escaped += str.substring(last, i) + (ch === '&' ? '&' : ch === '"' ? '"' : '<'); | |
last = i + 1; | |
} | |
return escaped + str.substring(last); | |
} | |