Federation Subgraph Transform
This transform allows to create subgraphs from your regular sources which don’t have any federation
annotations. This transform uses
graphql-transform-federation package.
npm i @graphql-mesh/transform-federationHow 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: userAdd 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.tsuserResolveReference.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:Stringobject:queryFieldName(type:String, required) - Name of root field name that resolves the referenceargs(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