@hardlydifficult/pr-analyzer 1.0.141 → 1.0.143
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.
- package/README.md +99 -163
- package/dist/actions.d.ts +2 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js.map +1 -1
- package/dist/analysis.d.ts +4 -4
- package/dist/analysis.d.ts.map +1 -1
- package/dist/analysis.js +17 -15
- package/dist/analysis.js.map +1 -1
- package/dist/classification.d.ts +1 -1
- package/dist/classification.d.ts.map +1 -1
- package/dist/classification.js.map +1 -1
- package/dist/createPRAnalyzer.d.ts +33 -0
- package/dist/createPRAnalyzer.d.ts.map +1 -0
- package/dist/createPRAnalyzer.js +131 -0
- package/dist/createPRAnalyzer.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +29 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/workflow.d.ts +2 -3
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +1 -2
- package/dist/workflow.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# @hardlydifficult/pr-analyzer
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Opinionated pull request analysis for the way we actually use it.
|
|
4
|
+
|
|
5
|
+
Configure it once, then work with PR numbers, PR refs, or "my open PRs" directly. Results already include status buckets and available actions, so client code stays small and expressive.
|
|
4
6
|
|
|
5
7
|
## Installation
|
|
6
8
|
|
|
@@ -12,201 +14,135 @@ npm install @hardlydifficult/pr-analyzer
|
|
|
12
14
|
|
|
13
15
|
```typescript
|
|
14
16
|
import { GitHubClient } from "@hardlydifficult/github";
|
|
15
|
-
import {
|
|
17
|
+
import { createPRAnalyzer } from "@hardlydifficult/pr-analyzer";
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
const client = new GitHubClient({ token: "ghp_..." });
|
|
19
|
+
const client = new GitHubClient({ token: process.env.GITHUB_TOKEN });
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
const pr = await scanSinglePR(
|
|
21
|
+
const prs = createPRAnalyzer({
|
|
22
22
|
client,
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
"repo",
|
|
26
|
-
123
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
// Check status and available actions
|
|
30
|
-
console.log(pr.status); // "ready_to_merge"
|
|
31
|
-
console.log(pr.ciSummary); // "CI passed: 3 checks"
|
|
32
|
-
|
|
33
|
-
import { getAvailableActions } from "@hardlydifficult/pr-analyzer";
|
|
34
|
-
const actions = getAvailableActions(pr);
|
|
35
|
-
// actions = [{ type: "merge", label: "Merge", description: "Squash and merge this PR" }]
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Core Features
|
|
39
|
-
|
|
40
|
-
### Scanning and Analyzing PRs
|
|
41
|
-
|
|
42
|
-
#### `analyzePR`
|
|
43
|
-
|
|
44
|
-
Analyzes a single PR and returns its full status.
|
|
45
|
-
|
|
46
|
-
```typescript
|
|
47
|
-
import { analyzePR, analyzeAll } from "@hardlydifficult/pr-analyzer";
|
|
48
|
-
|
|
49
|
-
const pr = await client.pr("owner/repo#123").details();
|
|
50
|
-
const scanned = await analyzePR(client, "owner", "repo", pr, "@bot");
|
|
51
|
-
|
|
52
|
-
scanned.status; // "ready_to_merge"
|
|
53
|
-
scanned.hasConflicts; // false
|
|
54
|
-
scanned.daysSinceUpdate; // 2
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
#### `analyzeAll`
|
|
58
|
-
|
|
59
|
-
Analyzes multiple PRs in parallel, logging failures.
|
|
60
|
-
|
|
61
|
-
```typescript
|
|
62
|
-
import type { DiscoveredPR } from "@hardlydifficult/pr-analyzer";
|
|
63
|
-
|
|
64
|
-
const prs: readonly DiscoveredPR[] = [
|
|
65
|
-
{ pr: pr1, repoOwner: "owner", repoName: "repo" },
|
|
66
|
-
{ pr: pr2, repoOwner: "owner", repoName: "repo" },
|
|
67
|
-
];
|
|
68
|
-
|
|
69
|
-
const results = await analyzeAll(prs, client, "@bot");
|
|
70
|
-
// results = [scannedPR1, scannedPR2]
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
#### `scanSinglePR`
|
|
74
|
-
|
|
75
|
-
Scans a single PR directly by repo and number (real-time event handling).
|
|
23
|
+
repo: "owner/repo",
|
|
24
|
+
});
|
|
76
25
|
|
|
77
|
-
|
|
78
|
-
|
|
26
|
+
const pr = await prs.analyze(123);
|
|
27
|
+
pr.status; // "ready_to_merge"
|
|
28
|
+
pr.actions; // [{ type: "merge", label: "Merge", ... }]
|
|
79
29
|
|
|
80
|
-
const
|
|
30
|
+
const inbox = await prs.mine();
|
|
31
|
+
inbox.readyForHuman.map((item) => item.pr.number);
|
|
81
32
|
```
|
|
82
33
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
PRs are classified into core statuses based on priority:
|
|
86
|
-
|
|
87
|
-
1. `draft` — PR is a draft
|
|
88
|
-
2. `ci_running` — CI checks are in progress
|
|
89
|
-
3. `ci_failed` — At least one CI check failed
|
|
90
|
-
4. `has_conflicts` — PR has merge conflicts
|
|
91
|
-
5. `waiting_on_bot` — A bot was mentioned and hasn’t responded
|
|
92
|
-
6. `changes_requested` — A reviewer requested changes
|
|
93
|
-
7. `ready_to_merge` — CI passed and no conflicts
|
|
94
|
-
8. `approved` — PR approved (but not all CI passed)
|
|
95
|
-
9. `needs_review` — No reviews or approvals yet
|
|
96
|
-
|
|
97
|
-
Extensions via `AnalyzerHooks.resolveStatus` allow custom statuses.
|
|
98
|
-
|
|
99
|
-
```typescript
|
|
100
|
-
const hooks = {
|
|
101
|
-
resolveStatus: (coreStatus, details) => {
|
|
102
|
-
if (coreStatus === "ci_failed" && details.checks.some(c => c.name === "CI")) {
|
|
103
|
-
return "ai_processing";
|
|
104
|
-
}
|
|
105
|
-
return undefined; // keep core status
|
|
106
|
-
},
|
|
107
|
-
};
|
|
34
|
+
## Why This API
|
|
108
35
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
36
|
+
- `repo` is configured once, so normal usage can just say `analyze(123)`.
|
|
37
|
+
- `bot` defaults to `@cursor`, because that is the common case.
|
|
38
|
+
- `analyze()` always returns an `ActionablePR`, so UI code does not need a second `getAvailableActions()` pass.
|
|
39
|
+
- `inbox()` and `mine()` return already-bucketed results for human review, bot bumps, in-progress work, and blocked PRs.
|
|
40
|
+
- `analyzeMany()` runs in parallel and skips failures instead of failing the whole batch.
|
|
112
41
|
|
|
113
|
-
|
|
42
|
+
## Main API
|
|
114
43
|
|
|
115
|
-
|
|
44
|
+
### `createPRAnalyzer(config)`
|
|
116
45
|
|
|
117
46
|
```typescript
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
result.inProgress; // PRs with CI running
|
|
124
|
-
result.blocked; // PRs stalled (draft, failed CI, conflicts)
|
|
47
|
+
const prs = createPRAnalyzer({
|
|
48
|
+
client,
|
|
49
|
+
repo: "owner/repo",
|
|
50
|
+
bot: "@cursor",
|
|
51
|
+
});
|
|
125
52
|
```
|
|
126
53
|
|
|
127
|
-
|
|
54
|
+
Config:
|
|
128
55
|
|
|
129
|
-
|
|
56
|
+
- `client`: GitHub client with `repo(...).pr(...).snapshot()` support.
|
|
57
|
+
- `repo`: optional default repo. Required only if you want to analyze bare PR numbers.
|
|
58
|
+
- `bot`: optional bot mention. Defaults to `@cursor`.
|
|
59
|
+
- `hooks`: optional status override hook.
|
|
60
|
+
- `classify`: optional custom status buckets.
|
|
61
|
+
- `actions`: optional extra actions.
|
|
62
|
+
- `actionContext`: optional flags passed to extra actions.
|
|
63
|
+
- `logger`: optional logger used when bulk analysis skips failures.
|
|
130
64
|
|
|
131
|
-
|
|
132
|
-
const config = {
|
|
133
|
-
readyForHuman: ["custom_status"],
|
|
134
|
-
inProgress: ["ai_processing"],
|
|
135
|
-
blocked: ["custom_blocked"],
|
|
136
|
-
needsBotBump: ["custom_waiting"],
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
const result = classifyPRs(prs, config);
|
|
140
|
-
```
|
|
65
|
+
Methods:
|
|
141
66
|
|
|
142
|
-
|
|
67
|
+
- `analyze(ref)`: analyze one PR and return an `ActionablePR`.
|
|
68
|
+
- `analyzeMany(refs)`: analyze many PRs in parallel.
|
|
69
|
+
- `inbox(refs)`: analyze and bucket a set of PRs.
|
|
70
|
+
- `mine()`: fetch and bucket your open PRs, optionally filtered to the configured repo.
|
|
71
|
+
- `classify(prs)`: bucket already-scanned PRs using this analyzer's defaults.
|
|
72
|
+
- `actionsFor(pr)`: compute actions for one scanned PR.
|
|
143
73
|
|
|
144
|
-
|
|
74
|
+
Accepted refs:
|
|
145
75
|
|
|
146
|
-
|
|
76
|
+
- `123` when `repo` is configured
|
|
77
|
+
- `"owner/repo#123"`
|
|
78
|
+
- GitHub PR URL
|
|
79
|
+
- raw `PullRequest`
|
|
80
|
+
- `DiscoveredPR`
|
|
147
81
|
|
|
148
|
-
|
|
149
|
-
- `mark_ready` — Available for `draft` when CI passed and no conflicts
|
|
150
|
-
- `enable_auto_merge` — Available for `ci_running`, `needs_review` when PR is not draft, not merged, no conflicts
|
|
82
|
+
## Custom Statuses And Actions
|
|
151
83
|
|
|
152
84
|
```typescript
|
|
153
|
-
import {
|
|
85
|
+
import { createPRAnalyzer } from "@hardlydifficult/pr-analyzer";
|
|
154
86
|
|
|
155
|
-
const
|
|
156
|
-
|
|
87
|
+
const prs = createPRAnalyzer({
|
|
88
|
+
client,
|
|
89
|
+
repo: "owner/repo",
|
|
90
|
+
hooks: {
|
|
91
|
+
resolveStatus: (coreStatus, details) => {
|
|
92
|
+
if (
|
|
93
|
+
coreStatus === "ci_failed" &&
|
|
94
|
+
details.checks.some((check) => check.name === "Cursor")
|
|
95
|
+
) {
|
|
96
|
+
return "ai_processing";
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
classify: {
|
|
102
|
+
inProgress: ["ai_processing"],
|
|
103
|
+
},
|
|
104
|
+
actions: [
|
|
105
|
+
{
|
|
106
|
+
type: "fix_ci",
|
|
107
|
+
label: "Fix CI",
|
|
108
|
+
description: "Ask @cursor to repair CI",
|
|
109
|
+
when: (pr, flags) => pr.status === "ci_failed" && flags.work === true,
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
actionContext: {
|
|
113
|
+
work: true,
|
|
114
|
+
},
|
|
115
|
+
});
|
|
157
116
|
```
|
|
158
117
|
|
|
159
|
-
|
|
118
|
+
## Result Shapes
|
|
160
119
|
|
|
161
|
-
|
|
120
|
+
`ActionablePR` extends `ScannedPR` with:
|
|
162
121
|
|
|
163
122
|
```typescript
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
type: "fix_ci",
|
|
168
|
-
label: "Fix CI",
|
|
169
|
-
description: "Post @cursor fix CI comment",
|
|
170
|
-
when: (pr, ctx) => pr.status === "ci_failed" && ctx["isWorkPR"] === true,
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
const actions = getAvailableActions(pr, [fixCiAction], { isWorkPR: true });
|
|
123
|
+
{
|
|
124
|
+
actions: readonly PRActionDescriptor[];
|
|
125
|
+
}
|
|
174
126
|
```
|
|
175
127
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
| Type | Description |
|
|
179
|
-
|------|-------------|
|
|
180
|
-
| `ScannedPR` | A fully analyzed PR with status, CI summary, and metadata |
|
|
181
|
-
| `ScanResult` | Classified PR buckets: `all`, `readyForHuman`, `needsBotBump`, `inProgress`, `blocked` |
|
|
182
|
-
| `AnalyzerHooks` | Custom logic hook: `resolveStatus(coreStatus, details)` |
|
|
183
|
-
| `ClassificationConfig` | Extend status buckets with custom statuses |
|
|
184
|
-
| `ActionDefinition` | Define custom actions with conditional logic |
|
|
185
|
-
| `CorePRStatus` | Core PR status enum (`draft`, `ci_running`, etc.) |
|
|
186
|
-
| `CIStatus` | CI analysis: `isRunning`, `hasFailed`, `allPassed`, `summary` |
|
|
187
|
-
| `Logger` | Logging interface (`info`, `error`) |
|
|
188
|
-
|
|
189
|
-
## Appendix
|
|
128
|
+
`PRInbox` contains:
|
|
190
129
|
|
|
191
|
-
|
|
130
|
+
- `all`
|
|
131
|
+
- `readyForHuman`
|
|
132
|
+
- `needsBotBump`
|
|
133
|
+
- `inProgress`
|
|
134
|
+
- `blocked`
|
|
192
135
|
|
|
193
|
-
|
|
136
|
+
Each bucket contains `ActionablePR` items.
|
|
194
137
|
|
|
195
|
-
|
|
196
|
-
2. CI running → `"ci_running"`
|
|
197
|
-
3. CI failed → `"ci_failed"`
|
|
198
|
-
4. Merge conflicts → `"has_conflicts"`
|
|
199
|
-
5. Waiting on bot → `"waiting_on_bot"`
|
|
200
|
-
6. Changes requested → `"changes_requested"`
|
|
201
|
-
7. CI passed and no conflicts → `"ready_to_merge"`
|
|
202
|
-
8. At least one approval → `"approved"`
|
|
203
|
-
9. Default → `"needs_review"`
|
|
138
|
+
## Low-Level Helpers
|
|
204
139
|
|
|
205
|
-
|
|
140
|
+
The package still exports the smaller building blocks when you want them:
|
|
206
141
|
|
|
207
|
-
-
|
|
208
|
-
-
|
|
209
|
-
-
|
|
210
|
-
-
|
|
142
|
+
- `analyzePR(client, owner, repo, prOrNumber, botMention, hooks?)`
|
|
143
|
+
- `analyzeAll(prs, client, botMention, logger?, hooks?)`
|
|
144
|
+
- `scanSinglePR(client, botMention, owner, repo, prNumber, hooks?)`
|
|
145
|
+
- `classifyPRs(prs, config?)`
|
|
146
|
+
- `getAvailableActions(pr, extraActions?, actionContext?)`
|
|
211
147
|
|
|
212
|
-
|
|
148
|
+
Use these when you need to plug the analyzer into an existing flow. Use `createPRAnalyzer()` when you want the cleanest client code.
|
package/dist/actions.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Consumers can provide extra actions via ActionDefinition[].
|
|
9
9
|
*/
|
|
10
|
-
import type { ActionDefinition, ScannedPR } from "./types.js";
|
|
10
|
+
import type { ActionContext, ActionDefinition, ScannedPR } from "./types.js";
|
|
11
11
|
/**
|
|
12
12
|
* Core action types built into the package.
|
|
13
13
|
* Consumers can define additional action types via ActionDefinition.
|
|
@@ -34,5 +34,5 @@ export declare const PR_ACTIONS: Record<CorePRActionType, Omit<PRActionDescripto
|
|
|
34
34
|
* @param context - Key-value context for evaluating extra action conditions
|
|
35
35
|
* @returns Array of available action descriptors
|
|
36
36
|
*/
|
|
37
|
-
export declare function getAvailableActions(pr: ScannedPR, extraActions?: readonly ActionDefinition[], context?:
|
|
37
|
+
export declare function getAvailableActions(pr: ScannedPR, extraActions?: readonly ActionDefinition[], context?: ActionContext): PRActionDescriptor[];
|
|
38
38
|
//# sourceMappingURL=actions.d.ts.map
|
package/dist/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7E;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,YAAY,GAAG,mBAAmB,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAC7B,gBAAgB,EAChB,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAWjC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,SAAS,EACb,YAAY,CAAC,EAAE,SAAS,gBAAgB,EAAE,EAC1C,OAAO,CAAC,EAAE,aAAa,GACtB,kBAAkB,EAAE,CA2CtB"}
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AA8CH,kDA+CC;AAzED;;GAEG;AACU,QAAA,UAAU,GAGnB;IACF,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE;IAClE,UAAU,EAAE;QACV,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,wCAAwC;KACtD;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,2CAA2C;KACzD;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CACjC,EAAa,EACb,YAA0C,EAC1C,
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AA8CH,kDA+CC;AAzED;;GAEG;AACU,QAAA,UAAU,GAGnB;IACF,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE;IAClE,UAAU,EAAE;QACV,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,wCAAwC;KACtD;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,2CAA2C;KACzD;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CACjC,EAAa,EACb,YAA0C,EAC1C,OAAuB;IAEvB,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAEtB,+BAA+B;IAC/B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,gBAAgB,CAAC;QACtB,KAAK,UAAU;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,kBAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YACrD,MAAM;QACR,KAAK,OAAO;YACV,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,kBAAU,CAAC,UAAU,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,MAAM;QACR,KAAK,YAAY,CAAC;QAClB,KAAK,cAAc;YACjB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,mBAAmB;oBACzB,GAAG,kBAAU,CAAC,iBAAiB;iBAChC,CAAC,CAAC;YACL,CAAC;YACD,MAAM;QACR;YACE,MAAM;IACV,CAAC;IAED,wCAAwC;IACxC,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,OAAO,IAAI,EAAE,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/analysis.d.ts
CHANGED
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Custom status logic can be injected via AnalyzerHooks.resolveStatus.
|
|
11
11
|
*/
|
|
12
|
-
import type {
|
|
13
|
-
import type { AnalyzerHooks, DiscoveredPR, Logger, ScannedPR } from "./types.js";
|
|
12
|
+
import type { PullRequest } from "@hardlydifficult/github";
|
|
13
|
+
import type { AnalyzerHooks, DiscoveredPR, Logger, PRAnalyzerClient, ScannedPR } from "./types.js";
|
|
14
14
|
/**
|
|
15
15
|
* Analyze a PR and determine its status
|
|
16
16
|
*/
|
|
17
|
-
export declare function analyzePR(client:
|
|
17
|
+
export declare function analyzePR(client: PRAnalyzerClient, owner: string, repo: string, pr: PullRequest | number, botMention: string, hooks?: AnalyzerHooks): Promise<ScannedPR>;
|
|
18
18
|
/**
|
|
19
19
|
* Analyze all discovered PRs, logging any failures
|
|
20
20
|
*/
|
|
21
|
-
export declare function analyzeAll(prs: readonly DiscoveredPR[], client:
|
|
21
|
+
export declare function analyzeAll(prs: readonly DiscoveredPR[], client: PRAnalyzerClient, botMention: string, logger?: Logger, hooks?: AnalyzerHooks): Promise<ScannedPR[]>;
|
|
22
22
|
//# sourceMappingURL=analysis.d.ts.map
|
package/dist/analysis.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../src/analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAEV,
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../src/analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAEV,WAAW,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EACV,aAAa,EAGb,YAAY,EACZ,MAAM,EACN,gBAAgB,EAChB,SAAS,EACV,MAAM,YAAY,CAAC;AAmBpB;;GAEG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,WAAW,GAAG,MAAM,EACxB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,CAAC,CA2CpB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,SAAS,YAAY,EAAE,EAC5B,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CA2BtB"}
|
package/dist/analysis.js
CHANGED
|
@@ -34,14 +34,13 @@ const BOT_USERNAMES = new Set([
|
|
|
34
34
|
* Analyze a PR and determine its status
|
|
35
35
|
*/
|
|
36
36
|
async function analyzePR(client, owner, repo, pr, botMention, hooks) {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const currentPr = snapshot.pullRequest;
|
|
37
|
+
const prNumber = typeof pr === "number" ? pr : pr.number;
|
|
38
|
+
const snapshot = await client.repo(owner, repo).pr(prNumber).snapshot();
|
|
39
|
+
const currentPr = snapshot.pr;
|
|
41
40
|
const { checks } = snapshot;
|
|
42
41
|
const { comments } = snapshot;
|
|
43
42
|
const { reviews } = snapshot;
|
|
44
|
-
const repoInfo = snapshot.
|
|
43
|
+
const repoInfo = snapshot.repo;
|
|
45
44
|
// Analyze the fetched data
|
|
46
45
|
const ciStatus = analyzeCIStatus(checks);
|
|
47
46
|
const waitingOnBot = isWaitingOnBot(comments, botMention);
|
|
@@ -72,18 +71,21 @@ async function analyzePR(client, owner, repo, pr, botMention, hooks) {
|
|
|
72
71
|
* Analyze all discovered PRs, logging any failures
|
|
73
72
|
*/
|
|
74
73
|
async function analyzeAll(prs, client, botMention, logger, hooks) {
|
|
74
|
+
const settled = await Promise.allSettled(prs.map(({ pr, repoOwner, repoName }) => analyzePR(client, repoOwner, repoName, pr, botMention, hooks)));
|
|
75
75
|
const results = [];
|
|
76
|
-
for (const
|
|
77
|
-
|
|
78
|
-
results.push(
|
|
79
|
-
|
|
80
|
-
catch (err) {
|
|
81
|
-
logger?.error("Failed to analyze PR", {
|
|
82
|
-
repo: `${repoOwner}/${repoName}`,
|
|
83
|
-
pr: pr.number,
|
|
84
|
-
error: err instanceof Error ? err.message : String(err),
|
|
85
|
-
});
|
|
76
|
+
for (const [index, result] of settled.entries()) {
|
|
77
|
+
if (result.status === "fulfilled") {
|
|
78
|
+
results.push(result.value);
|
|
79
|
+
continue;
|
|
86
80
|
}
|
|
81
|
+
const failed = prs[index];
|
|
82
|
+
logger?.error("Failed to analyze PR", {
|
|
83
|
+
repo: `${failed.repoOwner}/${failed.repoName}`,
|
|
84
|
+
pr: failed.pr.number,
|
|
85
|
+
error: result.reason instanceof Error
|
|
86
|
+
? result.reason.message
|
|
87
|
+
: String(result.reason),
|
|
88
|
+
});
|
|
87
89
|
}
|
|
88
90
|
return results;
|
|
89
91
|
}
|
package/dist/analysis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis.js","sourceRoot":"","sources":["../src/analysis.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAwCH,
|
|
1
|
+
{"version":3,"file":"analysis.js","sourceRoot":"","sources":["../src/analysis.ts"],"names":[],"mappings":"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"}
|
package/dist/classification.d.ts
CHANGED
|
@@ -16,5 +16,5 @@ import type { ClassificationConfig, ScannedPR, ScanResult } from "./types.js";
|
|
|
16
16
|
* @param prs - The PRs to classify
|
|
17
17
|
* @param config - Optional extra statuses to include in each bucket
|
|
18
18
|
*/
|
|
19
|
-
export declare function classifyPRs(prs: readonly
|
|
19
|
+
export declare function classifyPRs<T extends ScannedPR>(prs: readonly T[], config?: ClassificationConfig): ScanResult<T>;
|
|
20
20
|
//# sourceMappingURL=classification.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classification.d.ts","sourceRoot":"","sources":["../src/classification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqB9E;;;;;GAKG;AACH,wBAAgB,WAAW,
|
|
1
|
+
{"version":3,"file":"classification.d.ts","sourceRoot":"","sources":["../src/classification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqB9E;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,EAC7C,GAAG,EAAE,SAAS,CAAC,EAAE,EACjB,MAAM,CAAC,EAAE,oBAAoB,GAC5B,UAAU,CAAC,CAAC,CAAC,CAmBf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classification.js","sourceRoot":"","sources":["../src/classification.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AA6BH,kCAsBC;AA/CD,4BAA4B;AAE5B,MAAM,wBAAwB,GAAsB;IAClD,cAAc;IACd,mBAAmB;IACnB,UAAU;IACV,gBAAgB;CACjB,CAAC;AAEF,MAAM,oBAAoB,GAAsB,CAAC,YAAY,CAAC,CAAC;AAE/D,MAAM,gBAAgB,GAAsB;IAC1C,OAAO;IACP,WAAW;IACX,eAAe;CAChB,CAAC;AAEF,MAAM,uBAAuB,GAAsB,CAAC,gBAAgB,CAAC,CAAC;AAEtE;;;;;GAKG;AACH,SAAgB,WAAW,CACzB,
|
|
1
|
+
{"version":3,"file":"classification.js","sourceRoot":"","sources":["../src/classification.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AA6BH,kCAsBC;AA/CD,4BAA4B;AAE5B,MAAM,wBAAwB,GAAsB;IAClD,cAAc;IACd,mBAAmB;IACnB,UAAU;IACV,gBAAgB;CACjB,CAAC;AAEF,MAAM,oBAAoB,GAAsB,CAAC,YAAY,CAAC,CAAC;AAE/D,MAAM,gBAAgB,GAAsB;IAC1C,OAAO;IACP,WAAW;IACX,eAAe;CAChB,CAAC;AAEF,MAAM,uBAAuB,GAAsB,CAAC,gBAAgB,CAAC,CAAC;AAEtE;;;;;GAKG;AACH,SAAgB,WAAW,CACzB,GAAiB,EACjB,MAA6B;IAE7B,MAAM,aAAa,GAAG,aAAa,CACjC,wBAAwB,EACxB,MAAM,EAAE,aAAa,CACtB,CAAC;IACF,MAAM,UAAU,GAAG,aAAa,CAAC,oBAAoB,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,aAAa,CAChC,uBAAuB,EACvB,MAAM,EAAE,YAAY,CACrB,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,GAAG;QACR,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACpE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAClE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,IAAuB,EACvB,KAAyB;IAEzB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type PullRequest } from "@hardlydifficult/github";
|
|
2
|
+
import { type PRActionDescriptor } from "./actions.js";
|
|
3
|
+
import type { ActionContext, ActionDefinition, AnalyzerHooks, ClassificationConfig, DiscoveredPR, Logger, PRAnalyzerClient, ScannedPR, ScanResult } from "./types.js";
|
|
4
|
+
export declare const DEFAULT_BOT_MENTION = "@cursor";
|
|
5
|
+
export type PRReference = number | string | PullRequest | DiscoveredPR;
|
|
6
|
+
export interface ActionablePR extends ScannedPR {
|
|
7
|
+
readonly actions: readonly PRActionDescriptor[];
|
|
8
|
+
}
|
|
9
|
+
export type PRInbox = ScanResult<ActionablePR>;
|
|
10
|
+
export interface PRAnalyzerConfig {
|
|
11
|
+
readonly client: PRAnalyzerClient;
|
|
12
|
+
readonly repo?: string;
|
|
13
|
+
readonly bot?: string;
|
|
14
|
+
readonly hooks?: AnalyzerHooks;
|
|
15
|
+
readonly logger?: Logger;
|
|
16
|
+
readonly classify?: ClassificationConfig;
|
|
17
|
+
readonly actions?: readonly ActionDefinition[];
|
|
18
|
+
readonly actionContext?: ActionContext;
|
|
19
|
+
}
|
|
20
|
+
export interface PRAnalyzer {
|
|
21
|
+
readonly repo?: string;
|
|
22
|
+
analyze(pr: PRReference): Promise<ActionablePR>;
|
|
23
|
+
analyzeMany(prs: readonly PRReference[]): Promise<readonly ActionablePR[]>;
|
|
24
|
+
inbox(prs: readonly PRReference[]): Promise<PRInbox>;
|
|
25
|
+
mine(): Promise<PRInbox>;
|
|
26
|
+
classify(prs: readonly ScannedPR[]): PRInbox;
|
|
27
|
+
actionsFor(pr: ScannedPR): readonly PRActionDescriptor[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a PR analyzer with optional repo scoping, classification, and actions.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createPRAnalyzer(config: PRAnalyzerConfig): PRAnalyzer;
|
|
33
|
+
//# sourceMappingURL=createPRAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPRAnalyzer.d.ts","sourceRoot":"","sources":["../src/createPRAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAG5E,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,YAAY,CAAC;AAEvE,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,QAAQ,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACjD;AAED,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChD,WAAW,CAAC,GAAG,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IAC3E,KAAK,CAAC,GAAG,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC;IAC7C,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,kBAAkB,EAAE,CAAC;CAC1D;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAgFrE"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_BOT_MENTION = void 0;
|
|
4
|
+
exports.createPRAnalyzer = createPRAnalyzer;
|
|
5
|
+
const github_1 = require("@hardlydifficult/github");
|
|
6
|
+
const actions_js_1 = require("./actions.js");
|
|
7
|
+
const analysis_js_1 = require("./analysis.js");
|
|
8
|
+
const classification_js_1 = require("./classification.js");
|
|
9
|
+
exports.DEFAULT_BOT_MENTION = "@cursor";
|
|
10
|
+
/**
|
|
11
|
+
* Create a PR analyzer with optional repo scoping, classification, and actions.
|
|
12
|
+
*/
|
|
13
|
+
function createPRAnalyzer(config) {
|
|
14
|
+
const repo = resolveConfiguredRepo(config.repo);
|
|
15
|
+
const bot = config.bot ?? exports.DEFAULT_BOT_MENTION;
|
|
16
|
+
const extraActions = config.actions ?? [];
|
|
17
|
+
const classification = config.classify;
|
|
18
|
+
const actionContext = config.actionContext ?? {};
|
|
19
|
+
const withActions = (pr) => ({
|
|
20
|
+
...pr,
|
|
21
|
+
actions: (0, actions_js_1.getAvailableActions)(pr, extraActions, actionContext),
|
|
22
|
+
});
|
|
23
|
+
const analyze = async (ref) => withActions(await analyzeReference(config.client, ref, repo, bot, config.hooks));
|
|
24
|
+
const analyzeMany = async (refs) => {
|
|
25
|
+
const settled = await Promise.allSettled(refs.map((ref) => analyze(ref)));
|
|
26
|
+
const results = [];
|
|
27
|
+
for (const [index, result] of settled.entries()) {
|
|
28
|
+
if (result.status === "fulfilled") {
|
|
29
|
+
results.push(result.value);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const ref = refs[index];
|
|
33
|
+
config.logger?.error("Failed to analyze PR", {
|
|
34
|
+
ref: describeReference(ref),
|
|
35
|
+
error: result.reason instanceof Error
|
|
36
|
+
? result.reason.message
|
|
37
|
+
: String(result.reason),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return results;
|
|
41
|
+
};
|
|
42
|
+
const buildInbox = (prs) => (0, classification_js_1.classifyPRs)(prs.map((pr) => withActions(pr)), classification);
|
|
43
|
+
const inbox = async (refs) => buildInbox(await analyzeMany(refs));
|
|
44
|
+
const mine = async () => {
|
|
45
|
+
const myPRs = await listMyOpenPRs(config.client);
|
|
46
|
+
const refs = myPRs
|
|
47
|
+
.filter(({ repo: current }) => repo === undefined
|
|
48
|
+
? true
|
|
49
|
+
: current.owner === repo.owner && current.name === repo.repo)
|
|
50
|
+
.map(({ pr, repo: current }) => ({
|
|
51
|
+
pr,
|
|
52
|
+
repoOwner: current.owner,
|
|
53
|
+
repoName: current.name,
|
|
54
|
+
}));
|
|
55
|
+
return inbox(refs);
|
|
56
|
+
};
|
|
57
|
+
return {
|
|
58
|
+
repo: repo === undefined ? undefined : `${repo.owner}/${repo.repo}`,
|
|
59
|
+
analyze,
|
|
60
|
+
analyzeMany,
|
|
61
|
+
inbox,
|
|
62
|
+
mine,
|
|
63
|
+
classify: buildInbox,
|
|
64
|
+
actionsFor: (pr) => (0, actions_js_1.getAvailableActions)(pr, extraActions, actionContext),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
async function analyzeReference(client, ref, repo, bot, hooks) {
|
|
68
|
+
if (typeof ref === "number") {
|
|
69
|
+
const configuredRepo = requireConfiguredRepo(repo);
|
|
70
|
+
return (0, analysis_js_1.analyzePR)(client, configuredRepo.owner, configuredRepo.repo, ref, bot, hooks);
|
|
71
|
+
}
|
|
72
|
+
if (typeof ref === "string") {
|
|
73
|
+
const trimmed = ref.trim();
|
|
74
|
+
if (/^\d+$/.test(trimmed)) {
|
|
75
|
+
return analyzeReference(client, Number.parseInt(trimmed, 10), repo, bot, hooks);
|
|
76
|
+
}
|
|
77
|
+
const parsed = (0, github_1.parseGitHubPullRequestReference)(trimmed);
|
|
78
|
+
if (parsed === null) {
|
|
79
|
+
throw new Error(`Invalid pull request reference: ${trimmed}. Expected "owner/repo#123" or a GitHub pull request URL.`);
|
|
80
|
+
}
|
|
81
|
+
return (0, analysis_js_1.analyzePR)(client, parsed.owner, parsed.repo, parsed.number, bot, hooks);
|
|
82
|
+
}
|
|
83
|
+
if (isDiscoveredPR(ref)) {
|
|
84
|
+
return (0, analysis_js_1.analyzePR)(client, ref.repoOwner, ref.repoName, ref.pr, bot, hooks);
|
|
85
|
+
}
|
|
86
|
+
return (0, analysis_js_1.analyzePR)(client, ref.base.repo.owner.login, ref.base.repo.name, ref, bot, hooks);
|
|
87
|
+
}
|
|
88
|
+
function resolveConfiguredRepo(repo) {
|
|
89
|
+
if (repo === undefined) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const parsed = (0, github_1.parseGitHubRepoReference)(repo);
|
|
93
|
+
if (parsed === null) {
|
|
94
|
+
throw new Error(`Invalid repository reference: ${repo}. Expected "owner/repo" or a GitHub repository URL.`);
|
|
95
|
+
}
|
|
96
|
+
return parsed;
|
|
97
|
+
}
|
|
98
|
+
function requireConfiguredRepo(repo) {
|
|
99
|
+
if (repo === undefined) {
|
|
100
|
+
throw new Error("A repository is required when analyzing PR numbers. Pass `repo` to createPRAnalyzer({ repo }) first.");
|
|
101
|
+
}
|
|
102
|
+
return repo;
|
|
103
|
+
}
|
|
104
|
+
function isDiscoveredPR(ref) {
|
|
105
|
+
return (typeof ref === "object" &&
|
|
106
|
+
"pr" in ref &&
|
|
107
|
+
"repoOwner" in ref &&
|
|
108
|
+
"repoName" in ref);
|
|
109
|
+
}
|
|
110
|
+
function describeReference(ref) {
|
|
111
|
+
if (ref === undefined) {
|
|
112
|
+
return "unknown";
|
|
113
|
+
}
|
|
114
|
+
if (typeof ref === "number") {
|
|
115
|
+
return `#${String(ref)}`;
|
|
116
|
+
}
|
|
117
|
+
if (typeof ref === "string") {
|
|
118
|
+
return ref;
|
|
119
|
+
}
|
|
120
|
+
if (isDiscoveredPR(ref)) {
|
|
121
|
+
return `${ref.repoOwner}/${ref.repoName}#${String(ref.pr.number)}`;
|
|
122
|
+
}
|
|
123
|
+
return `${ref.base.repo.full_name}#${String(ref.number)}`;
|
|
124
|
+
}
|
|
125
|
+
async function listMyOpenPRs(client) {
|
|
126
|
+
if (client.myOpenPRs !== undefined) {
|
|
127
|
+
return client.myOpenPRs();
|
|
128
|
+
}
|
|
129
|
+
throw new Error("The GitHub client must implement myOpenPRs().");
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=createPRAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPRAnalyzer.js","sourceRoot":"","sources":["../src/createPRAnalyzer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export { scanSinglePR } from "./workflow.js";
|
|
|
8
8
|
export { analyzePR, analyzeAll } from "./analysis.js";
|
|
9
9
|
export { classifyPRs } from "./classification.js";
|
|
10
10
|
export { getAvailableActions, PR_ACTIONS } from "./actions.js";
|
|
11
|
-
export
|
|
11
|
+
export { createPRAnalyzer, DEFAULT_BOT_MENTION } from "./createPRAnalyzer.js";
|
|
12
|
+
export type { ActionContext, CorePRStatus, ScannedPR, ScanResult, CIStatus, DiscoveredPR, Logger, PRAnalyzerClient, PullRequestActivitySnapshot, AnalysisDetails, AnalyzerHooks, ClassificationConfig, ActionDefinition, } from "./types.js";
|
|
12
13
|
export type { CorePRActionType, PRActionDescriptor } from "./actions.js";
|
|
14
|
+
export type { ActionablePR, PRAnalyzer, PRAnalyzerConfig, PRInbox, PRReference, } from "./createPRAnalyzer.js";
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,gBAAgB,EAChB,2BAA2B,EAC3B,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACzE,YAAY,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,WAAW,GACZ,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* See workflow.ts for single-PR scanning.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.PR_ACTIONS = exports.getAvailableActions = exports.classifyPRs = exports.analyzeAll = exports.analyzePR = exports.scanSinglePR = void 0;
|
|
9
|
+
exports.DEFAULT_BOT_MENTION = exports.createPRAnalyzer = exports.PR_ACTIONS = exports.getAvailableActions = exports.classifyPRs = exports.analyzeAll = exports.analyzePR = exports.scanSinglePR = void 0;
|
|
10
10
|
var workflow_js_1 = require("./workflow.js");
|
|
11
11
|
Object.defineProperty(exports, "scanSinglePR", { enumerable: true, get: function () { return workflow_js_1.scanSinglePR; } });
|
|
12
12
|
var analysis_js_1 = require("./analysis.js");
|
|
@@ -17,4 +17,7 @@ Object.defineProperty(exports, "classifyPRs", { enumerable: true, get: function
|
|
|
17
17
|
var actions_js_1 = require("./actions.js");
|
|
18
18
|
Object.defineProperty(exports, "getAvailableActions", { enumerable: true, get: function () { return actions_js_1.getAvailableActions; } });
|
|
19
19
|
Object.defineProperty(exports, "PR_ACTIONS", { enumerable: true, get: function () { return actions_js_1.PR_ACTIONS; } });
|
|
20
|
+
var createPRAnalyzer_js_1 = require("./createPRAnalyzer.js");
|
|
21
|
+
Object.defineProperty(exports, "createPRAnalyzer", { enumerable: true, get: function () { return createPRAnalyzer_js_1.createPRAnalyzer; } });
|
|
22
|
+
Object.defineProperty(exports, "DEFAULT_BOT_MENTION", { enumerable: true, get: function () { return createPRAnalyzer_js_1.DEFAULT_BOT_MENTION; } });
|
|
20
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,6CAA6C;AAApC,2GAAA,YAAY,OAAA;AACrB,6CAAsD;AAA7C,wGAAA,SAAS,OAAA;AAAE,yGAAA,UAAU,OAAA;AAC9B,yDAAkD;AAAzC,gHAAA,WAAW,OAAA;AACpB,2CAA+D;AAAtD,iHAAA,mBAAmB,OAAA;AAAE,wGAAA,UAAU,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,6CAA6C;AAApC,2GAAA,YAAY,OAAA;AACrB,6CAAsD;AAA7C,wGAAA,SAAS,OAAA;AAAE,yGAAA,UAAU,OAAA;AAC9B,yDAAkD;AAAzC,gHAAA,WAAW,OAAA;AACpB,2CAA+D;AAAtD,iHAAA,mBAAmB,OAAA;AAAE,wGAAA,UAAU,OAAA;AACxC,6DAA8E;AAArE,uHAAA,gBAAgB,OAAA;AAAE,0HAAA,mBAAmB,OAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -24,12 +24,12 @@ export interface ScannedPR {
|
|
|
24
24
|
/**
|
|
25
25
|
* Result of scanning all PRs, classified into buckets
|
|
26
26
|
*/
|
|
27
|
-
export interface ScanResult {
|
|
28
|
-
readonly all: readonly
|
|
29
|
-
readonly readyForHuman: readonly
|
|
30
|
-
readonly needsBotBump: readonly
|
|
31
|
-
readonly inProgress: readonly
|
|
32
|
-
readonly blocked: readonly
|
|
27
|
+
export interface ScanResult<T extends ScannedPR = ScannedPR> {
|
|
28
|
+
readonly all: readonly T[];
|
|
29
|
+
readonly readyForHuman: readonly T[];
|
|
30
|
+
readonly needsBotBump: readonly T[];
|
|
31
|
+
readonly inProgress: readonly T[];
|
|
32
|
+
readonly blocked: readonly T[];
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* CI status analysis result
|
|
@@ -48,6 +48,28 @@ export interface DiscoveredPR {
|
|
|
48
48
|
readonly repoOwner: string;
|
|
49
49
|
readonly repoName: string;
|
|
50
50
|
}
|
|
51
|
+
export interface PullRequestActivitySnapshot {
|
|
52
|
+
readonly pr: PullRequest;
|
|
53
|
+
readonly repo: Repository;
|
|
54
|
+
readonly comments: readonly PullRequestComment[];
|
|
55
|
+
readonly reviews: readonly PullRequestReview[];
|
|
56
|
+
readonly checks: readonly CheckRun[];
|
|
57
|
+
}
|
|
58
|
+
export interface PRAnalyzerClient {
|
|
59
|
+
repo(owner: string, repo: string): {
|
|
60
|
+
pr(number: number): {
|
|
61
|
+
snapshot(): Promise<PullRequestActivitySnapshot>;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
myOpenPRs?(): Promise<readonly {
|
|
65
|
+
readonly pr: PullRequest;
|
|
66
|
+
readonly repo: {
|
|
67
|
+
readonly owner: string;
|
|
68
|
+
readonly name: string;
|
|
69
|
+
};
|
|
70
|
+
}[]>;
|
|
71
|
+
}
|
|
72
|
+
export type ActionContext = Record<string, boolean>;
|
|
51
73
|
/**
|
|
52
74
|
* Logger interface for pr-analyzer consumers to implement
|
|
53
75
|
*/
|
|
@@ -93,6 +115,6 @@ export interface ActionDefinition {
|
|
|
93
115
|
readonly type: string;
|
|
94
116
|
readonly label: string;
|
|
95
117
|
readonly description: string;
|
|
96
|
-
readonly when: (pr: ScannedPR, context:
|
|
118
|
+
readonly when: (pr: ScannedPR, context: ActionContext) => boolean;
|
|
97
119
|
}
|
|
98
120
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACX,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,YAAY,GACZ,WAAW,GACX,cAAc,GACd,mBAAmB,GACnB,UAAU,GACV,eAAe,GACf,gBAAgB,GAChB,gBAAgB,CAAC;AAErB;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/workflow.d.ts
CHANGED
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Scans a single PR by repo and number for real-time event handling.
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
7
|
-
import type { AnalyzerHooks, ScannedPR } from "./types.js";
|
|
6
|
+
import type { AnalyzerHooks, PRAnalyzerClient, ScannedPR } from "./types.js";
|
|
8
7
|
/**
|
|
9
8
|
* Scan a single PR by repo and number.
|
|
10
9
|
* Used for real-time event handling - much faster than a full scan.
|
|
11
10
|
*/
|
|
12
|
-
export declare function scanSinglePR(client:
|
|
11
|
+
export declare function scanSinglePR(client: PRAnalyzerClient, botMention: string, owner: string, repo: string, prNumber: number, hooks?: AnalyzerHooks): Promise<ScannedPR>;
|
|
13
12
|
//# sourceMappingURL=workflow.d.ts.map
|
package/dist/workflow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7E;;;GAGG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,aAAa,GACpB,OAAO,CAAC,SAAS,CAAC,CAEpB"}
|
package/dist/workflow.js
CHANGED
|
@@ -12,7 +12,6 @@ const analysis_js_1 = require("./analysis.js");
|
|
|
12
12
|
* Used for real-time event handling - much faster than a full scan.
|
|
13
13
|
*/
|
|
14
14
|
async function scanSinglePR(client, botMention, owner, repo, prNumber, hooks) {
|
|
15
|
-
|
|
16
|
-
return (0, analysis_js_1.analyzePR)(client, owner, repo, pr, botMention, hooks);
|
|
15
|
+
return (0, analysis_js_1.analyzePR)(client, owner, repo, prNumber, botMention, hooks);
|
|
17
16
|
}
|
|
18
17
|
//# sourceMappingURL=workflow.js.map
|
package/dist/workflow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AASH,oCASC;AAhBD,+CAA0C;AAG1C;;;GAGG;AACI,KAAK,UAAU,YAAY,CAChC,MAAwB,EACxB,UAAkB,EAClB,KAAa,EACb,IAAY,EACZ,QAAgB,EAChB,KAAqB;IAErB,OAAO,IAAA,uBAAS,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AACrE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hardlydifficult/pr-analyzer",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.143",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@hardlydifficult/date-time": "1.0.25",
|
|
19
|
-
"@hardlydifficult/github": "1.0.
|
|
19
|
+
"@hardlydifficult/github": "1.0.94"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "25.3.5",
|