Skip to content

Latest commit

 

History

History

gql-merge

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

gql-merge

standard-readme compliant npm npm npm

Tools for merging GraphQL documents

Table of Contents

Background

This repo contains tools for merging definitions into multiple GraphQL documents into one. For example, say you have these two files GraphQL files:

type Post {
  id: ID!
  content: String
}

type Query {
  postById(id: ID!): Post
}
type Author {
  id: ID!
  name: String
}

type Query {
  postsByAuthorId(id: ID!): [Post]
}

You can use the gql-merge CLI to combine these files into one:

$ gql-merge --out-file schema.graphql testdata/readme*

The resulting file would look like this:

type Post {
  id: ID!
  content: String
}

type Query {
  postById(id: ID!): Post
  postsByAuthorId(id: ID!): [Post]
}

type Author {
  id: ID!
  name: String
}

Installation

$ npm i -g gql-merge

CLI

$ gql-merge -h

  Usage: gql-merge [options] <glob ...>

  Tools for merging GraphQL documents

  Options:

    -h, --help             output usage information
    -V, --version          output the version number
    -o, --out-file <path>  Output GraphQL file, otherwise use stdout
    -v, --verbose          Enable verbose logging

  Examples:

    $ gql-merge **/*.graphql > schema.graphql
    $ gql-merge -o schema.graphql **/*.graphql
    $ gql-merge dir1/*.graphql dir2/*.graphql > schema.graphql

API

You can also import the package. The following example merges all files living in the data/types folder.

import fs from 'fs';
import path from 'path';
import { mergeStrings } from 'gql-merge';

const typesDir = path.resolve(__dirname, 'data/types');
const typeFiles = fs.readdirSync(typesDir);
const types = typeFiles.map(file => fs.readFileSync(path.join(typesDir, file), 'utf-8'));
const typeDefs = mergeStrings(types);

More detailed docs coming soon.

mergeFileGlob

mergeFilePaths

mergeStrings

mergeString

mergeAst