"use strict"; module.exports = function generateLookupTable(items, getKey) { let lookupTable = new Map(); function setItem(key, value) { // TODO: Add a fast path for unique keys (no array wrapping), so that the index can contain both single items and arrays? if (lookupTable.has(key)) { lookupTable.get(key).push(value); } else { lookupTable.set(key, [ value ]); } } items.forEach((item) => { let key = getKey(item); if (key != null) { if (Array.isArray(key)) { // This item should be available under multiple keys for (let keyItem of key) { setItem(keyItem, item); } } else { setItem(key, item); } } }); return lookupTable; };