| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | 'use strict';var isPlainObj = require('is-plain-obj');module.exports = function (obj, opts) {	if (!isPlainObj(obj)) {		throw new TypeError('Expected a plain object');	}	opts = opts || {};	// DEPRECATED	if (typeof opts === 'function') {		opts = {compare: opts};	}	var deep = opts.deep;	var seenInput = [];	var seenOutput = [];	var sortKeys = function (x) {		var seenIndex = seenInput.indexOf(x);		if (seenIndex !== -1) {			return seenOutput[seenIndex];		}		var ret = {};		var keys = Object.keys(x).sort(opts.compare);		seenInput.push(x);		seenOutput.push(ret);		for (var i = 0; i < keys.length; i++) {			var key = keys[i];			var val = x[key];			ret[key] = deep && isPlainObj(val) ? sortKeys(val) : val;		}		return ret;	};	return sortKeys(obj);};
 |