Skip to content

Commit a6bf731

Browse files
gh-action-runnergh-action-runner
authored andcommitted
Squashed 'apollo-ios-pagination/' changes from d8ddfdbc..8e073198
8e073198 Added Existential Any requirement (#379) git-subtree-dir: apollo-ios-pagination git-subtree-split: 8e073198d8bc2a206dc6e886aa9efd9dba9f9f81
1 parent 38a7c73 commit a6bf731

7 files changed

+43
-42
lines changed

Package.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// swift-tools-version: 5.8
1+
// swift-tools-version: 5.9
22

33
import PackageDescription
44

@@ -30,7 +30,8 @@ let package = Package(
3030
.product(name: "Apollo", package: "apollo-ios"),
3131
.product(name: "ApolloAPI", package: "apollo-ios"),
3232
.product(name: "OrderedCollections", package: "swift-collections"),
33-
]
33+
],
34+
swiftSettings: [.enableUpcomingFeature("ExistentialAny")]
3435
),
3536
]
3637
)

Sources/ApolloPagination/AsyncGraphQLQueryPager.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Foundation
66
/// Type-erases a query pager, transforming data from a generic type to a specific type, often a view model or array of view models.
77
public class AsyncGraphQLQueryPager<Model>: Publisher {
88
public typealias Failure = Never
9-
public typealias Output = Result<(Model, UpdateSource), Error>
9+
public typealias Output = Result<(Model, UpdateSource), any Error>
1010
let _subject: CurrentValueSubject<Output?, Never> = .init(nil)
1111
var publisher: AnyPublisher<Output, Never> { _subject.compactMap({ $0 }).eraseToAnyPublisher() }
1212
@Atomic public var cancellables: Set<AnyCancellable> = []
@@ -92,7 +92,7 @@ public class AsyncGraphQLQueryPager<Model>: Publisher {
9292
PaginatedQuery: GraphQLQuery,
9393
Element
9494
>(
95-
client: ApolloClientProtocol,
95+
client: any ApolloClientProtocol,
9696
initialQuery: InitialQuery,
9797
watcherDispatchQueue: DispatchQueue = .main,
9898
extractPageInfo: @escaping (PageExtractionData<InitialQuery, PaginatedQuery, Model?>) -> P,
@@ -138,7 +138,7 @@ public class AsyncGraphQLQueryPager<Model>: Publisher {
138138
InitialQuery: GraphQLQuery,
139139
PaginatedQuery: GraphQLQuery
140140
>(
141-
client: ApolloClientProtocol,
141+
client: any ApolloClientProtocol,
142142
initialQuery: InitialQuery,
143143
watcherDispatchQueue: DispatchQueue = .main,
144144
extractPageInfo: @escaping (PageExtractionData<InitialQuery, PaginatedQuery, Model?>) -> P,
@@ -161,7 +161,7 @@ public class AsyncGraphQLQueryPager<Model>: Publisher {
161161
InitialQuery: GraphQLQuery,
162162
PaginatedQuery: GraphQLQuery
163163
>(
164-
client: ApolloClientProtocol,
164+
client: any ApolloClientProtocol,
165165
initialQuery: InitialQuery,
166166
watcherDispatchQueue: DispatchQueue = .main,
167167
extractPageInfo: @escaping (PageExtractionData<InitialQuery, PaginatedQuery, Model?>) -> P,
@@ -248,7 +248,7 @@ public class AsyncGraphQLQueryPager<Model>: Publisher {
248248

249249
public func receive<S>(
250250
subscriber: S
251-
) where S: Subscriber, Never == S.Failure, Result<(Model, UpdateSource), Error> == S.Input {
251+
) where S: Subscriber, Never == S.Failure, Result<(Model, UpdateSource), any Error> == S.Input {
252252
publisher.subscribe(subscriber)
253253
}
254254
}

Sources/ApolloPagination/AsyncGraphQLQueryPagerCoordinator.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ actor AsyncGraphQLQueryPagerCoordinator<InitialQuery: GraphQLQuery, PaginatedQue
2424
let initialQuery: InitialQuery
2525
var isLoadingAll: Bool = false
2626
var isFetching: Bool = false
27-
let nextPageResolver: (PaginationInfo) -> PaginatedQuery?
28-
let previousPageResolver: (PaginationInfo) -> PaginatedQuery?
29-
let extractPageInfo: (PageExtractionData<InitialQuery, PaginatedQuery, PaginationOutput<InitialQuery, PaginatedQuery>?>) -> PaginationInfo
30-
var nextPageInfo: PaginationInfo? { nextPageTransformation() }
31-
var previousPageInfo: PaginationInfo? { previousPageTransformation() }
27+
let nextPageResolver: (any PaginationInfo) -> PaginatedQuery?
28+
let previousPageResolver: (any PaginationInfo) -> PaginatedQuery?
29+
let extractPageInfo: (PageExtractionData<InitialQuery, PaginatedQuery, PaginationOutput<InitialQuery, PaginatedQuery>?>) -> any PaginationInfo
30+
var nextPageInfo: (any PaginationInfo)? { nextPageTransformation() }
31+
var previousPageInfo: (any PaginationInfo)? { previousPageTransformation() }
3232

3333
var canLoadPages: (next: Bool, previous: Bool) {
3434
(canLoadNext, canLoadPrevious)
@@ -42,7 +42,7 @@ actor AsyncGraphQLQueryPagerCoordinator<InitialQuery: GraphQLQuery, PaginatedQue
4242
return ($previousPageVarMap, $initialPageResult, $nextPageVarMap)
4343
}
4444

45-
typealias ResultType = Result<(PaginationOutput<InitialQuery, PaginatedQuery>, UpdateSource), Error>
45+
typealias ResultType = Result<(PaginationOutput<InitialQuery, PaginatedQuery>, UpdateSource), any Error>
4646

4747
@Published var currentValue: ResultType?
4848
private var queuedValue: ResultType?
@@ -60,8 +60,8 @@ actor AsyncGraphQLQueryPagerCoordinator<InitialQuery: GraphQLQuery, PaginatedQue
6060
/// Maps each query variable set to latest results from internal watchers.
6161
@Published var nextPageVarMap: OrderedDictionary<Set<JSONValue>, PaginatedQuery.Data> = [:]
6262
@Published var previousPageVarMap: OrderedDictionary<Set<JSONValue>, PaginatedQuery.Data> = [:]
63-
private var tasks: Set<Task<Void, Error>> = []
64-
private var taskGroup: ThrowingTaskGroup<Void, Error>?
63+
private var tasks: Set<Task<Void, any Error>> = []
64+
private var taskGroup: ThrowingTaskGroup<Void, any Error>?
6565
private var watcherCallbackQueue: DispatchQueue
6666

6767
/// Designated Initializer
@@ -72,7 +72,7 @@ actor AsyncGraphQLQueryPagerCoordinator<InitialQuery: GraphQLQuery, PaginatedQue
7272
/// - nextPageResolver: The resolver that can derive the query for loading more. This can be a different query than the `initialQuery`.
7373
/// - onError: The callback when there is an error.
7474
init<P: PaginationInfo>(
75-
client: ApolloClientProtocol,
75+
client: any ApolloClientProtocol,
7676
initialQuery: InitialQuery,
7777
watcherDispatchQueue: DispatchQueue = .main,
7878
extractPageInfo: @escaping (PageExtractionData<InitialQuery, PaginatedQuery, PaginationOutput<InitialQuery, PaginatedQuery>?>) -> P,
@@ -168,7 +168,7 @@ actor AsyncGraphQLQueryPagerCoordinator<InitialQuery: GraphQLQuery, PaginatedQue
168168
}
169169

170170
func subscribe(
171-
onUpdate: @escaping (Result<(PaginationOutput<InitialQuery, PaginatedQuery>, UpdateSource), Error>) -> Void
171+
onUpdate: @escaping (Result<(PaginationOutput<InitialQuery, PaginatedQuery>, UpdateSource), any Error>) -> Void
172172
) -> AnyCancellable {
173173
$currentValue.compactMap({ $0 })
174174
.sink { [weak self] result in
@@ -287,7 +287,7 @@ actor AsyncGraphQLQueryPagerCoordinator<InitialQuery: GraphQLQuery, PaginatedQue
287287
private func onFetch<DataType: RootSelectionSet>(
288288
fetchType: FetchType,
289289
cachePolicy: CachePolicy,
290-
result: Result<GraphQLResult<DataType>, Error>,
290+
result: Result<GraphQLResult<DataType>, any Error>,
291291
publisher: CurrentValueSubject<Void, Never>
292292
) {
293293
switch result {
@@ -311,7 +311,7 @@ actor AsyncGraphQLQueryPagerCoordinator<InitialQuery: GraphQLQuery, PaginatedQue
311311
shouldUpdate = true
312312
}
313313

314-
var value: Result<(PaginationOutput<InitialQuery, PaginatedQuery>, UpdateSource), Error>?
314+
var value: Result<(PaginationOutput<InitialQuery, PaginatedQuery>, UpdateSource), any Error>?
315315
var output: ([PaginatedQuery.Data], InitialQuery.Data, [PaginatedQuery.Data])?
316316
switch fetchType {
317317
case .initial:
@@ -360,15 +360,15 @@ actor AsyncGraphQLQueryPagerCoordinator<InitialQuery: GraphQLQuery, PaginatedQue
360360
}
361361
}
362362

363-
private func nextPageTransformation() -> PaginationInfo? {
363+
private func nextPageTransformation() -> (any PaginationInfo)? {
364364
let currentValue = try? currentValue?.get().0
365365
guard let last = nextPageVarMap.values.last else {
366366
return initialPageResult.flatMap { extractPageInfo(.initial($0, currentValue)) }
367367
}
368368
return extractPageInfo(.paginated(last, currentValue))
369369
}
370370

371-
private func previousPageTransformation() -> PaginationInfo? {
371+
private func previousPageTransformation() -> (any PaginationInfo)? {
372372
let currentValue = try? currentValue?.get().0
373373
guard let first = previousPageVarMap.values.last else {
374374
return initialPageResult.flatMap { extractPageInfo(.initial($0, currentValue)) }

Sources/ApolloPagination/GraphQLQueryPager+Convenience.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public extension GraphQLQueryPager {
99
/// Convenience initializer for creating a pager that has a single query and does not
1010
/// transform output responses.
1111
convenience init<InitialQuery: GraphQLQuery, P: PaginationInfo>(
12-
client: ApolloClientProtocol,
12+
client: any ApolloClientProtocol,
1313
watcherDispatchQueue: DispatchQueue = .main,
1414
initialQuery: InitialQuery,
1515
extractPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -28,7 +28,7 @@ public extension GraphQLQueryPager {
2828
/// Convenience initializer for creating a pager that has a single query and
2929
/// transforms output responses.
3030
convenience init<InitialQuery: GraphQLQuery, P: PaginationInfo>(
31-
client: ApolloClientProtocol,
31+
client: any ApolloClientProtocol,
3232
watcherDispatchQueue: DispatchQueue = .main,
3333
initialQuery: InitialQuery,
3434
extractPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -50,7 +50,7 @@ public extension GraphQLQueryPager {
5050
/// Convenience initializer for creating a pager that has a single query and
5151
/// transforms output responses into a collection.
5252
convenience init<InitialQuery: GraphQLQuery, T, P: PaginationInfo>(
53-
client: ApolloClientProtocol,
53+
client: any ApolloClientProtocol,
5454
watcherDispatchQueue: DispatchQueue = .main,
5555
initialQuery: InitialQuery,
5656
extractPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -73,7 +73,7 @@ public extension GraphQLQueryPager {
7373
/// Convenience initializer for creating a multi-query pager that does not
7474
/// transform output responses.
7575
convenience init<InitialQuery: GraphQLQuery, PaginatedQuery: GraphQLQuery, P: PaginationInfo>(
76-
client: ApolloClientProtocol,
76+
client: any ApolloClientProtocol,
7777
initialQuery: InitialQuery,
7878
watcherDispatchQueue: DispatchQueue = .main,
7979
extractInitialPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -96,7 +96,7 @@ public extension GraphQLQueryPager {
9696

9797
/// Convenience initializer for creating a multi-query pager that transforms output responses.
9898
convenience init<InitialQuery: GraphQLQuery, PaginatedQuery: GraphQLQuery, P: PaginationInfo>(
99-
client: ApolloClientProtocol,
99+
client: any ApolloClientProtocol,
100100
initialQuery: InitialQuery,
101101
watcherDispatchQueue: DispatchQueue = .main,
102102
extractInitialPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -122,7 +122,7 @@ public extension GraphQLQueryPager {
122122
/// Convenience initializer for creating a multi-query pager that
123123
/// transforms output responses into collections
124124
convenience init<InitialQuery: GraphQLQuery, PaginatedQuery: GraphQLQuery, T, P: PaginationInfo>(
125-
client: ApolloClientProtocol,
125+
client: any ApolloClientProtocol,
126126
initialQuery: InitialQuery,
127127
watcherDispatchQueue: DispatchQueue = .main,
128128
extractInitialPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -154,7 +154,7 @@ public extension AsyncGraphQLQueryPager {
154154
/// Convenience initializer for creating a pager that has a single query and does not
155155
/// transform output responses.
156156
convenience init<InitialQuery: GraphQLQuery, P: PaginationInfo>(
157-
client: ApolloClientProtocol,
157+
client: any ApolloClientProtocol,
158158
watcherDispatchQueue: DispatchQueue = .main,
159159
initialQuery: InitialQuery,
160160
extractPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -173,7 +173,7 @@ public extension AsyncGraphQLQueryPager {
173173
/// Convenience initializer for creating a pager that has a single query and
174174
/// transforms output responses.
175175
convenience init<InitialQuery: GraphQLQuery, P: PaginationInfo>(
176-
client: ApolloClientProtocol,
176+
client: any ApolloClientProtocol,
177177
watcherDispatchQueue: DispatchQueue = .main,
178178
initialQuery: InitialQuery,
179179
extractPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -195,7 +195,7 @@ public extension AsyncGraphQLQueryPager {
195195
/// Convenience initializer for creating a pager that has a single query and
196196
/// transforms output responses into a collection.
197197
convenience init<InitialQuery: GraphQLQuery, T, P: PaginationInfo>(
198-
client: ApolloClientProtocol,
198+
client: any ApolloClientProtocol,
199199
watcherDispatchQueue: DispatchQueue = .main,
200200
initialQuery: InitialQuery,
201201
extractPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -218,7 +218,7 @@ public extension AsyncGraphQLQueryPager {
218218
/// Convenience initializer for creating a multi-query pager that does not
219219
/// transform output responses.
220220
convenience init<InitialQuery: GraphQLQuery, PaginatedQuery: GraphQLQuery, P: PaginationInfo>(
221-
client: ApolloClientProtocol,
221+
client: any ApolloClientProtocol,
222222
initialQuery: InitialQuery,
223223
watcherDispatchQueue: DispatchQueue = .main,
224224
extractInitialPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -242,7 +242,7 @@ public extension AsyncGraphQLQueryPager {
242242
/// Convenience initializer for creating a multi-query pager that
243243
/// transforms output responses.
244244
convenience init<InitialQuery: GraphQLQuery, PaginatedQuery: GraphQLQuery, P: PaginationInfo>(
245-
client: ApolloClientProtocol,
245+
client: any ApolloClientProtocol,
246246
initialQuery: InitialQuery,
247247
watcherDispatchQueue: DispatchQueue = .main,
248248
extractInitialPageInfo: @escaping (InitialQuery.Data) -> P,
@@ -268,7 +268,7 @@ public extension AsyncGraphQLQueryPager {
268268
/// Convenience initializer for creating a multi-query pager that
269269
/// transforms output responses into collections
270270
convenience init<InitialQuery: GraphQLQuery, PaginatedQuery: GraphQLQuery, T, P: PaginationInfo>(
271-
client: ApolloClientProtocol,
271+
client: any ApolloClientProtocol,
272272
initialQuery: InitialQuery,
273273
watcherDispatchQueue: DispatchQueue = .main,
274274
extractInitialPageInfo: @escaping (InitialQuery.Data) -> P,

Sources/ApolloPagination/GraphQLQueryPager.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Foundation
66
/// Type-erases a query pager, transforming data from a generic type to a specific type, often a view model or array of view models.
77
public class GraphQLQueryPager<Model>: Publisher {
88
public typealias Failure = Never
9-
public typealias Output = Result<(Model, UpdateSource), Error>
9+
public typealias Output = Result<(Model, UpdateSource), any Error>
1010
let _subject: CurrentValueSubject<Output?, Never> = .init(nil)
1111
var publisher: AnyPublisher<Output, Never> { _subject.compactMap { $0 }.eraseToAnyPublisher() }
1212
public var cancellables: Set<AnyCancellable> = []
@@ -76,7 +76,7 @@ public class GraphQLQueryPager<Model>: Publisher {
7676
InitialQuery: GraphQLQuery,
7777
PaginatedQuery: GraphQLQuery
7878
>(
79-
client: ApolloClientProtocol,
79+
client: any ApolloClientProtocol,
8080
watcherDispatchQueue: DispatchQueue = .main,
8181
initialQuery: InitialQuery,
8282
extractPageInfo: @escaping (PageExtractionData<InitialQuery, PaginatedQuery, Model?>) -> P,
@@ -98,7 +98,7 @@ public class GraphQLQueryPager<Model>: Publisher {
9898
PaginatedQuery: GraphQLQuery,
9999
Element
100100
>(
101-
client: ApolloClientProtocol,
101+
client: any ApolloClientProtocol,
102102
initialQuery: InitialQuery,
103103
watcherDispatchQueue: DispatchQueue = .main,
104104
extractPageInfo: @escaping (PageExtractionData<InitialQuery, PaginatedQuery, Model?>) -> P,
@@ -144,7 +144,7 @@ public class GraphQLQueryPager<Model>: Publisher {
144144
InitialQuery: GraphQLQuery,
145145
PaginatedQuery: GraphQLQuery
146146
>(
147-
client: ApolloClientProtocol,
147+
client: any ApolloClientProtocol,
148148
initialQuery: InitialQuery,
149149
watcherDispatchQueue: DispatchQueue = .main,
150150
extractPageInfo: @escaping (PageExtractionData<InitialQuery, PaginatedQuery, Model?>) -> P,
@@ -258,7 +258,7 @@ public class GraphQLQueryPager<Model>: Publisher {
258258

259259
public func receive<S>(
260260
subscriber: S
261-
) where S: Subscriber, Never == S.Failure, Result<(Model, UpdateSource), Error> == S.Input {
261+
) where S: Subscriber, Never == S.Failure, Result<(Model, UpdateSource), any Error> == S.Input {
262262
publisher.subscribe(subscriber)
263263
}
264264
}

Sources/ApolloPagination/GraphQLQueryPagerCoordinator.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ class GraphQLQueryPagerCoordinator<InitialQuery: GraphQLQuery, PaginatedQuery: G
4242
private var subscriptions = Subscriptions()
4343
private var completionManager = CompletionManager()
4444

45-
var publisher: AnyPublisher<Result<(PaginationOutput<InitialQuery, PaginatedQuery>, UpdateSource), Error>, Never> {
45+
var publisher: AnyPublisher<Result<(PaginationOutput<InitialQuery, PaginatedQuery>, UpdateSource), any Error>, Never> {
4646
get async { await pager.$currentValue.compactMap { $0 }.eraseToAnyPublisher() }
4747
}
4848

4949
init<P: PaginationInfo>(
50-
client: ApolloClientProtocol,
50+
client: any ApolloClientProtocol,
5151
initialQuery: InitialQuery,
5252
watcherDispatchQueue: DispatchQueue = .main,
5353
extractPageInfo: @escaping (PageExtractionData<InitialQuery, PaginatedQuery, PaginationOutput<InitialQuery, PaginatedQuery>?>) -> P,
@@ -87,7 +87,7 @@ class GraphQLQueryPagerCoordinator<InitialQuery: GraphQLQuery, PaginatedQuery: G
8787

8888
/// Allows the caller to subscribe to new pagination results.
8989
/// - Parameter onUpdate: A closure which provides the most recent pagination result. Execution may be on any thread.
90-
func subscribe(onUpdate: @escaping (Result<(PaginationOutput<InitialQuery, PaginatedQuery>, UpdateSource), Error>) -> Void) {
90+
func subscribe(onUpdate: @escaping (Result<(PaginationOutput<InitialQuery, PaginatedQuery>, UpdateSource), any Error>) -> Void) {
9191
Task { [weak self] in
9292
guard let self else { return }
9393
let subscription = await self.pager.subscribe(onUpdate: onUpdate)

Sources/ApolloPagination/PaginationError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ public enum PaginationError: Error {
55
case noQuery
66
case cancellation
77
// Workaround for https://github.com/apple/swift-evolution/blob/f0128e6ed3cbea226c66c8ac630e216dd4140a69/proposals/0413-typed-throws.md
8-
case unknown(Error)
8+
case unknown(any Error)
99
}

0 commit comments

Comments
 (0)