@reqlan/analytical 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/out/analysis/analyser-registry.d.ts +21 -0
  2. package/out/analysis/analyser-registry.js +33 -0
  3. package/out/analysis/analyser-registry.js.map +1 -0
  4. package/out/analysis/completion-tracking-analyser.d.ts +3 -0
  5. package/out/analysis/completion-tracking-analyser.js +37 -0
  6. package/out/analysis/completion-tracking-analyser.js.map +1 -0
  7. package/out/analysis/deprecation-impact-analyser.d.ts +3 -0
  8. package/out/analysis/deprecation-impact-analyser.js +21 -0
  9. package/out/analysis/deprecation-impact-analyser.js.map +1 -0
  10. package/out/analysis/file-related-analyser.d.ts +5 -0
  11. package/out/analysis/file-related-analyser.js +41 -0
  12. package/out/analysis/file-related-analyser.js.map +1 -0
  13. package/out/analysis/git-dates-analyser.d.ts +9 -0
  14. package/out/analysis/git-dates-analyser.js +39 -0
  15. package/out/analysis/git-dates-analyser.js.map +1 -0
  16. package/out/analysis/list-ideas-analyser.d.ts +3 -0
  17. package/out/analysis/list-ideas-analyser.js +7 -0
  18. package/out/analysis/list-ideas-analyser.js.map +1 -0
  19. package/out/analysis/local-graph-analyser.d.ts +6 -0
  20. package/out/analysis/local-graph-analyser.js +42 -0
  21. package/out/analysis/local-graph-analyser.js.map +1 -0
  22. package/out/analysis/semantic-search-analyser.d.ts +8 -0
  23. package/out/analysis/semantic-search-analyser.js +51 -0
  24. package/out/analysis/semantic-search-analyser.js.map +1 -0
  25. package/out/analysis-api.d.ts +31 -0
  26. package/out/analysis-api.js +136 -0
  27. package/out/analysis-api.js.map +1 -0
  28. package/out/core/analytical-store.d.ts +78 -0
  29. package/out/core/analytical-store.js +141 -0
  30. package/out/core/analytical-store.js.map +1 -0
  31. package/out/core/context-model.d.ts +187 -0
  32. package/out/core/context-model.js +36 -0
  33. package/out/core/context-model.js.map +1 -0
  34. package/out/core/context-signals.d.ts +149 -0
  35. package/out/core/context-signals.js +397 -0
  36. package/out/core/context-signals.js.map +1 -0
  37. package/out/core/file-path-match.d.ts +7 -0
  38. package/out/core/file-path-match.js +39 -0
  39. package/out/core/file-path-match.js.map +1 -0
  40. package/out/core/file-reference-resolve.d.ts +8 -0
  41. package/out/core/file-reference-resolve.js +28 -0
  42. package/out/core/file-reference-resolve.js.map +1 -0
  43. package/out/core/idea-references.d.ts +13 -0
  44. package/out/core/idea-references.js +25 -0
  45. package/out/core/idea-references.js.map +1 -0
  46. package/out/core/index-error.d.ts +23 -0
  47. package/out/core/index-error.js +33 -0
  48. package/out/core/index-error.js.map +1 -0
  49. package/out/core/types.d.ts +172 -0
  50. package/out/core/types.js +48 -0
  51. package/out/core/types.js.map +1 -0
  52. package/out/core/workspace-paths.d.ts +4 -0
  53. package/out/core/workspace-paths.js +92 -0
  54. package/out/core/workspace-paths.js.map +1 -0
  55. package/out/create-runtime.d.ts +21 -0
  56. package/out/create-runtime.js +39 -0
  57. package/out/create-runtime.js.map +1 -0
  58. package/out/export/build-export-snapshot.d.ts +3 -0
  59. package/out/export/build-export-snapshot.js +573 -0
  60. package/out/export/build-export-snapshot.js.map +1 -0
  61. package/out/export/html-export-assets.d.ts +3 -0
  62. package/out/export/html-export-assets.js +1066 -0
  63. package/out/export/html-export-assets.js.map +1 -0
  64. package/out/export/html-export-template.d.ts +17 -0
  65. package/out/export/html-export-template.js +930 -0
  66. package/out/export/html-export-template.js.map +1 -0
  67. package/out/export/html-export-utils.d.ts +45 -0
  68. package/out/export/html-export-utils.js +262 -0
  69. package/out/export/html-export-utils.js.map +1 -0
  70. package/out/export/types.d.ts +187 -0
  71. package/out/export/types.js +2 -0
  72. package/out/export/types.js.map +1 -0
  73. package/out/export/write-html-export.d.ts +2 -0
  74. package/out/export/write-html-export.js +143 -0
  75. package/out/export/write-html-export.js.map +1 -0
  76. package/out/headless-index-service.d.ts +23 -0
  77. package/out/headless-index-service.js +171 -0
  78. package/out/headless-index-service.js.map +1 -0
  79. package/out/index-store/idea-extractor.d.ts +6 -0
  80. package/out/index-store/idea-extractor.js +271 -0
  81. package/out/index-store/idea-extractor.js.map +1 -0
  82. package/out/index-store/schema.d.ts +10 -0
  83. package/out/index-store/schema.js +54 -0
  84. package/out/index-store/schema.js.map +1 -0
  85. package/out/index-store/sqlite-store.d.ts +66 -0
  86. package/out/index-store/sqlite-store.js +964 -0
  87. package/out/index-store/sqlite-store.js.map +1 -0
  88. package/out/index-store/webview-graph-queries.d.ts +62 -0
  89. package/out/index-store/webview-graph-queries.js +256 -0
  90. package/out/index-store/webview-graph-queries.js.map +1 -0
  91. package/out/index-store/webview-table-queries.d.ts +57 -0
  92. package/out/index-store/webview-table-queries.js +199 -0
  93. package/out/index-store/webview-table-queries.js.map +1 -0
  94. package/out/index.d.ts +40 -0
  95. package/out/index.js +27 -0
  96. package/out/index.js.map +1 -0
  97. package/package.json +52 -0
@@ -0,0 +1,573 @@
1
+ import { parseAttributes } from '../core/types.js';
2
+ import { buildGraphViewSlice } from '../index-store/webview-graph-queries.js';
3
+ import { formatAttributeValue, slugAttributeKey } from './html-export-utils.js';
4
+ export async function buildExportSnapshot(store, request) {
5
+ const title = buildExportTitle(request);
6
+ const runtimeMode = request.runtimeMode ?? 'interactive';
7
+ const clusterStrategy = request.clusterStrategy ?? 'hybrid';
8
+ const pageOptions = {
9
+ includeIdeaPages: request.includeIdeaPages !== false,
10
+ includeFilePages: request.includeFilePages !== false,
11
+ includeCodeFilePages: request.includeCodeFilePages !== false,
12
+ includeClusterPages: request.includeClusterPages !== false,
13
+ includePrintPages: request.includePrintPages !== false,
14
+ includeRequirementsPage: request.includeRequirementsPage,
15
+ includeGraphPage: request.includeGraphPage
16
+ };
17
+ const manifest = buildManifest(request);
18
+ const baseIdeas = request.scope === 'currentFile'
19
+ ? await buildScopedIdeas(store, request)
20
+ : await store.listAllIdeas();
21
+ const byStatus = rollupStatuses(baseIdeas);
22
+ const byTag = rollupTags(baseIdeas);
23
+ const allFiles = [...new Set(baseIdeas.map(idea => idea.fileUri))].sort();
24
+ const ideaRecords = await buildIdeaRecords(store, baseIdeas);
25
+ const ideaById = new Map(ideaRecords.map(idea => [idea.id, idea]));
26
+ const fileRecords = buildFileRecords(ideaRecords, request);
27
+ const codeFileRecords = buildCodeFileRecords(ideaRecords, fileRecords);
28
+ const clusterRecords = buildClusterRecords(ideaRecords, fileRecords, clusterStrategy);
29
+ finalizeClusterCounts(clusterRecords, ideaById);
30
+ attachClusterMembership(ideaRecords, clusterRecords);
31
+ const graphs = await buildGraphCatalog(store, request, ideaRecords, fileRecords, clusterRecords);
32
+ const attributeRecords = buildAttributeRecords(ideaRecords);
33
+ const searchDocuments = buildSearchDocuments(ideaRecords, fileRecords, codeFileRecords, clusterRecords, attributeRecords);
34
+ const counts = await store.counts();
35
+ return {
36
+ title,
37
+ generatedAt: new Date().toISOString(),
38
+ workspaceRoot: request.workspaceRoot,
39
+ templateId: request.templateId,
40
+ scope: request.scope,
41
+ sourceFileUri: request.sourceFileUri,
42
+ runtimeMode,
43
+ clusterStrategy,
44
+ pageOptions,
45
+ manifest,
46
+ counts: {
47
+ ideas: ideaRecords.length,
48
+ edges: request.scope === 'currentFile' ? graphs.workspace.edges.length : counts.edges,
49
+ files: fileRecords.length,
50
+ clusters: clusterRecords.length
51
+ },
52
+ ideas: ideaRecords,
53
+ ideaOrder: ideaRecords.map(idea => idea.id),
54
+ ideasById: Object.fromEntries(ideaRecords.map(idea => [idea.id, idea])),
55
+ files: fileRecords,
56
+ filesById: Object.fromEntries(fileRecords.map(file => [file.id, file])),
57
+ codeFiles: codeFileRecords,
58
+ codeFilesById: Object.fromEntries(codeFileRecords.map(file => [file.id, file])),
59
+ clusters: clusterRecords,
60
+ clustersById: Object.fromEntries(clusterRecords.map(cluster => [cluster.id, cluster])),
61
+ attributes: attributeRecords,
62
+ graphs,
63
+ searchDocuments,
64
+ byStatus,
65
+ byTag,
66
+ allFiles
67
+ };
68
+ }
69
+ async function buildScopedIdeas(store, request) {
70
+ if (!request.sourceFileUri) {
71
+ return [];
72
+ }
73
+ return store.getIdeasInFile(request.sourceFileUri);
74
+ }
75
+ async function buildIdeaRecords(store, ideas) {
76
+ const rawIdeas = await store.getAllIdeasRaw();
77
+ const rawById = new Map(rawIdeas.map(idea => [idea.id, idea]));
78
+ const records = await Promise.all(ideas.map(async (idea) => {
79
+ const references = await buildReferenceGroups(store, idea.id);
80
+ const ancestors = await store.buildAncestorChainResult(idea.id);
81
+ const attributes = loadAttributes(rawById.get(idea.id)?.attributesJson);
82
+ const fileSegments = idea.fileUri.split('/').filter(Boolean);
83
+ return {
84
+ ...idea,
85
+ fileName: fileSegments.at(-1) ?? idea.fileUri,
86
+ fileSegments,
87
+ attributes,
88
+ page: buildPageInfo(`${idea.name}`, `ideas/${slugify(idea.name)}--${slugify(idea.id)}.html`, `print/ideas/${slugify(idea.name)}--${slugify(idea.id)}.html`),
89
+ references,
90
+ ancestors,
91
+ clusterIds: []
92
+ };
93
+ }));
94
+ return records.sort(compareIdeas);
95
+ }
96
+ async function buildReferenceGroups(store, ideaId) {
97
+ const direct = await store.listReferencesForIdea(ideaId);
98
+ const nearby = await store.listReferencesWithinHopDepth(ideaId, 2);
99
+ return {
100
+ inbound: direct.filter(row => row.direction === 'inbound' && row.isResolved),
101
+ outbound: direct.filter(row => row.direction === 'outbound' && row.isResolved),
102
+ unresolved: direct.filter(row => !row.isResolved),
103
+ nearby
104
+ };
105
+ }
106
+ function loadAttributes(attributesJson) {
107
+ return attributesJson ? parseAttributes(attributesJson) : {};
108
+ }
109
+ function buildFileRecords(ideas, request) {
110
+ const groups = new Map();
111
+ for (const idea of ideas) {
112
+ const bucket = groups.get(idea.fileUri);
113
+ if (bucket) {
114
+ bucket.push(idea);
115
+ }
116
+ else {
117
+ groups.set(idea.fileUri, [idea]);
118
+ }
119
+ }
120
+ return [...groups.entries()]
121
+ .map(([fileUri, fileIdeas]) => {
122
+ const segments = fileUri.split('/').filter(Boolean);
123
+ const name = segments.at(-1) ?? fileUri;
124
+ const directory = segments.slice(0, -1).join('/');
125
+ return {
126
+ id: fileRecordId(fileUri),
127
+ fileUri,
128
+ name,
129
+ directory,
130
+ page: buildPageInfo(name, `files/${slugify(fileUri)}.html`, `print/files/${slugify(fileUri)}.html`),
131
+ printPage: buildPageInfo(`${name} print`, `print/files/${slugify(fileUri)}.html`),
132
+ ideas: [...fileIdeas].sort(compareIdeas),
133
+ edgeCount: fileIdeas.reduce((sum, idea) => sum + idea.references.inbound.length + idea.references.outbound.length + idea.references.unresolved.length, 0),
134
+ statuses: rollupStatuses(fileIdeas),
135
+ tags: rollupTags(fileIdeas)
136
+ };
137
+ })
138
+ .sort((left, right) => left.fileUri.localeCompare(right.fileUri));
139
+ }
140
+ function buildCodeFileRecords(ideas, files) {
141
+ const hostingUris = new Set(files.map(file => file.fileUri));
142
+ const groups = new Map();
143
+ for (const idea of ideas) {
144
+ for (const row of [...idea.references.outbound, ...idea.references.unresolved]) {
145
+ if (row.kind !== 'file_reference') {
146
+ continue;
147
+ }
148
+ const fileUri = row.targetPath.trim();
149
+ if (!fileUri || hostingUris.has(fileUri)) {
150
+ continue;
151
+ }
152
+ let bucket = groups.get(fileUri);
153
+ if (!bucket) {
154
+ bucket = { ideaIds: new Set(), labels: new Set() };
155
+ groups.set(fileUri, bucket);
156
+ }
157
+ bucket.ideaIds.add(idea.id);
158
+ if (row.label.trim()) {
159
+ bucket.labels.add(row.label.trim());
160
+ }
161
+ if (row.targetName.trim()) {
162
+ bucket.labels.add(row.targetName.trim());
163
+ }
164
+ }
165
+ }
166
+ return [...groups.entries()]
167
+ .map(([fileUri, group]) => {
168
+ const segments = fileUri.split('/').filter(Boolean);
169
+ const name = segments.at(-1) ?? fileUri;
170
+ const directory = segments.slice(0, -1).join('/');
171
+ return {
172
+ id: fileRecordId(fileUri),
173
+ fileUri,
174
+ name,
175
+ directory,
176
+ page: buildPageInfo(name, `code-files/${slugify(fileUri)}.html`, `print/code-files/${slugify(fileUri)}.html`),
177
+ printPage: buildPageInfo(`${name} print`, `print/code-files/${slugify(fileUri)}.html`),
178
+ referencingIdeaIds: [...group.ideaIds].sort(),
179
+ labels: [...group.labels].sort()
180
+ };
181
+ })
182
+ .sort((left, right) => left.fileUri.localeCompare(right.fileUri));
183
+ }
184
+ function buildClusterRecords(ideas, files, strategy) {
185
+ const clusters = [];
186
+ clusters.push(...buildFileClusters(files));
187
+ clusters.push(...buildFolderClusters(ideas));
188
+ clusters.push(...buildValueClusters(ideas, 'tag'));
189
+ clusters.push(...buildValueClusters(ideas, 'status'));
190
+ if ((strategy ?? 'hybrid') === 'hybrid') {
191
+ clusters.push(...buildCommunityClusters(ideas));
192
+ }
193
+ return clusters
194
+ .filter(cluster => cluster.ideaIds.length > 0)
195
+ .sort((left, right) => left.label.localeCompare(right.label))
196
+ .map(cluster => ({
197
+ ...cluster,
198
+ page: buildPageInfo(cluster.label, `clusters/${slugify(cluster.kind)}--${slugify(cluster.id)}.html`, `print/clusters/${slugify(cluster.kind)}--${slugify(cluster.id)}.html`)
199
+ }));
200
+ }
201
+ function attachClusterMembership(ideas, clusters) {
202
+ const byIdeaId = new Map(ideas.map(idea => [idea.id, idea]));
203
+ for (const cluster of clusters) {
204
+ for (const ideaId of cluster.ideaIds) {
205
+ const idea = byIdeaId.get(ideaId);
206
+ if (idea) {
207
+ idea.clusterIds.push(cluster.id);
208
+ }
209
+ }
210
+ }
211
+ for (const idea of ideas) {
212
+ idea.clusterIds.sort((left, right) => left.localeCompare(right));
213
+ }
214
+ }
215
+ function finalizeClusterCounts(clusters, ideasById) {
216
+ for (const cluster of clusters) {
217
+ let inbound = 0;
218
+ let outbound = 0;
219
+ for (const ideaId of cluster.ideaIds) {
220
+ const idea = ideasById.get(ideaId);
221
+ if (!idea) {
222
+ continue;
223
+ }
224
+ inbound += idea.references.inbound.length;
225
+ outbound += idea.references.outbound.length;
226
+ }
227
+ cluster.counts.inbound = inbound;
228
+ cluster.counts.outbound = outbound;
229
+ }
230
+ }
231
+ async function buildGraphCatalog(store, request, ideas, files, clusters) {
232
+ const workspace = request.scope === 'currentFile'
233
+ ? await buildGraphSliceForIdeas(store, request, ideas.map(idea => idea.id))
234
+ : await buildGraphViewSlice(store, {
235
+ includeIndirect: true,
236
+ maxNodes: request.maxGraphNodes
237
+ });
238
+ const byIdeaId = Object.fromEntries(await Promise.all(ideas.map(async (idea) => [
239
+ idea.id,
240
+ await buildGraphViewSlice(store, {
241
+ centerId: idea.id,
242
+ includeIndirect: true,
243
+ maxNodes: request.maxGraphNodes
244
+ })
245
+ ])));
246
+ const byFileId = Object.fromEntries(await Promise.all(files.map(async (file) => [
247
+ file.id,
248
+ await buildGraphSliceForIdeas(store, request, file.ideas.map(idea => idea.id))
249
+ ])));
250
+ const byClusterId = Object.fromEntries(await Promise.all(clusters.map(async (cluster) => [
251
+ cluster.id,
252
+ await buildGraphSliceForIdeas(store, request, cluster.ideaIds)
253
+ ])));
254
+ return { workspace, byIdeaId, byFileId, byClusterId };
255
+ }
256
+ function buildExportTitle(request) {
257
+ return request.scope === 'currentFile' && request.sourceFileUri
258
+ ? `${request.exportName} (${request.sourceFileUri})`
259
+ : request.exportName;
260
+ }
261
+ async function buildGraphSliceForIdeas(store, request, ideaIds) {
262
+ const slices = await Promise.all(ideaIds.map(ideaId => buildGraphViewSlice(store, {
263
+ centerId: ideaId,
264
+ includeIndirect: true,
265
+ maxNodes: request.maxGraphNodes
266
+ })));
267
+ return mergeGraphSlices(slices, request.maxGraphNodes);
268
+ }
269
+ function mergeGraphSlices(slices, maxNodes = 120) {
270
+ const nodes = new Map();
271
+ const edges = new Map();
272
+ let depth = 0;
273
+ let truncated = false;
274
+ for (const slice of slices) {
275
+ depth = Math.max(depth, slice.depth);
276
+ truncated = truncated || slice.truncated;
277
+ for (const node of slice.nodes) {
278
+ if (nodes.size < maxNodes || nodes.has(node.id)) {
279
+ nodes.set(node.id, node);
280
+ }
281
+ else {
282
+ truncated = true;
283
+ }
284
+ }
285
+ for (const edge of slice.edges) {
286
+ if (nodes.has(edge.sourceId) && nodes.has(edge.targetId)) {
287
+ edges.set(edge.id, edge);
288
+ }
289
+ }
290
+ }
291
+ return {
292
+ query: {
293
+ includeIndirect: true,
294
+ maxNodes
295
+ },
296
+ depth: depth || 2,
297
+ truncated,
298
+ totalMatching: nodes.size,
299
+ nodes: [...nodes.values()].sort((left, right) => left.fileUri.localeCompare(right.fileUri) || left.lineStart - right.lineStart),
300
+ edges: [...edges.values()].sort((left, right) => left.id.localeCompare(right.id))
301
+ };
302
+ }
303
+ function buildManifest(request) {
304
+ const printFileName = ensureHtmlFileName(request.printEntryFileName);
305
+ return {
306
+ home: buildPageInfo('Overview', 'index.html'),
307
+ ideasIndex: buildPageInfo('Ideas', 'ideas.html'),
308
+ filesIndex: buildPageInfo('Files', 'files.html'),
309
+ clustersIndex: buildPageInfo('Clusters', 'clusters.html'),
310
+ attributesIndex: buildPageInfo('Attributes', 'attributes.html'),
311
+ codeFilesIndex: buildPageInfo('Code files', 'code-files.html'),
312
+ graph: buildPageInfo('Graph', 'graph.html'),
313
+ printHome: buildPageInfo('Print', printFileName),
314
+ dataExport: buildPageInfo('Export data', 'data/export.json'),
315
+ dataGraph: buildPageInfo('Graph data', 'data/graph.json'),
316
+ dataSearch: buildPageInfo('Search data', 'data/search.json'),
317
+ dataManifest: buildPageInfo('Manifest data', 'data/site-manifest.json')
318
+ };
319
+ }
320
+ function buildPageInfo(title, path, printablePath) {
321
+ return {
322
+ title,
323
+ path,
324
+ url: `./${path}`,
325
+ printablePath,
326
+ printableUrl: printablePath ? `./${printablePath}` : undefined
327
+ };
328
+ }
329
+ function buildSearchDocuments(ideas, files, codeFiles, clusters, attributes) {
330
+ const documents = [];
331
+ for (const idea of ideas) {
332
+ documents.push({
333
+ id: idea.id,
334
+ title: idea.name,
335
+ kind: 'idea',
336
+ summary: idea.summary,
337
+ url: idea.page.url,
338
+ tags: idea.tags,
339
+ status: idea.status,
340
+ pathTokens: idea.fileSegments,
341
+ keywords: [...collectAttributeKeywords(idea.attributes), ...idea.clusterIds]
342
+ });
343
+ }
344
+ for (const file of files) {
345
+ documents.push({
346
+ id: file.id,
347
+ title: file.name,
348
+ kind: 'file',
349
+ summary: `${file.ideas.length} ideas, ${file.edgeCount} references`,
350
+ url: file.page.url,
351
+ tags: Object.keys(file.tags),
352
+ pathTokens: file.fileUri.split('/').filter(Boolean),
353
+ keywords: file.ideas.map(idea => idea.name)
354
+ });
355
+ }
356
+ for (const file of codeFiles) {
357
+ documents.push({
358
+ id: file.id,
359
+ title: file.name,
360
+ kind: 'code-file',
361
+ summary: `${file.referencingIdeaIds.length} outbound references · ${file.fileUri}`,
362
+ url: file.page.url,
363
+ tags: ['file_reference', ...file.labels],
364
+ pathTokens: file.fileUri.split('/').filter(Boolean),
365
+ keywords: [...file.labels, ...file.referencingIdeaIds]
366
+ });
367
+ }
368
+ for (const cluster of clusters) {
369
+ documents.push({
370
+ id: cluster.id,
371
+ title: cluster.label,
372
+ kind: 'cluster',
373
+ summary: cluster.description,
374
+ url: cluster.page.url,
375
+ tags: [cluster.kind],
376
+ pathTokens: cluster.fileUris.flatMap(path => path.split('/').filter(Boolean)).slice(0, 12),
377
+ keywords: cluster.ideaIds
378
+ });
379
+ }
380
+ for (const attribute of attributes) {
381
+ documents.push({
382
+ id: `attribute:${attribute.key}`,
383
+ title: attribute.key,
384
+ kind: 'attribute',
385
+ summary: `${attribute.ideaCount} ideas · ${attribute.values.length} values`,
386
+ url: `./attributes.html#attr-${slugAttributeKey(attribute.key)}`,
387
+ tags: ['attribute'],
388
+ pathTokens: [attribute.key],
389
+ keywords: attribute.values.map(value => value.value)
390
+ });
391
+ }
392
+ return documents.sort((left, right) => left.title.localeCompare(right.title));
393
+ }
394
+ function buildAttributeRecords(ideas) {
395
+ const byKey = new Map();
396
+ for (const idea of ideas) {
397
+ for (const [key, rawValue] of Object.entries(idea.attributes)) {
398
+ const bucket = byKey.get(key) ?? { ideaIds: new Set(), values: new Map() };
399
+ bucket.ideaIds.add(idea.id);
400
+ const formatted = formatAttributeValue(rawValue) || '(empty)';
401
+ const ideasForValue = bucket.values.get(formatted) ?? new Set();
402
+ ideasForValue.add(idea.id);
403
+ bucket.values.set(formatted, ideasForValue);
404
+ byKey.set(key, bucket);
405
+ }
406
+ }
407
+ return [...byKey.entries()]
408
+ .map(([key, bucket]) => ({
409
+ key,
410
+ ideaCount: bucket.ideaIds.size,
411
+ ideaIds: [...bucket.ideaIds].sort(),
412
+ values: [...bucket.values.entries()]
413
+ .map(([value, ideaIds]) => ({
414
+ value,
415
+ count: ideaIds.size,
416
+ ideaIds: [...ideaIds].sort()
417
+ }))
418
+ .sort((left, right) => right.count - left.count || left.value.localeCompare(right.value))
419
+ }))
420
+ .sort((left, right) => right.ideaCount - left.ideaCount || left.key.localeCompare(right.key));
421
+ }
422
+ function collectAttributeKeywords(attributes) {
423
+ const keywords = [];
424
+ for (const [key, value] of Object.entries(attributes)) {
425
+ keywords.push(key);
426
+ if (typeof value === 'string') {
427
+ keywords.push(value);
428
+ }
429
+ else if (Array.isArray(value)) {
430
+ keywords.push(...value.map(String));
431
+ }
432
+ else if (value === true) {
433
+ keywords.push(`has:${key}`);
434
+ }
435
+ }
436
+ return keywords;
437
+ }
438
+ function buildFileClusters(files) {
439
+ return files.map(file => createClusterRecord(`file:${file.fileUri}`, 'file', file.name, `Ideas defined in ${file.fileUri}.`, file.ideas.map(idea => idea.id), [file.fileUri]));
440
+ }
441
+ function buildFolderClusters(ideas) {
442
+ const groups = new Map();
443
+ for (const idea of ideas) {
444
+ const folder = idea.fileSegments.slice(0, -1).join('/') || '.';
445
+ const bucket = groups.get(folder);
446
+ if (bucket) {
447
+ bucket.push(idea);
448
+ }
449
+ else {
450
+ groups.set(folder, [idea]);
451
+ }
452
+ }
453
+ return [...groups.entries()].map(([folder, members]) => createClusterRecord(`folder:${folder}`, 'folder', folder, `Ideas located under folder ${folder}.`, members.map(idea => idea.id), uniqueFileUris(members)));
454
+ }
455
+ function buildValueClusters(ideas, kind) {
456
+ const groups = new Map();
457
+ for (const idea of ideas) {
458
+ const values = kind === 'tag'
459
+ ? idea.tags
460
+ : [idea.status?.trim() || 'unspecified'];
461
+ for (const value of values) {
462
+ const key = value || 'unspecified';
463
+ const bucket = groups.get(key);
464
+ if (bucket) {
465
+ bucket.push(idea);
466
+ }
467
+ else {
468
+ groups.set(key, [idea]);
469
+ }
470
+ }
471
+ }
472
+ return [...groups.entries()].map(([value, members]) => createClusterRecord(`${kind}:${value}`, kind, `${kind}: ${value}`, `${kind === 'tag' ? 'Tag' : 'Status'} cluster for ${value}.`, members.map(idea => idea.id), uniqueFileUris(members)));
473
+ }
474
+ function buildCommunityClusters(ideas) {
475
+ const neighbors = new Map();
476
+ for (const idea of ideas) {
477
+ neighbors.set(idea.id, new Set());
478
+ }
479
+ for (const idea of ideas) {
480
+ for (const ref of [...idea.references.inbound, ...idea.references.outbound]) {
481
+ if (!ref.targetIdeaId || !neighbors.has(ref.targetIdeaId)) {
482
+ continue;
483
+ }
484
+ neighbors.get(idea.id)?.add(ref.targetIdeaId);
485
+ neighbors.get(ref.targetIdeaId)?.add(idea.id);
486
+ }
487
+ }
488
+ const ideaById = new Map(ideas.map(idea => [idea.id, idea]));
489
+ const visited = new Set();
490
+ const clusters = [];
491
+ for (const idea of ideas) {
492
+ if (visited.has(idea.id)) {
493
+ continue;
494
+ }
495
+ const queue = [idea.id];
496
+ const members = [];
497
+ visited.add(idea.id);
498
+ while (queue.length > 0) {
499
+ const current = queue.shift();
500
+ members.push(current);
501
+ for (const next of neighbors.get(current) ?? []) {
502
+ if (!visited.has(next)) {
503
+ visited.add(next);
504
+ queue.push(next);
505
+ }
506
+ }
507
+ }
508
+ if (members.length < 2) {
509
+ continue;
510
+ }
511
+ const memberIdeas = members
512
+ .map(id => ideaById.get(id))
513
+ .filter((value) => Boolean(value));
514
+ clusters.push(createClusterRecord(`community:${members.map(slugify).join('-').slice(0, 80)}`, 'community', `community ${clusters.length + 1}`, 'Computed connectivity cluster from the reference graph.', members, uniqueFileUris(memberIdeas)));
515
+ }
516
+ return clusters;
517
+ }
518
+ function createClusterRecord(id, kind, label, description, ideaIds, fileUris) {
519
+ return {
520
+ id,
521
+ kind,
522
+ label,
523
+ description,
524
+ page: buildPageInfo(label, `clusters/${slugify(kind)}--${slugify(id)}.html`),
525
+ ideaIds: [...new Set(ideaIds)].sort(),
526
+ fileUris: [...new Set(fileUris)].sort(),
527
+ counts: {
528
+ ideas: new Set(ideaIds).size,
529
+ files: new Set(fileUris).size,
530
+ inbound: 0,
531
+ outbound: 0
532
+ }
533
+ };
534
+ }
535
+ function uniqueFileUris(ideas) {
536
+ return [...new Set(ideas.map(idea => idea.fileUri))];
537
+ }
538
+ function compareIdeas(left, right) {
539
+ return left.fileUri.localeCompare(right.fileUri) || left.lineStart - right.lineStart || left.name.localeCompare(right.name);
540
+ }
541
+ function fileRecordId(fileUri) {
542
+ return `file:${fileUri}`;
543
+ }
544
+ function rollupStatuses(ideas) {
545
+ const counts = new Map();
546
+ for (const idea of ideas) {
547
+ const key = idea.status?.trim() || 'unspecified';
548
+ counts.set(key, (counts.get(key) ?? 0) + 1);
549
+ }
550
+ return Object.fromEntries([...counts.entries()].sort(([left], [right]) => left.localeCompare(right)));
551
+ }
552
+ function rollupTags(ideas) {
553
+ const counts = new Map();
554
+ for (const idea of ideas) {
555
+ for (const tag of idea.tags) {
556
+ counts.set(tag, (counts.get(tag) ?? 0) + 1);
557
+ }
558
+ }
559
+ return Object.fromEntries([...counts.entries()].sort(([left], [right]) => left.localeCompare(right)));
560
+ }
561
+ function slugify(value) {
562
+ const slug = value
563
+ .toLowerCase()
564
+ .replace(/[^a-z0-9]+/g, '-')
565
+ .replace(/^-+|-+$/g, '')
566
+ .slice(0, 80);
567
+ return slug || 'item';
568
+ }
569
+ function ensureHtmlFileName(value) {
570
+ const trimmed = value.trim();
571
+ return trimmed.toLowerCase().endsWith('.html') ? trimmed : `${trimmed}.html`;
572
+ }
573
+ //# sourceMappingURL=build-export-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-export-snapshot.js","sourceRoot":"","sources":["../../src/export/build-export-snapshot.ts"],"names":[],"mappings":"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"}