跳转到主要内容

合并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日)

首次公开发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

gql_defrag-0.2.0.tar.gz (6.4 kB 查看哈希值)

上传时间 源代码

构建分发

gql_defrag-0.2.0-py3-none-any.whl (6.0 kB 查看哈希值)

上传时间 Python 3

支持者

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