Package: gql-defrag
gql-defragDo you have complex GraphQL queries that are made up of lot of fragments? Do you want to
figure out who is querying all those fields? Then gql-defrag can help you. It takes in
the text of all your queries and fragments, and returns a new query that inlines all the
fragments and labels fields with their origin.Example:>>> from gql_defrag import Defragmenter
>>> defrag = Defragmenter(["""
... query SomeQuery {
...     field
...     name
...     ...SomeFragment
... }
...
... fragment SomeFragment on SomeType {
...     fragmentField
...     field
... }
... """])
>>> print(defrag.defragment("SomeQuery"))
query SomeQuery {
  field @gql_defrag_source(name: "SomeQuery") @gql_defrag_source(name: "SomeQuery -> SomeFragment")
  fragmentField @gql_defrag_source(name: "SomeQuery -> SomeFragment")
  name @gql_defrag_source(name: "SomeQuery")
}Programmatic usagegql_defrag.Defragmenter(documents: Sequence[str])Instantiate aDefragmenterto start defragmenting some queries. Pass in a series of
GraphQL documents. Each may contain one or more queries, fragments, or both.Defragmenter.add_document(document: str) -> NoneAdd a document to theDefragmenter. The document may contain any number of queries or
fragments.Defragmenter.defragment(query_name: str, *, add_source: bool = True) -> strReturn a defragmented version of the operation (query, mutation, or subscription) namedquery_name. Ifadd_sourceis True, add@gql_defrag_sourcedirectives explaining
what sequence of fragments triggered each field.Defragmenter.defragment_all(*, add_source: bool = True) -> Iterable[tuple[str, str]]Yields pairs of (query name, defragmented query) for all operations that theDefragmenterknows about.Command-line usage$ python -m gql_defrag --help
usage: __main__.py [-h] [--js-dir JS_DIR] [--graphql-dir GRAPHQL_DIR] [--relay-dir RELAY_DIR] [--output-dir OUTPUT_DIR] [--include-source]

Defrag GraphQL queries

options:
  -h, --help            show this help message and exit
  --js-dir JS_DIR       Directory with JavaScript files containing GraphQL fragments and queries
  --graphql-dir GRAPHQL_DIR
                        Directory with GraphQL files with .graphql extensions
  --relay-dir RELAY_DIR
                        Directory with Relay files with .graphql.ts extensions
  --output-dir OUTPUT_DIR
                        Directory to write defragmented queries to
  --include-source      Include verbose source informationThe command-line interface collects GraphQL queries from one or more directories and
outputs defragmented queries to an output directory.There are three ways to find GraphQL queries:--graphql-dirlooks at a directory containing.graphqlfiles that contain GraphQL
queries--js-dirlooks at a directory containing JavaScript or TypeScript files that contain
pieces of GraphQL within template literals prefixed withgraphqlorgql. The code
looks at files with the extensions.js,.jsx,.ts, and.tsx.--relay-dirlooks at a directory containing Relay generated files with the.graphql.tsextension.Defragmented files are placed in the directory specified by--output-dir. If the
directory does not exist, it is created. The file names are of the form<query name>.graphql.If--include-sourceis given,@gql_defrag_sourceare added with precise source
information for each field.ChangelogVersion 0.1.1 (July 25, 2023)Fix bug with handling of fields that contain "null" in their nameVersion 0.1.0 (May 3, 2023)Initial public release.