Compose
Transforms
Hoist Field

Hoist Field Transform

💡

This page is currently under construction and expected to change. Please feel free to reach out to us directly in case you are having any troubles.

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({
          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({
          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!
}