• This repository has been archived on 20/Jul/2023
  • Stars
    star
    133
  • Rank 272,600 (Top 6 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created almost 4 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A GraphQL query builder for TypeScript. Avoid the pain of codegen.

Warning: This library will not be recieving updates any time soon.

🙏 Thank you to all contributors. I am not interested in maintaining this right now but please feel free to fork and take inspiration from!

TQL

tql is a TypeScript GraphQL query builder.

  • 🔒 Fully Type-safe - Operation results and variables are fully type-safe thanks to TypeScript's advanced type-system.
  • 🔌 Backendless: - Integrate with any GraphQL client to execute queries.
  • 🔮 Automatic Variables: - Variable definitions are automatically derived based on usage.
  • 📝 Inline Documentation: JSDoc comments provide descriptions and deprecation warnings for fields directly in your editor.
  • Single Dependency: graphql-js is our single runtime (peer) dependency.

Try it Out

Try out our pre-compiled Star Wars GraphQL SDK on CodeSandbox!

Installation

  1. npm install @timkendall/tql@beta

  2. Generate an SDK with npx @timkendall/tql-gen <schema> -o sdk.ts

<schema> can be a path to local file or an http endpoint url.

Usage

Import selector functions to start defining queries 🎉

import { useQuery } from '@apollo/client'

// SDK generated in previous setup
import { character, query, $ } from './starwars'

// define reusable selections
const CHARACTER = character(t => [
  t.id(),
  t.name(),
  t.appearsIn(),
])

const QUERY = query((t) => [
  t.reviews({ episode: Episode.EMPIRE }, (t) => [
    t.stars(),
    t.commentary(),
  ]),

  t.human({ id: $('id') }, (t) => [
    t.__typename(),
    t.id(),
    t.name(),
    t.appearsIn(),
    t.homePlanet(),

    // deprecated field should be properly picked-up by your editor
    t.mass(),

    t.friends((t) => <const>[
      t.__typename(),
      
      ...CHARACTER,
      // or
      CHARACTER.toInlineFragment(),

      t.on("Human", (t) => [t.homePlanet()]),
      t.on("Droid", (t) => [t.primaryFunction()]),
    ]),

    t.starships((t) => [t.id(), t.name()]),
  ]),
]).toQuery({ name: 'Example' })

// type-safe result and variables 👍
const { data } = useQuery(QUERY, { variables: { id: '1011' }})

Inspiration

I was inspired by the features and DSL's of graphql-nexus, graphql_ppx, gqless, and caliban.

License

MIT

More Repositories

1

clean-code

Notes on "Clean Code" by the venerable Robert C. Martin.
16
star
2

crynamo

DynamoDB client for Crystal.
Crystal
14
star
3

schedules

Beautiful education planner for students and universities.
JavaScript
8
star
4

Selectable

Selectable is a jQuery editable list for webapps.
JavaScript
7
star
5

webworker-protobuffs

Experiments with communicating with Web Workers using just Transferables.
TypeScript
5
star
6

system

Tiny async utility for calling system commands.
JavaScript
5
star
7

mss

MSS "Movie Script Scrapper" - A simple scrapper to retrieve scripts by genre from IMSDB.
JavaScript
4
star
8

talkkie

A movie script genre classifier.
JavaScript
4
star
9

hochuli

Opinionated JavaScript library for handling feature flags.
JavaScript
3
star
10

spinner

A simple demo using an iPhone's gyroscope to control a 3D rendering in the browser.
JavaScript
3
star
11

parcel-plugin-inline-worker

Natively support Web Worker's in the Parcel bundler.
JavaScript
3
star
12

perimeter

A Node.js based surveillance system.
JavaScript
2
star
13

babel-plugin-base-path

Add first-class support for transforming relative asset paths to absolute one's.
JavaScript
1
star
14

showing.io

Display current movies in box office with Rotten Tomatoes ratings and trailers.
CSS
1
star
15

conveyor

Simple synchronous job runner.
JavaScript
1
star
16

elixir_exams

A tiny SMS service for getting final exam times.
Elixir
1
star
17

ember-perfect-text

Drop-in replacements for paragraph and heading tags that remove widows and ragging.
JavaScript
1
star
18

msc

msc - A movie script classifier.
JavaScript
1
star
19

handlebars-json

Convert Handlebars templates to a simple JSON representation.
JavaScript
1
star