repoview 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/CONTRIBUTING.md +4 -3
  3. package/DEVELOPMENT.md +70 -16
  4. package/README.md +36 -5
  5. package/dist/api.js +58 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/cli.js +224 -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/git.js +67 -0
  14. package/dist/git.js.map +1 -0
  15. package/dist/gitignore.js +34 -0
  16. package/dist/gitignore.js.map +1 -0
  17. package/dist/linkcheck.js +310 -0
  18. package/dist/linkcheck.js.map +1 -0
  19. package/dist/markdown.js +493 -0
  20. package/dist/markdown.js.map +1 -0
  21. package/dist/net.js +10 -0
  22. package/dist/net.js.map +1 -0
  23. package/dist/paths.js +59 -0
  24. package/dist/paths.js.map +1 -0
  25. package/dist/reload.js +36 -0
  26. package/dist/reload.js.map +1 -0
  27. package/dist/repo-context.js +73 -0
  28. package/dist/repo-context.js.map +1 -0
  29. package/dist/repo-router.js +801 -0
  30. package/dist/repo-router.js.map +1 -0
  31. package/dist/review-cli.js +228 -0
  32. package/dist/review-cli.js.map +1 -0
  33. package/dist/server.js +116 -0
  34. package/dist/server.js.map +1 -0
  35. package/dist/session.js +86 -0
  36. package/dist/session.js.map +1 -0
  37. package/dist/types.js +2 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/views.js +633 -0
  40. package/dist/views.js.map +1 -0
  41. package/package.json +20 -9
  42. package/public/app.css +82 -0
  43. package/public/app.js +4 -2
  44. package/public/review.js +9 -6
  45. package/public/session.js +61 -0
  46. package/src/cli.js +0 -91
  47. package/src/gitignore.js +0 -34
  48. package/src/linkcheck.js +0 -312
  49. package/src/markdown.js +0 -518
  50. package/src/review-cli.js +0 -245
  51. package/src/server.js +0 -1126
  52. package/src/views.js +0 -657
@@ -0,0 +1,73 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import chokidar from "chokidar";
4
+ import { loadGitIgnoreMatcher } from "./gitignore.js";
5
+ import { createRepoLinkScanner } from "./linkcheck.js";
6
+ import { getGitInfo } from "./git.js";
7
+ import { createReloadHub } from "./reload.js";
8
+ /**
9
+ * Build the per-repo runtime state. Each context owns its own git info,
10
+ * gitignore matcher, link scanner, review dir, reload hub and (optionally) a
11
+ * filesystem watcher. The markdown renderer is shared across repos and passed in.
12
+ */
13
+ export async function createRepoContext({ id, repoRoot, md, watch = true, }) {
14
+ const repoRootReal = await fs.realpath(repoRoot);
15
+ const repoName = path.basename(repoRootReal);
16
+ const gitInfo = await getGitInfo(repoRootReal);
17
+ const reloadHub = createReloadHub();
18
+ const reviewDir = path.join(repoRootReal, ".repoview", "reviews");
19
+ const ctx = {
20
+ id: id ?? repoName,
21
+ repoRootReal,
22
+ repoName,
23
+ gitInfo,
24
+ reloadHub,
25
+ reviewDir,
26
+ md,
27
+ ignoreMatcher: await loadGitIgnoreMatcher(repoRootReal),
28
+ isIgnored: () => false,
29
+ linkScanner: undefined,
30
+ watcher: null,
31
+ close: async () => { },
32
+ };
33
+ ctx.isIgnored = (relPosix, opts) => ctx.ignoreMatcher.ignores(relPosix, opts);
34
+ ctx.linkScanner = createRepoLinkScanner({
35
+ repoRootReal,
36
+ markdownRenderer: md,
37
+ isIgnored: ctx.isIgnored,
38
+ });
39
+ void ctx.linkScanner.triggerScan();
40
+ if (watch) {
41
+ const watcher = chokidar.watch(repoRootReal, {
42
+ ignored: [
43
+ /(^|[/\\])\.git([/\\]|$)/,
44
+ /(^|[/\\])node_modules([/\\]|$)/,
45
+ /(^|[/\\])\.repoview([/\\]|$)/,
46
+ ],
47
+ ignoreInitial: true,
48
+ ignorePermissionErrors: true,
49
+ });
50
+ watcher.on("error", () => {
51
+ // Silently ignore watch errors (e.g., permission denied)
52
+ });
53
+ let pending = null;
54
+ watcher.on("all", () => {
55
+ if (pending)
56
+ return;
57
+ pending = setTimeout(() => {
58
+ pending = null;
59
+ reloadHub.broadcastReload();
60
+ void loadGitIgnoreMatcher(repoRootReal).then((m) => (ctx.ignoreMatcher = m));
61
+ void ctx.linkScanner.triggerScan();
62
+ }, 100);
63
+ });
64
+ ctx.watcher = watcher;
65
+ }
66
+ ctx.close = async () => {
67
+ reloadHub.close();
68
+ if (ctx.watcher)
69
+ await ctx.watcher.close();
70
+ };
71
+ return ctx;
72
+ }
73
+ //# sourceMappingURL=repo-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-context.js","sourceRoot":"","sources":["../src/repo-context.ts"],"names":[],"mappings":"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"}