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.
		
		
		
		
		
			
		
			
				
					
					
						
							44 lines
						
					
					
						
							788 B
						
					
					
				
			
		
		
	
	
							44 lines
						
					
					
						
							788 B
						
					
					
				'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); | 
						|
};
 | 
						|
 |