fmtjson
Version:
Format json files.
53 lines (42 loc) • 3.84 kB
JavaScript
/**
* @function sortProperties
* @private
*/
;
/** @lends sortProperties */
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
function sortProperties(data) {
if (!data) {
return data;
}
if (Array.isArray(data)) {
return data.map(sortProperties);
}
switch ((0, _typeof2["default"])(data)) {
case 'string':
case 'number':
case 'boolean':
return data;
default:
break;
}
var sorted = {};
var keys = Object.keys(data).sort(function (a, b) {
return a.localeCompare(b);
});
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var val = data[key];
if (Array.isArray(val)) {
sorted[key] = val;
} else if ((0, _typeof2["default"])(val) === 'object') {
sorted[key] = sortProperties(val);
} else {
sorted[key] = val;
}
}
return sorted;
}
module.exports = sortProperties;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNvcnRfcHJvcGVydGllcy5qcyJdLCJuYW1lcyI6WyJzb3J0UHJvcGVydGllcyIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJzb3J0ZWQiLCJrZXlzIiwiT2JqZWN0Iiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImkiLCJsZW5ndGgiLCJrZXkiLCJ2YWwiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7OztBQUtBO0FBRUE7Ozs7OztBQUNBLFNBQVNBLGNBQVQsQ0FBeUJDLElBQXpCLEVBQStCO0FBQzdCLE1BQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1QsV0FBT0EsSUFBUDtBQUNEOztBQUNELE1BQUlDLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixJQUFkLENBQUosRUFBeUI7QUFDdkIsV0FBT0EsSUFBSSxDQUFDRyxHQUFMLENBQVNKLGNBQVQsQ0FBUDtBQUNEOztBQUNELG1DQUFlQyxJQUFmO0FBQ0UsU0FBSyxRQUFMO0FBQ0EsU0FBSyxRQUFMO0FBQ0EsU0FBSyxTQUFMO0FBQ0UsYUFBT0EsSUFBUDs7QUFDRjtBQUNFO0FBTko7O0FBUUEsTUFBTUksTUFBTSxHQUFHLEVBQWY7QUFDQSxNQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0QsSUFBUCxDQUFZTCxJQUFaLEVBQWtCTyxJQUFsQixDQUF1QixVQUFDQyxDQUFELEVBQUlDLENBQUo7QUFBQSxXQUFVRCxDQUFDLENBQUNFLGFBQUYsQ0FBZ0JELENBQWhCLENBQVY7QUFBQSxHQUF2QixDQUFiOztBQUNBLE9BQUssSUFBSUUsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR04sSUFBSSxDQUFDTyxNQUF6QixFQUFpQ0QsQ0FBQyxFQUFsQyxFQUFzQztBQUNwQyxRQUFNRSxHQUFHLEdBQUdSLElBQUksQ0FBQ00sQ0FBRCxDQUFoQjtBQUNBLFFBQU1HLEdBQUcsR0FBR2QsSUFBSSxDQUFDYSxHQUFELENBQWhCOztBQUNBLFFBQUlaLEtBQUssQ0FBQ0MsT0FBTixDQUFjWSxHQUFkLENBQUosRUFBd0I7QUFDdEJWLE1BQUFBLE1BQU0sQ0FBQ1MsR0FBRCxDQUFOLEdBQWNDLEdBQWQ7QUFDRCxLQUZELE1BRU8sSUFBSSx5QkFBT0EsR0FBUCxNQUFlLFFBQW5CLEVBQTZCO0FBQ2xDVixNQUFBQSxNQUFNLENBQUNTLEdBQUQsQ0FBTixHQUFjZCxjQUFjLENBQUNlLEdBQUQsQ0FBNUI7QUFDRCxLQUZNLE1BRUE7QUFDTFYsTUFBQUEsTUFBTSxDQUFDUyxHQUFELENBQU4sR0FBY0MsR0FBZDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBT1YsTUFBUDtBQUNEOztBQUVEVyxNQUFNLENBQUNDLE9BQVAsR0FBaUJqQixjQUFqQiIsInNvdXJjZVJvb3QiOiIuLi8uLi9saWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmdW5jdGlvbiBzb3J0UHJvcGVydGllc1xuICogQHByaXZhdGVcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqIEBsZW5kcyBzb3J0UHJvcGVydGllcyAqL1xuZnVuY3Rpb24gc29ydFByb3BlcnRpZXMgKGRhdGEpIHtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIHJldHVybiBkYXRhLm1hcChzb3J0UHJvcGVydGllcylcbiAgfVxuICBzd2l0Y2ggKHR5cGVvZiBkYXRhKSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIGRhdGFcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWtcbiAgfVxuICBjb25zdCBzb3J0ZWQgPSB7fVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSkuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgY29uc3QgdmFsID0gZGF0YVtrZXldXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgc29ydGVkW2tleV0gPSB2YWxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICBzb3J0ZWRba2V5XSA9IHNvcnRQcm9wZXJ0aWVzKHZhbClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ydGVkW2tleV0gPSB2YWxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNvcnRlZFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNvcnRQcm9wZXJ0aWVzXG4iXX0=