You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
22 lines
471 B
22 lines
471 B
'use strict'; |
|
|
|
/** |
|
* If `map` already has the given `key`, returns its value. Otherwise, calls |
|
* `callback`, adds the result to `map` at `key`, and then returns it. |
|
* |
|
* @template K |
|
* @template V |
|
* @param {Map<K, V>} map |
|
* @param {K} key |
|
* @param {() => V} callback |
|
* @returns {V} |
|
*/ |
|
module.exports = function (map, key, callback) { |
|
if (map.has(key)) return /** @type {V} */ (map.get(key)); |
|
|
|
const value = callback(); |
|
|
|
map.set(key, value); |
|
|
|
return value; |
|
};
|
|
|