WeakMap

An essential WeakMap polyfill for legacy browsers (IE < 11).
Compatible down to IE9, works well with ES5 shim upfront in IE8 (and maybe lower too).
Live test
Transpiled code and frozen objects in legacy browsers
If you need this module to work in IE < 11 too with frozen objects, or template literals frozen via Babel transpilation, you need to either nullify Object.freeze
and others via something like <script>this.WeakMap||(Object.freeze=Object);</script>
on top of your pages, or you can nullify only template literals through:
<script>
this.WeakMap||(function(O,f){
f=O.freeze||O;O.freeze=function(o){return'raw'in o?o:f(o)}
}(Object));
</script>