UNPKG

core-js

Version:
48 lines (43 loc) 1.57 kB
'use strict'; var $ = require('./$') , $def = require('./$.def') , hide = require('./$.hide') , forOf = require('./$.for-of') , strictNew = require('./$.strict-new'); module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ var Base = require('./$.global')[NAME] , C = Base , ADDER = IS_MAP ? 'set' : 'add' , proto = C && C.prototype , O = {}; if(!require('./$.support-desc') || typeof C != 'function' || !(IS_WEAK || proto.forEach && !require('./$.fails')(function(){ new C().entries().next(); })) ){ // create collection constructor C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); require('./$.mix')(C.prototype, methods); } else { C = wrapper(function(target, iterable){ strictNew(target, C, NAME); target._c = new Base; if(iterable != undefined)forOf(iterable, IS_MAP, target[ADDER], target); }); $.each.call('add,clear,delete,forEach,get,has,set,keys,values,entries'.split(','),function(KEY){ var chain = KEY == 'add' || KEY == 'set'; if(KEY in proto && !(IS_WEAK && KEY == 'clear'))hide(C.prototype, KEY, function(a, b){ var result = this._c[KEY](a === 0 ? 0 : a, b); return chain ? this : result; }); }); if('size' in proto)$.setDesc(C.prototype, 'size', { get: function(){ return this._c.size; } }); } require('./$.tag')(C, NAME); O[NAME] = C; $def($def.G + $def.W + $def.F, O); if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); return C; };