// swift-tools-version: 5.10 import PackageDescription let package = Package( name: .Package.name, platforms: [ .iOS(.v14) ], products: [ .library( name: .Product.name.kit, targets: [ .Target.coordination.kit, .Target.feed.kit, .Target.filter.kit, .Target.foundation.kit, .Target.iTunes.kit, .Target.ui.kit, ] ), ], targets: [ .target( name: .Target.coordination.kit, dependencies: [ .byName(name: .Target.foundation.kit), .byName(name: .Target.ui.kit), ], path: "Coordination/Kit" ), .target( name: .Target.feed.kit, dependencies: [ .byName(name: .Target.foundation.kit), ], path: "Feed/Kit" ), .target( name: .Target.filter.kit, dependencies: [ .byName(name: .Target.foundation.kit), ], path: "Filter/Kit" ), .target( name: .Target.foundation.kit, path: "Foundation/Kit" ), .target( name: .Target.iTunes.kit, dependencies: [ .byName(name: .Target.feed.kit), .byName(name: .Target.foundation.kit), ], path: "iTunes/Kit" ), .target( name: .Target.ui.kit, dependencies: [ .byName(name: .Target.foundation.kit), ], path: "UI/Kit" ), .testTarget( name: .Target.coordination.test, dependencies: [ .byName(name: .Target.coordination.kit), ], path: "Coordination/Test" ), .testTarget( name: .Target.feed.test, dependencies: [ .byName(name: .Target.feed.kit), ], path: "Feed/Test" ), .testTarget( name: .Target.filter.test, dependencies: [ .byName(name: .Target.filter.kit), ], path: "Filter/Test" ), .testTarget( name: .Target.foundation.test, dependencies: [ .byName(name: .Target.foundation.kit), ], path: "Foundation/Test" ), .testTarget( name: .Target.iTunes.test, dependencies: [ .byName(name: .Target.iTunes.kit), ], path: "iTunes/Test" ), .testTarget( name: .Target.ui.test, dependencies: [ .byName(name: .Target.ui.kit), ], path: "UI/Test" ), ] ) // MARK: - String+Constants private extension String { enum Package { static let name = "reviews-kit" } enum Product { static let name = "Reviews" } enum Target { static let coordination = "\(String.Product.name)Coordination" static let feed = "\(String.Product.name)Feed" static let filter = "\(String.Product.name)Filter" static let foundation = "\(String.Product.name)Foundation" static let iTunes = "\(String.Product.name)iTunes" static let ui = "\(String.Product.name)UI" } } // MARK: - String+Computed private extension String { var kit: String { "\(self)Kit" } var test: String { "\(self)Test" } }