Skip to content

Convert typescript interfaces to graphql schema

Notifications You must be signed in to change notification settings

cevek/ts2graphql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ts2graphql

This tool converts your typescript interfaces to graphql schema.

// schema.ts

import { ID, Int, Float } from 'ts2graphql';
interface Query {
    getByAuthor?(args: { id: ID }): Author;
}

interface Author {
    id: ID;
    name: string;
    books(filter: { max?: Int }): Book[];
}

type Book = PDFBook | AudioBook;

interface BookBase {
    /** The authors of this content */
    authors: Author[];
    name: string;
    publishedAt: Date;
    illustrator?: {
        __typename: 'Illustrator';
        name: string;
        email: string;
    };
}

interface PDFBook extends BookBase {
    file: string;
}

interface AudioBook extends BookBase {
    audioFile: string;
}

// index.ts

import { printSchema } from 'graphql';
import { createSchema } from 'ts2graphql';

const schema = createSchema(__dirname + '/schema.ts');
const rootValue = {}; // you should implement resolve methods
express.use(
    '/api/graphql',
    graphqlHTTP({
        schema: schema,
        rootValue: rootValue,
    })
);

console.log(printSchema(schema));

will generate schema

type AudioBook {
  audioFile: String!

  """The authors of this content"""
  authors: [Author!]!
  name: String!
  publishedAt: Date!
  illustrator: Illustrator
}

type Author {
  id: ID!
  name: String!
  books(max: Int): [Book!]!
}

union Book = PDFBook | AudioBook

scalar Date

type Illustrator {
  __typename: String!
  name: String!
  email: String!
}

type PDFBook {
  file: String!

  """The authors of this content"""
  authors: [Author!]!
  name: String!
  publishedAt: Date!
  illustrator: Illustrator
}

type Query {
  getByAuthor(id: ID!): Author
}

About

Convert typescript interfaces to graphql schema

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published