A tool to merge and stitch modularized GraphQL files into one schema file
- Built in Go
- No 3rd party dependency
- Fast, blasing fast
- Find
*.graphql
and*.gql
files in recursive way - Merge and stitch schema from several directories
- CLI to use in shell or script
Homebrew
$ brew install mattdamon108/tools/gqlmerge
Using go get
$ go get -u github.com/mattdamon108/gqlmerge
Building with source code
$ git clone https://github.com/mattdamon108/gqlmerge
$ cd gqlmerge
$ go install
Import gqlmerge module
import gql "github.com/mattdamon108/gqlmerge/lib"
func main(){
// ...
// " " is indent for the padding in generating schema
// in case of using as go module, just " " would be fine
//
// paths should be a relative path
schema := gql.Merge(" ", path1, path2, ...)
}
If you have a modularized GraphQL schema files, such as *.graphql
, there might be a duplicated types among them. In this case, gqlmerge
will help you to merge and stitch it into one schema.
Before
# GetMyProfile.graphql
type Query {
getMyProfile: UserResponse!
}
type UserResponse {
ok: Boolean!
error: String
user: User
}
type User {
id: ID!
email: String!
fullName: String!
# ...
}
# CheckIfExists.graphql
type Query {
checkIfExists(userId: ID!): CheckIfExistsResponse!
}
type CheckIfExistsResponse {
ok: Boolean!
error: String
user: [User]!
}
type User {
id: ID!
email: String!
fullName: String!
# ...
}
Merge & Stitch
$ gqlmerge ./schema schema.graphql
After
type Query {
getMyProfile: UserResponse!
checkIfExists(userId: ID!): CheckIfExistsResponse!
}
type UserResponse {
ok: Boolean!
error: String
user: User
}
type CheckIfExistsResponse {
ok: Boolean!
error: String
user: [User]!
}
type User {
id: ID!
email: String!
fullName: String!
# ...
}
$ gqlmerge --indent=2s [PATH ...] [OUTPUT]
// PATH : directories with schema
// OUTPUT : output file name
- additional error handling