You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
'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; };
|