eslint-plugin-perfectionist
Version:
ESLint plugin for sorting various data such as objects, imports, types, enums, JSX props, etc.
39 lines (38 loc) • 1.24 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' })
const computeNodesInCircularDependencies = require('./compute-nodes-in-circular-dependencies.js')
const isNodeDependentOnOtherNode = require('./is-node-dependent-on-other-node.js')
let sortNodesByDependencies = (nodes, extraOptions) => {
let nodesInCircularDependencies =
computeNodesInCircularDependencies.computeNodesInCircularDependencies(nodes)
let result = []
let visitedNodes = /* @__PURE__ */ new Set()
let visitNode = sortingNode => {
if (visitedNodes.has(sortingNode)) {
return
}
let dependentNodes = nodes
.filter(node => !nodesInCircularDependencies.has(node))
.filter(node =>
isNodeDependentOnOtherNode.isNodeDependentOnOtherNode(
node,
sortingNode,
),
)
for (let dependentNode of dependentNodes) {
if (
!extraOptions.ignoreEslintDisabledNodes ||
!dependentNode.isEslintDisabled
) {
visitNode(dependentNode)
}
}
visitedNodes.add(sortingNode)
result.push(sortingNode)
}
for (let node of nodes) {
visitNode(node)
}
return result
}
exports.sortNodesByDependencies = sortNodesByDependencies