UNPKG

grunt-sort-json

Version:

Alphabetizing JSON files. Sort JSON files.

68 lines (55 loc) 1.73 kB
'use strict'; 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); }); }); };