| 123456789101112131415161718192021222324252627282930313233343536 |
- 'use strict';
- var $ = require('../internals/export');
- var aCallable = require('../internals/a-callable');
- var aWeakMap = require('../internals/a-weak-map');
- var aWeakKey = require('../internals/a-weak-key');
- var WeakMapHelpers = require('../internals/weak-map-helpers');
- var IS_PURE = require('../internals/is-pure');
- var get = WeakMapHelpers.get;
- var has = WeakMapHelpers.has;
- var set = WeakMapHelpers.set;
- var FORCED = IS_PURE || !function () {
- try {
- // eslint-disable-next-line es/no-weak-map, no-throw-literal -- testing
- if (WeakMap.prototype.getOrInsertComputed) new WeakMap().getOrInsertComputed(1, function () { throw 1; });
- } catch (error) {
- // FF144 Nightly - Beta 3 bug
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1988369
- return error instanceof TypeError;
- }
- }();
- // `WeakMap.prototype.getOrInsertComputed` method
- // https://github.com/tc39/proposal-upsert
- $({ target: 'WeakMap', proto: true, real: true, forced: FORCED }, {
- getOrInsertComputed: function getOrInsertComputed(key, callbackfn) {
- aWeakMap(this);
- aWeakKey(key);
- aCallable(callbackfn);
- if (has(this, key)) return get(this, key);
- var value = callbackfn(key);
- set(this, key, value);
- return value;
- }
- });
|