@trivago/prettier-plugin-sort-imports
Version:
A prettier plugins to sort imports in provided RegEx order
78 lines (77 loc) • 3.87 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSortedNodesByImportOrder = void 0;
var lodash_1 = require("lodash");
var constants_1 = require("../constants");
var natural_sort_1 = require("../natural-sort");
var get_import_nodes_matched_group_1 = require("./get-import-nodes-matched-group");
var get_sorted_import_specifiers_1 = require("./get-sorted-import-specifiers");
var get_sorted_nodes_group_1 = require("./get-sorted-nodes-group");
/**
* This function returns the given nodes, sorted in the order as indicated by
* the importOrder array from the given options.
* The plugin considers these import nodes as local import declarations.
* @param nodes A subset of all import nodes that should be sorted.
* @param options Options to influence the behavior of the sorting algorithm.
*/
var getSortedNodesByImportOrder = function (nodes, options) {
natural_sort_1.naturalSort.insensitive = options.importOrderCaseInsensitive;
var importOrder = options.importOrder;
var importOrderSeparation = options.importOrderSeparation, importOrderSortSpecifiers = options.importOrderSortSpecifiers, importOrderGroupNamespaceSpecifiers = options.importOrderGroupNamespaceSpecifiers;
var originalNodes = nodes.map(lodash_1.clone);
var finalNodes = [];
if (!importOrder.includes(constants_1.THIRD_PARTY_MODULES_SPECIAL_WORD)) {
importOrder = __spreadArray([constants_1.THIRD_PARTY_MODULES_SPECIAL_WORD], importOrder, true);
}
var importOrderGroups = importOrder.reduce(function (groups, regexp) {
var _a;
return (__assign(__assign({}, groups), (_a = {}, _a[regexp] = [], _a)));
}, {});
var importOrderWithOutThirdPartyPlaceholder = importOrder.filter(function (group) { return group !== constants_1.THIRD_PARTY_MODULES_SPECIAL_WORD; });
for (var _i = 0, originalNodes_1 = originalNodes; _i < originalNodes_1.length; _i++) {
var node = originalNodes_1[_i];
var matchedGroup = (0, get_import_nodes_matched_group_1.getImportNodesMatchedGroup)(node, importOrderWithOutThirdPartyPlaceholder);
importOrderGroups[matchedGroup].push(node);
}
for (var _a = 0, importOrder_1 = importOrder; _a < importOrder_1.length; _a++) {
var group = importOrder_1[_a];
var groupNodes = importOrderGroups[group];
if (groupNodes.length === 0)
continue;
var sortedInsideGroup = (0, get_sorted_nodes_group_1.getSortedNodesGroup)(groupNodes, {
importOrderGroupNamespaceSpecifiers: importOrderGroupNamespaceSpecifiers,
});
// Sort the import specifiers
if (importOrderSortSpecifiers) {
sortedInsideGroup.forEach(function (node) {
return (0, get_sorted_import_specifiers_1.getSortedImportSpecifiers)(node);
});
}
finalNodes.push.apply(finalNodes, sortedInsideGroup);
if (importOrderSeparation) {
finalNodes.push(constants_1.newLineNode);
}
}
return finalNodes;
};
exports.getSortedNodesByImportOrder = getSortedNodesByImportOrder;