eslint-plugin-import-sorting
Version:
ESLint plugin to group and sort imports by module, à la Python isort
38 lines (37 loc) • 1.61 kB
JavaScript
import { IMPORT_GROUPS } from "../rules/order.js";
import { getGroupNumber } from "./get-group-number.js";
import { sortNodes } from "./sort-nodes.js";
function sortNodesByGroups(nodes, options, extraOptions) {
var _a;
let nodesByNonIgnoredGroupNumber = {};
let ignoredNodeIndices = [];
for (let [index, sortingNode] of nodes.entries()) {
if ((sortingNode.isEslintDisabled && (extraOptions == null ? void 0 : extraOptions.ignoreEslintDisabledNodes)) ?? ((_a = extraOptions == null ? void 0 : extraOptions.isNodeIgnored) == null ? void 0 : _a.call(extraOptions, sortingNode))) {
ignoredNodeIndices.push(index);
continue;
}
let groupNumber = getGroupNumber(IMPORT_GROUPS, sortingNode);
nodesByNonIgnoredGroupNumber[groupNumber] ?? (nodesByNonIgnoredGroupNumber[groupNumber] = []);
nodesByNonIgnoredGroupNumber[groupNumber].push(sortingNode);
}
let sortedNodes = [];
for (let groupNumber of Object.keys(nodesByNonIgnoredGroupNumber).sort(
(a, b) => Number(a) - Number(b)
)) {
let compareOptions = (extraOptions == null ? void 0 : extraOptions.getGroupCompareOptions) ? extraOptions.getGroupCompareOptions(Number(groupNumber)) : options;
if (!compareOptions) {
sortedNodes.push(...nodesByNonIgnoredGroupNumber[Number(groupNumber)]);
continue;
}
sortedNodes.push(
...sortNodes(nodesByNonIgnoredGroupNumber[Number(groupNumber)], compareOptions)
);
}
for (let ignoredIndex of ignoredNodeIndices) {
sortedNodes.splice(ignoredIndex, 0, nodes[ignoredIndex]);
}
return sortedNodes;
}
export {
sortNodesByGroups
};