@hardlydifficult/github 1.0.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 ADDED
@@ -0,0 +1,81 @@
1
+ # @hardlydifficult/github
2
+
3
+ Typed GitHub API client wrapping Octokit with a chainable API.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @hardlydifficult/github
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```typescript
14
+ import { GitHubClient } from "@hardlydifficult/github";
15
+
16
+ // Create client — token defaults to GH_PAT env var
17
+ const github = await GitHubClient.create();
18
+ const github = await GitHubClient.create("ghp_...");
19
+
20
+ // Repo-level
21
+ const repo = github.repo("owner", "repo");
22
+ const prs = await repo.getOpenPRs();
23
+ const repoInfo = await repo.get();
24
+
25
+ // PR-level (chainable from repo)
26
+ const pr = repo.pr(42);
27
+ const data = await pr.get();
28
+ const diff = await pr.getDiff();
29
+ const files = await pr.getFiles();
30
+ const commits = await pr.getCommits();
31
+ const reviews = await pr.getReviews();
32
+ const comments = await pr.getComments();
33
+ const checkRuns = await pr.getCheckRuns();
34
+ await pr.postComment("LGTM!");
35
+ await pr.merge("feat: my feature (#42)");
36
+
37
+ // Owner-level
38
+ const repos = await github.getOwnerRepos("owner");
39
+
40
+ // User-level (uses auto-resolved username)
41
+ const contributed = await github.getContributedRepos(30);
42
+ const myPRs = await github.getMyOpenPRs();
43
+ ```
44
+
45
+ ## API
46
+
47
+ ### `GitHubClient`
48
+
49
+ | Method | Description |
50
+ |--------|-------------|
51
+ | `static create(token?)` | Create client (token defaults to `GH_PAT` env var) |
52
+ | `repo(owner, name)` | Get a `RepoClient` scoped to owner/repo |
53
+ | `getOwnerRepos(owner)` | List repos for a user or org |
54
+ | `getContributedRepos(days)` | Find repos the user contributed to recently |
55
+ | `getMyOpenPRs()` | Find open PRs by the authenticated user |
56
+
57
+ ### `RepoClient`
58
+
59
+ | Method | Description |
60
+ |--------|-------------|
61
+ | `pr(number)` | Get a `PRClient` scoped to a pull request |
62
+ | `getOpenPRs()` | List open pull requests |
63
+ | `get()` | Get repository info |
64
+
65
+ ### `PRClient`
66
+
67
+ | Method | Description |
68
+ |--------|-------------|
69
+ | `get()` | Get pull request details |
70
+ | `getDiff()` | Get PR diff as string |
71
+ | `getFiles()` | List files changed in the PR |
72
+ | `getCommits()` | List commits in the PR |
73
+ | `getReviews()` | List reviews on the PR |
74
+ | `getComments()` | List comments on the PR |
75
+ | `getCheckRuns()` | List check runs (auto-resolves head SHA) |
76
+ | `postComment(body)` | Post a comment on the PR |
77
+ | `merge(title)` | Squash-merge the PR |
78
+
79
+ ### Types
80
+
81
+ `PullRequest`, `Repository`, `User`, `CheckRun`, `PullRequestReview`, `PullRequestComment`, `PullRequestFile`, `PullRequestCommit`, `Label`, `ContributionRepo`, `MergeableState`
@@ -0,0 +1,46 @@
1
+ import { Octokit } from "@octokit/rest";
2
+ import type { CheckRun, ContributionRepo, PullRequest, PullRequestComment, PullRequestCommit, PullRequestFile, PullRequestReview, Repository } from "./types.js";
3
+ export declare class PRClient {
4
+ private readonly octokit;
5
+ private readonly owner;
6
+ private readonly repo;
7
+ private readonly number;
8
+ /** @internal */
9
+ constructor(octokit: Octokit, owner: string, repo: string, number: number);
10
+ get(): Promise<PullRequest>;
11
+ getDiff(): Promise<string>;
12
+ getFiles(): Promise<readonly PullRequestFile[]>;
13
+ getCommits(): Promise<readonly PullRequestCommit[]>;
14
+ getReviews(): Promise<readonly PullRequestReview[]>;
15
+ getComments(): Promise<readonly PullRequestComment[]>;
16
+ getCheckRuns(): Promise<readonly CheckRun[]>;
17
+ postComment(body: string): Promise<void>;
18
+ merge(title: string): Promise<void>;
19
+ }
20
+ export declare class RepoClient {
21
+ private readonly octokit;
22
+ private readonly owner;
23
+ private readonly name;
24
+ /** @internal */
25
+ constructor(octokit: Octokit, owner: string, name: string);
26
+ pr(number: number): PRClient;
27
+ getOpenPRs(): Promise<readonly PullRequest[]>;
28
+ get(): Promise<Repository>;
29
+ }
30
+ export declare class GitHubClient {
31
+ private readonly octokit;
32
+ private readonly username;
33
+ private constructor();
34
+ static create(token?: string): Promise<GitHubClient>;
35
+ repo(owner: string, name: string): RepoClient;
36
+ getOwnerRepos(owner: string): Promise<readonly ContributionRepo[]>;
37
+ getContributedRepos(days: number): Promise<readonly ContributionRepo[]>;
38
+ getMyOpenPRs(): Promise<readonly {
39
+ readonly pr: PullRequest;
40
+ readonly repo: {
41
+ readonly owner: string;
42
+ readonly name: string;
43
+ };
44
+ }[]>;
45
+ }
46
+ //# sourceMappingURL=GitHubClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubClient.d.ts","sourceRoot":"","sources":["../src/GitHubClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,gBAAgB;gBACJ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOnE,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;IAU3B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAa1B,QAAQ,IAAI,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IAW/C,UAAU,IAAI,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC;IAWnD,UAAU,IAAI,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC;IAWnD,WAAW,IAAI,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC;IAWrD,YAAY,IAAI,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC;IAY5C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS1C;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B,gBAAgB;gBACJ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAMzD,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAItB,UAAU,IAAI,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC;IAW7C,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;CAQjC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,OAAO;WAKM,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAY1D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU;IAIvC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC;IAoClE,mBAAmB,CACvB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC;IA+BjC,YAAY,IAAI,OAAO,CAC3B,SAAS;QACP,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE;YAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KAClE,EAAE,CACJ;CA2BF"}
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GitHubClient = exports.RepoClient = exports.PRClient = void 0;
4
+ const rest_1 = require("@octokit/rest");
5
+ class PRClient {
6
+ octokit;
7
+ owner;
8
+ repo;
9
+ number;
10
+ /** @internal */
11
+ constructor(octokit, owner, repo, number) {
12
+ this.octokit = octokit;
13
+ this.owner = owner;
14
+ this.repo = repo;
15
+ this.number = number;
16
+ }
17
+ async get() {
18
+ const response = await this.octokit.pulls.get({
19
+ owner: this.owner,
20
+ repo: this.repo,
21
+ pull_number: this.number,
22
+ });
23
+ return response.data;
24
+ }
25
+ async getDiff() {
26
+ const response = await this.octokit.pulls.get({
27
+ owner: this.owner,
28
+ repo: this.repo,
29
+ pull_number: this.number,
30
+ mediaType: {
31
+ format: "diff",
32
+ },
33
+ });
34
+ return response.data;
35
+ }
36
+ async getFiles() {
37
+ const response = await this.octokit.pulls.listFiles({
38
+ owner: this.owner,
39
+ repo: this.repo,
40
+ pull_number: this.number,
41
+ per_page: 100,
42
+ });
43
+ return response.data;
44
+ }
45
+ async getCommits() {
46
+ const response = await this.octokit.pulls.listCommits({
47
+ owner: this.owner,
48
+ repo: this.repo,
49
+ pull_number: this.number,
50
+ per_page: 100,
51
+ });
52
+ return response.data;
53
+ }
54
+ async getReviews() {
55
+ const response = await this.octokit.pulls.listReviews({
56
+ owner: this.owner,
57
+ repo: this.repo,
58
+ pull_number: this.number,
59
+ per_page: 100,
60
+ });
61
+ return response.data;
62
+ }
63
+ async getComments() {
64
+ const response = await this.octokit.issues.listComments({
65
+ owner: this.owner,
66
+ repo: this.repo,
67
+ issue_number: this.number,
68
+ per_page: 100,
69
+ });
70
+ return response.data;
71
+ }
72
+ async getCheckRuns() {
73
+ const pr = await this.get();
74
+ const response = await this.octokit.checks.listForRef({
75
+ owner: this.owner,
76
+ repo: this.repo,
77
+ ref: pr.head.sha,
78
+ per_page: 100,
79
+ });
80
+ return response.data.check_runs;
81
+ }
82
+ async postComment(body) {
83
+ await this.octokit.issues.createComment({
84
+ owner: this.owner,
85
+ repo: this.repo,
86
+ issue_number: this.number,
87
+ body,
88
+ });
89
+ }
90
+ async merge(title) {
91
+ await this.octokit.pulls.merge({
92
+ owner: this.owner,
93
+ repo: this.repo,
94
+ pull_number: this.number,
95
+ merge_method: "squash",
96
+ commit_title: title,
97
+ });
98
+ }
99
+ }
100
+ exports.PRClient = PRClient;
101
+ class RepoClient {
102
+ octokit;
103
+ owner;
104
+ name;
105
+ /** @internal */
106
+ constructor(octokit, owner, name) {
107
+ this.octokit = octokit;
108
+ this.owner = owner;
109
+ this.name = name;
110
+ }
111
+ pr(number) {
112
+ return new PRClient(this.octokit, this.owner, this.name, number);
113
+ }
114
+ async getOpenPRs() {
115
+ const response = await this.octokit.pulls.list({
116
+ owner: this.owner,
117
+ repo: this.name,
118
+ state: "open",
119
+ per_page: 100,
120
+ });
121
+ return response.data;
122
+ }
123
+ async get() {
124
+ const response = await this.octokit.repos.get({
125
+ owner: this.owner,
126
+ repo: this.name,
127
+ });
128
+ return response.data;
129
+ }
130
+ }
131
+ exports.RepoClient = RepoClient;
132
+ class GitHubClient {
133
+ octokit;
134
+ username;
135
+ constructor(octokit, username) {
136
+ this.octokit = octokit;
137
+ this.username = username;
138
+ }
139
+ static async create(token) {
140
+ const resolvedToken = token ?? process.env.GH_PAT;
141
+ if (resolvedToken === undefined || resolvedToken === "") {
142
+ throw new Error("GitHub token is required (pass token or set GH_PAT)");
143
+ }
144
+ const octokit = new rest_1.Octokit({ auth: resolvedToken });
145
+ const { data } = await octokit.users.getAuthenticated();
146
+ return new GitHubClient(octokit, data.login);
147
+ }
148
+ repo(owner, name) {
149
+ return new RepoClient(this.octokit, owner, name);
150
+ }
151
+ async getOwnerRepos(owner) {
152
+ const repos = [];
153
+ try {
154
+ const orgResponse = await this.octokit.repos.listForOrg({
155
+ org: owner,
156
+ type: "public",
157
+ per_page: 100,
158
+ });
159
+ for (const repo of orgResponse.data) {
160
+ repos.push({
161
+ owner,
162
+ name: repo.name,
163
+ fullName: repo.full_name,
164
+ });
165
+ }
166
+ }
167
+ catch {
168
+ const userResponse = await this.octokit.repos.listForUser({
169
+ username: owner,
170
+ type: "owner",
171
+ per_page: 100,
172
+ });
173
+ for (const repo of userResponse.data) {
174
+ repos.push({
175
+ owner,
176
+ name: repo.name,
177
+ fullName: repo.full_name,
178
+ });
179
+ }
180
+ }
181
+ return repos;
182
+ }
183
+ async getContributedRepos(days) {
184
+ const since = new Date();
185
+ since.setDate(since.getDate() - days);
186
+ const query = `author:${this.username} created:>=${since.toISOString().split("T")[0]}`;
187
+ const repos = new Map();
188
+ const pattern = /repos\/([^/]+)\/([^/]+)$/;
189
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
190
+ const prResults = await this.octokit.search.issuesAndPullRequests({
191
+ q: `${query} is:pr`,
192
+ per_page: 100,
193
+ sort: "updated",
194
+ });
195
+ for (const item of prResults.data.items) {
196
+ const repoUrl = item.repository_url;
197
+ const match = pattern.exec(repoUrl);
198
+ if (match !== null) {
199
+ const [, owner, name] = match;
200
+ const fullName = `${owner}/${name}`;
201
+ if (!repos.has(fullName)) {
202
+ repos.set(fullName, { owner, name, fullName });
203
+ }
204
+ }
205
+ }
206
+ return Array.from(repos.values());
207
+ }
208
+ async getMyOpenPRs() {
209
+ const pattern = /repos\/([^/]+)\/([^/]+)$/;
210
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
211
+ const response = await this.octokit.search.issuesAndPullRequests({
212
+ q: `is:pr is:open author:${this.username}`,
213
+ per_page: 100,
214
+ sort: "updated",
215
+ });
216
+ const results = [];
217
+ for (const item of response.data.items) {
218
+ const repoUrl = item.repository_url;
219
+ const match = pattern.exec(repoUrl);
220
+ if (match !== null) {
221
+ const [, owner, name] = match;
222
+ const pr = await this.repo(owner, name).pr(item.number).get();
223
+ results.push({ pr, repo: { owner, name } });
224
+ }
225
+ }
226
+ return results;
227
+ }
228
+ }
229
+ exports.GitHubClient = GitHubClient;
230
+ //# sourceMappingURL=GitHubClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubClient.js","sourceRoot":"","sources":["../src/GitHubClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { GitHubClient, RepoClient, PRClient } from "./GitHubClient.js";
2
+ export type { PullRequest, Repository, User, CheckRun, PullRequestReview, PullRequestComment, PullRequestFile, PullRequestCommit, Label, ContributionRepo, MergeableState, } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAY,EACV,WAAW,EACX,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,KAAK,EACL,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PRClient = exports.RepoClient = exports.GitHubClient = void 0;
4
+ var GitHubClient_js_1 = require("./GitHubClient.js");
5
+ Object.defineProperty(exports, "GitHubClient", { enumerable: true, get: function () { return GitHubClient_js_1.GitHubClient; } });
6
+ Object.defineProperty(exports, "RepoClient", { enumerable: true, get: function () { return GitHubClient_js_1.RepoClient; } });
7
+ Object.defineProperty(exports, "PRClient", { enumerable: true, get: function () { return GitHubClient_js_1.PRClient; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qDAAuE;AAA9D,+GAAA,YAAY,OAAA;AAAE,6GAAA,UAAU,OAAA;AAAE,2GAAA,QAAQ,OAAA"}
@@ -0,0 +1,109 @@
1
+ export interface Repository {
2
+ readonly id: number;
3
+ readonly name: string;
4
+ readonly full_name: string;
5
+ readonly owner: {
6
+ readonly login: string;
7
+ readonly id: number;
8
+ };
9
+ readonly html_url: string;
10
+ readonly default_branch: string;
11
+ }
12
+ export interface User {
13
+ readonly login: string;
14
+ readonly id: number;
15
+ readonly avatar_url: string;
16
+ readonly html_url: string;
17
+ }
18
+ export interface CheckRun {
19
+ readonly id: number;
20
+ readonly name: string;
21
+ readonly status: "queued" | "in_progress" | "completed";
22
+ readonly conclusion: "success" | "failure" | "neutral" | "cancelled" | "skipped" | "timed_out" | "action_required" | null;
23
+ readonly started_at: string | null;
24
+ readonly completed_at: string | null;
25
+ readonly html_url: string;
26
+ }
27
+ export interface PullRequestReview {
28
+ readonly id: number;
29
+ readonly user: User;
30
+ readonly body: string;
31
+ readonly state: "APPROVED" | "CHANGES_REQUESTED" | "COMMENTED" | "DISMISSED" | "PENDING";
32
+ readonly submitted_at: string;
33
+ readonly html_url: string;
34
+ }
35
+ export interface PullRequestComment {
36
+ readonly id: number;
37
+ readonly user: User;
38
+ readonly body: string;
39
+ readonly created_at: string;
40
+ readonly updated_at: string;
41
+ readonly html_url: string;
42
+ }
43
+ export interface Label {
44
+ readonly id: number;
45
+ readonly name: string;
46
+ readonly color: string;
47
+ readonly description: string | null;
48
+ }
49
+ export type MergeableState = "mergeable" | "conflicting" | "unknown";
50
+ export interface PullRequest {
51
+ readonly id: number;
52
+ readonly number: number;
53
+ readonly title: string;
54
+ readonly body: string | null;
55
+ readonly state: "open" | "closed";
56
+ readonly draft: boolean;
57
+ readonly user: User;
58
+ readonly html_url: string;
59
+ readonly created_at: string;
60
+ readonly updated_at: string;
61
+ readonly closed_at: string | null;
62
+ readonly merged_at: string | null;
63
+ readonly head: {
64
+ readonly ref: string;
65
+ readonly sha: string;
66
+ readonly repo: Repository | null;
67
+ };
68
+ readonly base: {
69
+ readonly ref: string;
70
+ readonly sha: string;
71
+ readonly repo: Repository;
72
+ };
73
+ readonly mergeable: boolean | null;
74
+ readonly mergeable_state: MergeableState;
75
+ readonly labels: readonly Label[];
76
+ readonly requested_reviewers: readonly User[];
77
+ readonly assignees: readonly User[];
78
+ }
79
+ export interface ContributionRepo {
80
+ readonly owner: string;
81
+ readonly name: string;
82
+ readonly fullName: string;
83
+ }
84
+ export interface PullRequestFile {
85
+ readonly sha: string;
86
+ readonly filename: string;
87
+ readonly status: "added" | "removed" | "modified" | "renamed" | "copied" | "changed" | "unchanged";
88
+ readonly additions: number;
89
+ readonly deletions: number;
90
+ readonly changes: number;
91
+ readonly blob_url: string;
92
+ readonly raw_url: string;
93
+ readonly patch?: string;
94
+ readonly previous_filename?: string;
95
+ }
96
+ export interface PullRequestCommit {
97
+ readonly sha: string;
98
+ readonly commit: {
99
+ readonly author: {
100
+ readonly name: string;
101
+ readonly email: string;
102
+ readonly date: string;
103
+ };
104
+ readonly message: string;
105
+ };
106
+ readonly author: User | null;
107
+ readonly html_url: string;
108
+ }
109
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@hardlydifficult/github",
3
+ "version": "1.0.0",
4
+ "main": "./dist/index.js",
5
+ "types": "./dist/index.d.ts",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "test": "vitest run",
12
+ "test:watch": "vitest",
13
+ "test:coverage": "vitest run --coverage",
14
+ "lint": "tsc --noEmit",
15
+ "clean": "rm -rf dist"
16
+ },
17
+ "dependencies": {
18
+ "@octokit/rest": "21.1.1"
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "20.19.31",
22
+ "typescript": "5.8.3",
23
+ "vitest": "1.6.1"
24
+ }
25
+ }