Skip to content

Commit afd1160

Browse files
feat: Converts to closure API
1 parent 8d18f67 commit afd1160

File tree

7 files changed

+59
-45
lines changed

7 files changed

+59
-45
lines changed

Sources/Graphiti/Input/Input.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ public final class Input<
1515
let inputObjectType = try GraphQLInputObjectType(
1616
name: name,
1717
description: description,
18-
fields: fields(typeProvider: typeProvider),
18+
fields: {
19+
try self.fields(typeProvider: typeProvider)
20+
},
1921
isOneOf: isOneOf
2022
)
2123

Sources/Graphiti/Interface/Interface.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ public final class Interface<Resolver, Context, InterfaceType>: TypeComponent<
1010
let interfaceType = try GraphQLInterfaceType(
1111
name: name,
1212
description: description,
13-
fields: fields(typeProvider: typeProvider, coders: coders),
13+
fields: {
14+
try self.fields(typeProvider: typeProvider, coders: coders)
15+
},
1416
resolveType: nil
1517
)
1618

Sources/Graphiti/Mutation/Mutation.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ public final class Mutation<Resolver, Context>: Component<Resolver, Context> {
1111
typeProvider.mutation = try GraphQLObjectType(
1212
name: name,
1313
description: description,
14-
fields: fields(typeProvider: typeProvider, coders: coders),
14+
fields: {
15+
try self.fields(typeProvider: typeProvider, coders: coders)
16+
},
1517
isTypeOf: isTypeOf
1618
)
1719
}

Sources/Graphiti/Query/Query.swift

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,35 @@ public final class Query<Resolver, Context>: Component<Resolver, Context> {
88
}
99

1010
override func update(typeProvider: SchemaTypeProvider, coders: Coders) throws {
11-
var queryFields = try fields(typeProvider: typeProvider, coders: coders)
12-
13-
// Add federated types and queries if they exist
14-
if !typeProvider.federatedTypes.isEmpty {
15-
let federatedTypes = typeProvider.federatedTypes
16-
guard let sdl = typeProvider.federatedSDL else {
17-
throw GraphQLError(message: "If federated types are included, SDL must be provided")
18-
}
19-
20-
// Add subgraph types to provider (_Service, _Any, _Entity)
21-
let entity = entityType(federatedTypes)
22-
typeProvider.types.append(serviceType)
23-
typeProvider.types.append(anyType)
24-
typeProvider.types.append(entity)
25-
26-
// Add subgraph queries (_entities, _service)
27-
queryFields["_entities"] = entitiesQuery(
28-
for: typeProvider.federatedResolvers,
29-
entityType: entity,
30-
coders: coders
31-
)
32-
queryFields["_service"] = serviceQuery(for: sdl)
33-
}
34-
3511
typeProvider.query = try GraphQLObjectType(
3612
name: name,
3713
description: description,
38-
fields: queryFields,
14+
fields: {
15+
var queryFields = try self.fields(typeProvider: typeProvider, coders: coders)
16+
17+
// Add federated types and queries if they exist
18+
if !typeProvider.federatedTypes.isEmpty {
19+
let federatedTypes = typeProvider.federatedTypes
20+
guard let sdl = typeProvider.federatedSDL else {
21+
throw GraphQLError(message: "If federated types are included, SDL must be provided")
22+
}
23+
24+
// Add subgraph types to provider (_Service, _Any, _Entity)
25+
let entity = entityType(federatedTypes)
26+
typeProvider.types.append(serviceType)
27+
typeProvider.types.append(anyType)
28+
typeProvider.types.append(entity)
29+
30+
// Add subgraph queries (_entities, _service)
31+
queryFields["_entities"] = entitiesQuery(
32+
for: typeProvider.federatedResolvers,
33+
entityType: entity,
34+
coders: coders
35+
)
36+
queryFields["_service"] = serviceQuery(for: sdl)
37+
}
38+
return queryFields
39+
},
3940
isTypeOf: isTypeOf
4041
)
4142
}

Sources/Graphiti/Subscription/Subscription.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ public final class Subscription<Resolver, Context>: Component<Resolver, Context>
1111
typeProvider.subscription = try GraphQLObjectType(
1212
name: name,
1313
description: description,
14-
fields: fields(typeProvider: typeProvider, coders: coders),
14+
fields: {
15+
try self.fields(typeProvider: typeProvider, coders: coders)
16+
},
1517
isTypeOf: isTypeOf
1618
)
1719
}

Sources/Graphiti/Type/Type.swift

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,33 @@ public final class Type<Resolver, Context, ObjectType>: TypeComponent<
1313
}
1414

1515
override func update(typeProvider: SchemaTypeProvider, coders: Coders) throws {
16-
let fieldDefs = try fields(typeProvider: typeProvider, coders: coders)
1716
let objectType = try GraphQLObjectType(
1817
name: name,
1918
description: description,
20-
fields: fieldDefs,
21-
interfaces: interfaces.map {
22-
try typeProvider.getInterfaceType(from: $0)
19+
fields: {
20+
let fields = try self.fields(typeProvider: typeProvider, coders: coders)
21+
// Validate federation keys, if present
22+
for key in self.keys {
23+
try key.validate(
24+
againstFields: Array(fields.keys),
25+
typeProvider: typeProvider,
26+
coders: coders
27+
)
28+
}
29+
return fields
30+
},
31+
interfaces: {
32+
try self.interfaces.map {
33+
try typeProvider.getInterfaceType(from: $0)
34+
}
2335
},
2436
isTypeOf: isTypeOf
2537
)
2638

2739
try typeProvider.add(type: ObjectType.self, as: objectType)
2840

29-
// If federation keys are included, validate and create resolver closure
41+
// If federation keys are included, create resolver closure
3042
if !keys.isEmpty {
31-
let fieldNames = Array(fieldDefs.keys)
32-
for key in keys {
33-
try key.validate(
34-
againstFields: fieldNames,
35-
typeProvider: typeProvider,
36-
coders: coders
37-
)
38-
}
39-
4043
let resolve: GraphQLFieldResolve = { source, args, context, eventLoopGroup, _ in
4144
guard let s = source as? Resolver else {
4245
throw GraphQLError(

Sources/Graphiti/Union/Union.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ public final class Union<Resolver, Context, UnionType>: TypeComponent<Resolver,
88
name: name,
99
description: description,
1010
resolveType: nil,
11-
types: members.map {
12-
try typeProvider.getObjectType(from: $0)
11+
types: {
12+
try self.members.map {
13+
try typeProvider.getObjectType(from: $0)
14+
}
1315
}
1416
)
1517

0 commit comments

Comments
 (0)