1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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;
- }
- }
|