chrome-devtools-frontend
Version:
Chrome DevTools UI
27 lines (22 loc) • 706 B
text/typescript
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* Polyfill of https://github.com/tc39/proposal-upsert with a subclass.
*
* TODO: Once the proposal is merged, just replace `MapWithDefault` with `Map` and remove it.
**/
export class MapWithDefault<K, V> extends Map<K, V> {
getOrInsert(key: K, defaultValue: V): V {
if (!this.has(key)) {
this.set(key, defaultValue);
}
return this.get(key) as V;
}
getOrInsertComputed(key: K, callbackFunction: (key: K) => V): V {
if (!this.has(key)) {
this.set(key, callbackFunction(key));
}
return this.get(key) as V;
}
}