@commentray/render 0.0.4 → 0.0.6
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/dist/block-stretch-layout.d.ts.map +1 -1
- package/dist/block-stretch-layout.js +11 -23
- package/dist/block-stretch-layout.js.map +1 -1
- package/dist/browse-page-slug.d.ts +6 -0
- package/dist/browse-page-slug.d.ts.map +1 -0
- package/dist/browse-page-slug.js +9 -0
- package/dist/browse-page-slug.js.map +1 -0
- package/dist/build-commentray-nav-search.d.ts +22 -6
- package/dist/build-commentray-nav-search.d.ts.map +1 -1
- package/dist/build-commentray-nav-search.js +55 -36
- package/dist/build-commentray-nav-search.js.map +1 -1
- package/dist/build-stamp.d.ts +6 -0
- package/dist/build-stamp.d.ts.map +1 -0
- package/dist/build-stamp.js +23 -0
- package/dist/build-stamp.js.map +1 -0
- package/dist/code-browser-block-rays.d.ts +48 -0
- package/dist/code-browser-block-rays.d.ts.map +1 -0
- package/dist/code-browser-block-rays.js +95 -0
- package/dist/code-browser-block-rays.js.map +1 -0
- package/dist/code-browser-client.bundle.js +12 -7
- package/dist/code-browser-client.js +787 -100
- package/dist/code-browser-client.js.map +1 -1
- package/dist/code-browser-pair-nav.d.ts +23 -0
- package/dist/code-browser-pair-nav.d.ts.map +1 -0
- package/dist/code-browser-pair-nav.js +59 -0
- package/dist/code-browser-pair-nav.js.map +1 -0
- package/dist/code-browser-search.d.ts +50 -0
- package/dist/code-browser-search.d.ts.map +1 -1
- package/dist/code-browser-search.js +117 -0
- package/dist/code-browser-search.js.map +1 -1
- package/dist/code-browser.d.ts +51 -2
- package/dist/code-browser.d.ts.map +1 -1
- package/dist/code-browser.js +863 -196
- package/dist/code-browser.js.map +1 -1
- package/dist/highlighted-code-lines.d.ts +19 -0
- package/dist/highlighted-code-lines.d.ts.map +1 -0
- package/dist/highlighted-code-lines.js +61 -0
- package/dist/highlighted-code-lines.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/markdown-pipeline.d.ts.map +1 -1
- package/dist/markdown-pipeline.js +3 -2
- package/dist/markdown-pipeline.js.map +1 -1
- package/dist/mermaid-runtime-html.d.ts.map +1 -1
- package/dist/mermaid-runtime-html.js +3 -1
- package/dist/mermaid-runtime-html.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-stretch-layout.d.ts","sourceRoot":"","sources":["../src/block-stretch-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"block-stretch-layout.d.ts","sourceRoot":"","sources":["../src/block-stretch-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,KAAK,0BAA0B,EAAwB,MAAM,wBAAwB,CAAC;AAO/F,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,eAAe,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;CACnD,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C,CA6BA;AAgBD;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA8ElE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MARKER_ID_BODY, buildBlockScrollLinks, } from "@commentray/core";
|
|
2
2
|
import { escapeHtml } from "./html-utils.js";
|
|
3
|
-
import {
|
|
3
|
+
import { renderHighlightedCodeLineRows } from "./highlighted-code-lines.js";
|
|
4
|
+
import { renderMarkdownToHtml } from "./markdown-pipeline.js";
|
|
4
5
|
const BLOCK_MARKER_LINE = new RegExp(`^<!--\\s*commentray:block\\s+id=(${MARKER_ID_BODY})\\s*-->$`, "i");
|
|
5
6
|
export function splitCommentrayMarkdownSegments(markdown) {
|
|
6
7
|
const lines = markdown.split("\n");
|
|
@@ -32,29 +33,13 @@ export function splitCommentrayMarkdownSegments(markdown) {
|
|
|
32
33
|
flush();
|
|
33
34
|
return { preamble: preambleLines.join("\n").trimEnd(), segments };
|
|
34
35
|
}
|
|
35
|
-
function extractPreCodeInner(html) {
|
|
36
|
-
const m = /<pre(?:\s[^>]*)?>\s*<code(?:\s[^>]*)?>([\s\S]*?)<\/code>\s*<\/pre>/i.exec(html.trim());
|
|
37
|
-
return m ? m[1] : escapeHtml(html);
|
|
38
|
-
}
|
|
39
|
-
async function renderSingleCodeLine(line, lineIndex0, language) {
|
|
40
|
-
const display = line === "" ? " " : line;
|
|
41
|
-
const fence = "```" + language + "\n" + display + "\n```\n";
|
|
42
|
-
const block = await renderFencedCode(fence);
|
|
43
|
-
const inner = extractPreCodeInner(block);
|
|
44
|
-
const langAttr = escapeHtml(language);
|
|
45
|
-
const num = lineIndex0 + 1;
|
|
46
|
-
return (`<div class="code-line" id="code-line-${lineIndex0}" data-line="${lineIndex0}">` +
|
|
47
|
-
`<span class="ln" aria-hidden="true">${num}</span>` +
|
|
48
|
-
`<pre><code class="hljs language-${langAttr}">${inner}</code></pre>` +
|
|
49
|
-
`</div>`);
|
|
50
|
-
}
|
|
51
36
|
/** Renders a contiguous 0-based inclusive range of source lines into one stacked column. */
|
|
52
37
|
async function renderCodeLineStack(lines, startLine0, endLine0, language) {
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
return `<div class="stretch-code-stack">${
|
|
38
|
+
const slice = lines.slice(startLine0, endLine0 + 1).join("\n");
|
|
39
|
+
const inner = await renderHighlightedCodeLineRows(slice, language, {
|
|
40
|
+
lineIndexOffset: startLine0,
|
|
41
|
+
});
|
|
42
|
+
return `<div class="stretch-code-stack">${inner}</div>`;
|
|
58
43
|
}
|
|
59
44
|
/**
|
|
60
45
|
* When index blocks + markdown markers align, builds a two-column table in the spirit of
|
|
@@ -86,7 +71,10 @@ export async function tryBuildBlockStretchTableHtml(opts) {
|
|
|
86
71
|
const L = i + 1;
|
|
87
72
|
const b = lineToBlock.get(L);
|
|
88
73
|
if (!b) {
|
|
89
|
-
const codeLineHtml = await
|
|
74
|
+
const codeLineHtml = await renderHighlightedCodeLineRows(lines[i] ?? "", opts.language, {
|
|
75
|
+
lineIndexOffset: i,
|
|
76
|
+
omitLineStackWrapper: true,
|
|
77
|
+
});
|
|
90
78
|
rows.push(`<tr class="stretch-row stretch-row--gap"><td class="stretch-code">${codeLineHtml}</td>` +
|
|
91
79
|
`<td class="stretch-doc stretch-doc--gap"><span class="stretch-gap-mark" aria-hidden="true">—</span></td></tr>`);
|
|
92
80
|
i += 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-stretch-layout.js","sourceRoot":"","sources":["../src/block-stretch-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,cAAc,EACd,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"block-stretch-layout.js","sourceRoot":"","sources":["../src/block-stretch-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browse-page-slug.d.ts","sourceRoot":"","sources":["../src/browse-page-slug.ts"],"names":[],"mappings":"AAEA,qGAAqG;AACrG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAKT"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/** Same slug as `_site/browse/<slug>.html` in `github-pages-site.ts` (nav search + browse pages). */
|
|
3
|
+
export function browsePageSlugFromPair(pair) {
|
|
4
|
+
return createHash("sha256")
|
|
5
|
+
.update(`${pair.commentrayPath}\0${pair.sourcePath}`, "utf8")
|
|
6
|
+
.digest("base64url")
|
|
7
|
+
.slice(0, 28);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=browse-page-slug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browse-page-slug.js","sourceRoot":"","sources":["../src/browse-page-slug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,qGAAqG;AACrG,MAAM,UAAU,sBAAsB,CAAC,IAGtC;IACC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC;SAC5D,MAAM,CAAC,WAAW,CAAC;SACnB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -15,12 +15,23 @@ export type CommentrayNavSearchRow = {
|
|
|
15
15
|
line: number;
|
|
16
16
|
text: string;
|
|
17
17
|
};
|
|
18
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* One indexed source ↔ commentray pair for the static hub.
|
|
20
|
+
* Optional SCM blob URLs are filled when `[static_site].github_url` is set (GitHub-style today;
|
|
21
|
+
* configurable host URL — see plan). Same-site `./browse/…` links are added by the static-site
|
|
22
|
+
* build so navigation stays on the exported HTML without requiring an external host.
|
|
23
|
+
*/
|
|
19
24
|
export type DocumentedPairNav = {
|
|
20
25
|
sourcePath: string;
|
|
21
26
|
commentrayPath: string;
|
|
22
|
-
sourceOnGithub
|
|
23
|
-
commentrayOnGithub
|
|
27
|
+
sourceOnGithub?: string;
|
|
28
|
+
commentrayOnGithub?: string;
|
|
29
|
+
/**
|
|
30
|
+
* When the static Pages build emits per-pair browse HTML (e.g. `_site/browse/…html`), a URL
|
|
31
|
+
* relative to the site root `index.html` (e.g. `./browse/x.html`) so the hub can open the same
|
|
32
|
+
* Commentray UI for other files without leaving the site.
|
|
33
|
+
*/
|
|
34
|
+
staticBrowseUrl?: string;
|
|
24
35
|
};
|
|
25
36
|
export type CommentrayNavSearchDocument = {
|
|
26
37
|
schemaVersion: typeof COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION;
|
|
@@ -45,8 +56,13 @@ export type BuildCommentrayNavSearchGithubBlobBase = {
|
|
|
45
56
|
* Builds a JSON-serialisable search corpus: **filenames / paths** plus **commentray Markdown lines**
|
|
46
57
|
* for each indexed pair. Primary source file contents are intentionally omitted.
|
|
47
58
|
*
|
|
48
|
-
* When `githubBlobBase` is set,
|
|
49
|
-
*
|
|
59
|
+
* `documentedPairs` lists every merged pair. When `githubBlobBase` is set, GitHub-style **blob**
|
|
60
|
+
* URLs are included for optional outbound links; the static-site build always adds same-site
|
|
61
|
+
* `staticBrowseUrl` when it emits `_site/browse/*.html`.
|
|
62
|
+
*
|
|
63
|
+
* Pairs are merged from the metadata index, a walk of the configured storage `source` tree for
|
|
64
|
+
* every `*.md` companion (flat or Angles layout), and an optional single-page `fallback`. For the
|
|
65
|
+
* same `commentrayPath`, the index wins over disk-inferred paths.
|
|
50
66
|
*/
|
|
51
|
-
export declare function buildCommentrayNavSearchDocument(repoRoot: string, fallback?: BuildCommentrayNavSearchFallback, githubBlobBase?: BuildCommentrayNavSearchGithubBlobBase): Promise<CommentrayNavSearchDocument>;
|
|
67
|
+
export declare function buildCommentrayNavSearchDocument(repoRoot: string, fallback?: BuildCommentrayNavSearchFallback, githubBlobBase?: BuildCommentrayNavSearchGithubBlobBase, storageDir?: string): Promise<CommentrayNavSearchDocument>;
|
|
52
68
|
//# sourceMappingURL=build-commentray-nav-search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-commentray-nav-search.d.ts","sourceRoot":"","sources":["../src/build-commentray-nav-search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-commentray-nav-search.d.ts","sourceRoot":"","sources":["../src/build-commentray-nav-search.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,oCAAoC,EAAG,CAAU,CAAC;AAE/D,6FAA6F;AAC7F,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACtE;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEN;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,aAAa,EAAE,OAAO,oCAAoC,CAAC;IAC3D,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC/B,kGAAkG;IAClG,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAkFF;;;;;;;;;;;GAWG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,cAAc,CAAC,EAAE,sCAAsC,EACvD,UAAU,SAAgB,GACzB,OAAO,CAAC,2BAA2B,CAAC,CAkCtC"}
|
|
@@ -1,25 +1,50 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
|
-
import
|
|
3
|
-
import { githubRepoBlobFileUrl, readIndex } from "@commentray/core";
|
|
2
|
+
import { discoverCommentrayPairsOnDisk, githubRepoBlobFileUrl, readIndex, resolvePathUnderRepoRoot, } from "@commentray/core";
|
|
4
3
|
export const COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION = 1;
|
|
5
4
|
function buildDocumentedPairs(pairs, gh) {
|
|
6
|
-
const { owner, repo, branch } = gh;
|
|
7
5
|
const uniq = new Map();
|
|
8
6
|
for (const { sourcePath, commentrayPath } of pairs) {
|
|
9
7
|
const key = `${sourcePath}\0${commentrayPath}`;
|
|
10
8
|
if (uniq.has(key))
|
|
11
9
|
continue;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
const row = { sourcePath, commentrayPath };
|
|
11
|
+
if (gh !== undefined) {
|
|
12
|
+
row.sourceOnGithub = githubRepoBlobFileUrl(gh.owner, gh.repo, gh.branch, sourcePath);
|
|
13
|
+
row.commentrayOnGithub = githubRepoBlobFileUrl(gh.owner, gh.repo, gh.branch, commentrayPath);
|
|
14
|
+
}
|
|
15
|
+
uniq.set(key, row);
|
|
18
16
|
}
|
|
19
17
|
return [...uniq.values()].sort((a, b) => a.sourcePath === b.sourcePath
|
|
20
18
|
? a.commentrayPath.localeCompare(b.commentrayPath)
|
|
21
19
|
: a.sourcePath.localeCompare(b.sourcePath));
|
|
22
20
|
}
|
|
21
|
+
function mergeNavSearchPairs(indexPairs, diskPairs, fallback) {
|
|
22
|
+
const byCr = new Map();
|
|
23
|
+
for (const p of diskPairs) {
|
|
24
|
+
byCr.set(p.commentrayPath, { sourcePath: p.sourcePath, commentrayPath: p.commentrayPath });
|
|
25
|
+
}
|
|
26
|
+
for (const e of indexPairs) {
|
|
27
|
+
byCr.set(e.commentrayPath, { sourcePath: e.sourcePath, commentrayPath: e.commentrayPath });
|
|
28
|
+
}
|
|
29
|
+
if (fallback !== undefined) {
|
|
30
|
+
const fp = {
|
|
31
|
+
sourcePath: fallback.sourcePath,
|
|
32
|
+
commentrayPath: fallback.commentrayPath,
|
|
33
|
+
};
|
|
34
|
+
if (!byCr.has(fp.commentrayPath)) {
|
|
35
|
+
byCr.set(fp.commentrayPath, fp);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return [...byCr.values()].sort((a, b) => a.commentrayPath.localeCompare(b.commentrayPath));
|
|
39
|
+
}
|
|
40
|
+
function markdownAbsForMergedPair(repoRoot, pair, fallback) {
|
|
41
|
+
if (fallback !== undefined &&
|
|
42
|
+
pair.commentrayPath === fallback.commentrayPath &&
|
|
43
|
+
pair.sourcePath === fallback.sourcePath) {
|
|
44
|
+
return fallback.markdownAbs;
|
|
45
|
+
}
|
|
46
|
+
return resolvePathUnderRepoRoot(repoRoot, pair.commentrayPath);
|
|
47
|
+
}
|
|
23
48
|
async function appendPairRowsSync(rows, sourcePath, commentrayPath, markdownAbs) {
|
|
24
49
|
rows.push({ kind: "sourcePath", sourcePath, commentrayPath });
|
|
25
50
|
rows.push({ kind: "commentrayPath", sourcePath, commentrayPath });
|
|
@@ -38,42 +63,36 @@ async function appendPairRowsSync(rows, sourcePath, commentrayPath, markdownAbs)
|
|
|
38
63
|
* Builds a JSON-serialisable search corpus: **filenames / paths** plus **commentray Markdown lines**
|
|
39
64
|
* for each indexed pair. Primary source file contents are intentionally omitted.
|
|
40
65
|
*
|
|
41
|
-
* When `githubBlobBase` is set,
|
|
42
|
-
*
|
|
66
|
+
* `documentedPairs` lists every merged pair. When `githubBlobBase` is set, GitHub-style **blob**
|
|
67
|
+
* URLs are included for optional outbound links; the static-site build always adds same-site
|
|
68
|
+
* `staticBrowseUrl` when it emits `_site/browse/*.html`.
|
|
69
|
+
*
|
|
70
|
+
* Pairs are merged from the metadata index, a walk of the configured storage `source` tree for
|
|
71
|
+
* every `*.md` companion (flat or Angles layout), and an optional single-page `fallback`. For the
|
|
72
|
+
* same `commentrayPath`, the index wins over disk-inferred paths.
|
|
43
73
|
*/
|
|
44
|
-
export async function buildCommentrayNavSearchDocument(repoRoot, fallback, githubBlobBase) {
|
|
74
|
+
export async function buildCommentrayNavSearchDocument(repoRoot, fallback, githubBlobBase, storageDir = ".commentray") {
|
|
45
75
|
const rows = [];
|
|
46
76
|
const idx = await readIndex(repoRoot);
|
|
47
|
-
const
|
|
48
|
-
? Object.entries(idx.byCommentrayPath).
|
|
49
|
-
|
|
50
|
-
if (fromIndex.length > 0) {
|
|
51
|
-
for (const [crPath, entry] of fromIndex) {
|
|
52
|
-
await appendPairRowsSync(rows, entry.sourcePath, crPath, path.join(repoRoot, crPath));
|
|
53
|
-
}
|
|
54
|
-
const pairInputs = fromIndex.map(([, e]) => ({
|
|
77
|
+
const indexPairs = idx !== null && Object.keys(idx.byCommentrayPath).length > 0
|
|
78
|
+
? Object.entries(idx.byCommentrayPath).map(([crPath, e]) => ({
|
|
79
|
+
commentrayPath: crPath,
|
|
55
80
|
sourcePath: e.sourcePath,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return {
|
|
62
|
-
schemaVersion: COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION,
|
|
63
|
-
rows,
|
|
64
|
-
...(documentedPairs ? { documentedPairs } : {}),
|
|
65
|
-
};
|
|
81
|
+
}))
|
|
82
|
+
: [];
|
|
83
|
+
const diskPairs = await discoverCommentrayPairsOnDisk(repoRoot, storageDir);
|
|
84
|
+
const merged = mergeNavSearchPairs(indexPairs, diskPairs, fallback);
|
|
85
|
+
if (merged.length === 0) {
|
|
86
|
+
return { schemaVersion: COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION, rows };
|
|
66
87
|
}
|
|
67
|
-
|
|
68
|
-
await appendPairRowsSync(rows,
|
|
88
|
+
for (const p of merged) {
|
|
89
|
+
await appendPairRowsSync(rows, p.sourcePath, p.commentrayPath, markdownAbsForMergedPair(repoRoot, p, fallback));
|
|
69
90
|
}
|
|
70
|
-
const documentedPairs = githubBlobBase
|
|
71
|
-
? buildDocumentedPairs([{ sourcePath: fallback.sourcePath, commentrayPath: fallback.commentrayPath }], githubBlobBase)
|
|
72
|
-
: undefined;
|
|
91
|
+
const documentedPairs = buildDocumentedPairs(merged, githubBlobBase);
|
|
73
92
|
return {
|
|
74
93
|
schemaVersion: COMMENTRAY_NAV_SEARCH_SCHEMA_VERSION,
|
|
75
94
|
rows,
|
|
76
|
-
|
|
95
|
+
documentedPairs,
|
|
77
96
|
};
|
|
78
97
|
}
|
|
79
98
|
//# sourceMappingURL=build-commentray-nav-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-commentray-nav-search.js","sourceRoot":"","sources":["../src/build-commentray-nav-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"build-commentray-nav-search.js","sourceRoot":"","sources":["../src/build-commentray-nav-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable “when was this HTML built” line for static pages, using the
|
|
3
|
+
* **Node process** local timezone and a zone name/offset from `Intl` (not UTC-only).
|
|
4
|
+
*/
|
|
5
|
+
export declare function formatCommentrayBuiltAtLocal(date: Date): string;
|
|
6
|
+
//# sourceMappingURL=build-stamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-stamp.d.ts","sourceRoot":"","sources":["../src/build-stamp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAgB/D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable “when was this HTML built” line for static pages, using the
|
|
3
|
+
* **Node process** local timezone and a zone name/offset from `Intl` (not UTC-only).
|
|
4
|
+
*/
|
|
5
|
+
export function formatCommentrayBuiltAtLocal(date) {
|
|
6
|
+
try {
|
|
7
|
+
return new Intl.DateTimeFormat(undefined, {
|
|
8
|
+
weekday: "short",
|
|
9
|
+
year: "numeric",
|
|
10
|
+
month: "short",
|
|
11
|
+
day: "numeric",
|
|
12
|
+
hour: "2-digit",
|
|
13
|
+
minute: "2-digit",
|
|
14
|
+
second: "2-digit",
|
|
15
|
+
hour12: false,
|
|
16
|
+
timeZoneName: "longOffset",
|
|
17
|
+
}).format(date);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return date.toISOString();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=build-stamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-stamp.js","sourceRoot":"","sources":["../src/build-stamp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAU;IACrD,IAAI,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;YACxC,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,YAAY;SAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type BlockScrollLink } from "./code-browser-scroll-sync.js";
|
|
2
|
+
/** Gutter-local Y after clamping to visible gutter band (viewport-relative input). */
|
|
3
|
+
export type GutterYClamp = {
|
|
4
|
+
y: number;
|
|
5
|
+
clipped: "none" | "above" | "below";
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Maps a viewport Y to gutter-local coordinates and clamps into the gutter band
|
|
9
|
+
* so off-screen anchors draw at the top/bottom edge of the gutter.
|
|
10
|
+
*/
|
|
11
|
+
export declare function clampViewportYToGutterLocal(yViewport: number, gutterTop: number, gutterHeight: number, margin?: number): GutterYClamp;
|
|
12
|
+
export type GutterClipKind = GutterYClamp["clipped"];
|
|
13
|
+
export type GutterPt = {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Options for gutter Bézier paths: tension, clipping at viewport edges, and optional split for
|
|
19
|
+
* dotted “tail” segments when an anchor is off-screen.
|
|
20
|
+
*/
|
|
21
|
+
export type GutterRayBezierOpts = {
|
|
22
|
+
tension?: number;
|
|
23
|
+
clipStart?: GutterClipKind;
|
|
24
|
+
clipEnd?: GutterClipKind;
|
|
25
|
+
splitT?: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Horizontal cubic between the code edge (x0) and doc edge (x1), IntelliJ-style.
|
|
29
|
+
*
|
|
30
|
+
* When an endpoint is **clipped** to the top/bottom of the gutter (anchor off-screen), the
|
|
31
|
+
* corresponding control handle is lengthened so the curve **hugs the viewport boundary** with a
|
|
32
|
+
* horizontal tangent there—read as “the ray meets the edge flat,” not a pointer toward far
|
|
33
|
+
* off-screen content.
|
|
34
|
+
*/
|
|
35
|
+
export declare function gutterCubicControlPoints(x0: number, y0: number, x1: number, y1: number, opts?: Pick<GutterRayBezierOpts, "tension" | "clipStart" | "clipEnd">): [GutterPt, GutterPt, GutterPt, GutterPt];
|
|
36
|
+
export declare function cubicBezierDFromControlPoints(p0: GutterPt, p1: GutterPt, p2: GutterPt, p3: GutterPt): string;
|
|
37
|
+
/** de Casteljau split of a cubic Bézier at t ∈ (0, 1). */
|
|
38
|
+
export declare function splitCubicAtT(p0: GutterPt, p1: GutterPt, p2: GutterPt, p3: GutterPt, t: number): [[GutterPt, GutterPt, GutterPt, GutterPt], [GutterPt, GutterPt, GutterPt, GutterPt]];
|
|
39
|
+
export declare function gutterRayBezierPaths(x0: number, y0: number, x1: number, y1: number, opts?: GutterRayBezierOpts): {
|
|
40
|
+
solid: string;
|
|
41
|
+
dotted?: string;
|
|
42
|
+
};
|
|
43
|
+
export declare function cubicBezierAcrossGutterD(x0: number, y0: number, x1: number, y1: number, opts?: Pick<GutterRayBezierOpts, "tension" | "clipStart" | "clipEnd">): string;
|
|
44
|
+
export declare function sortBlockLinksBySource(links: BlockScrollLink[]): BlockScrollLink[];
|
|
45
|
+
export declare function activeBlockIdForViewport(links: BlockScrollLink[], topSourceLine1Based: number): string | null;
|
|
46
|
+
/** 0-based index into `code-line-*` ids from 1-based inclusive source line numbers. */
|
|
47
|
+
export declare function codeLineDomIndex0(sourceLine1Based: number): number;
|
|
48
|
+
//# sourceMappingURL=code-browser-block-rays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-browser-block-rays.d.ts","sourceRoot":"","sources":["../src/code-browser-block-rays.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAEvC,sFAAsF;AACtF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;CACrC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,MAAM,SAAI,GACT,YAAY,CAMd;AAED,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAM,GACxE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAa1C;AAED,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,GACX,MAAM,CAER;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,CAAC,EAAE,MAAM,GACR,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAWtF;AAMD,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,mBAAwB,GAC7B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAepC;AAED,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAM,GACxE,MAAM,CAGR;AAMD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAElF;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,eAAe,EAAE,EACxB,mBAAmB,EAAE,MAAM,GAC1B,MAAM,GAAG,IAAI,CAMf;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAElE"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { pickCommentrayLineForSourceScroll, } from "./code-browser-scroll-sync.js";
|
|
2
|
+
/**
|
|
3
|
+
* Maps a viewport Y to gutter-local coordinates and clamps into the gutter band
|
|
4
|
+
* so off-screen anchors draw at the top/bottom edge of the gutter.
|
|
5
|
+
*/
|
|
6
|
+
export function clampViewportYToGutterLocal(yViewport, gutterTop, gutterHeight, margin = 5) {
|
|
7
|
+
const lo = gutterTop + margin;
|
|
8
|
+
const hi = gutterTop + gutterHeight - margin;
|
|
9
|
+
if (yViewport < lo)
|
|
10
|
+
return { y: lo - gutterTop, clipped: "above" };
|
|
11
|
+
if (yViewport > hi)
|
|
12
|
+
return { y: hi - gutterTop, clipped: "below" };
|
|
13
|
+
return { y: yViewport - gutterTop, clipped: "none" };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Horizontal cubic between the code edge (x0) and doc edge (x1), IntelliJ-style.
|
|
17
|
+
*
|
|
18
|
+
* When an endpoint is **clipped** to the top/bottom of the gutter (anchor off-screen), the
|
|
19
|
+
* corresponding control handle is lengthened so the curve **hugs the viewport boundary** with a
|
|
20
|
+
* horizontal tangent there—read as “the ray meets the edge flat,” not a pointer toward far
|
|
21
|
+
* off-screen content.
|
|
22
|
+
*/
|
|
23
|
+
export function gutterCubicControlPoints(x0, y0, x1, y1, opts = {}) {
|
|
24
|
+
const { tension = 0.38, clipStart = "none", clipEnd = "none" } = opts;
|
|
25
|
+
const boost = 0.24;
|
|
26
|
+
const boosted = Math.min(0.66, tension + boost);
|
|
27
|
+
const t0 = clipStart === "none" ? tension : boosted;
|
|
28
|
+
const t1 = clipEnd === "none" ? tension : boosted;
|
|
29
|
+
const dx = x1 - x0;
|
|
30
|
+
return [
|
|
31
|
+
{ x: x0, y: y0 },
|
|
32
|
+
{ x: x0 + dx * t0, y: y0 },
|
|
33
|
+
{ x: x1 - dx * t1, y: y1 },
|
|
34
|
+
{ x: x1, y: y1 },
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
export function cubicBezierDFromControlPoints(p0, p1, p2, p3) {
|
|
38
|
+
return `M ${fmt(p0.x)} ${fmt(p0.y)} C ${fmt(p1.x)} ${fmt(p1.y)} ${fmt(p2.x)} ${fmt(p2.y)} ${fmt(p3.x)} ${fmt(p3.y)}`;
|
|
39
|
+
}
|
|
40
|
+
/** de Casteljau split of a cubic Bézier at t ∈ (0, 1). */
|
|
41
|
+
export function splitCubicAtT(p0, p1, p2, p3, t) {
|
|
42
|
+
const q0 = lerpPt(p0, p1, t);
|
|
43
|
+
const q1 = lerpPt(p1, p2, t);
|
|
44
|
+
const q2 = lerpPt(p2, p3, t);
|
|
45
|
+
const r0 = lerpPt(q0, q1, t);
|
|
46
|
+
const r1 = lerpPt(q1, q2, t);
|
|
47
|
+
const s = lerpPt(r0, r1, t);
|
|
48
|
+
return [
|
|
49
|
+
[p0, q0, r0, s],
|
|
50
|
+
[s, r1, q2, p3],
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
function lerpPt(a, b, t) {
|
|
54
|
+
return { x: (1 - t) * a.x + t * b.x, y: (1 - t) * a.y + t * b.y };
|
|
55
|
+
}
|
|
56
|
+
export function gutterRayBezierPaths(x0, y0, x1, y1, opts = {}) {
|
|
57
|
+
const { tension = 0.38, clipStart = "none", clipEnd = "none", splitT = 0.66 } = opts;
|
|
58
|
+
const pts = gutterCubicControlPoints(x0, y0, x1, y1, { tension, clipStart, clipEnd });
|
|
59
|
+
const [p0, p1, p2, p3] = pts;
|
|
60
|
+
const interrupt = clipStart !== "none" || clipEnd !== "none";
|
|
61
|
+
if (!interrupt) {
|
|
62
|
+
return { solid: cubicBezierDFromControlPoints(p0, p1, p2, p3) };
|
|
63
|
+
}
|
|
64
|
+
const [left, right] = splitCubicAtT(p0, p1, p2, p3, splitT);
|
|
65
|
+
const [a0, a1, a2, a3] = left;
|
|
66
|
+
const [b0, b1, b2, b3] = right;
|
|
67
|
+
return {
|
|
68
|
+
solid: cubicBezierDFromControlPoints(a0, a1, a2, a3),
|
|
69
|
+
dotted: cubicBezierDFromControlPoints(b0, b1, b2, b3),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export function cubicBezierAcrossGutterD(x0, y0, x1, y1, opts = {}) {
|
|
73
|
+
const [p0, p1, p2, p3] = gutterCubicControlPoints(x0, y0, x1, y1, opts);
|
|
74
|
+
return cubicBezierDFromControlPoints(p0, p1, p2, p3);
|
|
75
|
+
}
|
|
76
|
+
function fmt(n) {
|
|
77
|
+
return n.toFixed(2);
|
|
78
|
+
}
|
|
79
|
+
export function sortBlockLinksBySource(links) {
|
|
80
|
+
return [...links].sort((a, b) => a.sourceStart - b.sourceStart);
|
|
81
|
+
}
|
|
82
|
+
export function activeBlockIdForViewport(links, topSourceLine1Based) {
|
|
83
|
+
if (links.length === 0)
|
|
84
|
+
return null;
|
|
85
|
+
const mdLine = pickCommentrayLineForSourceScroll(links, topSourceLine1Based);
|
|
86
|
+
if (mdLine === null)
|
|
87
|
+
return null;
|
|
88
|
+
const b = links.find((x) => x.commentrayLine === mdLine);
|
|
89
|
+
return b?.id ?? null;
|
|
90
|
+
}
|
|
91
|
+
/** 0-based index into `code-line-*` ids from 1-based inclusive source line numbers. */
|
|
92
|
+
export function codeLineDomIndex0(sourceLine1Based) {
|
|
93
|
+
return Math.max(0, sourceLine1Based - 1);
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=code-browser-block-rays.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-browser-block-rays.js","sourceRoot":"","sources":["../src/code-browser-block-rays.ts"],"names":[],"mappings":"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"}
|