UNPKG

eslint-plugin-import-sorting

Version:

ESLint plugin to group and sort imports by module, à la Python isort

38 lines (37 loc) 1.61 kB
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 };