let wmUniqueIndex = Math.round(Math.random() * 9); 
 | 
  
 | 
const supportDefineProperty = typeof Object.defineProperty === 'function'; 
 | 
  
 | 
export default class WeakMap<K extends object, V> { 
 | 
  
 | 
    protected _id: string; 
 | 
  
 | 
    constructor() { 
 | 
        this._id = '__ec_inner_' + wmUniqueIndex++; 
 | 
    } 
 | 
  
 | 
    get(key: K): V { 
 | 
        return (this._guard(key) as any)[this._id]; 
 | 
    } 
 | 
  
 | 
    set(key: K, value: V): WeakMap<K, V> { 
 | 
        const target = this._guard(key) as any; 
 | 
        if (supportDefineProperty) { 
 | 
            Object.defineProperty(target, this._id, { 
 | 
                value: value, 
 | 
                enumerable: false, 
 | 
                configurable: true 
 | 
            }); 
 | 
        } 
 | 
        else { 
 | 
            target[this._id] = value; 
 | 
        } 
 | 
        return this; 
 | 
    } 
 | 
  
 | 
    delete(key: K): boolean { 
 | 
        if (this.has(key)) { 
 | 
            delete (this._guard(key) as any)[this._id]; 
 | 
            return true; 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
    has(key: K): boolean { 
 | 
        return !!(this._guard(key) as any)[this._id]; 
 | 
    } 
 | 
  
 | 
    protected _guard(key: K): K { 
 | 
        if (key !== Object(key)) { 
 | 
            throw TypeError('Value of WeakMap is not a non-null object.'); 
 | 
        } 
 | 
        return key; 
 | 
    } 
 | 
} 
 |