Hoist Field Transform
The hoist field transform allows you to lift a field from one object type to a ‘parent’ root or object type.
How to use?
Given the following schema:
type Query {
users(limit: Int!, page: Int): UserSearchResult
}
type UserSearchResult {
page: Int!
results: [User!]!
}
type User {
id: ID!
}
Simple hoisting
mesh.config.ts
import {
createHoistFieldTransform,
defineConfig,
loadGraphQLHTTPSubgraph
} from '@graphql-mesh/compose-cli'
export const composeConfig = defineConfig({
subgraphs: [
{
sourceHandler: loadGraphQLHTTPSubgraph('Users', {
endpoint: 'http://localhost:4001/users'
}),
transforms: [
createHoistFieldTransform({
mapping: [
{
typeName: 'Query',
pathConfig: ['users', 'results'],
newFieldName: 'users'
}
]
})
]
}
]
})
Will transform the given schema to:
type Query {
users(limit: Int!, page: Int): [User!]!
}
type User {
id: ID!
}
Filtering args via a default for the entire path
mesh-config.ts
import {
createHoistFieldTransform,
defineConfig,
loadGraphQLHTTPSubgraph
} from '@graphql-mesh/compose-cli'
export const composeConfig = defineConfig({
subgraphs: [
{
sourceHandler: loadGraphQLHTTPSubgraph('Users', {
endpoint: 'http://localhost:4001/users'
}),
transforms: [
createHoistFieldTransform({
mapping: [
{
typeName: 'Query',
pathConfig: [
{
fieldName: 'users',
filterArgs: ['limit']
},
'results'
],
newFieldName: 'users'
}
]
})
]
}
]
})
Will transform the given schema to:
type Query {
users(page: Int): [User!]!
}
type User {
id: ID!
}