thurview 0.17.2 → 0.19.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 +52 -43
- package/dist/cli.js +74 -222
- package/dist/cli.js.map +1 -1
- package/dist/coverage.js +53 -148
- package/dist/coverage.js.map +1 -1
- package/dist/document/compile.js +51 -43
- package/dist/document/compile.js.map +1 -1
- package/dist/document/schema.js +25 -13
- package/dist/document/schema.js.map +1 -1
- package/dist/export.js +158 -0
- package/dist/export.js.map +1 -0
- package/dist/git.js +29 -0
- package/dist/git.js.map +1 -1
- package/dist/interfaces.js +7 -244
- package/dist/interfaces.js.map +1 -1
- package/dist/server/server.js +33 -22
- package/dist/server/server.js.map +1 -1
- package/dist/ui/app.css +14 -9
- package/dist/ui/app.js +164 -195
- package/dist/ui/app.js.map +3 -3
- package/package.json +1 -12
- package/skills/thurview/SKILL.md +51 -34
- package/skills/thurview/references/components.md +45 -22
- package/skills/thurview/references/document-authoring.md +22 -26
- package/skills/thurview/references/searching.md +74 -0
- package/skills/thurview-design/SKILL.md +21 -14
- package/skills/thurview-design/references/anchors-and-proposals.md +11 -9
- package/skills/thurview-explain/SKILL.md +47 -31
- package/skills/thurview-fix/SKILL.md +47 -42
- package/dist/graph.js +0 -568
- package/dist/graph.js.map +0 -1
package/dist/export.js
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { join, dirname, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { log, git, showFile } from "./git.js";
|
|
6
|
+
import { readThreads } from "./store.js";
|
|
7
|
+
import { NOBODY } from "./presence.js";
|
|
8
|
+
import { revisionData, fileDiff, fileLines, BLOB_TYPES } from "./server/server.js";
|
|
9
|
+
const UI_DIR = join(dirname(fileURLToPath(import.meta.url)), "ui");
|
|
10
|
+
export function localTarget(out) {
|
|
11
|
+
return {
|
|
12
|
+
async write(html) {
|
|
13
|
+
const file = /\.html?$/i.test(out) ? resolve(out) : resolve(out, "index.html");
|
|
14
|
+
await mkdir(dirname(file), { recursive: true });
|
|
15
|
+
await writeFile(file, html);
|
|
16
|
+
return file;
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Everything the browser app would ask the server for, answered ahead of time
|
|
22
|
+
* at the review's pins: the document as published, the commits, every changed
|
|
23
|
+
* file's diff, and the whole of every file a diff or an anchor shows, so that
|
|
24
|
+
* expanding context still works with no server. Symbol lookup is left out.
|
|
25
|
+
*/
|
|
26
|
+
async function snapshot(review, withThreads) {
|
|
27
|
+
const data = await revisionData(review.id, review.revision);
|
|
28
|
+
const t = await readThreads(review.id);
|
|
29
|
+
const isReview = (review.kind ?? "review") === "review";
|
|
30
|
+
const changes = isReview ? data.changes : [];
|
|
31
|
+
const diffs = {};
|
|
32
|
+
const files = {};
|
|
33
|
+
const want = new Set();
|
|
34
|
+
// Drafts the reader never sent stay theirs; only what was said is shown.
|
|
35
|
+
const threads = withThreads ? t.threads.filter((x) => x.submitted || x.mode === "ask") : [];
|
|
36
|
+
const commits = isReview ? await log(review.worktree, review.pins.base, review.pins.head) : [];
|
|
37
|
+
for (const c of changes) {
|
|
38
|
+
const d = await fileDiff(review, c.path);
|
|
39
|
+
diffs[c.path] = d;
|
|
40
|
+
if (c.status !== "D" && !d.binary)
|
|
41
|
+
want.add(`head:${c.path}`);
|
|
42
|
+
}
|
|
43
|
+
// Every other file the page can open: an anchor's peek, a file a commit
|
|
44
|
+
// lists though the net diff does not, a thread's file, an interface's site.
|
|
45
|
+
const doc = data.document;
|
|
46
|
+
const side = (g) => (g === "base" ? "base" : "head");
|
|
47
|
+
for (const a of Object.values(doc?.anchors ?? {}))
|
|
48
|
+
if (a.peek)
|
|
49
|
+
want.add(`${side(a.peek.graph)}:${a.peek.file}`);
|
|
50
|
+
for (const e of doc?.interfaces?.entries ?? [])
|
|
51
|
+
want.add(`${side(e.graph)}:${e.file}`);
|
|
52
|
+
for (const c of commits)
|
|
53
|
+
for (const f of c.files)
|
|
54
|
+
if (!diffs[f])
|
|
55
|
+
want.add(`head:${f}`);
|
|
56
|
+
for (const th of threads)
|
|
57
|
+
if (th.target.type === "file")
|
|
58
|
+
want.add(`${side(th.target.side)}:${th.target.path}`);
|
|
59
|
+
for (const key of [...want].sort()) {
|
|
60
|
+
const [graph, ...rest] = key.split(":");
|
|
61
|
+
const path = rest.join(":");
|
|
62
|
+
const g = side(graph);
|
|
63
|
+
const raw = await showFile(review.worktree, g === "base" ? review.pins.base : review.pins.head, path);
|
|
64
|
+
// a binary file has no lines to show, and its highlighted bytes would only bloat the page
|
|
65
|
+
if (raw === null || raw.includes("\0"))
|
|
66
|
+
continue;
|
|
67
|
+
const f = await fileLines(review, path, g);
|
|
68
|
+
if (f)
|
|
69
|
+
files[key] = f;
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
payload: {
|
|
73
|
+
// The worktree is a path on the author's machine; the published page has
|
|
74
|
+
// no use for it and must not carry it.
|
|
75
|
+
review: { ...review, worktree: "", repoRoot: "", dismissed: false },
|
|
76
|
+
revision: review.revision,
|
|
77
|
+
...data,
|
|
78
|
+
changes,
|
|
79
|
+
threads,
|
|
80
|
+
decisions: withThreads ? t.decisions : [],
|
|
81
|
+
agent: NOBODY,
|
|
82
|
+
},
|
|
83
|
+
commits,
|
|
84
|
+
diffs,
|
|
85
|
+
files,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function dataUri(type, bytes) {
|
|
89
|
+
return `data:${type};base64,${bytes.toString("base64")}`;
|
|
90
|
+
}
|
|
91
|
+
/** The review's theme with its fonts inlined and every remote stylesheet dropped. */
|
|
92
|
+
async function offlineThemeCss(review, css) {
|
|
93
|
+
const out = [];
|
|
94
|
+
for (const line of css.split("\n"))
|
|
95
|
+
if (!/^@import url\(/.test(line))
|
|
96
|
+
out.push(line);
|
|
97
|
+
let text = out.join("\n");
|
|
98
|
+
const blob = /url\("\/api\/reviews\/[^/"]+\/blob\?path=([^"]+)"\)/g;
|
|
99
|
+
for (const m of [...text.matchAll(blob)]) {
|
|
100
|
+
const path = decodeURIComponent(m[1]);
|
|
101
|
+
const type = BLOB_TYPES[path.split(".").pop()?.toLowerCase() ?? ""] ?? "";
|
|
102
|
+
const bytes = (await git(review.worktree, ["show", `${review.pins.head}:${path}`], {
|
|
103
|
+
encoding: "buffer",
|
|
104
|
+
}));
|
|
105
|
+
text = text.replace(m[0], `url("${dataUri(type, bytes)}")`);
|
|
106
|
+
}
|
|
107
|
+
return text;
|
|
108
|
+
}
|
|
109
|
+
async function appCss() {
|
|
110
|
+
let css = await readFile(join(UI_DIR, "app.css"), "utf8");
|
|
111
|
+
for (const m of [...css.matchAll(/url\("\/(assets\/[^"]+\.woff2)"\)/g)])
|
|
112
|
+
css = css.replace(m[0], `url("${dataUri("font/woff2", await readFile(join(UI_DIR, m[1])))}")`);
|
|
113
|
+
return css;
|
|
114
|
+
}
|
|
115
|
+
function escapeHtml(s) {
|
|
116
|
+
return s.replace(/[&<>"]/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """ })[c]);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The published page: the same app the server serves, its data answered in
|
|
120
|
+
* advance, as one file a browser opens from disk. The content security policy
|
|
121
|
+
* forbids every fetch, so nothing in it can reach a network even by mistake.
|
|
122
|
+
*/
|
|
123
|
+
export async function exportReview(review, opts) {
|
|
124
|
+
if (!existsSync(join(UI_DIR, "app.js")))
|
|
125
|
+
throw new Error(`the bundled UI is missing at ${UI_DIR}; run \`pnpm build\``);
|
|
126
|
+
const snap = await snapshot(review, opts.threads);
|
|
127
|
+
if (snap.payload.theme)
|
|
128
|
+
snap.payload.theme = {
|
|
129
|
+
...snap.payload.theme,
|
|
130
|
+
css: await offlineThemeCss(review, snap.payload.theme.css),
|
|
131
|
+
};
|
|
132
|
+
const js = (await readFile(join(UI_DIR, "app.js"), "utf8"))
|
|
133
|
+
.replace(/\n\/\/# sourceMappingURL=.*\s*$/, "\n")
|
|
134
|
+
.replace(/<\/script/gi, "<\\/script");
|
|
135
|
+
const json = JSON.stringify(snap).replace(/</g, "\\u003c");
|
|
136
|
+
const csp = "default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; font-src data:; img-src data:";
|
|
137
|
+
return `<!doctype html>
|
|
138
|
+
<html lang="en">
|
|
139
|
+
<head>
|
|
140
|
+
<meta charset="utf-8" />
|
|
141
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
142
|
+
<meta http-equiv="Content-Security-Policy" content="${csp}" />
|
|
143
|
+
<title>${escapeHtml(review.title)} · thurview</title>
|
|
144
|
+
<style>
|
|
145
|
+
${await appCss()}
|
|
146
|
+
</style>
|
|
147
|
+
</head>
|
|
148
|
+
<body>
|
|
149
|
+
<div id="app"></div>
|
|
150
|
+
<script type="application/json" id="thurview-snapshot">${json}</script>
|
|
151
|
+
<script>
|
|
152
|
+
${js}
|
|
153
|
+
</script>
|
|
154
|
+
</body>
|
|
155
|
+
</html>
|
|
156
|
+
`;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"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"}
|
package/dist/git.js
CHANGED
|
@@ -83,6 +83,35 @@ export async function listFiles(cwd, commit) {
|
|
|
83
83
|
const out = await git(cwd, ["ls-tree", "-r", "--name-only", "-z", commit]);
|
|
84
84
|
return out.split("\0").filter(Boolean);
|
|
85
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* `git grep -E` at a commit: the files that match `pattern` and how many lines
|
|
88
|
+
* matched, binary files skipped. `paths` are plain git pathspecs, read the way
|
|
89
|
+
* the agent's own `git grep` reads them, so a `*` crosses directories. No match
|
|
90
|
+
* is an answer, not an error; a pattern git cannot read is an error, with git's
|
|
91
|
+
* own words.
|
|
92
|
+
*/
|
|
93
|
+
export async function grepAt(cwd, commit, pattern, paths) {
|
|
94
|
+
let out;
|
|
95
|
+
try {
|
|
96
|
+
({ stdout: out } = await execFileP("git", ["grep", "-I", "-c", "-z", "-E", "-e", pattern, commit, "--", ...paths], { cwd, maxBuffer: 64 * 1024 * 1024 }));
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
const e = err;
|
|
100
|
+
if (e.code === 1 && !e.stderr?.trim())
|
|
101
|
+
return { files: [], hits: 0 };
|
|
102
|
+
throw new GitError((e.stderr || e.message).trim());
|
|
103
|
+
}
|
|
104
|
+
const files = [];
|
|
105
|
+
let hits = 0;
|
|
106
|
+
// with -z each match is `<commit>:<path>\0<count>\n`, the path unquoted
|
|
107
|
+
for (const m of out.matchAll(/([^\0]*)\0(\d+)\n/g)) {
|
|
108
|
+
if (!m[1].startsWith(`${commit}:`))
|
|
109
|
+
continue;
|
|
110
|
+
files.push(m[1].slice(commit.length + 1));
|
|
111
|
+
hits += Number(m[2]);
|
|
112
|
+
}
|
|
113
|
+
return { files: files.sort(), hits };
|
|
114
|
+
}
|
|
86
115
|
export async function changedFiles(cwd, base, head) {
|
|
87
116
|
const status = await git(cwd, ["diff", "--name-status", "-z", "-M", base, head]);
|
|
88
117
|
const numstat = await git(cwd, ["diff", "--numstat", "-z", "-M", base, head]);
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/interfaces.js
CHANGED
|
@@ -1,171 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The interface delta: what the change did to the surfaces other code can reach.
|
|
3
|
-
*
|
|
4
|
-
* A capability becomes real when it becomes visible, so the honest answer to
|
|
5
|
-
* "what does this pull request do" is what it added to, changed in, or took out
|
|
6
|
-
* of the exported surface. That is derived here from the code graph at both
|
|
7
|
-
* pinned commits rather than asserted by the author, so it cannot go stale: a
|
|
8
|
-
* symbol the diff touched is an interface entry only when it is visible outside
|
|
9
|
-
* its file on one side or the other, and only when its declaration moved.
|
|
10
|
-
* Everything else is counted as internal, which is a finding of its own.
|
|
11
|
-
*/
|
|
12
|
-
import { languageFor } from "./highlight.js";
|
|
13
|
-
import { catFiles } from "./symbols.js";
|
|
14
|
-
import { LANGUAGES } from "./graph.js";
|
|
15
|
-
const FAMILY = {
|
|
16
|
-
typescript: "js",
|
|
17
|
-
tsx: "js",
|
|
18
|
-
javascript: "js",
|
|
19
|
-
jsx: "js",
|
|
20
|
-
python: "python",
|
|
21
|
-
go: "go",
|
|
22
|
-
rust: "rust",
|
|
23
|
-
java: "java",
|
|
24
|
-
elixir: "elixir",
|
|
25
|
-
};
|
|
26
|
-
/** Kinds whose body is part of the surface: a field added to an exported type is a change. */
|
|
27
|
-
const BODY_IS_SURFACE = new Set(["interface", "type"]);
|
|
28
|
-
const MAX_SURFACE_LINES = 60;
|
|
29
|
-
const MAX_DECLARATION_LINES = 12;
|
|
30
|
-
const MAX_DECLARATION_CHARS = 240;
|
|
31
|
-
/** `export { audit, check as verify }` makes the local names visible outside the file. */
|
|
32
|
-
function reexportedNames(text) {
|
|
33
|
-
const out = new Set();
|
|
34
|
-
for (const m of text.matchAll(/\bexport\s*\{([^}]*)\}/g))
|
|
35
|
-
for (const part of m[1].split(",")) {
|
|
36
|
-
const local = part
|
|
37
|
-
.split(/\s+as\s+/)[0]
|
|
38
|
-
.replace(/\btype\b/, "")
|
|
39
|
-
.trim();
|
|
40
|
-
if (local)
|
|
41
|
-
out.add(local);
|
|
42
|
-
}
|
|
43
|
-
return out;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* The declaration a consumer reads: the definition's head, without its opening
|
|
47
|
-
* brace. The parameter list is followed to its close before a brace can end the
|
|
48
|
-
* declaration, so an object parameter does not cut the signature in half.
|
|
49
|
-
*/
|
|
50
|
-
function declarationOf(lines, s) {
|
|
51
|
-
const parts = [];
|
|
52
|
-
const last = Math.min(s.end, s.line + MAX_DECLARATION_LINES - 1);
|
|
53
|
-
let open = 0;
|
|
54
|
-
let whole = false;
|
|
55
|
-
for (let n = s.line; n <= last && !whole; n++) {
|
|
56
|
-
const line = lines[n - 1] ?? "";
|
|
57
|
-
parts.push(line.trim());
|
|
58
|
-
for (const c of line)
|
|
59
|
-
open += c === "(" ? 1 : c === ")" ? -1 : 0;
|
|
60
|
-
const t = line.trim();
|
|
61
|
-
// `do` closes a declaration the way `{` does elsewhere. Without it an Elixir
|
|
62
|
-
// declaration runs to the line cap and swallows the body, so editing a single
|
|
63
|
-
// statement inside a function reads as the function's surface having moved.
|
|
64
|
-
whole =
|
|
65
|
-
open <= 0 &&
|
|
66
|
-
(/[{;]/.test(line) || /:\s*$/.test(t) || /(^|\s)do:?$/.test(t) || /,\s*do:\s/.test(t));
|
|
67
|
-
}
|
|
68
|
-
const text = parts
|
|
69
|
-
.join(" ")
|
|
70
|
-
.replace(/\s+/g, " ")
|
|
71
|
-
.replace(/\s*[{;]\s*$/, "")
|
|
72
|
-
.trim();
|
|
73
|
-
const cut = text.length > MAX_DECLARATION_CHARS;
|
|
74
|
-
return cut ? `${text.slice(0, MAX_DECLARATION_CHARS)} ...` : whole ? text : `${text} ...`;
|
|
75
|
-
}
|
|
76
|
-
/** The text compared to decide whether the surface moved. */
|
|
77
|
-
function surfaceOf(lines, s) {
|
|
78
|
-
if (!BODY_IS_SURFACE.has(s.kind))
|
|
79
|
-
return declarationOf(lines, s);
|
|
80
|
-
return lines
|
|
81
|
-
.slice(s.line - 1, Math.min(s.end, s.line + MAX_SURFACE_LINES - 1))
|
|
82
|
-
.join(" ")
|
|
83
|
-
.replace(/\s+/g, " ")
|
|
84
|
-
.trim();
|
|
85
|
-
}
|
|
86
|
-
function qualifiedOf(s) {
|
|
87
|
-
return s.id.slice(s.file.length + 1).replace(/#\d+$/, "");
|
|
88
|
-
}
|
|
89
|
-
/** Symbol ids visible outside their own file, for the files the diff touched. */
|
|
90
|
-
function visibleIds(graph, texts) {
|
|
91
|
-
const out = new Set();
|
|
92
|
-
const byFile = new Map();
|
|
93
|
-
for (const s of graph.symbols) {
|
|
94
|
-
if (!texts.has(s.file))
|
|
95
|
-
continue;
|
|
96
|
-
const list = byFile.get(s.file);
|
|
97
|
-
if (list)
|
|
98
|
-
list.push(s);
|
|
99
|
-
else
|
|
100
|
-
byFile.set(s.file, [s]);
|
|
101
|
-
}
|
|
102
|
-
for (const [file, syms] of byFile) {
|
|
103
|
-
const family = FAMILY[languageFor(file)];
|
|
104
|
-
if (!family)
|
|
105
|
-
continue;
|
|
106
|
-
const text = texts.get(file);
|
|
107
|
-
const lines = text.split("\n");
|
|
108
|
-
const reexported = family === "js" ? reexportedNames(text) : new Set();
|
|
109
|
-
// parents first, so a method can ask whether the type holding it is visible
|
|
110
|
-
const exported = new Set();
|
|
111
|
-
for (const s of [...syms].sort((a, b) => a.line - b.line)) {
|
|
112
|
-
const decl = (lines[s.line - 1] ?? "").trim();
|
|
113
|
-
const declares = () => {
|
|
114
|
-
switch (family) {
|
|
115
|
-
case "js":
|
|
116
|
-
return /^export\b/.test(decl) || reexported.has(s.name);
|
|
117
|
-
case "python":
|
|
118
|
-
return !s.name.startsWith("_") || /^__\w+__$/.test(s.name);
|
|
119
|
-
case "go":
|
|
120
|
-
return /^[A-Z]/.test(s.name);
|
|
121
|
-
case "rust":
|
|
122
|
-
return /^pub(\s|\()/.test(decl);
|
|
123
|
-
case "java":
|
|
124
|
-
return /\bpublic\b/.test(decl);
|
|
125
|
-
case "elixir":
|
|
126
|
-
// the private forms are the same words with a `p`: defp, defmacrop, defguardp
|
|
127
|
-
return /^def(?:module|protocol|macro|delegate|guard|n)?(?=[\s(])/.test(decl);
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
const q = qualifiedOf(s);
|
|
131
|
-
const parent = q.includes(".") ? q.slice(0, q.lastIndexOf(".")) : "";
|
|
132
|
-
let visible;
|
|
133
|
-
if (!parent)
|
|
134
|
-
visible = declares();
|
|
135
|
-
// a method rides on its type's visibility, except where the line already says it:
|
|
136
|
-
// Rust puts `pub` there, and Elixir has no private module and marks the function
|
|
137
|
-
// itself - and its module names hold dots of their own, so the parent of
|
|
138
|
-
// `Chat.Repo.fetch` is not a symbol to look up
|
|
139
|
-
else if (family === "rust" || family === "elixir")
|
|
140
|
-
visible = declares();
|
|
141
|
-
else if (family === "js")
|
|
142
|
-
visible =
|
|
143
|
-
exported.has(parent) && s.kind === "method" && !/^(private|protected|#)/.test(decl);
|
|
144
|
-
else
|
|
145
|
-
visible = exported.has(parent) && declares();
|
|
146
|
-
if (!visible)
|
|
147
|
-
continue;
|
|
148
|
-
exported.add(q);
|
|
149
|
-
out.add(s.id);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return out;
|
|
153
|
-
}
|
|
154
|
-
function verdictOf(entries, internal, unreadable) {
|
|
155
|
-
const counts = ["removed", "changed", "added"]
|
|
156
|
-
.map((c) => [c, entries.filter((e) => e.change === c).length])
|
|
157
|
-
.filter(([, n]) => n > 0)
|
|
158
|
-
.map(([c, n]) => `${n} ${c}`);
|
|
159
|
-
const head = counts.length
|
|
160
|
-
? `${counts.join(", ")}.`
|
|
161
|
-
: internal
|
|
162
|
-
? `No interface moved. ${internal} symbol${internal > 1 ? "s" : ""} changed inside, with no visible surface.`
|
|
163
|
-
: "No interface moved.";
|
|
164
|
-
const tail = unreadable
|
|
165
|
-
? ` ${unreadable} changed file${unreadable > 1 ? "s are" : " is"} outside the code graph.`
|
|
166
|
-
: "";
|
|
167
|
-
return head + tail;
|
|
168
|
-
}
|
|
169
1
|
const RANK = { removed: 0, changed: 1, added: 2 };
|
|
170
2
|
/** Removed first: it is the entry a reviewer must not miss. */
|
|
171
3
|
export function sortEntries(entries) {
|
|
@@ -174,81 +6,12 @@ export function sortEntries(entries) {
|
|
|
174
6
|
a.line - b.line ||
|
|
175
7
|
a.name.localeCompare(b.name));
|
|
176
8
|
}
|
|
177
|
-
/**
|
|
178
|
-
export function
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
export async function interfaceDelta(input) {
|
|
185
|
-
const headSyms = new Map(input.head.symbols.map((s) => [s.id, s]));
|
|
186
|
-
const baseSyms = new Map(input.base.symbols.map((s) => [s.id, s]));
|
|
187
|
-
const headPaths = new Set();
|
|
188
|
-
const basePaths = new Set();
|
|
189
|
-
for (const row of input.impact.changed) {
|
|
190
|
-
if (row.change === "removed")
|
|
191
|
-
basePaths.add(row.file);
|
|
192
|
-
else {
|
|
193
|
-
headPaths.add(row.file);
|
|
194
|
-
basePaths.add(input.changes.get(row.file)?.oldPath ?? row.file);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
const [headText, baseText] = await Promise.all([
|
|
198
|
-
catFiles(input.cwd, input.pins.head, [...headPaths]),
|
|
199
|
-
catFiles(input.cwd, input.pins.base, [...basePaths]),
|
|
200
|
-
]);
|
|
201
|
-
const headVisible = visibleIds(input.head, headText);
|
|
202
|
-
const baseVisible = visibleIds(input.base, baseText);
|
|
203
|
-
const entries = [];
|
|
204
|
-
let internal = 0;
|
|
205
|
-
for (const row of input.impact.changed) {
|
|
206
|
-
const oldPath = row.change === "removed" ? row.file : input.changes.get(row.file)?.oldPath;
|
|
207
|
-
const baseId = row.change === "removed"
|
|
208
|
-
? row.id
|
|
209
|
-
: oldPath
|
|
210
|
-
? `${oldPath}${row.id.slice(row.file.length)}`
|
|
211
|
-
: row.id;
|
|
212
|
-
const headSym = row.change === "removed" ? undefined : headSyms.get(row.id);
|
|
213
|
-
const baseSym = baseSyms.get(baseId);
|
|
214
|
-
const wasVisible = !!baseSym && baseVisible.has(baseId);
|
|
215
|
-
const isVisible = !!headSym && headVisible.has(row.id);
|
|
216
|
-
if (!wasVisible && !isVisible) {
|
|
217
|
-
internal++;
|
|
218
|
-
continue;
|
|
219
|
-
}
|
|
220
|
-
const entry = (change, sym, lines, was) => entries.push({
|
|
221
|
-
id: change === "removed" ? baseId : row.id,
|
|
222
|
-
change,
|
|
223
|
-
name: declarationOf(lines, sym),
|
|
224
|
-
was,
|
|
225
|
-
kind: sym.kind,
|
|
226
|
-
file: sym.file,
|
|
227
|
-
line: sym.line,
|
|
228
|
-
graph: change === "removed" ? "base" : "head",
|
|
229
|
-
});
|
|
230
|
-
const headLines = headSym ? (headText.get(headSym.file) ?? "").split("\n") : [];
|
|
231
|
-
const baseLines = baseSym ? (baseText.get(baseSym.file) ?? "").split("\n") : [];
|
|
232
|
-
if (!wasVisible)
|
|
233
|
-
entry("added", headSym, headLines, "");
|
|
234
|
-
else if (!isVisible)
|
|
235
|
-
entry("removed", baseSym, baseLines, "");
|
|
236
|
-
else if (surfaceOf(headLines, headSym) !== surfaceOf(baseLines, baseSym)) {
|
|
237
|
-
const was = declarationOf(baseLines, baseSym);
|
|
238
|
-
entry("changed", headSym, headLines, was === declarationOf(headLines, headSym) ? "" : was);
|
|
239
|
-
}
|
|
240
|
-
else
|
|
241
|
-
internal++;
|
|
242
|
-
}
|
|
243
|
-
const unreadable = input.changed
|
|
244
|
-
.filter((f) => !LANGUAGES.includes(languageFor(f.path)))
|
|
245
|
-
.map((f) => f.path);
|
|
246
|
-
return withVerdict({
|
|
247
|
-
entries,
|
|
248
|
-
internal,
|
|
249
|
-
unreadable,
|
|
250
|
-
verdict: "",
|
|
251
|
-
truncated: input.impact.truncated,
|
|
252
|
-
});
|
|
9
|
+
/** The counts per change, removed first, or null when there is no entry. */
|
|
10
|
+
export function countsOf(entries) {
|
|
11
|
+
const counts = ["removed", "changed", "added"]
|
|
12
|
+
.map((c) => [c, entries.filter((e) => e.change === c).length])
|
|
13
|
+
.filter(([, n]) => n > 0)
|
|
14
|
+
.map(([c, n]) => `${n} ${c}`);
|
|
15
|
+
return counts.length ? counts.join(", ") : null;
|
|
253
16
|
}
|
|
254
17
|
//# sourceMappingURL=interfaces.js.map
|
package/dist/interfaces.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAoCA,MAAM,IAAI,GAA6C,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAE5F,+DAA+D;AAC/D,MAAM,UAAU,WAAW,CAAC,OAAyB;IACnD,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5B,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;QACf,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,QAAQ,CAAC,OAAyB;IAChD,MAAM,MAAM,GAAI,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAW;SACtD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAU,CAAC;SACtE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC"}
|
package/dist/server/server.js
CHANGED
|
@@ -52,7 +52,7 @@ async function findReview(idOrPrefix) {
|
|
|
52
52
|
return all[0];
|
|
53
53
|
throw new HttpError(404, all.length ? "ambiguous review id" : "review not found");
|
|
54
54
|
}
|
|
55
|
-
async function revisionData(id, n) {
|
|
55
|
+
export async function revisionData(id, n) {
|
|
56
56
|
const dir = revisionDir(id, n);
|
|
57
57
|
const [document, map, changes, coverage, meta, theme] = await Promise.all([
|
|
58
58
|
readJson(join(dir, "document.json")),
|
|
@@ -78,13 +78,38 @@ async function revisionData(id, n) {
|
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
80
|
/** Highlighter theme name for a review's presented revision (default skin when none). */
|
|
81
|
-
async function themeFor(id, revision) {
|
|
81
|
+
export async function themeFor(id, revision) {
|
|
82
82
|
if (!revision)
|
|
83
83
|
return undefined;
|
|
84
84
|
const t = await readJson(join(revisionDir(id, revision), "theme.json"));
|
|
85
85
|
return t ? registerTheme(t.shiki) : undefined;
|
|
86
86
|
}
|
|
87
|
-
|
|
87
|
+
/** One changed file's diff between the review's pins, highlighted in its theme. */
|
|
88
|
+
export async function fileDiff(review, path) {
|
|
89
|
+
const changes = await changedFiles(review.worktree, review.pins.base, review.pins.head);
|
|
90
|
+
const entry = changes.find((c) => c.path === path);
|
|
91
|
+
const oldPath = entry?.oldPath ?? path;
|
|
92
|
+
const [oldText, newText] = await Promise.all([
|
|
93
|
+
entry?.status === "A"
|
|
94
|
+
? Promise.resolve(null)
|
|
95
|
+
: showFile(review.worktree, review.pins.base, oldPath),
|
|
96
|
+
entry?.status === "D"
|
|
97
|
+
? Promise.resolve(null)
|
|
98
|
+
: showFile(review.worktree, review.pins.head, path),
|
|
99
|
+
]);
|
|
100
|
+
return buildFileDiff(path, oldText, newText, { old: `${review.pins.base}:${oldPath}`, new: `${review.pins.head}:${path}` }, entry?.oldPath, await themeFor(review.id, review.revision));
|
|
101
|
+
}
|
|
102
|
+
/** Every highlighted line of one file at a pinned commit, or null when it is not there. */
|
|
103
|
+
export async function fileLines(review, path, graph) {
|
|
104
|
+
const commit = graph === "base" ? review.pins.base : review.pins.head;
|
|
105
|
+
const text = await showFile(review.worktree, commit, path);
|
|
106
|
+
if (text === null)
|
|
107
|
+
return null;
|
|
108
|
+
const lang = languageFor(path);
|
|
109
|
+
const lines = await highlightLines(text, lang, `${commit}:${path}`, await themeFor(review.id, review.revision));
|
|
110
|
+
return { path, graph, lang, total: lines.length, lines };
|
|
111
|
+
}
|
|
112
|
+
export const BLOB_TYPES = {
|
|
88
113
|
woff2: "font/woff2",
|
|
89
114
|
woff: "font/woff",
|
|
90
115
|
ttf: "font/ttf",
|
|
@@ -192,31 +217,17 @@ export async function startServer(opts = {}) {
|
|
|
192
217
|
const path = url.searchParams.get("path") ?? "";
|
|
193
218
|
if (!path)
|
|
194
219
|
throw new HttpError(400, "path required");
|
|
195
|
-
|
|
196
|
-
const entry = changes.find((c) => c.path === path);
|
|
197
|
-
const oldPath = entry?.oldPath ?? path;
|
|
198
|
-
const [oldText, newText] = await Promise.all([
|
|
199
|
-
entry?.status === "A"
|
|
200
|
-
? Promise.resolve(null)
|
|
201
|
-
: showFile(review.worktree, review.pins.base, oldPath),
|
|
202
|
-
entry?.status === "D"
|
|
203
|
-
? Promise.resolve(null)
|
|
204
|
-
: showFile(review.worktree, review.pins.head, path),
|
|
205
|
-
]);
|
|
206
|
-
return (await buildFileDiff(path, oldText, newText, { old: `${review.pins.base}:${oldPath}`, new: `${review.pins.head}:${path}` }, entry?.oldPath, await themeFor(id, review.revision)));
|
|
220
|
+
return (await fileDiff(review, path));
|
|
207
221
|
}
|
|
208
222
|
if (sub === "file") {
|
|
209
223
|
const path = url.searchParams.get("path") ?? "";
|
|
210
224
|
const graph = url.searchParams.get("graph") === "base" ? "base" : "head";
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
if (text === null)
|
|
225
|
+
const f = await fileLines(review, path, graph);
|
|
226
|
+
if (!f)
|
|
214
227
|
throw new HttpError(404, `${path} not found at ${graph}`);
|
|
215
|
-
const lang = languageFor(path);
|
|
216
|
-
const all = await highlightLines(text, lang, `${commit}:${path}`, await themeFor(id, review.revision));
|
|
217
228
|
const from = Math.max(1, Number(url.searchParams.get("from") ?? 1));
|
|
218
|
-
const to = Math.min(
|
|
219
|
-
return {
|
|
229
|
+
const to = Math.min(f.total, Number(url.searchParams.get("to") ?? f.total));
|
|
230
|
+
return { ...f, from, to, lines: f.lines.slice(from - 1, to) };
|
|
220
231
|
}
|
|
221
232
|
if (sub === "symbols") {
|
|
222
233
|
const name = url.searchParams.get("name") ?? "";
|