@opensip-cli/dashboard 0.1.10 → 0.1.12

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 (150) hide show
  1. package/README.md +4 -2
  2. package/dist/client-bundle.generated.d.ts.map +1 -1
  3. package/dist/client-bundle.generated.js +1 -1
  4. package/dist/client-bundle.generated.js.map +1 -1
  5. package/dist/code-paths/graph-view-model.js +0 -1
  6. package/dist/code-paths/graph-view-model.js.map +1 -1
  7. package/dist/css/theme.js +1 -1
  8. package/dist/generator.d.ts +2 -0
  9. package/dist/generator.d.ts.map +1 -1
  10. package/dist/generator.js +10 -4
  11. package/dist/generator.js.map +1 -1
  12. package/dist/report-cup-icon.d.ts +17 -0
  13. package/dist/report-cup-icon.d.ts.map +1 -0
  14. package/dist/report-cup-icon.js +34 -0
  15. package/dist/report-cup-icon.js.map +1 -0
  16. package/dist/tool-tabs-registrations.js +10 -0
  17. package/dist/tool-tabs-registrations.js.map +1 -1
  18. package/package.json +3 -3
  19. package/dist/__tests__/catalog-provenance.test.d.ts +0 -11
  20. package/dist/__tests__/catalog-provenance.test.d.ts.map +0 -1
  21. package/dist/__tests__/catalog-provenance.test.js +0 -112
  22. package/dist/__tests__/catalog-provenance.test.js.map +0 -1
  23. package/dist/__tests__/coupling-attribution.test.d.ts +0 -9
  24. package/dist/__tests__/coupling-attribution.test.d.ts.map +0 -1
  25. package/dist/__tests__/coupling-attribution.test.js +0 -95
  26. package/dist/__tests__/coupling-attribution.test.js.map +0 -1
  27. package/dist/__tests__/dashboard-bundle-weight.test.d.ts +0 -23
  28. package/dist/__tests__/dashboard-bundle-weight.test.d.ts.map +0 -1
  29. package/dist/__tests__/dashboard-bundle-weight.test.js +0 -80
  30. package/dist/__tests__/dashboard-bundle-weight.test.js.map +0 -1
  31. package/dist/__tests__/dashboard-cell-containment.test.d.ts +0 -2
  32. package/dist/__tests__/dashboard-cell-containment.test.d.ts.map +0 -1
  33. package/dist/__tests__/dashboard-cell-containment.test.js +0 -52
  34. package/dist/__tests__/dashboard-cell-containment.test.js.map +0 -1
  35. package/dist/__tests__/dashboard-cytoscape-vendor.test.d.ts +0 -10
  36. package/dist/__tests__/dashboard-cytoscape-vendor.test.d.ts.map +0 -1
  37. package/dist/__tests__/dashboard-cytoscape-vendor.test.js +0 -40
  38. package/dist/__tests__/dashboard-cytoscape-vendor.test.js.map +0 -1
  39. package/dist/__tests__/dashboard-editor-link.test.d.ts +0 -14
  40. package/dist/__tests__/dashboard-editor-link.test.d.ts.map +0 -1
  41. package/dist/__tests__/dashboard-editor-link.test.js +0 -87
  42. package/dist/__tests__/dashboard-editor-link.test.js.map +0 -1
  43. package/dist/__tests__/dashboard-el.test.d.ts +0 -18
  44. package/dist/__tests__/dashboard-el.test.d.ts.map +0 -1
  45. package/dist/__tests__/dashboard-el.test.js +0 -90
  46. package/dist/__tests__/dashboard-el.test.js.map +0 -1
  47. package/dist/__tests__/dashboard-filters.test.d.ts +0 -9
  48. package/dist/__tests__/dashboard-filters.test.d.ts.map +0 -1
  49. package/dist/__tests__/dashboard-filters.test.js +0 -87
  50. package/dist/__tests__/dashboard-filters.test.js.map +0 -1
  51. package/dist/__tests__/dashboard-function-card-singleton.test.d.ts +0 -9
  52. package/dist/__tests__/dashboard-function-card-singleton.test.d.ts.map +0 -1
  53. package/dist/__tests__/dashboard-function-card-singleton.test.js +0 -75
  54. package/dist/__tests__/dashboard-function-card-singleton.test.js.map +0 -1
  55. package/dist/__tests__/dashboard-function-card.test.d.ts +0 -10
  56. package/dist/__tests__/dashboard-function-card.test.d.ts.map +0 -1
  57. package/dist/__tests__/dashboard-function-card.test.js +0 -439
  58. package/dist/__tests__/dashboard-function-card.test.js.map +0 -1
  59. package/dist/__tests__/dashboard-function-row.test.d.ts +0 -11
  60. package/dist/__tests__/dashboard-function-row.test.d.ts.map +0 -1
  61. package/dist/__tests__/dashboard-function-row.test.js +0 -102
  62. package/dist/__tests__/dashboard-function-row.test.js.map +0 -1
  63. package/dist/__tests__/dashboard-generator-graph-catalog.test.d.ts +0 -9
  64. package/dist/__tests__/dashboard-generator-graph-catalog.test.d.ts.map +0 -1
  65. package/dist/__tests__/dashboard-generator-graph-catalog.test.js +0 -77
  66. package/dist/__tests__/dashboard-generator-graph-catalog.test.js.map +0 -1
  67. package/dist/__tests__/dashboard-graph-offline.integration.test.d.ts +0 -13
  68. package/dist/__tests__/dashboard-graph-offline.integration.test.d.ts.map +0 -1
  69. package/dist/__tests__/dashboard-graph-offline.integration.test.js +0 -57
  70. package/dist/__tests__/dashboard-graph-offline.integration.test.js.map +0 -1
  71. package/dist/__tests__/dashboard-graph-scc.test.d.ts +0 -17
  72. package/dist/__tests__/dashboard-graph-scc.test.d.ts.map +0 -1
  73. package/dist/__tests__/dashboard-graph-scc.test.js +0 -89
  74. package/dist/__tests__/dashboard-graph-scc.test.js.map +0 -1
  75. package/dist/__tests__/dashboard-graph-view-model.test.d.ts +0 -12
  76. package/dist/__tests__/dashboard-graph-view-model.test.d.ts.map +0 -1
  77. package/dist/__tests__/dashboard-graph-view-model.test.js +0 -331
  78. package/dist/__tests__/dashboard-graph-view-model.test.js.map +0 -1
  79. package/dist/__tests__/dashboard-help-drawer.test.d.ts +0 -9
  80. package/dist/__tests__/dashboard-help-drawer.test.d.ts.map +0 -1
  81. package/dist/__tests__/dashboard-help-drawer.test.js +0 -95
  82. package/dist/__tests__/dashboard-help-drawer.test.js.map +0 -1
  83. package/dist/__tests__/dashboard-html.test.d.ts +0 -2
  84. package/dist/__tests__/dashboard-html.test.d.ts.map +0 -1
  85. package/dist/__tests__/dashboard-html.test.js +0 -169
  86. package/dist/__tests__/dashboard-html.test.js.map +0 -1
  87. package/dist/__tests__/dashboard-indexes.test.d.ts +0 -11
  88. package/dist/__tests__/dashboard-indexes.test.d.ts.map +0 -1
  89. package/dist/__tests__/dashboard-indexes.test.js +0 -214
  90. package/dist/__tests__/dashboard-indexes.test.js.map +0 -1
  91. package/dist/__tests__/dashboard-pagination.test.d.ts +0 -15
  92. package/dist/__tests__/dashboard-pagination.test.d.ts.map +0 -1
  93. package/dist/__tests__/dashboard-pagination.test.js +0 -140
  94. package/dist/__tests__/dashboard-pagination.test.js.map +0 -1
  95. package/dist/__tests__/dashboard-path-utils.test.d.ts +0 -13
  96. package/dist/__tests__/dashboard-path-utils.test.d.ts.map +0 -1
  97. package/dist/__tests__/dashboard-path-utils.test.js +0 -62
  98. package/dist/__tests__/dashboard-path-utils.test.js.map +0 -1
  99. package/dist/__tests__/dashboard-search.test.d.ts +0 -10
  100. package/dist/__tests__/dashboard-search.test.d.ts.map +0 -1
  101. package/dist/__tests__/dashboard-search.test.js +0 -52
  102. package/dist/__tests__/dashboard-search.test.js.map +0 -1
  103. package/dist/__tests__/dashboard-sessions.test.d.ts +0 -14
  104. package/dist/__tests__/dashboard-sessions.test.d.ts.map +0 -1
  105. package/dist/__tests__/dashboard-sessions.test.js +0 -332
  106. package/dist/__tests__/dashboard-sessions.test.js.map +0 -1
  107. package/dist/__tests__/dashboard-trace.test.d.ts +0 -16
  108. package/dist/__tests__/dashboard-trace.test.d.ts.map +0 -1
  109. package/dist/__tests__/dashboard-trace.test.js +0 -170
  110. package/dist/__tests__/dashboard-trace.test.js.map +0 -1
  111. package/dist/__tests__/dashboard-validation.integration.test.d.ts +0 -14
  112. package/dist/__tests__/dashboard-validation.integration.test.d.ts.map +0 -1
  113. package/dist/__tests__/dashboard-validation.integration.test.js +0 -221
  114. package/dist/__tests__/dashboard-validation.integration.test.js.map +0 -1
  115. package/dist/__tests__/dashboard-view-conformance.test.d.ts +0 -12
  116. package/dist/__tests__/dashboard-view-conformance.test.d.ts.map +0 -1
  117. package/dist/__tests__/dashboard-view-conformance.test.js +0 -52
  118. package/dist/__tests__/dashboard-view-conformance.test.js.map +0 -1
  119. package/dist/__tests__/dashboard-view-coupling.test.d.ts +0 -7
  120. package/dist/__tests__/dashboard-view-coupling.test.d.ts.map +0 -1
  121. package/dist/__tests__/dashboard-view-coupling.test.js +0 -360
  122. package/dist/__tests__/dashboard-view-coupling.test.js.map +0 -1
  123. package/dist/__tests__/dashboard-view-distribution.test.d.ts +0 -10
  124. package/dist/__tests__/dashboard-view-distribution.test.d.ts.map +0 -1
  125. package/dist/__tests__/dashboard-view-distribution.test.js +0 -249
  126. package/dist/__tests__/dashboard-view-distribution.test.js.map +0 -1
  127. package/dist/__tests__/dashboard-view-graph.test.d.ts +0 -13
  128. package/dist/__tests__/dashboard-view-graph.test.d.ts.map +0 -1
  129. package/dist/__tests__/dashboard-view-graph.test.js +0 -299
  130. package/dist/__tests__/dashboard-view-graph.test.js.map +0 -1
  131. package/dist/__tests__/dashboard-view-template.test.d.ts +0 -20
  132. package/dist/__tests__/dashboard-view-template.test.d.ts.map +0 -1
  133. package/dist/__tests__/dashboard-view-template.test.js +0 -206
  134. package/dist/__tests__/dashboard-view-template.test.js.map +0 -1
  135. package/dist/__tests__/dashboard.test.d.ts +0 -2
  136. package/dist/__tests__/dashboard.test.d.ts.map +0 -1
  137. package/dist/__tests__/dashboard.test.js +0 -129
  138. package/dist/__tests__/dashboard.test.js.map +0 -1
  139. package/dist/__tests__/graph-tab.test.d.ts +0 -10
  140. package/dist/__tests__/graph-tab.test.d.ts.map +0 -1
  141. package/dist/__tests__/graph-tab.test.js +0 -78
  142. package/dist/__tests__/graph-tab.test.js.map +0 -1
  143. package/dist/client/el.d.ts +0 -17
  144. package/dist/client/el.d.ts.map +0 -1
  145. package/dist/client/el.js +0 -36
  146. package/dist/client/el.js.map +0 -1
  147. package/dist/code-paths/__tests__/views-registry.test.d.ts +0 -18
  148. package/dist/code-paths/__tests__/views-registry.test.d.ts.map +0 -1
  149. package/dist/code-paths/__tests__/views-registry.test.js +0 -41
  150. package/dist/code-paths/__tests__/views-registry.test.js.map +0 -1
@@ -1,332 +0,0 @@
1
- /// <reference lib="dom" />
2
- /**
3
- * @vitest-environment jsdom
4
- *
5
- * Shared session table + session-detail renderer tests
6
- * (`dashboardSessionsJs`). Covers the three payload states the renderer
7
- * must distinguish:
8
- * 1. fitness payload → per-check detail, "Check" column.
9
- * 2. graph payload → per-rule detail, "Rule" column (same structural
10
- * shape, tool-specific label).
11
- * 3. no payload → explicit "No detail recorded" instead of a
12
- * silent empty table (covers pre-payload-split sessions).
13
- */
14
- import { describe, expect, it, beforeEach } from 'vitest';
15
- import { DASHBOARD_CLIENT_BUNDLE } from '../client-bundle.generated.js';
16
- function loadEnv() {
17
- // The bundle now contains every renderer, so loading it runs each module's
18
- // top-level code — including checks.ts's `computeCheckStats()`, which reads the
19
- // page-global `sessions` at load. Define the data globals the generated page's
20
- // <script> const block would provide before the bundle runs.
21
- const dataPrelude = `var sessions = [];\n`;
22
- const tail = `
23
- return {
24
- render: function(toolSessions) {
25
- const panel = document.createElement('div');
26
- renderSessionTable(panel, toolSessions, 'var(--accent)');
27
- return panel;
28
- },
29
- };
30
- `;
31
- // eslint-disable-next-line @typescript-eslint/no-implied-eval, sonarjs/code-eval -- Trusted source: our own emitted dashboard JS.
32
- const factory = new Function(
33
- // `renderSessionTable` (with `el`, the paginators and `makeSortable`) now all
34
- // live in the bundled client modules and are exposed as page globals; the
35
- // session table is built entirely from the bundle.
36
- dataPrelude + DASHBOARD_CLIENT_BUNDLE + '\n' + tail);
37
- return factory();
38
- }
39
- function makeSession(over = {}) {
40
- return {
41
- id: 's1',
42
- tool: 'fit',
43
- startedAt: '2026-05-29T10:30:00.000Z',
44
- completedAt: '2026-05-29T10:30:00.000Z',
45
- cwd: '/repo',
46
- recipe: 'default',
47
- score: 100,
48
- passed: true,
49
- durationMs: 1200,
50
- ...over,
51
- };
52
- }
53
- /** The detail panel is the `.section` whose heading starts "Session Detail". */
54
- function detailSection(panel) {
55
- const sections = [...panel.querySelectorAll('.section')];
56
- return (sections.find((s) => s.querySelector('h3')?.textContent?.startsWith('Session Detail')) ?? null);
57
- }
58
- beforeEach(() => {
59
- document.body.innerHTML = '';
60
- });
61
- describe('renderSessionTable / renderDetail', () => {
62
- it('renders per-check detail with a "Check" column for a fitness payload', () => {
63
- const panel = loadEnv().render([
64
- makeSession({
65
- tool: 'fit',
66
- payload: {
67
- summary: { total: 1, passed: 0, failed: 1, errors: 1, warnings: 0 },
68
- checks: [
69
- {
70
- checkSlug: 'no-console-log',
71
- passed: false,
72
- violationCount: 1,
73
- durationMs: 5,
74
- findings: [
75
- {
76
- ruleId: 'no-console-log',
77
- message: 'console.log left in',
78
- severity: 'error',
79
- filePath: 'src/a.ts',
80
- line: 3,
81
- },
82
- ],
83
- },
84
- ],
85
- },
86
- }),
87
- ]);
88
- const detail = detailSection(panel);
89
- expect(detail).not.toBeNull();
90
- const headers = [...detail.querySelectorAll('thead th')].map((th) => th.textContent);
91
- expect(headers).toContain('Check');
92
- expect(headers).not.toContain('Rule');
93
- // The check's slug renders in a row.
94
- expect(detail.textContent).toContain('no-console-log');
95
- });
96
- it('renders per-rule detail with a "Rule" column for a graph payload', () => {
97
- const panel = loadEnv().render([
98
- makeSession({
99
- id: 'g1',
100
- tool: 'graph',
101
- recipe: 'graph',
102
- payload: {
103
- summary: { total: 1, passed: 1, failed: 0, errors: 0, warnings: 2 },
104
- checks: [
105
- {
106
- checkSlug: 'graph:duplicated-function-body',
107
- passed: true,
108
- violationCount: 2,
109
- durationMs: 0,
110
- findings: [
111
- {
112
- ruleId: 'graph:duplicated-function-body',
113
- message: 'dup body',
114
- severity: 'warning',
115
- filePath: 'src/x.ts',
116
- line: 1,
117
- },
118
- {
119
- ruleId: 'graph:duplicated-function-body',
120
- message: 'dup body',
121
- severity: 'warning',
122
- filePath: 'src/y.ts',
123
- line: 9,
124
- },
125
- ],
126
- },
127
- ],
128
- },
129
- }),
130
- ]);
131
- const detail = detailSection(panel);
132
- expect(detail).not.toBeNull();
133
- const headers = [...detail.querySelectorAll('thead th')].map((th) => th.textContent);
134
- expect(headers).toContain('Rule');
135
- expect(headers).not.toContain('Check');
136
- expect(detail.textContent).toContain('graph:duplicated-function-body');
137
- });
138
- it('shows an explicit "No detail recorded" message when a session has no payload', () => {
139
- const panel = loadEnv().render([makeSession({ payload: undefined })]);
140
- const detail = detailSection(panel);
141
- expect(detail).not.toBeNull();
142
- expect(detail.textContent).toContain('No detail recorded for this session.');
143
- // No findings/detail table when there is no payload.
144
- expect(detail.querySelector('table.data-table')).toBeNull();
145
- });
146
- it('omits the per-rule Duration column for a graph session', () => {
147
- const panel = loadEnv().render([
148
- makeSession({
149
- id: 'g2',
150
- tool: 'graph',
151
- recipe: 'graph',
152
- payload: {
153
- summary: { total: 1, passed: 1, failed: 0, errors: 0, warnings: 1 },
154
- checks: [
155
- {
156
- checkSlug: 'graph:cycle',
157
- passed: true,
158
- violationCount: 1,
159
- durationMs: 0,
160
- findings: [
161
- {
162
- ruleId: 'graph:cycle',
163
- message: 'cycle',
164
- severity: 'warning',
165
- filePath: 'src/x.ts',
166
- line: 1,
167
- metadata: { sccSize: 4 },
168
- },
169
- ],
170
- },
171
- ],
172
- },
173
- }),
174
- ]);
175
- const detail = detailSection(panel);
176
- const headers = [...detail.querySelectorAll('thead th')].map((th) => th.textContent);
177
- expect(headers).not.toContain('Duration');
178
- });
179
- it('keeps the per-check Duration column for a fitness session', () => {
180
- const panel = loadEnv().render([
181
- makeSession({
182
- tool: 'fit',
183
- payload: {
184
- summary: { total: 1, passed: 0, failed: 1, errors: 1, warnings: 0 },
185
- checks: [
186
- {
187
- checkSlug: 'no-console-log',
188
- passed: false,
189
- violationCount: 1,
190
- durationMs: 5,
191
- findings: [
192
- {
193
- ruleId: 'no-console-log',
194
- message: 'm',
195
- severity: 'error',
196
- filePath: 'src/a.ts',
197
- line: 3,
198
- },
199
- ],
200
- },
201
- ],
202
- },
203
- }),
204
- ]);
205
- const detail = detailSection(panel);
206
- const headers = [...detail.querySelectorAll('thead th')].map((th) => th.textContent);
207
- expect(headers).toContain('Duration');
208
- });
209
- it('renders the per-rule metric column (Lines from metadata.bodyLines) for graph:large-function, dropping Message', () => {
210
- const panel = loadEnv().render([
211
- makeSession({
212
- id: 'g3',
213
- tool: 'graph',
214
- recipe: 'graph',
215
- payload: {
216
- summary: { total: 1, passed: 0, failed: 1, errors: 1, warnings: 0 },
217
- checks: [
218
- {
219
- checkSlug: 'graph:large-function',
220
- passed: false,
221
- violationCount: 1,
222
- durationMs: 0,
223
- findings: [
224
- {
225
- ruleId: 'graph:large-function',
226
- message: 'foo is 321 lines long.',
227
- severity: 'error',
228
- filePath: 'src/big.ts',
229
- line: 10,
230
- metadata: { bodyLines: 321 },
231
- },
232
- ],
233
- },
234
- ],
235
- },
236
- }),
237
- ]);
238
- const detail = detailSection(panel);
239
- // Expand the rule row to reveal the findings table.
240
- detail.querySelector('tbody tr.clickable').click();
241
- const findingsHeaders = [...detail.querySelectorAll('.expander-content thead th')].map((th) => th.textContent);
242
- expect(findingsHeaders).toEqual(['Severity', 'File', 'Lines', 'Suggestion']);
243
- expect(detail.querySelector('.expander-content').textContent).toContain('321');
244
- // Message column is dropped — the verbose message must not appear.
245
- expect(detail.querySelector('.expander-content').textContent).not.toContain('is 321 lines long');
246
- });
247
- it('falls back to a dash when the metric metadata is missing', () => {
248
- const panel = loadEnv().render([
249
- makeSession({
250
- id: 'g4',
251
- tool: 'graph',
252
- recipe: 'graph',
253
- payload: {
254
- summary: { total: 1, passed: 0, failed: 1, errors: 1, warnings: 0 },
255
- checks: [
256
- {
257
- checkSlug: 'graph:wide-function',
258
- passed: false,
259
- violationCount: 1,
260
- durationMs: 0,
261
- findings: [
262
- {
263
- ruleId: 'graph:wide-function',
264
- message: 'wide',
265
- severity: 'error',
266
- filePath: 'src/w.ts',
267
- line: 2,
268
- },
269
- ],
270
- },
271
- ],
272
- },
273
- }),
274
- ]);
275
- const detail = detailSection(panel);
276
- detail.querySelector('tbody tr.clickable').click();
277
- const headers = [...detail.querySelectorAll('.expander-content thead th')].map((th) => th.textContent);
278
- expect(headers).toEqual(['Severity', 'File', 'Parameters', 'Suggestion']);
279
- // The Parameters cell shows the em-dash fallback.
280
- const cells = [...detail.querySelectorAll('.expander-content tbody td')].map((td) => td.textContent);
281
- expect(cells).toContain('—');
282
- });
283
- it('sorts findings within a rule errors-first', () => {
284
- const panel = loadEnv().render([
285
- makeSession({
286
- id: 'g5',
287
- tool: 'graph',
288
- recipe: 'graph',
289
- payload: {
290
- summary: { total: 1, passed: 0, failed: 1, errors: 1, warnings: 2 },
291
- checks: [
292
- {
293
- checkSlug: 'graph:duplicated-function-body',
294
- passed: false,
295
- violationCount: 3,
296
- durationMs: 0,
297
- findings: [
298
- {
299
- ruleId: 'graph:duplicated-function-body',
300
- message: 'w1',
301
- severity: 'warning',
302
- filePath: 'src/a.ts',
303
- line: 1,
304
- },
305
- {
306
- ruleId: 'graph:duplicated-function-body',
307
- message: 'e1',
308
- severity: 'error',
309
- filePath: 'src/b.ts',
310
- line: 2,
311
- },
312
- {
313
- ruleId: 'graph:duplicated-function-body',
314
- message: 'w2',
315
- severity: 'warning',
316
- filePath: 'src/c.ts',
317
- line: 3,
318
- },
319
- ],
320
- },
321
- ],
322
- },
323
- }),
324
- ]);
325
- const detail = detailSection(panel);
326
- detail.querySelector('tbody tr.clickable').click();
327
- const sevs = [...detail.querySelectorAll('.expander-content tbody .finding-sev')].map((s) => s.textContent);
328
- expect(sevs[0]).toBe('error');
329
- expect(sevs.slice(1)).toEqual(['warning', 'warning']);
330
- });
331
- });
332
- //# sourceMappingURL=dashboard-sessions.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-sessions.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-sessions.test.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * @vitest-environment jsdom
3
- *
4
- * `traceFromEntry` BFS tests.
5
- *
6
- * `traceFromEntry` is a module-internal prelude helper in the typed client
7
- * bundle (L4) — NOT a page global. Its sole consumer is the Function Card's
8
- * "Trace from entry" action, so the test drives it through that public surface:
9
- * boot the bundle (which exposes `openFunctionCard` / `buildIndexes` as page
10
- * globals), open a card, click "Trace from entry", and read the rendered
11
- * `.fc-trace-result` path. `var sessions = []` / `var EDITOR_PROTOCOL = null`
12
- * satisfy the bundle's load-time reads; `graphCatalog` / `graphIndexes` are the
13
- * page globals the card reads.
14
- */
15
- export {};
16
- //# sourceMappingURL=dashboard-trace.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-trace.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-trace.test.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG"}
@@ -1,170 +0,0 @@
1
- /// <reference lib="dom" />
2
- /**
3
- * @vitest-environment jsdom
4
- *
5
- * `traceFromEntry` BFS tests.
6
- *
7
- * `traceFromEntry` is a module-internal prelude helper in the typed client
8
- * bundle (L4) — NOT a page global. Its sole consumer is the Function Card's
9
- * "Trace from entry" action, so the test drives it through that public surface:
10
- * boot the bundle (which exposes `openFunctionCard` / `buildIndexes` as page
11
- * globals), open a card, click "Trace from entry", and read the rendered
12
- * `.fc-trace-result` path. `var sessions = []` / `var EDITOR_PROTOCOL = null`
13
- * satisfy the bundle's load-time reads; `graphCatalog` / `graphIndexes` are the
14
- * page globals the card reads.
15
- */
16
- import { describe, expect, it, beforeEach } from 'vitest';
17
- import { DASHBOARD_CLIENT_BUNDLE } from '../client-bundle.generated.js';
18
- function boot(catalog) {
19
- const head = `
20
- var sessions = [];
21
- var EDITOR_PROTOCOL = null;
22
- var graphCatalog = null;
23
- var graphIndexes = null;
24
- `;
25
- const tail = `
26
- graphCatalog = ${JSON.stringify(catalog)};
27
- graphIndexes = buildIndexes(graphCatalog);
28
- globalThis.openFunctionCard = openFunctionCard;
29
- `;
30
- // eslint-disable-next-line @typescript-eslint/no-implied-eval, sonarjs/code-eval -- Trusted source: our own bundled dashboard JS.
31
- new Function(head + DASHBOARD_CLIENT_BUNDLE + tail).call(globalThis);
32
- }
33
- /** Open `targetHash`'s card, click "Trace from entry", return the rendered path's simpleNames. */
34
- function tracePath(catalog, targetHash) {
35
- document.body.innerHTML = '';
36
- boot(catalog);
37
- globalThis.openFunctionCard(targetHash);
38
- const overlay = document.querySelector('.function-card-overlay');
39
- if (!overlay)
40
- return null;
41
- const traceBtn = [...overlay.querySelectorAll('.fc-action')].find((b) => b.textContent === 'Trace from entry');
42
- if (!traceBtn)
43
- return null;
44
- traceBtn.dispatchEvent(new MouseEvent('click', { bubbles: true }));
45
- const result = overlay.querySelector('.fc-trace-result');
46
- if (!result)
47
- return null;
48
- if (result.querySelector('.empty'))
49
- return null;
50
- return [...result.querySelectorAll('li[data-body-hash]')].map((li) => li.dataset.bodyHash);
51
- }
52
- function makeOcc(over) {
53
- return {
54
- qualifiedName: over.simpleName,
55
- filePath: 'packages/x/src/x.ts',
56
- line: 1,
57
- column: 0,
58
- endLine: 5,
59
- kind: 'function-declaration',
60
- params: [],
61
- returnType: null,
62
- enclosingClass: null,
63
- decorators: [],
64
- visibility: 'exported',
65
- inTestFile: false,
66
- definedInGenerated: false,
67
- calls: [],
68
- ...over,
69
- };
70
- }
71
- beforeEach(() => {
72
- document.body.innerHTML = '';
73
- });
74
- describe('traceFromEntry (via the Function Card "Trace from entry" action)', () => {
75
- it('finds the shortest path from an entry to the target', () => {
76
- // entry (cli) → mid → target. Plus a longer path entry → a → b → mid.
77
- const cat = {
78
- version: '2.0',
79
- tool: 'graph',
80
- language: 'typescript',
81
- builtAt: 'now',
82
- functions: {
83
- entry: [
84
- makeOcc({
85
- bodyHash: 'he',
86
- simpleName: 'entry',
87
- filePath: 'packages/cli/src/index.ts',
88
- calls: [
89
- {
90
- to: ['hm', 'ha'],
91
- line: 1,
92
- column: 0,
93
- resolution: 'static',
94
- confidence: 'high',
95
- text: '...',
96
- },
97
- ],
98
- }),
99
- ],
100
- a: [
101
- makeOcc({
102
- bodyHash: 'ha',
103
- simpleName: 'a',
104
- calls: [
105
- {
106
- to: ['hb'],
107
- line: 1,
108
- column: 0,
109
- resolution: 'static',
110
- confidence: 'high',
111
- text: 'b()',
112
- },
113
- ],
114
- }),
115
- ],
116
- b: [
117
- makeOcc({
118
- bodyHash: 'hb',
119
- simpleName: 'b',
120
- calls: [
121
- {
122
- to: ['hm'],
123
- line: 1,
124
- column: 0,
125
- resolution: 'static',
126
- confidence: 'high',
127
- text: 'mid()',
128
- },
129
- ],
130
- }),
131
- ],
132
- mid: [
133
- makeOcc({
134
- bodyHash: 'hm',
135
- simpleName: 'mid',
136
- calls: [
137
- {
138
- to: ['ht'],
139
- line: 1,
140
- column: 0,
141
- resolution: 'static',
142
- confidence: 'high',
143
- text: 'target()',
144
- },
145
- ],
146
- }),
147
- ],
148
- target: [makeOcc({ bodyHash: 'ht', simpleName: 'target' })],
149
- },
150
- };
151
- expect(tracePath(cat, 'ht')).toEqual(['he', 'hm', 'ht']);
152
- });
153
- it('renders the empty state when no entry reaches the target', () => {
154
- const cat = {
155
- version: '2.0',
156
- tool: 'graph',
157
- language: 'typescript',
158
- builtAt: 'now',
159
- functions: {
160
- entry: [
161
- makeOcc({ bodyHash: 'he', simpleName: 'entry', filePath: 'packages/cli/src/index.ts' }),
162
- ],
163
- // 'target' is module-local with no callers reaching it from any entry.
164
- target: [makeOcc({ bodyHash: 'ht', simpleName: 'target', visibility: 'module-local' })],
165
- },
166
- };
167
- expect(tracePath(cat, 'ht')).toBeNull();
168
- });
169
- });
170
- //# sourceMappingURL=dashboard-trace.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-trace.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-trace.test.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * @vitest-environment jsdom
3
- *
4
- * Phase V — End-to-end validation against OpenSIP CLI's own
5
- * generated dashboard. Reads the live latest.html (produced by the
6
- * preceding `pnpm dashboard` run during workspace test bootstrap)
7
- * and exercises every view + the Function Card flow.
8
- *
9
- * Skipped when latest.html is missing or contains no graph catalog
10
- * (e.g. fresh checkout without a dogfood run). The harness can re-
11
- * run the dashboard CLI separately and re-execute this test.
12
- */
13
- export {};
14
- //# sourceMappingURL=dashboard-validation.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-validation.integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-validation.integration.test.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG"}