Skip to main content

Fragment Matcher

This plugin generates an introspection file but only with Interfaces and Unions, based on your GraphQLSchema.

If you are using apollo-client and your schema contains interface or union declaration, it's recommended to use Apollo's Fragment Matcher and the result generated by the plugin.

You can read more about it in apollo-client documentation: https://www.apollographql.com/docs/react/data/fragments/#fragments-on-unions-and-interfaces.

Fragment Matcher plugin accepts a TypeScript / JavaScript or a JSON file as an output (.ts, .tsx, .js, .jsx, .json).

Both in TypeScript and JavaScript a default export is being used.

The output is based on the output you choose for the output file name.

Installation

fragment-matcher plugin version
Using yarn
yarn add -D @graphql-codegen/fragment-matcher

API Reference

module

type: string (values: commonjs, es2015) default: es2015

Compatible only with JSON extension, allow you to choose the export type, either module.exports or export default. Allowed values are: commonjs, es2015.

Usage Examples

generates:
path/to/file.json:
plugins:
- fragment-matcher
config:
module: commonjs

apolloClientVersion

type: number (values: 2, 3) default: 3

Compatible only with TS/TSX/JS/JSX extensions, allow you to generate output based on your Apollo-Client version. Valid values are: 2, 3.

Usage Examples

generates:
path/to/file.ts:
plugins:
- fragment-matcher
config:
apolloClientVersion: 3

useExplicitTyping

type: boolean default: false

Create an explicit type based on your schema. This can help IDEs autofill your fragment matcher. This is mostly useful if you do more with your fragment matcher than just pass it to an Apollo-Client.

Usage Examples

generates:
path/to/file.ts:
plugins:
- fragment-matcher
config:
useExplicitTyping: true

federation

type: boolean

How to use?#

Usage with Apollo Client 3#

If you are using Apollo Client 3, update your codegen config accordingly, and then use it in your Apollo cache instance:

import { InMemoryCache } from '@apollo/client';
// generated by Fragment Matcher plugin
import generatedIntrospection from '../introspection-result';
const cache = new InMemoryCache({ possibleTypes: generatedIntrospection.possibleTypes });

Read more about fragment matcher and its usage on Apollo Client

Usage with Apollo Client 2#

If you are using version 2 of Apollo-Client, you need to specify the apolloClientVersion: 2 configuration, and then use it like that:

import { InMemoryCache, IntrospectionFragmentMatcher } from 'apollo-cache-inmemory';
// generated by Fragment Matcher plugin
import introspectionResult from '../introspection-result';
const fragmentMatcher = new IntrospectionFragmentMatcher({
introspectionQueryResultData: introspectionResult,
});
const cache = new InMemoryCache({
fragmentMatcher,
});