Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Benchmarks/Benchmarks/StarWarsData.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This defines a basic set of data for our Star Wars Schema.
*
* This data is hard coded for the sake of the demo, but you could imagine
Expand Down
4 changes: 2 additions & 2 deletions Benchmarks/Benchmarks/StarWarsSchema.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This is designed to be an end-to-end test, demonstrating
* the full GraphQL stack.
*
Expand All@@ -11,7 +11,7 @@ import GraphQL
* Wars trilogy.
*/

/**
/*
* Using our shorthand to describe type systems, the type system for our
* Star Wars example is:
*
Expand Down
4 changes: 1 addition & 3 deletions Sources/GraphQL/Error/SyntaxError.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,16 +7,14 @@ import Foundation
func syntaxError(source: Source, position: Int, description: String) -> GraphQLError {
let location = getLocation(source: source, position: position)

let error = GraphQLError(
return GraphQLError(
message:
"Syntax Error \(source.name) (\(location.line):\(location.column)) " +
description + "\n\n" +
highlightSourceAtLocation(source: source, location: location),
source: source,
positions: [position]
)

return error
}

/**
Expand Down
27 changes: 11 additions & 16 deletions Sources/GraphQL/Execution/Execute.swift
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import Dispatch
import OrderedCollections

/**
/*
* Terminology
*
* "Definitions" are the generic name for top-level statements in the document.
Expand DownExpand Up@@ -632,8 +632,8 @@ public func resolveField(
)
}

// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
// function. Returns the result of `resolve` or the abrupt-return Error object.
/// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
/// function. Returns the result of `resolve` or the abrupt-return Error object.
func resolveOrError(
resolve: GraphQLFieldResolve,
source: any Sendable,
Expand All@@ -649,8 +649,8 @@ func resolveOrError(
}
}

// This is a small wrapper around completeValue which detects and logs errors
// in the execution context.
/// This is a small wrapper around completeValue which detects and logs errors
/// in the execution context.
func completeValueCatchingError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -693,8 +693,8 @@ func completeValueCatchingError(
}
}

// This is a small wrapper around completeValue which annotates errors with
// location information.
/// This is a small wrapper around completeValue which annotates errors with
/// location information.
func completeValueWithLocatedError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -886,11 +886,9 @@ func completeLeafValue(returnType: GraphQLLeafType, result: (any Sendable)?) thr
guard let result = result else {
return .null
}
let serializedResult = try returnType.serialize(value: result)
return try returnType.serialize(value: result)

// Do not check for serialization to null here. Some scalars may model literals as `Map.null`.

return serializedResult
}

/**
Expand DownExpand Up@@ -1048,16 +1046,13 @@ func defaultResolve(
}

if let subscriptable = source as? KeySubscriptable {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? [String: any Sendable] {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? OrderedDictionary<String, any Sendable> {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}

let mirror = Mirror(reflecting: source)
Expand Down
2 changes: 1 addition & 1 deletion Sources/GraphQL/GraphQLRequest.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ public struct GraphQLRequest: Equatable, Codable, Sendable {
self.variables = variables
}

// To handle decoding with a default of variables = []
/// To handle decoding with a default of variables = []
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
query = try container.decode(String.self, forKey: .query)
Expand Down
6 changes: 2 additions & 4 deletions Sources/GraphQL/Language/Lexer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
value: nil
)

let lexer = Lexer(
return Lexer(
source: source,
noLocation: noLocation,
lastToken: startOfFileToken,
Expand All@@ -25,8 +25,6 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
lineStart: 0,
advance: advanceLexer
)

return lexer
}

func advanceLexer(lexer: Lexer) throws -> Token {
Expand DownExpand Up@@ -866,7 +864,7 @@ func readBlockString(
)
}

/**
/*
* blockStringValue(rawValue: String)
*
* Transcription of the algorithm specified in the [spec](http://spec.graphql.org/draft/#BlockStringValue())
Expand Down
7 changes: 3 additions & 4 deletions Sources/GraphQL/Language/Parser.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,8 +22,7 @@ public func parse(
) throws -> Document {
do {
let lexer = createLexer(source: source, noLocation: noLocation)
let document = try parseDocument(lexer: lexer)
return document
return try parseDocument(lexer: lexer)
} catch let error as GraphQLError {
throw error
}
Expand DownExpand Up@@ -111,7 +110,7 @@ func peekDescription(lexer: Lexer) -> Bool {
return peek(lexer: lexer, kind: .string) || peek(lexer: lexer, kind: .blockstring)
}

/**
/*
* Description is optional StringValue
*/

Expand DownExpand Up@@ -586,7 +585,7 @@ func parseObjectField(lexer: Lexer, isConst: Bool) throws -> ObjectField {
)
}

/**
/*
* parseStringLiteral
*/

Expand Down
60 changes: 45 additions & 15 deletions Sources/GraphQL/Language/Printer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,11 +13,15 @@ private protocol Printable {
private let MAX_LINE_LENGTH = 80

extension Name: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension Variable: Printable {
var printed: String { "$" + name }
var printed: String {
"$" + name
}
}

// MARK: - Document
Expand DownExpand Up@@ -108,7 +112,9 @@ extension Argument: Printable {
// MARK: - Fragments

extension FragmentSpread: Printable {
var printed: String { "..." + name + wrap(" ", join(directives, " ")) }
var printed: String {
"..." + name + wrap(" ", join(directives, " "))
}
}

extension InlineFragment: Printable {
Expand All@@ -132,11 +138,15 @@ extension FragmentDefinition: Printable {
// MARK: - Value

extension IntValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension FloatValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension StringValue: Printable {
Expand All@@ -146,15 +156,21 @@ extension StringValue: Printable {
}

extension BooleanValue: Printable {
var printed: String { value ? "true" : "false" }
var printed: String {
value ? "true" : "false"
}
}

extension NullValue: Printable {
var printed: String { "null" }
var printed: String {
"null"
}
}

extension EnumValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension ListValue: Printable {
Expand DownExpand Up@@ -183,27 +199,37 @@ extension ObjectValue: Printable {
}

extension ObjectField: Printable {
var printed: String { name + ": " + value.printed }
var printed: String {
name + ": " + value.printed
}
}

// MARK: - Directive

extension Directive: Printable {
var printed: String { "@" + name + wrap("(", join(arguments, ", "), ")") }
var printed: String {
"@" + name + wrap("(", join(arguments, ", "), ")")
}
}

// MARK: - Type

extension NamedType: Printable {
var printed: String { name.printed }
var printed: String {
name.printed
}
}

extension ListType: Printable {
var printed: String { "[" + type.printed + "]" }
var printed: String {
"[" + type.printed + "]"
}
}

extension NonNullType: Printable {
var printed: String { type.printed + "!" }
var printed: String {
type.printed + "!"
}
}

// MARK: - Type System Definitions
Expand All@@ -216,7 +242,9 @@ extension SchemaDefinition: Printable {
}

extension OperationTypeDefinition: Printable {
var printed: String { operation.rawValue + ": " + type }
var printed: String {
operation.rawValue + ": " + type
}
}

extension ScalarTypeDefinition: Printable {
Expand DownExpand Up@@ -423,7 +451,9 @@ private func + (lhs: Printable, rhs: String) -> String {
}

extension String: Printable {
fileprivate var printed: String { self }
fileprivate var printed: String {
self
}
}

private extension Node {
Expand Down
9 changes: 1 addition & 8 deletions Sources/GraphQL/Language/Source.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@
* Note that since Source parsing is heavily UTF8 dependent, the body
* is converted into contiguous UTF8 bytes if necessary for optimal performance.
*/
public struct Source: Hashable, Sendable {
public struct Source: Hashable, Equatable, Sendable {
public let body: String
public let name: String

Expand All@@ -19,10 +19,3 @@ public struct Source: Hashable, Sendable {
self.name = name
}
}

extension Source: Equatable {
public static func == (lhs: Source, rhs: Source) -> Bool {
return lhs.body == rhs.body &&
lhs.name == rhs.name
}
}
2 changes: 1 addition & 1 deletion Sources/GraphQL/SwiftUtilities/IsNullish.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ extension Optional: OptionalProtocol {
}
}

/**
/*
* Returns true if a value is null, or nil.
*/
// func isNullish(_ value: Any?) -> Bool {
Expand Down
9 changes: 4 additions & 5 deletions Sources/GraphQL/Type/Definition.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -190,17 +190,17 @@ public final class GraphQLScalarType: Sendable {
self.parseLiteral = parseLiteral ?? defaultParseLiteral
}

// Serializes an internal value to include in a response.
/// Serializes an internal value to include in a response.
public func serialize(value: Any) throws -> Map {
return try serialize(value)
}

// Parses an externally provided value to use as an input.
/// Parses an externally provided value to use as an input.
public func parseValue(value: Map) throws -> Map {
return try parseValue(value)
}

// Parses an externally provided literal value to use as an input.
/// Parses an externally provided literal value to use as an input.
public func parseLiteral(valueAST: Value) throws -> Map {
return try parseLiteral(valueAST)
}
Expand DownExpand Up@@ -586,8 +586,7 @@ public final class GraphQLField: @unchecked Sendable {
self.astNode = astNode

_resolve = { source, args, context, info in
let result = try resolve(source, args, context, info)
return result
try resolve(source, args, context, info)
}
_subscribe = nil
}
Expand Down
5 changes: 2 additions & 3 deletions Sources/GraphQL/Type/Introspection.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -327,8 +327,7 @@ let __Type: GraphQLObjectType = {
}

let fieldMap = try type.getFields()
let fields = Array(fieldMap.values).sorted(by: { $0.name < $1.name })
return fields
return Array(fieldMap.values).sorted(by: { $0.name < $1.name })
}
),
"ofType": GraphQLField(type: __Type),
Expand DownExpand Up@@ -483,7 +482,7 @@ let __TypeKind = try! GraphQLEnumType(
]
)

/**
/*
* Note that these are GraphQLFieldDefinition and not GraphQLField,
* so the format for args is different.
*/
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Benchmarks/Benchmarks/StarWarsData.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This defines a basic set of data for our Star Wars Schema.
*
* This data is hard coded for the sake of the demo, but you could imagine
Expand Down
4 changes: 2 additions & 2 deletions Benchmarks/Benchmarks/StarWarsSchema.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This is designed to be an end-to-end test, demonstrating
* the full GraphQL stack.
*
Expand All@@ -11,7 +11,7 @@ import GraphQL
* Wars trilogy.
*/

/**
/*
* Using our shorthand to describe type systems, the type system for our
* Star Wars example is:
*
Expand Down
4 changes: 1 addition & 3 deletions Sources/GraphQL/Error/SyntaxError.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,16 +7,14 @@ import Foundation
func syntaxError(source: Source, position: Int, description: String) -> GraphQLError {
let location = getLocation(source: source, position: position)

let error = GraphQLError(
return GraphQLError(
message:
"Syntax Error \(source.name) (\(location.line):\(location.column)) " +
description + "\n\n" +
highlightSourceAtLocation(source: source, location: location),
source: source,
positions: [position]
)

return error
}

/**
Expand Down
27 changes: 11 additions & 16 deletions Sources/GraphQL/Execution/Execute.swift
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import Dispatch
import OrderedCollections

/**
/*
* Terminology
*
* "Definitions" are the generic name for top-level statements in the document.
Expand DownExpand Up@@ -632,8 +632,8 @@ public func resolveField(
)
}

// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
// function. Returns the result of `resolve` or the abrupt-return Error object.
/// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
/// function. Returns the result of `resolve` or the abrupt-return Error object.
func resolveOrError(
resolve: GraphQLFieldResolve,
source: any Sendable,
Expand All@@ -649,8 +649,8 @@ func resolveOrError(
}
}

// This is a small wrapper around completeValue which detects and logs errors
// in the execution context.
/// This is a small wrapper around completeValue which detects and logs errors
/// in the execution context.
func completeValueCatchingError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -693,8 +693,8 @@ func completeValueCatchingError(
}
}

// This is a small wrapper around completeValue which annotates errors with
// location information.
/// This is a small wrapper around completeValue which annotates errors with
/// location information.
func completeValueWithLocatedError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -886,11 +886,9 @@ func completeLeafValue(returnType: GraphQLLeafType, result: (any Sendable)?) thr
guard let result = result else {
return .null
}
let serializedResult = try returnType.serialize(value: result)
return try returnType.serialize(value: result)

// Do not check for serialization to null here. Some scalars may model literals as `Map.null`.

return serializedResult
}

/**
Expand DownExpand Up@@ -1048,16 +1046,13 @@ func defaultResolve(
}

if let subscriptable = source as? KeySubscriptable {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? [String: any Sendable] {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? OrderedDictionary<String, any Sendable> {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}

let mirror = Mirror(reflecting: source)
Expand Down
2 changes: 1 addition & 1 deletion Sources/GraphQL/GraphQLRequest.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ public struct GraphQLRequest: Equatable, Codable, Sendable {
self.variables = variables
}

// To handle decoding with a default of variables = []
/// To handle decoding with a default of variables = []
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
query = try container.decode(String.self, forKey: .query)
Expand Down
6 changes: 2 additions & 4 deletions Sources/GraphQL/Language/Lexer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
value: nil
)

let lexer = Lexer(
return Lexer(
source: source,
noLocation: noLocation,
lastToken: startOfFileToken,
Expand All@@ -25,8 +25,6 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
lineStart: 0,
advance: advanceLexer
)

return lexer
}

func advanceLexer(lexer: Lexer) throws -> Token {
Expand DownExpand Up@@ -866,7 +864,7 @@ func readBlockString(
)
}

/**
/*
* blockStringValue(rawValue: String)
*
* Transcription of the algorithm specified in the [spec](http://spec.graphql.org/draft/#BlockStringValue())
Expand Down
7 changes: 3 additions & 4 deletions Sources/GraphQL/Language/Parser.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,8 +22,7 @@ public func parse(
) throws -> Document {
do {
let lexer = createLexer(source: source, noLocation: noLocation)
let document = try parseDocument(lexer: lexer)
return document
return try parseDocument(lexer: lexer)
} catch let error as GraphQLError {
throw error
}
Expand DownExpand Up@@ -111,7 +110,7 @@ func peekDescription(lexer: Lexer) -> Bool {
return peek(lexer: lexer, kind: .string) || peek(lexer: lexer, kind: .blockstring)
}

/**
/*
* Description is optional StringValue
*/

Expand DownExpand Up@@ -586,7 +585,7 @@ func parseObjectField(lexer: Lexer, isConst: Bool) throws -> ObjectField {
)
}

/**
/*
* parseStringLiteral
*/

Expand Down
60 changes: 45 additions & 15 deletions Sources/GraphQL/Language/Printer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,11 +13,15 @@ private protocol Printable {
private let MAX_LINE_LENGTH = 80

extension Name: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension Variable: Printable {
var printed: String { "$" + name }
var printed: String {
"$" + name
}
}

// MARK: - Document
Expand DownExpand Up@@ -108,7 +112,9 @@ extension Argument: Printable {
// MARK: - Fragments

extension FragmentSpread: Printable {
var printed: String { "..." + name + wrap(" ", join(directives, " ")) }
var printed: String {
"..." + name + wrap(" ", join(directives, " "))
}
}

extension InlineFragment: Printable {
Expand All@@ -132,11 +138,15 @@ extension FragmentDefinition: Printable {
// MARK: - Value

extension IntValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension FloatValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension StringValue: Printable {
Expand All@@ -146,15 +156,21 @@ extension StringValue: Printable {
}

extension BooleanValue: Printable {
var printed: String { value ? "true" : "false" }
var printed: String {
value ? "true" : "false"
}
}

extension NullValue: Printable {
var printed: String { "null" }
var printed: String {
"null"
}
}

extension EnumValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension ListValue: Printable {
Expand DownExpand Up@@ -183,27 +199,37 @@ extension ObjectValue: Printable {
}

extension ObjectField: Printable {
var printed: String { name + ": " + value.printed }
var printed: String {
name + ": " + value.printed
}
}

// MARK: - Directive

extension Directive: Printable {
var printed: String { "@" + name + wrap("(", join(arguments, ", "), ")") }
var printed: String {
"@" + name + wrap("(", join(arguments, ", "), ")")
}
}

// MARK: - Type

extension NamedType: Printable {
var printed: String { name.printed }
var printed: String {
name.printed
}
}

extension ListType: Printable {
var printed: String { "[" + type.printed + "]" }
var printed: String {
"[" + type.printed + "]"
}
}

extension NonNullType: Printable {
var printed: String { type.printed + "!" }
var printed: String {
type.printed + "!"
}
}

// MARK: - Type System Definitions
Expand All@@ -216,7 +242,9 @@ extension SchemaDefinition: Printable {
}

extension OperationTypeDefinition: Printable {
var printed: String { operation.rawValue + ": " + type }
var printed: String {
operation.rawValue + ": " + type
}
}

extension ScalarTypeDefinition: Printable {
Expand DownExpand Up@@ -423,7 +451,9 @@ private func + (lhs: Printable, rhs: String) -> String {
}

extension String: Printable {
fileprivate var printed: String { self }
fileprivate var printed: String {
self
}
}

private extension Node {
Expand Down
9 changes: 1 addition & 8 deletions Sources/GraphQL/Language/Source.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@
* Note that since Source parsing is heavily UTF8 dependent, the body
* is converted into contiguous UTF8 bytes if necessary for optimal performance.
*/
public struct Source: Hashable, Sendable {
public struct Source: Hashable, Equatable, Sendable {
public let body: String
public let name: String

Expand All@@ -19,10 +19,3 @@ public struct Source: Hashable, Sendable {
self.name = name
}
}

extension Source: Equatable {
public static func == (lhs: Source, rhs: Source) -> Bool {
return lhs.body == rhs.body &&
lhs.name == rhs.name
}
}
2 changes: 1 addition & 1 deletion Sources/GraphQL/SwiftUtilities/IsNullish.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ extension Optional: OptionalProtocol {
}
}

/**
/*
* Returns true if a value is null, or nil.
*/
// func isNullish(_ value: Any?) -> Bool {
Expand Down
9 changes: 4 additions & 5 deletions Sources/GraphQL/Type/Definition.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -190,17 +190,17 @@ public final class GraphQLScalarType: Sendable {
self.parseLiteral = parseLiteral ?? defaultParseLiteral
}

// Serializes an internal value to include in a response.
/// Serializes an internal value to include in a response.
public func serialize(value: Any) throws -> Map {
return try serialize(value)
}

// Parses an externally provided value to use as an input.
/// Parses an externally provided value to use as an input.
public func parseValue(value: Map) throws -> Map {
return try parseValue(value)
}

// Parses an externally provided literal value to use as an input.
/// Parses an externally provided literal value to use as an input.
public func parseLiteral(valueAST: Value) throws -> Map {
return try parseLiteral(valueAST)
}
Expand DownExpand Up@@ -586,8 +586,7 @@ public final class GraphQLField: @unchecked Sendable {
self.astNode = astNode

_resolve = { source, args, context, info in
let result = try resolve(source, args, context, info)
return result
try resolve(source, args, context, info)
}
_subscribe = nil
}
Expand Down
5 changes: 2 additions & 3 deletions Sources/GraphQL/Type/Introspection.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -327,8 +327,7 @@ let __Type: GraphQLObjectType = {
}

let fieldMap = try type.getFields()
let fields = Array(fieldMap.values).sorted(by: { $0.name < $1.name })
return fields
return Array(fieldMap.values).sorted(by: { $0.name < $1.name })
}
),
"ofType": GraphQLField(type: __Type),
Expand DownExpand Up@@ -483,7 +482,7 @@ let __TypeKind = try! GraphQLEnumType(
]
)

/**
/*
* Note that these are GraphQLFieldDefinition and not GraphQLField,
* so the format for args is different.
*/
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Benchmarks/Benchmarks/StarWarsData.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This defines a basic set of data for our Star Wars Schema.
*
* This data is hard coded for the sake of the demo, but you could imagine
Expand Down
4 changes: 2 additions & 2 deletions Benchmarks/Benchmarks/StarWarsSchema.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This is designed to be an end-to-end test, demonstrating
* the full GraphQL stack.
*
Expand All@@ -11,7 +11,7 @@ import GraphQL
* Wars trilogy.
*/

/**
/*
* Using our shorthand to describe type systems, the type system for our
* Star Wars example is:
*
Expand Down
4 changes: 1 addition & 3 deletions Sources/GraphQL/Error/SyntaxError.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,16 +7,14 @@ import Foundation
func syntaxError(source: Source, position: Int, description: String) -> GraphQLError {
let location = getLocation(source: source, position: position)

let error = GraphQLError(
return GraphQLError(
message:
"Syntax Error \(source.name) (\(location.line):\(location.column)) " +
description + "\n\n" +
highlightSourceAtLocation(source: source, location: location),
source: source,
positions: [position]
)

return error
}

/**
Expand Down
27 changes: 11 additions & 16 deletions Sources/GraphQL/Execution/Execute.swift
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import Dispatch
import OrderedCollections

/**
/*
* Terminology
*
* "Definitions" are the generic name for top-level statements in the document.
Expand DownExpand Up@@ -632,8 +632,8 @@ public func resolveField(
)
}

// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
// function. Returns the result of `resolve` or the abrupt-return Error object.
/// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
/// function. Returns the result of `resolve` or the abrupt-return Error object.
func resolveOrError(
resolve: GraphQLFieldResolve,
source: any Sendable,
Expand All@@ -649,8 +649,8 @@ func resolveOrError(
}
}

// This is a small wrapper around completeValue which detects and logs errors
// in the execution context.
/// This is a small wrapper around completeValue which detects and logs errors
/// in the execution context.
func completeValueCatchingError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -693,8 +693,8 @@ func completeValueCatchingError(
}
}

// This is a small wrapper around completeValue which annotates errors with
// location information.
/// This is a small wrapper around completeValue which annotates errors with
/// location information.
func completeValueWithLocatedError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -886,11 +886,9 @@ func completeLeafValue(returnType: GraphQLLeafType, result: (any Sendable)?) thr
guard let result = result else {
return .null
}
let serializedResult = try returnType.serialize(value: result)
return try returnType.serialize(value: result)

// Do not check for serialization to null here. Some scalars may model literals as `Map.null`.

return serializedResult
}

/**
Expand DownExpand Up@@ -1048,16 +1046,13 @@ func defaultResolve(
}

if let subscriptable = source as? KeySubscriptable {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? [String: any Sendable] {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? OrderedDictionary<String, any Sendable> {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}

let mirror = Mirror(reflecting: source)
Expand Down
2 changes: 1 addition & 1 deletion Sources/GraphQL/GraphQLRequest.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ public struct GraphQLRequest: Equatable, Codable, Sendable {
self.variables = variables
}

// To handle decoding with a default of variables = []
/// To handle decoding with a default of variables = []
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
query = try container.decode(String.self, forKey: .query)
Expand Down
6 changes: 2 additions & 4 deletions Sources/GraphQL/Language/Lexer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
value: nil
)

let lexer = Lexer(
return Lexer(
source: source,
noLocation: noLocation,
lastToken: startOfFileToken,
Expand All@@ -25,8 +25,6 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
lineStart: 0,
advance: advanceLexer
)

return lexer
}

func advanceLexer(lexer: Lexer) throws -> Token {
Expand DownExpand Up@@ -866,7 +864,7 @@ func readBlockString(
)
}

/**
/*
* blockStringValue(rawValue: String)
*
* Transcription of the algorithm specified in the [spec](http://spec.graphql.org/draft/#BlockStringValue())
Expand Down
7 changes: 3 additions & 4 deletions Sources/GraphQL/Language/Parser.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,8 +22,7 @@ public func parse(
) throws -> Document {
do {
let lexer = createLexer(source: source, noLocation: noLocation)
let document = try parseDocument(lexer: lexer)
return document
return try parseDocument(lexer: lexer)
} catch let error as GraphQLError {
throw error
}
Expand DownExpand Up@@ -111,7 +110,7 @@ func peekDescription(lexer: Lexer) -> Bool {
return peek(lexer: lexer, kind: .string) || peek(lexer: lexer, kind: .blockstring)
}

/**
/*
* Description is optional StringValue
*/

Expand DownExpand Up@@ -586,7 +585,7 @@ func parseObjectField(lexer: Lexer, isConst: Bool) throws -> ObjectField {
)
}

/**
/*
* parseStringLiteral
*/

Expand Down
60 changes: 45 additions & 15 deletions Sources/GraphQL/Language/Printer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,11 +13,15 @@ private protocol Printable {
private let MAX_LINE_LENGTH = 80

extension Name: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension Variable: Printable {
var printed: String { "$" + name }
var printed: String {
"$" + name
}
}

// MARK: - Document
Expand DownExpand Up@@ -108,7 +112,9 @@ extension Argument: Printable {
// MARK: - Fragments

extension FragmentSpread: Printable {
var printed: String { "..." + name + wrap(" ", join(directives, " ")) }
var printed: String {
"..." + name + wrap(" ", join(directives, " "))
}
}

extension InlineFragment: Printable {
Expand All@@ -132,11 +138,15 @@ extension FragmentDefinition: Printable {
// MARK: - Value

extension IntValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension FloatValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension StringValue: Printable {
Expand All@@ -146,15 +156,21 @@ extension StringValue: Printable {
}

extension BooleanValue: Printable {
var printed: String { value ? "true" : "false" }
var printed: String {
value ? "true" : "false"
}
}

extension NullValue: Printable {
var printed: String { "null" }
var printed: String {
"null"
}
}

extension EnumValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension ListValue: Printable {
Expand DownExpand Up@@ -183,27 +199,37 @@ extension ObjectValue: Printable {
}

extension ObjectField: Printable {
var printed: String { name + ": " + value.printed }
var printed: String {
name + ": " + value.printed
}
}

// MARK: - Directive

extension Directive: Printable {
var printed: String { "@" + name + wrap("(", join(arguments, ", "), ")") }
var printed: String {
"@" + name + wrap("(", join(arguments, ", "), ")")
}
}

// MARK: - Type

extension NamedType: Printable {
var printed: String { name.printed }
var printed: String {
name.printed
}
}

extension ListType: Printable {
var printed: String { "[" + type.printed + "]" }
var printed: String {
"[" + type.printed + "]"
}
}

extension NonNullType: Printable {
var printed: String { type.printed + "!" }
var printed: String {
type.printed + "!"
}
}

// MARK: - Type System Definitions
Expand All@@ -216,7 +242,9 @@ extension SchemaDefinition: Printable {
}

extension OperationTypeDefinition: Printable {
var printed: String { operation.rawValue + ": " + type }
var printed: String {
operation.rawValue + ": " + type
}
}

extension ScalarTypeDefinition: Printable {
Expand DownExpand Up@@ -423,7 +451,9 @@ private func + (lhs: Printable, rhs: String) -> String {
}

extension String: Printable {
fileprivate var printed: String { self }
fileprivate var printed: String {
self
}
}

private extension Node {
Expand Down
9 changes: 1 addition & 8 deletions Sources/GraphQL/Language/Source.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@
* Note that since Source parsing is heavily UTF8 dependent, the body
* is converted into contiguous UTF8 bytes if necessary for optimal performance.
*/
public struct Source: Hashable, Sendable {
public struct Source: Hashable, Equatable, Sendable {
public let body: String
public let name: String

Expand All@@ -19,10 +19,3 @@ public struct Source: Hashable, Sendable {
self.name = name
}
}

extension Source: Equatable {
public static func == (lhs: Source, rhs: Source) -> Bool {
return lhs.body == rhs.body &&
lhs.name == rhs.name
}
}
2 changes: 1 addition & 1 deletion Sources/GraphQL/SwiftUtilities/IsNullish.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ extension Optional: OptionalProtocol {
}
}

/**
/*
* Returns true if a value is null, or nil.
*/
// func isNullish(_ value: Any?) -> Bool {
Expand Down
9 changes: 4 additions & 5 deletions Sources/GraphQL/Type/Definition.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -190,17 +190,17 @@ public final class GraphQLScalarType: Sendable {
self.parseLiteral = parseLiteral ?? defaultParseLiteral
}

// Serializes an internal value to include in a response.
/// Serializes an internal value to include in a response.
public func serialize(value: Any) throws -> Map {
return try serialize(value)
}

// Parses an externally provided value to use as an input.
/// Parses an externally provided value to use as an input.
public func parseValue(value: Map) throws -> Map {
return try parseValue(value)
}

// Parses an externally provided literal value to use as an input.
/// Parses an externally provided literal value to use as an input.
public func parseLiteral(valueAST: Value) throws -> Map {
return try parseLiteral(valueAST)
}
Expand DownExpand Up@@ -586,8 +586,7 @@ public final class GraphQLField: @unchecked Sendable {
self.astNode = astNode

_resolve = { source, args, context, info in
let result = try resolve(source, args, context, info)
return result
try resolve(source, args, context, info)
}
_subscribe = nil
}
Expand Down
5 changes: 2 additions & 3 deletions Sources/GraphQL/Type/Introspection.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -327,8 +327,7 @@ let __Type: GraphQLObjectType = {
}

let fieldMap = try type.getFields()
let fields = Array(fieldMap.values).sorted(by: { $0.name < $1.name })
return fields
return Array(fieldMap.values).sorted(by: { $0.name < $1.name })
}
),
"ofType": GraphQLField(type: __Type),
Expand DownExpand Up@@ -483,7 +482,7 @@ let __TypeKind = try! GraphQLEnumType(
]
)

/**
/*
* Note that these are GraphQLFieldDefinition and not GraphQLField,
* so the format for args is different.
*/
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Benchmarks/Benchmarks/StarWarsData.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This defines a basic set of data for our Star Wars Schema.
*
* This data is hard coded for the sake of the demo, but you could imagine
Expand Down
4 changes: 2 additions & 2 deletions Benchmarks/Benchmarks/StarWarsSchema.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This is designed to be an end-to-end test, demonstrating
* the full GraphQL stack.
*
Expand All@@ -11,7 +11,7 @@ import GraphQL
* Wars trilogy.
*/

/**
/*
* Using our shorthand to describe type systems, the type system for our
* Star Wars example is:
*
Expand Down
4 changes: 1 addition & 3 deletions Sources/GraphQL/Error/SyntaxError.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,16 +7,14 @@ import Foundation
func syntaxError(source: Source, position: Int, description: String) -> GraphQLError {
let location = getLocation(source: source, position: position)

let error = GraphQLError(
return GraphQLError(
message:
"Syntax Error \(source.name) (\(location.line):\(location.column)) " +
description + "\n\n" +
highlightSourceAtLocation(source: source, location: location),
source: source,
positions: [position]
)

return error
}

/**
Expand Down
27 changes: 11 additions & 16 deletions Sources/GraphQL/Execution/Execute.swift
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import Dispatch
import OrderedCollections

/**
/*
* Terminology
*
* "Definitions" are the generic name for top-level statements in the document.
Expand DownExpand Up@@ -632,8 +632,8 @@ public func resolveField(
)
}

// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
// function. Returns the result of `resolve` or the abrupt-return Error object.
/// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
/// function. Returns the result of `resolve` or the abrupt-return Error object.
func resolveOrError(
resolve: GraphQLFieldResolve,
source: any Sendable,
Expand All@@ -649,8 +649,8 @@ func resolveOrError(
}
}

// This is a small wrapper around completeValue which detects and logs errors
// in the execution context.
/// This is a small wrapper around completeValue which detects and logs errors
/// in the execution context.
func completeValueCatchingError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -693,8 +693,8 @@ func completeValueCatchingError(
}
}

// This is a small wrapper around completeValue which annotates errors with
// location information.
/// This is a small wrapper around completeValue which annotates errors with
/// location information.
func completeValueWithLocatedError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -886,11 +886,9 @@ func completeLeafValue(returnType: GraphQLLeafType, result: (any Sendable)?) thr
guard let result = result else {
return .null
}
let serializedResult = try returnType.serialize(value: result)
return try returnType.serialize(value: result)

// Do not check for serialization to null here. Some scalars may model literals as `Map.null`.

return serializedResult
}

/**
Expand DownExpand Up@@ -1048,16 +1046,13 @@ func defaultResolve(
}

if let subscriptable = source as? KeySubscriptable {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? [String: any Sendable] {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? OrderedDictionary<String, any Sendable> {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}

let mirror = Mirror(reflecting: source)
Expand Down
2 changes: 1 addition & 1 deletion Sources/GraphQL/GraphQLRequest.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ public struct GraphQLRequest: Equatable, Codable, Sendable {
self.variables = variables
}

// To handle decoding with a default of variables = []
/// To handle decoding with a default of variables = []
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
query = try container.decode(String.self, forKey: .query)
Expand Down
6 changes: 2 additions & 4 deletions Sources/GraphQL/Language/Lexer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
value: nil
)

let lexer = Lexer(
return Lexer(
source: source,
noLocation: noLocation,
lastToken: startOfFileToken,
Expand All@@ -25,8 +25,6 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
lineStart: 0,
advance: advanceLexer
)

return lexer
}

func advanceLexer(lexer: Lexer) throws -> Token {
Expand DownExpand Up@@ -866,7 +864,7 @@ func readBlockString(
)
}

/**
/*
* blockStringValue(rawValue: String)
*
* Transcription of the algorithm specified in the [spec](http://spec.graphql.org/draft/#BlockStringValue())
Expand Down
7 changes: 3 additions & 4 deletions Sources/GraphQL/Language/Parser.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,8 +22,7 @@ public func parse(
) throws -> Document {
do {
let lexer = createLexer(source: source, noLocation: noLocation)
let document = try parseDocument(lexer: lexer)
return document
return try parseDocument(lexer: lexer)
} catch let error as GraphQLError {
throw error
}
Expand DownExpand Up@@ -111,7 +110,7 @@ func peekDescription(lexer: Lexer) -> Bool {
return peek(lexer: lexer, kind: .string) || peek(lexer: lexer, kind: .blockstring)
}

/**
/*
* Description is optional StringValue
*/

Expand DownExpand Up@@ -586,7 +585,7 @@ func parseObjectField(lexer: Lexer, isConst: Bool) throws -> ObjectField {
)
}

/**
/*
* parseStringLiteral
*/

Expand Down
60 changes: 45 additions & 15 deletions Sources/GraphQL/Language/Printer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,11 +13,15 @@ private protocol Printable {
private let MAX_LINE_LENGTH = 80

extension Name: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension Variable: Printable {
var printed: String { "$" + name }
var printed: String {
"$" + name
}
}

// MARK: - Document
Expand DownExpand Up@@ -108,7 +112,9 @@ extension Argument: Printable {
// MARK: - Fragments

extension FragmentSpread: Printable {
var printed: String { "..." + name + wrap(" ", join(directives, " ")) }
var printed: String {
"..." + name + wrap(" ", join(directives, " "))
}
}

extension InlineFragment: Printable {
Expand All@@ -132,11 +138,15 @@ extension FragmentDefinition: Printable {
// MARK: - Value

extension IntValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension FloatValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension StringValue: Printable {
Expand All@@ -146,15 +156,21 @@ extension StringValue: Printable {
}

extension BooleanValue: Printable {
var printed: String { value ? "true" : "false" }
var printed: String {
value ? "true" : "false"
}
}

extension NullValue: Printable {
var printed: String { "null" }
var printed: String {
"null"
}
}

extension EnumValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension ListValue: Printable {
Expand DownExpand Up@@ -183,27 +199,37 @@ extension ObjectValue: Printable {
}

extension ObjectField: Printable {
var printed: String { name + ": " + value.printed }
var printed: String {
name + ": " + value.printed
}
}

// MARK: - Directive

extension Directive: Printable {
var printed: String { "@" + name + wrap("(", join(arguments, ", "), ")") }
var printed: String {
"@" + name + wrap("(", join(arguments, ", "), ")")
}
}

// MARK: - Type

extension NamedType: Printable {
var printed: String { name.printed }
var printed: String {
name.printed
}
}

extension ListType: Printable {
var printed: String { "[" + type.printed + "]" }
var printed: String {
"[" + type.printed + "]"
}
}

extension NonNullType: Printable {
var printed: String { type.printed + "!" }
var printed: String {
type.printed + "!"
}
}

// MARK: - Type System Definitions
Expand All@@ -216,7 +242,9 @@ extension SchemaDefinition: Printable {
}

extension OperationTypeDefinition: Printable {
var printed: String { operation.rawValue + ": " + type }
var printed: String {
operation.rawValue + ": " + type
}
}

extension ScalarTypeDefinition: Printable {
Expand DownExpand Up@@ -423,7 +451,9 @@ private func + (lhs: Printable, rhs: String) -> String {
}

extension String: Printable {
fileprivate var printed: String { self }
fileprivate var printed: String {
self
}
}

private extension Node {
Expand Down
9 changes: 1 addition & 8 deletions Sources/GraphQL/Language/Source.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@
* Note that since Source parsing is heavily UTF8 dependent, the body
* is converted into contiguous UTF8 bytes if necessary for optimal performance.
*/
public struct Source: Hashable, Sendable {
public struct Source: Hashable, Equatable, Sendable {
public let body: String
public let name: String

Expand All@@ -19,10 +19,3 @@ public struct Source: Hashable, Sendable {
self.name = name
}
}

extension Source: Equatable {
public static func == (lhs: Source, rhs: Source) -> Bool {
return lhs.body == rhs.body &&
lhs.name == rhs.name
}
}
2 changes: 1 addition & 1 deletion Sources/GraphQL/SwiftUtilities/IsNullish.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ extension Optional: OptionalProtocol {
}
}

/**
/*
* Returns true if a value is null, or nil.
*/
// func isNullish(_ value: Any?) -> Bool {
Expand Down
9 changes: 4 additions & 5 deletions Sources/GraphQL/Type/Definition.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -190,17 +190,17 @@ public final class GraphQLScalarType: Sendable {
self.parseLiteral = parseLiteral ?? defaultParseLiteral
}

// Serializes an internal value to include in a response.
/// Serializes an internal value to include in a response.
public func serialize(value: Any) throws -> Map {
return try serialize(value)
}

// Parses an externally provided value to use as an input.
/// Parses an externally provided value to use as an input.
public func parseValue(value: Map) throws -> Map {
return try parseValue(value)
}

// Parses an externally provided literal value to use as an input.
/// Parses an externally provided literal value to use as an input.
public func parseLiteral(valueAST: Value) throws -> Map {
return try parseLiteral(valueAST)
}
Expand DownExpand Up@@ -586,8 +586,7 @@ public final class GraphQLField: @unchecked Sendable {
self.astNode = astNode

_resolve = { source, args, context, info in
let result = try resolve(source, args, context, info)
return result
try resolve(source, args, context, info)
}
_subscribe = nil
}
Expand Down
5 changes: 2 additions & 3 deletions Sources/GraphQL/Type/Introspection.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -327,8 +327,7 @@ let __Type: GraphQLObjectType = {
}

let fieldMap = try type.getFields()
let fields = Array(fieldMap.values).sorted(by: { $0.name < $1.name })
return fields
return Array(fieldMap.values).sorted(by: { $0.name < $1.name })
}
),
"ofType": GraphQLField(type: __Type),
Expand DownExpand Up@@ -483,7 +482,7 @@ let __TypeKind = try! GraphQLEnumType(
]
)

/**
/*
* Note that these are GraphQLFieldDefinition and not GraphQLField,
* so the format for args is different.
*/
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Benchmarks/Benchmarks/StarWarsData.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This defines a basic set of data for our Star Wars Schema.
*
* This data is hard coded for the sake of the demo, but you could imagine
Expand Down
4 changes: 2 additions & 2 deletions Benchmarks/Benchmarks/StarWarsSchema.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This is designed to be an end-to-end test, demonstrating
* the full GraphQL stack.
*
Expand All@@ -11,7 +11,7 @@ import GraphQL
* Wars trilogy.
*/

/**
/*
* Using our shorthand to describe type systems, the type system for our
* Star Wars example is:
*
Expand Down
4 changes: 1 addition & 3 deletions Sources/GraphQL/Error/SyntaxError.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,16 +7,14 @@ import Foundation
func syntaxError(source: Source, position: Int, description: String) -> GraphQLError {
let location = getLocation(source: source, position: position)

let error = GraphQLError(
return GraphQLError(
message:
"Syntax Error \(source.name) (\(location.line):\(location.column)) " +
description + "\n\n" +
highlightSourceAtLocation(source: source, location: location),
source: source,
positions: [position]
)

return error
}

/**
Expand Down
27 changes: 11 additions & 16 deletions Sources/GraphQL/Execution/Execute.swift
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import Dispatch
import OrderedCollections

/**
/*
* Terminology
*
* "Definitions" are the generic name for top-level statements in the document.
Expand DownExpand Up@@ -632,8 +632,8 @@ public func resolveField(
)
}

// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
// function. Returns the result of `resolve` or the abrupt-return Error object.
/// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
/// function. Returns the result of `resolve` or the abrupt-return Error object.
func resolveOrError(
resolve: GraphQLFieldResolve,
source: any Sendable,
Expand All@@ -649,8 +649,8 @@ func resolveOrError(
}
}

// This is a small wrapper around completeValue which detects and logs errors
// in the execution context.
/// This is a small wrapper around completeValue which detects and logs errors
/// in the execution context.
func completeValueCatchingError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -693,8 +693,8 @@ func completeValueCatchingError(
}
}

// This is a small wrapper around completeValue which annotates errors with
// location information.
/// This is a small wrapper around completeValue which annotates errors with
/// location information.
func completeValueWithLocatedError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -886,11 +886,9 @@ func completeLeafValue(returnType: GraphQLLeafType, result: (any Sendable)?) thr
guard let result = result else {
return .null
}
let serializedResult = try returnType.serialize(value: result)
return try returnType.serialize(value: result)

// Do not check for serialization to null here. Some scalars may model literals as `Map.null`.

return serializedResult
}

/**
Expand DownExpand Up@@ -1048,16 +1046,13 @@ func defaultResolve(
}

if let subscriptable = source as? KeySubscriptable {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? [String: any Sendable] {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? OrderedDictionary<String, any Sendable> {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}

let mirror = Mirror(reflecting: source)
Expand Down
2 changes: 1 addition & 1 deletion Sources/GraphQL/GraphQLRequest.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ public struct GraphQLRequest: Equatable, Codable, Sendable {
self.variables = variables
}

// To handle decoding with a default of variables = []
/// To handle decoding with a default of variables = []
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
query = try container.decode(String.self, forKey: .query)
Expand Down
6 changes: 2 additions & 4 deletions Sources/GraphQL/Language/Lexer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
value: nil
)

let lexer = Lexer(
return Lexer(
source: source,
noLocation: noLocation,
lastToken: startOfFileToken,
Expand All@@ -25,8 +25,6 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
lineStart: 0,
advance: advanceLexer
)

return lexer
}

func advanceLexer(lexer: Lexer) throws -> Token {
Expand DownExpand Up@@ -866,7 +864,7 @@ func readBlockString(
)
}

/**
/*
* blockStringValue(rawValue: String)
*
* Transcription of the algorithm specified in the [spec](http://spec.graphql.org/draft/#BlockStringValue())
Expand Down
7 changes: 3 additions & 4 deletions Sources/GraphQL/Language/Parser.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,8 +22,7 @@ public func parse(
) throws -> Document {
do {
let lexer = createLexer(source: source, noLocation: noLocation)
let document = try parseDocument(lexer: lexer)
return document
return try parseDocument(lexer: lexer)
} catch let error as GraphQLError {
throw error
}
Expand DownExpand Up@@ -111,7 +110,7 @@ func peekDescription(lexer: Lexer) -> Bool {
return peek(lexer: lexer, kind: .string) || peek(lexer: lexer, kind: .blockstring)
}

/**
/*
* Description is optional StringValue
*/

Expand DownExpand Up@@ -586,7 +585,7 @@ func parseObjectField(lexer: Lexer, isConst: Bool) throws -> ObjectField {
)
}

/**
/*
* parseStringLiteral
*/

Expand Down
60 changes: 45 additions & 15 deletions Sources/GraphQL/Language/Printer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,11 +13,15 @@ private protocol Printable {
private let MAX_LINE_LENGTH = 80

extension Name: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension Variable: Printable {
var printed: String { "$" + name }
var printed: String {
"$" + name
}
}

// MARK: - Document
Expand DownExpand Up@@ -108,7 +112,9 @@ extension Argument: Printable {
// MARK: - Fragments

extension FragmentSpread: Printable {
var printed: String { "..." + name + wrap(" ", join(directives, " ")) }
var printed: String {
"..." + name + wrap(" ", join(directives, " "))
}
}

extension InlineFragment: Printable {
Expand All@@ -132,11 +138,15 @@ extension FragmentDefinition: Printable {
// MARK: - Value

extension IntValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension FloatValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension StringValue: Printable {
Expand All@@ -146,15 +156,21 @@ extension StringValue: Printable {
}

extension BooleanValue: Printable {
var printed: String { value ? "true" : "false" }
var printed: String {
value ? "true" : "false"
}
}

extension NullValue: Printable {
var printed: String { "null" }
var printed: String {
"null"
}
}

extension EnumValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension ListValue: Printable {
Expand DownExpand Up@@ -183,27 +199,37 @@ extension ObjectValue: Printable {
}

extension ObjectField: Printable {
var printed: String { name + ": " + value.printed }
var printed: String {
name + ": " + value.printed
}
}

// MARK: - Directive

extension Directive: Printable {
var printed: String { "@" + name + wrap("(", join(arguments, ", "), ")") }
var printed: String {
"@" + name + wrap("(", join(arguments, ", "), ")")
}
}

// MARK: - Type

extension NamedType: Printable {
var printed: String { name.printed }
var printed: String {
name.printed
}
}

extension ListType: Printable {
var printed: String { "[" + type.printed + "]" }
var printed: String {
"[" + type.printed + "]"
}
}

extension NonNullType: Printable {
var printed: String { type.printed + "!" }
var printed: String {
type.printed + "!"
}
}

// MARK: - Type System Definitions
Expand All@@ -216,7 +242,9 @@ extension SchemaDefinition: Printable {
}

extension OperationTypeDefinition: Printable {
var printed: String { operation.rawValue + ": " + type }
var printed: String {
operation.rawValue + ": " + type
}
}

extension ScalarTypeDefinition: Printable {
Expand DownExpand Up@@ -423,7 +451,9 @@ private func + (lhs: Printable, rhs: String) -> String {
}

extension String: Printable {
fileprivate var printed: String { self }
fileprivate var printed: String {
self
}
}

private extension Node {
Expand Down
9 changes: 1 addition & 8 deletions Sources/GraphQL/Language/Source.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@
* Note that since Source parsing is heavily UTF8 dependent, the body
* is converted into contiguous UTF8 bytes if necessary for optimal performance.
*/
public struct Source: Hashable, Sendable {
public struct Source: Hashable, Equatable, Sendable {
public let body: String
public let name: String

Expand All@@ -19,10 +19,3 @@ public struct Source: Hashable, Sendable {
self.name = name
}
}

extension Source: Equatable {
public static func == (lhs: Source, rhs: Source) -> Bool {
return lhs.body == rhs.body &&
lhs.name == rhs.name
}
}
2 changes: 1 addition & 1 deletion Sources/GraphQL/SwiftUtilities/IsNullish.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ extension Optional: OptionalProtocol {
}
}

/**
/*
* Returns true if a value is null, or nil.
*/
// func isNullish(_ value: Any?) -> Bool {
Expand Down
9 changes: 4 additions & 5 deletions Sources/GraphQL/Type/Definition.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -190,17 +190,17 @@ public final class GraphQLScalarType: Sendable {
self.parseLiteral = parseLiteral ?? defaultParseLiteral
}

// Serializes an internal value to include in a response.
/// Serializes an internal value to include in a response.
public func serialize(value: Any) throws -> Map {
return try serialize(value)
}

// Parses an externally provided value to use as an input.
/// Parses an externally provided value to use as an input.
public func parseValue(value: Map) throws -> Map {
return try parseValue(value)
}

// Parses an externally provided literal value to use as an input.
/// Parses an externally provided literal value to use as an input.
public func parseLiteral(valueAST: Value) throws -> Map {
return try parseLiteral(valueAST)
}
Expand DownExpand Up@@ -586,8 +586,7 @@ public final class GraphQLField: @unchecked Sendable {
self.astNode = astNode

_resolve = { source, args, context, info in
let result = try resolve(source, args, context, info)
return result
try resolve(source, args, context, info)
}
_subscribe = nil
}
Expand Down
5 changes: 2 additions & 3 deletions Sources/GraphQL/Type/Introspection.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -327,8 +327,7 @@ let __Type: GraphQLObjectType = {
}

let fieldMap = try type.getFields()
let fields = Array(fieldMap.values).sorted(by: { $0.name < $1.name })
return fields
return Array(fieldMap.values).sorted(by: { $0.name < $1.name })
}
),
"ofType": GraphQLField(type: __Type),
Expand DownExpand Up@@ -483,7 +482,7 @@ let __TypeKind = try! GraphQLEnumType(
]
)

/**
/*
* Note that these are GraphQLFieldDefinition and not GraphQLField,
* so the format for args is different.
*/
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Benchmarks/Benchmarks/StarWarsData.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This defines a basic set of data for our Star Wars Schema.
*
* This data is hard coded for the sake of the demo, but you could imagine
Expand Down
4 changes: 2 additions & 2 deletions Benchmarks/Benchmarks/StarWarsSchema.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This is designed to be an end-to-end test, demonstrating
* the full GraphQL stack.
*
Expand All@@ -11,7 +11,7 @@ import GraphQL
* Wars trilogy.
*/

/**
/*
* Using our shorthand to describe type systems, the type system for our
* Star Wars example is:
*
Expand Down
4 changes: 1 addition & 3 deletions Sources/GraphQL/Error/SyntaxError.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,16 +7,14 @@ import Foundation
func syntaxError(source: Source, position: Int, description: String) -> GraphQLError {
let location = getLocation(source: source, position: position)

let error = GraphQLError(
return GraphQLError(
message:
"Syntax Error \(source.name) (\(location.line):\(location.column)) " +
description + "\n\n" +
highlightSourceAtLocation(source: source, location: location),
source: source,
positions: [position]
)

return error
}

/**
Expand Down
27 changes: 11 additions & 16 deletions Sources/GraphQL/Execution/Execute.swift
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import Dispatch
import OrderedCollections

/**
/*
* Terminology
*
* "Definitions" are the generic name for top-level statements in the document.
Expand DownExpand Up@@ -632,8 +632,8 @@ public func resolveField(
)
}

// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
// function. Returns the result of `resolve` or the abrupt-return Error object.
/// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
/// function. Returns the result of `resolve` or the abrupt-return Error object.
func resolveOrError(
resolve: GraphQLFieldResolve,
source: any Sendable,
Expand All@@ -649,8 +649,8 @@ func resolveOrError(
}
}

// This is a small wrapper around completeValue which detects and logs errors
// in the execution context.
/// This is a small wrapper around completeValue which detects and logs errors
/// in the execution context.
func completeValueCatchingError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -693,8 +693,8 @@ func completeValueCatchingError(
}
}

// This is a small wrapper around completeValue which annotates errors with
// location information.
/// This is a small wrapper around completeValue which annotates errors with
/// location information.
func completeValueWithLocatedError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -886,11 +886,9 @@ func completeLeafValue(returnType: GraphQLLeafType, result: (any Sendable)?) thr
guard let result = result else {
return .null
}
let serializedResult = try returnType.serialize(value: result)
return try returnType.serialize(value: result)

// Do not check for serialization to null here. Some scalars may model literals as `Map.null`.

return serializedResult
}

/**
Expand DownExpand Up@@ -1048,16 +1046,13 @@ func defaultResolve(
}

if let subscriptable = source as? KeySubscriptable {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? [String: any Sendable] {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? OrderedDictionary<String, any Sendable> {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}

let mirror = Mirror(reflecting: source)
Expand Down
2 changes: 1 addition & 1 deletion Sources/GraphQL/GraphQLRequest.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ public struct GraphQLRequest: Equatable, Codable, Sendable {
self.variables = variables
}

// To handle decoding with a default of variables = []
/// To handle decoding with a default of variables = []
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
query = try container.decode(String.self, forKey: .query)
Expand Down
6 changes: 2 additions & 4 deletions Sources/GraphQL/Language/Lexer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
value: nil
)

let lexer = Lexer(
return Lexer(
source: source,
noLocation: noLocation,
lastToken: startOfFileToken,
Expand All@@ -25,8 +25,6 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
lineStart: 0,
advance: advanceLexer
)

return lexer
}

func advanceLexer(lexer: Lexer) throws -> Token {
Expand DownExpand Up@@ -866,7 +864,7 @@ func readBlockString(
)
}

/**
/*
* blockStringValue(rawValue: String)
*
* Transcription of the algorithm specified in the [spec](http://spec.graphql.org/draft/#BlockStringValue())
Expand Down
7 changes: 3 additions & 4 deletions Sources/GraphQL/Language/Parser.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,8 +22,7 @@ public func parse(
) throws -> Document {
do {
let lexer = createLexer(source: source, noLocation: noLocation)
let document = try parseDocument(lexer: lexer)
return document
return try parseDocument(lexer: lexer)
} catch let error as GraphQLError {
throw error
}
Expand DownExpand Up@@ -111,7 +110,7 @@ func peekDescription(lexer: Lexer) -> Bool {
return peek(lexer: lexer, kind: .string) || peek(lexer: lexer, kind: .blockstring)
}

/**
/*
* Description is optional StringValue
*/

Expand DownExpand Up@@ -586,7 +585,7 @@ func parseObjectField(lexer: Lexer, isConst: Bool) throws -> ObjectField {
)
}

/**
/*
* parseStringLiteral
*/

Expand Down
60 changes: 45 additions & 15 deletions Sources/GraphQL/Language/Printer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,11 +13,15 @@ private protocol Printable {
private let MAX_LINE_LENGTH = 80

extension Name: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension Variable: Printable {
var printed: String { "$" + name }
var printed: String {
"$" + name
}
}

// MARK: - Document
Expand DownExpand Up@@ -108,7 +112,9 @@ extension Argument: Printable {
// MARK: - Fragments

extension FragmentSpread: Printable {
var printed: String { "..." + name + wrap(" ", join(directives, " ")) }
var printed: String {
"..." + name + wrap(" ", join(directives, " "))
}
}

extension InlineFragment: Printable {
Expand All@@ -132,11 +138,15 @@ extension FragmentDefinition: Printable {
// MARK: - Value

extension IntValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension FloatValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension StringValue: Printable {
Expand All@@ -146,15 +156,21 @@ extension StringValue: Printable {
}

extension BooleanValue: Printable {
var printed: String { value ? "true" : "false" }
var printed: String {
value ? "true" : "false"
}
}

extension NullValue: Printable {
var printed: String { "null" }
var printed: String {
"null"
}
}

extension EnumValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension ListValue: Printable {
Expand DownExpand Up@@ -183,27 +199,37 @@ extension ObjectValue: Printable {
}

extension ObjectField: Printable {
var printed: String { name + ": " + value.printed }
var printed: String {
name + ": " + value.printed
}
}

// MARK: - Directive

extension Directive: Printable {
var printed: String { "@" + name + wrap("(", join(arguments, ", "), ")") }
var printed: String {
"@" + name + wrap("(", join(arguments, ", "), ")")
}
}

// MARK: - Type

extension NamedType: Printable {
var printed: String { name.printed }
var printed: String {
name.printed
}
}

extension ListType: Printable {
var printed: String { "[" + type.printed + "]" }
var printed: String {
"[" + type.printed + "]"
}
}

extension NonNullType: Printable {
var printed: String { type.printed + "!" }
var printed: String {
type.printed + "!"
}
}

// MARK: - Type System Definitions
Expand All@@ -216,7 +242,9 @@ extension SchemaDefinition: Printable {
}

extension OperationTypeDefinition: Printable {
var printed: String { operation.rawValue + ": " + type }
var printed: String {
operation.rawValue + ": " + type
}
}

extension ScalarTypeDefinition: Printable {
Expand DownExpand Up@@ -423,7 +451,9 @@ private func + (lhs: Printable, rhs: String) -> String {
}

extension String: Printable {
fileprivate var printed: String { self }
fileprivate var printed: String {
self
}
}

private extension Node {
Expand Down
9 changes: 1 addition & 8 deletions Sources/GraphQL/Language/Source.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@
* Note that since Source parsing is heavily UTF8 dependent, the body
* is converted into contiguous UTF8 bytes if necessary for optimal performance.
*/
public struct Source: Hashable, Sendable {
public struct Source: Hashable, Equatable, Sendable {
public let body: String
public let name: String

Expand All@@ -19,10 +19,3 @@ public struct Source: Hashable, Sendable {
self.name = name
}
}

extension Source: Equatable {
public static func == (lhs: Source, rhs: Source) -> Bool {
return lhs.body == rhs.body &&
lhs.name == rhs.name
}
}
2 changes: 1 addition & 1 deletion Sources/GraphQL/SwiftUtilities/IsNullish.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ extension Optional: OptionalProtocol {
}
}

/**
/*
* Returns true if a value is null, or nil.
*/
// func isNullish(_ value: Any?) -> Bool {
Expand Down
9 changes: 4 additions & 5 deletions Sources/GraphQL/Type/Definition.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -190,17 +190,17 @@ public final class GraphQLScalarType: Sendable {
self.parseLiteral = parseLiteral ?? defaultParseLiteral
}

// Serializes an internal value to include in a response.
/// Serializes an internal value to include in a response.
public func serialize(value: Any) throws -> Map {
return try serialize(value)
}

// Parses an externally provided value to use as an input.
/// Parses an externally provided value to use as an input.
public func parseValue(value: Map) throws -> Map {
return try parseValue(value)
}

// Parses an externally provided literal value to use as an input.
/// Parses an externally provided literal value to use as an input.
public func parseLiteral(valueAST: Value) throws -> Map {
return try parseLiteral(valueAST)
}
Expand DownExpand Up@@ -586,8 +586,7 @@ public final class GraphQLField: @unchecked Sendable {
self.astNode = astNode

_resolve = { source, args, context, info in
let result = try resolve(source, args, context, info)
return result
try resolve(source, args, context, info)
}
_subscribe = nil
}
Expand Down
5 changes: 2 additions & 3 deletions Sources/GraphQL/Type/Introspection.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -327,8 +327,7 @@ let __Type: GraphQLObjectType = {
}

let fieldMap = try type.getFields()
let fields = Array(fieldMap.values).sorted(by: { $0.name < $1.name })
return fields
return Array(fieldMap.values).sorted(by: { $0.name < $1.name })
}
),
"ofType": GraphQLField(type: __Type),
Expand DownExpand Up@@ -483,7 +482,7 @@ let __TypeKind = try! GraphQLEnumType(
]
)

/**
/*
* Note that these are GraphQLFieldDefinition and not GraphQLField,
* so the format for args is different.
*/
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Benchmarks/Benchmarks/StarWarsData.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This defines a basic set of data for our Star Wars Schema.
*
* This data is hard coded for the sake of the demo, but you could imagine
Expand Down
4 changes: 2 additions & 2 deletions Benchmarks/Benchmarks/StarWarsSchema.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This is designed to be an end-to-end test, demonstrating
* the full GraphQL stack.
*
Expand All@@ -11,7 +11,7 @@ import GraphQL
* Wars trilogy.
*/

/**
/*
* Using our shorthand to describe type systems, the type system for our
* Star Wars example is:
*
Expand Down
4 changes: 1 addition & 3 deletions Sources/GraphQL/Error/SyntaxError.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,16 +7,14 @@ import Foundation
func syntaxError(source: Source, position: Int, description: String) -> GraphQLError {
let location = getLocation(source: source, position: position)

let error = GraphQLError(
return GraphQLError(
message:
"Syntax Error \(source.name) (\(location.line):\(location.column)) " +
description + "\n\n" +
highlightSourceAtLocation(source: source, location: location),
source: source,
positions: [position]
)

return error
}

/**
Expand Down
27 changes: 11 additions & 16 deletions Sources/GraphQL/Execution/Execute.swift
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import Dispatch
import OrderedCollections

/**
/*
* Terminology
*
* "Definitions" are the generic name for top-level statements in the document.
Expand DownExpand Up@@ -632,8 +632,8 @@ public func resolveField(
)
}

// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
// function. Returns the result of `resolve` or the abrupt-return Error object.
/// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
/// function. Returns the result of `resolve` or the abrupt-return Error object.
func resolveOrError(
resolve: GraphQLFieldResolve,
source: any Sendable,
Expand All@@ -649,8 +649,8 @@ func resolveOrError(
}
}

// This is a small wrapper around completeValue which detects and logs errors
// in the execution context.
/// This is a small wrapper around completeValue which detects and logs errors
/// in the execution context.
func completeValueCatchingError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -693,8 +693,8 @@ func completeValueCatchingError(
}
}

// This is a small wrapper around completeValue which annotates errors with
// location information.
/// This is a small wrapper around completeValue which annotates errors with
/// location information.
func completeValueWithLocatedError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -886,11 +886,9 @@ func completeLeafValue(returnType: GraphQLLeafType, result: (any Sendable)?) thr
guard let result = result else {
return .null
}
let serializedResult = try returnType.serialize(value: result)
return try returnType.serialize(value: result)

// Do not check for serialization to null here. Some scalars may model literals as `Map.null`.

return serializedResult
}

/**
Expand DownExpand Up@@ -1048,16 +1046,13 @@ func defaultResolve(
}

if let subscriptable = source as? KeySubscriptable {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? [String: any Sendable] {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? OrderedDictionary<String, any Sendable> {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}

let mirror = Mirror(reflecting: source)
Expand Down
2 changes: 1 addition & 1 deletion Sources/GraphQL/GraphQLRequest.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ public struct GraphQLRequest: Equatable, Codable, Sendable {
self.variables = variables
}

// To handle decoding with a default of variables = []
/// To handle decoding with a default of variables = []
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
query = try container.decode(String.self, forKey: .query)
Expand Down
6 changes: 2 additions & 4 deletions Sources/GraphQL/Language/Lexer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
value: nil
)

let lexer = Lexer(
return Lexer(
source: source,
noLocation: noLocation,
lastToken: startOfFileToken,
Expand All@@ -25,8 +25,6 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
lineStart: 0,
advance: advanceLexer
)

return lexer
}

func advanceLexer(lexer: Lexer) throws -> Token {
Expand DownExpand Up@@ -866,7 +864,7 @@ func readBlockString(
)
}

/**
/*
* blockStringValue(rawValue: String)
*
* Transcription of the algorithm specified in the [spec](http://spec.graphql.org/draft/#BlockStringValue())
Expand Down
7 changes: 3 additions & 4 deletions Sources/GraphQL/Language/Parser.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,8 +22,7 @@ public func parse(
) throws -> Document {
do {
let lexer = createLexer(source: source, noLocation: noLocation)
let document = try parseDocument(lexer: lexer)
return document
return try parseDocument(lexer: lexer)
} catch let error as GraphQLError {
throw error
}
Expand DownExpand Up@@ -111,7 +110,7 @@ func peekDescription(lexer: Lexer) -> Bool {
return peek(lexer: lexer, kind: .string) || peek(lexer: lexer, kind: .blockstring)
}

/**
/*
* Description is optional StringValue
*/

Expand DownExpand Up@@ -586,7 +585,7 @@ func parseObjectField(lexer: Lexer, isConst: Bool) throws -> ObjectField {
)
}

/**
/*
* parseStringLiteral
*/

Expand Down
60 changes: 45 additions & 15 deletions Sources/GraphQL/Language/Printer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,11 +13,15 @@ private protocol Printable {
private let MAX_LINE_LENGTH = 80

extension Name: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension Variable: Printable {
var printed: String { "$" + name }
var printed: String {
"$" + name
}
}

// MARK: - Document
Expand DownExpand Up@@ -108,7 +112,9 @@ extension Argument: Printable {
// MARK: - Fragments

extension FragmentSpread: Printable {
var printed: String { "..." + name + wrap(" ", join(directives, " ")) }
var printed: String {
"..." + name + wrap(" ", join(directives, " "))
}
}

extension InlineFragment: Printable {
Expand All@@ -132,11 +138,15 @@ extension FragmentDefinition: Printable {
// MARK: - Value

extension IntValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension FloatValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension StringValue: Printable {
Expand All@@ -146,15 +156,21 @@ extension StringValue: Printable {
}

extension BooleanValue: Printable {
var printed: String { value ? "true" : "false" }
var printed: String {
value ? "true" : "false"
}
}

extension NullValue: Printable {
var printed: String { "null" }
var printed: String {
"null"
}
}

extension EnumValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension ListValue: Printable {
Expand DownExpand Up@@ -183,27 +199,37 @@ extension ObjectValue: Printable {
}

extension ObjectField: Printable {
var printed: String { name + ": " + value.printed }
var printed: String {
name + ": " + value.printed
}
}

// MARK: - Directive

extension Directive: Printable {
var printed: String { "@" + name + wrap("(", join(arguments, ", "), ")") }
var printed: String {
"@" + name + wrap("(", join(arguments, ", "), ")")
}
}

// MARK: - Type

extension NamedType: Printable {
var printed: String { name.printed }
var printed: String {
name.printed
}
}

extension ListType: Printable {
var printed: String { "[" + type.printed + "]" }
var printed: String {
"[" + type.printed + "]"
}
}

extension NonNullType: Printable {
var printed: String { type.printed + "!" }
var printed: String {
type.printed + "!"
}
}

// MARK: - Type System Definitions
Expand All@@ -216,7 +242,9 @@ extension SchemaDefinition: Printable {
}

extension OperationTypeDefinition: Printable {
var printed: String { operation.rawValue + ": " + type }
var printed: String {
operation.rawValue + ": " + type
}
}

extension ScalarTypeDefinition: Printable {
Expand DownExpand Up@@ -423,7 +451,9 @@ private func + (lhs: Printable, rhs: String) -> String {
}

extension String: Printable {
fileprivate var printed: String { self }
fileprivate var printed: String {
self
}
}

private extension Node {
Expand Down
9 changes: 1 addition & 8 deletions Sources/GraphQL/Language/Source.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@
* Note that since Source parsing is heavily UTF8 dependent, the body
* is converted into contiguous UTF8 bytes if necessary for optimal performance.
*/
public struct Source: Hashable, Sendable {
public struct Source: Hashable, Equatable, Sendable {
public let body: String
public let name: String

Expand All@@ -19,10 +19,3 @@ public struct Source: Hashable, Sendable {
self.name = name
}
}

extension Source: Equatable {
public static func == (lhs: Source, rhs: Source) -> Bool {
return lhs.body == rhs.body &&
lhs.name == rhs.name
}
}
2 changes: 1 addition & 1 deletion Sources/GraphQL/SwiftUtilities/IsNullish.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ extension Optional: OptionalProtocol {
}
}

/**
/*
* Returns true if a value is null, or nil.
*/
// func isNullish(_ value: Any?) -> Bool {
Expand Down
9 changes: 4 additions & 5 deletions Sources/GraphQL/Type/Definition.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -190,17 +190,17 @@ public final class GraphQLScalarType: Sendable {
self.parseLiteral = parseLiteral ?? defaultParseLiteral
}

// Serializes an internal value to include in a response.
/// Serializes an internal value to include in a response.
public func serialize(value: Any) throws -> Map {
return try serialize(value)
}

// Parses an externally provided value to use as an input.
/// Parses an externally provided value to use as an input.
public func parseValue(value: Map) throws -> Map {
return try parseValue(value)
}

// Parses an externally provided literal value to use as an input.
/// Parses an externally provided literal value to use as an input.
public func parseLiteral(valueAST: Value) throws -> Map {
return try parseLiteral(valueAST)
}
Expand DownExpand Up@@ -586,8 +586,7 @@ public final class GraphQLField: @unchecked Sendable {
self.astNode = astNode

_resolve = { source, args, context, info in
let result = try resolve(source, args, context, info)
return result
try resolve(source, args, context, info)
}
_subscribe = nil
}
Expand Down
5 changes: 2 additions & 3 deletions Sources/GraphQL/Type/Introspection.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -327,8 +327,7 @@ let __Type: GraphQLObjectType = {
}

let fieldMap = try type.getFields()
let fields = Array(fieldMap.values).sorted(by: { $0.name < $1.name })
return fields
return Array(fieldMap.values).sorted(by: { $0.name < $1.name })
}
),
"ofType": GraphQLField(type: __Type),
Expand DownExpand Up@@ -483,7 +482,7 @@ let __TypeKind = try! GraphQLEnumType(
]
)

/**
/*
* Note that these are GraphQLFieldDefinition and not GraphQLField,
* so the format for args is different.
*/
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Benchmarks/Benchmarks/StarWarsData.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This defines a basic set of data for our Star Wars Schema.
*
* This data is hard coded for the sake of the demo, but you could imagine
Expand Down
4 changes: 2 additions & 2 deletions Benchmarks/Benchmarks/StarWarsSchema.swift
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import GraphQL

/**
/*
* This is designed to be an end-to-end test, demonstrating
* the full GraphQL stack.
*
Expand All@@ -11,7 +11,7 @@ import GraphQL
* Wars trilogy.
*/

/**
/*
* Using our shorthand to describe type systems, the type system for our
* Star Wars example is:
*
Expand Down
4 changes: 1 addition & 3 deletions Sources/GraphQL/Error/SyntaxError.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,16 +7,14 @@ import Foundation
func syntaxError(source: Source, position: Int, description: String) -> GraphQLError {
let location = getLocation(source: source, position: position)

let error = GraphQLError(
return GraphQLError(
message:
"Syntax Error \(source.name) (\(location.line):\(location.column)) " +
description + "\n\n" +
highlightSourceAtLocation(source: source, location: location),
source: source,
positions: [position]
)

return error
}

/**
Expand Down
27 changes: 11 additions & 16 deletions Sources/GraphQL/Execution/Execute.swift
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import Dispatch
import OrderedCollections

/**
/*
* Terminology
*
* "Definitions" are the generic name for top-level statements in the document.
Expand DownExpand Up@@ -632,8 +632,8 @@ public func resolveField(
)
}

// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
// function. Returns the result of `resolve` or the abrupt-return Error object.
/// Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
/// function. Returns the result of `resolve` or the abrupt-return Error object.
func resolveOrError(
resolve: GraphQLFieldResolve,
source: any Sendable,
Expand All@@ -649,8 +649,8 @@ func resolveOrError(
}
}

// This is a small wrapper around completeValue which detects and logs errors
// in the execution context.
/// This is a small wrapper around completeValue which detects and logs errors
/// in the execution context.
func completeValueCatchingError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -693,8 +693,8 @@ func completeValueCatchingError(
}
}

// This is a small wrapper around completeValue which annotates errors with
// location information.
/// This is a small wrapper around completeValue which annotates errors with
/// location information.
func completeValueWithLocatedError(
exeContext: ExecutionContext,
returnType: GraphQLType,
Expand DownExpand Up@@ -886,11 +886,9 @@ func completeLeafValue(returnType: GraphQLLeafType, result: (any Sendable)?) thr
guard let result = result else {
return .null
}
let serializedResult = try returnType.serialize(value: result)
return try returnType.serialize(value: result)

// Do not check for serialization to null here. Some scalars may model literals as `Map.null`.

return serializedResult
}

/**
Expand DownExpand Up@@ -1048,16 +1046,13 @@ func defaultResolve(
}

if let subscriptable = source as? KeySubscriptable {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? [String: any Sendable] {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}
if let subscriptable = source as? OrderedDictionary<String, any Sendable> {
let value = subscriptable[info.fieldName]
return value
return subscriptable[info.fieldName]
}

let mirror = Mirror(reflecting: source)
Expand Down
2 changes: 1 addition & 1 deletion Sources/GraphQL/GraphQLRequest.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ public struct GraphQLRequest: Equatable, Codable, Sendable {
self.variables = variables
}

// To handle decoding with a default of variables = []
/// To handle decoding with a default of variables = []
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
query = try container.decode(String.self, forKey: .query)
Expand Down
6 changes: 2 additions & 4 deletions Sources/GraphQL/Language/Lexer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
value: nil
)

let lexer = Lexer(
return Lexer(
source: source,
noLocation: noLocation,
lastToken: startOfFileToken,
Expand All@@ -25,8 +25,6 @@ func createLexer(source: Source, noLocation: Bool = false) -> Lexer {
lineStart: 0,
advance: advanceLexer
)

return lexer
}

func advanceLexer(lexer: Lexer) throws -> Token {
Expand DownExpand Up@@ -866,7 +864,7 @@ func readBlockString(
)
}

/**
/*
* blockStringValue(rawValue: String)
*
* Transcription of the algorithm specified in the [spec](http://spec.graphql.org/draft/#BlockStringValue())
Expand Down
7 changes: 3 additions & 4 deletions Sources/GraphQL/Language/Parser.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,8 +22,7 @@ public func parse(
) throws -> Document {
do {
let lexer = createLexer(source: source, noLocation: noLocation)
let document = try parseDocument(lexer: lexer)
return document
return try parseDocument(lexer: lexer)
} catch let error as GraphQLError {
throw error
}
Expand DownExpand Up@@ -111,7 +110,7 @@ func peekDescription(lexer: Lexer) -> Bool {
return peek(lexer: lexer, kind: .string) || peek(lexer: lexer, kind: .blockstring)
}

/**
/*
* Description is optional StringValue
*/

Expand DownExpand Up@@ -586,7 +585,7 @@ func parseObjectField(lexer: Lexer, isConst: Bool) throws -> ObjectField {
)
}

/**
/*
* parseStringLiteral
*/

Expand Down
60 changes: 45 additions & 15 deletions Sources/GraphQL/Language/Printer.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,11 +13,15 @@ private protocol Printable {
private let MAX_LINE_LENGTH = 80

extension Name: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension Variable: Printable {
var printed: String { "$" + name }
var printed: String {
"$" + name
}
}

// MARK: - Document
Expand DownExpand Up@@ -108,7 +112,9 @@ extension Argument: Printable {
// MARK: - Fragments

extension FragmentSpread: Printable {
var printed: String { "..." + name + wrap(" ", join(directives, " ")) }
var printed: String {
"..." + name + wrap(" ", join(directives, " "))
}
}

extension InlineFragment: Printable {
Expand All@@ -132,11 +138,15 @@ extension FragmentDefinition: Printable {
// MARK: - Value

extension IntValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension FloatValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension StringValue: Printable {
Expand All@@ -146,15 +156,21 @@ extension StringValue: Printable {
}

extension BooleanValue: Printable {
var printed: String { value ? "true" : "false" }
var printed: String {
value ? "true" : "false"
}
}

extension NullValue: Printable {
var printed: String { "null" }
var printed: String {
"null"
}
}

extension EnumValue: Printable {
var printed: String { value }
var printed: String {
value
}
}

extension ListValue: Printable {
Expand DownExpand Up@@ -183,27 +199,37 @@ extension ObjectValue: Printable {
}

extension ObjectField: Printable {
var printed: String { name + ": " + value.printed }
var printed: String {
name + ": " + value.printed
}
}

// MARK: - Directive

extension Directive: Printable {
var printed: String { "@" + name + wrap("(", join(arguments, ", "), ")") }
var printed: String {
"@" + name + wrap("(", join(arguments, ", "), ")")
}
}

// MARK: - Type

extension NamedType: Printable {
var printed: String { name.printed }
var printed: String {
name.printed
}
}

extension ListType: Printable {
var printed: String { "[" + type.printed + "]" }
var printed: String {
"[" + type.printed + "]"
}
}

extension NonNullType: Printable {
var printed: String { type.printed + "!" }
var printed: String {
type.printed + "!"
}
}

// MARK: - Type System Definitions
Expand All@@ -216,7 +242,9 @@ extension SchemaDefinition: Printable {
}

extension OperationTypeDefinition: Printable {
var printed: String { operation.rawValue + ": " + type }
var printed: String {
operation.rawValue + ": " + type
}
}

extension ScalarTypeDefinition: Printable {
Expand DownExpand Up@@ -423,7 +451,9 @@ private func + (lhs: Printable, rhs: String) -> String {
}

extension String: Printable {
fileprivate var printed: String { self }
fileprivate var printed: String {
self
}
}

private extension Node {
Expand Down
9 changes: 1 addition & 8 deletions Sources/GraphQL/Language/Source.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@
* Note that since Source parsing is heavily UTF8 dependent, the body
* is converted into contiguous UTF8 bytes if necessary for optimal performance.
*/
public struct Source: Hashable, Sendable {
public struct Source: Hashable, Equatable, Sendable {
public let body: String
public let name: String

Expand All@@ -19,10 +19,3 @@ public struct Source: Hashable, Sendable {
self.name = name
}
}

extension Source: Equatable {
public static func == (lhs: Source, rhs: Source) -> Bool {
return lhs.body == rhs.body &&
lhs.name == rhs.name
}
}
2 changes: 1 addition & 1 deletion Sources/GraphQL/SwiftUtilities/IsNullish.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ extension Optional: OptionalProtocol {
}
}

/**
/*
* Returns true if a value is null, or nil.
*/
// func isNullish(_ value: Any?) -> Bool {
Expand Down
9 changes: 4 additions & 5 deletions Sources/GraphQL/Type/Definition.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -190,17 +190,17 @@ public final class GraphQLScalarType: Sendable {
self.parseLiteral = parseLiteral ?? defaultParseLiteral
}

// Serializes an internal value to include in a response.
/// Serializes an internal value to include in a response.
public func serialize(value: Any) throws -> Map {
return try serialize(value)
}

// Parses an externally provided value to use as an input.
/// Parses an externally provided value to use as an input.
public func parseValue(value: Map) throws -> Map {
return try parseValue(value)
}

// Parses an externally provided literal value to use as an input.
/// Parses an externally provided literal value to use as an input.
public func parseLiteral(valueAST: Value) throws -> Map {
return try parseLiteral(valueAST)
}
Expand DownExpand Up@@ -586,8 +586,7 @@ public final class GraphQLField: @unchecked Sendable {
self.astNode = astNode

_resolve = { source, args, context, info in
let result = try resolve(source, args, context, info)
return result
try resolve(source, args, context, info)
}
_subscribe = nil
}
Expand Down
5 changes: 2 additions & 3 deletions Sources/GraphQL/Type/Introspection.swift
Original file line numberDiff line numberDiff line change
Expand Up@@ -327,8 +327,7 @@ let __Type: GraphQLObjectType = {
}

let fieldMap = try type.getFields()
let fields = Array(fieldMap.values).sorted(by: { $0.name < $1.name })
return fields
return Array(fieldMap.values).sorted(by: { $0.name < $1.name })
}
),
"ofType": GraphQLField(type: __Type),
Expand DownExpand Up@@ -483,7 +482,7 @@ let __TypeKind = try! GraphQLEnumType(
]
)

/**
/*
* Note that these are GraphQLFieldDefinition and not GraphQLField,
* so the format for args is different.
*/
Expand Down
Loading