repoview 0.5.1 → 0.6.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/CHANGELOG.md +87 -0
- package/CONTRIBUTING.md +4 -3
- package/DEVELOPMENT.md +84 -16
- package/README.md +71 -5
- package/dist/api.js +58 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.js +454 -0
- package/dist/cli.js.map +1 -0
- package/dist/csv.js +64 -0
- package/dist/csv.js.map +1 -0
- package/dist/format.js +25 -0
- package/dist/format.js.map +1 -0
- package/dist/gist-router.js +153 -0
- package/dist/gist-router.js.map +1 -0
- package/dist/gists.js +130 -0
- package/dist/gists.js.map +1 -0
- package/dist/git.js +67 -0
- package/dist/git.js.map +1 -0
- package/dist/gitignore.js +34 -0
- package/dist/gitignore.js.map +1 -0
- package/dist/linkcheck.js +310 -0
- package/dist/linkcheck.js.map +1 -0
- package/dist/markdown.js +493 -0
- package/dist/markdown.js.map +1 -0
- package/dist/net.js +10 -0
- package/dist/net.js.map +1 -0
- package/dist/paths.js +59 -0
- package/dist/paths.js.map +1 -0
- package/dist/reload.js +55 -0
- package/dist/reload.js.map +1 -0
- package/dist/repo-context.js +80 -0
- package/dist/repo-context.js.map +1 -0
- package/dist/repo-router.js +810 -0
- package/dist/repo-router.js.map +1 -0
- package/dist/review-cli.js +228 -0
- package/dist/review-cli.js.map +1 -0
- package/dist/server.js +122 -0
- package/dist/server.js.map +1 -0
- package/dist/session.js +86 -0
- package/dist/session.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/views.js +780 -0
- package/dist/views.js.map +1 -0
- package/package.json +20 -9
- package/public/app.css +113 -0
- package/public/app.js +26 -3
- package/public/gist.js +60 -0
- package/public/review.js +9 -6
- package/public/session.js +61 -0
- package/src/cli.js +0 -91
- package/src/gitignore.js +0 -34
- package/src/linkcheck.js +0 -312
- package/src/markdown.js +0 -518
- package/src/review-cli.js +0 -245
- package/src/server.js +0 -1126
- package/src/views.js +0 -657
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../src/views.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "repoview",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "GitHub-like repo browsing for local Git repositories (Markdown, live reload, broken link scanner).",
|
|
@@ -15,12 +15,13 @@
|
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"author": "Hang Yin <hangyin@phala.com>",
|
|
17
17
|
"bin": {
|
|
18
|
-
"repoview": "
|
|
18
|
+
"repoview": "dist/cli.js"
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
|
-
"
|
|
21
|
+
"dist/",
|
|
22
22
|
"public/",
|
|
23
23
|
"README.md",
|
|
24
|
+
"CHANGELOG.md",
|
|
24
25
|
"LICENSE",
|
|
25
26
|
"DEVELOPMENT.md",
|
|
26
27
|
"CONTRIBUTING.md"
|
|
@@ -38,11 +39,14 @@
|
|
|
38
39
|
"live-reload"
|
|
39
40
|
],
|
|
40
41
|
"scripts": {
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
42
|
+
"build": "tsc",
|
|
43
|
+
"start": "tsx src/cli.ts",
|
|
44
|
+
"dev": "tsx src/cli.ts --watch",
|
|
45
|
+
"lint": "tsc --noEmit",
|
|
46
|
+
"prepack": "npm run build",
|
|
47
|
+
"test": "npm run build && node --test \"tests/integration/**/*.test.mjs\"",
|
|
48
|
+
"test:e2e": "npx playwright test",
|
|
49
|
+
"test:e2e:headed": "npx playwright test --headed"
|
|
46
50
|
},
|
|
47
51
|
"dependencies": {
|
|
48
52
|
"chokidar": "^4.0.3",
|
|
@@ -62,6 +66,13 @@
|
|
|
62
66
|
"sanitize-html": "^2.17.0"
|
|
63
67
|
},
|
|
64
68
|
"devDependencies": {
|
|
65
|
-
"@playwright/test": "^1.58.2"
|
|
69
|
+
"@playwright/test": "^1.58.2",
|
|
70
|
+
"@types/express": "^4.17.25",
|
|
71
|
+
"@types/markdown-it": "^14.1.2",
|
|
72
|
+
"@types/mime-types": "^3.0.1",
|
|
73
|
+
"@types/node": "^25.9.1",
|
|
74
|
+
"@types/sanitize-html": "^2.16.1",
|
|
75
|
+
"tsx": "^4.22.4",
|
|
76
|
+
"typescript": "^6.0.3"
|
|
66
77
|
}
|
|
67
78
|
}
|
package/public/app.css
CHANGED
|
@@ -1715,3 +1715,116 @@ a {
|
|
|
1715
1715
|
padding: 0 8px 0 4px;
|
|
1716
1716
|
}
|
|
1717
1717
|
}
|
|
1718
|
+
|
|
1719
|
+
/* Repo switcher dropdown (topbar) */
|
|
1720
|
+
.repo-switcher {
|
|
1721
|
+
position: relative;
|
|
1722
|
+
display: inline-block;
|
|
1723
|
+
}
|
|
1724
|
+
.repo-switcher summary {
|
|
1725
|
+
list-style: none;
|
|
1726
|
+
cursor: pointer;
|
|
1727
|
+
}
|
|
1728
|
+
.repo-switcher summary::-webkit-details-marker {
|
|
1729
|
+
display: none;
|
|
1730
|
+
}
|
|
1731
|
+
/* The switcher sits on the left of the topbar, so its panel grows rightward
|
|
1732
|
+
(the shared .menu-panel defaults to right:0 for the right-aligned More menu). */
|
|
1733
|
+
.repo-switcher .menu-panel {
|
|
1734
|
+
right: auto;
|
|
1735
|
+
left: 0;
|
|
1736
|
+
max-width: calc(100vw - 24px);
|
|
1737
|
+
}
|
|
1738
|
+
.menu-item.current {
|
|
1739
|
+
font-weight: 600;
|
|
1740
|
+
}
|
|
1741
|
+
.menu-item.manage {
|
|
1742
|
+
margin-top: 4px;
|
|
1743
|
+
border-top: 1px solid var(--border);
|
|
1744
|
+
border-radius: 0 0 6px 6px;
|
|
1745
|
+
}
|
|
1746
|
+
|
|
1747
|
+
/* Session management page */
|
|
1748
|
+
.card {
|
|
1749
|
+
border: 1px solid var(--border);
|
|
1750
|
+
border-radius: 8px;
|
|
1751
|
+
background: var(--panel);
|
|
1752
|
+
padding: 16px;
|
|
1753
|
+
margin: 16px 0;
|
|
1754
|
+
}
|
|
1755
|
+
.card-title {
|
|
1756
|
+
margin: 0 0 12px;
|
|
1757
|
+
font-size: 15px;
|
|
1758
|
+
}
|
|
1759
|
+
.muted {
|
|
1760
|
+
color: var(--muted);
|
|
1761
|
+
font-size: 13px;
|
|
1762
|
+
}
|
|
1763
|
+
.session-table {
|
|
1764
|
+
width: 100%;
|
|
1765
|
+
border-collapse: collapse;
|
|
1766
|
+
}
|
|
1767
|
+
.session-table th,
|
|
1768
|
+
.session-table td {
|
|
1769
|
+
text-align: left;
|
|
1770
|
+
padding: 8px 10px;
|
|
1771
|
+
border-bottom: 1px solid var(--border);
|
|
1772
|
+
vertical-align: middle;
|
|
1773
|
+
}
|
|
1774
|
+
.session-table th {
|
|
1775
|
+
font-size: 12px;
|
|
1776
|
+
color: var(--muted);
|
|
1777
|
+
text-transform: uppercase;
|
|
1778
|
+
letter-spacing: 0.03em;
|
|
1779
|
+
}
|
|
1780
|
+
.session-table tr:last-child td {
|
|
1781
|
+
border-bottom: none;
|
|
1782
|
+
}
|
|
1783
|
+
.session-path {
|
|
1784
|
+
color: var(--muted);
|
|
1785
|
+
word-break: break-all;
|
|
1786
|
+
}
|
|
1787
|
+
.session-add {
|
|
1788
|
+
display: flex;
|
|
1789
|
+
gap: 8px;
|
|
1790
|
+
}
|
|
1791
|
+
.session-add input {
|
|
1792
|
+
flex: 1;
|
|
1793
|
+
padding: 8px 10px;
|
|
1794
|
+
border: 1px solid var(--border);
|
|
1795
|
+
border-radius: 6px;
|
|
1796
|
+
background: var(--panel);
|
|
1797
|
+
color: var(--text);
|
|
1798
|
+
font: inherit;
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
/* Gist edit form */
|
|
1802
|
+
.gist-field {
|
|
1803
|
+
display: block;
|
|
1804
|
+
margin-bottom: 12px;
|
|
1805
|
+
}
|
|
1806
|
+
.gist-field > span {
|
|
1807
|
+
display: block;
|
|
1808
|
+
font-size: 12px;
|
|
1809
|
+
color: var(--muted);
|
|
1810
|
+
margin-bottom: 4px;
|
|
1811
|
+
}
|
|
1812
|
+
.gist-field input,
|
|
1813
|
+
.gist-field textarea {
|
|
1814
|
+
width: 100%;
|
|
1815
|
+
padding: 8px 10px;
|
|
1816
|
+
border: 1px solid var(--border);
|
|
1817
|
+
border-radius: 6px;
|
|
1818
|
+
background: var(--panel);
|
|
1819
|
+
color: var(--text);
|
|
1820
|
+
font: inherit;
|
|
1821
|
+
}
|
|
1822
|
+
.gist-field textarea {
|
|
1823
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
1824
|
+
resize: vertical;
|
|
1825
|
+
}
|
|
1826
|
+
.gist-edit-actions {
|
|
1827
|
+
display: flex;
|
|
1828
|
+
align-items: center;
|
|
1829
|
+
gap: 10px;
|
|
1830
|
+
}
|
package/public/app.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
const shouldWatch = new URLSearchParams(location.search).get("watch") !== "0";
|
|
3
3
|
const statusEl = document.getElementById("conn-status");
|
|
4
|
+
// Per-repo URL prefix (e.g. "/r/myrepo"); empty for legacy/root mounts.
|
|
5
|
+
const repoBase = document.body.dataset.repoBase || "";
|
|
4
6
|
|
|
5
7
|
function setStatus(state) {
|
|
6
8
|
if (!statusEl) return;
|
|
@@ -14,16 +16,37 @@
|
|
|
14
16
|
statusEl.title = titles[state] || "";
|
|
15
17
|
}
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
// No live reload off-repo (gist / session pages are static) or when disabled.
|
|
20
|
+
if (!shouldWatch || !repoBase) {
|
|
18
21
|
if (statusEl) statusEl.style.display = "none";
|
|
19
22
|
return;
|
|
20
23
|
}
|
|
21
24
|
|
|
25
|
+
// Reload only for changes relevant to THIS page: the exact file (blob), the
|
|
26
|
+
// viewed directory's direct contents (tree), or anything (diff/broken-links).
|
|
27
|
+
function deriveScope() {
|
|
28
|
+
let p = location.pathname;
|
|
29
|
+
if (p.startsWith(repoBase)) p = p.slice(repoBase.length);
|
|
30
|
+
const decode = (s) => s.split("/").map(decodeURIComponent).join("/");
|
|
31
|
+
if (p.startsWith("/blob/")) return { scope: "file", path: decode(p.slice(6)) };
|
|
32
|
+
if (p === "/tree" || p.startsWith("/tree/")) {
|
|
33
|
+
return { scope: "dir", path: decode(p.slice(6)).replace(/\/$/, "") };
|
|
34
|
+
}
|
|
35
|
+
return { scope: "all", path: "" };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function eventsUrl() {
|
|
39
|
+
const { scope, path } = deriveScope();
|
|
40
|
+
const params = new URLSearchParams({ scope });
|
|
41
|
+
if (path) params.set("path", path);
|
|
42
|
+
return `${repoBase}/events?${params}`;
|
|
43
|
+
}
|
|
44
|
+
|
|
22
45
|
let pollingTimer = null;
|
|
23
46
|
let lastRevision = null;
|
|
24
47
|
|
|
25
48
|
async function fetchRevision() {
|
|
26
|
-
const res = await fetch(
|
|
49
|
+
const res = await fetch(`${repoBase}/rev?ts=${Date.now()}`, { cache: "no-store" });
|
|
27
50
|
if (!res.ok) throw new Error("rev fetch failed");
|
|
28
51
|
const json = await res.json();
|
|
29
52
|
return Number(json.revision);
|
|
@@ -49,7 +72,7 @@
|
|
|
49
72
|
}
|
|
50
73
|
|
|
51
74
|
try {
|
|
52
|
-
const es = new EventSource(
|
|
75
|
+
const es = new EventSource(eventsUrl());
|
|
53
76
|
es.addEventListener("open", () => {
|
|
54
77
|
setStatus("connected");
|
|
55
78
|
});
|
package/public/gist.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
// Delete button on the gist preview page.
|
|
3
|
+
const del = document.querySelector(".gist-delete");
|
|
4
|
+
if (del) {
|
|
5
|
+
del.addEventListener("click", async () => {
|
|
6
|
+
if (!confirm("Delete this gist? This cannot be undone.")) return;
|
|
7
|
+
del.disabled = true;
|
|
8
|
+
try {
|
|
9
|
+
const res = await fetch(`/api/gists/${encodeURIComponent(del.dataset.id)}`, {
|
|
10
|
+
method: "DELETE",
|
|
11
|
+
});
|
|
12
|
+
if (res.ok) {
|
|
13
|
+
location.href = "/gists";
|
|
14
|
+
} else {
|
|
15
|
+
const data = await res.json().catch(() => ({}));
|
|
16
|
+
alert(data.error || "Failed to delete gist");
|
|
17
|
+
del.disabled = false;
|
|
18
|
+
}
|
|
19
|
+
} catch (e) {
|
|
20
|
+
alert("Network error: " + e.message);
|
|
21
|
+
del.disabled = false;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Edit form.
|
|
27
|
+
const form = document.getElementById("gist-edit-form");
|
|
28
|
+
if (form) {
|
|
29
|
+
const errEl = document.getElementById("gist-edit-error");
|
|
30
|
+
form.addEventListener("submit", async (e) => {
|
|
31
|
+
e.preventDefault();
|
|
32
|
+
if (errEl) errEl.textContent = "";
|
|
33
|
+
const id = form.dataset.gistId;
|
|
34
|
+
const body = {
|
|
35
|
+
content: document.getElementById("gist-content").value,
|
|
36
|
+
filename: document.getElementById("gist-filename").value,
|
|
37
|
+
title: document.getElementById("gist-title").value,
|
|
38
|
+
};
|
|
39
|
+
const submit = form.querySelector("button[type=submit]");
|
|
40
|
+
if (submit) submit.disabled = true;
|
|
41
|
+
try {
|
|
42
|
+
const res = await fetch(`/api/gists/${encodeURIComponent(id)}`, {
|
|
43
|
+
method: "PATCH",
|
|
44
|
+
headers: { "Content-Type": "application/json" },
|
|
45
|
+
body: JSON.stringify(body),
|
|
46
|
+
});
|
|
47
|
+
if (res.ok) {
|
|
48
|
+
location.href = `/gist/${encodeURIComponent(id)}`;
|
|
49
|
+
} else {
|
|
50
|
+
const data = await res.json().catch(() => ({}));
|
|
51
|
+
if (errEl) errEl.textContent = data.error || "Failed to save";
|
|
52
|
+
if (submit) submit.disabled = false;
|
|
53
|
+
}
|
|
54
|
+
} catch (err) {
|
|
55
|
+
if (errEl) errEl.textContent = "Network error: " + err.message;
|
|
56
|
+
if (submit) submit.disabled = false;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
})();
|
package/public/review.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
|
+
// Per-repo URL prefix (e.g. "/r/myrepo"); empty for legacy/root mounts.
|
|
3
|
+
const repoBase = document.body.dataset.repoBase || "";
|
|
4
|
+
|
|
2
5
|
// --- Reply form ---
|
|
3
6
|
const replyBtn = document.getElementById("review-reply-submit");
|
|
4
7
|
const replyText = document.getElementById("review-reply-text");
|
|
@@ -13,7 +16,7 @@
|
|
|
13
16
|
replyBtn.textContent = "Sending...";
|
|
14
17
|
|
|
15
18
|
try {
|
|
16
|
-
const res = await fetch(
|
|
19
|
+
const res = await fetch(`${repoBase}/review/${encodeURIComponent(threadId)}/messages`, {
|
|
17
20
|
method: "POST",
|
|
18
21
|
headers: { "Content-Type": "application/json" },
|
|
19
22
|
body: JSON.stringify({ body }),
|
|
@@ -73,7 +76,7 @@
|
|
|
73
76
|
const threadId = document.querySelector("[data-thread-id]")?.dataset.threadId;
|
|
74
77
|
if (!threadId) return;
|
|
75
78
|
try {
|
|
76
|
-
const res = await fetch(
|
|
79
|
+
const res = await fetch(`${repoBase}/review/${encodeURIComponent(threadId)}/comments`, {
|
|
77
80
|
method: "POST",
|
|
78
81
|
headers: { "Content-Type": "application/json" },
|
|
79
82
|
body: JSON.stringify({
|
|
@@ -155,7 +158,7 @@
|
|
|
155
158
|
const threadId = document.querySelector("[data-thread-id]")?.dataset.threadId;
|
|
156
159
|
if (!threadId) return;
|
|
157
160
|
try {
|
|
158
|
-
const res = await fetch(
|
|
161
|
+
const res = await fetch(`${repoBase}/review/${encodeURIComponent(threadId)}/comments`, {
|
|
159
162
|
method: "POST",
|
|
160
163
|
headers: { "Content-Type": "application/json" },
|
|
161
164
|
body: JSON.stringify({
|
|
@@ -254,7 +257,7 @@
|
|
|
254
257
|
if (resolveBtn) {
|
|
255
258
|
const commentId = resolveBtn.dataset.commentId;
|
|
256
259
|
try {
|
|
257
|
-
const res = await fetch(
|
|
260
|
+
const res = await fetch(`${repoBase}/review/${encodeURIComponent(threadId)}/comments/${encodeURIComponent(commentId)}`, {
|
|
258
261
|
method: "PATCH",
|
|
259
262
|
headers: { "Content-Type": "application/json" },
|
|
260
263
|
body: JSON.stringify({ resolved: true }),
|
|
@@ -269,7 +272,7 @@
|
|
|
269
272
|
const commentId = deleteBtn.dataset.commentId;
|
|
270
273
|
if (!confirm("Delete this comment?")) return;
|
|
271
274
|
try {
|
|
272
|
-
const res = await fetch(
|
|
275
|
+
const res = await fetch(`${repoBase}/review/${encodeURIComponent(threadId)}/comments/${encodeURIComponent(commentId)}`, {
|
|
273
276
|
method: "DELETE",
|
|
274
277
|
});
|
|
275
278
|
if (res.ok) location.reload();
|
|
@@ -450,7 +453,7 @@
|
|
|
450
453
|
|
|
451
454
|
let data;
|
|
452
455
|
try {
|
|
453
|
-
const res = await fetch(
|
|
456
|
+
const res = await fetch(`${repoBase}/api/code-context?${params}`);
|
|
454
457
|
if (!res.ok) {
|
|
455
458
|
const err = await res.json();
|
|
456
459
|
showPopupError(overlay, err.error || "Failed to load file");
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
const errEl = document.getElementById("add-repo-error");
|
|
3
|
+
|
|
4
|
+
function showError(msg) {
|
|
5
|
+
if (errEl) errEl.textContent = msg || "";
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// Remove a repo from the session.
|
|
9
|
+
document.getElementById("repo-rows")?.addEventListener("click", async (e) => {
|
|
10
|
+
const btn = e.target.closest(".repo-remove");
|
|
11
|
+
if (!btn) return;
|
|
12
|
+
const id = btn.dataset.id;
|
|
13
|
+
if (!id) return;
|
|
14
|
+
btn.disabled = true;
|
|
15
|
+
btn.textContent = "Removing…";
|
|
16
|
+
try {
|
|
17
|
+
const res = await fetch(`/api/repos/${encodeURIComponent(id)}`, { method: "DELETE" });
|
|
18
|
+
if (res.ok) {
|
|
19
|
+
location.reload();
|
|
20
|
+
} else {
|
|
21
|
+
const data = await res.json().catch(() => ({}));
|
|
22
|
+
showError(data.error || `Failed to remove ${id}`);
|
|
23
|
+
btn.disabled = false;
|
|
24
|
+
btn.textContent = "Remove";
|
|
25
|
+
}
|
|
26
|
+
} catch (err) {
|
|
27
|
+
showError("Network error: " + err.message);
|
|
28
|
+
btn.disabled = false;
|
|
29
|
+
btn.textContent = "Remove";
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Register a new repo with the session.
|
|
34
|
+
const form = document.getElementById("add-repo-form");
|
|
35
|
+
form?.addEventListener("submit", async (e) => {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
showError("");
|
|
38
|
+
const input = document.getElementById("add-repo-path");
|
|
39
|
+
const path = (input?.value || "").trim();
|
|
40
|
+
if (!path) return;
|
|
41
|
+
const submit = form.querySelector("button");
|
|
42
|
+
if (submit) submit.disabled = true;
|
|
43
|
+
try {
|
|
44
|
+
const res = await fetch("/api/repos", {
|
|
45
|
+
method: "POST",
|
|
46
|
+
headers: { "Content-Type": "application/json" },
|
|
47
|
+
body: JSON.stringify({ path }),
|
|
48
|
+
});
|
|
49
|
+
const data = await res.json().catch(() => ({}));
|
|
50
|
+
if (res.ok) {
|
|
51
|
+
location.href = data.url || "/session";
|
|
52
|
+
} else {
|
|
53
|
+
showError(data.error || "Failed to add repo");
|
|
54
|
+
if (submit) submit.disabled = false;
|
|
55
|
+
}
|
|
56
|
+
} catch (err) {
|
|
57
|
+
showError("Network error: " + err.message);
|
|
58
|
+
if (submit) submit.disabled = false;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
})();
|
package/src/cli.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import process from "node:process";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { startServer } from "./server.js";
|
|
6
|
-
import { handleReviewCommand } from "./review-cli.js";
|
|
7
|
-
|
|
8
|
-
function printHelp() {
|
|
9
|
-
// Keep this in sync with README.md
|
|
10
|
-
process.stdout.write(`repoview
|
|
11
|
-
|
|
12
|
-
Serve a local Git repository as a GitHub-like website.
|
|
13
|
-
|
|
14
|
-
Usage:
|
|
15
|
-
npx repoview [--repo /path/to/repo] [--host 0.0.0.0] [--port 3000] [--no-watch]
|
|
16
|
-
repoview [--repo /path/to/repo] [--host 0.0.0.0] [--port 3000] [--no-watch]
|
|
17
|
-
npm start -- [--repo /path/to/repo] [--host 0.0.0.0] [--port 3000] [--no-watch]
|
|
18
|
-
|
|
19
|
-
Options:
|
|
20
|
-
--repo <path> Repository root (default: REPO_ROOT or current dir)
|
|
21
|
-
--host <host> Bind address (default: 0.0.0.0)
|
|
22
|
-
--port <port> Bind port (default: 3000)
|
|
23
|
-
--watch Enable live reload (default)
|
|
24
|
-
--no-watch Disable live reload
|
|
25
|
-
-h, --help Show this help
|
|
26
|
-
|
|
27
|
-
Review subcommands:
|
|
28
|
-
repoview review new --title "Title" Create a new review thread
|
|
29
|
-
repoview review post <id> --role agent --body "…" Post a message to a thread
|
|
30
|
-
repoview review post <id> --role agent --file f Post from file
|
|
31
|
-
repoview review read <id> Read thread messages + comments
|
|
32
|
-
repoview review list List all threads
|
|
33
|
-
|
|
34
|
-
Environment:
|
|
35
|
-
REPO_ROOT, HOST, PORT
|
|
36
|
-
`);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function parseArgs(argv) {
|
|
40
|
-
const args = { watch: true };
|
|
41
|
-
const rest = [];
|
|
42
|
-
for (let i = 0; i < argv.length; i++) {
|
|
43
|
-
const value = argv[i];
|
|
44
|
-
if (value === "-h" || value === "--help") args.help = true;
|
|
45
|
-
if (value === "--watch") args.watch = true;
|
|
46
|
-
else if (value === "--no-watch") args.watch = false;
|
|
47
|
-
else if (value === "--repo") args.repo = argv[++i];
|
|
48
|
-
else if (value === "--port") args.port = Number(argv[++i]);
|
|
49
|
-
else if (value === "--host") args.host = argv[++i];
|
|
50
|
-
else rest.push(value);
|
|
51
|
-
}
|
|
52
|
-
return { ...args, rest };
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
56
|
-
const __dirname = path.dirname(__filename);
|
|
57
|
-
|
|
58
|
-
const parsed = parseArgs(process.argv.slice(2));
|
|
59
|
-
const { repo, port, host, watch, help } = parsed;
|
|
60
|
-
|
|
61
|
-
if (help) {
|
|
62
|
-
printHelp();
|
|
63
|
-
process.exit(0);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Handle "review" subcommand
|
|
67
|
-
if (parsed.rest[0] === "review") {
|
|
68
|
-
const repoRootForReview =
|
|
69
|
-
repo ??
|
|
70
|
-
process.env.REPO_ROOT ??
|
|
71
|
-
process.cwd();
|
|
72
|
-
await handleReviewCommand(parsed.rest.slice(1), repoRootForReview);
|
|
73
|
-
process.exit(0);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
if (port != null && !Number.isFinite(port)) {
|
|
77
|
-
process.stderr.write("Invalid --port value\n");
|
|
78
|
-
process.exit(2);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const repoRoot =
|
|
82
|
-
repo ??
|
|
83
|
-
process.env.REPO_ROOT ??
|
|
84
|
-
process.cwd();
|
|
85
|
-
|
|
86
|
-
await startServer({
|
|
87
|
-
repoRoot,
|
|
88
|
-
port: port || Number(process.env.PORT) || 3000,
|
|
89
|
-
host: host || process.env.HOST || "0.0.0.0",
|
|
90
|
-
watch,
|
|
91
|
-
});
|
package/src/gitignore.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import ignore from "ignore";
|
|
4
|
-
|
|
5
|
-
function toPosixPath(p) {
|
|
6
|
-
return p.split(path.sep).join("/");
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export async function loadGitIgnoreMatcher(repoRootReal) {
|
|
10
|
-
const ig = ignore();
|
|
11
|
-
|
|
12
|
-
// Baseline ignores (never show these via toggle either).
|
|
13
|
-
ig.add([".git/"]);
|
|
14
|
-
|
|
15
|
-
try {
|
|
16
|
-
const content = await fs.readFile(path.join(repoRootReal, ".gitignore"), "utf8");
|
|
17
|
-
ig.add(content);
|
|
18
|
-
} catch {
|
|
19
|
-
// No .gitignore or unreadable; ignore.
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return {
|
|
23
|
-
ignores(relPathPosix, { isDir = false } = {}) {
|
|
24
|
-
const p = toPosixPath(String(relPathPosix || "").replace(/^\/+/, ""));
|
|
25
|
-
if (!p) return false;
|
|
26
|
-
if (ig.ignores(p)) return true;
|
|
27
|
-
if (isDir) {
|
|
28
|
-
const withSlash = p.endsWith("/") ? p : `${p}/`;
|
|
29
|
-
if (ig.ignores(withSlash)) return true;
|
|
30
|
-
}
|
|
31
|
-
return false;
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
}
|