-
-
Notifications
You must be signed in to change notification settings - Fork 32
/
index.js
41 lines (34 loc) · 1.19 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// TODO: Use `String#replaceAll` when targeting Node.js 16.
// Multiple `.replace()` calls are actually faster than using replacer functions #2.
const _htmlEscape = string => string
.replace(/&/g, '&') // Must happen first or else it will escape other just-escaped characters.
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
const _htmlUnescape = htmlString => htmlString
.replace(/>/g, '>')
.replace(/</g, '<')
.replace(/�?39;/g, '\'')
.replace(/"/g, '"')
.replace(/&/g, '&'); // Must happen last or else it will unescape other characters in the wrong order.
export function htmlEscape(strings, ...values) {
if (typeof strings === 'string') {
return _htmlEscape(strings);
}
let output = strings[0];
for (const [index, value] of values.entries()) {
output = output + _htmlEscape(String(value)) + strings[index + 1];
}
return output;
}
export function htmlUnescape(strings, ...values) {
if (typeof strings === 'string') {
return _htmlUnescape(strings);
}
let output = strings[0];
for (const [index, value] of values.entries()) {
output = output + _htmlUnescape(String(value)) + strings[index + 1];
}
return output;
}