Adding Sort Object Keys, and tests for it.

This commit is contained in:
Phillip Nordwall 2018-11-20 20:32:59 -08:00
parent c16d13e2c9
commit c4c679021d
2 changed files with 50 additions and 9 deletions

View file

@ -1,5 +1,6 @@
/**
* @author n1474335 [n1474335@gmail.com]
* @author Phillip Nordwall [phillip.nordwall@gmail.com]
* @copyright Crown Copyright 2016
* @license Apache-2.0
*/
@ -28,6 +29,11 @@ class JSONBeautify extends Operation {
"name": "Indent string",
"type": "binaryShortString",
"value": "\\t"
},
{
"name": "Sort Object Keys",
"type": "boolean",
"value": false
}
];
}
@ -39,10 +45,34 @@ class JSONBeautify extends Operation {
*/
run(input, args) {
const indentStr = args[0];
const sortBool = args[1];
if (!input) return "";
if (sortBool) {
input = JSON.stringify(JSONBeautify._sort(JSON.parse(input)));
}
return vkbeautify.json(input, indentStr);
}
/**
* Sort JSON representation of an object
*
* @author Phillip Nordwall [phillip.nordwall@gmail.com]
* @private
* @param {object} o
* @returns {object}
*/
static _sort(o) {
if (Array.isArray(o)) {
return o.map(JSONBeautify._sort);
} else if ("[object Object]" === Object.prototype.toString.call(o)) {
return Object.keys(o).sort().reduce(function(a, k) {
a[k] = JSONBeautify._sort(o[k]);
return a;
}, {});
}
return o;
}
}
export default JSONBeautify;