Skip to content

Commit 904960c

Browse files
Merge pull request #146 from NeedleInAJayStack/chore/min-swift-5_8
Bumps minimum version to Swift 5.8
2 parents f5a4707 + 43d789a commit 904960c

File tree

11 files changed

+703
-742
lines changed

11 files changed

+703
-742
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ jobs:
6161
runs-on: ubuntu-22.04
6262
strategy:
6363
matrix:
64-
swift: ["5.7", "5.8", "5.9", "5.10"]
64+
swift: ["5.8", "5.9", "5.10"]
6565
steps:
6666
- uses: swift-actions/setup-swift@v2
6767
with:
@@ -70,17 +70,3 @@ jobs:
7070
- name: Test
7171
run: swift test --parallel
7272

73-
# Swift versions older than 5.7 don't have builds for ubuntu 22.04. https://www.swift.org/download/
74-
backcompat-ubuntu-20_04:
75-
name: Test Swift ${{ matrix.swift }} on Ubuntu 20.04
76-
runs-on: ubuntu-20.04
77-
strategy:
78-
matrix:
79-
swift: ["5.4", "5.5", "5.6"]
80-
steps:
81-
- uses: swift-actions/setup-swift@v2
82-
with:
83-
swift-version: ${{ matrix.swift }}
84-
- uses: actions/checkout@v3
85-
- name: Test
86-
run: swift test --parallel

Package.resolved

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// swift-tools-version:5.4
1+
// swift-tools-version:5.8
22
import PackageDescription
33

44
let package = Package(

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,10 @@ one that you've created yourself.
256256

257257
For a progressive walkthrough, see the [Usage Guide](UsageGuide.md). The [Star Wars API](Tests/GraphitiTests/StarWarsAPI/StarWarsAPI.swift) provides a fairly complete example.
258258

259+
## Support
260+
261+
This package supports Swift versions in [alignment with Swift NIO](https://github.com/apple/swift-nio?tab=readme-ov-file#swift-versions).
262+
259263
## Contributing
260264

261265
This repo uses [SwiftFormat](https://github.com/nicklockwood/SwiftFormat), and includes lint checks to enforce these formatting standards.

Sources/Graphiti/API/API.swift

Lines changed: 71 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -80,82 +80,78 @@ public extension API {
8080
}
8181
}
8282

83-
#if compiler(>=5.5) && canImport(_Concurrency)
84-
85-
public extension API {
86-
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
87-
func execute(
88-
request: String,
89-
context: ContextType,
90-
on eventLoopGroup: EventLoopGroup,
91-
variables: [String: Map] = [:],
92-
operationName: String? = nil,
93-
validationRules: [(ValidationContext) -> Visitor] = []
94-
) async throws -> GraphQLResult {
95-
return try await schema.execute(
96-
request: request,
97-
resolver: resolver,
98-
context: context,
99-
eventLoopGroup: eventLoopGroup,
100-
variables: variables,
101-
operationName: operationName,
102-
validationRules: validationRules
103-
).get()
104-
}
105-
106-
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
107-
func execute(
108-
request: GraphQLRequest,
109-
context: ContextType,
110-
on eventLoopGroup: EventLoopGroup,
111-
validationRules: [(ValidationContext) -> Visitor] = []
112-
) async throws -> GraphQLResult {
113-
return try await execute(
114-
request: request.query,
115-
context: context,
116-
on: eventLoopGroup,
117-
variables: request.variables,
118-
operationName: request.operationName,
119-
validationRules: validationRules
120-
)
121-
}
83+
public extension API {
84+
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
85+
func execute(
86+
request: String,
87+
context: ContextType,
88+
on eventLoopGroup: EventLoopGroup,
89+
variables: [String: Map] = [:],
90+
operationName: String? = nil,
91+
validationRules: [(ValidationContext) -> Visitor] = []
92+
) async throws -> GraphQLResult {
93+
return try await schema.execute(
94+
request: request,
95+
resolver: resolver,
96+
context: context,
97+
eventLoopGroup: eventLoopGroup,
98+
variables: variables,
99+
operationName: operationName,
100+
validationRules: validationRules
101+
).get()
102+
}
122103

123-
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
124-
func subscribe(
125-
request: String,
126-
context: ContextType,
127-
on eventLoopGroup: EventLoopGroup,
128-
variables: [String: Map] = [:],
129-
operationName: String? = nil,
130-
validationRules: [(ValidationContext) -> Visitor] = []
131-
) async throws -> SubscriptionResult {
132-
return try await schema.subscribe(
133-
request: request,
134-
resolver: resolver,
135-
context: context,
136-
eventLoopGroup: eventLoopGroup,
137-
variables: variables,
138-
operationName: operationName,
139-
validationRules: validationRules
140-
).get()
141-
}
104+
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
105+
func execute(
106+
request: GraphQLRequest,
107+
context: ContextType,
108+
on eventLoopGroup: EventLoopGroup,
109+
validationRules: [(ValidationContext) -> Visitor] = []
110+
) async throws -> GraphQLResult {
111+
return try await execute(
112+
request: request.query,
113+
context: context,
114+
on: eventLoopGroup,
115+
variables: request.variables,
116+
operationName: request.operationName,
117+
validationRules: validationRules
118+
)
119+
}
142120

143-
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
144-
func subscribe(
145-
request: GraphQLRequest,
146-
context: ContextType,
147-
on eventLoopGroup: EventLoopGroup,
148-
validationRules: [(ValidationContext) -> Visitor] = []
149-
) async throws -> SubscriptionResult {
150-
return try await subscribe(
151-
request: request.query,
152-
context: context,
153-
on: eventLoopGroup,
154-
variables: request.variables,
155-
operationName: request.operationName,
156-
validationRules: validationRules
157-
)
158-
}
121+
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
122+
func subscribe(
123+
request: String,
124+
context: ContextType,
125+
on eventLoopGroup: EventLoopGroup,
126+
variables: [String: Map] = [:],
127+
operationName: String? = nil,
128+
validationRules: [(ValidationContext) -> Visitor] = []
129+
) async throws -> SubscriptionResult {
130+
return try await schema.subscribe(
131+
request: request,
132+
resolver: resolver,
133+
context: context,
134+
eventLoopGroup: eventLoopGroup,
135+
variables: variables,
136+
operationName: operationName,
137+
validationRules: validationRules
138+
).get()
159139
}
160140

161-
#endif
141+
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
142+
func subscribe(
143+
request: GraphQLRequest,
144+
context: ContextType,
145+
on eventLoopGroup: EventLoopGroup,
146+
validationRules: [(ValidationContext) -> Visitor] = []
147+
) async throws -> SubscriptionResult {
148+
return try await subscribe(
149+
request: request.query,
150+
context: context,
151+
on: eventLoopGroup,
152+
variables: request.variables,
153+
operationName: request.operationName,
154+
validationRules: validationRules
155+
)
156+
}
157+
}

Sources/Graphiti/Federation/Key/Key.swift

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -92,30 +92,26 @@ public class Key<ObjectType, Resolver, Context, Arguments: Codable>: KeyComponen
9292
}
9393
}
9494

95-
#if compiler(>=5.5) && canImport(_Concurrency)
96-
97-
public extension Key {
98-
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
99-
convenience init(
100-
arguments: [ArgumentComponent<Arguments>],
101-
concurrentResolve: @escaping ConcurrentResolve<
102-
Resolver,
103-
Context,
104-
Arguments,
105-
ObjectType?
106-
>
107-
) {
108-
let asyncResolve: AsyncResolve<Resolver, Context, Arguments, ObjectType?> = { type in
109-
{ context, arguments, eventLoopGroup in
110-
let promise = eventLoopGroup.next().makePromise(of: ObjectType?.self)
111-
promise.completeWithTask {
112-
try await concurrentResolve(type)(context, arguments)
113-
}
114-
return promise.futureResult
95+
public extension Key {
96+
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
97+
convenience init(
98+
arguments: [ArgumentComponent<Arguments>],
99+
concurrentResolve: @escaping ConcurrentResolve<
100+
Resolver,
101+
Context,
102+
Arguments,
103+
ObjectType?
104+
>
105+
) {
106+
let asyncResolve: AsyncResolve<Resolver, Context, Arguments, ObjectType?> = { type in
107+
{ context, arguments, eventLoopGroup in
108+
let promise = eventLoopGroup.next().makePromise(of: ObjectType?.self)
109+
promise.completeWithTask {
110+
try await concurrentResolve(type)(context, arguments)
115111
}
112+
return promise.futureResult
116113
}
117-
self.init(arguments: arguments, asyncResolve: asyncResolve)
118114
}
115+
self.init(arguments: arguments, asyncResolve: asyncResolve)
119116
}
120-
121-
#endif
117+
}

Sources/Graphiti/Federation/Key/Type+Key.swift

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -101,42 +101,38 @@ public extension Type {
101101
}
102102
}
103103

104-
#if compiler(>=5.5) && canImport(_Concurrency)
105-
106-
public extension Type {
107-
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
108-
@discardableResult
109-
/// Define and add the federated key to this type.
110-
///
111-
/// For more information, see https://www.apollographql.com/docs/federation/entities
112-
/// - Parameters:
113-
/// - function: The resolver function used to load this entity based on the key value.
114-
/// - _: The key value. The name of this argument must match a Type field.
115-
/// - Returns: Self for chaining.
116-
func key<Arguments: Codable>(
117-
at function: @escaping ConcurrentResolve<Resolver, Context, Arguments, ObjectType?>,
118-
@ArgumentComponentBuilder<Arguments> _ argument: () -> ArgumentComponent<Arguments>
119-
) -> Self {
120-
keys.append(Key(arguments: [argument()], concurrentResolve: function))
121-
return self
122-
}
123-
124-
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
125-
@discardableResult
126-
/// Define and add the federated key to this type.
127-
///
128-
/// For more information, see https://www.apollographql.com/docs/federation/entities
129-
/// - Parameters:
130-
/// - function: The resolver function used to load this entity based on the key value.
131-
/// - _: The key values. The names of these arguments must match Type fields.
132-
/// - Returns: Self for chaining.
133-
func key<Arguments: Codable>(
134-
at function: @escaping ConcurrentResolve<Resolver, Context, Arguments, ObjectType?>,
135-
@ArgumentComponentBuilder<Arguments> _ arguments: () -> [ArgumentComponent<Arguments>]
136-
) -> Self {
137-
keys.append(Key(arguments: arguments(), concurrentResolve: function))
138-
return self
139-
}
104+
public extension Type {
105+
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
106+
@discardableResult
107+
/// Define and add the federated key to this type.
108+
///
109+
/// For more information, see https://www.apollographql.com/docs/federation/entities
110+
/// - Parameters:
111+
/// - function: The resolver function used to load this entity based on the key value.
112+
/// - _: The key value. The name of this argument must match a Type field.
113+
/// - Returns: Self for chaining.
114+
func key<Arguments: Codable>(
115+
at function: @escaping ConcurrentResolve<Resolver, Context, Arguments, ObjectType?>,
116+
@ArgumentComponentBuilder<Arguments> _ argument: () -> ArgumentComponent<Arguments>
117+
) -> Self {
118+
keys.append(Key(arguments: [argument()], concurrentResolve: function))
119+
return self
140120
}
141121

142-
#endif
122+
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
123+
@discardableResult
124+
/// Define and add the federated key to this type.
125+
///
126+
/// For more information, see https://www.apollographql.com/docs/federation/entities
127+
/// - Parameters:
128+
/// - function: The resolver function used to load this entity based on the key value.
129+
/// - _: The key values. The names of these arguments must match Type fields.
130+
/// - Returns: Self for chaining.
131+
func key<Arguments: Codable>(
132+
at function: @escaping ConcurrentResolve<Resolver, Context, Arguments, ObjectType?>,
133+
@ArgumentComponentBuilder<Arguments> _ arguments: () -> [ArgumentComponent<Arguments>]
134+
) -> Self {
135+
keys.append(Key(arguments: arguments(), concurrentResolve: function))
136+
return self
137+
}
138+
}

0 commit comments

Comments
 (0)