eslint-plugin-import-sorting
Version:
ESLint plugin to group and sort imports by module, à la Python isort
38 lines (37 loc) • 1.74 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const order = require("../rules/order.cjs");
const getGroupNumber = require("./get-group-number.cjs");
const sortNodes = require("./sort-nodes.cjs");
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.getGroupNumber(order.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.sortNodes(nodesByNonIgnoredGroupNumber[Number(groupNumber)], compareOptions)
);
}
for (let ignoredIndex of ignoredNodeIndices) {
sortedNodes.splice(ignoredIndex, 0, nodes[ignoredIndex]);
}
return sortedNodes;
}
exports.sortNodesByGroups = sortNodesByGroups;