| 5 | private items = new LuaTable<K, V>(); |
| 6 | |
| 7 | constructor(entries?: Iterable<readonly [K, V]> | Array<readonly [K, V]>) { |
| 8 | setmetatable(this.items, { __mode: "k" }); |
| 9 | if (entries === undefined) return; |
| 10 | |
| 11 | const iterable = entries as Iterable<[K, V]>; |
| 12 | if (iterable[Symbol.iterator]) { |
| 13 | // Iterate manually because WeakMap is compiled with ES5 which doesn't support Iterables in for...of |
| 14 | const iterator = iterable[Symbol.iterator](); |
| 15 | while (true) { |
| 16 | const result = iterator.next(); |
| 17 | if (result.done) { |
| 18 | break; |
| 19 | } |
| 20 | |
| 21 | const value: [K, V] = result.value; // Ensures index is offset when tuple is accessed |
| 22 | this.items.set(value[0], value[1]); |
| 23 | } |
| 24 | } else { |
| 25 | for (const kvp of entries as Array<[K, V]>) { |
| 26 | this.items.set(kvp[0], kvp[1]); |
| 27 | } |
| 28 | } |
| 29 | } |
| 30 | |
| 31 | public delete(key: K): boolean { |
| 32 | const contains = this.has(key); |