Tools for merging GraphQL documents
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
}
$ npm i -g gql-merge
$ 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
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.