$ show GraphQLSwift/GraphQL
This repository implements the GraphQL specification for Swift, providing a complete parsing, validation, and execution engine. It is a library intended to be consumed by server‑side Swift frameworks (e.g., Graphiti, graphql‑vapor) or any Swift project requiring GraphQL support. The architecture follows a layered design: a lexical analyzer and recursive‑descent parser produce an AST (Sources/GraphQL/Language/), a rich type system (Sources/GraphQL/Type/) supports all GraphQL types and directives, a validation layer (Sources/GraphQL/Validation/) implements over 20 spec‑required rules, and an execution engine (Sources/GraphQL/Execution/) resolves queries concurrently. Subscriptions are supported via Swift async sequences (Sources/GraphQL/Subscription/). The library also includes schema construction from SDL, schema printing, and a flexible Map value type for dynamic GraphQL values. In production, a client calls the top‑level `graphql()` function with a schema, a query string, and optional variables. The query is parsed, validated against the schema, and then executed field‑by‑field. Resolvers (provided by the schema) produce results that are serialized into a `GraphQLResult` with proper error handling. The library handles all GraphQL features: object types, interfaces, unions, enums, input objects, custom scalars, directives (`@deprecated`, `@specifiedBy`, `@oneOf`), and persisted queries. The test suite mirrors the reference JavaScript implementation and covers the Star Wars schema, introspection, federation, and edge cases. The codebase is well‑structured and follows best practices for Swift libraries: it uses Swift concurrency, Sendable annotations, and the `swift‑collections` package for ordered dictionaries. Several components are self‑contained and could be reused independently, such as the `Map` dynamic value type, the AST visitor infrastructure, and the printer. However, some deviations from the GraphQL spec remain (e.g., a handful of validation rules are commented out), and there is code duplication between `AnyCoder` and `MapCoder`. Force‑unwraps and some thread‑safety workarounds indicate areas that could be hardened. Overall, the library is production‑ready and actively maintained.
The LLM identified 2 files worth highlighting for reuse:
Defines the `Map` type, an ordered dictionary that serves as the universal dynamic value type for GraphQL inputs, outputs, and variables. It supports subscript access, merging, and encoding/decoding via `MapEncoder`/`MapDecoder`. This component is fully isolated (depends only on `OrderedCollections`) and can be extracted into any Swift project that needs a JSON‑like, order‑preserving value container with Codable support. The design demonstrates careful handling of spec‑required field ordering and complex serialization strategies.
Implements a generic AST visitor with `enter` and `leave` callbacks, supporting full traversal customization: skipping subtrees, editing nodes, early termination, and path tracking. The `visitInParallel` function combines multiple visitors into one pass. This component is self‑contained (only depends on the AST node types) and demonstrates a clean, functional approach to tree traversal used throughout validation, schema building, and printing. It can be repurposed for any GraphQL‑like AST or generalized to other tree structures.