eslint-plugin-perfectionist
Version:
ESLint plugin for sorting various data such as objects, imports, types, enums, JSX props, etc.
35 lines (34 loc) • 1.15 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' })
const computeNodesInCircularDependencies = require('./compute-nodes-in-circular-dependencies.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(dependentNode => !nodesInCircularDependencies.has(dependentNode))
.filter(({ dependencyName, name }) =>
sortingNode.dependencies.includes(dependencyName ?? name),
)
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