Docs
Transforms
Apollo Federation

Apollo Federation Transform

The federation transform allows the resolvers and directives to conform to the federation specification. Much of the federation source code could be reused, ensuring it is compliant with the specification. This transform uses graphql-transform-federation (opens in a new tab) package.

Terminal
yarn add @graphql-mesh/transform-federation

How to use?

Add the following configuration to your Mesh config file:

.meshrc.yaml
transforms:
  - federation:
      types:
        # Ensure the root queries of this schema show up the combined schema
        - name: Query
          config:
            extends: true
        - name: Product
          config:
            # extend Product {
            extend: true
            # Product @key(fields: "id") {
            key:
              fields:
                - id
            fields:
              # id: Int! @external
              - name: id
                config:
                  external: true
            resolveReference:
              queryFieldName: user

Add Reference Resolver as a Code File

To add more complex business logic, you can point to a code file that exports a resolver function.

.meshrc.yaml
resolveReference: ./userResolveReference.ts
userResolveReference.ts
// So we can point to an existing query field to resolve that entity
export default function (root, context, info) {
  return context.accounts.Query.user({ root, args: { id: root.id }, context, info })
}
💡
You can check out our example that uses Federation as a merging strategy.
  • types (type: Array of Object, required):
    • name (type: String, required)
    • config (type: Object):
      • key (type: Array of Object):
        • fields (type: String)
      • shareable (type: Boolean)
      • extends (type: Boolean)
      • fields (type: Array of Object, required):
        • name (type: String, required)
        • config (type: Object, required):
          • external (type: Boolean)
          • provides (type: Object):
            • fields (type: String)
          • requires (type: Object):
            • fields (type: String)
          • tag (type: Object):
            • name (type: String)
          • inaccessible (type: Boolean)
          • override (type: Object):
            • from (type: String)
      • resolveReference - One of:
        • String
        • object:
          • queryFieldName (type: String, required) - Name of root field name that resolves the reference
          • args (type: JSON) - You need configure the arguments for that field;
args:
  someArg: "{root.someKeyValue}"
  • version (type: String) - Version of the federation spec Default: v2.0