跳转到主要内容

合并GraphQL片段到父查询

项目描述

gql-defrag

你有由大量片段组成的复杂GraphQL查询吗?你想找出谁正在查询所有这些字段吗?那么gql-defrag可以帮到你。它接受你所有查询和片段的文本,并返回一个新的查询,其中内联所有片段并为字段标记其来源。

示例

>>> 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")
}

程序性使用

gql_defrag.Defragmenter(documents: Sequence[str])

实例化一个Defragmenter以开始拆分查询。传递一系列GraphQL文档。每个文档可能包含一个或多个查询、片段或两者。

Defragmenter.add_document(document: str) -> None

Defragmenter添加文档。文档可以包含任意数量的查询或片段。

Defragmenter.defragment(query_name: str, *, add_source: bool = True) -> str

返回名为query_name的操作(查询、变更或订阅)的拆分版本。如果add_source为True,则添加@gql_defrag_source指令,解释触发每个字段的片段序列。

Defragmenter.defragment_all(*, add_source: bool = True) -> Iterable[tuple[str, str]]

Defragmenter知道的全部操作生成(查询名称,拆分查询)对的迭代器。

命令行使用

$ 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 information

命令行界面从一个或多个目录中收集GraphQL查询,并将拆分后的查询输出到输出目录。

有三种方法来查找GraphQL查询

  • --graphql-dir查看包含包含GraphQL查询的.graphql文件的目录
  • --js-dir 用于检查包含以 graphqlgql 前缀的模板字符串中 GraphQL 片段的 JavaScript 或 TypeScript 文件所在的目录。代码会检查扩展名为 .js.jsx.ts.tsx 的文件。
  • --relay-dir 用于检查包含扩展名为 .graphql.ts 的 Relay 生成的文件的目录。

已碎片化的文件放置在由 --output-dir 指定的目录中。如果目录不存在,则创建。文件名形式为 <查询名称>.graphql

如果提供了 --include-source,将为每个字段添加精确源信息的 @gql_defrag_source

变更日志

版本 0.1.1 (2023年7月25日)

  • 修复了处理名称中包含 "null" 的字段的问题

版本 0.1.0 (2023年5月3日)

首次公开发布。

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面