(
items: T[],
options: TopologicalSortOptions = {}
)
| 325 | * ``` |
| 326 | */ |
| 327 | export function topologicalSort<T extends IDependable>( |
| 328 | items: T[], |
| 329 | options: TopologicalSortOptions = {} |
| 330 | ): TopologicalSortResult<T> { |
| 331 | const { |
| 332 | algorithm = 'kahn', |
| 333 | detectCycles = true, |
| 334 | resolveId = resolveDependencyId |
| 335 | } = options; |
| 336 | |
| 337 | if (items.length === 0) { |
| 338 | return { sorted: [], hasCycles: false }; |
| 339 | } |
| 340 | |
| 341 | const result = algorithm === 'kahn' |
| 342 | ? kahnSort(items, resolveId) |
| 343 | : dfsSort(items, resolveId); |
| 344 | |
| 345 | if (result.hasCycles && detectCycles) { |
| 346 | logger.warn(`Circular dependency detected among: ${result.cycleIds?.join(', ')}`); |
| 347 | } |
| 348 | |
| 349 | return result; |
| 350 | } |
| 351 | |
| 352 | // ============================================================================ |
| 353 | // 依赖验证 | Dependency Validation |
no test coverage detected