Extending the GraphQL schema
WIP
This documentation is currently under development.
GraphQL is a very versatile language. By using the exported getSchema function, you can not only extend the base schema but also redefine the whole resolvers implementation.
To extend the schema, one can:
import { getSchema, getTypeDefs } from '@faststore/api'
import { makeExecutableSchema, mergeSchemas } from '@graphql-tools/schema'
import { ApolloServer } from 'apollo-server'
// Setup type extensions
const typeDefs = `
  extend type StoreProduct {
    customField: String
  }
`
// Setup custom resolvers
const resolvers = {
  StoreProduct: {
    customField: async () => {
      ...
      // Your code goes here
      ...
    }
  }
}
const storeApiSchema = getSchema({ platform: 'vtex', ...})
// Merge custom TypeDefs with the ones from @faststore/api
const mergedTypeDefs = mergeTypeDefs([getTypeDefs(), typeDefs])
const getMergedSchemas = async () =>
  mergeSchemas({
    schemas: [
      await storeApiSchema,
      makeExecutableSchema({
        resolvers,
        typeDefs: mergedTypeDefs,
      }),
    ],
  })
// Merge schemas into a final schema
const finalSchema = getMergedSchemas()
// Setup Apollo Server
const server = new ApolloServer({ finalSchema });
// The `listen` method launches a web server.
server.listen().then(({ url }) => {
  console.log(`🚀  Server ready at ${url}`);
});