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