From 5ee8f2dd5176d3bb6acb9f9c040afcb93d6ae76a Mon Sep 17 00:00:00 2001 From: Mads Odgaard Date: Fri, 6 Mar 2026 18:55:32 +0100 Subject: [PATCH] Move to `FoundationEssentials` (#59) Uses `FoundationEssentials` instead of `Foundation`. Also removes `NIOFoundationCompat`, because it did appear to be used, and that pulled in the entire Foundation. Also disabled the default traits for the `OpenAPIRuntime` to prevent linking Foundation. --- .licenseignore | 2 + .swiftformatignore | 1 + Package.swift | 5 +- Package@swift-6.0.swift | 64 +++++++++++++++++++ .../AsyncHTTPClientTransport.swift | 13 ++-- 5 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 Package@swift-6.0.swift diff --git a/.licenseignore b/.licenseignore index d2535f5..10f1ba5 100644 --- a/.licenseignore +++ b/.licenseignore @@ -18,7 +18,9 @@ Package.swift **/Package.swift Package@-*.swift +Package@swift-*.swift **/Package@-*.swift +**/Package@swift-*.swift Package.resolved **/Package.resolved Makefile diff --git a/.swiftformatignore b/.swiftformatignore index ef0b696..f291039 100644 --- a/.swiftformatignore +++ b/.swiftformatignore @@ -1 +1,2 @@ **Package.swift +**Package@swift-*.swift \ No newline at end of file diff --git a/Package.swift b/Package.swift index 2a6d345..897d9cd 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:6.0 +// swift-tools-version:6.1 //===----------------------------------------------------------------------===// // // This source file is part of the SwiftOpenAPIGenerator open source project @@ -29,7 +29,7 @@ let package = Package( dependencies: [ .package(url: "https://github.com/apple/swift-nio", from: "2.58.0"), .package(url: "https://github.com/swift-server/async-http-client.git", from: "1.23.0"), - .package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.0.0"), + .package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.11.0", traits: []), .package(url: "https://github.com/apple/swift-http-types", from: "1.0.0"), ], targets: [ @@ -39,7 +39,6 @@ let package = Package( .product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"), .product(name: "HTTPTypes", package: "swift-http-types"), .product(name: "AsyncHTTPClient", package: "async-http-client"), - .product(name: "NIOFoundationCompat", package: "swift-nio"), ], swiftSettings: swiftSettings ), diff --git a/Package@swift-6.0.swift b/Package@swift-6.0.swift new file mode 100644 index 0000000..d120a58 --- /dev/null +++ b/Package@swift-6.0.swift @@ -0,0 +1,64 @@ +// swift-tools-version:6.0 +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftOpenAPIGenerator open source project +// +// Copyright (c) 2023 Apple Inc. and the SwiftOpenAPIGenerator project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftOpenAPIGenerator project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// +import Foundation +import PackageDescription + +// General Swift-settings for all targets. +let swiftSettings: [SwiftSetting] = [ + // https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md + // Require `any` for existential types. + .enableUpcomingFeature("ExistentialAny") +] + +let package = Package( + name: "swift-openapi-async-http-client", + platforms: [.macOS(.v10_15), .iOS(.v13), .tvOS(.v13), .watchOS(.v6), .visionOS(.v1)], + products: [.library(name: "OpenAPIAsyncHTTPClient", targets: ["OpenAPIAsyncHTTPClient"])], + dependencies: [ + .package(url: "https://github.com/apple/swift-nio", from: "2.58.0"), + .package(url: "https://github.com/swift-server/async-http-client.git", from: "1.23.0"), + .package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.0.0"), + .package(url: "https://github.com/apple/swift-http-types", from: "1.0.0"), + ], + targets: [ + .target( + name: "OpenAPIAsyncHTTPClient", + dependencies: [ + .product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"), + .product(name: "HTTPTypes", package: "swift-http-types"), + .product(name: "AsyncHTTPClient", package: "async-http-client"), + ], + swiftSettings: swiftSettings + ), + .testTarget( + name: "OpenAPIAsyncHTTPClientTests", + dependencies: ["OpenAPIAsyncHTTPClient"], + swiftSettings: swiftSettings + ), + ] +) + +// --- STANDARD CROSS-REPO SETTINGS DO NOT EDIT --- // +for target in package.targets { + switch target.type { + case .regular, .test, .executable: + var settings = target.swiftSettings ?? [] + // https://github.com/swiftlang/swift-evolution/blob/main/proposals/0444-member-import-visibility.md + settings.append(.enableUpcomingFeature("MemberImportVisibility")) + target.swiftSettings = settings + case .macro, .plugin, .system, .binary: () // not applicable + @unknown default: () // we don't know what to do here, do nothing + } +}// --- END: STANDARD CROSS-REPO SETTINGS DO NOT EDIT --- // diff --git a/Sources/OpenAPIAsyncHTTPClient/AsyncHTTPClientTransport.swift b/Sources/OpenAPIAsyncHTTPClient/AsyncHTTPClientTransport.swift index 39b79d3..ffc97ce 100644 --- a/Sources/OpenAPIAsyncHTTPClient/AsyncHTTPClientTransport.swift +++ b/Sources/OpenAPIAsyncHTTPClient/AsyncHTTPClientTransport.swift @@ -15,15 +15,14 @@ import OpenAPIRuntime import AsyncHTTPClient import NIOCore import NIOHTTP1 -import NIOFoundationCompat import HTTPTypes -#if canImport(Darwin) -import Foundation +#if canImport(FoundationEssentials) +@preconcurrency import struct FoundationEssentials.URL +import struct FoundationEssentials.URLComponents +import struct FoundationEssentials.Data +import protocol FoundationEssentials.LocalizedError #else -@preconcurrency import struct Foundation.URL -import struct Foundation.URLComponents -import struct Foundation.Data -import protocol Foundation.LocalizedError +import Foundation #endif /// A client transport that performs HTTP operations using the HTTPClient type