@commentray/core 0.0.2 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/anchors.d.ts +6 -0
  2. package/dist/anchors.d.ts.map +1 -1
  3. package/dist/anchors.js +11 -0
  4. package/dist/anchors.js.map +1 -1
  5. package/dist/angles-toml.d.ts +14 -0
  6. package/dist/angles-toml.d.ts.map +1 -1
  7. package/dist/angles-toml.js +51 -0
  8. package/dist/angles-toml.js.map +1 -1
  9. package/dist/block-scroll-pickers.d.ts +22 -0
  10. package/dist/block-scroll-pickers.d.ts.map +1 -0
  11. package/dist/block-scroll-pickers.js +41 -0
  12. package/dist/block-scroll-pickers.js.map +1 -0
  13. package/dist/block-snippet.d.ts +13 -0
  14. package/dist/block-snippet.d.ts.map +1 -0
  15. package/dist/block-snippet.js +30 -0
  16. package/dist/block-snippet.js.map +1 -0
  17. package/dist/blocks.d.ts.map +1 -1
  18. package/dist/blocks.js +13 -13
  19. package/dist/blocks.js.map +1 -1
  20. package/dist/commentray-disk-pairs.d.ts +14 -0
  21. package/dist/commentray-disk-pairs.d.ts.map +1 -0
  22. package/dist/commentray-disk-pairs.js +51 -0
  23. package/dist/commentray-disk-pairs.js.map +1 -0
  24. package/dist/commentray-index-renames.d.ts +21 -0
  25. package/dist/commentray-index-renames.d.ts.map +1 -0
  26. package/dist/commentray-index-renames.js +85 -0
  27. package/dist/commentray-index-renames.js.map +1 -0
  28. package/dist/commentray-path-resolution.js +1 -1
  29. package/dist/commentray-path-resolution.js.map +1 -1
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +6 -4
  32. package/dist/config.js.map +1 -1
  33. package/dist/git-relocation-scan.d.ts +9 -0
  34. package/dist/git-relocation-scan.d.ts.map +1 -0
  35. package/dist/git-relocation-scan.js +96 -0
  36. package/dist/git-relocation-scan.js.map +1 -0
  37. package/dist/index-normalize.d.ts +10 -0
  38. package/dist/index-normalize.d.ts.map +1 -0
  39. package/dist/index-normalize.js +60 -0
  40. package/dist/index-normalize.js.map +1 -0
  41. package/dist/index-schema-messages.d.ts +6 -0
  42. package/dist/index-schema-messages.d.ts.map +1 -0
  43. package/dist/index-schema-messages.js +26 -0
  44. package/dist/index-schema-messages.js.map +1 -0
  45. package/dist/index.d.ts +23 -8
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +14 -5
  48. package/dist/index.js.map +1 -1
  49. package/dist/marker-ids.d.ts +19 -0
  50. package/dist/marker-ids.d.ts.map +1 -0
  51. package/dist/marker-ids.js +38 -0
  52. package/dist/marker-ids.js.map +1 -0
  53. package/dist/marker-validation.d.ts +22 -0
  54. package/dist/marker-validation.d.ts.map +1 -0
  55. package/dist/marker-validation.js +138 -0
  56. package/dist/marker-validation.js.map +1 -0
  57. package/dist/metadata.d.ts.map +1 -1
  58. package/dist/metadata.js +54 -25
  59. package/dist/metadata.js.map +1 -1
  60. package/dist/migrate-angles-layout.d.ts +27 -0
  61. package/dist/migrate-angles-layout.d.ts.map +1 -0
  62. package/dist/migrate-angles-layout.js +72 -0
  63. package/dist/migrate-angles-layout.js.map +1 -0
  64. package/dist/migrate.d.ts.map +1 -1
  65. package/dist/migrate.js +20 -4
  66. package/dist/migrate.js.map +1 -1
  67. package/dist/model.d.ts +13 -26
  68. package/dist/model.d.ts.map +1 -1
  69. package/dist/model.js +16 -0
  70. package/dist/model.js.map +1 -1
  71. package/dist/paths.d.ts +7 -1
  72. package/dist/paths.d.ts.map +1 -1
  73. package/dist/paths.js +18 -2
  74. package/dist/paths.js.map +1 -1
  75. package/dist/region-marker-convert.d.ts +27 -0
  76. package/dist/region-marker-convert.d.ts.map +1 -0
  77. package/dist/region-marker-convert.js +78 -0
  78. package/dist/region-marker-convert.js.map +1 -0
  79. package/dist/relocation-hints.d.ts +18 -0
  80. package/dist/relocation-hints.d.ts.map +1 -0
  81. package/dist/relocation-hints.js +170 -0
  82. package/dist/relocation-hints.js.map +1 -0
  83. package/dist/scm/git-scm-provider.d.ts +7 -1
  84. package/dist/scm/git-scm-provider.d.ts.map +1 -1
  85. package/dist/scm/git-scm-provider.js +42 -20
  86. package/dist/scm/git-scm-provider.js.map +1 -1
  87. package/dist/scm/git-spawn.d.ts +10 -0
  88. package/dist/scm/git-spawn.d.ts.map +1 -0
  89. package/dist/scm/git-spawn.js +26 -0
  90. package/dist/scm/git-spawn.js.map +1 -0
  91. package/dist/scm/scm-provider.d.ts +10 -0
  92. package/dist/scm/scm-provider.d.ts.map +1 -1
  93. package/dist/scroll-sync.d.ts +8 -23
  94. package/dist/scroll-sync.d.ts.map +1 -1
  95. package/dist/scroll-sync.js +31 -52
  96. package/dist/scroll-sync.js.map +1 -1
  97. package/dist/source-markers.d.ts +28 -0
  98. package/dist/source-markers.d.ts.map +1 -0
  99. package/dist/source-markers.js +241 -0
  100. package/dist/source-markers.js.map +1 -0
  101. package/dist/validate-project.d.ts +9 -1
  102. package/dist/validate-project.d.ts.map +1 -1
  103. package/dist/validate-project.js +107 -16
  104. package/dist/validate-project.js.map +1 -1
  105. package/dist/walk-commentray-source-md.d.ts +5 -0
  106. package/dist/walk-commentray-source-md.d.ts.map +1 -0
  107. package/dist/walk-commentray-source-md.js +33 -0
  108. package/dist/walk-commentray-source-md.js.map +1 -0
  109. package/package.json +6 -2
@@ -1,5 +1,8 @@
1
1
  import { parseAnchor } from "./anchors.js";
2
- const BLOCK_MARKER_RE = /<!-- commentray:block id=([a-z0-9]+) -->/;
2
+ import { MARKER_ID_BODY } from "./marker-ids.js";
3
+ import { sourceLineRangeForMarkerId } from "./source-markers.js";
4
+ export { pickCommentrayLineForSourceScroll, pickSourceLine0ForCommentrayScroll, } from "./block-scroll-pickers.js";
5
+ const BLOCK_MARKER_RE = new RegExp(`<!-- commentray:block id=(${MARKER_ID_BODY}) -->`);
3
6
  function markerLineByIdFromMarkdown(markdown) {
4
7
  const map = new Map();
5
8
  const lines = markdown.split("\n");
@@ -11,11 +14,12 @@ function markerLineByIdFromMarkdown(markdown) {
11
14
  return map;
12
15
  }
13
16
  /**
14
- * Correlate index blocks (line anchors + ids) with `<!-- commentray:block id=… -->`
15
- * markers in commentray. Only `lines:` anchors with a visible
16
- * marker participate. Sorted by `sourceStart`.
17
+ * Correlate index blocks with `<!-- commentray:block id=… -->` markers in
18
+ * commentray. Supports legacy `lines:` anchors and `marker:` anchors (the
19
+ * latter needs `sourceText` to resolve marker comments in the primary file).
20
+ * Sorted by `sourceStart`.
17
21
  */
18
- export function buildBlockScrollLinks(index, sourceRelative, commentrayPath, commentrayMarkdown) {
22
+ export function buildBlockScrollLinks(index, sourceRelative, commentrayPath, commentrayMarkdown, sourceText) {
19
23
  const entry = index?.byCommentrayPath[commentrayPath];
20
24
  if (!entry || entry.sourcePath !== sourceRelative || entry.blocks.length === 0)
21
25
  return [];
@@ -23,58 +27,33 @@ export function buildBlockScrollLinks(index, sourceRelative, commentrayPath, com
23
27
  const links = [];
24
28
  for (const block of entry.blocks) {
25
29
  const anchor = parseAnchor(block.anchor);
26
- if (anchor.kind !== "lines")
27
- continue;
28
30
  const commentrayLine = markerLineById.get(block.id);
29
31
  if (commentrayLine === undefined)
30
32
  continue;
31
- links.push({
32
- commentrayLine,
33
- sourceStart: anchor.range.start,
34
- sourceEnd: anchor.range.end,
35
- });
33
+ if (anchor.kind === "lines") {
34
+ links.push({
35
+ id: block.id,
36
+ commentrayLine,
37
+ sourceStart: anchor.range.start,
38
+ sourceEnd: anchor.range.end,
39
+ });
40
+ continue;
41
+ }
42
+ if (anchor.kind === "marker") {
43
+ if (sourceText === undefined)
44
+ continue;
45
+ const range = sourceLineRangeForMarkerId(sourceText, anchor.id);
46
+ if (range === null)
47
+ continue;
48
+ links.push({
49
+ id: block.id,
50
+ commentrayLine,
51
+ sourceStart: range.start,
52
+ sourceEnd: range.end,
53
+ });
54
+ }
36
55
  }
37
56
  links.sort((a, b) => a.sourceStart - b.sourceStart);
38
57
  return links;
39
58
  }
40
- /**
41
- * Choose which commentray line (0-based) to reveal so the commentary matches
42
- * the top of the source viewport. Prefers the block whose source range
43
- * **contains** the top line; otherwise the nearest preceding block; if above
44
- * all blocks, the first block.
45
- */
46
- export function pickCommentrayLineForSourceScroll(blocks, topSourceLine1Based) {
47
- if (blocks.length === 0)
48
- return null;
49
- const inside = blocks.find((b) => b.sourceStart <= topSourceLine1Based && topSourceLine1Based <= b.sourceEnd);
50
- if (inside)
51
- return inside.commentrayLine;
52
- if (topSourceLine1Based < blocks[0].sourceStart)
53
- return blocks[0].commentrayLine;
54
- let best = blocks[0];
55
- for (const b of blocks) {
56
- if (b.sourceStart <= topSourceLine1Based)
57
- best = b;
58
- else
59
- break;
60
- }
61
- return best.commentrayLine;
62
- }
63
- /**
64
- * Choose a 0-based source line to reveal from the top of the commentray
65
- * viewport: the block whose marker is at or above that line wins; reveal the
66
- * start of its source range.
67
- */
68
- export function pickSourceLine0ForCommentrayScroll(blocks, topCommentrayLine0Based) {
69
- if (blocks.length === 0)
70
- return null;
71
- let best = blocks[0];
72
- for (const b of blocks) {
73
- if (b.commentrayLine <= topCommentrayLine0Based)
74
- best = b;
75
- else
76
- break;
77
- }
78
- return best.sourceStart - 1;
79
- }
80
59
  //# sourceMappingURL=scroll-sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-sync.js","sourceRoot":"","sources":["../src/scroll-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scroll-sync.js","sourceRoot":"","sources":["../src/scroll-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EACL,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,6BAA6B,cAAc,OAAO,CAAC,CAAC;AAEvF,SAAS,0BAA0B,CAAC,QAAgB;IAClD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,KAAK;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAyC,EACzC,cAAsB,EACtB,cAAsB,EACtB,kBAA0B,EAC1B,UAAmB;IAEnB,MAAM,KAAK,GAAG,KAAK,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,cAAc,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1F,MAAM,cAAc,GAAG,0BAA0B,CAAC,kBAAkB,CAAC,CAAC;IACtE,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,cAAc,KAAK,SAAS;YAAE,SAAS;QAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,cAAc;gBACd,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK;gBAC/B,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;aAC5B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,UAAU,KAAK,SAAS;gBAAE,SAAS;YACvC,MAAM,KAAK,GAAG,0BAA0B,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAChE,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YAC7B,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,cAAc;gBACd,WAAW,EAAE,KAAK,CAAC,KAAK;gBACxB,SAAS,EAAE,KAAK,CAAC,GAAG;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Line comment leader for **generic** `commentray:start` / `end` markers
3
+ * (`// …`, `# …`, etc.). Not used for `#region` family languages.
4
+ */
5
+ export declare function lineCommentLeaderForLanguage(languageId: string): string;
6
+ /**
7
+ * Insertion fragments for wrapping the selection (apply **end** first, then
8
+ * **start**, so stable offsets). Pass the same indentation string Region Marker
9
+ * uses (leading whitespace of the first selected line).
10
+ */
11
+ export declare function commentrayRegionInsertions(languageId: string, markerId: string, indent?: string): {
12
+ start: string;
13
+ end: string;
14
+ };
15
+ export type RegionBoundaryKind = "start" | "end";
16
+ /** Detect a Commentray region, generic marker, or legacy marker line; id is lower-case. */
17
+ export declare function parseCommentrayRegionBoundary(line: string): {
18
+ kind: RegionBoundaryKind;
19
+ id: string;
20
+ } | null;
21
+ /**
22
+ * 1-based inclusive source lines **between** paired region / generic / legacy marker lines.
23
+ */
24
+ export declare function sourceLineRangeForMarkerId(sourceText: string, markerId: string): {
25
+ start: number;
26
+ end: number;
27
+ } | null;
28
+ //# sourceMappingURL=source-markers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-markers.d.ts","sourceRoot":"","sources":["../src/source-markers.ts"],"names":[],"mappings":"AAyGA;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAMvE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,SAAK,GACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAuDhC;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,KAAK,CAAC;AAEjD,2FAA2F;AAC3F,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA8CjD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf;IACD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,IAAI,CAgBP"}
@@ -0,0 +1,241 @@
1
+ import { assertValidMarkerId, MARKER_ID_BODY } from "./marker-ids.js";
2
+ /**
3
+ * Source delimiters for block anchors:
4
+ *
5
+ * 1. **Region convention** — where editors commonly fold `//#region` /
6
+ * `//#endregion`, `#region` / `#endregion`, `#pragma region`, etc. (aligned
7
+ * with [Region Marker](https://marketplace.visualstudio.com/items?itemName=txava.region-marker)),
8
+ * Commentray uses the region **name** `commentray:<id>`.
9
+ *
10
+ * 2. **Generic comments** — for languages without a shared region idiom, we
11
+ * use ordinary line or block comments and our own `commentray:start id=<id>` /
12
+ * `commentray:end id=<id>` tokens (still parsed by {@link parseCommentrayRegionBoundary}).
13
+ *
14
+ * Legacy pairs that only use (2) remain valid everywhere.
15
+ */
16
+ const COMMENTRAY_TAG = (id) => `commentray:${id.trim().toLowerCase()}`;
17
+ /** `//#region commentray:<id>` — JS/TS ecosystem & CSS preprocessors that use `//`. */
18
+ const SLASH_REGION_LANGUAGES = new Set([
19
+ "javascript",
20
+ "javascriptreact",
21
+ "typescript",
22
+ "typescriptreact",
23
+ "js",
24
+ "jsx",
25
+ "tsx",
26
+ "mjs",
27
+ "cjs",
28
+ "vue",
29
+ "svelte",
30
+ "astro",
31
+ "scss",
32
+ "less",
33
+ "stylus",
34
+ ]);
35
+ /** `#region commentray:<id>` — same shape as Region Marker for these ids. */
36
+ const HASH_REGION_LANGUAGES = new Set([
37
+ "ruby",
38
+ "csharp",
39
+ "coffeescript",
40
+ "powershell",
41
+ "perl",
42
+ "raku",
43
+ "crystal",
44
+ ]);
45
+ const PRAGMA_REGION = new Set(["c", "cpp", "cuda-cpp", "objective-c", "objective-cpp"]);
46
+ const VB_REGION = new Set(["vb"]);
47
+ const LUA_REGION = new Set(["lua"]);
48
+ const HTML_FAMILY = new Set(["html", "xml", "handlebars", "vue-html"]);
49
+ const PYTHONIC = new Set(["python", "jupyter"]);
50
+ /** `# …` line comments for generic markers (no `#region` folding convention). */
51
+ const GENERIC_HASH_LANGUAGES = new Set([
52
+ "dockerfile",
53
+ "makefile",
54
+ "cmake",
55
+ "yaml",
56
+ "yml",
57
+ "toml",
58
+ "ini",
59
+ "properties",
60
+ "git-commit",
61
+ "sql",
62
+ "r",
63
+ "shellscript",
64
+ "bash",
65
+ "sh",
66
+ "zsh",
67
+ "fish",
68
+ ]);
69
+ function regionConvention(languageId) {
70
+ const id = languageId.toLowerCase();
71
+ if (id === "css")
72
+ return "generic-block-css";
73
+ if (PYTHONIC.has(id))
74
+ return "python";
75
+ if (PRAGMA_REGION.has(id))
76
+ return "pragma";
77
+ if (VB_REGION.has(id))
78
+ return "vb";
79
+ if (HTML_FAMILY.has(id))
80
+ return "html";
81
+ if (LUA_REGION.has(id))
82
+ return "lua";
83
+ if (HASH_REGION_LANGUAGES.has(id))
84
+ return "hash-region";
85
+ if (SLASH_REGION_LANGUAGES.has(id))
86
+ return "slash-region";
87
+ if (GENERIC_HASH_LANGUAGES.has(id))
88
+ return "generic-hash";
89
+ return "generic-line";
90
+ }
91
+ /**
92
+ * Line comment leader for **generic** `commentray:start` / `end` markers
93
+ * (`// …`, `# …`, etc.). Not used for `#region` family languages.
94
+ */
95
+ export function lineCommentLeaderForLanguage(languageId) {
96
+ const id = languageId.toLowerCase();
97
+ if (GENERIC_HASH_LANGUAGES.has(id))
98
+ return "# ";
99
+ if (id === "lua")
100
+ return "-- ";
101
+ if (id === "vb")
102
+ return "' ";
103
+ return "// ";
104
+ }
105
+ /**
106
+ * Insertion fragments for wrapping the selection (apply **end** first, then
107
+ * **start**, so stable offsets). Pass the same indentation string Region Marker
108
+ * uses (leading whitespace of the first selected line).
109
+ */
110
+ export function commentrayRegionInsertions(languageId, markerId, indent = "") {
111
+ const id = assertValidMarkerId(markerId);
112
+ const tag = COMMENTRAY_TAG(id);
113
+ const ind = indent;
114
+ const conv = regionConvention(languageId);
115
+ switch (conv) {
116
+ case "slash-region":
117
+ return {
118
+ start: `${ind}//#region ${tag}\n`,
119
+ end: `\n${ind}//#endregion ${tag}`,
120
+ };
121
+ case "hash-region":
122
+ return {
123
+ start: `${ind}#region ${tag}\n`,
124
+ end: `\n${ind}#endregion ${tag}`,
125
+ };
126
+ case "pragma":
127
+ return {
128
+ start: `${ind}#pragma region ${tag}\n`,
129
+ end: `\n${ind}#pragma endregion ${tag}`,
130
+ };
131
+ case "vb":
132
+ return {
133
+ start: `${ind}#Region ${tag}\n`,
134
+ end: `\n${ind}#End Region ${tag}`,
135
+ };
136
+ case "html":
137
+ return {
138
+ start: `${ind}<!-- #region ${tag} -->\n`,
139
+ end: `\n${ind}<!-- #endregion ${tag} -->`,
140
+ };
141
+ case "python":
142
+ return {
143
+ start: `${ind}# region ${tag}\n`,
144
+ end: `\n${ind}# endregion ${tag}`,
145
+ };
146
+ case "lua":
147
+ return {
148
+ start: `${ind}--#region ${tag}\n`,
149
+ end: `\n${ind}--#endregion ${tag}`,
150
+ };
151
+ case "generic-block-css":
152
+ return {
153
+ start: `${ind}/* commentray:start id=${id} */\n`,
154
+ end: `\n${ind}/* commentray:end id=${id} */`,
155
+ };
156
+ case "generic-hash":
157
+ case "generic-line": {
158
+ const leader = lineCommentLeaderForLanguage(languageId);
159
+ return {
160
+ start: `${ind}${leader}commentray:start id=${id}\n`,
161
+ end: `\n${ind}${leader}commentray:end id=${id}`,
162
+ };
163
+ }
164
+ }
165
+ }
166
+ /** Detect a Commentray region, generic marker, or legacy marker line; id is lower-case. */
167
+ export function parseCommentrayRegionBoundary(line) {
168
+ const probe = line.trim();
169
+ const mid = MARKER_ID_BODY;
170
+ const startPatterns = [
171
+ new RegExp(`^//#region\\s+commentray:(${mid})\\s*$`, "i"),
172
+ new RegExp(`^#region\\s+commentray:(${mid})\\s*$`, "i"),
173
+ new RegExp(`^#pragma\\s+region\\s+commentray:(${mid})\\s*$`, "i"),
174
+ new RegExp(`^#Region\\s+commentray:(${mid})\\s*$`, "i"),
175
+ new RegExp(`^#\\s*region\\s+commentray:(${mid})\\s*$`, "i"),
176
+ new RegExp(`^<!--\\s*#region\\s+commentray:(${mid})\\s*-->\\s*$`, "i"),
177
+ new RegExp(`^--#region\\s+commentray:(${mid})\\s*$`, "i"),
178
+ new RegExp(`^/\\*\\s*commentray:start\\s+id=(${mid})\\s*\\*/\\s*$`, "i"),
179
+ new RegExp(`commentray:start\\s+id=(${mid})\\b`, "i"),
180
+ ];
181
+ const endPatterns = [
182
+ new RegExp(`^//#endregion\\s+commentray:(${mid})\\s*$`, "i"),
183
+ new RegExp(`^#endregion\\s+commentray:(${mid})\\s*$`, "i"),
184
+ new RegExp(`^#pragma\\s+endregion\\s+commentray:(${mid})\\s*$`, "i"),
185
+ new RegExp(`^#End\\s+Region\\s+commentray:(${mid})\\s*$`, "i"),
186
+ new RegExp(`^#\\s*endregion\\s+commentray:(${mid})\\s*$`, "i"),
187
+ new RegExp(`^<!--\\s*#endregion\\s+commentray:(${mid})\\s*-->\\s*$`, "i"),
188
+ new RegExp(`^--#endregion\\s+commentray:(${mid})\\s*$`, "i"),
189
+ new RegExp(`^/\\*\\s*commentray:end\\s+id=(${mid})\\s*\\*/\\s*$`, "i"),
190
+ new RegExp(`commentray:end\\s+id=(${mid})\\b`, "i"),
191
+ ];
192
+ for (const re of startPatterns) {
193
+ const m = re.exec(probe);
194
+ if (m) {
195
+ try {
196
+ return { kind: "start", id: assertValidMarkerId(m[1]) };
197
+ }
198
+ catch {
199
+ continue;
200
+ }
201
+ }
202
+ }
203
+ for (const re of endPatterns) {
204
+ const m = re.exec(probe);
205
+ if (m) {
206
+ try {
207
+ return { kind: "end", id: assertValidMarkerId(m[1]) };
208
+ }
209
+ catch {
210
+ continue;
211
+ }
212
+ }
213
+ }
214
+ return null;
215
+ }
216
+ /**
217
+ * 1-based inclusive source lines **between** paired region / generic / legacy marker lines.
218
+ */
219
+ export function sourceLineRangeForMarkerId(sourceText, markerId) {
220
+ const id = assertValidMarkerId(markerId);
221
+ const lines = sourceText.split("\n");
222
+ let startIdx = -1;
223
+ let endIdx = -1;
224
+ for (let i = 0; i < lines.length; i++) {
225
+ const hit = parseCommentrayRegionBoundary(lines[i]);
226
+ if (hit?.id !== id)
227
+ continue;
228
+ if (hit.kind === "start" && startIdx < 0)
229
+ startIdx = i;
230
+ else if (hit.kind === "end" && startIdx >= 0 && endIdx < 0)
231
+ endIdx = i;
232
+ }
233
+ if (startIdx < 0 || endIdx < 0 || endIdx < startIdx + 2)
234
+ return null;
235
+ const start = startIdx + 2;
236
+ const end = endIdx;
237
+ if (end < start)
238
+ return null;
239
+ return { start, end };
240
+ }
241
+ //# sourceMappingURL=source-markers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-markers.js","sourceRoot":"","sources":["../src/source-markers.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { CommentrayIndex } from "./model.js";
1
+ import { type CommentrayIndex } from "./model.js";
2
2
  export type ValidationIssue = {
3
3
  level: "error" | "warn";
4
4
  message: string;
@@ -7,6 +7,14 @@ export type ValidationResult = {
7
7
  issues: ValidationIssue[];
8
8
  };
9
9
  export declare function validateProject(repoRoot: string): Promise<ValidationResult>;
10
+ /**
11
+ * Reads `index.json`, applies schema migration and snippet/fingerprint normalization,
12
+ * and persists when anything changed. Throws if the file is missing or not valid JSON.
13
+ */
14
+ export declare function refreshIndexMigrationsOnDisk(repoRoot: string): Promise<{
15
+ index: CommentrayIndex;
16
+ changed: boolean;
17
+ }>;
10
18
  export declare function readIndex(repoRoot: string): Promise<CommentrayIndex | null>;
11
19
  /**
12
20
  * Write the metadata index to the default location under `repoRoot`, creating
@@ -1 +1 @@
1
- {"version":3,"file":"validate-project.d.ts","sourceRoot":"","sources":["../src/validate-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AAEF,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyCjF;AAiBD,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmBjF;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxF"}
1
+ {"version":3,"file":"validate-project.d.ts","sourceRoot":"","sources":["../src/validate-project.ts"],"names":[],"mappings":"AAOA,OAAO,EAAoD,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAUpG,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B,CAAC;AA+EF,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8CjF;AAiBD;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAqBvD;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CASjF;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxF"}
@@ -2,9 +2,82 @@ import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { loadCommentrayConfig } from "./config.js";
4
4
  import { parseGithubRepoWebUrl } from "./github-url.js";
5
+ import { normalizeCommentrayIndex } from "./index-normalize.js";
5
6
  import { assertValidIndex } from "./metadata.js";
6
7
  import { migrateIndex } from "./migrate.js";
7
- import { defaultMetadataIndexPath } from "./paths.js";
8
+ import { coerceIndexSchemaVersion, CURRENT_SCHEMA_VERSION } from "./model.js";
9
+ import { defaultMetadataIndexPath, normalizeRepoRelativePath } from "./paths.js";
10
+ import { validateIndexMarkerSemantics, validateMarkerBoundariesInSource, } from "./marker-validation.js";
11
+ import { loadGitTrackedSourceTextsOutsideIndex } from "./git-relocation-scan.js";
12
+ import { relocationHintMessages } from "./relocation-hints.js";
13
+ import { GitScmProvider } from "./scm/git-scm-provider.js";
14
+ async function collectIssuesForLoadedIndex(repoRoot, index) {
15
+ const issues = [];
16
+ for (const issue of validateIndexMarkerSemantics(index)) {
17
+ issues.push({ level: issue.level, message: issue.message });
18
+ }
19
+ const uniqueSourcesNorm = [
20
+ ...new Set(Object.values(index.byCommentrayPath).map((e) => normalizeRepoRelativePath(e.sourcePath))),
21
+ ];
22
+ const indexedSourceTexts = new Map();
23
+ const missingSourcesNorm = new Set();
24
+ for (const norm of uniqueSourcesNorm) {
25
+ const abs = path.join(repoRoot, ...norm.split("/"));
26
+ try {
27
+ const text = await fs.readFile(abs, "utf8");
28
+ indexedSourceTexts.set(norm, text);
29
+ }
30
+ catch {
31
+ missingSourcesNorm.add(norm);
32
+ const affected = Object.values(index.byCommentrayPath)
33
+ .filter((e) => normalizeRepoRelativePath(e.sourcePath) === norm)
34
+ .map((e) => e.commentrayPath);
35
+ const uniqAffected = [...new Set(affected)].sort((a, b) => a.localeCompare(b));
36
+ issues.push({
37
+ level: "warn",
38
+ message: `Primary source "${norm}" is not readable (deleted, moved, or not checked out). ` +
39
+ `Commentray: ${uniqAffected.join(", ")}. ` +
40
+ `If Git renamed it, try: commentray sync-moved-paths --from HEAD~1 --to HEAD`,
41
+ });
42
+ }
43
+ }
44
+ for (const [norm, text] of indexedSourceTexts) {
45
+ for (const issue of validateMarkerBoundariesInSource(text, norm)) {
46
+ issues.push({ level: issue.level, message: issue.message });
47
+ }
48
+ }
49
+ if (missingSourcesNorm.size === 0)
50
+ return issues;
51
+ let gitRenames;
52
+ try {
53
+ const scm = new GitScmProvider();
54
+ if (scm.listPathRenamesBetweenTreeishes) {
55
+ gitRenames = await scm.listPathRenamesBetweenTreeishes(repoRoot, "HEAD~1", "HEAD");
56
+ }
57
+ }
58
+ catch {
59
+ /* no Git or shallow history — hints still run without renames */
60
+ }
61
+ let textsForRelocationHints = indexedSourceTexts;
62
+ try {
63
+ const extra = await loadGitTrackedSourceTextsOutsideIndex(repoRoot, new Set(indexedSourceTexts.keys()));
64
+ if (extra.size > 0) {
65
+ textsForRelocationHints = new Map([...extra, ...indexedSourceTexts]);
66
+ }
67
+ }
68
+ catch {
69
+ /* not a git checkout or ls-files failed — use indexed primaries only */
70
+ }
71
+ for (const hint of relocationHintMessages({
72
+ index,
73
+ missingSourcePathsNorm: missingSourcesNorm,
74
+ gitRenames,
75
+ indexedSourceTextsByPath: textsForRelocationHints,
76
+ })) {
77
+ issues.push({ level: "warn", message: hint });
78
+ }
79
+ return issues;
80
+ }
8
81
  export async function validateProject(repoRoot) {
9
82
  const issues = [];
10
83
  let config;
@@ -31,9 +104,10 @@ export async function validateProject(repoRoot) {
31
104
  });
32
105
  }
33
106
  }
107
+ let index = null;
34
108
  try {
35
- const idx = await readIndex(repoRoot);
36
- if (idx === null) {
109
+ index = await readIndex(repoRoot);
110
+ if (index === null) {
37
111
  issues.push({ level: "warn", message: `No metadata index at ${defaultMetadataIndexPath()}` });
38
112
  }
39
113
  }
@@ -43,6 +117,9 @@ export async function validateProject(repoRoot) {
43
117
  message: `Invalid metadata index: ${err instanceof Error ? err.message : String(err)}`,
44
118
  });
45
119
  }
120
+ if (index) {
121
+ issues.push(...(await collectIssuesForLoadedIndex(repoRoot, index)));
122
+ }
46
123
  pushRelativeGithubLinkConfigWarnings(config, issues);
47
124
  return { issues };
48
125
  }
@@ -58,21 +135,35 @@ function pushRelativeGithubLinkConfigWarnings(config, issues) {
58
135
  "not a repository home URL (expected https://github.com/owner/repo). Link rewriting is skipped at build time.",
59
136
  });
60
137
  }
61
- export async function readIndex(repoRoot) {
138
+ /**
139
+ * Reads `index.json`, applies schema migration and snippet/fingerprint normalization,
140
+ * and persists when anything changed. Throws if the file is missing or not valid JSON.
141
+ */
142
+ export async function refreshIndexMigrationsOnDisk(repoRoot) {
62
143
  const indexPath = path.join(repoRoot, defaultMetadataIndexPath());
144
+ const raw = await fs.readFile(indexPath, "utf8");
145
+ const parsed = JSON.parse(raw);
146
+ const priorSchema = typeof parsed === "object" && parsed !== null
147
+ ? coerceIndexSchemaVersion(parsed.schemaVersion)
148
+ : null;
149
+ if (typeof priorSchema === "number" && priorSchema > CURRENT_SCHEMA_VERSION) {
150
+ const metaDir = path.dirname(indexPath);
151
+ const backupName = `index.schema-${String(priorSchema)}-backup-${String(Date.now())}.json`;
152
+ await fs.writeFile(path.join(metaDir, backupName), raw, "utf8");
153
+ }
154
+ const { index: migrated, changed: schemaChanged } = migrateIndex(parsed);
155
+ const { index: normalized, changed: snippetChanged } = normalizeCommentrayIndex(migrated);
156
+ const index = assertValidIndex(normalized);
157
+ const changed = schemaChanged || snippetChanged;
158
+ if (changed) {
159
+ await writeIndex(repoRoot, index);
160
+ }
161
+ return { index, changed };
162
+ }
163
+ export async function readIndex(repoRoot) {
63
164
  try {
64
- const raw = await fs.readFile(indexPath, "utf8");
65
- const parsed = JSON.parse(raw);
66
- try {
67
- return assertValidIndex(parsed);
68
- }
69
- catch {
70
- const { index, changed } = migrateIndex(parsed);
71
- if (changed) {
72
- await writeIndex(repoRoot, index);
73
- }
74
- return assertValidIndex(index);
75
- }
165
+ const { index } = await refreshIndexMigrationsOnDisk(repoRoot);
166
+ return index;
76
167
  }
77
168
  catch (err) {
78
169
  const code = err.code;
@@ -1 +1 @@
1
- {"version":3,"file":"validate-project.js","sourceRoot":"","sources":["../src/validate-project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-project.js","sourceRoot":"","sources":["../src/validate-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Lists every `*.md` path relative to `sourceAbs`, POSIX separators, skipping `.default`.
3
+ */
4
+ export declare function collectMdRelPathsUnderSourceAbs(sourceAbs: string): Promise<string[]>;
5
+ //# sourceMappingURL=walk-commentray-source-md.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-commentray-source-md.d.ts","sourceRoot":"","sources":["../src/walk-commentray-source-md.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAuB1F"}