'use strict'; 
 | 
// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` 
 | 
require('../modules/es.map'); 
 | 
require('../modules/es.weak-map'); 
 | 
var getBuiltIn = require('../internals/get-built-in'); 
 | 
var create = require('../internals/object-create'); 
 | 
var isObject = require('../internals/is-object'); 
 | 
  
 | 
var $Object = Object; 
 | 
var $TypeError = TypeError; 
 | 
var Map = getBuiltIn('Map'); 
 | 
var WeakMap = getBuiltIn('WeakMap'); 
 | 
  
 | 
var Node = function () { 
 | 
  // keys 
 | 
  this.object = null; 
 | 
  this.symbol = null; 
 | 
  // child nodes 
 | 
  this.primitives = null; 
 | 
  this.objectsByIndex = create(null); 
 | 
}; 
 | 
  
 | 
Node.prototype.get = function (key, initializer) { 
 | 
  return this[key] || (this[key] = initializer()); 
 | 
}; 
 | 
  
 | 
Node.prototype.next = function (i, it, IS_OBJECT) { 
 | 
  var store = IS_OBJECT 
 | 
    ? this.objectsByIndex[i] || (this.objectsByIndex[i] = new WeakMap()) 
 | 
    : this.primitives || (this.primitives = new Map()); 
 | 
  var entry = store.get(it); 
 | 
  if (!entry) store.set(it, entry = new Node()); 
 | 
  return entry; 
 | 
}; 
 | 
  
 | 
var root = new Node(); 
 | 
  
 | 
module.exports = function () { 
 | 
  var active = root; 
 | 
  var length = arguments.length; 
 | 
  var i, it; 
 | 
  // for prevent leaking, start from objects 
 | 
  for (i = 0; i < length; i++) { 
 | 
    if (isObject(it = arguments[i])) active = active.next(i, it, true); 
 | 
  } 
 | 
  if (this === $Object && active === root) throw new $TypeError('Composite keys must contain a non-primitive component'); 
 | 
  for (i = 0; i < length; i++) { 
 | 
    if (!isObject(it = arguments[i])) active = active.next(i, it, false); 
 | 
  } return active; 
 | 
}; 
 |