/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow strict * @format */ 'use strict'; class MapWithDefaults<TK, TV> extends Map<TK, TV> { _factory: TK => TV; constructor(factory: TK => TV, iterable?: Iterable<[TK, TV]>) { super(iterable); this._factory = factory; } get(key: TK): TV { if (this.has(key)) { return Map.prototype.get.call(this, key); } const value = this._factory(key); this.set(key, value); return value; } } module.exports = MapWithDefaults;