/ cloudformation-templates / node_modules / aws-cdk / node_modules / es5-ext / lib / Object / compare.js
compare.js
1 'use strict'; 2 3 var keys = Object.keys 4 , isString = require('../String/is-string') 5 , strCompare = require('../String/prototype/case-insensitive-compare') 6 , isObject = require('./is-object') 7 8 , resolve, typeMap; 9 10 typeMap = { 11 undefined: 0, 12 object: 1, 13 'boolean': 2, 14 string: 3, 15 number: 4 16 }; 17 18 resolve = function (a) { 19 if (isObject(a)) { 20 a = a.valueOf(); 21 if (isObject(a)) { 22 a = a.toString(); 23 } 24 } 25 return a; 26 }; 27 28 module.exports = function (a, b) { 29 if (a === b) { 30 // Same 31 return 0; 32 } 33 a = resolve(a); 34 b = resolve(b); 35 if (a == b) { 36 return typeMap[typeof a] - typeMap[typeof b]; 37 } else if (a == null) { 38 return -1; 39 } else if (b == null) { 40 return 1; 41 } else if ((typeof a === 'string') || (typeof b === 'string')) { 42 return strCompare.call(a, b); 43 } else { 44 return Number(a) - Number(b); 45 } 46 };