Filter Schema Transform
The filterSchema
transform allows you to filter fields in specific types.
yarn add @graphql-mesh/transform-filter-schema
How to use?
Add the following configuration to your Mesh config file:
transforms:
- filterSchema:
mode: bare | wrap
filters:
- Type.!User # <-- This will remove `User` type
- Type.!{User, Post} # <-- This will remove `User` and `Post` types
- Query.!admins # <-- This will remove field `admins` from `Query` type
- Mutation.!{addUser, removeUser} # <-- This will remove fields `addUser` and `removeUser` from `Mutation` type
- User.{id, username, name, age} # <-- This will remove all fields, from User type, except `id`, `username`, `name` and `age`
- Query.user.id # <-- This will remove all args from field `user`, in Query type, except `id` only
- Query.user.!name # <-- This will remove argument `name` from field `user`, in Query type
- Query.user.{id, name} # <-- This will remove all args for field `user`, in Query type, except `id` and `name`
- Query.user.!{id, name} # <-- This will remove args `id` and `name` from field `user`, in Query type
- Query.*.id # <-- This will remove all args from all fields in Query type, except `id` only
- Query.*.!name # <-- This will remove argument `name` from all fields in Query type
- Query.*.{id, name} # <-- This will remove all args from all fields in Query type, except `id` and `name`
- Query.*.!{id, name} # <-- This will remove args `id` and `name` from all fields in Query type
Let's assume you have the following schema:
type Query {
me: User
users: [User]
user(id: ID, name: String): User
admins: [User]
}
type Mutation {
updateMyProfile(name: String, age: Int): User
addUser(username: String, name: String, age: Int): User
removeUser(id: ID): ID
}
type User {
id: ID
username: String
password: String
name: String
age: Int
ipAddress: String
}
type LooseType {
foo: String
bar: String
}
With the following Filter Schema config:
transforms:
- filterSchema:
mode: bare | wrap
filters:
- Type.!LooseType
- Query.!admins
- Mutation.!{addUser, removeUser}
- User.{username, name, age}
- Query.user.!name
It would become the following schema:
type Query {
me: User
users: [User]
user(id: ID): User
}
type Mutation {
updateMyProfile(name: String, age: Int): User
}
type User {
username: String
name: String
age: Int
}
💡
For information about "bare" and "wrap" modes, please read the dedicated section.
Config API Reference
mode
(type:String (bare | wrap)
) - Specify to apply filter-schema transforms to bare schema or by wrapping original schemafilters
(type:Array of String
, required) - Array of filter rules
Last updated on July 27, 2022