github-lang-stats 1.4.0 → 1.6.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.
- package/README.md +78 -15
- package/dist/aggregator.d.ts +2 -2
- package/dist/aggregator.d.ts.map +1 -1
- package/dist/aggregator.js +40 -13
- package/dist/aggregator.js.map +1 -1
- package/dist/cache.d.ts +5 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +29 -3
- package/dist/cache.js.map +1 -1
- package/dist/github-client.d.ts +1 -0
- package/dist/github-client.d.ts.map +1 -1
- package/dist/github-client.js +43 -2
- package/dist/github-client.js.map +1 -1
- package/dist/index.js +112 -40
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +49 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +80 -4
- package/dist/lib.js.map +1 -1
- package/dist/types.d.ts +16 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,16 +4,36 @@ CLI that computes **per-author** GitHub language statistics by inspecting the fi
|
|
|
4
4
|
|
|
5
5
|
Unlike `GET /repos/{owner}/{repo}/languages` (which returns repo-wide bytes regardless of who wrote them), this tool only counts lines in files **you personally changed**.
|
|
6
6
|
|
|
7
|
+
## Why use this instead of your GitHub profile?
|
|
8
|
+
|
|
9
|
+
GitHub's default profile has two major limitations:
|
|
10
|
+
|
|
11
|
+
### 1. **No language-specific contribution stats**
|
|
12
|
+
GitHub shows your total contributions but doesn't break them down by programming language. This tool gives you accurate, per-language statistics based on your actual code changes.
|
|
13
|
+
|
|
14
|
+
### 2. **Private repository contributions are invisible**
|
|
15
|
+
Your GitHub profile only displays contributions to public repositories. For developers working primarily on private codebases (common in professional settings), this misrepresents your actual activity.
|
|
16
|
+
|
|
17
|
+
**This tool solves both problems:**
|
|
18
|
+
- ✅ **Accurate language breakdown** — See exactly how many lines you've changed in TypeScript, Python, Go, etc.
|
|
19
|
+
- ✅ **Safe private repo representation** — Generate aggregate statistics from private repositories without exposing sensitive code or repository names (you control what gets shared in the output)
|
|
20
|
+
- ✅ **Verifiable with your own GitHub token** — Anyone can validate the data by running the tool themselves with their own credentials
|
|
21
|
+
|
|
22
|
+
Perfect for portfolios, resumes, and demonstrating your real technical expertise.
|
|
23
|
+
|
|
7
24
|
## How it works
|
|
8
25
|
|
|
9
|
-
| Phase | API | Cost |
|
|
10
|
-
|
|
11
|
-
| 1. Discover repos | GraphQL `contributionsCollection` | ~20 calls (one per year) |
|
|
12
|
-
| 2. Collect commit SHAs per repo | GraphQL `history(author: ...)` | ~1 call per 100 commits |
|
|
13
|
-
| 3. Fetch per-commit file details | REST `GET /repos/:owner/:repo/commits/:sha` | 1 call per commit |
|
|
26
|
+
| Phase | API | Cost | Rate Limit |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| 1. Discover repos | GraphQL `contributionsCollection` | ~20 calls (one per year) | 5,000/hr |
|
|
29
|
+
| 2. Collect commit SHAs per repo | GraphQL `history(author: ...)` | ~1 call per 100 commits | 5,000/hr |
|
|
30
|
+
| 3. Fetch per-commit file details | REST `GET /repos/:owner/:repo/commits/:sha` | 1 call per commit | 5,000/hr |
|
|
31
|
+
| 4. Collect PR counts (optional) | REST Search API `GET /search/issues` | 1 call per repo | **30/min** |
|
|
14
32
|
|
|
15
33
|
Progress is cached in `.github-lang-stats-cache/<user>.json` so **interrupted runs resume from where they left off**.
|
|
16
34
|
|
|
35
|
+
**Note**: PR counts are collected by default starting with Phase 4. Use `--exclude-pr-counts` to skip this phase if you don't need PR data. The Search API has a stricter rate limit (30 requests/minute), so PR collection includes automatic 2-second delays between requests.
|
|
36
|
+
|
|
17
37
|
## Metric: `lines_changed`
|
|
18
38
|
|
|
19
39
|
For each file in each commit we count `additions + deletions`. This is a proxy for "language activity" — it's not as precise as bytes stored, but it correctly reflects only work you did.
|
|
@@ -59,10 +79,13 @@ const stats = await getGithubLangStats({
|
|
|
59
79
|
cachePath: "./.my-cache/octocat.json", // override default cache location
|
|
60
80
|
useCache: true, // set false to disable caching
|
|
61
81
|
repos: ["octocat/Hello-World"], // restrict to specific repos; omit for all
|
|
82
|
+
includeCommitDates: true, // include commit dates for heatmaps (default: true)
|
|
83
|
+
includePRCounts: true, // include PR counts for activity metrics (default: true)
|
|
62
84
|
onProgress: (e: ProgressEvent) => {
|
|
63
85
|
if (e.phase === "discover") console.log(e.details);
|
|
64
86
|
if (e.phase === "shas") console.log(`${e.repo}: ${e.count} commits`);
|
|
65
87
|
if (e.phase === "details") console.log(`${e.fetched}/${e.total} commits fetched`);
|
|
88
|
+
if (e.phase === "pr-counts") console.log(`${e.fetched}/${e.total} PR counts fetched`);
|
|
66
89
|
if (e.phase === "aggregate") console.log("Aggregating…");
|
|
67
90
|
},
|
|
68
91
|
});
|
|
@@ -70,6 +93,31 @@ const stats = await getGithubLangStats({
|
|
|
70
93
|
console.log(stats.totals); // { TypeScript: 412000, … }
|
|
71
94
|
```
|
|
72
95
|
|
|
96
|
+
#### List repositories only
|
|
97
|
+
|
|
98
|
+
If you just want to get a list of all repositories the user has contributed to (without collecting commit stats):
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
import { listRepositories } from "github-lang-stats";
|
|
102
|
+
|
|
103
|
+
const repos = await listRepositories({
|
|
104
|
+
token: process.env.GITHUB_TOKEN,
|
|
105
|
+
// Optional fields:
|
|
106
|
+
user: "octocat", // omit to use token's user
|
|
107
|
+
fromYear: 2020, // defaults to 10 years ago
|
|
108
|
+
onProgress: (year) => console.log(`Scanning ${year}...`),
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
console.log(repos);
|
|
112
|
+
// [
|
|
113
|
+
// { owner: "octocat", name: "Hello-World", isPrivate: false },
|
|
114
|
+
// { owner: "octocat", name: "my-private-repo", isPrivate: true },
|
|
115
|
+
// ...
|
|
116
|
+
// ]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
This is useful for building UI selectors or filtering repos before running the full analysis.
|
|
120
|
+
|
|
73
121
|
#### `ProgressEvent` shape
|
|
74
122
|
|
|
75
123
|
| `phase` | Extra fields | When fired |
|
|
@@ -77,6 +125,7 @@ console.log(stats.totals); // { TypeScript: 412000, … }
|
|
|
77
125
|
| `"discover"` | `details: string` | Once per year scanned |
|
|
78
126
|
| `"shas"` | `repo: string`, `count: number` | Once per repo after all SHAs collected |
|
|
79
127
|
| `"details"` | `fetched: number`, `total: number` | After every concurrency-batch of REST calls |
|
|
128
|
+
| `"pr-counts"` | `fetched: number`, `total: number` | After each repo's PR count is fetched |
|
|
80
129
|
| `"aggregate"` | — | Once, just before the final roll-up |
|
|
81
130
|
|
|
82
131
|
### Local development
|
|
@@ -114,6 +163,8 @@ Options:
|
|
|
114
163
|
--concurrency <n> Concurrent REST requests (default: 5)
|
|
115
164
|
--from-year <year> Earliest year to include (default: 10 years ago)
|
|
116
165
|
--exclude-langs <langs> Comma-separated languages to exclude (e.g. HCL,JSON)
|
|
166
|
+
--exclude-commit-dates Exclude commit dates from output (included by default)
|
|
167
|
+
--exclude-pr-counts Exclude PR counts from output (included by default)
|
|
117
168
|
--select-repos Interactively pick repos to analyse after commit counts are known
|
|
118
169
|
--stats-only Re-aggregate from cache without fetching new data
|
|
119
170
|
--reset Delete cache and start fresh
|
|
@@ -123,17 +174,19 @@ Options:
|
|
|
123
174
|
|
|
124
175
|
### `--select-repos` interactive picker
|
|
125
176
|
|
|
126
|
-
When passed, after
|
|
127
|
-
checkbox list sorted
|
|
177
|
+
When passed, after discovering repositories the tool shows a full-screen
|
|
178
|
+
checkbox list sorted alphabetically. All repos are pre-selected:
|
|
128
179
|
|
|
129
180
|
```
|
|
130
|
-
? Choose repos (42 total
|
|
131
|
-
❯◉ myorg/
|
|
132
|
-
◉ myorg/
|
|
133
|
-
◉ octocat/personal-site
|
|
181
|
+
? Choose repos (42 total)
|
|
182
|
+
❯◉ myorg/frontend
|
|
183
|
+
◉ myorg/monorepo
|
|
184
|
+
◉ octocat/personal-site
|
|
134
185
|
...
|
|
135
186
|
```
|
|
136
187
|
|
|
188
|
+
This happens **before** collecting commits, allowing you to filter repos early and save time.
|
|
189
|
+
|
|
137
190
|
| Key | Action |
|
|
138
191
|
|-----|--------|
|
|
139
192
|
| `space` | Toggle selected repo |
|
|
@@ -152,8 +205,13 @@ checkbox list sorted by **number of commits** (highest first). All repos are pre
|
|
|
152
205
|
},
|
|
153
206
|
"byRepo": {
|
|
154
207
|
"myorg/myrepo": {
|
|
155
|
-
"
|
|
156
|
-
|
|
208
|
+
"contributionsCountPerLanguage": {
|
|
209
|
+
"TypeScript": 200000,
|
|
210
|
+
"CSS": 5000
|
|
211
|
+
},
|
|
212
|
+
"commitDates": ["2025-11-15", "2025-11-16"],
|
|
213
|
+
"prCount": 42,
|
|
214
|
+
"isPrivate": false
|
|
157
215
|
}
|
|
158
216
|
},
|
|
159
217
|
"meta": {
|
|
@@ -166,14 +224,19 @@ checkbox list sorted by **number of commits** (highest first). All repos are pre
|
|
|
166
224
|
}
|
|
167
225
|
```
|
|
168
226
|
|
|
169
|
-
###
|
|
227
|
+
### Optional fields in `byRepo`
|
|
228
|
+
|
|
229
|
+
- **`commitDates`**: Array of ISO date strings (YYYY-MM-DD), included by default. Use `--exclude-commit-dates` to omit.
|
|
230
|
+
- **`prCount`**: Number of pull requests authored by the user in this repository, included by default. Use `--exclude-pr-counts` to omit.
|
|
231
|
+
- **`isPrivate`**: Boolean indicating if the repository is private (always included when available).
|
|
170
232
|
|
|
171
|
-
|
|
233
|
+
When `--exclude-pr-counts` is used, the metadata includes `"excludedPRs": true`.
|
|
172
234
|
|
|
173
235
|
## Tips
|
|
174
236
|
|
|
175
237
|
- **First run is slow** — at 5k req/hr with 30k commits it can take hours. Let it run overnight; it saves progress every 50 commits.
|
|
176
238
|
- **Subsequent runs are fast** — only new commits since the last run are fetched.
|
|
239
|
+
- **PR collection is rate-limited** — GitHub's Search API allows only 30 requests/minute (not 5000/hour like the REST API). For 100 repos, PR collection takes ~3-4 minutes. Use `--exclude-pr-counts` to skip if you don't need PR data.
|
|
177
240
|
- **Exclude infrastructure languages** with `--exclude-langs HCL,Dockerfile` if teammates committed those to repos you also touched.
|
|
178
241
|
- **Adjust concurrency** carefully — GitHub's [secondary rate limits](https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api) may trigger at high concurrency even if your primary limit is not exhausted. `5` is a safe default.
|
|
179
242
|
|
package/dist/aggregator.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { AggregatedStats, CommitDetail } from "./types.js";
|
|
2
|
-
export declare function aggregate(user: string, commitsByRepo: Record<string, string[]>, commitDetails: Record<string, CommitDetail | null>, excludeLanguages?: string[], includeCommitDates?: boolean): AggregatedStats;
|
|
1
|
+
import type { AggregatedStats, CommitDetail, Repo } from "./types.js";
|
|
2
|
+
export declare function aggregate(user: string, commitsByRepo: Record<string, string[]>, commitDetails: Record<string, CommitDetail | null>, excludeLanguages?: string[], includeCommitDates?: boolean, prCountByRepo?: Record<string, number>, repos?: Repo[], includePRCounts?: boolean, version?: string): AggregatedStats;
|
|
3
3
|
//# sourceMappingURL=aggregator.d.ts.map
|
package/dist/aggregator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../src/aggregator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../src/aggregator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,eAAe,EACf,YAAY,EACZ,IAAI,EAEJ,MAAM,YAAY,CAAC;AAGpB,wBAAgB,SAAS,CACxB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACvC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,EAClD,gBAAgB,GAAE,MAAM,EAAO,EAC/B,kBAAkB,GAAE,OAAc,EAClC,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAC1C,KAAK,GAAE,IAAI,EAAO,EAClB,eAAe,GAAE,OAAc,EAC/B,OAAO,CAAC,EAAE,MAAM,GACd,eAAe,CA6GjB"}
|
package/dist/aggregator.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { detectLanguage, isExcludedLanguage } from "./language-detector.js";
|
|
2
2
|
// We accept the cache data object directly for aggregation
|
|
3
|
-
export function aggregate(user, commitsByRepo, commitDetails, excludeLanguages = [], includeCommitDates = true) {
|
|
3
|
+
export function aggregate(user, commitsByRepo, commitDetails, excludeLanguages = [], includeCommitDates = true, prCountByRepo = {}, repos = [], includePRCounts = true, version) {
|
|
4
4
|
const totals = {};
|
|
5
5
|
const byRepo = {};
|
|
6
6
|
let totalCommitsProcessed = 0;
|
|
7
|
+
// Build a repo map for quick lookup of isPrivate
|
|
8
|
+
const repoMap = new Map();
|
|
9
|
+
for (const repo of repos) {
|
|
10
|
+
repoMap.set(`${repo.owner}/${repo.name}`, repo);
|
|
11
|
+
}
|
|
7
12
|
for (const [repoKey, shas] of Object.entries(commitsByRepo)) {
|
|
8
13
|
const repoLangs = {};
|
|
9
14
|
const commitDates = [];
|
|
@@ -15,7 +20,7 @@ export function aggregate(user, commitsByRepo, commitDetails, excludeLanguages =
|
|
|
15
20
|
// Collect commit date if requested
|
|
16
21
|
if (includeCommitDates && detail.date) {
|
|
17
22
|
const date = new Date(detail.date);
|
|
18
|
-
const isoDate = date.toISOString().split(
|
|
23
|
+
const isoDate = date.toISOString().split("T")[0]; // YYYY-MM-DD
|
|
19
24
|
commitDates.push(isoDate);
|
|
20
25
|
}
|
|
21
26
|
for (const file of detail.files) {
|
|
@@ -32,11 +37,26 @@ export function aggregate(user, commitsByRepo, commitDetails, excludeLanguages =
|
|
|
32
37
|
}
|
|
33
38
|
}
|
|
34
39
|
if (Object.keys(repoLangs).length > 0) {
|
|
35
|
-
|
|
36
|
-
|
|
40
|
+
const repoData = {
|
|
41
|
+
contributionsCountPerLanguage: repoLangs
|
|
42
|
+
};
|
|
43
|
+
// Add commit dates if enabled
|
|
37
44
|
if (includeCommitDates && commitDates.length > 0) {
|
|
38
|
-
|
|
45
|
+
repoData.commitDates = commitDates;
|
|
46
|
+
}
|
|
47
|
+
// Add PR count if enabled and available
|
|
48
|
+
if (includePRCounts) {
|
|
49
|
+
const prCount = prCountByRepo[repoKey];
|
|
50
|
+
if (prCount !== undefined) {
|
|
51
|
+
repoData.prCount = prCount;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Add isPrivate if available
|
|
55
|
+
const repo = repoMap.get(repoKey);
|
|
56
|
+
if (repo?.isPrivate !== undefined) {
|
|
57
|
+
repoData.isPrivate = repo.isPrivate;
|
|
39
58
|
}
|
|
59
|
+
byRepo[repoKey] = repoData;
|
|
40
60
|
}
|
|
41
61
|
}
|
|
42
62
|
// Sort totals descending
|
|
@@ -45,14 +65,19 @@ export function aggregate(user, commitsByRepo, commitDetails, excludeLanguages =
|
|
|
45
65
|
const sortedByRepo = Object.fromEntries(Object.entries(byRepo)
|
|
46
66
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
47
67
|
.map(([repo, data]) => {
|
|
48
|
-
// Extract commitDates if present
|
|
49
|
-
const { commitDates, ...langs } = data;
|
|
50
68
|
// Sort language entries
|
|
51
|
-
const sortedLangs = Object.fromEntries(Object.entries(
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
69
|
+
const sortedLangs = Object.fromEntries(Object.entries(data.contributionsCountPerLanguage).sort(([, a], [, b]) => b - a));
|
|
70
|
+
// Build result with sorted langs and all optional fields
|
|
71
|
+
const result = {
|
|
72
|
+
contributionsCountPerLanguage: sortedLangs
|
|
73
|
+
};
|
|
74
|
+
if (data.commitDates)
|
|
75
|
+
result.commitDates = data.commitDates;
|
|
76
|
+
if (data.prCount !== undefined)
|
|
77
|
+
result.prCount = data.prCount;
|
|
78
|
+
if (data.isPrivate !== undefined)
|
|
79
|
+
result.isPrivate = data.isPrivate;
|
|
80
|
+
return [repo, result];
|
|
56
81
|
}));
|
|
57
82
|
return {
|
|
58
83
|
totals: sortedTotals,
|
|
@@ -62,7 +87,9 @@ export function aggregate(user, commitsByRepo, commitDetails, excludeLanguages =
|
|
|
62
87
|
generatedAt: new Date().toISOString(),
|
|
63
88
|
totalCommitsProcessed,
|
|
64
89
|
totalRepos: Object.keys(byRepo).length,
|
|
65
|
-
unit: "lines_changed"
|
|
90
|
+
unit: "lines_changed",
|
|
91
|
+
...(version ? { version } : {}),
|
|
92
|
+
...(includePRCounts ? {} : { excludedPRs: true })
|
|
66
93
|
}
|
|
67
94
|
};
|
|
68
95
|
}
|
package/dist/aggregator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../src/aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../src/aggregator.ts"],"names":[],"mappings":"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"}
|
package/dist/cache.d.ts
CHANGED
|
@@ -24,9 +24,14 @@ export declare class CacheStore {
|
|
|
24
24
|
getAggregationData(): {
|
|
25
25
|
commitsByRepo: Record<string, string[]>;
|
|
26
26
|
commitDetails: Record<string, CommitDetail | null>;
|
|
27
|
+
prCountByRepo: Record<string, number>;
|
|
27
28
|
};
|
|
28
29
|
/** Clear all cached data */
|
|
29
30
|
reset(): void;
|
|
31
|
+
isRepoPRComplete(owner: string, repo: string): boolean;
|
|
32
|
+
markRepoPRComplete(owner: string, repo: string): void;
|
|
33
|
+
getPRCount(owner: string, repo: string): number | undefined;
|
|
34
|
+
setPRCount(owner: string, repo: string, count: number): void;
|
|
30
35
|
}
|
|
31
36
|
export declare function defaultCachePath(user: string): string;
|
|
32
37
|
//# sourceMappingURL=cache.d.ts.map
|
package/dist/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAS,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAS,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAgB5D,qBAAa,UAAU;IACtB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAQ;gBAER,SAAS,EAAE,MAAM;IAK7B,OAAO,CAAC,IAAI;IAkBZ,IAAI,IAAI,IAAI;IAMZ,IAAI,KAAK,IAAI,IAAI,EAAE,CAElB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAEtB;IAED,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAIjD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ7D,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIrC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,GAAG,SAAS;IAI7D,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI;IAI/D,qDAAqD;IACrD,kBAAkB,IAAI,MAAM;IAU5B,eAAe,IAAI,MAAM;IAQzB,8BAA8B;IAC9B,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,gEAAgE;IAChE,kBAAkB,IAAI;QACrB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;QACnD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACtC;IAQD,4BAA4B;IAC5B,KAAK,IAAI,IAAI;IAMb,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAKtD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQrD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK3D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAK5D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
package/dist/cache.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
|
-
const CACHE_VERSION =
|
|
3
|
+
const CACHE_VERSION = 3;
|
|
4
4
|
function emptyCache() {
|
|
5
5
|
return {
|
|
6
6
|
version: CACHE_VERSION,
|
|
7
7
|
repos: [],
|
|
8
8
|
completedRepos: [],
|
|
9
9
|
commitsByRepo: {},
|
|
10
|
-
commitDetails: {}
|
|
10
|
+
commitDetails: {},
|
|
11
|
+
prCountByRepo: {},
|
|
12
|
+
completedPRRepos: []
|
|
11
13
|
};
|
|
12
14
|
}
|
|
13
15
|
export class CacheStore {
|
|
@@ -103,13 +105,37 @@ export class CacheStore {
|
|
|
103
105
|
getAggregationData() {
|
|
104
106
|
return {
|
|
105
107
|
commitsByRepo: this.data.commitsByRepo,
|
|
106
|
-
commitDetails: this.data.commitDetails
|
|
108
|
+
commitDetails: this.data.commitDetails,
|
|
109
|
+
prCountByRepo: this.data.prCountByRepo ?? {}
|
|
107
110
|
};
|
|
108
111
|
}
|
|
109
112
|
/** Clear all cached data */
|
|
110
113
|
reset() {
|
|
111
114
|
this.data = emptyCache();
|
|
112
115
|
}
|
|
116
|
+
// ─── PR Count Methods ─────────────────────────────────────────────────────
|
|
117
|
+
isRepoPRComplete(owner, repo) {
|
|
118
|
+
const key = `${owner}/${repo}`;
|
|
119
|
+
return (this.data.completedPRRepos ?? []).includes(key);
|
|
120
|
+
}
|
|
121
|
+
markRepoPRComplete(owner, repo) {
|
|
122
|
+
const key = `${owner}/${repo}`;
|
|
123
|
+
if (!this.data.completedPRRepos)
|
|
124
|
+
this.data.completedPRRepos = [];
|
|
125
|
+
if (!this.data.completedPRRepos.includes(key)) {
|
|
126
|
+
this.data.completedPRRepos.push(key);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
getPRCount(owner, repo) {
|
|
130
|
+
const key = `${owner}/${repo}`;
|
|
131
|
+
return this.data.prCountByRepo?.[key];
|
|
132
|
+
}
|
|
133
|
+
setPRCount(owner, repo, count) {
|
|
134
|
+
const key = `${owner}/${repo}`;
|
|
135
|
+
if (!this.data.prCountByRepo)
|
|
136
|
+
this.data.prCountByRepo = {};
|
|
137
|
+
this.data.prCountByRepo[key] = count;
|
|
138
|
+
}
|
|
113
139
|
}
|
|
114
140
|
export function defaultCachePath(user) {
|
|
115
141
|
return join(process.cwd(), ".github-lang-stats-cache", `${user}.json`);
|
package/dist/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,SAAS,UAAU;IAClB,OAAO;QACN,OAAO,EAAE,aAAa;QACtB,KAAK,EAAE,EAAE;QACT,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/github-client.d.ts
CHANGED
|
@@ -21,5 +21,6 @@ export declare class GitHubClient {
|
|
|
21
21
|
getUserNodeId(username: string): Promise<string>;
|
|
22
22
|
collectCommitShas(owner: string, repo: string, authorId: string, onPage?: (count: number) => void, fromYear?: number): Promise<string[]>;
|
|
23
23
|
fetchCommitDetail(owner: string, repo: string, sha: string): Promise<CommitDetail | null>;
|
|
24
|
+
fetchPRCount(owner: string, repo: string, username: string): Promise<number>;
|
|
24
25
|
}
|
|
25
26
|
//# sourceMappingURL=github-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-client.d.ts","sourceRoot":"","sources":["../src/github-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAQpE,qBAAa,YAAY;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,cAAc,CAAK;gBAEf,KAAK,EAAE,MAAM;IAIzB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,0BAA0B;IASlC,4DAA4D;YAC9C,QAAQ;IAatB,gBAAgB,IAAI,aAAa;IAiB3B,OAAO,CAAC,CAAC,GAAG,OAAO,EACxB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC;IA2BP,oBAAoB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"github-client.d.ts","sourceRoot":"","sources":["../src/github-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAQpE,qBAAa,YAAY;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,cAAc,CAAK;gBAEf,KAAK,EAAE,MAAM;IAIzB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,0BAA0B;IASlC,4DAA4D;YAC9C,QAAQ;IAatB,gBAAgB,IAAI,aAAa;IAiB3B,OAAO,CAAC,CAAC,GAAG,OAAO,EACxB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC;IA2BP,oBAAoB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAyCvC,6BAA6B,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAO,EACf,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC,IAAI,EAAE,CAAC;IAoEZ,wBAAwB,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAO,EACf,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC,IAAI,EAAE,CAAC;IAsBZ,SAAS,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAWnD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhD,iBAAiB,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAChC,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC;IAkEd,iBAAiB,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACT,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IA2DzB,YAAY,CACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;CA8BlB"}
|
package/dist/github-client.js
CHANGED
|
@@ -91,7 +91,11 @@ export class GitHubClient {
|
|
|
91
91
|
if (apiRepos.length === 0)
|
|
92
92
|
break;
|
|
93
93
|
for (const r of apiRepos) {
|
|
94
|
-
repos.push({
|
|
94
|
+
repos.push({
|
|
95
|
+
owner: r.owner.login,
|
|
96
|
+
name: r.name,
|
|
97
|
+
isPrivate: r.private
|
|
98
|
+
});
|
|
95
99
|
}
|
|
96
100
|
if (apiRepos.length < perPage)
|
|
97
101
|
break;
|
|
@@ -119,6 +123,7 @@ export class GitHubClient {
|
|
|
119
123
|
repository {
|
|
120
124
|
owner { login }
|
|
121
125
|
name
|
|
126
|
+
isPrivate
|
|
122
127
|
}
|
|
123
128
|
}
|
|
124
129
|
}
|
|
@@ -131,7 +136,8 @@ export class GitHubClient {
|
|
|
131
136
|
if (!repoMap.has(key)) {
|
|
132
137
|
repoMap.set(key, {
|
|
133
138
|
owner: entry.repository.owner.login,
|
|
134
|
-
name: entry.repository.name
|
|
139
|
+
name: entry.repository.name,
|
|
140
|
+
isPrivate: entry.repository.isPrivate
|
|
135
141
|
});
|
|
136
142
|
}
|
|
137
143
|
}
|
|
@@ -248,6 +254,41 @@ export class GitHubClient {
|
|
|
248
254
|
}))
|
|
249
255
|
};
|
|
250
256
|
}
|
|
257
|
+
// ---------------------------------------------------------------------------
|
|
258
|
+
// Fetch PR count for a repository (authored by user)
|
|
259
|
+
// Uses the search API for efficiency
|
|
260
|
+
//
|
|
261
|
+
// IMPORTANT: GitHub Search API has a separate rate limit of 30 requests/minute
|
|
262
|
+
// (not the standard 5000/hour REST API limit). Callers should add ~2s delays
|
|
263
|
+
// between requests to avoid hitting this limit.
|
|
264
|
+
//
|
|
265
|
+
// Note: We skip the standard throttle() check here because:
|
|
266
|
+
// - Search API has its own much lower limit (30/min vs 5000/hr)
|
|
267
|
+
// - The reserve of 100 would always trigger on Search API (30 < 100)
|
|
268
|
+
// - We have retry logic for 429/403 and callers add manual delays
|
|
269
|
+
// ---------------------------------------------------------------------------
|
|
270
|
+
async fetchPRCount(owner, repo, username) {
|
|
271
|
+
// Don't call this.throttle() - Search API has separate rate limit
|
|
272
|
+
// Search for PRs authored by user in this repo
|
|
273
|
+
const query = `author:${username} type:pr repo:${owner}/${repo}`;
|
|
274
|
+
const url = `${GH_REST}/search/issues?q=${encodeURIComponent(query)}&per_page=1`;
|
|
275
|
+
const res = await fetch(url, { headers: this.headers() });
|
|
276
|
+
this.updateRateLimitFromHeaders(res.headers);
|
|
277
|
+
if (res.status === 404 || res.status === 422)
|
|
278
|
+
return 0;
|
|
279
|
+
if (!res.ok) {
|
|
280
|
+
if (res.status === 429 || res.status === 403) {
|
|
281
|
+
// Secondary rate limit — wait and retry once
|
|
282
|
+
const retryAfter = parseInt(res.headers.get("retry-after") ?? "60", 10);
|
|
283
|
+
process.stderr.write(`\nSecondary rate limit hit. Waiting ${retryAfter}s...\n`);
|
|
284
|
+
await sleep(retryAfter * 1000);
|
|
285
|
+
return this.fetchPRCount(owner, repo, username);
|
|
286
|
+
}
|
|
287
|
+
throw new Error(`fetchPRCount failed (${res.status}) for ${owner}/${repo}`);
|
|
288
|
+
}
|
|
289
|
+
const json = (await res.json());
|
|
290
|
+
return json.total_count;
|
|
291
|
+
}
|
|
251
292
|
}
|
|
252
293
|
function sleep(ms) {
|
|
253
294
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-client.js","sourceRoot":"","sources":["../src/github-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"github-client.js","sourceRoot":"","sources":["../src/github-client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
4
|
import checkbox from "@inquirer/checkbox";
|
|
5
5
|
import chalk from "chalk";
|
|
@@ -9,6 +9,16 @@ import { aggregate } from "./aggregator.js";
|
|
|
9
9
|
import { CacheStore, defaultCachePath } from "./cache.js";
|
|
10
10
|
import { GitHubClient } from "./github-client.js";
|
|
11
11
|
const DEFAULT_FROM_YEAR = new Date().getFullYear() - 10;
|
|
12
|
+
// Read package.json version
|
|
13
|
+
let packageVersion;
|
|
14
|
+
try {
|
|
15
|
+
const packageJsonPath = new URL("../package.json", import.meta.url);
|
|
16
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
17
|
+
packageVersion = packageJson.version;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// If we can't read the version, continue without it
|
|
21
|
+
}
|
|
12
22
|
const program = new Command();
|
|
13
23
|
program
|
|
14
24
|
.name("gls")
|
|
@@ -29,6 +39,7 @@ program
|
|
|
29
39
|
.option("--stats-only", "Skip fetching new data, just aggregate from existing cache")
|
|
30
40
|
.option("--reset", "Delete cache and start fresh")
|
|
31
41
|
.option("--exclude-commit-dates", "Exclude commit dates from output (dates are included by default for heatmap visualization)")
|
|
42
|
+
.option("--exclude-pr-counts", "Exclude PR counts from output (PR counts are included by default for activity metrics)")
|
|
32
43
|
.parse(process.argv);
|
|
33
44
|
const opts = program.opts();
|
|
34
45
|
const concurrency = parseInt(opts.concurrency, 10);
|
|
@@ -65,8 +76,12 @@ if (!opts.noCache)
|
|
|
65
76
|
console.log(chalk.gray(`Cache: ${cachePath}`));
|
|
66
77
|
console.log();
|
|
67
78
|
// ─── Phase 1: Discover repos ──────────────────────────────────────────────────
|
|
79
|
+
// Keep full repo list in cache, use separate variable for selected repos
|
|
80
|
+
let reposToAnalyse = cache.repos;
|
|
68
81
|
if (!opts.statsOnly) {
|
|
69
|
-
|
|
82
|
+
// Always refresh repos when using --select-repos to show newly created repos
|
|
83
|
+
const needsFreshRepos = cache.repos.length === 0 || opts.selectRepos;
|
|
84
|
+
if (needsFreshRepos) {
|
|
70
85
|
const spinner = ora("Discovering contributed repositories (year-by-year)…").start();
|
|
71
86
|
let currentYear = 0;
|
|
72
87
|
const repos = await client.discoverContributedRepos(user, fromYear, (year) => {
|
|
@@ -82,19 +97,50 @@ if (!opts.statsOnly) {
|
|
|
82
97
|
console.log(chalk.green(`✓`) +
|
|
83
98
|
` Using cached repo list: ${chalk.bold(cache.repos.length)} repos`);
|
|
84
99
|
}
|
|
100
|
+
// Update working repo list
|
|
101
|
+
reposToAnalyse = cache.repos;
|
|
102
|
+
// ─── Phase 1.5: Interactive repo selection ────────────────────────────────────
|
|
103
|
+
if (opts.selectRepos) {
|
|
104
|
+
const repoEntries = cache.repos
|
|
105
|
+
.map((r) => ({
|
|
106
|
+
repo: r,
|
|
107
|
+
key: `${r.owner}/${r.name}`
|
|
108
|
+
}))
|
|
109
|
+
.sort((a, b) => a.key.localeCompare(b.key));
|
|
110
|
+
console.log(`\n${chalk.bold("Select repositories to analyse")} ` +
|
|
111
|
+
chalk.gray("(space=toggle, a=toggle all, i=invert, enter=confirm)\n"));
|
|
112
|
+
const selected = await checkbox({
|
|
113
|
+
message: `Choose repos (${repoEntries.length} total)`,
|
|
114
|
+
choices: repoEntries.map(({ key }) => ({
|
|
115
|
+
name: key,
|
|
116
|
+
value: key,
|
|
117
|
+
checked: true
|
|
118
|
+
})),
|
|
119
|
+
pageSize: 20,
|
|
120
|
+
loop: false
|
|
121
|
+
});
|
|
122
|
+
if (selected.length === 0) {
|
|
123
|
+
console.log(chalk.red("No repositories selected — nothing to do."));
|
|
124
|
+
process.exit(0);
|
|
125
|
+
}
|
|
126
|
+
const selectedSet = new Set(selected);
|
|
127
|
+
reposToAnalyse = cache.repos.filter((r) => selectedSet.has(`${r.owner}/${r.name}`));
|
|
128
|
+
console.log(chalk.green(`✓`) +
|
|
129
|
+
` Analysing ${chalk.bold(reposToAnalyse.length)} selected repos\n`);
|
|
130
|
+
}
|
|
85
131
|
// ─── Phase 2: Collect commit SHAs per repo ──────────────────────────────────
|
|
86
|
-
const incompleteRepos =
|
|
132
|
+
const incompleteRepos = reposToAnalyse.filter((r) => !cache.isRepoComplete(r.owner, r.name));
|
|
87
133
|
if (incompleteRepos.length > 0) {
|
|
88
134
|
console.log(`\nCollecting commit SHAs for ${chalk.bold(incompleteRepos.length)} repos…`);
|
|
89
135
|
// Use the user's GitHub node ID for reliable author filtering
|
|
90
136
|
// (email-based filtering misses commits made with different local git emails)
|
|
91
137
|
const authorId = cachedAuthorId ??
|
|
92
|
-
await (async () => {
|
|
138
|
+
(await (async () => {
|
|
93
139
|
const spinner0 = ora("Fetching GitHub user node ID…").start();
|
|
94
140
|
const id = await client.getUserNodeId(user);
|
|
95
141
|
spinner0.succeed(`Author ID: ${chalk.gray(id)}`);
|
|
96
142
|
return id;
|
|
97
|
-
})();
|
|
143
|
+
})());
|
|
98
144
|
let repoIdx = 0;
|
|
99
145
|
for (const repo of incompleteRepos) {
|
|
100
146
|
repoIdx++;
|
|
@@ -116,36 +162,6 @@ if (!opts.statsOnly) {
|
|
|
116
162
|
else {
|
|
117
163
|
console.log(`${chalk.green(`✓`)} All repo commit SHAs already cached`);
|
|
118
164
|
}
|
|
119
|
-
// ─── Phase 2.5: Interactive repo selection ────────────────────────────────────
|
|
120
|
-
if (opts.selectRepos) {
|
|
121
|
-
const repoEntries = cache.repos
|
|
122
|
-
.map((r) => ({
|
|
123
|
-
repo: r,
|
|
124
|
-
key: `${r.owner}/${r.name}`,
|
|
125
|
-
count: cache.getCommits(r.owner, r.name).length
|
|
126
|
-
}))
|
|
127
|
-
.sort((a, b) => b.count - a.count);
|
|
128
|
-
console.log(`\n${chalk.bold("Select repositories to analyse")} ` +
|
|
129
|
-
chalk.gray("(space=toggle, a=toggle all, i=invert, enter=confirm)\n"));
|
|
130
|
-
const selected = await checkbox({
|
|
131
|
-
message: `Choose repos (${repoEntries.length} total, sorted by commit count)`,
|
|
132
|
-
choices: repoEntries.map(({ key, count }) => ({
|
|
133
|
-
name: `${key.padEnd(55)} ${chalk.gray(`${String(count).padStart(5)} commits`)}`,
|
|
134
|
-
value: key,
|
|
135
|
-
checked: true
|
|
136
|
-
})),
|
|
137
|
-
pageSize: 20,
|
|
138
|
-
loop: false
|
|
139
|
-
});
|
|
140
|
-
if (selected.length === 0) {
|
|
141
|
-
console.log(chalk.red("No repositories selected — nothing to do."));
|
|
142
|
-
process.exit(0);
|
|
143
|
-
}
|
|
144
|
-
const selectedSet = new Set(selected);
|
|
145
|
-
cache.repos = cache.repos.filter((r) => selectedSet.has(`${r.owner}/${r.name}`));
|
|
146
|
-
console.log(chalk.green(`✓`) +
|
|
147
|
-
` Analysing ${chalk.bold(cache.repos.length)} selected repos\n`);
|
|
148
|
-
}
|
|
149
165
|
// ─── Phase 3: Fetch commit file details (REST) ──────────────────────────────
|
|
150
166
|
const pending = cache.pendingCommitCount();
|
|
151
167
|
const total = cache.totalCommitShas();
|
|
@@ -160,7 +176,7 @@ if (!opts.statsOnly) {
|
|
|
160
176
|
` Estimated time at ${usablePerHour} req/hr with concurrency=${concurrency}: ` +
|
|
161
177
|
`~${formatMinutes(pending / (usablePerHour / 60 / 60) / concurrency)}`));
|
|
162
178
|
const workList = [];
|
|
163
|
-
for (const repo of
|
|
179
|
+
for (const repo of reposToAnalyse) {
|
|
164
180
|
const shas = cache.getCommits(repo.owner, repo.name);
|
|
165
181
|
for (const sha of shas) {
|
|
166
182
|
if (!cache.hasCommitDetail(sha)) {
|
|
@@ -211,12 +227,58 @@ if (!opts.statsOnly) {
|
|
|
211
227
|
else {
|
|
212
228
|
console.log(`${chalk.green(`✓`)} All commit details already cached (${total} commits)`);
|
|
213
229
|
}
|
|
230
|
+
// ─── Phase 3.5: Collect PR counts ────────────────────────────────────────────
|
|
231
|
+
if (!opts.excludePrCounts) {
|
|
232
|
+
const incompletePRRepos = reposToAnalyse.filter((r) => !cache.isRepoPRComplete(r.owner, r.name));
|
|
233
|
+
if (incompletePRRepos.length > 0) {
|
|
234
|
+
const totalPRRepos = reposToAnalyse.length;
|
|
235
|
+
const alreadyDone = totalPRRepos - incompletePRRepos.length;
|
|
236
|
+
console.log(`\nCollecting PR counts: ${chalk.bold(incompletePRRepos.length)} remaining` +
|
|
237
|
+
(alreadyDone > 0
|
|
238
|
+
? chalk.gray(` (${alreadyDone} already cached)`)
|
|
239
|
+
: "") +
|
|
240
|
+
chalk.gray(`\n Note: Search API limited to 30 req/min, this will take ~${Math.ceil(incompletePRRepos.length / 30)} min`));
|
|
241
|
+
let prRepoIdx = 0;
|
|
242
|
+
let totalPRCount = 0;
|
|
243
|
+
const prBar = ora(`Collecting PR counts 0 / ${incompletePRRepos.length}…`).start();
|
|
244
|
+
for (const repo of incompletePRRepos) {
|
|
245
|
+
prRepoIdx++;
|
|
246
|
+
try {
|
|
247
|
+
const prCount = await client.fetchPRCount(repo.owner, repo.name, user);
|
|
248
|
+
cache.setPRCount(repo.owner, repo.name, prCount);
|
|
249
|
+
cache.markRepoPRComplete(repo.owner, repo.name);
|
|
250
|
+
totalPRCount += prCount;
|
|
251
|
+
if (!opts.noCache && prRepoIdx % 10 === 0) {
|
|
252
|
+
cache.save();
|
|
253
|
+
}
|
|
254
|
+
const pct = Math.round((prRepoIdx / incompletePRRepos.length) * 100);
|
|
255
|
+
prBar.text = `Collecting PR counts ${prRepoIdx} / ${incompletePRRepos.length} (${pct}%)`;
|
|
256
|
+
// Add delay to respect Search API rate limit (30 req/min = 2s between requests)
|
|
257
|
+
if (prRepoIdx < incompletePRRepos.length) {
|
|
258
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
process.stderr.write(`\n Warning: failed to fetch PR count for ${repo.owner}/${repo.name}: ${String(err)}\n`);
|
|
263
|
+
// Mark as complete even on error to avoid retrying indefinitely
|
|
264
|
+
cache.markRepoPRComplete(repo.owner, repo.name);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (!opts.noCache)
|
|
268
|
+
cache.save();
|
|
269
|
+
prBar.succeed(`Collected PR counts for ${chalk.bold(incompletePRRepos.length)} repos (${totalPRCount} PRs total)`);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
console.log(`${chalk.green(`✓`)} All PR counts already cached`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
214
275
|
}
|
|
215
276
|
// ─── Phase 4: Aggregate ───────────────────────────────────────────────────────
|
|
216
277
|
console.log(chalk.gray("\nAggregating…"));
|
|
217
|
-
const { commitsByRepo, commitDetails } = cache.getAggregationData();
|
|
218
|
-
const stats = aggregate(user, commitsByRepo, commitDetails, excludeLanguages, !opts.excludeCommitDates // Include by default, exclude if flag is set
|
|
219
|
-
|
|
278
|
+
const { commitsByRepo, commitDetails, prCountByRepo } = cache.getAggregationData();
|
|
279
|
+
const stats = aggregate(user, commitsByRepo, commitDetails, excludeLanguages, !opts.excludeCommitDates, // Include by default, exclude if flag is set
|
|
280
|
+
prCountByRepo, reposToAnalyse, !opts.excludePrCounts, // Include by default, exclude if flag is set
|
|
281
|
+
packageVersion);
|
|
220
282
|
const json = JSON.stringify(stats, null, 2);
|
|
221
283
|
if (opts.output) {
|
|
222
284
|
const outPath = resolve(opts.output);
|
|
@@ -237,7 +299,17 @@ for (const [lang, lines] of topN) {
|
|
|
237
299
|
const bar = "█".repeat(Math.round((lines / maxLines) * 20));
|
|
238
300
|
console.log(` ${lang.padEnd(20)} ${bar.padEnd(20)} ${formatNum(lines)}`);
|
|
239
301
|
}
|
|
240
|
-
|
|
302
|
+
// Calculate total PRs if included
|
|
303
|
+
let summaryText = `\nProcessed ${stats.meta.totalCommitsProcessed} commits`;
|
|
304
|
+
if (!opts.excludePrCounts) {
|
|
305
|
+
const totalPRs = Object.values(prCountByRepo).reduce((sum, count) => sum + count, 0);
|
|
306
|
+
summaryText += `, ${totalPRs} PRs`;
|
|
307
|
+
}
|
|
308
|
+
summaryText += ` across ${stats.meta.totalRepos} repos`;
|
|
309
|
+
if (opts.excludePrCounts) {
|
|
310
|
+
summaryText += ` (PR collection skipped)`;
|
|
311
|
+
}
|
|
312
|
+
console.log(chalk.gray(summaryText));
|
|
241
313
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
242
314
|
function formatMinutes(minutes) {
|
|
243
315
|
if (minutes < 1)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { AggregatedStats } from "./types.js";
|
|
1
|
+
import type { AggregatedStats, Repo } from "./types.js";
|
|
2
|
+
export { GitHubClient } from "./github-client.js";
|
|
2
3
|
export type { AggregatedStats, CommitDetail, CommitFileDetail, RateLimitInfo, Repo, RepoStats } from "./types.js";
|
|
3
4
|
export interface GetGithubLangStatsOptions {
|
|
4
5
|
/**
|
|
@@ -40,6 +41,12 @@ export interface GetGithubLangStatsOptions {
|
|
|
40
41
|
* Defaults to `true`.
|
|
41
42
|
*/
|
|
42
43
|
includeCommitDates?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Include PR counts for activity metrics.
|
|
46
|
+
* Adds a `prCount` field to each repo with the number of PRs authored by the user.
|
|
47
|
+
* Defaults to `true`.
|
|
48
|
+
*/
|
|
49
|
+
includePRCounts?: boolean;
|
|
43
50
|
/** Optional progress callback invoked as each phase advances. */
|
|
44
51
|
onProgress?: (event: ProgressEvent) => void;
|
|
45
52
|
}
|
|
@@ -54,9 +61,50 @@ export type ProgressEvent = {
|
|
|
54
61
|
phase: "details";
|
|
55
62
|
fetched: number;
|
|
56
63
|
total: number;
|
|
64
|
+
} | {
|
|
65
|
+
phase: "pr-counts";
|
|
66
|
+
fetched: number;
|
|
67
|
+
total: number;
|
|
57
68
|
} | {
|
|
58
69
|
phase: "aggregate";
|
|
59
70
|
};
|
|
71
|
+
export interface ListRepositoriesOptions {
|
|
72
|
+
/**
|
|
73
|
+
* GitHub username to discover repos for.
|
|
74
|
+
* When omitted, the username is resolved automatically from the token.
|
|
75
|
+
*/
|
|
76
|
+
user?: string;
|
|
77
|
+
/** GitHub Personal Access Token (needs repo + read:user scopes) */
|
|
78
|
+
token: string;
|
|
79
|
+
/**
|
|
80
|
+
* Earliest year to scan for contributions.
|
|
81
|
+
* Defaults to **10 years ago** from the current year.
|
|
82
|
+
*/
|
|
83
|
+
fromYear?: number;
|
|
84
|
+
/** Optional progress callback invoked as each year is scanned. */
|
|
85
|
+
onProgress?: (year: number) => void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* List all repositories the user has contributed to.
|
|
89
|
+
*
|
|
90
|
+
* This combines two discovery methods:
|
|
91
|
+
* 1. REST API: All repos the user owns, collaborates on, or is an org member of
|
|
92
|
+
* 2. GraphQL: Public repos contributed to via PRs (year-by-year scan)
|
|
93
|
+
*
|
|
94
|
+
* @returns Array of repositories with owner, name, and privacy status
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* import { listRepositories } from "github-lang-stats";
|
|
99
|
+
*
|
|
100
|
+
* const repos = await listRepositories({
|
|
101
|
+
* token: process.env.GITHUB_TOKEN!,
|
|
102
|
+
* fromYear: 2020,
|
|
103
|
+
* });
|
|
104
|
+
* console.log(repos); // [{ owner: "octocat", name: "hello-world", isPrivate: false }, ...]
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export declare function listRepositories(options: ListRepositoriesOptions): Promise<Repo[]>;
|
|
60
108
|
/**
|
|
61
109
|
* Fetch GitHub language statistics for the given user programmatically.
|
|
62
110
|
*
|
package/dist/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,IAAI,EACJ,SAAS,EACT,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,yBAAyB;IACzC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iEAAiE;IACjE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC5C;AAED,MAAM,MAAM,aAAa,GACtB;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1B,MAAM,WAAW,uBAAuB;IACvC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,uBAAuB,GAC9B,OAAO,CAAC,IAAI,EAAE,CAAC,CAoBjB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,yBAAyB,GAChC,OAAO,CAAC,eAAe,CAAC,CA+K1B"}
|
package/dist/lib.js
CHANGED
|
@@ -13,9 +13,55 @@
|
|
|
13
13
|
* console.log(stats.totals);
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
|
+
import { readFileSync } from "node:fs";
|
|
16
17
|
import { aggregate } from "./aggregator.js";
|
|
17
18
|
import { CacheStore, defaultCachePath } from "./cache.js";
|
|
18
19
|
import { GitHubClient } from "./github-client.js";
|
|
20
|
+
// Read package.json version
|
|
21
|
+
let packageVersion;
|
|
22
|
+
try {
|
|
23
|
+
const packageJsonPath = new URL("../package.json", import.meta.url);
|
|
24
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
25
|
+
packageVersion = packageJson.version;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// If we can't read the version, continue without it
|
|
29
|
+
}
|
|
30
|
+
export { GitHubClient } from "./github-client.js";
|
|
31
|
+
/**
|
|
32
|
+
* List all repositories the user has contributed to.
|
|
33
|
+
*
|
|
34
|
+
* This combines two discovery methods:
|
|
35
|
+
* 1. REST API: All repos the user owns, collaborates on, or is an org member of
|
|
36
|
+
* 2. GraphQL: Public repos contributed to via PRs (year-by-year scan)
|
|
37
|
+
*
|
|
38
|
+
* @returns Array of repositories with owner, name, and privacy status
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* import { listRepositories } from "github-lang-stats";
|
|
43
|
+
*
|
|
44
|
+
* const repos = await listRepositories({
|
|
45
|
+
* token: process.env.GITHUB_TOKEN!,
|
|
46
|
+
* fromYear: 2020,
|
|
47
|
+
* });
|
|
48
|
+
* console.log(repos); // [{ owner: "octocat", name: "hello-world", isPrivate: false }, ...]
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export async function listRepositories(options) {
|
|
52
|
+
const { user: userOption, token, fromYear = new Date().getFullYear() - 10, onProgress } = options;
|
|
53
|
+
const client = new GitHubClient(token);
|
|
54
|
+
// Resolve username from the token if not provided
|
|
55
|
+
let user;
|
|
56
|
+
if (userOption) {
|
|
57
|
+
user = userOption;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const viewer = await client.getViewer();
|
|
61
|
+
user = viewer.login;
|
|
62
|
+
}
|
|
63
|
+
return client.discoverContributedRepos(user, fromYear, onProgress);
|
|
64
|
+
}
|
|
19
65
|
/**
|
|
20
66
|
* Fetch GitHub language statistics for the given user programmatically.
|
|
21
67
|
*
|
|
@@ -24,7 +70,7 @@ import { GitHubClient } from "./github-client.js";
|
|
|
24
70
|
* or interactive prompts, making it suitable for embedding in other tools.
|
|
25
71
|
*/
|
|
26
72
|
export async function getGithubLangStats(options) {
|
|
27
|
-
const { user: userOption, token, fromYear = new Date().getFullYear() - 10, excludeLanguages = [], concurrency = 5, cachePath, useCache = true, repos: repoFilter, includeCommitDates = true, onProgress } = options;
|
|
73
|
+
const { user: userOption, token, fromYear = new Date().getFullYear() - 10, excludeLanguages = [], concurrency = 5, cachePath, useCache = true, repos: repoFilter, includeCommitDates = true, includePRCounts = true, onProgress } = options;
|
|
28
74
|
const client = new GitHubClient(token);
|
|
29
75
|
// Resolve username (and node ID) from the token if user was not provided
|
|
30
76
|
let user;
|
|
@@ -58,7 +104,7 @@ export async function getGithubLangStats(options) {
|
|
|
58
104
|
// ── Phase 2: Collect commit SHAs ────────────────────────────────────────
|
|
59
105
|
const incompleteRepos = reposToProcess.filter((r) => !cache.isRepoComplete(r.owner, r.name));
|
|
60
106
|
if (incompleteRepos.length > 0) {
|
|
61
|
-
const authorId = cachedAuthorId ?? await client.getUserNodeId(user);
|
|
107
|
+
const authorId = cachedAuthorId ?? (await client.getUserNodeId(user));
|
|
62
108
|
for (const repo of incompleteRepos) {
|
|
63
109
|
const shas = await client.collectCommitShas(repo.owner, repo.name, authorId, (count) => {
|
|
64
110
|
onProgress?.({
|
|
@@ -96,6 +142,36 @@ export async function getGithubLangStats(options) {
|
|
|
96
142
|
cache.save();
|
|
97
143
|
onProgress?.({ phase: "details", fetched, total: workList.length });
|
|
98
144
|
}
|
|
145
|
+
// ── Phase 3.5: Collect PR counts ────────────────────────────────────────
|
|
146
|
+
if (includePRCounts) {
|
|
147
|
+
const incompletePRRepos = reposToProcess.filter((r) => !cache.isRepoPRComplete(r.owner, r.name));
|
|
148
|
+
if (incompletePRRepos.length > 0) {
|
|
149
|
+
let prFetched = 0;
|
|
150
|
+
for (const repo of incompletePRRepos) {
|
|
151
|
+
try {
|
|
152
|
+
const prCount = await client.fetchPRCount(repo.owner, repo.name, user);
|
|
153
|
+
cache.setPRCount(repo.owner, repo.name, prCount);
|
|
154
|
+
cache.markRepoPRComplete(repo.owner, repo.name);
|
|
155
|
+
prFetched++;
|
|
156
|
+
if (useCache)
|
|
157
|
+
cache.save();
|
|
158
|
+
onProgress?.({
|
|
159
|
+
phase: "pr-counts",
|
|
160
|
+
fetched: prFetched,
|
|
161
|
+
total: incompletePRRepos.length
|
|
162
|
+
});
|
|
163
|
+
// Add delay to respect Search API rate limit (30 req/min = 2s between requests)
|
|
164
|
+
if (prFetched < incompletePRRepos.length) {
|
|
165
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (_err) {
|
|
169
|
+
// Mark as complete even on error to avoid retrying indefinitely
|
|
170
|
+
cache.markRepoPRComplete(repo.owner, repo.name);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
99
175
|
// ── Phase 4: Aggregate ──────────────────────────────────────────────────
|
|
100
176
|
onProgress?.({ phase: "aggregate" });
|
|
101
177
|
const filteredCommitsByRepo = {};
|
|
@@ -103,7 +179,7 @@ export async function getGithubLangStats(options) {
|
|
|
103
179
|
const key = `${repo.owner}/${repo.name}`;
|
|
104
180
|
filteredCommitsByRepo[key] = cache.getCommits(repo.owner, repo.name);
|
|
105
181
|
}
|
|
106
|
-
const { commitDetails } = cache.getAggregationData();
|
|
107
|
-
return aggregate(user, filteredCommitsByRepo, commitDetails, excludeLanguages, includeCommitDates);
|
|
182
|
+
const { commitDetails, prCountByRepo } = cache.getAggregationData();
|
|
183
|
+
return aggregate(user, filteredCommitsByRepo, commitDetails, excludeLanguages, includeCommitDates, prCountByRepo, reposToProcess, includePRCounts, packageVersion);
|
|
108
184
|
}
|
|
109
185
|
//# sourceMappingURL=lib.js.map
|
package/dist/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export interface Repo {
|
|
2
2
|
owner: string;
|
|
3
3
|
name: string;
|
|
4
|
+
isPrivate?: boolean;
|
|
4
5
|
}
|
|
5
6
|
export interface CommitSha {
|
|
6
7
|
owner: string;
|
|
@@ -23,10 +24,15 @@ export interface RepoLanguageStats {
|
|
|
23
24
|
repo: string;
|
|
24
25
|
languages: Record<string, number>;
|
|
25
26
|
}
|
|
26
|
-
export
|
|
27
|
+
export interface RepoStats {
|
|
27
28
|
/** Optional array of commit dates in ISO format (YYYY-MM-DD) */
|
|
28
29
|
commitDates?: string[];
|
|
29
|
-
|
|
30
|
+
contributionsCountPerLanguage: Record<string, number>;
|
|
31
|
+
/** PR count for this repository, included by default unless --exclude-pr-counts */
|
|
32
|
+
prCount?: number;
|
|
33
|
+
/** Repository privacy status */
|
|
34
|
+
isPrivate?: boolean;
|
|
35
|
+
}
|
|
30
36
|
export interface AggregatedStats {
|
|
31
37
|
/** Total lines changed (additions + deletions) per language across all repos */
|
|
32
38
|
totals: Record<string, number>;
|
|
@@ -39,6 +45,10 @@ export interface AggregatedStats {
|
|
|
39
45
|
totalCommitsProcessed: number;
|
|
40
46
|
totalRepos: number;
|
|
41
47
|
unit: "lines_changed";
|
|
48
|
+
/** Version of the tool that generated these stats */
|
|
49
|
+
version?: string;
|
|
50
|
+
/** Whether PR data was excluded (false or undefined means PRs were included) */
|
|
51
|
+
excludedPRs?: boolean;
|
|
42
52
|
};
|
|
43
53
|
}
|
|
44
54
|
export interface Cache {
|
|
@@ -50,6 +60,10 @@ export interface Cache {
|
|
|
50
60
|
commitsByRepo: Record<string, string[]>;
|
|
51
61
|
/** Map of "<sha>" → CommitDetail (or null if 404/error) */
|
|
52
62
|
commitDetails: Record<string, CommitDetail | null>;
|
|
63
|
+
/** Map of "owner/repo" → PR count */
|
|
64
|
+
prCountByRepo?: Record<string, number>;
|
|
65
|
+
/** Repos whose PR counts have been fully collected */
|
|
66
|
+
completedPRRepos?: string[];
|
|
53
67
|
}
|
|
54
68
|
export interface RateLimitInfo {
|
|
55
69
|
/** Total requests allowed per hour (from x-ratelimit-limit header) */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACzB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC/B,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,yGAAyG;IACzG,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,eAAe;IACf,IAAI,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,eAAe,CAAC;QACtB,qDAAqD;QACrD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gFAAgF;QAChF,WAAW,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;CACF;AAED,MAAM,WAAW,KAAK;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,wDAAwD;IACxD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;IACnD,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC7B,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,gBAAgB,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;CACd"}
|