export default window.WeakMap || (function () {
  let index = 0;
  function Wm () {
    this.key = `____weak_map_${index++}`;
  }
  Wm.prototype = {
    delete (obj) {
      if (obj) {
        delete obj[this.key];
      }
    },
    get (obj) {
      return obj ? obj[this.key] : null;
    },
    has (obj) {
      return obj ? typeof obj[this.key] !== 'undefined' : false;
    },
    set (obj, val) {
      return obj ? obj[this.key] = val : null;
    }
  };
  return Wm;
}());

@@ -406,48 +406,300 @@
     
-return obj ? obj%5Bthis.key%5D = val : null;
+if (obj) %7B%0A        const key = this.key;%0A        if (typeof obj%5Bkey%5D === 'undefined') %7B%0A          Object.defineProperty(obj, key, %7B%0A            configurable: true,%0A            enumerable: false,%0A            value: val%0A          %7D);%0A        %7D else %7B%0A          obj%5Bkey%5D = val;%0A        %7D%0A      %7D
 %0A   

Make weak map props non-enumerable preventing circular references when traversing props.