diff --git a/src/@prototypes/index.ts b/src/@prototypes/index.ts new file mode 100644 index 00000000..51bda67e --- /dev/null +++ b/src/@prototypes/index.ts @@ -0,0 +1 @@ +import "./map"; diff --git a/src/@prototypes/map.ts b/src/@prototypes/map.ts new file mode 100644 index 00000000..40d4d20d --- /dev/null +++ b/src/@prototypes/map.ts @@ -0,0 +1,16 @@ +Map.prototype.getOrInsert ??= function (key, defaultValue) { + const value = this.get(key); + if (value !== undefined) return value; + + this.set(key, defaultValue); + return defaultValue; +}; + +Map.prototype.getOrInsertComputed ??= function (key, callback) { + const value = this.get(key); + if (value !== undefined) return value; + + const defaultValue = callback(key); + this.set(key, defaultValue); + return defaultValue; +}; diff --git a/src/extension.ts b/src/extension.ts index 271c2783..d7a4c672 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,4 +1,5 @@ import type { ExtensionContext } from "vscode"; +import "./@prototypes"; import ExtensionCore from "./core/extension"; import { localize } from "./localize";