// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers // // SPDX-License-Identifier: MPL-2.0 import Foundation import llbuild2fx extension Keys.SourceTree { struct GetDependencyGraph: BuildKey { let sourceTreeId: LLBDataID typealias ValueType = Graph static let versionDependencies: [any FXVersioning.Type] = [Keys.SourceTree.GetUnitMap.self, Keys.Blob.ParseImports.self] func computeValue(_ ctx: BuildContext) async throws -> Graph { let unitMap = try await ctx.request(Keys.SourceTree.GetUnitMap(sourceTreeId: sourceTreeId)) var edges: [UnitName: Set] = [:] for (unitName, unitInfo) in unitMap.units { if edges[unitName] == nil { edges[unitName] = [] } let imports = try await ctx.request(Keys.Blob.ParseImports(blobId: unitInfo.blobId)) for importedUnitName in imports { edges[unitName]!.insert(importedUnitName) } } return Graph(edges: edges) } } }