canonicalize
Advanced tools
Comparing version 1.0.3 to 1.0.4
@@ -5,33 +5,23 @@ /* jshint esversion: 6 */ | ||
module.exports = function (object) { | ||
return serialize(object); | ||
module.exports = function serialize (object) { | ||
if (object === null || typeof object !== 'object' || object.toJSON != null) { | ||
return JSON.stringify(object); | ||
} | ||
function serialize (object) { | ||
if (object === null || typeof object !== 'object' || object.toJSON != null) { | ||
return JSON.stringify(object); | ||
if (Array.isArray(object)) { | ||
return '[' + object.reduce((t, cv, ci) => { | ||
const comma = ci === 0 ? '' : ','; | ||
const value = cv === undefined || typeof cv === 'symbol' ? null : cv; | ||
return t + comma + serialize(value); | ||
}, '') + ']'; | ||
} | ||
return '{' + Object.keys(object).sort().reduce((t, cv, ci) => { | ||
if (object[cv] === undefined || | ||
typeof object[cv] === 'symbol') { | ||
return t; | ||
} | ||
if (Array.isArray(object) && object.length === 0) { | ||
return '[]'; | ||
} | ||
if (Array.isArray(object) && object.length === 1) { | ||
return '[' + serialize(object[0]) + ']'; | ||
} | ||
if (Array.isArray(object)) { | ||
return '[' + object.reduce((t, cv, ci) => { | ||
t = (ci === 1 ? serialize(t) : t); | ||
return t + ',' + serialize(cv); | ||
}) + ']'; | ||
} | ||
const keys = Object.keys(object); | ||
if (keys.length === 0) { | ||
return '{}'; | ||
} | ||
if (keys.length === 1) { | ||
return '{' + serialize(keys[0]) + ':' + serialize(object[keys[0]]) + '}'; | ||
} | ||
return '{' + keys.sort().reduce((t, cv, ci) => { | ||
t = (ci === 1 ? serialize(t) + ':' + serialize(object[t]) : t); | ||
return t + ',' + serialize(cv) + ':' + serialize(object[cv]); | ||
}) + '}'; | ||
} | ||
const comma = t.length === 0 ? '' : ','; | ||
return t + comma + serialize(cv) + ':' + serialize(object[cv]); | ||
}, '') + '}'; | ||
}; |
{ | ||
"name": "canonicalize", | ||
"version": "1.0.3", | ||
"version": "1.0.4", | ||
"description": "JSON canonicalize function ", | ||
@@ -5,0 +5,0 @@ "main": "lib/canonicalize.js", |
@@ -14,6 +14,6 @@ [![Build Status](https://travis-ci.com/erdtman/canonicalize.svg?branch=master)](https://travis-ci.com/erdtman/canonicalize) | ||
"amount": 500, | ||
"curency": "USD" | ||
"currency": "USD" | ||
} | ||
console.log(JSON.canonicalize(json)); | ||
// output: {"amount":500,"curency":"USD","from_account":"543 232 625-3","to_account":"321 567 636-4"} | ||
// output: {"amount":500,"currency":"USD","from_account":"543 232 625-3","to_account":"321 567 636-4"} | ||
``` | ||
@@ -20,0 +20,0 @@ ### Crazy Example |
20560
18
209