aboutsummaryrefslogtreecommitdiff
path: root/node_modules/core-js/modules/library/_collection.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/core-js/modules/library/_collection.js')
-rw-r--r--node_modules/core-js/modules/library/_collection.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/node_modules/core-js/modules/library/_collection.js b/node_modules/core-js/modules/library/_collection.js
new file mode 100644
index 000000000..0bdd7fcbb
--- /dev/null
+++ b/node_modules/core-js/modules/library/_collection.js
@@ -0,0 +1,59 @@
+'use strict';
+var global = require('./_global')
+ , $export = require('./_export')
+ , meta = require('./_meta')
+ , fails = require('./_fails')
+ , hide = require('./_hide')
+ , redefineAll = require('./_redefine-all')
+ , forOf = require('./_for-of')
+ , anInstance = require('./_an-instance')
+ , isObject = require('./_is-object')
+ , setToStringTag = require('./_set-to-string-tag')
+ , dP = require('./_object-dp').f
+ , each = require('./_array-methods')(0)
+ , DESCRIPTORS = require('./_descriptors');
+
+module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){
+ var Base = global[NAME]
+ , C = Base
+ , ADDER = IS_MAP ? 'set' : 'add'
+ , proto = C && C.prototype
+ , 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;
+ });
+ });
+ if('size' in proto)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;
+}; \ No newline at end of file