GraphQLer

0.3.2

GraphQL generator for Swift
juri/graphqler

What's New

GraphQLer 0.3.2

2023-03-19T15:02:09Z

This release contains no new features or bug fixes, it's just basic housekeeping.

  • Test compilation with Swift 5.7. Fix warnings.
  • Switch from Jazzy to DocC.

GraphQLer

Swift 5.7 License Mastodon

GraphQLer is a Swift library for generating GraphQL documents (i.e. things you can send to a server.) It follows the June 2018 spec. It does not do networking, data binding, or parsing.

It's a pure Swift library with no dependencies beyond the standard library, so it should be usable in any environment where you can use Swift.

Usage

For details about the API, see the source or docs.

GraphQLer implements a straightforward mapping from the types in GraphQL specs to Swift types. The types are the same you'll find in the spec: Document, ExecutableDefinition, Operation, Field, Selection, SelectionSet, etc. This means that it should be easy enough if you know the format, but it can be verbose. You may want to add some layers on top of it to facilitate the use of the API you need.

Using the GraphQLer types and convenience methods, you could write something like this:

import GraphQLer
let gql = Document(definitions: [
    .query([
        .field(named: "repository", arguments: ["owner": "juri", "name": "graphqler"], selections: [
            .inlineFragment(on: "Repository", selections: [
                .field(named: "defaultBranchRef", selections: [
                    .field(named: "target", selections: [
                        .inlineFragment(on: "Commit", selections: [
                            .field(named: "history", arguments: ["first": 10], selections: [
                                .field(named: "edges", selections: [
                                    .field(named: "node", selections: [
                                        .inlineFragment(on: "Commit", selections: [
                                            "committedDate",
                                            "message"
                                        ])
                                    ])
                                ])
                            ])
                        ])
                    ])
                ])
            ])
        ])
    ])
])
let str = try gql.compactString()

If you're building a lot of different GraphQL documents, it's probably a good idea to add some helpers for the things you care about. If you do it with extensions, you get autocompletion support in Xcode:

import GraphQLer

/* extensions */

let gql = Document(definitions: [
    .query([
        .repository(owner: "juri", name: "graphqler", selections: [
            .inlineFragment(.onRepository([
                .defaultBranchRef([
                    .target([
                        .inlineFragment(.onCommit([
                            .history(first: 10, selections: [
                                .edges([
                                    .node([
                                        .inlineFragment(.onCommit([
                                            .committedDate,
                                            .message,
                                            ]))
                                        ])
                                    ])
                                ])
                            ]))
                        ])
                    ])
                ]))
            ])
        ])
    ])
let str = try gql.compactString()

You can try running these examples yourself in the included Xcode playgrounds. If you open Package.swift in Xcode, you should also see the playgrounds.

Description

  • Swift Tools 5.7.0
View More Packages from this Author

Dependencies

Last updated: Thu Oct 17 2024 20:46:32 GMT-0900 (Hawaii-Aleutian Daylight Time)