Skip to content

Commit 1d094d4

Browse files
feat: Mainlines GraphQL
1 parent 3f927ac commit 1d094d4

8 files changed

Lines changed: 117 additions & 114 deletions

File tree

Examples/GraphQLDotOrg/Package.resolved

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

Examples/GraphQLDotOrg/Package.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ let package = Package(
1515
],
1616
dependencies: [
1717
.package(name: "graphql-generator", path: "../.."),
18-
// TODO: Mainline when merged: https://github.com/GraphQLSwift/GraphQL/pull/174
19-
.package(url: "https://github.com/NeedleInAJayStack/GraphQL.git", revision: "42ac35a0f69b9ffffcf9d02398c0b13d0c0e71aa"),
18+
.package(url: "https://github.com/GraphQLSwift/GraphQL.git", from: "4.1.0"),
2019
],
2120
targets: [
2221
.target(

Examples/HelloWorldServer/Package.resolved

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

Examples/HelloWorldServer/Package.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ let package = Package(
99
],
1010
dependencies: [
1111
.package(name: "graphql-generator", path: "../.."),
12-
// TODO: Mainline when merged: https://github.com/GraphQLSwift/GraphQL/pull/174
13-
.package(url: "https://github.com/NeedleInAJayStack/GraphQL.git", revision: "42ac35a0f69b9ffffcf9d02398c0b13d0c0e71aa"),
12+
.package(url: "https://github.com/GraphQLSwift/GraphQL.git", from: "4.1.0"),
1413
],
1514
targets: [
1615
.target(

Package.resolved

Lines changed: 3 additions & 3 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
@@ -21,7 +21,7 @@ let package = Package(
2121
),
2222
],
2323
dependencies: [
24-
.package(url: "https://github.com/GraphQLSwift/GraphQL.git", from: "4.0.0"),
24+
.package(url: "https://github.com/GraphQLSwift/GraphQL.git", from: "4.1.0"),
2525
.package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.3.0"),
2626
],
2727
targets: [

Sources/GraphQLGeneratorCore/Generator/BuildGraphQLSchemaGenerator.swift

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -96,82 +96,87 @@ package struct BuildGraphQLSchemaGenerator {
9696
}
9797

9898
func generateInterfaceType(for type: GraphQLInterfaceType) throws -> String {
99-
let variableName = nameGenerator.swiftMemberName(for: type.name)
99+
let typeName = nameGenerator.swiftMemberName(for: type.name)
100+
let variableName = "\(typeName)Fields"
100101

101102
var output = """
102103
103-
let \(variableName)Fields = try (schema.typeMap["\(type.name)"] as? GraphQLInterfaceType)?.fields() ?? [:]
104-
(schema.typeMap["\(type.name)"] as? GraphQLInterfaceType)?.fields = {
105-
var fields = \(variableName)Fields
104+
let \(typeName) = schema.typeMap["\(type.name)"] as? GraphQLObjectType
105+
let \(variableName) = try \(typeName)?.fields() ?? [:]
106106
"""
107107

108108
// Generate fields
109109
let fields = try type.fields()
110110
for (fieldName, field) in fields {
111-
output += try"""
111+
output += try """
112112
113113
\(generateResolverCallback(
114+
variableName: variableName,
114115
fieldName: fieldName,
115116
field: field,
116117
target: .parent,
117118
parentType: type
118-
).indent(1))
119+
))
119120
"""
120121
}
121122

122123
output += """
123124
124-
return fields
125+
\(typeName)?.fields = {
126+
return \(variableName)
125127
}
126128
"""
127129

128130
return output
129131
}
130132

131133
func generateObjectType(for type: GraphQLObjectType, target: ResolverTarget) throws -> String {
134+
let typeName = nameGenerator.swiftMemberName(for: type.name)
132135
let variableName: String
133136
switch target {
134137
case .query:
135-
variableName = "query"
138+
variableName = "queryFields"
136139
case .mutation:
137-
variableName = "mutation"
140+
variableName = "mutationFields"
138141
case .subscription:
139-
variableName = "subscription"
142+
variableName = "subscriptionFields"
140143
case .parent:
141-
variableName = nameGenerator.swiftMemberName(for: type.name)
144+
variableName = "\(typeName)Fields"
142145
}
143146

144147
var output = """
145148
146-
let \(variableName)Fields = try (schema.typeMap["\(type.name)"] as? GraphQLObjectType)?.fields() ?? [:]
147-
(schema.typeMap["\(type.name)"] as? GraphQLObjectType)?.fields = {
148-
var fields = \(variableName)Fields
149+
let \(typeName) = schema.typeMap["\(type.name)"] as? GraphQLObjectType
150+
let \(variableName) = try \(typeName)?.fields() ?? [:]
149151
"""
150152

151153
// Generate fields
152154
let fields = try type.fields()
153155
for (fieldName, field) in fields {
154-
output += try"""
156+
output += try """
155157
156158
\(generateResolverCallback(
159+
variableName: variableName,
157160
fieldName: fieldName,
158161
field: field,
159162
target: target,
160163
parentType: type
161-
).indent(1))
164+
))
162165
"""
163166
}
164167

165168
output += """
166169
167-
return fields
170+
\(typeName)?.fields = {
171+
return \(variableName)
168172
}
169173
"""
170174

171175
return output
172176
}
173177

174178
func generateResolverCallback(
179+
variableName: String,
175180
fieldName: String,
176181
field: GraphQLField,
177182
target: ResolverTarget,
@@ -181,16 +186,14 @@ package struct BuildGraphQLSchemaGenerator {
181186

182187
if target == .subscription {
183188
output += """
184-
185-
fields["\(fieldName)"]?.resolve = { source, _, _, _ in
189+
\(variableName)["\(fieldName)"]?.resolve = { source, _, _, _ in
186190
return source
187191
}
188-
fields["\(fieldName)"]?.subscribe = { source, args, context, info in
192+
\(variableName)["\(fieldName)"]?.subscribe = { source, args, context, info in
189193
"""
190194
} else {
191195
output += """
192-
193-
fields["\(fieldName)"]?.resolve = { source, args, context, info in
196+
\(variableName)["\(fieldName)"]?.resolve = { source, args, context, info in
194197
"""
195198
}
196199

0 commit comments

Comments
 (0)