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.
Files changed (57) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/CONTRIBUTING.md +4 -3
  3. package/DEVELOPMENT.md +84 -16
  4. package/README.md +71 -5
  5. package/dist/api.js +58 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/cli.js +454 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/csv.js +64 -0
  10. package/dist/csv.js.map +1 -0
  11. package/dist/format.js +25 -0
  12. package/dist/format.js.map +1 -0
  13. package/dist/gist-router.js +153 -0
  14. package/dist/gist-router.js.map +1 -0
  15. package/dist/gists.js +130 -0
  16. package/dist/gists.js.map +1 -0
  17. package/dist/git.js +67 -0
  18. package/dist/git.js.map +1 -0
  19. package/dist/gitignore.js +34 -0
  20. package/dist/gitignore.js.map +1 -0
  21. package/dist/linkcheck.js +310 -0
  22. package/dist/linkcheck.js.map +1 -0
  23. package/dist/markdown.js +493 -0
  24. package/dist/markdown.js.map +1 -0
  25. package/dist/net.js +10 -0
  26. package/dist/net.js.map +1 -0
  27. package/dist/paths.js +59 -0
  28. package/dist/paths.js.map +1 -0
  29. package/dist/reload.js +55 -0
  30. package/dist/reload.js.map +1 -0
  31. package/dist/repo-context.js +80 -0
  32. package/dist/repo-context.js.map +1 -0
  33. package/dist/repo-router.js +810 -0
  34. package/dist/repo-router.js.map +1 -0
  35. package/dist/review-cli.js +228 -0
  36. package/dist/review-cli.js.map +1 -0
  37. package/dist/server.js +122 -0
  38. package/dist/server.js.map +1 -0
  39. package/dist/session.js +86 -0
  40. package/dist/session.js.map +1 -0
  41. package/dist/types.js +2 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/views.js +780 -0
  44. package/dist/views.js.map +1 -0
  45. package/package.json +20 -9
  46. package/public/app.css +113 -0
  47. package/public/app.js +26 -3
  48. package/public/gist.js +60 -0
  49. package/public/review.js +9 -6
  50. package/public/session.js +61 -0
  51. package/src/cli.js +0 -91
  52. package/src/gitignore.js +0 -34
  53. package/src/linkcheck.js +0 -312
  54. package/src/markdown.js +0 -518
  55. package/src/review-cli.js +0 -245
  56. package/src/server.js +0 -1126
  57. 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.5.1",
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": "src/cli.js"
18
+ "repoview": "dist/cli.js"
19
19
  },
20
20
  "files": [
21
- "src/",
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
- "start": "node src/cli.js",
42
- "dev": "node src/cli.js --watch",
43
- "lint": "node -c src/cli.js && node -c src/server.js && node -c src/markdown.js && node -c src/views.js && node -c src/review-cli.js",
44
- "test": "npx playwright test",
45
- "test:headed": "npx playwright test --headed"
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
- if (!shouldWatch) {
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(`/rev?ts=${Date.now()}`, { cache: "no-store" });
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("/events");
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(`/review/${encodeURIComponent(threadId)}/messages`, {
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(`/review/${encodeURIComponent(threadId)}/comments`, {
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(`/review/${encodeURIComponent(threadId)}/comments`, {
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(`/review/${encodeURIComponent(threadId)}/comments/${encodeURIComponent(commentId)}`, {
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(`/review/${encodeURIComponent(threadId)}/comments/${encodeURIComponent(commentId)}`, {
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(`/api/code-context?${params}`);
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
- }