UNPKG

fmtjson

Version:
203 lines (160 loc) 14 kB
/** * Format json files. * @function fmtjson * @param {string|string[]} filename - Filename patterns to format. * @param {object} [options] - Optional settings. * @param {number} [options.indent=2] - Number of indent. * @param {boolean} [options.sort=false] - Sort properties. * @param {string} [options.mode='644'] - File permission. * @param {string} [options.cwd=process.cwd()] - Current working path * @returns {Promise} */ 'use strict'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var argx = require('argx'); var aglob = require('aglob'); var _require = require('asfs'), readFileAsync = _require.readFileAsync; var path = require('path'); var _require2 = require('os'), EOL = _require2.EOL; var sortProperties = require('./sort_properties'); var writeout = require('writeout'); /** @lends fmtjson */ function fmtjson(_x, _x2) { return _fmtjson.apply(this, arguments); } function _fmtjson() { _fmtjson = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(src, options) { var args, _options, _options$indent, indent, _options$sort, sort, _options$mode, mode, _options$cwd, cwd, _options$ignore, ignore, filenames, results, _iterator, _step, filename, oldContent, data, newContent, changed, result, _args = arguments; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: args = argx(_args); if (!args.pop('function')) { _context.next = 3; break; } throw new Error('Callback is not supported now. Use promise interface instead.'); case 3: src = args.shift('string|array'); options = args.pop('object') || {}; _options = options, _options$indent = _options.indent, indent = _options$indent === void 0 ? 2 : _options$indent, _options$sort = _options.sort, sort = _options$sort === void 0 ? false : _options$sort, _options$mode = _options.mode, mode = _options$mode === void 0 ? '644' : _options$mode, _options$cwd = _options.cwd, cwd = _options$cwd === void 0 ? process.cwd() : _options$cwd, _options$ignore = _options.ignore, ignore = _options$ignore === void 0 ? [] : _options$ignore; _context.next = 8; return aglob(src, { cwd: cwd, ignore: ignore }); case 8: filenames = _context.sent; results = []; _iterator = _createForOfIteratorHelper(filenames); _context.prev = 11; _iterator.s(); case 13: if ((_step = _iterator.n()).done) { _context.next = 33; break; } filename = _step.value; _context.next = 17; return readFileAsync(filename); case 17: oldContent = _context.sent; data = JSON.parse(oldContent); if (sort) { data = sortProperties(data); } newContent = JSON.stringify(data, null, indent) + EOL; changed = String(oldContent) !== String(newContent); result = void 0; if (!changed) { _context.next = 29; break; } _context.next = 26; return writeout(filename, newContent, { mode: mode, force: true }); case 26: result = { filename: filename, mode: mode, changed: true }; _context.next = 30; break; case 29: result = { filename: filename, changed: false }; case 30: results.push(result); case 31: _context.next = 13; break; case 33: _context.next = 38; break; case 35: _context.prev = 35; _context.t0 = _context["catch"](11); _iterator.e(_context.t0); case 38: _context.prev = 38; _iterator.f(); return _context.finish(38); case 41: return _context.abrupt("return", _mergeResults(results)); case 42: case "end": return _context.stop(); } } }, _callee, null, [[11, 35, 38, 41]]); })); return _fmtjson.apply(this, arguments); } function _mergeResults(results) { var changed = {}; results.forEach(function (result) { if (result.changed) { var filename = path.relative(process.cwd(), result.filename); changed[filename] = result; } }); return changed; } fmtjson.sortProperties = sortProperties; module.exports = fmtjson; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZtdGpzb24uanMiXSwibmFtZXMiOlsiYXJneCIsInJlcXVpcmUiLCJhZ2xvYiIsInJlYWRGaWxlQXN5bmMiLCJwYXRoIiwiRU9MIiwic29ydFByb3BlcnRpZXMiLCJ3cml0ZW91dCIsImZtdGpzb24iLCJzcmMiLCJvcHRpb25zIiwiYXJncyIsInBvcCIsIkVycm9yIiwic2hpZnQiLCJpbmRlbnQiLCJzb3J0IiwibW9kZSIsImN3ZCIsInByb2Nlc3MiLCJpZ25vcmUiLCJmaWxlbmFtZXMiLCJyZXN1bHRzIiwiZmlsZW5hbWUiLCJvbGRDb250ZW50IiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsIm5ld0NvbnRlbnQiLCJzdHJpbmdpZnkiLCJjaGFuZ2VkIiwiU3RyaW5nIiwicmVzdWx0IiwiZm9yY2UiLCJwdXNoIiwiX21lcmdlUmVzdWx0cyIsImZvckVhY2giLCJyZWxhdGl2ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztBQVdBOzs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsSUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsT0FBRCxDQUFyQjs7ZUFDMEJBLE9BQU8sQ0FBQyxNQUFELEM7SUFBekJFLGEsWUFBQUEsYTs7QUFDUixJQUFNQyxJQUFJLEdBQUdILE9BQU8sQ0FBQyxNQUFELENBQXBCOztnQkFDZ0JBLE9BQU8sQ0FBQyxJQUFELEM7SUFBZkksRyxhQUFBQSxHOztBQUNSLElBQU1DLGNBQWMsR0FBR0wsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQU1NLFFBQVEsR0FBR04sT0FBTyxDQUFDLFVBQUQsQ0FBeEI7QUFFQTs7O1NBQ2VPLE87Ozs7OzJGQUFmLGlCQUF1QkMsR0FBdkIsRUFBNEJDLE9BQTVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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QUFHLEVBQWhCO0FBQ0FSLEVBQUFBLE9BQU8sQ0FBQ2MsT0FBUixDQUFnQixVQUFDSixNQUFELEVBQVk7QUFDMUIsUUFBSUEsTUFBTSxDQUFDRixPQUFYLEVBQW9CO0FBQ2xCLFVBQU1QLFFBQVEsR0FBR25CLElBQUksQ0FBQ2lDLFFBQUwsQ0FBY2xCLE9BQU8sQ0FBQ0QsR0FBUixFQUFkLEVBQTZCYyxNQUFNLENBQUNULFFBQXBDLENBQWpCO0FBQ0FPLE1BQUFBLE9BQU8sQ0FBQ1AsUUFBRCxDQUFQLEdBQW9CUyxNQUFwQjtBQUNEO0FBQ0YsR0FMRDtBQU1BLFNBQU9GLE9BQVA7QUFDRDs7QUFFRHRCLE9BQU8sQ0FBQ0YsY0FBUixHQUF5QkEsY0FBekI7QUFFQWdDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQi9CLE9BQWpCIiwic291cmNlUm9vdCI6Ii4uLy4uL2xpYiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9ybWF0IGpzb24gZmlsZXMuXG4gKiBAZnVuY3Rpb24gZm10anNvblxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGZpbGVuYW1lIC0gRmlsZW5hbWUgcGF0dGVybnMgdG8gZm9ybWF0LlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbmFsIHNldHRpbmdzLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmluZGVudD0yXSAtIE51bWJlciBvZiBpbmRlbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnNvcnQ9ZmFsc2VdIC0gU29ydCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm1vZGU9JzY0NCddIC0gRmlsZSBwZXJtaXNzaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmN3ZD1wcm9jZXNzLmN3ZCgpXSAtIEN1cnJlbnQgd29ya2luZyBwYXRoXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFyZ3ggPSByZXF1aXJlKCdhcmd4JylcbmNvbnN0IGFnbG9iID0gcmVxdWlyZSgnYWdsb2InKVxuY29uc3QgeyByZWFkRmlsZUFzeW5jIH0gPSByZXF1aXJlKCdhc2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IHsgRU9MIH0gPSByZXF1aXJlKCdvcycpXG5jb25zdCBzb3J0UHJvcGVydGllcyA9IHJlcXVpcmUoJy4vc29ydF9wcm9wZXJ0aWVzJylcbmNvbnN0IHdyaXRlb3V0ID0gcmVxdWlyZSgnd3JpdGVvdXQnKVxuXG4vKiogQGxlbmRzIGZtdGpzb24gKi9cbmFzeW5jIGZ1bmN0aW9uIGZtdGpzb24oc3JjLCBvcHRpb25zKSB7XG4gIGNvbnN0IGFyZ3MgPSBhcmd4KGFyZ3VtZW50cylcbiAgaWYgKGFyZ3MucG9wKCdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsYmFjayBpcyBub3Qgc3VwcG9ydGVkIG5vdy4gVXNlIHByb21pc2UgaW50ZXJmYWNlIGluc3RlYWQuJylcbiAgfVxuICBzcmMgPSBhcmdzLnNoaWZ0KCdzdHJpbmd8YXJyYXknKVxuICBvcHRpb25zID0gYXJncy5wb3AoJ29iamVjdCcpIHx8IHt9XG5cbiAgbGV0IHtcbiAgICBpbmRlbnQgPSAyLFxuICAgIHNvcnQgPSBmYWxzZSxcbiAgICBtb2RlID0gJzY0NCcsXG4gICAgY3dkID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBpZ25vcmUgPSBbXVxuICB9ID0gb3B0aW9uc1xuXG4gIGNvbnN0IGZpbGVuYW1lcyA9IGF3YWl0IGFnbG9iKHNyYywgeyBjd2QsIGlnbm9yZSB9KVxuICBjb25zdCByZXN1bHRzID0gW11cbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlbmFtZXMpIHtcbiAgICBjb25zdCBvbGRDb250ZW50ID0gYXdhaXQgcmVhZEZpbGVBc3luYyhmaWxlbmFtZSlcbiAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2Uob2xkQ29udGVudClcbiAgICBpZiAoc29ydCkge1xuICAgICAgZGF0YSA9IHNvcnRQcm9wZXJ0aWVzKGRhdGEpXG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBpbmRlbnQpICsgRU9MXG4gICAgY29uc3QgY2hhbmdlZCA9IFN0cmluZyhvbGRDb250ZW50KSAhPT0gU3RyaW5nKG5ld0NvbnRlbnQpXG4gICAgbGV0IHJlc3VsdFxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICBhd2FpdCB3cml0ZW91dChmaWxlbmFtZSwgbmV3Q29udGVudCwge1xuICAgICAgICBtb2RlOiBtb2RlLFxuICAgICAgICBmb3JjZTogdHJ1ZVxuICAgICAgfSlcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIGNoYW5nZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0cy5wdXNoKHJlc3VsdClcbiAgfVxuICByZXR1cm4gX21lcmdlUmVzdWx0cyhyZXN1bHRzKVxufVxuXG5mdW5jdGlvbiBfbWVyZ2VSZXN1bHRzKHJlc3VsdHMpIHtcbiAgY29uc3QgY2hhbmdlZCA9IHt9XG4gIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5jaGFuZ2VkKSB7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgcmVzdWx0LmZpbGVuYW1lKVxuICAgICAgY2hhbmdlZFtmaWxlbmFtZV0gPSByZXN1bHRcbiAgICB9XG4gIH0pXG4gIHJldHVybiBjaGFuZ2VkXG59XG5cbmZtdGpzb24uc29ydFByb3BlcnRpZXMgPSBzb3J0UHJvcGVydGllc1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZtdGpzb25cbiJdfQ==