@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,80 +0,0 @@
1
- /**
2
- * Bundle-weight CI gate.
3
- *
4
- * The Graph view ships a vendored Cytoscape renderer (~482 KB) plus a
5
- * per-report view-model JSON blob. These assertions fail CI if either
6
- * grows past the Phase 0 budget, so a careless dependency bump or schema
7
- * bloat is caught before it lands in every generated report.
8
- *
9
- * The Visualization view's JS now lives in the typed client bundle (L4,
10
- * `DASHBOARD_CLIENT_BUNDLE`) rather than a standalone `dashboardViewGraphJs()`
11
- * emitter, so the "our own JS" budget is measured against the WHOLE client
12
- * bundle (every migrated module) rather than the single view's string.
13
- *
14
- * Budgets (Phase 0 §1 / §4.5):
15
- * - vendor bundle raw: <= 600 KB
16
- * - vendor + our client bundle: <= 700 KB (BUDGET_KB + 100, accounts for the
17
- * whole migrated client bundle)
18
- * - client bundle alone: < 200 KB (guards against a data blob sneaking
19
- * into our hand-written JS)
20
- * - view-model JSON per element: within the §4.5 per-node/edge estimates
21
- */
22
- import { readFileSync } from 'node:fs';
23
- import { dirname, join } from 'node:path';
24
- import { fileURLToPath } from 'node:url';
25
- import { describe, expect, it } from 'vitest';
26
- import { DASHBOARD_CLIENT_BUNDLE } from '../client-bundle.generated.js';
27
- import { dashboardCytoscapeVendorJs } from '../code-paths/cytoscape-vendor.js';
28
- import { projectCatalogToGraphViewModel } from '../code-paths/graph-view-model.js';
29
- /** Phase 0 §1 raw-byte budget for the vendor bundle. */
30
- const BUDGET_KB = 600;
31
- const KB = 1024;
32
- const HERE = dirname(fileURLToPath(import.meta.url));
33
- function loadFixture() {
34
- const candidates = [
35
- join(HERE, 'fixtures', 'catalog-small.json'),
36
- join(HERE, '..', '..', 'src', '__tests__', 'fixtures', 'catalog-small.json'),
37
- ];
38
- for (const p of candidates) {
39
- try {
40
- return JSON.parse(readFileSync(p, 'utf8'));
41
- }
42
- catch {
43
- // next
44
- }
45
- }
46
- throw new Error('catalog-small.json fixture not found');
47
- }
48
- function size(s) {
49
- return Buffer.byteLength(s, 'utf8');
50
- }
51
- describe('bundle weight gate', () => {
52
- it('vendor bundle stays within the raw-byte budget', () => {
53
- const bytes = size(dashboardCytoscapeVendorJs());
54
- const kb = Math.round(bytes / KB);
55
- expect(bytes, `vendor bundle ${kb} KB exceeds ${BUDGET_KB} KB budget`).toBeLessThanOrEqual(BUDGET_KB * KB);
56
- });
57
- it('vendor + our client bundle together stay within budget + 100 KB', () => {
58
- const bytes = size(dashboardCytoscapeVendorJs()) + size(DASHBOARD_CLIENT_BUNDLE);
59
- const kb = Math.round(bytes / KB);
60
- const limit = (BUDGET_KB + 100) * KB;
61
- expect(bytes, `vendor + client bundle ${kb} KB exceeds ${BUDGET_KB + 100} KB budget`).toBeLessThanOrEqual(limit);
62
- });
63
- it('our client bundle is a small fraction of the vendor weight', () => {
64
- // Guard against our hand-written client JS ballooning (e.g. an accidental
65
- // inlined data blob). The whole migrated bundle is tens of KB, not hundreds.
66
- const bundleKb = size(DASHBOARD_CLIENT_BUNDLE) / KB;
67
- expect(bundleKb).toBeLessThan(200);
68
- });
69
- it('projected (package-level) view-model JSON stays within the per-node/edge byte budget', () => {
70
- const vm = projectCatalogToGraphViewModel(loadFixture());
71
- const bytes = size(JSON.stringify(vm));
72
- // Package nodes are slim ({id,label,totalCoupling,sccId}) and there are
73
- // few of them — fixed JSON overhead dominates at this scale, so the
74
- // per-element estimate carries a generous constant floor.
75
- const budget = Math.round((vm.nodes.length * 160 + vm.edges.length * 100) * 1.5) + 1024;
76
- const perNode = vm.nodes.length > 0 ? bytes / vm.nodes.length : 0;
77
- expect(bytes, `view-model ${bytes} B (~${Math.round(perNode)} B/node) exceeds ${budget} B budget`).toBeLessThan(budget);
78
- });
79
- });
80
- //# sourceMappingURL=dashboard-bundle-weight.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-bundle-weight.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-bundle-weight.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=dashboard-cell-containment.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-cell-containment.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-cell-containment.test.ts"],"names":[],"mappings":""}
@@ -1,52 +0,0 @@
1
- /**
2
- * Containment contract for `.data-table` cells.
3
- *
4
- * Long free-text columns (finding messages, file paths, and the code
5
- * snippets inside suggestions) used to overrun the card edge and bleed
6
- * past the page boundary, because the table default was
7
- * `white-space: nowrap` with no break behaviour. The fix flips the
8
- * BODY-cell default to wrap-and-break, with an explicit `.cell-nowrap`
9
- * opt-out for short metric columns.
10
- *
11
- * This guards the systemic invariant: no view can bleed horizontally
12
- * unless it deliberately opts a long-text cell out of wrapping.
13
- */
14
- import { describe, it, expect } from 'vitest';
15
- import { dashboardCss } from '../css.js';
16
- import { generateDashboardHtml } from '../generator.js';
17
- // Collapse whitespace so the assertions don't depend on formatting.
18
- const css = dashboardCss().replaceAll(/\s+/g, ' ');
19
- describe('data-table cell containment contract', () => {
20
- it('body cells wrap and break long unbreakable tokens by default', () => {
21
- expect(css).toContain('.data-table td { white-space: normal; overflow-wrap: anywhere; }');
22
- });
23
- it('exposes a .cell-nowrap opt-out for short metric columns', () => {
24
- expect(css).toContain('.data-table td.cell-nowrap { white-space: nowrap; }');
25
- });
26
- it('keeps header labels on a single line', () => {
27
- expect(css).toContain('.data-table th { white-space: nowrap; }');
28
- });
29
- it('does not re-introduce a blanket nowrap on body cells', () => {
30
- // The old footgun: a rule forcing every td onto one line. If this
31
- // reappears, free-text columns overflow again.
32
- expect(css).not.toContain('.data-table td, .data-table th { white-space: nowrap; }');
33
- });
34
- it('the session timestamp cell opts out via .cell-nowrap', () => {
35
- // Guards the view wiring: short, space-containing cells (timestamps)
36
- // must stay on one line under the wrap-by-default contract. The session /
37
- // overview renderers now live in the bundled, esbuild-emitted client modules
38
- // (L4) — the timestamp cell is `el('td', { class: 'cell-nowrap', … })`, so
39
- // match the key/value rather than the legacy single-quote spelling.
40
- const html = generateDashboardHtml({ sessions: [] });
41
- expect(html).toContain('class: "cell-nowrap"');
42
- });
43
- it('the coupling matrix (the one non-.data-table table) stays contained by its own scroll wrapper', () => {
44
- // The coupling grid deliberately opts out of the .data-table contract
45
- // (it is a wide 2D matrix, not free-text rows). Its containment relies
46
- // on .coupling-scroll bounding it to the card instead of bleeding past
47
- // the page. Pin that so the opt-out keeps its own safety net.
48
- expect(css).toContain('.coupling-scroll { overflow: auto;');
49
- expect(css).toContain('max-width: 100%;');
50
- });
51
- });
52
- //# sourceMappingURL=dashboard-cell-containment.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-cell-containment.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-cell-containment.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,oEAAoE;AACpE,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEnD,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,kEAAkE,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,qDAAqD,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,kEAAkE;QAClE,+CAA+C;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,yDAAyD,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,qEAAqE;QACrE,0EAA0E;QAC1E,6EAA6E;QAC7E,2EAA2E;QAC3E,oEAAoE;QACpE,MAAM,IAAI,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACvG,sEAAsE;QACtE,uEAAuE;QACvE,uEAAuE;QACvE,8DAA8D;QAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Vendored Cytoscape emitter — smoke + byte-size guard.
3
- *
4
- * The emitter reads the committed `src/vendor/cytoscape-bundle.js` blob
5
- * and returns it verbatim. These tests assert the version-stamp banner is
6
- * present, the renderer globals are declared, and the raw size stays
7
- * within the Phase 0 budget so a careless version bump fails CI.
8
- */
9
- export {};
10
- //# sourceMappingURL=dashboard-cytoscape-vendor.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-cytoscape-vendor.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-cytoscape-vendor.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,40 +0,0 @@
1
- /**
2
- * Vendored Cytoscape emitter — smoke + byte-size guard.
3
- *
4
- * The emitter reads the committed `src/vendor/cytoscape-bundle.js` blob
5
- * and returns it verbatim. These tests assert the version-stamp banner is
6
- * present, the renderer globals are declared, and the raw size stays
7
- * within the Phase 0 budget so a careless version bump fails CI.
8
- */
9
- import { describe, expect, it } from 'vitest';
10
- import { dashboardCytoscapeVendorJs } from '../code-paths/cytoscape-vendor.js';
11
- /** Phase 0 raw-byte budget (matches scripts/vendor-cytoscape.mjs). */
12
- const BUDGET_KB = 600;
13
- describe('dashboardCytoscapeVendorJs', () => {
14
- it('starts with the vendor version-stamp banner', () => {
15
- const js = dashboardCytoscapeVendorJs();
16
- expect(js.startsWith('/*')).toBe(true);
17
- expect(js).toContain('VENDORED — DO NOT EDIT BY HAND.');
18
- expect(js).toContain('cytoscape@');
19
- expect(js).toContain('cytoscape-dagre@');
20
- });
21
- it('declares the cytoscape + cytoscapeDagre UMD globals', () => {
22
- const js = dashboardCytoscapeVendorJs();
23
- // UMD wrappers assign the global via `root["cytoscape"]` / `root.cytoscape`.
24
- expect(js.includes('cytoscape')).toBe(true);
25
- expect(/cytoscapeDagre|cytoscape-dagre/.test(js)).toBe(true);
26
- });
27
- it('does not vendor a standalone dagre global (self-bundled by cytoscape-dagre)', () => {
28
- const js = dashboardCytoscapeVendorJs();
29
- // The banner documents the deliberate omission.
30
- expect(js).toContain('no standalone dagre is');
31
- });
32
- it('stays within the raw-byte budget', () => {
33
- const bytes = Buffer.byteLength(dashboardCytoscapeVendorJs(), 'utf8');
34
- expect(bytes).toBeLessThan(BUDGET_KB * 1024);
35
- });
36
- it('is deterministic across calls (cached)', () => {
37
- expect(dashboardCytoscapeVendorJs()).toBe(dashboardCytoscapeVendorJs());
38
- });
39
- });
40
- //# sourceMappingURL=dashboard-cytoscape-vendor.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-cytoscape-vendor.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-cytoscape-vendor.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAE/E,sEAAsE;AACtE,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,EAAE,GAAG,0BAA0B,EAAE,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QACxD,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,EAAE,GAAG,0BAA0B,EAAE,CAAC;QACxC,6EAA6E;QAC7E,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,gCAAgC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,EAAE,GAAG,0BAA0B,EAAE,CAAC;QACxC,gDAAgD;QAChD,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,0BAA0B,EAAE,EAAE,MAAM,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,14 +0,0 @@
1
- /**
2
- * @vitest-environment jsdom
3
- *
4
- * Editor deep-link URL generator tests.
5
- *
6
- * `editorLinkUrl` is a module-internal prelude helper in the typed client bundle
7
- * (L4) — NOT a page global. Its sole consumer is the Function Card's action row
8
- * (an "Open in editor" anchor when the URL resolves, a "Copy path" button
9
- * otherwise), so the test drives it through that public surface: define the
10
- * `EDITOR_PROTOCOL` page global, boot the bundle (which exposes `openFunctionCard`
11
- * / `buildIndexes`), open a card, and read the resulting anchor href.
12
- */
13
- export {};
14
- //# sourceMappingURL=dashboard-editor-link.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-editor-link.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-editor-link.test.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG"}
@@ -1,87 +0,0 @@
1
- /// <reference lib="dom" />
2
- /**
3
- * @vitest-environment jsdom
4
- *
5
- * Editor deep-link URL generator tests.
6
- *
7
- * `editorLinkUrl` is a module-internal prelude helper in the typed client bundle
8
- * (L4) — NOT a page global. Its sole consumer is the Function Card's action row
9
- * (an "Open in editor" anchor when the URL resolves, a "Copy path" button
10
- * otherwise), so the test drives it through that public surface: define the
11
- * `EDITOR_PROTOCOL` page global, boot the bundle (which exposes `openFunctionCard`
12
- * / `buildIndexes`), open a card, and read the resulting anchor href.
13
- */
14
- import { describe, expect, it, beforeEach } from 'vitest';
15
- import { DASHBOARD_CLIENT_BUNDLE } from '../client-bundle.generated.js';
16
- const CATALOG = {
17
- version: '2.0',
18
- tool: 'graph',
19
- language: 'typescript',
20
- builtAt: 'now',
21
- functions: {
22
- f: [
23
- {
24
- qualifiedName: 'f',
25
- simpleName: 'f',
26
- bodyHash: 'h1',
27
- filePath: 'packages/x/src/x.ts',
28
- line: 42,
29
- column: 0,
30
- endLine: 50,
31
- kind: 'function-declaration',
32
- params: [],
33
- returnType: null,
34
- enclosingClass: null,
35
- decorators: [],
36
- visibility: 'exported',
37
- inTestFile: false,
38
- definedInGenerated: false,
39
- calls: [],
40
- },
41
- ],
42
- },
43
- };
44
- /** Boot the bundle with the given EDITOR_PROTOCOL, open the card for h1, return its action anchor href (or null). */
45
- function editorHref(protocol, line = 42) {
46
- document.body.innerHTML = '';
47
- const protoSrc = protocol === null
48
- ? 'var EDITOR_PROTOCOL = null;'
49
- : 'var EDITOR_PROTOCOL = ' + JSON.stringify(protocol) + ';';
50
- const cat = {
51
- ...CATALOG,
52
- functions: {
53
- f: [{ ...CATALOG.functions.f[0], line }],
54
- },
55
- };
56
- const head = 'var sessions = [];\n' + protoSrc + '\nvar graphCatalog = null;\nvar graphIndexes = null;\n';
57
- const tail = `
58
- graphCatalog = ${JSON.stringify(cat)};
59
- graphIndexes = buildIndexes(graphCatalog);
60
- globalThis.openFunctionCard = openFunctionCard;
61
- `;
62
- // eslint-disable-next-line @typescript-eslint/no-implied-eval, sonarjs/code-eval -- Trusted source: our own bundled dashboard JS.
63
- new Function(head + DASHBOARD_CLIENT_BUNDLE + tail).call(globalThis);
64
- globalThis.openFunctionCard('h1');
65
- const anchor = document.querySelector('.fc-actions a.fc-action');
66
- return anchor ? anchor.getAttribute('href') : null;
67
- }
68
- beforeEach(() => {
69
- document.body.innerHTML = '';
70
- });
71
- describe('editorLinkUrl (via the Function Card action row)', () => {
72
- it('produces vscode://file/<path>:<line> for vscode', () => {
73
- expect(editorHref('vscode', 42)).toBe('vscode://file/packages/x/src/x.ts:42');
74
- });
75
- it('produces cursor://file/<path>:<line> for cursor', () => {
76
- expect(editorHref('cursor', 7)).toBe('cursor://file/packages/x/src/x.ts:7');
77
- });
78
- it('renders no editor anchor (Copy path fallback) when EDITOR_PROTOCOL is null', () => {
79
- expect(editorHref(null)).toBeNull();
80
- // The fallback is a Copy path button, not an anchor.
81
- expect(document.querySelector('.fc-actions button.fc-action')?.textContent).toBe('Copy path');
82
- });
83
- it('renders no editor anchor for an unrecognized protocol', () => {
84
- expect(editorHref('mystery')).toBeNull();
85
- });
86
- });
87
- //# sourceMappingURL=dashboard-editor-link.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-editor-link.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-editor-link.test.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * @vitest-environment jsdom
3
- *
4
- * `el(tag, attrs, children)` DOM-builder unit tests.
5
- *
6
- * Imports `el` DIRECTLY from `src/client/el.ts` (not via the eval'd client
7
- * bundle) so the call graph sees a real test→`el` edge: `el` is a high-blast
8
- * helper used across every client view, and exercising it here makes it
9
- * test-reachable (clears graph:high-blast-untested). The direct import also
10
- * type-checks the helper against DOM lib at the call site.
11
- *
12
- * Branch coverage: the tag, every special attribute key (`text`, `class`,
13
- * `on*` event handler, plain pass-through attribute), and every child shape
14
- * (string → text node, Node → appended, `null`/`undefined` → skipped, and the
15
- * '' empty-string child which is still appended).
16
- */
17
- export {};
18
- //# sourceMappingURL=dashboard-el.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-el.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-el.test.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG"}
@@ -1,90 +0,0 @@
1
- /// <reference lib="dom" />
2
- /**
3
- * @vitest-environment jsdom
4
- *
5
- * `el(tag, attrs, children)` DOM-builder unit tests.
6
- *
7
- * Imports `el` DIRECTLY from `src/client/el.ts` (not via the eval'd client
8
- * bundle) so the call graph sees a real test→`el` edge: `el` is a high-blast
9
- * helper used across every client view, and exercising it here makes it
10
- * test-reachable (clears graph:high-blast-untested). The direct import also
11
- * type-checks the helper against DOM lib at the call site.
12
- *
13
- * Branch coverage: the tag, every special attribute key (`text`, `class`,
14
- * `on*` event handler, plain pass-through attribute), and every child shape
15
- * (string → text node, Node → appended, `null`/`undefined` → skipped, and the
16
- * '' empty-string child which is still appended).
17
- */
18
- import { describe, expect, it } from 'vitest';
19
- import { el } from '../client/el.js';
20
- describe('el', () => {
21
- it('creates an element of the requested tag', () => {
22
- const node = el('section');
23
- expect(node.tagName).toBe('SECTION');
24
- expect(node.attributes.length).toBe(0);
25
- expect(node.childNodes.length).toBe(0);
26
- });
27
- it('sets textContent via the `text` key', () => {
28
- const node = el('span', { text: 'hello' });
29
- expect(node.textContent).toBe('hello');
30
- // `text` is a special key — it must NOT appear as a DOM attribute.
31
- expect(node.hasAttribute('text')).toBe(false);
32
- });
33
- it('sets className via the `class` key', () => {
34
- const node = el('div', { class: 'a b' });
35
- expect(node.className).toBe('a b');
36
- expect(node.hasAttribute('class')).toBe(true);
37
- });
38
- it('wires an `on*` key as an event listener', () => {
39
- let clicks = 0;
40
- const node = el('button', {
41
- onclick: () => {
42
- clicks++;
43
- },
44
- });
45
- // The handler is attached, not stored as an attribute.
46
- expect(node.hasAttribute('onclick')).toBe(false);
47
- node.dispatchEvent(new MouseEvent('click', { bubbles: true }));
48
- node.dispatchEvent(new MouseEvent('click', { bubbles: true }));
49
- expect(clicks).toBe(2);
50
- });
51
- it('passes any other key through to setAttribute', () => {
52
- const node = el('a', { href: '/x', 'data-body-hash': 'h1', 'aria-label': 'go' });
53
- expect(node.getAttribute('href')).toBe('/x');
54
- expect(node.dataset.bodyHash).toBe('h1');
55
- expect(node.getAttribute('aria-label')).toBe('go');
56
- });
57
- it('appends string children as text nodes', () => {
58
- const node = el('p', undefined, ['one', 'two']);
59
- expect(node.textContent).toBe('onetwo');
60
- expect(node.childNodes.length).toBe(2);
61
- expect(node.firstChild.nodeType).toBe(3 /* TEXT_NODE */);
62
- });
63
- it('appends Node children directly', () => {
64
- const child = el('strong', { text: 'bold' });
65
- const node = el('div', undefined, [child]);
66
- expect(node.childNodes.length).toBe(1);
67
- expect(node.firstChild).toBe(child);
68
- expect(node.querySelector('strong').textContent).toBe('bold');
69
- });
70
- it('skips null and undefined children', () => {
71
- const node = el('div', undefined, [null, undefined, 'kept', null]);
72
- expect(node.childNodes.length).toBe(1);
73
- expect(node.textContent).toBe('kept');
74
- });
75
- it('still appends an empty-string child (falsy but not null/undefined)', () => {
76
- const node = el('div', undefined, ['']);
77
- expect(node.childNodes.length).toBe(1);
78
- expect(node.firstChild.nodeType).toBe(3 /* TEXT_NODE */);
79
- expect(node.textContent).toBe('');
80
- });
81
- it('combines attrs and mixed children in one call', () => {
82
- const inner = el('em', { text: 'x' });
83
- const node = el('li', { class: 'item', 'data-id': '7' }, ['a', inner, null, 'b']);
84
- expect(node.className).toBe('item');
85
- expect(node.dataset.id).toBe('7');
86
- expect(node.childNodes.length).toBe(3);
87
- expect(node.textContent).toBe('axb');
88
- });
89
- });
90
- //# sourceMappingURL=dashboard-el.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-el.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-el.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * @vitest-environment jsdom
3
- *
4
- * Filter chip predicate tests. Exercises the per-row `passesFilter`
5
- * predicate (per-view filter behavior is asserted in each view's
6
- * own test file; this file covers the predicate shape).
7
- */
8
- export {};
9
- //# sourceMappingURL=dashboard-filters.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-filters.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-filters.test.ts"],"names":[],"mappings":"AACA;;;;;;GAMG"}
@@ -1,87 +0,0 @@
1
- /// <reference lib="dom" />
2
- /**
3
- * @vitest-environment jsdom
4
- *
5
- * Filter chip predicate tests. Exercises the per-row `passesFilter`
6
- * predicate (per-view filter behavior is asserted in each view's
7
- * own test file; this file covers the predicate shape).
8
- */
9
- import { describe, expect, it } from 'vitest';
10
- import { DASHBOARD_CLIENT_BUNDLE } from '../client-bundle.generated.js';
11
- function loadFilterEnv() {
12
- // `passesFilter` / `packageOfPath` now live in the typed client bundle (L4)
13
- // and are exposed as page globals; `var sessions = []` satisfies checks.ts's
14
- // load-time `computeCheckStats()` read.
15
- const tail = `
16
- return { passesFilter, packageOfPath };
17
- `;
18
- // eslint-disable-next-line @typescript-eslint/no-implied-eval, sonarjs/code-eval -- Trusted source: our own bundled dashboard JS.
19
- const factory = new Function('var sessions = [];\n' + DASHBOARD_CLIENT_BUNDLE + tail);
20
- return factory();
21
- }
22
- function makeOcc(over) {
23
- return {
24
- qualifiedName: over.simpleName,
25
- filePath: 'packages/contracts/src/x.ts',
26
- line: 1,
27
- column: 0,
28
- endLine: 5,
29
- kind: 'function-declaration',
30
- params: [],
31
- returnType: null,
32
- enclosingClass: null,
33
- decorators: [],
34
- visibility: 'exported',
35
- inTestFile: false,
36
- definedInGenerated: false,
37
- calls: [],
38
- ...over,
39
- };
40
- }
41
- describe('passesFilter (filter chip predicate)', () => {
42
- it('rejects test files by default (includeTests=false)', () => {
43
- const env = loadFilterEnv();
44
- const occ = makeOcc({ bodyHash: 'h', simpleName: 'f', inTestFile: true });
45
- const fs = { packages: new Set(), kinds: new Set(), includeTests: false };
46
- expect(env.passesFilter(occ, fs)).toBe(false);
47
- });
48
- it('accepts test files when includeTests=true', () => {
49
- const env = loadFilterEnv();
50
- const occ = makeOcc({ bodyHash: 'h', simpleName: 'f', inTestFile: true });
51
- const fs = { packages: new Set(), kinds: new Set(), includeTests: true };
52
- expect(env.passesFilter(occ, fs)).toBe(true);
53
- });
54
- it('rejects functions whose package is not in the active set (when set is non-empty)', () => {
55
- const env = loadFilterEnv();
56
- const occ = makeOcc({ bodyHash: 'h', simpleName: 'f', filePath: 'packages/cli/src/x.ts' });
57
- const fs = {
58
- packages: new Set(['contracts']),
59
- kinds: new Set(),
60
- includeTests: false,
61
- };
62
- expect(env.passesFilter(occ, fs)).toBe(false);
63
- });
64
- it('accepts functions whose package is in the active set', () => {
65
- const env = loadFilterEnv();
66
- const occ = makeOcc({ bodyHash: 'h', simpleName: 'f', filePath: 'packages/cli/src/x.ts' });
67
- const fs = { packages: new Set(['cli']), kinds: new Set(), includeTests: false };
68
- expect(env.passesFilter(occ, fs)).toBe(true);
69
- });
70
- it('rejects functions whose kind is not in the active kinds set', () => {
71
- const env = loadFilterEnv();
72
- const occ = makeOcc({ bodyHash: 'h', simpleName: 'f', kind: 'arrow' });
73
- const fs = {
74
- packages: new Set(),
75
- kinds: new Set(['method']),
76
- includeTests: false,
77
- };
78
- expect(env.passesFilter(occ, fs)).toBe(false);
79
- });
80
- it('empty packages set means "all allowed"', () => {
81
- const env = loadFilterEnv();
82
- const occ = makeOcc({ bodyHash: 'h', simpleName: 'f', filePath: 'packages/anywhere/src/x.ts' });
83
- const fs = { packages: new Set(), kinds: new Set(), includeTests: false };
84
- expect(env.passesFilter(occ, fs)).toBe(true);
85
- });
86
- });
87
- //# sourceMappingURL=dashboard-filters.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-filters.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-filters.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * @vitest-environment jsdom
3
- *
4
- * §10.2 invariant: at most one .function-card-overlay element exists
5
- * in the DOM at any moment, even when opening cards in rapid
6
- * succession.
7
- */
8
- export {};
9
- //# sourceMappingURL=dashboard-function-card-singleton.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-function-card-singleton.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-function-card-singleton.test.ts"],"names":[],"mappings":"AACA;;;;;;GAMG"}