grunt-sort-json
Version:
Alphabetizing JSON files. Sort JSON files.
68 lines (55 loc) • 1.73 kB
JavaScript
;
module.exports = function (grunt) {
/**
* recursively sort a given object
*
* @method recursiveSort
* @param {Object} obj
* @return {Object} sortedObject
*/
function recursiveSort (obj) {
var orderedAttributes = Object.keys(obj).sort();
var newObject = {};
var i;
var attr;
for (i = 0; i < orderedAttributes.length; i++) {
attr = orderedAttributes[i];
newObject[attr] = obj[attr];
// if it's an object, sort it!
if (typeof obj[attr] === 'object') {
newObject[attr] = recursiveSort(newObject[attr]);
}
}
return newObject
}
/**
* sort the give source file and rewrite its contents
*
* @method sortFile
* @param {String} file Path to source file
*/
function sortFile (file, spacing) {
var object = grunt.file.readJSON(file);
var sortedObject = recursiveSort(object);
grunt.file.write(file, JSON.stringify(sortedObject, null, spacing));
grunt.log.writeln('File sorted: ' + file.cyan);
}
//
// register tags grunt task
//
grunt.registerMultiTask('sortJSON', 'Alphabetizing JSON files. Sort JSON files.', function () {
var options = this.options({
spacing: 4,
jshint: false,
jshintrc: '.jshintrc'
});
var spacing = options.spacing;
if (options.jshint) {
var jshintrc = grunt.file.readJSON(options.jshintrc);
spacing = jshintrc.indent || spacing;
}
this.filesSrc.forEach(function (file) {
sortFile(file, spacing);
});
});
};