@devflow-tools/plugin-graphql 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ import type { DevFlowPlugin } from "@devflow-tools/sdk";
2
+ export declare const graphqlPlugin: DevFlowPlugin;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,eAAO,MAAM,aAAa,EAAE,aAiJ3B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,142 @@
1
+ export const graphqlPlugin = {
2
+ meta: {
3
+ name: "graphql",
4
+ version: "0.1.0",
5
+ description: "GraphQL 专家 — Schema 设计、N+1 检测、Resolver 优化、安全审计",
6
+ icon: "◈",
7
+ tags: ["backend", "graphql", "apollo", "api", "schema"],
8
+ },
9
+ knowledge: {
10
+ sources: [
11
+ {
12
+ name: "graphql-docs",
13
+ urls: [
14
+ "https://graphql.org/learn/",
15
+ "https://www.apollographql.com/docs/apollo-server/",
16
+ "https://graphql.org/learn/schema/",
17
+ ],
18
+ pluginName: "graphql",
19
+ version: "2024",
20
+ },
21
+ ],
22
+ },
23
+ memory: {
24
+ project: {
25
+ stack: ["GraphQL", "Apollo Server", "TypeGraphQL", "DataLoader"],
26
+ conventions: [
27
+ { key: "schema", value: "Schema-first 设计,使用 SDL 定义类型和操作", source: "manual", confidence: 0.9 },
28
+ { key: "resolvers", value: "Resolver 保持简洁,业务逻辑在 Service 层", source: "manual", confidence: 0.9 },
29
+ { key: "n+1", value: "使用 DataLoader 解决 N+1 查询问题", source: "manual", confidence: 0.95 },
30
+ { key: "errors", value: "使用 Union Types 或自定义 Error Type 处理错误", source: "manual", confidence: 0.8 },
31
+ ],
32
+ },
33
+ global: [
34
+ {
35
+ id: "graphql:schema-design",
36
+ source: "graphql",
37
+ title: "Schema 设计原则",
38
+ content: "Type 设计面向 UI 需求而非数据库结构。使用 Connection 模式实现分页。Mutation 命名使用动词。字段可以为 null 除非明确 Non-Null。Input Types 用于 Mutation 参数。",
39
+ embedding: [],
40
+ },
41
+ {
42
+ id: "graphql:n+1-solution",
43
+ source: "graphql",
44
+ title: "N+1 问题与 DataLoader",
45
+ content: "DataLoader 将多个单独的数据请求合并为一个批量请求。每个请求创建新的 DataLoader 实例。使用 cacheKeyFn 自定义缓存键。通过 prime() 方法手动填充缓存。",
46
+ embedding: [],
47
+ },
48
+ {
49
+ id: "graphql:security",
50
+ source: "graphql",
51
+ title: "GraphQL 安全策略",
52
+ content: "限制查询深度防止嵌套攻击。限制查询复杂度(cost analysis)。限制列表长度。使用 Persisted Queries 防止任意查询。速率限制基于用户或 IP。",
53
+ embedding: [],
54
+ },
55
+ {
56
+ id: "graphql:resolver-patterns",
57
+ source: "graphql",
58
+ title: "Resolver 设计模式",
59
+ content: "Resolver 链:Parent → Field Resolver 逐层解析。使用 info 参数获取查询字段选择。顶层 Resolver 处理 Query/Mutation,字段级 Resolver 处理嵌套关系。",
60
+ embedding: [],
61
+ },
62
+ ],
63
+ },
64
+ workflow: {
65
+ steps: [],
66
+ templates: [
67
+ {
68
+ name: "new-type",
69
+ description: "新建 GraphQL Type + Resolver + DataLoader",
70
+ version: "1.0.0",
71
+ steps: [
72
+ { id: "analyze-ui-needs", description: "分析前端 UI 字段需求(面向 UI 设计 Schema)", type: "llm", timeout: 10000 },
73
+ { id: "define-type", description: "在 Schema 中定义 Type、Query、Mutation(SDL)", type: "llm", depends: ["analyze-ui-needs"], timeout: 10000 },
74
+ { id: "define-inputs", description: "定义 Input Types(创建/更新操作的参数)", type: "llm", depends: ["define-type"], timeout: 5000 },
75
+ { id: "create-resolver", description: "实现 Resolver 函数", type: "llm", depends: ["define-type"], timeout: 15000 },
76
+ { id: "add-dataloader", description: "添加 DataLoader 批量加载避免 N+1", type: "simple", depends: ["create-resolver"], timeout: 10000 },
77
+ { id: "add-auth", description: "添加字段级权限控制", type: "simple", depends: ["create-resolver"], timeout: 10000 },
78
+ { id: "type-check", description: "TypeScript + GraphQL Codegen 类型检查", type: "simple", depends: ["create-resolver", "define-inputs"], timeout: 15000 },
79
+ { id: "integration-test", description: "运行 GraphQL 集成测试", type: "simple", depends: ["type-check"], timeout: 30000 },
80
+ ],
81
+ triggers: [{ type: "cli", command: "new:type" }, { type: "mcp", tool: "new_graphql_type" }],
82
+ },
83
+ {
84
+ name: "n+1-detect",
85
+ description: "N+1 检测与修复:扫描 Resolver → 识别批量模式 → 加 DataLoader",
86
+ version: "1.0.0",
87
+ steps: [
88
+ { id: "scan-resolvers", description: "扫描所有 Resolver 函数和数据库查询", type: "simple", timeout: 10000 },
89
+ { id: "detect-n+1", description: "检测潜在的 N+1 查询模式(循环中查询数据库)", type: "simple", depends: ["scan-resolvers"], timeout: 10000 },
90
+ { id: "measure-impact", description: "评估 N+1 问题的性能影响", type: "llm", depends: ["detect-n+1"], timeout: 10000 },
91
+ { id: "create-dataloaders", description: "为每个 N+1 模式创建对应的 DataLoader", type: "llm", depends: ["detect-n+1"], timeout: 20000 },
92
+ { id: "refactor-resolvers", description: "重构 Resolver 使用 DataLoader 批量加载", type: "llm", depends: ["create-dataloaders"], timeout: 20000 },
93
+ { id: "benchmark", description: "对比优化前后的查询次数和响应时间", type: "simple", depends: ["refactor-resolvers"], timeout: 30000 },
94
+ ],
95
+ triggers: [{ type: "cli", command: "fix:n+1" }],
96
+ },
97
+ {
98
+ name: "schema-review",
99
+ description: "Schema 设计审查:类型设计 → 分页模式 → 安全风险评估",
100
+ version: "1.0.0",
101
+ steps: [
102
+ { id: "audit-types", description: "审查 Type 设计(字段命名、可空性、嵌套层级)", type: "simple", timeout: 10000 },
103
+ { id: "check-pagination", description: "检查分页实现是否符合 Connection 规范", type: "simple", timeout: 10000 },
104
+ { id: "check-naming", description: "检查 Mutation/Query 命名规范(动词 + 资源名)", type: "simple", timeout: 5000 },
105
+ { id: "security-audit", description: "安全审计(深度限制、复杂度限制、字段级权限)", type: "simple", timeout: 15000 },
106
+ { id: "generate-report", description: "生成审查报告和优化建议", type: "llm", depends: ["audit-types", "check-pagination", "check-naming", "security-audit"], timeout: 15000 },
107
+ { id: "apply-fixes", description: "应用推荐修复", type: "llm", depends: ["generate-report"], timeout: 20000 },
108
+ ],
109
+ triggers: [{ type: "cli", command: "review:schema" }],
110
+ },
111
+ {
112
+ name: "bug-diagnosis",
113
+ description: "GraphQL Bug 诊断:查询分析 → Resolver 链追踪 → 修复",
114
+ version: "1.0.0",
115
+ steps: [
116
+ { id: "capture-query", description: "收集出错查询和变量", type: "simple", timeout: 5000 },
117
+ { id: "trace-resolver-chain", description: "追踪 Resolver 调用链(Parent → Field 逐层)", type: "simple", depends: ["capture-query"], timeout: 10000 },
118
+ { id: "check-nullability", description: "检查字段可空性是否导致 Null 传播", type: "simple", depends: ["trace-resolver-chain"], timeout: 10000 },
119
+ { id: "check-dataloader", description: "检查 DataLoader 是否正确批处理", type: "simple", depends: ["trace-resolver-chain"], timeout: 10000 },
120
+ { id: "search-docs", description: "搜索 GraphQL/Apollo 文档", type: "simple", timeout: 10000 },
121
+ { id: "generate-fix", description: "生成修复方案", type: "llm", depends: ["trace-resolver-chain", "check-nullability", "check-dataloader", "search-docs"], timeout: 20000 },
122
+ { id: "test-query", description: "用原查询验证修复", type: "simple", depends: ["generate-fix"], timeout: 15000 },
123
+ ],
124
+ triggers: [{ type: "cli", command: "bug" }, { type: "mcp", tool: "diagnose_bug" }],
125
+ },
126
+ ],
127
+ },
128
+ prompt: {
129
+ system: "你是一个 GraphQL 专家。使用 Schema-First 设计,Apollo Server 实现。遇到问题先查文档,不凭空猜测。",
130
+ rules: [
131
+ "使用 Schema-First 设计(SDL)定义类型和操作",
132
+ "Resolver 保持简洁,业务逻辑在 Service 层",
133
+ "使用 DataLoader 解决 N+1 查询问题",
134
+ "Mutation 命名使用动词(create/update/delete)",
135
+ "使用 Connection 模式实现分页",
136
+ "限制查询深度和复杂度防止滥用",
137
+ "遇到不确定的 Schema 设计时先查 GraphQL 官方规范",
138
+ ],
139
+ },
140
+ tools: [],
141
+ };
142
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@devflow-tools/plugin-graphql",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ }
12
+ },
13
+ "scripts": {
14
+ "build": "tsc -b",
15
+ "test": "vitest run",
16
+ "typecheck": "tsc --noEmit",
17
+ "clean": "rm -rf dist"
18
+ },
19
+ "dependencies": {
20
+ "@devflow-tools/sdk": "*"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.5.0",
24
+ "vitest": "^2.0.0"
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "gitHead": "4cede97fc7fc673f929427fac169acab100ca8ed"
30
+ }