/**
 * 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.
 *
 *  strict
 * @format
 */
"use strict";

class MapWithDefaults extends Map {
  constructor(factory, iterable) {
    super(iterable);
    this._factory = factory;
  }

  get(key) {
    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;