@ghx-dev/core 0.1.2 → 0.2.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.
Files changed (181) hide show
  1. package/.claude-plugin/plugin.json +21 -0
  2. package/README.md +12 -15
  3. package/dist/cards/issue.assignees.add.yaml +50 -0
  4. package/dist/cards/issue.assignees.remove.yaml +50 -0
  5. package/dist/cards/issue.assignees.set.yaml +47 -0
  6. package/dist/cards/issue.close.yaml +16 -2
  7. package/dist/cards/issue.comments.create.yaml +16 -2
  8. package/dist/cards/issue.create.yaml +11 -0
  9. package/dist/cards/issue.delete.yaml +16 -2
  10. package/dist/cards/issue.labels.add.yaml +48 -0
  11. package/dist/cards/issue.labels.remove.yaml +50 -0
  12. package/dist/cards/issue.labels.set.yaml +47 -0
  13. package/dist/cards/issue.milestone.clear.yaml +40 -0
  14. package/dist/cards/issue.milestone.set.yaml +23 -4
  15. package/dist/{core/registry/cards/issue.blocked_by.add.yaml → cards/issue.relations.blocked_by.add.yaml} +3 -2
  16. package/dist/cards/{issue.blocked_by.remove.yaml → issue.relations.blocked_by.remove.yaml} +1 -1
  17. package/dist/cards/{issue.parent.remove.yaml → issue.relations.parent.remove.yaml} +11 -1
  18. package/dist/{core/registry/cards/issue.parent.set.yaml → cards/issue.relations.parent.set.yaml} +3 -2
  19. package/dist/{core/registry/cards/issue.linked_prs.list.yaml → cards/issue.relations.prs.list.yaml} +1 -1
  20. package/dist/cards/{issue.relations.get.yaml → issue.relations.view.yaml} +1 -1
  21. package/dist/cards/issue.reopen.yaml +16 -2
  22. package/dist/cards/issue.update.yaml +16 -2
  23. package/dist/cards/issue.view.yaml +7 -5
  24. package/dist/cards/{pr.review.submit_approve.yaml → pr.assignees.add.yaml} +12 -9
  25. package/dist/cards/pr.assignees.remove.yaml +29 -0
  26. package/dist/{core/registry/cards/pr.status.checks.yaml → cards/pr.checks.list.yaml} +15 -2
  27. package/dist/{core/registry/cards/pr.checks.rerun_all.yaml → cards/pr.checks.rerun.all.yaml} +2 -4
  28. package/dist/{core/registry/cards/pr.checks.rerun_failed.yaml → cards/pr.checks.rerun.failed.yaml} +3 -5
  29. package/dist/cards/pr.create.yaml +30 -0
  30. package/dist/cards/{pr.diff.list_files.yaml → pr.diff.files.yaml} +1 -1
  31. package/dist/cards/{pr.ready_for_review.set.yaml → pr.diff.view.yaml} +6 -8
  32. package/dist/{core/registry/cards/pr.mergeability.view.yaml → cards/pr.merge.status.yaml} +6 -3
  33. package/dist/{core/registry/cards/pr.merge.execute.yaml → cards/pr.merge.yaml} +1 -1
  34. package/dist/cards/pr.reviews.list.yaml +1 -1
  35. package/dist/cards/{pr.reviewers.request.yaml → pr.reviews.request.yaml} +1 -1
  36. package/dist/cards/pr.reviews.submit.yaml +67 -0
  37. package/dist/cards/{pr.comments.list.yaml → pr.threads.list.yaml} +2 -2
  38. package/dist/cards/{pr.comment.reply.yaml → pr.threads.reply.yaml} +4 -2
  39. package/dist/cards/{pr.comment.resolve.yaml → pr.threads.resolve.yaml} +1 -1
  40. package/dist/cards/{pr.comment.unresolve.yaml → pr.threads.unresolve.yaml} +1 -1
  41. package/dist/cards/pr.update.yaml +29 -0
  42. package/dist/cards/pr.view.yaml +7 -5
  43. package/dist/{core/registry/cards/project_v2.item.field.update.yaml → cards/project_v2.items.field.update.yaml} +1 -1
  44. package/dist/{core/registry/cards/project_v2.item.add_issue.yaml → cards/project_v2.items.issue.add.yaml} +1 -1
  45. package/dist/cards/project_v2.items.issue.remove.yaml +23 -0
  46. package/dist/{core/registry/cards/project_v2.org.get.yaml → cards/project_v2.org.view.yaml} +1 -1
  47. package/dist/cards/{project_v2.user.get.yaml → project_v2.user.view.yaml} +1 -1
  48. package/dist/{core/registry/cards/release.create_draft.yaml → cards/release.create.yaml} +1 -1
  49. package/dist/cards/{release.publish_draft.yaml → release.publish.yaml} +1 -1
  50. package/dist/{core/registry/cards/release.get.yaml → cards/release.view.yaml} +1 -1
  51. package/dist/cards/repo.view.yaml +2 -4
  52. package/dist/cards/{workflow_dispatch.run.yaml → workflow.dispatch.yaml} +1 -1
  53. package/dist/cards/{workflow_job.logs.get.yaml → workflow.job.logs.raw.yaml} +2 -2
  54. package/dist/{core/registry/cards/workflow_job.logs.analyze.yaml → cards/workflow.job.logs.view.yaml} +1 -1
  55. package/dist/{core/registry/cards/workflow_run.artifacts.list.yaml → cards/workflow.run.artifacts.list.yaml} +1 -1
  56. package/dist/cards/{workflow_run.cancel.yaml → workflow.run.cancel.yaml} +1 -1
  57. package/dist/cards/{workflow_run.rerun_all.yaml → workflow.run.rerun.all.yaml} +3 -3
  58. package/dist/{core/registry/cards/workflow_run.rerun_failed.yaml → cards/workflow.run.rerun.failed.yaml} +3 -3
  59. package/dist/{core/registry/cards/workflow_run.get.yaml → cards/workflow.run.view.yaml} +19 -4
  60. package/dist/cards/{workflow_runs.list.yaml → workflow.runs.list.yaml} +1 -1
  61. package/dist/cards/{workflow.get.yaml → workflow.view.yaml} +2 -2
  62. package/dist/chunk-3DU2WHXF.js +15 -0
  63. package/dist/chunk-3DU2WHXF.js.map +1 -0
  64. package/dist/chunk-3P3KHWFU.js +5779 -0
  65. package/dist/chunk-3P3KHWFU.js.map +1 -0
  66. package/dist/chunk-BIWBJA2F.js +228 -0
  67. package/dist/chunk-BIWBJA2F.js.map +1 -0
  68. package/dist/chunk-HEHONZTO.js +121 -0
  69. package/dist/chunk-HEHONZTO.js.map +1 -0
  70. package/dist/chunk-Q7RCIK2C.js +773 -0
  71. package/dist/chunk-Q7RCIK2C.js.map +1 -0
  72. package/dist/chunk-R3CBGJZX.js +12 -0
  73. package/dist/chunk-R3CBGJZX.js.map +1 -0
  74. package/dist/chunk-TDABI6C7.js +167 -0
  75. package/dist/chunk-TDABI6C7.js.map +1 -0
  76. package/dist/chunk-TPQYVCAS.js +15 -0
  77. package/dist/chunk-TPQYVCAS.js.map +1 -0
  78. package/dist/cli/index.js +202 -21
  79. package/dist/cli/index.js.map +1 -1
  80. package/dist/core/registry/cards/issue.assignees.add.yaml +50 -0
  81. package/dist/core/registry/cards/issue.assignees.remove.yaml +50 -0
  82. package/dist/core/registry/cards/issue.assignees.set.yaml +47 -0
  83. package/dist/core/registry/cards/issue.close.yaml +16 -2
  84. package/dist/core/registry/cards/issue.comments.create.yaml +16 -2
  85. package/dist/core/registry/cards/issue.create.yaml +11 -0
  86. package/dist/core/registry/cards/issue.delete.yaml +16 -2
  87. package/dist/core/registry/cards/issue.labels.add.yaml +48 -0
  88. package/dist/core/registry/cards/issue.labels.remove.yaml +50 -0
  89. package/dist/core/registry/cards/issue.labels.set.yaml +47 -0
  90. package/dist/core/registry/cards/issue.milestone.clear.yaml +40 -0
  91. package/dist/core/registry/cards/issue.milestone.set.yaml +23 -4
  92. package/dist/{cards/issue.blocked_by.add.yaml → core/registry/cards/issue.relations.blocked_by.add.yaml} +3 -2
  93. package/dist/core/registry/cards/{issue.blocked_by.remove.yaml → issue.relations.blocked_by.remove.yaml} +1 -1
  94. package/dist/core/registry/cards/{issue.parent.remove.yaml → issue.relations.parent.remove.yaml} +11 -1
  95. package/dist/{cards/issue.parent.set.yaml → core/registry/cards/issue.relations.parent.set.yaml} +3 -2
  96. package/dist/{cards/issue.linked_prs.list.yaml → core/registry/cards/issue.relations.prs.list.yaml} +1 -1
  97. package/dist/core/registry/cards/{issue.relations.get.yaml → issue.relations.view.yaml} +1 -1
  98. package/dist/core/registry/cards/issue.reopen.yaml +16 -2
  99. package/dist/core/registry/cards/issue.update.yaml +16 -2
  100. package/dist/core/registry/cards/issue.view.yaml +7 -5
  101. package/dist/core/registry/cards/pr.assignees.add.yaml +29 -0
  102. package/dist/core/registry/cards/pr.assignees.remove.yaml +29 -0
  103. package/dist/{cards/pr.status.checks.yaml → core/registry/cards/pr.checks.list.yaml} +15 -2
  104. package/dist/{cards/pr.checks.rerun_all.yaml → core/registry/cards/pr.checks.rerun.all.yaml} +2 -4
  105. package/dist/{cards/pr.checks.rerun_failed.yaml → core/registry/cards/pr.checks.rerun.failed.yaml} +3 -5
  106. package/dist/core/registry/cards/pr.create.yaml +30 -0
  107. package/dist/core/registry/cards/{pr.diff.list_files.yaml → pr.diff.files.yaml} +1 -1
  108. package/dist/core/registry/cards/{pr.ready_for_review.set.yaml → pr.diff.view.yaml} +6 -8
  109. package/dist/{cards/pr.mergeability.view.yaml → core/registry/cards/pr.merge.status.yaml} +6 -3
  110. package/dist/{cards/pr.merge.execute.yaml → core/registry/cards/pr.merge.yaml} +1 -1
  111. package/dist/core/registry/cards/pr.reviews.list.yaml +1 -1
  112. package/dist/core/registry/cards/{pr.reviewers.request.yaml → pr.reviews.request.yaml} +1 -1
  113. package/dist/core/registry/cards/pr.reviews.submit.yaml +67 -0
  114. package/dist/core/registry/cards/{pr.comments.list.yaml → pr.threads.list.yaml} +2 -2
  115. package/dist/core/registry/cards/{pr.comment.reply.yaml → pr.threads.reply.yaml} +4 -2
  116. package/dist/core/registry/cards/{pr.comment.resolve.yaml → pr.threads.resolve.yaml} +1 -1
  117. package/dist/core/registry/cards/{pr.comment.unresolve.yaml → pr.threads.unresolve.yaml} +1 -1
  118. package/dist/core/registry/cards/pr.update.yaml +29 -0
  119. package/dist/core/registry/cards/pr.view.yaml +7 -5
  120. package/dist/{cards/project_v2.item.field.update.yaml → core/registry/cards/project_v2.items.field.update.yaml} +1 -1
  121. package/dist/{cards/project_v2.item.add_issue.yaml → core/registry/cards/project_v2.items.issue.add.yaml} +1 -1
  122. package/dist/core/registry/cards/project_v2.items.issue.remove.yaml +23 -0
  123. package/dist/{cards/project_v2.org.get.yaml → core/registry/cards/project_v2.org.view.yaml} +1 -1
  124. package/dist/core/registry/cards/{project_v2.user.get.yaml → project_v2.user.view.yaml} +1 -1
  125. package/dist/{cards/release.create_draft.yaml → core/registry/cards/release.create.yaml} +1 -1
  126. package/dist/core/registry/cards/{release.publish_draft.yaml → release.publish.yaml} +1 -1
  127. package/dist/{cards/release.get.yaml → core/registry/cards/release.view.yaml} +1 -1
  128. package/dist/core/registry/cards/repo.view.yaml +2 -4
  129. package/dist/core/registry/cards/{workflow_dispatch.run.yaml → workflow.dispatch.yaml} +1 -1
  130. package/dist/core/registry/cards/{workflow_job.logs.get.yaml → workflow.job.logs.raw.yaml} +2 -2
  131. package/dist/{cards/workflow_job.logs.analyze.yaml → core/registry/cards/workflow.job.logs.view.yaml} +1 -1
  132. package/dist/{cards/workflow_run.artifacts.list.yaml → core/registry/cards/workflow.run.artifacts.list.yaml} +1 -1
  133. package/dist/core/registry/cards/{workflow_run.cancel.yaml → workflow.run.cancel.yaml} +1 -1
  134. package/dist/core/registry/cards/{workflow_run.rerun_all.yaml → workflow.run.rerun.all.yaml} +3 -3
  135. package/dist/{cards/workflow_run.rerun_failed.yaml → core/registry/cards/workflow.run.rerun.failed.yaml} +3 -3
  136. package/dist/{cards/workflow_run.get.yaml → core/registry/cards/workflow.run.view.yaml} +19 -4
  137. package/dist/core/registry/cards/{workflow_runs.list.yaml → workflow.runs.list.yaml} +1 -1
  138. package/dist/core/registry/cards/{workflow.get.yaml → workflow.view.yaml} +2 -2
  139. package/dist/index.d.ts +374 -35
  140. package/dist/index.js +33 -5
  141. package/dist/index.js.map +1 -1
  142. package/dist/issue-mutations-FJNZW7L5.js +668 -0
  143. package/dist/issue-mutations-FJNZW7L5.js.map +1 -0
  144. package/dist/issue-queries-GRA4MKPD.js +208 -0
  145. package/dist/issue-queries-GRA4MKPD.js.map +1 -0
  146. package/dist/pr-mutations-UG67YOF5.js +344 -0
  147. package/dist/pr-mutations-UG67YOF5.js.map +1 -0
  148. package/dist/pr-queries-UOEOXIJQ.js +331 -0
  149. package/dist/pr-queries-UOEOXIJQ.js.map +1 -0
  150. package/dist/repo-JDUHFPZF.js +66 -0
  151. package/dist/repo-JDUHFPZF.js.map +1 -0
  152. package/package.json +16 -13
  153. package/skills/using-ghx/SKILL.md +61 -0
  154. package/dist/agent.d.ts +0 -32
  155. package/dist/agent.js +0 -36
  156. package/dist/agent.js.map +0 -1
  157. package/dist/cards/check_run.annotations.list.yaml +0 -35
  158. package/dist/cards/issue.assignees.update.yaml +0 -27
  159. package/dist/cards/issue.labels.update.yaml +0 -27
  160. package/dist/cards/pr.assignees.update.yaml +0 -38
  161. package/dist/cards/pr.checks.get_failed.yaml +0 -42
  162. package/dist/cards/pr.review.submit_comment.yaml +0 -26
  163. package/dist/cards/pr.review.submit_request_changes.yaml +0 -26
  164. package/dist/cards/workflow_run.jobs.list.yaml +0 -35
  165. package/dist/chunk-2FCPR3XZ.js +0 -54
  166. package/dist/chunk-2FCPR3XZ.js.map +0 -1
  167. package/dist/chunk-RDUPMVHG.js +0 -4139
  168. package/dist/chunk-RDUPMVHG.js.map +0 -1
  169. package/dist/chunk-UN5YHUNK.js +0 -245
  170. package/dist/chunk-UN5YHUNK.js.map +0 -1
  171. package/dist/cli/assets/skills/ghx/SKILL.md +0 -57
  172. package/dist/core/registry/cards/check_run.annotations.list.yaml +0 -35
  173. package/dist/core/registry/cards/issue.assignees.update.yaml +0 -27
  174. package/dist/core/registry/cards/issue.labels.update.yaml +0 -27
  175. package/dist/core/registry/cards/pr.assignees.update.yaml +0 -38
  176. package/dist/core/registry/cards/pr.checks.get_failed.yaml +0 -42
  177. package/dist/core/registry/cards/pr.review.submit_approve.yaml +0 -26
  178. package/dist/core/registry/cards/pr.review.submit_comment.yaml +0 -26
  179. package/dist/core/registry/cards/pr.review.submit_request_changes.yaml +0 -26
  180. package/dist/core/registry/cards/workflow_run.jobs.list.yaml +0 -35
  181. package/dist/envelope-BpF6MNCv.d.ts +0 -55
@@ -0,0 +1,228 @@
1
+ // src/gql/assertions.ts
2
+ function assertRepoInput(input) {
3
+ if (input.owner.trim().length === 0 || input.name.trim().length === 0) {
4
+ throw new Error("Repository owner and name are required");
5
+ }
6
+ }
7
+ function assertIssueInput(input) {
8
+ if (input.owner.trim().length === 0 || input.name.trim().length === 0) {
9
+ throw new Error("Repository owner and name are required");
10
+ }
11
+ if (!Number.isInteger(input.issueNumber) || input.issueNumber <= 0) {
12
+ throw new Error("Issue number must be a positive integer");
13
+ }
14
+ }
15
+ function assertIssueListInput(input) {
16
+ if (input.owner.trim().length === 0 || input.name.trim().length === 0) {
17
+ throw new Error("Repository owner and name are required");
18
+ }
19
+ if (!Number.isInteger(input.first) || input.first <= 0) {
20
+ throw new Error("List page size must be a positive integer");
21
+ }
22
+ }
23
+ function assertIssueCommentsListInput(input) {
24
+ if (input.owner.trim().length === 0 || input.name.trim().length === 0) {
25
+ throw new Error("Repository owner and name are required");
26
+ }
27
+ if (!Number.isInteger(input.issueNumber) || input.issueNumber <= 0) {
28
+ throw new Error("Issue number must be a positive integer");
29
+ }
30
+ if (!Number.isInteger(input.first) || input.first <= 0) {
31
+ throw new Error("List page size must be a positive integer");
32
+ }
33
+ if (input.after !== void 0 && input.after !== null && typeof input.after !== "string") {
34
+ throw new Error("After cursor must be a string");
35
+ }
36
+ }
37
+ function assertNonEmptyString(value, fieldName) {
38
+ if (typeof value !== "string" || value.trim().length === 0) {
39
+ throw new Error(`${fieldName} is required`);
40
+ }
41
+ return value;
42
+ }
43
+ function assertOptionalString(value, fieldName) {
44
+ if (value === void 0) {
45
+ return void 0;
46
+ }
47
+ if (typeof value !== "string") {
48
+ throw new Error(`${fieldName} must be a string`);
49
+ }
50
+ return value;
51
+ }
52
+ function assertStringArray(value, fieldName) {
53
+ if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string" || entry.trim().length === 0)) {
54
+ throw new Error(`${fieldName} must be an array of non-empty strings`);
55
+ }
56
+ return value;
57
+ }
58
+ function assertIssueCreateInput(input) {
59
+ assertRepoInput({ owner: input.owner, name: input.name });
60
+ assertNonEmptyString(input.title, "Issue title");
61
+ assertOptionalString(input.body, "Issue body");
62
+ }
63
+ function assertIssueUpdateInput(input) {
64
+ assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber });
65
+ if (input.title === void 0 && input.body === void 0) {
66
+ throw new Error("Issue update requires at least one field");
67
+ }
68
+ if (input.title !== void 0) {
69
+ assertOptionalString(input.title, "Issue title");
70
+ }
71
+ if (input.body !== void 0) {
72
+ assertOptionalString(input.body, "Issue body");
73
+ }
74
+ }
75
+ function assertIssueMutationInput(input) {
76
+ assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber });
77
+ }
78
+ function assertIssueLabelsUpdateInput(input) {
79
+ assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber });
80
+ assertStringArray(input.labels, "Labels");
81
+ }
82
+ function assertIssueLabelsAddInput(input) {
83
+ assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber });
84
+ assertStringArray(input.labels, "Labels");
85
+ }
86
+ function assertIssueAssigneesUpdateInput(input) {
87
+ assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber });
88
+ assertStringArray(input.assignees, "Assignees");
89
+ }
90
+ function assertIssueAssigneesAddInput(input) {
91
+ assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber });
92
+ assertStringArray(input.assignees, "Assignees");
93
+ }
94
+ function assertIssueAssigneesRemoveInput(input) {
95
+ assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber });
96
+ assertStringArray(input.assignees, "Assignees");
97
+ }
98
+ function assertIssueMilestoneSetInput(input) {
99
+ assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber });
100
+ if (!Number.isInteger(input.milestoneNumber) || input.milestoneNumber <= 0) {
101
+ throw new Error("Milestone number must be a positive integer");
102
+ }
103
+ }
104
+ function assertIssueCommentCreateInput(input) {
105
+ assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber });
106
+ assertNonEmptyString(input.body, "Issue comment body");
107
+ }
108
+ function assertIssueLinkedPrsListInput(input) {
109
+ assertIssueInput(input);
110
+ }
111
+ function assertIssueRelationsGetInput(input) {
112
+ assertIssueInput(input);
113
+ }
114
+ function assertIssueParentSetInput(input) {
115
+ assertNonEmptyString(input.issueId, "Issue id");
116
+ assertNonEmptyString(input.parentIssueId, "Parent issue id");
117
+ }
118
+ function assertIssueParentRemoveInput(input) {
119
+ assertNonEmptyString(input.issueId, "Issue id");
120
+ }
121
+ function assertIssueBlockedByInput(input) {
122
+ assertNonEmptyString(input.issueId, "Issue id");
123
+ assertNonEmptyString(input.blockedByIssueId, "Blocked-by issue id");
124
+ }
125
+ function assertPrInput(input) {
126
+ if (input.owner.trim().length === 0 || input.name.trim().length === 0) {
127
+ throw new Error("Repository owner and name are required");
128
+ }
129
+ if (!Number.isInteger(input.prNumber) || input.prNumber <= 0) {
130
+ throw new Error("PR number must be a positive integer");
131
+ }
132
+ }
133
+ function assertPrListInput(input) {
134
+ if (input.owner.trim().length === 0 || input.name.trim().length === 0) {
135
+ throw new Error("Repository owner and name are required");
136
+ }
137
+ if (!Number.isInteger(input.first) || input.first <= 0) {
138
+ throw new Error("List page size must be a positive integer");
139
+ }
140
+ }
141
+ function assertPrReviewsListInput(input) {
142
+ if (typeof input.owner !== "string" || typeof input.name !== "string" || input.owner.trim().length === 0 || input.name.trim().length === 0) {
143
+ throw new Error("Repository owner and name are required");
144
+ }
145
+ if (!Number.isInteger(input.prNumber) || input.prNumber <= 0) {
146
+ throw new Error("PR number must be a positive integer");
147
+ }
148
+ if (!Number.isInteger(input.first) || input.first <= 0) {
149
+ throw new Error("List page size must be a positive integer");
150
+ }
151
+ }
152
+ function assertPrDiffListFilesInput(input) {
153
+ if (typeof input.owner !== "string" || typeof input.name !== "string" || input.owner.trim().length === 0 || input.name.trim().length === 0) {
154
+ throw new Error("Repository owner and name are required");
155
+ }
156
+ if (!Number.isInteger(input.prNumber) || input.prNumber <= 0) {
157
+ throw new Error("PR number must be a positive integer");
158
+ }
159
+ if (!Number.isInteger(input.first) || input.first <= 0) {
160
+ throw new Error("List page size must be a positive integer");
161
+ }
162
+ }
163
+ function assertPrCommentsListInput(input) {
164
+ if (typeof input.owner !== "string" || typeof input.name !== "string" || input.owner.trim().length === 0 || input.name.trim().length === 0) {
165
+ throw new Error("Repository owner and name are required");
166
+ }
167
+ if (!Number.isInteger(input.prNumber) || input.prNumber <= 0) {
168
+ throw new Error("PR number must be a positive integer");
169
+ }
170
+ if (!Number.isInteger(input.first) || input.first <= 0) {
171
+ throw new Error("List page size must be a positive integer");
172
+ }
173
+ if (input.unresolvedOnly !== void 0 && typeof input.unresolvedOnly !== "boolean") {
174
+ throw new Error("unresolvedOnly must be a boolean");
175
+ }
176
+ if (input.includeOutdated !== void 0 && typeof input.includeOutdated !== "boolean") {
177
+ throw new Error("includeOutdated must be a boolean");
178
+ }
179
+ if (input.after !== void 0 && input.after !== null && typeof input.after !== "string") {
180
+ throw new Error("After cursor must be a string");
181
+ }
182
+ }
183
+ function asRecord(value) {
184
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
185
+ }
186
+ function assertReviewThreadInput(input) {
187
+ if (typeof input.threadId !== "string" || input.threadId.trim().length === 0) {
188
+ throw new Error("Review thread id is required");
189
+ }
190
+ }
191
+ function assertReplyToReviewThreadInput(input) {
192
+ assertReviewThreadInput(input);
193
+ if (typeof input.body !== "string" || input.body.trim().length === 0) {
194
+ throw new Error("Reply body is required");
195
+ }
196
+ }
197
+
198
+ export {
199
+ assertRepoInput,
200
+ assertIssueInput,
201
+ assertIssueListInput,
202
+ assertIssueCommentsListInput,
203
+ assertNonEmptyString,
204
+ assertIssueCreateInput,
205
+ assertIssueUpdateInput,
206
+ assertIssueMutationInput,
207
+ assertIssueLabelsUpdateInput,
208
+ assertIssueLabelsAddInput,
209
+ assertIssueAssigneesUpdateInput,
210
+ assertIssueAssigneesAddInput,
211
+ assertIssueAssigneesRemoveInput,
212
+ assertIssueMilestoneSetInput,
213
+ assertIssueCommentCreateInput,
214
+ assertIssueLinkedPrsListInput,
215
+ assertIssueRelationsGetInput,
216
+ assertIssueParentSetInput,
217
+ assertIssueParentRemoveInput,
218
+ assertIssueBlockedByInput,
219
+ assertPrInput,
220
+ assertPrListInput,
221
+ assertPrReviewsListInput,
222
+ assertPrDiffListFilesInput,
223
+ assertPrCommentsListInput,
224
+ asRecord,
225
+ assertReviewThreadInput,
226
+ assertReplyToReviewThreadInput
227
+ };
228
+ //# sourceMappingURL=chunk-BIWBJA2F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/assertions.ts"],"sourcesContent":["import type {\n IssueAssigneesAddInput,\n IssueAssigneesRemoveInput,\n IssueAssigneesUpdateInput,\n IssueBlockedByInput,\n IssueCommentCreateInput,\n IssueCommentsListInput,\n IssueCreateInput,\n IssueLabelsAddInput,\n IssueLabelsUpdateInput,\n IssueLinkedPrsListInput,\n IssueListInput,\n IssueMilestoneSetInput,\n IssueMutationInput,\n IssueParentRemoveInput,\n IssueParentSetInput,\n IssueRelationsGetInput,\n IssueUpdateInput,\n IssueViewInput,\n PrCommentsListInput,\n PrDiffListFilesInput,\n PrListInput,\n PrReviewsListInput,\n PrViewInput,\n ReplyToReviewThreadInput,\n RepoViewInput,\n ReviewThreadMutationInput,\n} from \"./types.js\"\n\nexport function assertRepoInput(input: RepoViewInput): void {\n if (input.owner.trim().length === 0 || input.name.trim().length === 0) {\n throw new Error(\"Repository owner and name are required\")\n }\n}\n\nexport function assertIssueInput(input: IssueViewInput): void {\n if (input.owner.trim().length === 0 || input.name.trim().length === 0) {\n throw new Error(\"Repository owner and name are required\")\n }\n if (!Number.isInteger(input.issueNumber) || input.issueNumber <= 0) {\n throw new Error(\"Issue number must be a positive integer\")\n }\n}\n\nexport function assertIssueListInput(input: IssueListInput): void {\n if (input.owner.trim().length === 0 || input.name.trim().length === 0) {\n throw new Error(\"Repository owner and name are required\")\n }\n if (!Number.isInteger(input.first) || input.first <= 0) {\n throw new Error(\"List page size must be a positive integer\")\n }\n}\n\nexport function assertIssueCommentsListInput(input: IssueCommentsListInput): void {\n if (input.owner.trim().length === 0 || input.name.trim().length === 0) {\n throw new Error(\"Repository owner and name are required\")\n }\n if (!Number.isInteger(input.issueNumber) || input.issueNumber <= 0) {\n throw new Error(\"Issue number must be a positive integer\")\n }\n if (!Number.isInteger(input.first) || input.first <= 0) {\n throw new Error(\"List page size must be a positive integer\")\n }\n if (input.after !== undefined && input.after !== null && typeof input.after !== \"string\") {\n throw new Error(\"After cursor must be a string\")\n }\n}\n\nexport function assertNonEmptyString(value: unknown, fieldName: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`${fieldName} is required`)\n }\n\n return value\n}\n\nexport function assertOptionalString(value: unknown, fieldName: string): string | undefined {\n if (value === undefined) {\n return undefined\n }\n\n if (typeof value !== \"string\") {\n throw new Error(`${fieldName} must be a string`)\n }\n\n return value\n}\n\nexport function assertStringArray(value: unknown, fieldName: string): string[] {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.trim().length === 0)\n ) {\n throw new Error(`${fieldName} must be an array of non-empty strings`)\n }\n\n return value\n}\n\nexport function assertIssueCreateInput(input: IssueCreateInput): void {\n assertRepoInput({ owner: input.owner, name: input.name })\n assertNonEmptyString(input.title, \"Issue title\")\n assertOptionalString(input.body, \"Issue body\")\n}\n\nexport function assertIssueUpdateInput(input: IssueUpdateInput): void {\n assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber })\n if (input.title === undefined && input.body === undefined) {\n throw new Error(\"Issue update requires at least one field\")\n }\n if (input.title !== undefined) {\n assertOptionalString(input.title, \"Issue title\")\n }\n if (input.body !== undefined) {\n assertOptionalString(input.body, \"Issue body\")\n }\n}\n\nexport function assertIssueMutationInput(input: IssueMutationInput): void {\n assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber })\n}\n\nexport function assertIssueLabelsUpdateInput(input: IssueLabelsUpdateInput): void {\n assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber })\n assertStringArray(input.labels, \"Labels\")\n}\n\nexport function assertIssueLabelsAddInput(input: IssueLabelsAddInput): void {\n assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber })\n assertStringArray(input.labels, \"Labels\")\n}\n\nexport function assertIssueAssigneesUpdateInput(input: IssueAssigneesUpdateInput): void {\n assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber })\n assertStringArray(input.assignees, \"Assignees\")\n}\n\nexport function assertIssueAssigneesAddInput(input: IssueAssigneesAddInput): void {\n assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber })\n assertStringArray(input.assignees, \"Assignees\")\n}\n\nexport function assertIssueAssigneesRemoveInput(input: IssueAssigneesRemoveInput): void {\n assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber })\n assertStringArray(input.assignees, \"Assignees\")\n}\n\nexport function assertIssueMilestoneSetInput(input: IssueMilestoneSetInput): void {\n assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber })\n if (!Number.isInteger(input.milestoneNumber) || input.milestoneNumber <= 0) {\n throw new Error(\"Milestone number must be a positive integer\")\n }\n}\n\nexport function assertIssueCommentCreateInput(input: IssueCommentCreateInput): void {\n assertIssueInput({ owner: input.owner, name: input.name, issueNumber: input.issueNumber })\n assertNonEmptyString(input.body, \"Issue comment body\")\n}\n\nexport function assertIssueLinkedPrsListInput(input: IssueLinkedPrsListInput): void {\n assertIssueInput(input)\n}\n\nexport function assertIssueRelationsGetInput(input: IssueRelationsGetInput): void {\n assertIssueInput(input)\n}\n\nexport function assertIssueParentSetInput(input: IssueParentSetInput): void {\n assertNonEmptyString(input.issueId, \"Issue id\")\n assertNonEmptyString(input.parentIssueId, \"Parent issue id\")\n}\n\nexport function assertIssueParentRemoveInput(input: IssueParentRemoveInput): void {\n assertNonEmptyString(input.issueId, \"Issue id\")\n}\n\nexport function assertIssueBlockedByInput(input: IssueBlockedByInput): void {\n assertNonEmptyString(input.issueId, \"Issue id\")\n assertNonEmptyString(input.blockedByIssueId, \"Blocked-by issue id\")\n}\n\nexport function assertPrInput(input: PrViewInput): void {\n if (input.owner.trim().length === 0 || input.name.trim().length === 0) {\n throw new Error(\"Repository owner and name are required\")\n }\n if (!Number.isInteger(input.prNumber) || input.prNumber <= 0) {\n throw new Error(\"PR number must be a positive integer\")\n }\n}\n\nexport function assertPrListInput(input: PrListInput): void {\n if (input.owner.trim().length === 0 || input.name.trim().length === 0) {\n throw new Error(\"Repository owner and name are required\")\n }\n if (!Number.isInteger(input.first) || input.first <= 0) {\n throw new Error(\"List page size must be a positive integer\")\n }\n}\n\nexport function assertPrReviewsListInput(input: PrReviewsListInput): void {\n if (\n typeof input.owner !== \"string\" ||\n typeof input.name !== \"string\" ||\n input.owner.trim().length === 0 ||\n input.name.trim().length === 0\n ) {\n throw new Error(\"Repository owner and name are required\")\n }\n if (!Number.isInteger(input.prNumber) || input.prNumber <= 0) {\n throw new Error(\"PR number must be a positive integer\")\n }\n if (!Number.isInteger(input.first) || input.first <= 0) {\n throw new Error(\"List page size must be a positive integer\")\n }\n}\n\nexport function assertPrDiffListFilesInput(input: PrDiffListFilesInput): void {\n if (\n typeof input.owner !== \"string\" ||\n typeof input.name !== \"string\" ||\n input.owner.trim().length === 0 ||\n input.name.trim().length === 0\n ) {\n throw new Error(\"Repository owner and name are required\")\n }\n if (!Number.isInteger(input.prNumber) || input.prNumber <= 0) {\n throw new Error(\"PR number must be a positive integer\")\n }\n if (!Number.isInteger(input.first) || input.first <= 0) {\n throw new Error(\"List page size must be a positive integer\")\n }\n}\n\nexport function assertPrCommentsListInput(input: PrCommentsListInput): void {\n if (\n typeof input.owner !== \"string\" ||\n typeof input.name !== \"string\" ||\n input.owner.trim().length === 0 ||\n input.name.trim().length === 0\n ) {\n throw new Error(\"Repository owner and name are required\")\n }\n if (!Number.isInteger(input.prNumber) || input.prNumber <= 0) {\n throw new Error(\"PR number must be a positive integer\")\n }\n if (!Number.isInteger(input.first) || input.first <= 0) {\n throw new Error(\"List page size must be a positive integer\")\n }\n if (input.unresolvedOnly !== undefined && typeof input.unresolvedOnly !== \"boolean\") {\n throw new Error(\"unresolvedOnly must be a boolean\")\n }\n if (input.includeOutdated !== undefined && typeof input.includeOutdated !== \"boolean\") {\n throw new Error(\"includeOutdated must be a boolean\")\n }\n if (input.after !== undefined && input.after !== null && typeof input.after !== \"string\") {\n throw new Error(\"After cursor must be a string\")\n }\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null\n}\n\nexport function assertReviewThreadInput(input: ReviewThreadMutationInput): void {\n if (typeof input.threadId !== \"string\" || input.threadId.trim().length === 0) {\n throw new Error(\"Review thread id is required\")\n }\n}\n\nexport function assertReplyToReviewThreadInput(input: ReplyToReviewThreadInput): void {\n assertReviewThreadInput(input)\n if (typeof input.body !== \"string\" || input.body.trim().length === 0) {\n throw new Error(\"Reply body is required\")\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,121 @@
1
+ // src/gql/transport.ts
2
+ import { print } from "graphql";
3
+ function queryToString(query) {
4
+ if (typeof query === "string") {
5
+ return query;
6
+ }
7
+ if (typeof query === "object" && query !== null && "kind" in query) {
8
+ return print(query);
9
+ }
10
+ return String(query);
11
+ }
12
+ function assertQuery(query) {
13
+ if (query.trim().length === 0) {
14
+ throw new Error("GraphQL query must be non-empty");
15
+ }
16
+ }
17
+ function createGraphqlClient(transport) {
18
+ return {
19
+ async query(query, variables) {
20
+ const queryText = queryToString(query);
21
+ assertQuery(queryText);
22
+ return transport.execute(queryText, variables);
23
+ },
24
+ async queryRaw(query, variables) {
25
+ const queryText = queryToString(query);
26
+ assertQuery(queryText);
27
+ try {
28
+ if (transport.executeRaw) {
29
+ return await transport.executeRaw(queryText, variables);
30
+ }
31
+ const data = await transport.execute(queryText, variables);
32
+ return { data, errors: void 0 };
33
+ } catch (err) {
34
+ return {
35
+ data: void 0,
36
+ errors: [{ message: err instanceof Error ? err.message : String(err) }]
37
+ };
38
+ }
39
+ }
40
+ };
41
+ }
42
+ function createGraphqlRequestClient(transport) {
43
+ const client = {
44
+ request(documentOrOptions, ...variablesAndRequestHeaders) {
45
+ const options = typeof documentOrOptions === "object" && documentOrOptions !== null && "document" in documentOrOptions ? documentOrOptions : {
46
+ document: documentOrOptions,
47
+ variables: variablesAndRequestHeaders[0]
48
+ };
49
+ const queryText = queryToString(options.document);
50
+ assertQuery(queryText);
51
+ return transport.execute(queryText, options.variables);
52
+ }
53
+ };
54
+ return client;
55
+ }
56
+ var DEFAULT_GRAPHQL_URL = "https://api.github.com/graphql";
57
+ function resolveGraphqlUrl() {
58
+ if (process.env.GITHUB_GRAPHQL_URL) {
59
+ return process.env.GITHUB_GRAPHQL_URL;
60
+ }
61
+ if (process.env.GH_HOST) {
62
+ return `https://${process.env.GH_HOST}/api/graphql`;
63
+ }
64
+ return DEFAULT_GRAPHQL_URL;
65
+ }
66
+ async function fetchGraphql(url, token, query, variables) {
67
+ const response = await fetch(url, {
68
+ method: "POST",
69
+ headers: {
70
+ "content-type": "application/json",
71
+ authorization: `Bearer ${token}`
72
+ },
73
+ body: JSON.stringify({ query, variables: variables ?? {} })
74
+ });
75
+ if (!response.ok) {
76
+ let message = `GraphQL request failed (${response.status})`;
77
+ try {
78
+ const body = await response.json();
79
+ if (body.message) {
80
+ message = body.message;
81
+ }
82
+ } catch {
83
+ }
84
+ throw new Error(message);
85
+ }
86
+ try {
87
+ return await response.json();
88
+ } catch {
89
+ throw new Error(`GraphQL response is not valid JSON (${response.status})`);
90
+ }
91
+ }
92
+ function createTokenTransport(token, graphqlUrl) {
93
+ const url = graphqlUrl ?? resolveGraphqlUrl();
94
+ return {
95
+ async execute(query, variables) {
96
+ const payload = await fetchGraphql(url, token, query, variables);
97
+ if (payload.errors?.length) {
98
+ throw new Error(payload.errors[0]?.message ?? "GraphQL returned errors");
99
+ }
100
+ if (payload.data === void 0) {
101
+ throw new Error("GraphQL response missing data");
102
+ }
103
+ return payload.data;
104
+ },
105
+ async executeRaw(query, variables) {
106
+ const payload = await fetchGraphql(url, token, query, variables);
107
+ return {
108
+ data: payload.data,
109
+ errors: payload.errors?.length ? payload.errors : void 0
110
+ };
111
+ }
112
+ };
113
+ }
114
+
115
+ export {
116
+ createGraphqlClient,
117
+ createGraphqlRequestClient,
118
+ resolveGraphqlUrl,
119
+ createTokenTransport
120
+ };
121
+ //# sourceMappingURL=chunk-HEHONZTO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/transport.ts"],"sourcesContent":["import { type DocumentNode, print } from \"graphql\"\nimport type { GraphQLClient, RequestDocument, RequestOptions } from \"graphql-request\"\n\nexport type GraphqlVariables = Record<string, unknown>\n\nexport type GraphqlError = {\n message: string\n path?: ReadonlyArray<string | number>\n extensions?: Record<string, unknown>\n}\n\nexport type GraphqlRawResult<TData> = {\n data: TData | undefined\n errors: GraphqlError[] | undefined\n}\n\ntype GraphqlDocument = string | DocumentNode\ntype QueryLike = GraphqlDocument | RequestDocument\n\nexport interface GraphqlTransport {\n execute<TData>(query: string, variables?: GraphqlVariables): Promise<TData>\n executeRaw?<TData>(query: string, variables?: GraphqlVariables): Promise<GraphqlRawResult<TData>>\n}\n\nexport interface GraphqlClient {\n query<TData, TVariables extends GraphqlVariables = GraphqlVariables>(\n query: GraphqlDocument,\n variables?: TVariables,\n ): Promise<TData>\n queryRaw<TData, TVariables extends GraphqlVariables = GraphqlVariables>(\n query: GraphqlDocument,\n variables?: TVariables,\n ): Promise<GraphqlRawResult<TData>>\n}\n\nexport type TokenClientOptions = {\n token: string\n graphqlUrl?: string\n}\n\nfunction queryToString(query: QueryLike): string {\n if (typeof query === \"string\") {\n return query\n }\n\n if (typeof query === \"object\" && query !== null && \"kind\" in query) {\n return print(query as DocumentNode)\n }\n\n return String(query)\n}\n\nfunction assertQuery(query: string): void {\n if (query.trim().length === 0) {\n throw new Error(\"GraphQL query must be non-empty\")\n }\n}\n\nexport function createGraphqlClient(transport: GraphqlTransport): GraphqlClient {\n return {\n async query<TData, TVariables extends GraphqlVariables = GraphqlVariables>(\n query: GraphqlDocument,\n variables?: TVariables,\n ): Promise<TData> {\n const queryText = queryToString(query)\n assertQuery(queryText)\n return transport.execute<TData>(queryText, variables)\n },\n async queryRaw<TData, TVariables extends GraphqlVariables = GraphqlVariables>(\n query: GraphqlDocument,\n variables?: TVariables,\n ): Promise<GraphqlRawResult<TData>> {\n const queryText = queryToString(query)\n assertQuery(queryText)\n // Both paths normalize transport-level errors into settled results\n try {\n if (transport.executeRaw) {\n return await transport.executeRaw<TData>(queryText, variables)\n }\n const data = await transport.execute<TData>(queryText, variables)\n return { data, errors: undefined }\n } catch (err) {\n return {\n data: undefined,\n errors: [{ message: err instanceof Error ? err.message : String(err) }],\n }\n }\n },\n }\n}\n\nexport function createGraphqlRequestClient(transport: GraphqlTransport): GraphQLClient {\n const client: Pick<GraphQLClient, \"request\"> = {\n request<TData, TVariables extends object = object>(\n documentOrOptions: RequestDocument | RequestOptions<TVariables, TData>,\n ...variablesAndRequestHeaders: unknown[]\n ): Promise<TData> {\n const options =\n typeof documentOrOptions === \"object\" &&\n documentOrOptions !== null &&\n \"document\" in documentOrOptions\n ? documentOrOptions\n : {\n document: documentOrOptions,\n variables: variablesAndRequestHeaders[0] as TVariables | undefined,\n }\n\n const queryText = queryToString(options.document)\n assertQuery(queryText)\n return transport.execute<TData>(queryText, options.variables as GraphqlVariables)\n },\n }\n\n return client as GraphQLClient\n}\n\nconst DEFAULT_GRAPHQL_URL = \"https://api.github.com/graphql\"\n\nexport function resolveGraphqlUrl(): string {\n if (process.env.GITHUB_GRAPHQL_URL) {\n return process.env.GITHUB_GRAPHQL_URL\n }\n\n if (process.env.GH_HOST) {\n return `https://${process.env.GH_HOST}/api/graphql`\n }\n\n return DEFAULT_GRAPHQL_URL\n}\n\ntype JsonPayload<TData> = {\n data?: TData\n errors?: GraphqlError[]\n message?: string\n}\n\nasync function fetchGraphql<TData>(\n url: string,\n token: string,\n query: string,\n variables?: GraphqlVariables,\n): Promise<JsonPayload<TData>> {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ query, variables: variables ?? {} }),\n })\n\n if (!response.ok) {\n let message = `GraphQL request failed (${response.status})`\n try {\n const body = (await response.json()) as JsonPayload<TData>\n if (body.message) {\n message = body.message\n }\n } catch {\n // Non-JSON error body — use status-based message\n }\n throw new Error(message)\n }\n\n try {\n return (await response.json()) as JsonPayload<TData>\n } catch {\n throw new Error(`GraphQL response is not valid JSON (${response.status})`)\n }\n}\n\nexport function createTokenTransport(token: string, graphqlUrl?: string): GraphqlTransport {\n const url = graphqlUrl ?? resolveGraphqlUrl()\n\n return {\n async execute<TData>(query: string, variables?: GraphqlVariables): Promise<TData> {\n const payload = await fetchGraphql<TData>(url, token, query, variables)\n\n if (payload.errors?.length) {\n throw new Error(payload.errors[0]?.message ?? \"GraphQL returned errors\")\n }\n\n if (payload.data === undefined) {\n throw new Error(\"GraphQL response missing data\")\n }\n\n return payload.data\n },\n\n async executeRaw<TData>(\n query: string,\n variables?: GraphqlVariables,\n ): Promise<GraphqlRawResult<TData>> {\n const payload = await fetchGraphql<TData>(url, token, query, variables)\n return {\n data: payload.data,\n errors: payload.errors?.length ? payload.errors : undefined,\n }\n },\n }\n}\n"],"mappings":"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","names":[]}