diff --git a/lib/cli.js b/lib/cli.js index 7927ef9..068fcf1 100755 --- a/lib/cli.js +++ b/lib/cli.js @@ -17,6 +17,10 @@ var options = require("nomnom") return JSON.parse(fs.readFileSync(__dirname + "/../package.json", "utf8")).version; } }, + sort : { + string: '-s, --sort-keys', + help: 'sort object keys' + }, inplace : { string: '-i, --in-place', help: 'overwrite the file' @@ -32,7 +36,10 @@ var options = require("nomnom") function parse (source) { try { - return JSON.stringify(parser.parse(source),null,options.indent); + var parsed = options.sort ? + sortObject(parser.parse(source)) : + parser.parse(source); + return JSON.stringify(parsed,null,options.indent); } catch (e) { sys.puts(e); process.exit(1); @@ -47,7 +54,7 @@ function main (args) { if (options.inplace) { fs.writeSync(fs.openSync(path,'w+'), parse(source), 0, "utf8"); } else { - sys.pupts(parse(source)); + sys.puts(parse(source)); } } else { var stdin = process.openStdin(); @@ -62,4 +69,25 @@ function main (args) { } } +// from http://stackoverflow.com/questions/1359761/sorting-a-json-object-in-javascript +function sortObject(o) { + if (Object.prototype.toString.call(o) != '[object Object]') + return o; + var sorted = {}, + key, a = []; + + for (key in o) { + if (o.hasOwnProperty(key)) { + a.push(key); + } + } + + a.sort(); + + for (key = 0; key < a.length; key++) { + sorted[a[key]] = sortObject(o[a[key]]); + } + return sorted; +} + main(process.argv.slice(1));