What is @graphql-tools/utils?
The @graphql-tools/utils package provides a variety of utility functions to manipulate and work with GraphQL schemas. It is part of the larger GraphQL Tools ecosystem, which is designed to provide a more efficient and flexible way to work with GraphQL, especially in regards to schema handling and transformation.
What are @graphql-tools/utils's main functionalities?
Schema Merging
This feature allows you to merge multiple GraphQL schemas into one. This is particularly useful in a microservices architecture where different parts of your application might have their own schemas.
const { mergeSchemas } = require('@graphql-tools/utils');
const schema1 = /* GraphQLSchema object */;
const schema2 = /* GraphQLSchema object */;
const mergedSchema = mergeSchemas({ schemas: [schema1, schema2] });
Type Filtering
This utility helps in filtering out specific types from a GraphQL schema based on custom logic. It's useful for creating permission-based schema views.
const { filterSchema, removeTypes } = require('@graphql-tools/utils');
const schema = /* GraphQLSchema object */;
const filteredSchema = filterSchema({
schema,
typeFilter: (typeName, type) => typeName.startsWith('User')
});
Schema Printing
This function extends the basic functionality of GraphQL's printSchema to include custom directives in the output, which is essential for schemas that use them extensively.
const { printSchemaWithDirectives } = require('@graphql-tools/utils');
const schema = /* GraphQLSchema object */;
const schemaSDL = printSchemaWithDirectives(schema);
Other packages similar to @graphql-tools/utils
graphql-tools
This package is a more comprehensive set of tools that includes utilities for mocking, stitching, and merging schemas. It's broader than @graphql-tools/utils, which focuses more narrowly on utility functions.
graphql-compose
This toolkit allows you to construct GraphQL schema with an object-oriented approach. It provides utilities similar to @graphql-tools/utils but adds a layer of abstraction to build schemas using classes and methods, which some may find more intuitive.