/* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the "Elastic License * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side * Public License v 1"; you may not use this file except in compliance with, at * your election, the "Elastic License 2.0", the "GNU Affero General Public * License v3.0 only", or the "Server Side Public License, v 1". */ export class SetMap { private readonly map = new Map>(); add(key: Key, value: Value) { const group = this.map.get(key); if (!group) { this.map.set(key, new Set([value])); } else { group.add(value); } } get(key: Key) { return this.map.get(key); } keys() { return this.map.keys(); } values() { return this.map.values(); } [Symbol.iterator]() { return this.map[Symbol.iterator](); } }