@horizon36596/zenith-github 0.1.1
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/LICENSE +21 -0
- package/NOTICE +18 -0
- package/README.md +108 -0
- package/dist/allowlist.d.ts +14 -0
- package/dist/allowlist.d.ts.map +1 -0
- package/dist/allowlist.js +42 -0
- package/dist/allowlist.js.map +1 -0
- package/dist/auth.d.ts +69 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +118 -0
- package/dist/auth.js.map +1 -0
- package/dist/base64.d.ts +10 -0
- package/dist/base64.d.ts.map +1 -0
- package/dist/base64.js +20 -0
- package/dist/base64.js.map +1 -0
- package/dist/client.d.ts +95 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +265 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +60 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +90 -0
- package/dist/errors.js.map +1 -0
- package/dist/http.d.ts +50 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +150 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/project.d.ts +54 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +109 -0
- package/dist/project.js.map +1 -0
- package/dist/propose.d.ts +38 -0
- package/dist/propose.d.ts.map +1 -0
- package/dist/propose.js +52 -0
- package/dist/propose.js.map +1 -0
- package/dist/review.d.ts +29 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +73 -0
- package/dist/review.js.map +1 -0
- package/dist/types.d.ts +65 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +58 -0
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @horizon36596/zenith-github: an isomorphic (browser + Node), `fetch`-based GitHub client — no Octokit, no
|
|
3
|
+
* Node-only APIs. Covers PAT auth behind an `AuthProvider` seam, the Contents/branches/pulls REST
|
|
4
|
+
* surface, and the project-shaped operations (`propose`, `loadReview`).
|
|
5
|
+
*
|
|
6
|
+
* Pure protocol and orchestration: this package never canonicalizes a file (that is
|
|
7
|
+
* `core.canonicalize`) and never diffs one (`core.diff`); it moves already-canonical text to and
|
|
8
|
+
* from GitHub (site/docs/github.md).
|
|
9
|
+
*/
|
|
10
|
+
export { AuthError, BaseBranchWriteError, ConflictError, GitHubError, MergeConflictError, NotFoundError, PathNotAllowedError, RateLimitError, } from "./errors.js";
|
|
11
|
+
export { BrowserTokenStore, MemoryTokenStore, NodeTokenStore, PatAuth, validateToken } from "./auth.js";
|
|
12
|
+
export type { AuthProvider, TokenInfo, TokenStore } from "./auth.js";
|
|
13
|
+
export { HttpClient } from "./http.js";
|
|
14
|
+
export type { HttpOptions, RateLimitSnapshot, RequestOptions } from "./http.js";
|
|
15
|
+
export { GitHubClient } from "./client.js";
|
|
16
|
+
export type { ContentWriteGuard, GitHubClientOptions, MergeWriteGuard } from "./client.js";
|
|
17
|
+
export type { Branch, ContentEntry, ContentFile, MergeResult, PullFile, PullRequest, PutResult, Repo, RepoSummary, User, } from "./types.js";
|
|
18
|
+
export { assertPathAllowed, autoPath, isPathAllowed, renderPath } from "./allowlist.js";
|
|
19
|
+
export { GitHubProject } from "./project.js";
|
|
20
|
+
export type { AutoListing, GitHubProjectOptions, OpenedProject } from "./project.js";
|
|
21
|
+
export { propose, RENDER_URL_PLACEHOLDER } from "./propose.js";
|
|
22
|
+
export type { ProposeInput, ProposeResult } from "./propose.js";
|
|
23
|
+
export { diffAnchor, diffFileHash, lineAnchor, loadReview } from "./review.js";
|
|
24
|
+
export type { ReviewData } from "./review.js";
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACxG,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EACV,MAAM,EACN,YAAY,EACZ,WAAW,EACX,WAAW,EACX,QAAQ,EACR,WAAW,EACX,SAAS,EACT,IAAI,EACJ,WAAW,EACX,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/E,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @horizon36596/zenith-github: an isomorphic (browser + Node), `fetch`-based GitHub client — no Octokit, no
|
|
3
|
+
* Node-only APIs. Covers PAT auth behind an `AuthProvider` seam, the Contents/branches/pulls REST
|
|
4
|
+
* surface, and the project-shaped operations (`propose`, `loadReview`).
|
|
5
|
+
*
|
|
6
|
+
* Pure protocol and orchestration: this package never canonicalizes a file (that is
|
|
7
|
+
* `core.canonicalize`) and never diffs one (`core.diff`); it moves already-canonical text to and
|
|
8
|
+
* from GitHub (site/docs/github.md).
|
|
9
|
+
*/
|
|
10
|
+
export { AuthError, BaseBranchWriteError, ConflictError, GitHubError, MergeConflictError, NotFoundError, PathNotAllowedError, RateLimitError, } from "./errors.js";
|
|
11
|
+
export { BrowserTokenStore, MemoryTokenStore, NodeTokenStore, PatAuth, validateToken } from "./auth.js";
|
|
12
|
+
export { HttpClient } from "./http.js";
|
|
13
|
+
export { GitHubClient } from "./client.js";
|
|
14
|
+
export { assertPathAllowed, autoPath, isPathAllowed, renderPath } from "./allowlist.js";
|
|
15
|
+
export { GitHubProject } from "./project.js";
|
|
16
|
+
export { propose, RENDER_URL_PLACEHOLDER } from "./propose.js";
|
|
17
|
+
export { diffAnchor, diffFileHash, lineAnchor, loadReview } from "./review.js";
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAExG,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAc3C,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Link } from "@horizon36596/zenith-schema";
|
|
2
|
+
import type { GitHubClient } from "./client.js";
|
|
3
|
+
import type { PutResult } from "./types.js";
|
|
4
|
+
export interface GitHubProjectOptions {
|
|
5
|
+
owner: string;
|
|
6
|
+
repo: string;
|
|
7
|
+
base: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AutoListing {
|
|
10
|
+
name: string;
|
|
11
|
+
path: string;
|
|
12
|
+
}
|
|
13
|
+
export interface OpenedProject {
|
|
14
|
+
link: Link;
|
|
15
|
+
robotText: string;
|
|
16
|
+
fieldText: string;
|
|
17
|
+
waypointsText: string | null;
|
|
18
|
+
autos: AutoListing[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The robot-repository-shaped view on top of `GitHubClient`: bound to one `{owner, repo, base}`,
|
|
22
|
+
* it knows `zenith.json`'s layout, the work-branch naming convention, the never-write-base guard
|
|
23
|
+
* and the path allowlist (site/docs/github.md).
|
|
24
|
+
*/
|
|
25
|
+
export declare class GitHubProject {
|
|
26
|
+
readonly owner: string;
|
|
27
|
+
readonly repo: string;
|
|
28
|
+
readonly base: string;
|
|
29
|
+
private readonly client;
|
|
30
|
+
private linkCache;
|
|
31
|
+
constructor(client: GitHubClient, options: GitHubProjectOptions);
|
|
32
|
+
/** `zenith.json`, parsed and cached after the first read (by `open` or any write). */
|
|
33
|
+
link(): Promise<Link>;
|
|
34
|
+
/**
|
|
35
|
+
* Reads `zenith.json`, the robot, field and waypoint files, and lists `autosDir/*.auto.json`,
|
|
36
|
+
* all at `base` (06 §1). Auto file text is not fetched here; the caller loads what it needs
|
|
37
|
+
* through `contents.get`, and `loadReview` loads the two sides of a changed auto for review.
|
|
38
|
+
*/
|
|
39
|
+
open(): Promise<OpenedProject>;
|
|
40
|
+
/** `auto/<autoName>/<login>`, or `custom` when the user typed a branch name (06 §1). */
|
|
41
|
+
workBranchName(autoName: string, login: string, custom?: string): string;
|
|
42
|
+
/** Ensures the work branch exists, creating it from `base` if it does not, and returns its name. */
|
|
43
|
+
workBranch(autoName: string, login: string, custom?: string): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* Commits `text` (already canonical — `GitHubProject` does not canonicalize) to `path` on
|
|
46
|
+
* `branch`, with message `auto(<autoName>): <summary or "edit">` (06 §1). Refuses a path outside
|
|
47
|
+
* the allowlist (`PathNotAllowedError`) and refuses `branch === base` (`BaseBranchWriteError`),
|
|
48
|
+
* both before any network call.
|
|
49
|
+
*/
|
|
50
|
+
save(branch: string, autoName: string, path: string, text: string, summary?: string): Promise<PutResult>;
|
|
51
|
+
private getLink;
|
|
52
|
+
private currentSha;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,SAAS,CAAqB;gBAE1B,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,oBAAoB;IAO/D,sFAAsF;IAChF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IAsBpC,wFAAwF;IACxF,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAIxE,oGAAoG;IAC9F,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWnF;;;;;OAKG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;YAehG,OAAO;YAQP,UAAU;CASzB"}
|
package/dist/project.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { parseLink } from "@horizon36596/zenith-schema";
|
|
2
|
+
import { assertPathAllowed } from "./allowlist.js";
|
|
3
|
+
import { BaseBranchWriteError, NotFoundError } from "./errors.js";
|
|
4
|
+
/**
|
|
5
|
+
* The robot-repository-shaped view on top of `GitHubClient`: bound to one `{owner, repo, base}`,
|
|
6
|
+
* it knows `zenith.json`'s layout, the work-branch naming convention, the never-write-base guard
|
|
7
|
+
* and the path allowlist (site/docs/github.md).
|
|
8
|
+
*/
|
|
9
|
+
export class GitHubProject {
|
|
10
|
+
owner;
|
|
11
|
+
repo;
|
|
12
|
+
base;
|
|
13
|
+
client;
|
|
14
|
+
linkCache = null;
|
|
15
|
+
constructor(client, options) {
|
|
16
|
+
this.client = client;
|
|
17
|
+
this.owner = options.owner;
|
|
18
|
+
this.repo = options.repo;
|
|
19
|
+
this.base = options.base;
|
|
20
|
+
}
|
|
21
|
+
/** `zenith.json`, parsed and cached after the first read (by `open` or any write). */
|
|
22
|
+
async link() {
|
|
23
|
+
return this.getLink();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Reads `zenith.json`, the robot, field and waypoint files, and lists `autosDir/*.auto.json`,
|
|
27
|
+
* all at `base` (06 §1). Auto file text is not fetched here; the caller loads what it needs
|
|
28
|
+
* through `contents.get`, and `loadReview` loads the two sides of a changed auto for review.
|
|
29
|
+
*/
|
|
30
|
+
async open() {
|
|
31
|
+
const link = await this.getLink();
|
|
32
|
+
const [robotFile, fieldFile] = await Promise.all([
|
|
33
|
+
this.client.contents.get(this.owner, this.repo, link.robot, this.base),
|
|
34
|
+
this.client.contents.get(this.owner, this.repo, link.field, this.base),
|
|
35
|
+
]);
|
|
36
|
+
const waypointsFile = link.waypoints
|
|
37
|
+
? await this.client.contents.get(this.owner, this.repo, link.waypoints, this.base)
|
|
38
|
+
: null;
|
|
39
|
+
const entries = await this.client.contents.list(this.owner, this.repo, link.autosDir, this.base);
|
|
40
|
+
const autos = entries
|
|
41
|
+
.filter((entry) => entry.type === "file" && entry.name.endsWith(".auto.json"))
|
|
42
|
+
.map((entry) => ({ name: entry.name.slice(0, -".auto.json".length), path: entry.path }));
|
|
43
|
+
return {
|
|
44
|
+
link,
|
|
45
|
+
robotText: robotFile.text,
|
|
46
|
+
fieldText: fieldFile.text,
|
|
47
|
+
waypointsText: waypointsFile?.text ?? null,
|
|
48
|
+
autos,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** `auto/<autoName>/<login>`, or `custom` when the user typed a branch name (06 §1). */
|
|
52
|
+
workBranchName(autoName, login, custom) {
|
|
53
|
+
return custom && custom.trim().length > 0 ? custom : `auto/${autoName}/${login}`;
|
|
54
|
+
}
|
|
55
|
+
/** Ensures the work branch exists, creating it from `base` if it does not, and returns its name. */
|
|
56
|
+
async workBranch(autoName, login, custom) {
|
|
57
|
+
const name = this.workBranchName(autoName, login, custom);
|
|
58
|
+
try {
|
|
59
|
+
await this.client.branches.get(this.owner, this.repo, name);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (!(error instanceof NotFoundError))
|
|
63
|
+
throw error;
|
|
64
|
+
await this.client.branches.create(this.owner, this.repo, name, { branch: this.base });
|
|
65
|
+
}
|
|
66
|
+
return name;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Commits `text` (already canonical — `GitHubProject` does not canonicalize) to `path` on
|
|
70
|
+
* `branch`, with message `auto(<autoName>): <summary or "edit">` (06 §1). Refuses a path outside
|
|
71
|
+
* the allowlist (`PathNotAllowedError`) and refuses `branch === base` (`BaseBranchWriteError`),
|
|
72
|
+
* both before any network call.
|
|
73
|
+
*/
|
|
74
|
+
async save(branch, autoName, path, text, summary) {
|
|
75
|
+
if (branch === this.base)
|
|
76
|
+
throw new BaseBranchWriteError(branch);
|
|
77
|
+
const link = await this.getLink();
|
|
78
|
+
assertPathAllowed(link, path);
|
|
79
|
+
const message = `auto(${autoName}): ${summary && summary.trim().length > 0 ? summary : "edit"}`;
|
|
80
|
+
const sha = await this.currentSha(path, branch);
|
|
81
|
+
// The checks above are a fast, network-free refusal; the guard passed here makes the same two
|
|
82
|
+
// checks live inside GitHubClient.contents.put itself too, so they hold even for a caller that
|
|
83
|
+
// reaches the client directly instead of through this method (finding 12).
|
|
84
|
+
return this.client.contents.put(this.owner, this.repo, path, text, message, branch, sha, {
|
|
85
|
+
base: this.base,
|
|
86
|
+
link,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async getLink() {
|
|
90
|
+
if (this.linkCache)
|
|
91
|
+
return this.linkCache;
|
|
92
|
+
const file = await this.client.contents.get(this.owner, this.repo, "zenith.json", this.base);
|
|
93
|
+
const link = parseLink(JSON.parse(file.text));
|
|
94
|
+
this.linkCache = link;
|
|
95
|
+
return link;
|
|
96
|
+
}
|
|
97
|
+
async currentSha(path, branch) {
|
|
98
|
+
try {
|
|
99
|
+
const file = await this.client.contents.get(this.owner, this.repo, path, branch);
|
|
100
|
+
return file.sha;
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
if (error instanceof NotFoundError)
|
|
104
|
+
return undefined;
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { GitHubClient } from "./client.js";
|
|
2
|
+
import type { GitHubProject } from "./project.js";
|
|
3
|
+
/**
|
|
4
|
+
* The token `core.prBody` is expected to leave in the body wherever the rendered SVG's URL goes.
|
|
5
|
+
* `propose` replaces it with the raw GitHub URL of the SVG once it has actually been committed to
|
|
6
|
+
* the head branch (06 §3 step 4) — the two sides of this contract must agree on the token.
|
|
7
|
+
*/
|
|
8
|
+
export declare const RENDER_URL_PLACEHOLDER = "{{renderUrl}}";
|
|
9
|
+
export interface ProposeInput {
|
|
10
|
+
autoName: string;
|
|
11
|
+
/** Canonical text for `<autosDir>/<autoName>.auto.json`. Already canonicalized by the caller. */
|
|
12
|
+
autoText: string;
|
|
13
|
+
/** Canonical text for the waypoints file, only when it changed. */
|
|
14
|
+
waypointsText?: string;
|
|
15
|
+
/** The rendered field SVG, committed to `<autosDir>/.renders/<autoName>.svg`. */
|
|
16
|
+
renderSvg: string;
|
|
17
|
+
/** The PR body from `core.prBody`, containing `RENDER_URL_PLACEHOLDER` in place of the image URL. */
|
|
18
|
+
body: string;
|
|
19
|
+
base: string;
|
|
20
|
+
reviewers?: string[];
|
|
21
|
+
/** Overrides the work branch name; defaults to `auto/<autoName>/<login>`. */
|
|
22
|
+
branchName?: string;
|
|
23
|
+
/** Commit summary for the auto/waypoints commit; defaults to "edit". */
|
|
24
|
+
summary?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ProposeResult {
|
|
27
|
+
url: string;
|
|
28
|
+
number: number;
|
|
29
|
+
branch: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* `Propose`: a pull request that reviews itself (06 §3). Ensures the work branch exists and is
|
|
33
|
+
* current with `base`, commits the auto (and waypoints, and the render SVG), then opens or updates
|
|
34
|
+
* the PR against `base`. The caller has already run `zenith validate` and built `body` with
|
|
35
|
+
* `core.prBody` — `propose` only wires the GitHub side together.
|
|
36
|
+
*/
|
|
37
|
+
export declare function propose(client: GitHubClient, project: GitHubProject, input: ProposeInput): Promise<ProposeResult>;
|
|
38
|
+
//# sourceMappingURL=propose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose.d.ts","sourceRoot":"","sources":["../src/propose.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,iGAAiG;IACjG,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,qGAAqG;IACrG,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,aAAa,CAAC,CAgDxB"}
|
package/dist/propose.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { autoPath, renderPath } from "./allowlist.js";
|
|
2
|
+
/**
|
|
3
|
+
* The token `core.prBody` is expected to leave in the body wherever the rendered SVG's URL goes.
|
|
4
|
+
* `propose` replaces it with the raw GitHub URL of the SVG once it has actually been committed to
|
|
5
|
+
* the head branch (06 §3 step 4) — the two sides of this contract must agree on the token.
|
|
6
|
+
*/
|
|
7
|
+
export const RENDER_URL_PLACEHOLDER = "{{renderUrl}}";
|
|
8
|
+
/**
|
|
9
|
+
* `Propose`: a pull request that reviews itself (06 §3). Ensures the work branch exists and is
|
|
10
|
+
* current with `base`, commits the auto (and waypoints, and the render SVG), then opens or updates
|
|
11
|
+
* the PR against `base`. The caller has already run `zenith validate` and built `body` with
|
|
12
|
+
* `core.prBody` — `propose` only wires the GitHub side together.
|
|
13
|
+
*/
|
|
14
|
+
export async function propose(client, project, input) {
|
|
15
|
+
if (input.base !== project.base) {
|
|
16
|
+
throw new Error(`propose was called with base "${input.base}" but this project is bound to base "${project.base}".`);
|
|
17
|
+
}
|
|
18
|
+
const link = await project.link();
|
|
19
|
+
const me = await client.users.me();
|
|
20
|
+
const branch = await project.workBranch(input.autoName, me.login, input.branchName);
|
|
21
|
+
// Step 2 of 06 §3: bring the work branch up to date with base before writing to it. On a real
|
|
22
|
+
// conflict this throws MergeConflictError, naming the files, and propose stops here. The guard
|
|
23
|
+
// refuses outright if `branch` (the merge's write target) were ever somehow the base itself
|
|
24
|
+
// (finding 12) — project.save's own guard covers every write after this, but this call happens
|
|
25
|
+
// before any of those.
|
|
26
|
+
await client.repos.merge(project.owner, project.repo, branch, project.base, { base: project.base });
|
|
27
|
+
const summary = input.summary ?? "edit";
|
|
28
|
+
await project.save(branch, input.autoName, autoPath(link, input.autoName), input.autoText, summary);
|
|
29
|
+
if (input.waypointsText !== undefined && link.waypoints) {
|
|
30
|
+
await project.save(branch, input.autoName, link.waypoints, input.waypointsText, summary);
|
|
31
|
+
}
|
|
32
|
+
const svgPath = renderPath(link, input.autoName);
|
|
33
|
+
await project.save(branch, input.autoName, svgPath, input.renderSvg, summary);
|
|
34
|
+
const rawSvgUrl = `https://raw.githubusercontent.com/${project.owner}/${project.repo}/${branch}/${svgPath}`;
|
|
35
|
+
const body = input.body.split(RENDER_URL_PLACEHOLDER).join(rawSvgUrl);
|
|
36
|
+
const existing = await client.pulls.listForBranch(project.owner, project.repo, branch, "open");
|
|
37
|
+
const pull = existing[0] ??
|
|
38
|
+
(await client.pulls.create(project.owner, project.repo, {
|
|
39
|
+
title: input.autoName,
|
|
40
|
+
head: branch,
|
|
41
|
+
base: project.base,
|
|
42
|
+
body,
|
|
43
|
+
}));
|
|
44
|
+
const updated = existing[0] === undefined
|
|
45
|
+
? pull
|
|
46
|
+
: await client.pulls.update(project.owner, project.repo, pull.number, { body });
|
|
47
|
+
if (input.reviewers && input.reviewers.length > 0) {
|
|
48
|
+
await client.pulls.requestReviewers(project.owner, project.repo, updated.number, input.reviewers);
|
|
49
|
+
}
|
|
50
|
+
return { url: updated.htmlUrl, number: updated.number, branch };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=propose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propose.js","sourceRoot":"","sources":["../src/propose.ts"],"names":[],"mappings":"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"}
|
package/dist/review.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Auto } from "@horizon36596/zenith-schema";
|
|
2
|
+
import type { GitHubClient } from "./client.js";
|
|
3
|
+
import type { GitHubProject } from "./project.js";
|
|
4
|
+
import type { PullRequest } from "./types.js";
|
|
5
|
+
export interface ReviewData {
|
|
6
|
+
/** `null` when the changed auto file was added by this PR and so has no base version. */
|
|
7
|
+
base: Auto | null;
|
|
8
|
+
head: Auto;
|
|
9
|
+
/** Every path this PR changes, not only the auto file, so the app can flag unexpected files. */
|
|
10
|
+
files: string[];
|
|
11
|
+
prMeta: PullRequest;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Review mode's data load (06 §4): resolves the PR, finds the changed `*.auto.json` file, and
|
|
15
|
+
* fetches its text from both sides so the app can call `core.diff(base, head)` and draw both
|
|
16
|
+
* routines. `06` describes one author per work branch, so this expects exactly one changed auto
|
|
17
|
+
* file; more or fewer is reported as an error rather than guessed at.
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadReview(client: GitHubClient, project: GitHubProject, prUrlOrNumber: string | number): Promise<ReviewData>;
|
|
20
|
+
/** 1-based line number of the step with `stepId` in canonical `text`, or `null` if it is not there. */
|
|
21
|
+
export declare function lineAnchor(text: string, stepId: string): number | null;
|
|
22
|
+
/**
|
|
23
|
+
* Sha256 hex of the file path, the way GitHub itself computes the `#diff-<hash>` id in a PR's
|
|
24
|
+
* diff view. Uses Web Crypto (`crypto.subtle`), global in Node 18+ and every evergreen browser.
|
|
25
|
+
*/
|
|
26
|
+
export declare function diffFileHash(path: string): Promise<string>;
|
|
27
|
+
/** `#diff-<hash>R<line>` (or `L<line>` for the base side), or `null` when the step has no line. */
|
|
28
|
+
export declare function diffAnchor(path: string, text: string, stepId: string, side?: "base" | "head"): Promise<string | null>;
|
|
29
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,yFAAyF;IACzF,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,gGAAgG;IAChG,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;CACrB;AAiBD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,MAAM,GAAG,MAAM,GAC7B,OAAO,CAAC,UAAU,CAAC,CA2BrB;AAED,uGAAuG;AACvG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOtE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIhE;AAED,mGAAmG;AACnG,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,MAAM,GAAG,MAAe,GAC7B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKxB"}
|
package/dist/review.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { parseAuto } from "@horizon36596/zenith-schema";
|
|
2
|
+
function resolvePrNumber(input, owner, repo) {
|
|
3
|
+
if (typeof input === "number")
|
|
4
|
+
return input;
|
|
5
|
+
const trimmed = input.trim();
|
|
6
|
+
if (/^\d+$/.test(trimmed))
|
|
7
|
+
return Number(trimmed);
|
|
8
|
+
const match = /github\.com\/([^/]+)\/([^/]+)\/pull\/(\d+)/.exec(trimmed);
|
|
9
|
+
if (!match) {
|
|
10
|
+
throw new Error(`"${input}" is not a pull request number or a github.com pull request URL.`);
|
|
11
|
+
}
|
|
12
|
+
const [, urlOwner = "", urlRepo = "", number = ""] = match;
|
|
13
|
+
if (urlOwner.toLowerCase() !== owner.toLowerCase() || urlRepo.toLowerCase() !== repo.toLowerCase()) {
|
|
14
|
+
throw new Error(`"${input}" is a pull request in ${urlOwner}/${urlRepo}, not ${owner}/${repo}.`);
|
|
15
|
+
}
|
|
16
|
+
return Number(number);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Review mode's data load (06 §4): resolves the PR, finds the changed `*.auto.json` file, and
|
|
20
|
+
* fetches its text from both sides so the app can call `core.diff(base, head)` and draw both
|
|
21
|
+
* routines. `06` describes one author per work branch, so this expects exactly one changed auto
|
|
22
|
+
* file; more or fewer is reported as an error rather than guessed at.
|
|
23
|
+
*/
|
|
24
|
+
export async function loadReview(client, project, prUrlOrNumber) {
|
|
25
|
+
const number = resolvePrNumber(prUrlOrNumber, project.owner, project.repo);
|
|
26
|
+
const prMeta = await client.pulls.get(project.owner, project.repo, number);
|
|
27
|
+
const changedFiles = await client.pulls.files(project.owner, project.repo, number);
|
|
28
|
+
const autoFiles = changedFiles.filter((file) => file.filename.endsWith(".auto.json"));
|
|
29
|
+
if (autoFiles.length === 0) {
|
|
30
|
+
throw new Error(`Pull request #${number} does not change any *.auto.json file.`);
|
|
31
|
+
}
|
|
32
|
+
if (autoFiles.length > 1) {
|
|
33
|
+
throw new Error(`Pull request #${number} changes ${autoFiles.length} *.auto.json files; loadReview expects exactly one ` +
|
|
34
|
+
"(06 §6: one author, one auto, per work branch).");
|
|
35
|
+
}
|
|
36
|
+
const file = autoFiles[0];
|
|
37
|
+
const headText = (await client.contents.get(project.owner, project.repo, file.filename, prMeta.head.sha)).text;
|
|
38
|
+
const head = parseAuto(JSON.parse(headText));
|
|
39
|
+
let base = null;
|
|
40
|
+
if (file.status !== "added") {
|
|
41
|
+
const baseText = (await client.contents.get(project.owner, project.repo, file.filename, prMeta.base.sha)).text;
|
|
42
|
+
base = parseAuto(JSON.parse(baseText));
|
|
43
|
+
}
|
|
44
|
+
return { base, head, files: changedFiles.map((changed) => changed.filename), prMeta };
|
|
45
|
+
}
|
|
46
|
+
/** 1-based line number of the step with `stepId` in canonical `text`, or `null` if it is not there. */
|
|
47
|
+
export function lineAnchor(text, stepId) {
|
|
48
|
+
const needle = `"id": ${JSON.stringify(stepId)}`;
|
|
49
|
+
const lines = text.split("\n");
|
|
50
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
51
|
+
if (lines[index].includes(needle))
|
|
52
|
+
return index + 1;
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Sha256 hex of the file path, the way GitHub itself computes the `#diff-<hash>` id in a PR's
|
|
58
|
+
* diff view. Uses Web Crypto (`crypto.subtle`), global in Node 18+ and every evergreen browser.
|
|
59
|
+
*/
|
|
60
|
+
export async function diffFileHash(path) {
|
|
61
|
+
const bytes = new TextEncoder().encode(path);
|
|
62
|
+
const digest = await crypto.subtle.digest("SHA-256", bytes);
|
|
63
|
+
return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
64
|
+
}
|
|
65
|
+
/** `#diff-<hash>R<line>` (or `L<line>` for the base side), or `null` when the step has no line. */
|
|
66
|
+
export async function diffAnchor(path, text, stepId, side = "head") {
|
|
67
|
+
const line = lineAnchor(text, stepId);
|
|
68
|
+
if (line === null)
|
|
69
|
+
return null;
|
|
70
|
+
const hash = await diffFileHash(path);
|
|
71
|
+
return `#diff-${hash}${side === "head" ? "R" : "L"}${line}`;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** The subset of GitHub's REST responses this client actually reads. */
|
|
2
|
+
export interface RepoSummary {
|
|
3
|
+
owner: string;
|
|
4
|
+
repo: string;
|
|
5
|
+
fullName: string;
|
|
6
|
+
defaultBranch: string;
|
|
7
|
+
private: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface Repo extends RepoSummary {
|
|
10
|
+
htmlUrl: string;
|
|
11
|
+
}
|
|
12
|
+
export interface Branch {
|
|
13
|
+
name: string;
|
|
14
|
+
sha: string;
|
|
15
|
+
protected: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface ContentFile {
|
|
18
|
+
path: string;
|
|
19
|
+
sha: string;
|
|
20
|
+
text: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ContentEntry {
|
|
23
|
+
name: string;
|
|
24
|
+
path: string;
|
|
25
|
+
sha: string;
|
|
26
|
+
type: "file" | "dir" | "symlink" | "submodule";
|
|
27
|
+
}
|
|
28
|
+
export interface PutResult {
|
|
29
|
+
/** The blob sha of the file as written, for the next `contents.put` call's `sha` argument. */
|
|
30
|
+
sha: string;
|
|
31
|
+
commitSha: string;
|
|
32
|
+
}
|
|
33
|
+
export interface MergeResult {
|
|
34
|
+
/** `null` when the base already contained the head (nothing to merge). */
|
|
35
|
+
commitSha: string | null;
|
|
36
|
+
merged: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface PullRequest {
|
|
39
|
+
number: number;
|
|
40
|
+
url: string;
|
|
41
|
+
htmlUrl: string;
|
|
42
|
+
state: "open" | "closed";
|
|
43
|
+
title: string;
|
|
44
|
+
body: string | null;
|
|
45
|
+
head: {
|
|
46
|
+
ref: string;
|
|
47
|
+
sha: string;
|
|
48
|
+
};
|
|
49
|
+
base: {
|
|
50
|
+
ref: string;
|
|
51
|
+
sha: string;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export interface PullFile {
|
|
55
|
+
filename: string;
|
|
56
|
+
status: "added" | "removed" | "modified" | "renamed" | "copied" | "changed" | "unchanged";
|
|
57
|
+
sha: string;
|
|
58
|
+
patch?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface User {
|
|
61
|
+
login: string;
|
|
62
|
+
id: number;
|
|
63
|
+
name: string | null;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CAAC;CAChD;AAED,MAAM,WAAW,SAAS;IACxB,8FAA8F;IAC9F,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACpC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAC1F,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@horizon36596/zenith-github",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "GitHub collaboration for Zenith: a fetch-based client that proposes autos as pull requests and loads review links, in the browser or Node.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ftc",
|
|
7
|
+
"first-tech-challenge",
|
|
8
|
+
"robotics",
|
|
9
|
+
"autonomous",
|
|
10
|
+
"zenith",
|
|
11
|
+
"github",
|
|
12
|
+
"pull-request",
|
|
13
|
+
"review"
|
|
14
|
+
],
|
|
15
|
+
"homepage": "https://libraries.horizon36596.org/zenith/",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/Horizon-36596/zenith/issues"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/Horizon-36596/zenith.git",
|
|
22
|
+
"directory": "packages/github"
|
|
23
|
+
},
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"author": "Horizon (FTC 36596)",
|
|
26
|
+
"type": "module",
|
|
27
|
+
"main": "./dist/index.js",
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"default": "./dist/index.js"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist",
|
|
37
|
+
"!dist/**/*.test.*",
|
|
38
|
+
"!dist/**/*.qa.test.*",
|
|
39
|
+
"!dist/**/testSupport.*",
|
|
40
|
+
"!dist/**/*.tsbuildinfo",
|
|
41
|
+
"!dist/testing",
|
|
42
|
+
"!dist/**/testing.*",
|
|
43
|
+
"README.md",
|
|
44
|
+
"LICENSE",
|
|
45
|
+
"NOTICE"
|
|
46
|
+
],
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=22"
|
|
49
|
+
},
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public",
|
|
52
|
+
"provenance": true
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@horizon36596/zenith-schema": "0.1.1"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {}
|
|
58
|
+
}
|