forest-express
Version:
Official package for all Forest Express Lianas
109 lines (108 loc) • 4.04 kB
JavaScript
;
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;