| '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; | 
| }; |