Package Exports
- @mercuriusjs/federation
- @mercuriusjs/federation/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@mercuriusjs/federation) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@mercuriusjs/federation
A module to add Apollo Federation v1 metadata info to a schema.
Quick start
npm i fastify @mercuriusjs/federationconst Fastify = require('fastify')
const { mercuriusFederationPlugin } = require('@mercuriusjs/federation')
const users = {
1: {
id: '1',
name: 'John',
username: '@john'
},
2: {
id: '2',
name: 'Jane',
username: '@jane'
}
}
const app = Fastify()
const schema = `
extend type Query {
me: User
}
type User @key(fields: "id") {
id: ID!
name: String
username: String
}
`
const resolvers = {
Query: {
me: () => {
return users['1']
}
},
User: {
__resolveReference: (source, args, context, info) => {
return users[source.id]
}
}
}
app.register(mercuriusFederationPlugin, {
schema,
resolvers
})
app.get('/', async function (req, reply) {
const query = '{ _service { sdl } }'
return app.graphql(query)
})
app.listen({ port: 3000 })Build a schema and pass it to mercurius
Instead of using the plugin, the federation schema can be built using the buildFederationSchema function and passing the schema generated to mercurius.
const Fastify = require('fastify')
const mercurius = require('mercurius')
const { buildFederationSchema } = require('../')
...
app.register(mercurius, {
schema: buildFederationSchema(schema),
resolvers,
graphiql: true
})
...API
mercuriusFederationPlugin
A fastify plugin to create a mercurius server that expose the federation directives.
const { mercuriusFederationPlugin } = require('@mercuriusjs/federation')
const schema = ...
const resolvers = ...
const app = Fastify()
app.register(mercuriusFederationPlugin, {
schema,
resolvers
})options
Uses the same options of mercurius but
it requires a string, DocumentNode or an Array of DocumentNode for schema attribute.
buildFederationSchema
Create a schema object that can be used in a federated environment
(schema, opts) => GraphQLSchema
schemastring | DocumentNode | Array: the source schema optsobject:isGatewayboolean: If enabled create a schema compatible with thegateway, Default 'false'