Show More
Commit Description:
merge
Commit Description:
merge
References:
File last commit:
Show/Diff file:
Action:
node_modules/core-js/modules/library/_collection.js
| 59 lines
| 2.0 KiB
| application/javascript
| JavascriptLexer
|
r789 | 'use strict'; | |||
var global = require('./_global'); | ||||
var $export = require('./_export'); | ||||
var meta = require('./_meta'); | ||||
var fails = require('./_fails'); | ||||
var hide = require('./_hide'); | ||||
var redefineAll = require('./_redefine-all'); | ||||
var forOf = require('./_for-of'); | ||||
var anInstance = require('./_an-instance'); | ||||
var isObject = require('./_is-object'); | ||||
var setToStringTag = require('./_set-to-string-tag'); | ||||
var dP = require('./_object-dp').f; | ||||
var each = require('./_array-methods')(0); | ||||
var DESCRIPTORS = require('./_descriptors'); | ||||
module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { | ||||
var Base = global[NAME]; | ||||
var C = Base; | ||||
var ADDER = IS_MAP ? 'set' : 'add'; | ||||
var proto = C && C.prototype; | ||||
var O = {}; | ||||
if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { | ||||
new C().entries().next(); | ||||
}))) { | ||||
// create collection constructor | ||||
C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); | ||||
redefineAll(C.prototype, methods); | ||||
meta.NEED = true; | ||||
} else { | ||||
C = wrapper(function (target, iterable) { | ||||
anInstance(target, C, NAME, '_c'); | ||||
target._c = new Base(); | ||||
if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target); | ||||
}); | ||||
each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) { | ||||
var IS_ADDER = KEY == 'add' || KEY == 'set'; | ||||
if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) { | ||||
anInstance(this, C, KEY); | ||||
if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false; | ||||
var result = this._c[KEY](a === 0 ? 0 : a, b); | ||||
return IS_ADDER ? this : result; | ||||
}); | ||||
}); | ||||
IS_WEAK || dP(C.prototype, 'size', { | ||||
get: function () { | ||||
return this._c.size; | ||||
} | ||||
}); | ||||
} | ||||
setToStringTag(C, NAME); | ||||
O[NAME] = C; | ||||
$export($export.G + $export.W + $export.F, O); | ||||
if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); | ||||
return C; | ||||
}; | ||||