Skip to content

Commit f5bae9e

Browse files
Memoize entity encoding
1 parent ced65a7 commit f5bae9e

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

src/util.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
/**
2+
* @template T
3+
* @param {T} fn
4+
* @returns {T}
5+
*/
6+
function memoize(fn) {
7+
const cache = new Map();
8+
return (arg) => {
9+
let res = cache.get(arg);
10+
if (!res) {
11+
res = fn(arg);
12+
cache.set(arg, res);
13+
}
14+
return res;
15+
};
16+
}
17+
118
// DOM properties that should NOT have "px" added when numeric
219
export const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|^--/i;
320

@@ -9,10 +26,15 @@ const tagsToReplace = {
926
'"': '"'
1027
};
1128
const replaceTag = (tag) => tagsToReplace[tag] || tag;
12-
export function encodeEntities(s) {
29+
30+
/**
31+
* @param {any} s
32+
* @returns {string}
33+
*/
34+
export const encodeEntities = memoize((s) => {
1335
if (typeof s !== 'string') s = String(s);
1436
return s.replace(HTML_ENTITY_REG, replaceTag);
15-
}
37+
});
1638

1739
export let indent = (s, char) =>
1840
String(s).replace(/(\n+)/g, '$1' + (char || '\t'));

0 commit comments

Comments
 (0)