@commentray/core 0.0.1 → 0.0.4

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 (97) 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 +18 -0
  6. package/dist/angles-toml.d.ts.map +1 -0
  7. package/dist/angles-toml.js +62 -0
  8. package/dist/angles-toml.js.map +1 -0
  9. package/dist/angles.d.ts +6 -0
  10. package/dist/angles.d.ts.map +1 -0
  11. package/dist/angles.js +14 -0
  12. package/dist/angles.js.map +1 -0
  13. package/dist/block-scroll-pickers.d.ts +22 -0
  14. package/dist/block-scroll-pickers.d.ts.map +1 -0
  15. package/dist/block-scroll-pickers.js +41 -0
  16. package/dist/block-scroll-pickers.js.map +1 -0
  17. package/dist/block-snippet.d.ts +13 -0
  18. package/dist/block-snippet.d.ts.map +1 -0
  19. package/dist/block-snippet.js +30 -0
  20. package/dist/block-snippet.js.map +1 -0
  21. package/dist/blocks.d.ts +66 -0
  22. package/dist/blocks.d.ts.map +1 -0
  23. package/dist/blocks.js +101 -0
  24. package/dist/blocks.js.map +1 -0
  25. package/dist/commentray-index-renames.d.ts +21 -0
  26. package/dist/commentray-index-renames.d.ts.map +1 -0
  27. package/dist/commentray-index-renames.js +85 -0
  28. package/dist/commentray-index-renames.js.map +1 -0
  29. package/dist/commentray-path-resolution.d.ts +20 -0
  30. package/dist/commentray-path-resolution.d.ts.map +1 -0
  31. package/dist/commentray-path-resolution.js +38 -0
  32. package/dist/commentray-path-resolution.js.map +1 -0
  33. package/dist/config.d.ts +48 -0
  34. package/dist/config.d.ts.map +1 -1
  35. package/dist/config.js +72 -6
  36. package/dist/config.js.map +1 -1
  37. package/dist/github-url.d.ts +14 -0
  38. package/dist/github-url.d.ts.map +1 -0
  39. package/dist/github-url.js +25 -0
  40. package/dist/github-url.js.map +1 -0
  41. package/dist/index-normalize.d.ts +10 -0
  42. package/dist/index-normalize.d.ts.map +1 -0
  43. package/dist/index-normalize.js +60 -0
  44. package/dist/index-normalize.js.map +1 -0
  45. package/dist/index-schema-messages.d.ts +6 -0
  46. package/dist/index-schema-messages.d.ts.map +1 -0
  47. package/dist/index-schema-messages.js +26 -0
  48. package/dist/index-schema-messages.js.map +1 -0
  49. package/dist/index.d.ts +25 -6
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +16 -4
  52. package/dist/index.js.map +1 -1
  53. package/dist/marker-ids.d.ts +19 -0
  54. package/dist/marker-ids.d.ts.map +1 -0
  55. package/dist/marker-ids.js +38 -0
  56. package/dist/marker-ids.js.map +1 -0
  57. package/dist/marker-validation.d.ts +22 -0
  58. package/dist/marker-validation.d.ts.map +1 -0
  59. package/dist/marker-validation.js +138 -0
  60. package/dist/marker-validation.js.map +1 -0
  61. package/dist/metadata.d.ts.map +1 -1
  62. package/dist/metadata.js +84 -29
  63. package/dist/metadata.js.map +1 -1
  64. package/dist/migrate.d.ts.map +1 -1
  65. package/dist/migrate.js +52 -14
  66. package/dist/migrate.js.map +1 -1
  67. package/dist/model.d.ts +24 -2
  68. package/dist/model.d.ts.map +1 -1
  69. package/dist/model.js +17 -1
  70. package/dist/model.js.map +1 -1
  71. package/dist/paths.d.ts +18 -2
  72. package/dist/paths.d.ts.map +1 -1
  73. package/dist/paths.js +34 -3
  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/scm/git-scm-provider.d.ts +7 -1
  80. package/dist/scm/git-scm-provider.d.ts.map +1 -1
  81. package/dist/scm/git-scm-provider.js +42 -0
  82. package/dist/scm/git-scm-provider.js.map +1 -1
  83. package/dist/scm/scm-provider.d.ts +10 -0
  84. package/dist/scm/scm-provider.d.ts.map +1 -1
  85. package/dist/scroll-sync.d.ts +12 -0
  86. package/dist/scroll-sync.d.ts.map +1 -0
  87. package/dist/scroll-sync.js +59 -0
  88. package/dist/scroll-sync.js.map +1 -0
  89. package/dist/source-markers.d.ts +28 -0
  90. package/dist/source-markers.d.ts.map +1 -0
  91. package/dist/source-markers.js +241 -0
  92. package/dist/source-markers.js.map +1 -0
  93. package/dist/validate-project.d.ts +15 -1
  94. package/dist/validate-project.d.ts.map +1 -1
  95. package/dist/validate-project.js +87 -14
  96. package/dist/validate-project.js.map +1 -1
  97. package/package.json +6 -2
@@ -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,5 +7,19 @@ 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>;
19
+ /**
20
+ * Write the metadata index to the default location under `repoRoot`, creating
21
+ * the `.commentray/metadata/` directory if missing. The file is written with
22
+ * two-space indentation and a trailing newline so diffs are easy to read.
23
+ */
24
+ export declare function writeIndex(repoRoot: string, index: CommentrayIndex): Promise<void>;
11
25
  //# sourceMappingURL=validate-project.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-project.d.ts","sourceRoot":"","sources":["../src/validate-project.ts"],"names":[],"mappings":"AAKA,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,CA2CjF;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAUjF"}
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;AAOpG,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,CAiEjF;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"}
@@ -1,8 +1,13 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { loadCommentrayConfig } from "./config.js";
4
+ import { parseGithubRepoWebUrl } from "./github-url.js";
5
+ import { normalizeCommentrayIndex } from "./index-normalize.js";
4
6
  import { assertValidIndex } from "./metadata.js";
7
+ import { migrateIndex } from "./migrate.js";
8
+ import { coerceIndexSchemaVersion, CURRENT_SCHEMA_VERSION } from "./model.js";
5
9
  import { defaultMetadataIndexPath } from "./paths.js";
10
+ import { validateIndexMarkerSemantics, validateMarkerBoundariesInSource, } from "./marker-validation.js";
6
11
  export async function validateProject(repoRoot) {
7
12
  const issues = [];
8
13
  let config;
@@ -29,30 +34,87 @@ export async function validateProject(repoRoot) {
29
34
  });
30
35
  }
31
36
  }
32
- const indexPath = path.join(repoRoot, defaultMetadataIndexPath());
37
+ let index = null;
33
38
  try {
34
- const raw = await fs.readFile(indexPath, "utf8");
35
- assertValidIndex(JSON.parse(raw));
39
+ index = await readIndex(repoRoot);
40
+ if (index === null) {
41
+ issues.push({ level: "warn", message: `No metadata index at ${defaultMetadataIndexPath()}` });
42
+ }
36
43
  }
37
44
  catch (err) {
38
- const code = err.code;
39
- if (code === "ENOENT") {
40
- issues.push({ level: "warn", message: `No metadata index at ${defaultMetadataIndexPath()}` });
45
+ issues.push({
46
+ level: "error",
47
+ message: `Invalid metadata index: ${err instanceof Error ? err.message : String(err)}`,
48
+ });
49
+ }
50
+ if (index) {
51
+ for (const issue of validateIndexMarkerSemantics(index)) {
52
+ issues.push({ level: issue.level, message: issue.message });
41
53
  }
42
- else {
43
- issues.push({
44
- level: "error",
45
- message: `Invalid metadata index: ${err instanceof Error ? err.message : String(err)}`,
46
- });
54
+ const seenSources = new Set();
55
+ for (const entry of Object.values(index.byCommentrayPath)) {
56
+ if (seenSources.has(entry.sourcePath))
57
+ continue;
58
+ seenSources.add(entry.sourcePath);
59
+ const abs = path.join(repoRoot, ...entry.sourcePath.split("/"));
60
+ try {
61
+ const text = await fs.readFile(abs, "utf8");
62
+ for (const issue of validateMarkerBoundariesInSource(text, entry.sourcePath)) {
63
+ issues.push({ level: issue.level, message: issue.message });
64
+ }
65
+ }
66
+ catch {
67
+ issues.push({
68
+ level: "warn",
69
+ message: `Could not read "${entry.sourcePath}" to validate Commentray source markers.`,
70
+ });
71
+ }
47
72
  }
48
73
  }
74
+ pushRelativeGithubLinkConfigWarnings(config, issues);
49
75
  return { issues };
50
76
  }
51
- export async function readIndex(repoRoot) {
77
+ function pushRelativeGithubLinkConfigWarnings(config, issues) {
78
+ if (!config.render.relativeGithubBlobLinks)
79
+ return;
80
+ const gh = config.staticSite.githubUrl;
81
+ if (gh && parseGithubRepoWebUrl(gh))
82
+ return;
83
+ issues.push({
84
+ level: "warn",
85
+ message: "render.relative_github_blob_links is true but static_site.github_url is missing or " +
86
+ "not a repository home URL (expected https://github.com/owner/repo). Link rewriting is skipped at build time.",
87
+ });
88
+ }
89
+ /**
90
+ * Reads `index.json`, applies schema migration and snippet/fingerprint normalization,
91
+ * and persists when anything changed. Throws if the file is missing or not valid JSON.
92
+ */
93
+ export async function refreshIndexMigrationsOnDisk(repoRoot) {
52
94
  const indexPath = path.join(repoRoot, defaultMetadataIndexPath());
95
+ const raw = await fs.readFile(indexPath, "utf8");
96
+ const parsed = JSON.parse(raw);
97
+ const priorSchema = typeof parsed === "object" && parsed !== null
98
+ ? coerceIndexSchemaVersion(parsed.schemaVersion)
99
+ : null;
100
+ if (typeof priorSchema === "number" && priorSchema > CURRENT_SCHEMA_VERSION) {
101
+ const metaDir = path.dirname(indexPath);
102
+ const backupName = `index.schema-${String(priorSchema)}-backup-${String(Date.now())}.json`;
103
+ await fs.writeFile(path.join(metaDir, backupName), raw, "utf8");
104
+ }
105
+ const { index: migrated, changed: schemaChanged } = migrateIndex(parsed);
106
+ const { index: normalized, changed: snippetChanged } = normalizeCommentrayIndex(migrated);
107
+ const index = assertValidIndex(normalized);
108
+ const changed = schemaChanged || snippetChanged;
109
+ if (changed) {
110
+ await writeIndex(repoRoot, index);
111
+ }
112
+ return { index, changed };
113
+ }
114
+ export async function readIndex(repoRoot) {
53
115
  try {
54
- const raw = await fs.readFile(indexPath, "utf8");
55
- return assertValidIndex(JSON.parse(raw));
116
+ const { index } = await refreshIndexMigrationsOnDisk(repoRoot);
117
+ return index;
56
118
  }
57
119
  catch (err) {
58
120
  const code = err.code;
@@ -61,4 +123,15 @@ export async function readIndex(repoRoot) {
61
123
  throw err;
62
124
  }
63
125
  }
126
+ /**
127
+ * Write the metadata index to the default location under `repoRoot`, creating
128
+ * the `.commentray/metadata/` directory if missing. The file is written with
129
+ * two-space indentation and a trailing newline so diffs are easy to read.
130
+ */
131
+ export async function writeIndex(repoRoot, index) {
132
+ const indexPath = path.join(repoRoot, defaultMetadataIndexPath());
133
+ await fs.mkdir(path.dirname(indexPath), { recursive: true });
134
+ const serialized = `${JSON.stringify(index, null, 2)}\n`;
135
+ await fs.writeFile(indexPath, serialized, "utf8");
136
+ }
64
137
  //# sourceMappingURL=validate-project.js.map
@@ -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":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAiC,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAwB,MAAM,YAAY,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAQhC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,MAAgC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,oCAAoC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SAChG,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1D,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,sBAAsB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;aACnE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,KAAK,GAA2B,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,wBAAwB,EAAE,EAAE,EAAE,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SACvF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,KAAK,IAAI,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1D,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;gBAAE,SAAS;YAChD,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC5C,KAAK,MAAM,KAAK,IAAI,gCAAgC,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,mBAAmB,KAAK,CAAC,UAAU,0CAA0C;iBACvF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErD,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,oCAAoC,CAC3C,MAAgC,EAChC,MAAyB;IAEzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB;QAAE,OAAO;IACnD,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;IACvC,IAAI,EAAE,IAAI,qBAAqB,CAAC,EAAE,CAAC;QAAE,OAAO;IAC5C,MAAM,CAAC,IAAI,CAAC;QACV,KAAK,EAAE,MAAM;QACb,OAAO,EACL,qFAAqF;YACrF,8GAA8G;KACjH,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,QAAgB;IAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IAC1C,MAAM,WAAW,GACf,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAC3C,CAAC,CAAC,wBAAwB,CAAE,MAAkC,CAAC,aAAa,CAAC;QAC7E,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,GAAG,sBAAsB,EAAE,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,gBAAgB,MAAM,CAAC,WAAW,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;QAC3F,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACzE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAqB,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,aAAa,IAAI,cAAc,CAAC;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,KAAsB;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACzD,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commentray/core",
3
- "version": "0.0.1",
3
+ "version": "0.0.4",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -14,6 +14,10 @@
14
14
  ".": {
15
15
  "types": "./dist/index.d.ts",
16
16
  "import": "./dist/index.js"
17
+ },
18
+ "./block-scroll-pickers": {
19
+ "types": "./dist/block-scroll-pickers.d.ts",
20
+ "import": "./dist/block-scroll-pickers.js"
17
21
  }
18
22
  },
19
23
  "files": [
@@ -28,6 +32,6 @@
28
32
  "@iarna/toml": "^2.2.5"
29
33
  },
30
34
  "devDependencies": {
31
- "@types/node": "^22.14.1"
35
+ "@types/node": "^25.6.0"
32
36
  }
33
37
  }