UNPKG

forest-express

Version:

Official package for all Forest Express Lianas

109 lines (108 loc) 4.04 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _ = require('lodash'); var ApimapSorter = /*#__PURE__*/function () { function ApimapSorter(_ref) { var logger = _ref.logger; (0, _classCallCheck2["default"])(this, ApimapSorter); this.logger = logger; } (0, _createClass2["default"])(ApimapSorter, [{ key: "sort", value: function sort(apimap) { try { apimap = ApimapSorter._reorderKeysBasic(apimap); apimap.data = ApimapSorter._sortArrayOfObjects(apimap.data); apimap.data = apimap.data.map(function (collection) { collection = ApimapSorter._reorderKeysChild(collection); collection.attributes = ApimapSorter._reorderKeysCollection(collection.attributes); if (collection.attributes.fields) { collection.attributes.fields = ApimapSorter._sortArrayOfFields(collection.attributes.fields); collection.attributes.fields = collection.attributes.fields.map(function (field) { return ApimapSorter._reorderKeysField(field); }); } return collection; }); if (apimap.included) { apimap.included = ApimapSorter._sortArrayOfObjects(apimap.included); apimap.included = apimap.included.map(function (include) { include = ApimapSorter._reorderKeysChild(include); include.attributes = ApimapSorter._reorderKeysCollection(include.attributes); if (include.attributes.fields) { include.attributes.fields = ApimapSorter._sortArrayOfFields(include.attributes.fields); include.attributes.fields = include.attributes.fields.map(function (field) { return ApimapSorter._reorderKeysField(field); }); } return include; }); } apimap.meta = ApimapSorter._reorderKeysBasic(apimap.meta); return apimap; } catch (error) { this.logger.warn('An Apimap reordering issue occured: ', error); return apimap; } } }], [{ key: "_sortArrayOfObjects", value: function _sortArrayOfObjects(array) { return _.sortBy(array, ['type', 'id']); } }, { key: "_sortArrayOfFields", value: function _sortArrayOfFields(array) { return _.sortBy(array, ['field', 'type']); } }, { key: "_reorderKeysBasic", value: function _reorderKeysBasic(object) { var objectReordered = {}; _.each(_.sortBy(Object.keys(object)), function (key) { objectReordered[key] = object[key]; }); return objectReordered; } }, { key: "_reorderKeysChild", value: function _reorderKeysChild(object) { var objectReorderedStart = { type: object.type, id: object.id, attributes: object.attributes }; return Object.assign(objectReorderedStart, object); } }, { key: "_reorderKeysCollection", value: function _reorderKeysCollection(collection) { var collectionReorderedStart = { name: collection.name }; var collectionReorderedEnd = collection.fields ? { fields: collection.fields } : {}; delete collection.name; delete collection.fields; collection = ApimapSorter._reorderKeysBasic(collection); return Object.assign(collectionReorderedStart, collection, collectionReorderedEnd); } }, { key: "_reorderKeysField", value: function _reorderKeysField(field) { var fieldReorderedStart = { field: field.field, type: field.type }; delete field.fields; delete field.type; field = ApimapSorter._reorderKeysBasic(field); return Object.assign(fieldReorderedStart, field); } }]); return ApimapSorter; }(); module.exports = ApimapSorter;