@commentray/core 0.1.0 → 0.1.2
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-scroll-pickers.d.ts +15 -4
- package/dist/block-scroll-pickers.d.ts.map +1 -1
- package/dist/block-scroll-pickers.js +28 -17
- package/dist/block-scroll-pickers.js.map +1 -1
- package/dist/blocks.d.ts +18 -0
- package/dist/blocks.d.ts.map +1 -1
- package/dist/blocks.js +24 -3
- package/dist/blocks.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/marker-validation.d.ts +16 -3
- package/dist/marker-validation.d.ts.map +1 -1
- package/dist/marker-validation.js +86 -8
- package/dist/marker-validation.js.map +1 -1
- package/dist/region-marker-naming.d.ts +75 -0
- package/dist/region-marker-naming.d.ts.map +1 -0
- package/dist/region-marker-naming.js +316 -0
- package/dist/region-marker-naming.js.map +1 -0
- package/dist/scroll-sync.d.ts.map +1 -1
- package/dist/scroll-sync.js +12 -2
- package/dist/scroll-sync.js.map +1 -1
- package/dist/source-markers.d.ts +10 -0
- package/dist/source-markers.d.ts.map +1 -1
- package/dist/source-markers.js +32 -5
- package/dist/source-markers.js.map +1 -1
- package/dist/validate-project.d.ts.map +1 -1
- package/dist/validate-project.js +25 -2
- package/dist/validate-project.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,20 +3,31 @@ export type BlockScrollLink = {
|
|
|
3
3
|
/** Same id as `<!-- commentray:block id=… -->` and `index.json` blocks[]. */
|
|
4
4
|
id: string;
|
|
5
5
|
commentrayLine: number;
|
|
6
|
+
/** 1-based inclusive inner lines between paired region markers (unchanged semantics). */
|
|
6
7
|
sourceStart: number;
|
|
7
8
|
sourceEnd: number;
|
|
9
|
+
/**
|
|
10
|
+
* 1-based half-open viewport span for “which block owns this source line?”. Marker-backed
|
|
11
|
+
* blocks use `markerViewportHalfOpen1Based()` in source-markers; `lines:` anchors use
|
|
12
|
+
* `[range.start, range.end + 1)`.
|
|
13
|
+
*/
|
|
14
|
+
markerViewportHalfOpen1Based: {
|
|
15
|
+
lo: number;
|
|
16
|
+
hiExclusive: number;
|
|
17
|
+
};
|
|
8
18
|
};
|
|
9
19
|
/**
|
|
10
20
|
* Choose which commentray line (0-based) to reveal so the commentary matches
|
|
11
|
-
* the top of the source viewport.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
21
|
+
* the top of the source viewport. Uses each link’s `markerViewportHalfOpen1Based`:
|
|
22
|
+
* if the top line falls in `[lo, hiExclusive)`, that block wins; in gaps, the block with the
|
|
23
|
+
* greatest `lo` still at or above the top line; if the viewport is above every `lo`, the first
|
|
24
|
+
* block by `lo`.
|
|
14
25
|
*/
|
|
15
26
|
export declare function pickCommentrayLineForSourceScroll(blocks: BlockScrollLink[], topSourceLine1Based: number): number | null;
|
|
16
27
|
/**
|
|
17
28
|
* Choose a 0-based source line to reveal from the top of the commentray
|
|
18
29
|
* viewport: the block whose marker is at or above that line wins; reveal the
|
|
19
|
-
*
|
|
30
|
+
* first line of its viewport span (`lo` − 1).
|
|
20
31
|
*/
|
|
21
32
|
export declare function pickSourceLine0ForCommentrayScroll(blocks: BlockScrollLink[], topCommentrayLine0Based: number): number | null;
|
|
22
33
|
//# sourceMappingURL=block-scroll-pickers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-scroll-pickers.d.ts","sourceRoot":"","sources":["../src/block-scroll-pickers.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,MAAM,eAAe,GAAG;IAC5B,6EAA6E;IAC7E,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"block-scroll-pickers.d.ts","sourceRoot":"","sources":["../src/block-scroll-pickers.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,MAAM,eAAe,GAAG;IAC5B,6EAA6E;IAC7E,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,yFAAyF;IACzF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,4BAA4B,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,eAAe,EAAE,EACzB,mBAAmB,EAAE,MAAM,GAC1B,MAAM,GAAG,IAAI,CAyBf;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,eAAe,EAAE,EACzB,uBAAuB,EAAE,MAAM,GAC9B,MAAM,GAAG,IAAI,CAUf"}
|
|
@@ -1,41 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Choose which commentray line (0-based) to reveal so the commentary matches
|
|
3
|
-
* the top of the source viewport.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* the top of the source viewport. Uses each link’s `markerViewportHalfOpen1Based`:
|
|
4
|
+
* if the top line falls in `[lo, hiExclusive)`, that block wins; in gaps, the block with the
|
|
5
|
+
* greatest `lo` still at or above the top line; if the viewport is above every `lo`, the first
|
|
6
|
+
* block by `lo`.
|
|
6
7
|
*/
|
|
7
8
|
export function pickCommentrayLineForSourceScroll(blocks, topSourceLine1Based) {
|
|
8
9
|
if (blocks.length === 0)
|
|
9
10
|
return null;
|
|
10
|
-
const
|
|
11
|
+
const sorted = [...blocks].sort((a, b) => a.markerViewportHalfOpen1Based.lo - b.markerViewportHalfOpen1Based.lo);
|
|
12
|
+
const first = sorted[0];
|
|
13
|
+
if (first === undefined)
|
|
14
|
+
return null;
|
|
15
|
+
const firstLo = first.markerViewportHalfOpen1Based.lo;
|
|
16
|
+
const inside = sorted.find((b) => b.markerViewportHalfOpen1Based.lo <= topSourceLine1Based &&
|
|
17
|
+
topSourceLine1Based < b.markerViewportHalfOpen1Based.hiExclusive);
|
|
11
18
|
if (inside)
|
|
12
19
|
return inside.commentrayLine;
|
|
13
|
-
if (topSourceLine1Based <
|
|
14
|
-
return
|
|
15
|
-
let best =
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
if (topSourceLine1Based < firstLo)
|
|
21
|
+
return first.commentrayLine;
|
|
22
|
+
let best = first;
|
|
23
|
+
let bestLo = -Infinity;
|
|
24
|
+
for (const b of sorted) {
|
|
25
|
+
const lo = b.markerViewportHalfOpen1Based.lo;
|
|
26
|
+
if (lo <= topSourceLine1Based && lo > bestLo) {
|
|
18
27
|
best = b;
|
|
19
|
-
|
|
20
|
-
|
|
28
|
+
bestLo = lo;
|
|
29
|
+
}
|
|
21
30
|
}
|
|
22
31
|
return best.commentrayLine;
|
|
23
32
|
}
|
|
24
33
|
/**
|
|
25
34
|
* Choose a 0-based source line to reveal from the top of the commentray
|
|
26
35
|
* viewport: the block whose marker is at or above that line wins; reveal the
|
|
27
|
-
*
|
|
36
|
+
* first line of its viewport span (`lo` − 1).
|
|
28
37
|
*/
|
|
29
38
|
export function pickSourceLine0ForCommentrayScroll(blocks, topCommentrayLine0Based) {
|
|
30
39
|
if (blocks.length === 0)
|
|
31
40
|
return null;
|
|
32
|
-
|
|
33
|
-
|
|
41
|
+
const sorted = [...blocks].sort((a, b) => a.commentrayLine - b.commentrayLine);
|
|
42
|
+
const head = sorted[0];
|
|
43
|
+
if (head === undefined)
|
|
44
|
+
return null;
|
|
45
|
+
let best = head;
|
|
46
|
+
for (const b of sorted) {
|
|
34
47
|
if (b.commentrayLine <= topCommentrayLine0Based)
|
|
35
48
|
best = b;
|
|
36
|
-
else
|
|
37
|
-
break;
|
|
38
49
|
}
|
|
39
|
-
return best.
|
|
50
|
+
return best.markerViewportHalfOpen1Based.lo - 1;
|
|
40
51
|
}
|
|
41
52
|
//# sourceMappingURL=block-scroll-pickers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-scroll-pickers.js","sourceRoot":"","sources":["../src/block-scroll-pickers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"block-scroll-pickers.js","sourceRoot":"","sources":["../src/block-scroll-pickers.ts"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AACH,MAAM,UAAU,iCAAiC,CAC/C,MAAyB,EACzB,mBAA2B;IAE3B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,4BAA4B,CAAC,EAAE,GAAG,CAAC,CAAC,4BAA4B,CAAC,EAAE,CAChF,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,4BAA4B,CAAC,EAAE,IAAI,mBAAmB;QACxD,mBAAmB,GAAG,CAAC,CAAC,4BAA4B,CAAC,WAAW,CACnE,CAAC;IACF,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,cAAc,CAAC;IACzC,IAAI,mBAAmB,GAAG,OAAO;QAAE,OAAO,KAAK,CAAC,cAAc,CAAC;IAC/D,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,MAAM,GAAG,CAAC,QAAQ,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,CAAC,CAAC,4BAA4B,CAAC,EAAE,CAAC;QAC7C,IAAI,EAAE,IAAI,mBAAmB,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;YAC7C,IAAI,GAAG,CAAC,CAAC;YACT,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,cAAc,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kCAAkC,CAChD,MAAyB,EACzB,uBAA+B;IAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,cAAc,IAAI,uBAAuB;YAAE,IAAI,GAAG,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,IAAI,CAAC,4BAA4B,CAAC,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC"}
|
package/dist/blocks.d.ts
CHANGED
|
@@ -39,6 +39,24 @@ export type CreatedBlock = {
|
|
|
39
39
|
* carries it in the commentary file. Pure: no I/O, deterministic when a
|
|
40
40
|
* fixed `rng` and `id` are supplied.
|
|
41
41
|
*/
|
|
42
|
+
export type WrapSourceLineRangeWithCommentrayMarkersInput = {
|
|
43
|
+
sourceText: string;
|
|
44
|
+
range: BlockRange;
|
|
45
|
+
languageId: string;
|
|
46
|
+
/** Must equal the block id used in `marker:<id>` anchors and companion markers. */
|
|
47
|
+
markerId: string;
|
|
48
|
+
};
|
|
49
|
+
export type WrapSourceLineRangeWithCommentrayMarkersResult = {
|
|
50
|
+
sourceText: string;
|
|
51
|
+
/** 1-based inclusive lines inside the delimiter pair (content only, not marker lines). */
|
|
52
|
+
innerRange: BlockRange;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Wraps an inclusive 1-based line range with language-appropriate Commentray
|
|
56
|
+
* start/end delimiters (e.g. `<!-- #region commentray:… -->` in Markdown,
|
|
57
|
+
* `# commentray:start id=…` in TOML/YAML). Does not write files.
|
|
58
|
+
*/
|
|
59
|
+
export declare function wrapSourceLineRangeWithCommentrayMarkers(input: WrapSourceLineRangeWithCommentrayMarkersInput): WrapSourceLineRangeWithCommentrayMarkersResult;
|
|
42
60
|
export declare function createBlockForRange(input: CreateBlockForRangeInput): CreatedBlock;
|
|
43
61
|
/**
|
|
44
62
|
* Append `blockMarkdown` to existing commentary content, guaranteeing a
|
package/dist/blocks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAwB,MAAM,YAAY,CAAC;AAEzF,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,KAAK,EAAE,UAAU,CAAC;IAClB,2DAA2D;IAC3D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAMF;;;;GAIG;AACH,MAAM,MAAM,6CAA6C,GAAG;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,8CAA8C,GAAG;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,6CAA6C,GACnD,8CAA8C,CAmBhD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,YAAY,CASjF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAKvF;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,oBAAoB,GAC1B,eAAe,CAuBjB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,MAAoB,GAAG,MAAM,CAMvE"}
|
package/dist/blocks.js
CHANGED
|
@@ -1,14 +1,35 @@
|
|
|
1
1
|
import { buildCommentraySnippetV1 } from "./block-snippet.js";
|
|
2
2
|
import { formatMarkerAnchor } from "./anchors.js";
|
|
3
3
|
import { assertValidMarkerId } from "./marker-ids.js";
|
|
4
|
+
import { leadingIndentOfLine } from "./region-marker-convert.js";
|
|
5
|
+
import { commentrayRegionInsertions } from "./source-markers.js";
|
|
4
6
|
const BLOCK_MARKER_PREFIX = "<!-- commentray:block id=";
|
|
5
7
|
const BLOCK_MARKER_SUFFIX = " -->";
|
|
6
8
|
const CARET_PLACEHOLDER = "_(write commentary here)_";
|
|
7
9
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
10
|
+
* Wraps an inclusive 1-based line range with language-appropriate Commentray
|
|
11
|
+
* start/end delimiters (e.g. `<!-- #region commentray:… -->` in Markdown,
|
|
12
|
+
* `# commentray:start id=…` in TOML/YAML). Does not write files.
|
|
11
13
|
*/
|
|
14
|
+
export function wrapSourceLineRangeWithCommentrayMarkers(input) {
|
|
15
|
+
const id = assertValidMarkerId(input.markerId);
|
|
16
|
+
const rawLines = input.sourceText.replaceAll("\r\n", "\n").split("\n");
|
|
17
|
+
const r = clampRange(input.range, input.sourceText);
|
|
18
|
+
const start0 = r.startLine - 1;
|
|
19
|
+
const end0 = r.endLine - 1;
|
|
20
|
+
const firstLine = rawLines[start0] ?? "";
|
|
21
|
+
const indent = leadingIndentOfLine(firstLine);
|
|
22
|
+
const { start, end } = commentrayRegionInsertions(input.languageId, id, indent);
|
|
23
|
+
const innerLines = rawLines.slice(start0, end0 + 1);
|
|
24
|
+
const innerPart = innerLines.join("\n");
|
|
25
|
+
const combined = innerLines.length > 0 ? `${start}${innerPart}${end}` : `${start.replace(/\n$/, "")}${end}`;
|
|
26
|
+
const wrappedLines = combined.split("\n");
|
|
27
|
+
const newLines = [...rawLines.slice(0, start0), ...wrappedLines, ...rawLines.slice(end0 + 1)];
|
|
28
|
+
return {
|
|
29
|
+
sourceText: newLines.join("\n"),
|
|
30
|
+
innerRange: { startLine: start0 + 2, endLine: end0 + 2 },
|
|
31
|
+
};
|
|
32
|
+
}
|
|
12
33
|
export function createBlockForRange(input) {
|
|
13
34
|
const range = clampRange(input.range, input.sourceText);
|
|
14
35
|
const id = input.id !== undefined ? assertValidMarkerId(input.id) : generateBlockId(input.rng);
|
package/dist/blocks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../src/blocks.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -40,6 +40,8 @@ export type CommentrayToml = {
|
|
|
40
40
|
/** Markdown shown above the optional commentray file and GitHub link. */
|
|
41
41
|
intro?: string;
|
|
42
42
|
github_url?: string;
|
|
43
|
+
/** Optional prefix used for source links when static hosting does not serve repo files. */
|
|
44
|
+
source_link_prefix?: string;
|
|
43
45
|
/** Repo-relative path to the source file shown in the code pane (default README.md). */
|
|
44
46
|
default_source_file?: string;
|
|
45
47
|
/** Repo-relative path to the source file shown in the code pane (default README.md). */
|
|
@@ -74,6 +76,8 @@ export type ResolvedStaticSite = {
|
|
|
74
76
|
title: string;
|
|
75
77
|
introMarkdown: string;
|
|
76
78
|
githubUrl: string | null;
|
|
79
|
+
/** Optional source link prefix for published pages (e.g. GitHub blob base or `/src`). */
|
|
80
|
+
sourceLinkPrefix: string | null;
|
|
77
81
|
/** Branch used when building `relatedGithubNav` blob URLs. */
|
|
78
82
|
githubBlobBranch: string;
|
|
79
83
|
sourceFile: string;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB;;;;WAIG;QACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;KACtC,CAAC;IACF,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACzC;;;OAGG;IACH,MAAM,CAAC,EAAE;QACP,uIAAuI;QACvI,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,yFAAyF;QACzF,WAAW,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAChD,CAAC;IACF;;;OAGG;IACH,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,yEAAyE;QACzE,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,wFAAwF;QACxF,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,wFAAwF;QACxF,oDAAoD;QACpD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB;;;WAGG;QACH,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,uEAAuE;QACvE,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,oDAAoD;QACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,4FAA4F;QAC5F,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B;;;WAGG;QACH,oBAAoB,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAC3D,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8DAA8D;IAC9D,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,oEAAoE;IACpE,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,cAAc,GAAG;IAC3B,wFAAwF;IACxF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,uBAAuB,EAAE,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC;IACnB,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,uBAAuB,EAAE,OAAO,CAAA;KAAE,CAAC;IACpF,OAAO,EAAE;QAAE,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACvC,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,kBAAkB,CAAC;CAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -8,6 +8,7 @@ const defaultStaticSite = {
|
|
|
8
8
|
title: "Commentray",
|
|
9
9
|
introMarkdown: "",
|
|
10
10
|
githubUrl: null,
|
|
11
|
+
sourceLinkPrefix: null,
|
|
11
12
|
githubBlobBranch: "main",
|
|
12
13
|
sourceFile: "README.md",
|
|
13
14
|
defaultAngleId: null,
|
|
@@ -135,6 +136,7 @@ function resolveStaticSite(parsed, storageDir) {
|
|
|
135
136
|
title: nonEmptyTrimmed(ss?.title) ?? defaultStaticSite.title,
|
|
136
137
|
introMarkdown: ss?.intro ?? defaultStaticSite.introMarkdown,
|
|
137
138
|
githubUrl,
|
|
139
|
+
sourceLinkPrefix: nonEmptyTrimmed(ss?.source_link_prefix),
|
|
138
140
|
githubBlobBranch,
|
|
139
141
|
sourceFile,
|
|
140
142
|
defaultAngleId,
|
|
@@ -142,6 +144,24 @@ function resolveStaticSite(parsed, storageDir) {
|
|
|
142
144
|
relatedGithubNav: mergeRelatedGithubNav(githubUrl, githubBlobBranch, ss?.related_github_files),
|
|
143
145
|
};
|
|
144
146
|
}
|
|
147
|
+
function assertValidSourceLinkPrefix(value) {
|
|
148
|
+
if (!value?.trim())
|
|
149
|
+
return;
|
|
150
|
+
const t = value.trim();
|
|
151
|
+
if (t.startsWith("/"))
|
|
152
|
+
return;
|
|
153
|
+
let u;
|
|
154
|
+
try {
|
|
155
|
+
u = new URL(t);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
throw new Error(`.commentray.toml static_site.source_link_prefix must be an absolute path prefix or http(s) URL (got: ${value})`);
|
|
159
|
+
}
|
|
160
|
+
const proto = u.protocol.toLowerCase();
|
|
161
|
+
if (proto !== "http:" && proto !== "https:") {
|
|
162
|
+
throw new Error(`.commentray.toml static_site.source_link_prefix must be an absolute path prefix or http(s) URL (got: ${value})`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
145
165
|
function assertSafeConfigPaths(parsed) {
|
|
146
166
|
assertSafeRepoRelativePath("storage.dir", parsed.storage?.dir);
|
|
147
167
|
assertStorageDirNotInsideGit(parsed.storage?.dir);
|
|
@@ -150,6 +170,7 @@ function assertSafeConfigPaths(parsed) {
|
|
|
150
170
|
assertSafeRepoRelativePath("static_site.source_file", ss?.source_file);
|
|
151
171
|
assertSafeRepoRelativePath("static_site.commentray_markdown", ss?.commentray_markdown);
|
|
152
172
|
assertSafeRepoRelativePath("static_site.commentary_markdown", ss?.commentary_markdown);
|
|
173
|
+
assertValidSourceLinkPrefix(ss?.source_link_prefix);
|
|
153
174
|
for (let i = 0; i < (ss?.related_github_files?.length ?? 0); i++) {
|
|
154
175
|
assertSafeRepoRelativePath(`static_site.related_github_files[${i}].path`, ss?.related_github_files?.[i]?.path);
|
|
155
176
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type { CommentrayBlock, CommentrayIndex, SourceFileIndexEntry } from "./model.js";
|
|
2
2
|
export { coerceIndexSchemaVersion, CURRENT_SCHEMA_VERSION } from "./model.js";
|
|
3
|
-
export type { AddBlockToIndexInput, BlockRange, CreateBlockForRangeInput, CreatedBlock, } from "./blocks.js";
|
|
4
|
-
export { addBlockToIndex, appendBlockToCommentray, createBlockForRange, generateBlockId, } from "./blocks.js";
|
|
3
|
+
export type { AddBlockToIndexInput, BlockRange, CreateBlockForRangeInput, CreatedBlock, WrapSourceLineRangeWithCommentrayMarkersInput, WrapSourceLineRangeWithCommentrayMarkersResult, } from "./blocks.js";
|
|
4
|
+
export { addBlockToIndex, appendBlockToCommentray, createBlockForRange, generateBlockId, wrapSourceLineRangeWithCommentrayMarkers, } from "./blocks.js";
|
|
5
5
|
export { assertValidAngleId } from "./angles.js";
|
|
6
6
|
export { applyAnglesFlatMigrationToCommentrayToml, ensureAnglesSentinelFile, upsertAngleDefinitionInCommentrayToml, } from "./angles-toml.js";
|
|
7
7
|
export type { ApplyAnglesFlatMigrationTomlInput, UpsertAngleDefinitionInput, } from "./angles-toml.js";
|
|
@@ -36,10 +36,12 @@ export type { RelocationHintsInput } from "./relocation-hints.js";
|
|
|
36
36
|
export { runCommanderMain } from "./cli-bootstrap.js";
|
|
37
37
|
export type { BlockScrollLink } from "./scroll-sync.js";
|
|
38
38
|
export { buildBlockScrollLinks, pickCommentrayLineForSourceScroll, pickSourceLine0ForCommentrayScroll, } from "./scroll-sync.js";
|
|
39
|
-
export { commentrayRegionInsertions, lineCommentLeaderForLanguage, parseCommentrayRegionBoundary, sourceLineRangeForMarkerId, } from "./source-markers.js";
|
|
39
|
+
export { commentrayRegionInsertions, lineCommentLeaderForLanguage, markerViewportHalfOpen1Based, parseCommentrayRegionBoundary, sourceLineRangeForMarkerId, } from "./source-markers.js";
|
|
40
|
+
export type { RegionMarkerNamingHintStrategy, RegionMarkerNamingInput, RegionMarkerNamingRange, RegionMarkerNamingStrategy, } from "./region-marker-naming.js";
|
|
41
|
+
export { CallbackRegionMarkerNamingStrategy, CodeStructureHintStrategy, CompositeRegionMarkerNamingStrategy, defaultRegionMarkerNamingStrategy, EnclosingSymbolHintStrategy, MarkdownHeadingHintStrategy, TomlTableHeaderHintStrategy, tryCodeStructureNameHint, tryMarkdownHeadingTitleAbove, tryNormaliseContextLabelToMarkerId, tryTomlTablePathAboveSelection, } from "./region-marker-naming.js";
|
|
40
42
|
export type { CommentrayMarkerPair } from "./region-marker-convert.js";
|
|
41
43
|
export { convertCommentraySourceMarkersToLanguage, findCommentrayMarkerPairs, leadingIndentOfLine, } from "./region-marker-convert.js";
|
|
42
44
|
export { MARKER_ID_BODY, assertValidMarkerId, normaliseMarkerSlugOrThrow } from "./marker-ids.js";
|
|
43
45
|
export type { MarkerValidationIssue } from "./marker-validation.js";
|
|
44
|
-
export { validateIndexMarkerSemantics, validateMarkerBoundariesInSource, validateMarkerRegionsAgainstIndexedSources, } from "./marker-validation.js";
|
|
46
|
+
export { extractCommentrayBlockIdsFromMarkdown, validateIndexMarkerSemantics, validateMarkerBoundariesInSource, validateMarkerRegionsAgainstIndexedSources, validateOverlappingMarkerInnerRangesInSource, } from "./marker-validation.js";
|
|
45
47
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EACV,oBAAoB,EACpB,UAAU,EACV,wBAAwB,EACxB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EACV,oBAAoB,EACpB,UAAU,EACV,wBAAwB,EACxB,YAAY,EACZ,6CAA6C,EAC7C,8CAA8C,GAC/C,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,wCAAwC,GACzC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,wCAAwC,EACxC,wBAAwB,EACxB,qCAAqC,GACtC,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,iCAAiC,EACjC,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EACtB,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,YAAY,EACV,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,kCAAkC,EAClC,mBAAmB,EACnB,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EACL,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,SAAS,EACT,4BAA4B,EAC5B,eAAe,EACf,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,YAAY,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kCAAkC,EAClC,yBAAyB,EACzB,mCAAmC,EACnC,iCAAiC,EACjC,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,kCAAkC,EAClC,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EACL,wCAAwC,EACxC,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAClG,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACL,qCAAqC,EACrC,4BAA4B,EAC5B,gCAAgC,EAChC,0CAA0C,EAC1C,4CAA4C,GAC7C,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { coerceIndexSchemaVersion, CURRENT_SCHEMA_VERSION } from "./model.js";
|
|
2
|
-
export { addBlockToIndex, appendBlockToCommentray, createBlockForRange, generateBlockId, } from "./blocks.js";
|
|
2
|
+
export { addBlockToIndex, appendBlockToCommentray, createBlockForRange, generateBlockId, wrapSourceLineRangeWithCommentrayMarkers, } from "./blocks.js";
|
|
3
3
|
export { assertValidAngleId } from "./angles.js";
|
|
4
4
|
export { applyAnglesFlatMigrationToCommentrayToml, ensureAnglesSentinelFile, upsertAngleDefinitionInCommentrayToml, } from "./angles-toml.js";
|
|
5
5
|
export { defaultAngleIdForOpen, FALLBACK_DEFAULT_ANGLE_ID, resolveCommentrayMarkdownPath, } from "./commentray-path-resolution.js";
|
|
@@ -21,8 +21,9 @@ export { plannedSymbolResolutionStrategy } from "./language-intelligence.js";
|
|
|
21
21
|
export { relocationHintMessages } from "./relocation-hints.js";
|
|
22
22
|
export { runCommanderMain } from "./cli-bootstrap.js";
|
|
23
23
|
export { buildBlockScrollLinks, pickCommentrayLineForSourceScroll, pickSourceLine0ForCommentrayScroll, } from "./scroll-sync.js";
|
|
24
|
-
export { commentrayRegionInsertions, lineCommentLeaderForLanguage, parseCommentrayRegionBoundary, sourceLineRangeForMarkerId, } from "./source-markers.js";
|
|
24
|
+
export { commentrayRegionInsertions, lineCommentLeaderForLanguage, markerViewportHalfOpen1Based, parseCommentrayRegionBoundary, sourceLineRangeForMarkerId, } from "./source-markers.js";
|
|
25
|
+
export { CallbackRegionMarkerNamingStrategy, CodeStructureHintStrategy, CompositeRegionMarkerNamingStrategy, defaultRegionMarkerNamingStrategy, EnclosingSymbolHintStrategy, MarkdownHeadingHintStrategy, TomlTableHeaderHintStrategy, tryCodeStructureNameHint, tryMarkdownHeadingTitleAbove, tryNormaliseContextLabelToMarkerId, tryTomlTablePathAboveSelection, } from "./region-marker-naming.js";
|
|
25
26
|
export { convertCommentraySourceMarkersToLanguage, findCommentrayMarkerPairs, leadingIndentOfLine, } from "./region-marker-convert.js";
|
|
26
27
|
export { MARKER_ID_BODY, assertValidMarkerId, normaliseMarkerSlugOrThrow } from "./marker-ids.js";
|
|
27
|
-
export { validateIndexMarkerSemantics, validateMarkerBoundariesInSource, validateMarkerRegionsAgainstIndexedSources, } from "./marker-validation.js";
|
|
28
|
+
export { extractCommentrayBlockIdsFromMarkdown, validateIndexMarkerSemantics, validateMarkerBoundariesInSource, validateMarkerRegionsAgainstIndexedSources, validateOverlappingMarkerInnerRangesInSource, } from "./marker-validation.js";
|
|
28
29
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAS9E,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,wCAAwC,GACzC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,wCAAwC,EACxC,wBAAwB,EACxB,qCAAqC,GACtC,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EACtB,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AAUpC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,kCAAkC,EAClC,mBAAmB,EACnB,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,4BAA4B,CAAC;AAOpC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EACL,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAM/C,OAAO,EACL,SAAS,EACT,4BAA4B,EAC5B,eAAe,EACf,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACL,kCAAkC,EAClC,yBAAyB,EACzB,mCAAmC,EACnC,iCAAiC,EACjC,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,kCAAkC,EAClC,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,wCAAwC,EACxC,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAElG,OAAO,EACL,qCAAqC,EACrC,4BAA4B,EAC5B,gCAAgC,EAChC,0CAA0C,EAC1C,4CAA4C,GAC7C,MAAM,wBAAwB,CAAC"}
|
|
@@ -3,6 +3,15 @@ export type MarkerValidationIssue = {
|
|
|
3
3
|
level: "error" | "warn";
|
|
4
4
|
message: string;
|
|
5
5
|
};
|
|
6
|
+
/**
|
|
7
|
+
* Block ids declared in companion markdown via `<!-- commentray:block id=… -->` (valid ids only).
|
|
8
|
+
*/
|
|
9
|
+
export declare function extractCommentrayBlockIdsFromMarkdown(markdown: string): Set<string>;
|
|
10
|
+
/**
|
|
11
|
+
* Detects two or more well-formed marker regions whose **inner** 1-based inclusive line ranges
|
|
12
|
+
* intersect. Adjacent regions (last inner line N, next inner starts N+1) do not overlap.
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateOverlappingMarkerInnerRangesInSource(sourceText: string, sourcePath: string): MarkerValidationIssue[];
|
|
6
15
|
/**
|
|
7
16
|
* Scans a single source file for Commentray region / marker boundaries and reports:
|
|
8
17
|
* - invalid ids (syntax that matched but fails `assertValidMarkerId` — rare),
|
|
@@ -13,10 +22,14 @@ export type MarkerValidationIssue = {
|
|
|
13
22
|
export declare function validateMarkerBoundariesInSource(sourceText: string, sourcePath: string): MarkerValidationIssue[];
|
|
14
23
|
/**
|
|
15
24
|
* For each `marker:` block, ensures the primary file contains a well-formed paired
|
|
16
|
-
* region that resolves to a non-empty span.
|
|
17
|
-
*
|
|
25
|
+
* region that resolves to a non-empty span.
|
|
26
|
+
*
|
|
27
|
+
* When `markdownBlockIdsBySourceNorm` is set (repo validation), warns for **orphan** regions: a
|
|
28
|
+
* paired delimiter id in the primary that has no matching `<!-- commentray:block id=… -->` in any
|
|
29
|
+
* indexed companion markdown for that primary. When it is omitted (tests), the legacy rule
|
|
30
|
+
* applies: warn only when no indexed block claims `marker:<id>`.
|
|
18
31
|
*/
|
|
19
|
-
export declare function validateMarkerRegionsAgainstIndexedSources(index: CommentrayIndex, indexedSourceTexts: Map<string, string
|
|
32
|
+
export declare function validateMarkerRegionsAgainstIndexedSources(index: CommentrayIndex, indexedSourceTexts: Map<string, string>, markdownBlockIdsBySourceNorm?: Map<string, Set<string>>): MarkerValidationIssue[];
|
|
20
33
|
/**
|
|
21
34
|
* Index-level rules for stable cross-references:
|
|
22
35
|
* - **Error** if the same `(sourcePath, marker id)` is claimed by **different** block `id`s
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marker-validation.d.ts","sourceRoot":"","sources":["../src/marker-validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKlD,MAAM,MAAM,qBAAqB,GAAG;IAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"marker-validation.d.ts","sourceRoot":"","sources":["../src/marker-validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKlD,MAAM,MAAM,qBAAqB,GAAG;IAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAanF;AAED;;;GAGG;AACH,wBAAgB,4CAA4C,CAC1D,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,qBAAqB,EAAE,CA4BzB;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,qBAAqB,EAAE,CAmDzB;AAgHD;;;;;;;;GAQG;AACH,wBAAgB,0CAA0C,CACxD,KAAK,EAAE,eAAe,EACtB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,4BAA4B,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GACtD,qBAAqB,EAAE,CAMzB;AAmBD;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,qBAAqB,EAAE,CAuD5F"}
|
|
@@ -1,8 +1,62 @@
|
|
|
1
1
|
import { parseAnchor } from "./anchors.js";
|
|
2
|
-
import { assertValidMarkerId } from "./marker-ids.js";
|
|
2
|
+
import { assertValidMarkerId, MARKER_ID_BODY } from "./marker-ids.js";
|
|
3
3
|
import { normalizeRepoRelativePath } from "./paths.js";
|
|
4
4
|
import { findCommentrayMarkerPairs } from "./region-marker-convert.js";
|
|
5
5
|
import { parseCommentrayRegionBoundary, sourceLineRangeForMarkerId } from "./source-markers.js";
|
|
6
|
+
/**
|
|
7
|
+
* Block ids declared in companion markdown via `<!-- commentray:block id=… -->` (valid ids only).
|
|
8
|
+
*/
|
|
9
|
+
export function extractCommentrayBlockIdsFromMarkdown(markdown) {
|
|
10
|
+
const out = new Set();
|
|
11
|
+
const re = new RegExp(`<!--\\s*commentray:block\\s+id=(${MARKER_ID_BODY})\\s*-->`, "gi");
|
|
12
|
+
for (const m of markdown.matchAll(re)) {
|
|
13
|
+
const raw = m[1];
|
|
14
|
+
if (raw === undefined)
|
|
15
|
+
continue;
|
|
16
|
+
try {
|
|
17
|
+
out.add(assertValidMarkerId(raw));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
/* ignore malformed ids on that line */
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Detects two or more well-formed marker regions whose **inner** 1-based inclusive line ranges
|
|
27
|
+
* intersect. Adjacent regions (last inner line N, next inner starts N+1) do not overlap.
|
|
28
|
+
*/
|
|
29
|
+
export function validateOverlappingMarkerInnerRangesInSource(sourceText, sourcePath) {
|
|
30
|
+
const text = sourceText.replaceAll("\r\n", "\n");
|
|
31
|
+
const pairs = findCommentrayMarkerPairs(text);
|
|
32
|
+
const ranges = [];
|
|
33
|
+
for (const pair of pairs) {
|
|
34
|
+
const r = sourceLineRangeForMarkerId(text, pair.id);
|
|
35
|
+
if (r === null)
|
|
36
|
+
continue;
|
|
37
|
+
ranges.push({ id: pair.id, start: r.start, end: r.end });
|
|
38
|
+
}
|
|
39
|
+
const issues = [];
|
|
40
|
+
for (let i = 0; i < ranges.length; i++) {
|
|
41
|
+
const a = ranges[i];
|
|
42
|
+
if (a === undefined)
|
|
43
|
+
continue;
|
|
44
|
+
for (let j = i + 1; j < ranges.length; j++) {
|
|
45
|
+
const b = ranges[j];
|
|
46
|
+
if (b === undefined)
|
|
47
|
+
continue;
|
|
48
|
+
if (a.end < b.start || b.end < a.start)
|
|
49
|
+
continue;
|
|
50
|
+
issues.push({
|
|
51
|
+
level: "error",
|
|
52
|
+
message: `${sourcePath}: commentray regions "${a.id}" (inner lines ${a.start}–${a.end}) and "${b.id}" ` +
|
|
53
|
+
`(${b.start}–${b.end}) overlap. Regions in the same primary file must not share source lines — ` +
|
|
54
|
+
`close one region before the other begins, or split the file.`,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return issues;
|
|
59
|
+
}
|
|
6
60
|
/**
|
|
7
61
|
* Scans a single source file for Commentray region / marker boundaries and reports:
|
|
8
62
|
* - invalid ids (syntax that matched but fails `assertValidMarkerId` — rare),
|
|
@@ -58,6 +112,7 @@ export function validateMarkerBoundariesInSource(sourceText, sourcePath) {
|
|
|
58
112
|
message: `${sourcePath}:${line0 + 1}: commentray start for id "${id}" has no matching end in this file.`,
|
|
59
113
|
});
|
|
60
114
|
}
|
|
115
|
+
issues.push(...validateOverlappingMarkerInnerRangesInSource(sourceText, sourcePath));
|
|
61
116
|
return issues;
|
|
62
117
|
}
|
|
63
118
|
function tryParseMarkerAnchorId(anchor) {
|
|
@@ -113,19 +168,38 @@ function displaySourcePathForNorm(index, norm) {
|
|
|
113
168
|
const hit = Object.values(index.byCommentrayPath).find((e) => normalizeRepoRelativePath(e.sourcePath) === norm);
|
|
114
169
|
return hit?.sourcePath ?? norm;
|
|
115
170
|
}
|
|
116
|
-
function orphanRegionIssues(index, indexedSourceTexts, claimedBySourceNorm) {
|
|
171
|
+
function orphanRegionIssues(index, indexedSourceTexts, claimedBySourceNorm, markdownBlockIdsBySourceNorm) {
|
|
117
172
|
const issues = [];
|
|
118
173
|
const orphanWarned = new Set();
|
|
119
174
|
for (const [norm, text] of indexedSourceTexts) {
|
|
120
175
|
const pairs = findCommentrayMarkerPairs(text);
|
|
121
176
|
const claimed = claimedBySourceNorm.get(norm) ?? new Set();
|
|
177
|
+
const mdIds = markdownBlockIdsBySourceNorm?.get(norm);
|
|
122
178
|
const displayPath = displaySourcePathForNorm(index, norm);
|
|
123
179
|
for (const pair of pairs) {
|
|
124
|
-
if (claimed.has(pair.id))
|
|
125
|
-
continue;
|
|
126
180
|
const dedupe = `${norm}\0${pair.id}`;
|
|
127
181
|
if (orphanWarned.has(dedupe))
|
|
128
182
|
continue;
|
|
183
|
+
if (markdownBlockIdsBySourceNorm !== undefined) {
|
|
184
|
+
const inMd = mdIds?.has(pair.id) ?? false;
|
|
185
|
+
if (inMd)
|
|
186
|
+
continue;
|
|
187
|
+
orphanWarned.add(dedupe);
|
|
188
|
+
const indexed = claimed.has(pair.id);
|
|
189
|
+
const tail = indexed
|
|
190
|
+
? ` An indexed block uses anchor marker:${pair.id}, but no companion markdown line ` +
|
|
191
|
+
`\`<!-- commentray:block id=${pair.id} -->\` was found for this primary (add the marker or fix the path).`
|
|
192
|
+
: ` No indexed block uses anchor marker:${pair.id}, and no companion markdown references this id.`;
|
|
193
|
+
issues.push({
|
|
194
|
+
level: "warn",
|
|
195
|
+
message: `Primary "${displayPath}" has a commentray region "${pair.id}" (delimiter lines ` +
|
|
196
|
+
`${pair.startLine0 + 1} and ${pair.endLine0 + 1}) that is not referenced by any ` +
|
|
197
|
+
`\`<!-- commentray:block id=${pair.id} -->\` line in companion markdown for this primary.${tail}`,
|
|
198
|
+
});
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (claimed.has(pair.id))
|
|
202
|
+
continue;
|
|
129
203
|
orphanWarned.add(dedupe);
|
|
130
204
|
issues.push({
|
|
131
205
|
level: "warn",
|
|
@@ -140,14 +214,18 @@ function orphanRegionIssues(index, indexedSourceTexts, claimedBySourceNorm) {
|
|
|
140
214
|
}
|
|
141
215
|
/**
|
|
142
216
|
* For each `marker:` block, ensures the primary file contains a well-formed paired
|
|
143
|
-
* region that resolves to a non-empty span.
|
|
144
|
-
*
|
|
217
|
+
* region that resolves to a non-empty span.
|
|
218
|
+
*
|
|
219
|
+
* When `markdownBlockIdsBySourceNorm` is set (repo validation), warns for **orphan** regions: a
|
|
220
|
+
* paired delimiter id in the primary that has no matching `<!-- commentray:block id=… -->` in any
|
|
221
|
+
* indexed companion markdown for that primary. When it is omitted (tests), the legacy rule
|
|
222
|
+
* applies: warn only when no indexed block claims `marker:<id>`.
|
|
145
223
|
*/
|
|
146
|
-
export function validateMarkerRegionsAgainstIndexedSources(index, indexedSourceTexts) {
|
|
224
|
+
export function validateMarkerRegionsAgainstIndexedSources(index, indexedSourceTexts, markdownBlockIdsBySourceNorm) {
|
|
147
225
|
const claimed = claimedMarkerIdsByNormalizedSource(index);
|
|
148
226
|
return [
|
|
149
227
|
...unresolvedMarkerAnchorIssues(index, indexedSourceTexts),
|
|
150
|
-
...orphanRegionIssues(index, indexedSourceTexts, claimed),
|
|
228
|
+
...orphanRegionIssues(index, indexedSourceTexts, claimed, markdownBlockIdsBySourceNorm),
|
|
151
229
|
];
|
|
152
230
|
}
|
|
153
231
|
function markerIdFromBlock(block) {
|