// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers // // SPDX-License-Identifier: MPL-2.0 import Foundation import TSCBasic import llbuild2fx extension Keys { /// Narrows a source tree to just the transitive dependencies of a given unit struct NarrowSourceTree: BuildKey { struct ValueType: Codable, FXValue { let sourceTreeId: LLBDataID } let sourceTreeId: LLBDataID let unitName: UnitName static let versionDependencies: [any FXVersioning.Type] = [TransitiveDependencies.self, UnitMapOfSourceTree.self] func computeValue(_ ctx: BuildContext) async throws -> ValueType { let dependencies = try await ctx.request(TransitiveDependencies(sourceTreeId: sourceTreeId, unitName: unitName)).dependencies let unitMap = try await ctx.request(UnitMapOfSourceTree(sourceTreeId: sourceTreeId)) var sourceTree = try await LLBCASFileTree.load(id: sourceTreeId, in: ctx) for (unitName, unitInfo) in unitMap.units { if !dependencies.contains(unitName) { sourceTree = try await sourceTree.remove(path: unitInfo.path, in: ctx) } } return ValueType(sourceTreeId: sourceTree.id) } } }