node package manager
Don’t reinvent the wheel. Reuse code within your team. Create a free org »

gql-merge

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