@opensip-cli/dashboard 0.1.7 → 0.1.9

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 (211) hide show
  1. package/README.md +2 -2
  2. package/dist/__tests__/catalog-provenance.test.js +6 -24
  3. package/dist/__tests__/catalog-provenance.test.js.map +1 -1
  4. package/dist/__tests__/coupling-attribution.test.js +10 -14
  5. package/dist/__tests__/coupling-attribution.test.js.map +1 -1
  6. package/dist/__tests__/dashboard-bundle-weight.test.d.ts +9 -2
  7. package/dist/__tests__/dashboard-bundle-weight.test.d.ts.map +1 -1
  8. package/dist/__tests__/dashboard-bundle-weight.test.js +19 -12
  9. package/dist/__tests__/dashboard-bundle-weight.test.js.map +1 -1
  10. package/dist/__tests__/dashboard-cell-containment.test.js +5 -2
  11. package/dist/__tests__/dashboard-cell-containment.test.js.map +1 -1
  12. package/dist/__tests__/dashboard-editor-link.test.d.ts +9 -0
  13. package/dist/__tests__/dashboard-editor-link.test.d.ts.map +1 -1
  14. package/dist/__tests__/dashboard-editor-link.test.js +72 -21
  15. package/dist/__tests__/dashboard-editor-link.test.js.map +1 -1
  16. package/dist/__tests__/dashboard-el.test.d.ts +18 -0
  17. package/dist/__tests__/dashboard-el.test.d.ts.map +1 -0
  18. package/dist/__tests__/dashboard-el.test.js +90 -0
  19. package/dist/__tests__/dashboard-el.test.js.map +1 -0
  20. package/dist/__tests__/dashboard-filters.test.js +6 -14
  21. package/dist/__tests__/dashboard-filters.test.js.map +1 -1
  22. package/dist/__tests__/dashboard-function-card-singleton.test.js +15 -27
  23. package/dist/__tests__/dashboard-function-card-singleton.test.js.map +1 -1
  24. package/dist/__tests__/dashboard-function-card.test.d.ts +4 -4
  25. package/dist/__tests__/dashboard-function-card.test.js +80 -44
  26. package/dist/__tests__/dashboard-function-card.test.js.map +1 -1
  27. package/dist/__tests__/dashboard-function-row.test.js +52 -51
  28. package/dist/__tests__/dashboard-function-row.test.js.map +1 -1
  29. package/dist/__tests__/dashboard-generator-graph-catalog.test.js +3 -1
  30. package/dist/__tests__/dashboard-generator-graph-catalog.test.js.map +1 -1
  31. package/dist/__tests__/dashboard-graph-offline.integration.test.js +3 -1
  32. package/dist/__tests__/dashboard-graph-offline.integration.test.js.map +1 -1
  33. package/dist/__tests__/dashboard-help-drawer.test.js +11 -17
  34. package/dist/__tests__/dashboard-help-drawer.test.js.map +1 -1
  35. package/dist/__tests__/dashboard-indexes.test.d.ts +6 -4
  36. package/dist/__tests__/dashboard-indexes.test.d.ts.map +1 -1
  37. package/dist/__tests__/dashboard-indexes.test.js +10 -7
  38. package/dist/__tests__/dashboard-indexes.test.js.map +1 -1
  39. package/dist/__tests__/dashboard-pagination.test.d.ts +15 -0
  40. package/dist/__tests__/dashboard-pagination.test.d.ts.map +1 -0
  41. package/dist/__tests__/dashboard-pagination.test.js +140 -0
  42. package/dist/__tests__/dashboard-pagination.test.js.map +1 -0
  43. package/dist/__tests__/dashboard-path-utils.test.d.ts +7 -0
  44. package/dist/__tests__/dashboard-path-utils.test.d.ts.map +1 -1
  45. package/dist/__tests__/dashboard-path-utils.test.js +11 -3
  46. package/dist/__tests__/dashboard-path-utils.test.js.map +1 -1
  47. package/dist/__tests__/dashboard-search.test.d.ts +5 -0
  48. package/dist/__tests__/dashboard-search.test.d.ts.map +1 -1
  49. package/dist/__tests__/dashboard-search.test.js +9 -3
  50. package/dist/__tests__/dashboard-search.test.js.map +1 -1
  51. package/dist/__tests__/dashboard-sessions.test.js +13 -11
  52. package/dist/__tests__/dashboard-sessions.test.js.map +1 -1
  53. package/dist/__tests__/dashboard-trace.test.d.ts +11 -0
  54. package/dist/__tests__/dashboard-trace.test.d.ts.map +1 -1
  55. package/dist/__tests__/dashboard-trace.test.js +55 -32
  56. package/dist/__tests__/dashboard-trace.test.js.map +1 -1
  57. package/dist/__tests__/dashboard-view-conformance.test.js +9 -15
  58. package/dist/__tests__/dashboard-view-conformance.test.js.map +1 -1
  59. package/dist/__tests__/dashboard-view-coupling.test.js +14 -35
  60. package/dist/__tests__/dashboard-view-coupling.test.js.map +1 -1
  61. package/dist/__tests__/dashboard-view-distribution.test.js +14 -37
  62. package/dist/__tests__/dashboard-view-distribution.test.js.map +1 -1
  63. package/dist/__tests__/dashboard-view-graph.test.js +29 -62
  64. package/dist/__tests__/dashboard-view-graph.test.js.map +1 -1
  65. package/dist/__tests__/dashboard-view-template.test.d.ts +13 -14
  66. package/dist/__tests__/dashboard-view-template.test.d.ts.map +1 -1
  67. package/dist/__tests__/dashboard-view-template.test.js +165 -112
  68. package/dist/__tests__/dashboard-view-template.test.js.map +1 -1
  69. package/dist/__tests__/graph-tab.test.js +4 -2
  70. package/dist/__tests__/graph-tab.test.js.map +1 -1
  71. package/dist/client/el.d.ts +17 -0
  72. package/dist/client/el.d.ts.map +1 -0
  73. package/dist/client/el.js +36 -0
  74. package/dist/client/el.js.map +1 -0
  75. package/dist/client-bundle.generated.d.ts +2 -0
  76. package/dist/client-bundle.generated.d.ts.map +1 -0
  77. package/dist/client-bundle.generated.js +3 -0
  78. package/dist/client-bundle.generated.js.map +1 -0
  79. package/dist/code-paths/__tests__/views-registry.test.d.ts +13 -8
  80. package/dist/code-paths/__tests__/views-registry.test.d.ts.map +1 -1
  81. package/dist/code-paths/__tests__/views-registry.test.js +27 -25
  82. package/dist/code-paths/__tests__/views-registry.test.js.map +1 -1
  83. package/dist/code-paths.d.ts +21 -62
  84. package/dist/code-paths.d.ts.map +1 -1
  85. package/dist/code-paths.js +24 -349
  86. package/dist/code-paths.js.map +1 -1
  87. package/dist/generator.d.ts +2 -0
  88. package/dist/generator.d.ts.map +1 -1
  89. package/dist/generator.js +28 -17
  90. package/dist/generator.js.map +1 -1
  91. package/package.json +5 -4
  92. package/dist/checks.d.ts +0 -7
  93. package/dist/checks.d.ts.map +0 -1
  94. package/dist/checks.js +0 -283
  95. package/dist/checks.js.map +0 -1
  96. package/dist/code-paths/catalog-provenance.d.ts +0 -22
  97. package/dist/code-paths/catalog-provenance.d.ts.map +0 -1
  98. package/dist/code-paths/catalog-provenance.js +0 -108
  99. package/dist/code-paths/catalog-provenance.js.map +0 -1
  100. package/dist/code-paths/catalog-recipes-tables.d.ts +0 -11
  101. package/dist/code-paths/catalog-recipes-tables.d.ts.map +0 -1
  102. package/dist/code-paths/catalog-recipes-tables.js +0 -86
  103. package/dist/code-paths/catalog-recipes-tables.js.map +0 -1
  104. package/dist/code-paths/editor-link.d.ts +0 -10
  105. package/dist/code-paths/editor-link.d.ts.map +0 -1
  106. package/dist/code-paths/editor-link.js +0 -20
  107. package/dist/code-paths/editor-link.js.map +0 -1
  108. package/dist/code-paths/filters.d.ts +0 -19
  109. package/dist/code-paths/filters.d.ts.map +0 -1
  110. package/dist/code-paths/filters.js +0 -47
  111. package/dist/code-paths/filters.js.map +0 -1
  112. package/dist/code-paths/function-card.d.ts +0 -15
  113. package/dist/code-paths/function-card.d.ts.map +0 -1
  114. package/dist/code-paths/function-card.js +0 -169
  115. package/dist/code-paths/function-card.js.map +0 -1
  116. package/dist/code-paths/function-row.d.ts +0 -17
  117. package/dist/code-paths/function-row.d.ts.map +0 -1
  118. package/dist/code-paths/function-row.js +0 -77
  119. package/dist/code-paths/function-row.js.map +0 -1
  120. package/dist/code-paths/graph-controls.d.ts +0 -27
  121. package/dist/code-paths/graph-controls.d.ts.map +0 -1
  122. package/dist/code-paths/graph-controls.js +0 -257
  123. package/dist/code-paths/graph-controls.js.map +0 -1
  124. package/dist/code-paths/graph-stylesheet.d.ts +0 -22
  125. package/dist/code-paths/graph-stylesheet.d.ts.map +0 -1
  126. package/dist/code-paths/graph-stylesheet.js +0 -121
  127. package/dist/code-paths/graph-stylesheet.js.map +0 -1
  128. package/dist/code-paths/help-drawer.d.ts +0 -18
  129. package/dist/code-paths/help-drawer.d.ts.map +0 -1
  130. package/dist/code-paths/help-drawer.js +0 -54
  131. package/dist/code-paths/help-drawer.js.map +0 -1
  132. package/dist/code-paths/indexes.d.ts +0 -28
  133. package/dist/code-paths/indexes.d.ts.map +0 -1
  134. package/dist/code-paths/indexes.js +0 -97
  135. package/dist/code-paths/indexes.js.map +0 -1
  136. package/dist/code-paths/path-utils.d.ts +0 -15
  137. package/dist/code-paths/path-utils.d.ts.map +0 -1
  138. package/dist/code-paths/path-utils.js +0 -47
  139. package/dist/code-paths/path-utils.js.map +0 -1
  140. package/dist/code-paths/search.d.ts +0 -14
  141. package/dist/code-paths/search.d.ts.map +0 -1
  142. package/dist/code-paths/search.js +0 -54
  143. package/dist/code-paths/search.js.map +0 -1
  144. package/dist/code-paths/trace.d.ts +0 -11
  145. package/dist/code-paths/trace.d.ts.map +0 -1
  146. package/dist/code-paths/trace.js +0 -60
  147. package/dist/code-paths/trace.js.map +0 -1
  148. package/dist/code-paths/view-coupling.d.ts +0 -22
  149. package/dist/code-paths/view-coupling.d.ts.map +0 -1
  150. package/dist/code-paths/view-coupling.js +0 -218
  151. package/dist/code-paths/view-coupling.js.map +0 -1
  152. package/dist/code-paths/view-distribution.d.ts +0 -20
  153. package/dist/code-paths/view-distribution.d.ts.map +0 -1
  154. package/dist/code-paths/view-distribution.js +0 -82
  155. package/dist/code-paths/view-distribution.js.map +0 -1
  156. package/dist/code-paths/view-graph.d.ts +0 -35
  157. package/dist/code-paths/view-graph.d.ts.map +0 -1
  158. package/dist/code-paths/view-graph.js +0 -379
  159. package/dist/code-paths/view-graph.js.map +0 -1
  160. package/dist/code-paths/view-template.d.ts +0 -154
  161. package/dist/code-paths/view-template.d.ts.map +0 -1
  162. package/dist/code-paths/view-template.js +0 -218
  163. package/dist/code-paths/view-template.js.map +0 -1
  164. package/dist/code-paths/views-registry.d.ts +0 -13
  165. package/dist/code-paths/views-registry.d.ts.map +0 -1
  166. package/dist/code-paths/views-registry.js +0 -53
  167. package/dist/code-paths/views-registry.js.map +0 -1
  168. package/dist/overview.d.ts +0 -13
  169. package/dist/overview.d.ts.map +0 -1
  170. package/dist/overview.js +0 -91
  171. package/dist/overview.js.map +0 -1
  172. package/dist/recipes.d.ts +0 -6
  173. package/dist/recipes.d.ts.map +0 -1
  174. package/dist/recipes.js +0 -68
  175. package/dist/recipes.js.map +0 -1
  176. package/dist/sessions.d.ts +0 -6
  177. package/dist/sessions.d.ts.map +0 -1
  178. package/dist/sessions.js +0 -288
  179. package/dist/sessions.js.map +0 -1
  180. package/dist/shared/el.d.ts +0 -13
  181. package/dist/shared/el.d.ts.map +0 -1
  182. package/dist/shared/el.js +0 -27
  183. package/dist/shared/el.js.map +0 -1
  184. package/dist/shared/pagination.d.ts +0 -15
  185. package/dist/shared/pagination.d.ts.map +0 -1
  186. package/dist/shared/pagination.js +0 -113
  187. package/dist/shared/pagination.js.map +0 -1
  188. package/dist/shared/sortable.d.ts +0 -14
  189. package/dist/shared/sortable.d.ts.map +0 -1
  190. package/dist/shared/sortable.js +0 -101
  191. package/dist/shared/sortable.js.map +0 -1
  192. package/dist/shared/tab-activators.d.ts +0 -16
  193. package/dist/shared/tab-activators.d.ts.map +0 -1
  194. package/dist/shared/tab-activators.js +0 -33
  195. package/dist/shared/tab-activators.js.map +0 -1
  196. package/dist/shared/tab-bar.d.ts +0 -8
  197. package/dist/shared/tab-bar.d.ts.map +0 -1
  198. package/dist/shared/tab-bar.js +0 -20
  199. package/dist/shared/tab-bar.js.map +0 -1
  200. package/dist/shared.d.ts +0 -26
  201. package/dist/shared.d.ts.map +0 -1
  202. package/dist/shared.js +0 -39
  203. package/dist/shared.js.map +0 -1
  204. package/dist/subtab-bar.d.ts +0 -23
  205. package/dist/subtab-bar.d.ts.map +0 -1
  206. package/dist/subtab-bar.js +0 -77
  207. package/dist/subtab-bar.js.map +0 -1
  208. package/dist/tool-tabs.d.ts +0 -12
  209. package/dist/tool-tabs.d.ts.map +0 -1
  210. package/dist/tool-tabs.js +0 -80
  211. package/dist/tool-tabs.js.map +0 -1
package/README.md CHANGED
@@ -23,8 +23,8 @@ This package is published for the CLI and advanced plugin authors; most users sh
23
23
  ## Documentation
24
24
 
25
25
  - 📚 Project docs: https://opensip.ai/docs/opensip-cli/
26
- - 🧭 Package catalog (what every package does): https://github.com/opensip-ai/opensip-cli/blob/v0.1.7/docs/public/70-reference/02-package-catalog.md
27
- - 📦 Source: https://github.com/opensip-ai/opensip-cli/tree/v0.1.7/packages/dashboard
26
+ - 🧭 Package catalog (what every package does): https://github.com/opensip-ai/opensip-cli/blob/v0.1.9/docs/public/70-reference/02-package-catalog.md
27
+ - 📦 Source: https://github.com/opensip-ai/opensip-cli/tree/v0.1.9/packages/dashboard
28
28
 
29
29
  ## License
30
30
 
@@ -9,32 +9,14 @@
9
9
  * broken. Values are derived from the embedded catalog itself (ground truth).
10
10
  */
11
11
  import { describe, expect, it, beforeEach } from 'vitest';
12
- import { dashboardCatalogProvenanceJs } from '../code-paths/catalog-provenance.js';
13
- import { dashboardFiltersJs } from '../code-paths/filters.js';
14
- import { dashboardIndexesJs } from '../code-paths/indexes.js';
15
- import { dashboardPathUtilsJs } from '../code-paths/path-utils.js';
12
+ import { DASHBOARD_CLIENT_BUNDLE } from '../client-bundle.generated.js';
16
13
  function loadEnv() {
17
- const elSrc = `
18
- function el(tag, attrs, children) {
19
- const e = document.createElement(tag);
20
- if (attrs) Object.entries(attrs).forEach(([k,v]) => {
21
- if (k === 'text') e.textContent = v;
22
- else if (k === 'class') e.className = v;
23
- else if (k.startsWith('on')) e.addEventListener(k.slice(2), v);
24
- else e.setAttribute(k, v);
25
- });
26
- if (children) children.forEach(c => { if (typeof c === 'string') e.appendChild(document.createTextNode(c)); else if (c) e.appendChild(c); });
27
- return e;
28
- }
29
- `;
14
+ // `renderCatalogProvenance` (with `el`, `packagesInCatalog`) now lives in the
15
+ // typed client bundle (L4) and is exposed as a page global; `var sessions = []`
16
+ // satisfies checks.ts's load-time `computeCheckStats()` read.
30
17
  const tail = `return { renderCatalogProvenance };`;
31
- // eslint-disable-next-line @typescript-eslint/no-implied-eval, sonarjs/code-eval -- Trusted source (our own emitted JS).
32
- const factory = new Function(elSrc +
33
- dashboardPathUtilsJs() +
34
- dashboardIndexesJs() +
35
- dashboardFiltersJs() +
36
- dashboardCatalogProvenanceJs() +
37
- tail);
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);
38
20
  return factory();
39
21
  }
40
22
  function occ(pkg, name) {
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-provenance.test.js","sourceRoot":"","sources":["../../src/__tests__/catalog-provenance.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog-provenance.test.js","sourceRoot":"","sources":["../../src/__tests__/catalog-provenance.test.ts"],"names":[],"mappings":"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"}
@@ -7,23 +7,19 @@
7
7
  * byBodyHash collision winner.
8
8
  */
9
9
  import { describe, expect, it } from 'vitest';
10
- import { dashboardIndexesJs } from '../code-paths/indexes.js';
11
- import { dashboardPathUtilsJs } from '../code-paths/path-utils.js';
12
- import { dashboardViewCouplingJs } from '../code-paths/view-coupling.js';
10
+ import { DASHBOARD_CLIENT_BUNDLE } from '../client-bundle.generated.js';
13
11
  function loadCouplingEnv() {
14
- // The coupling template runs `views.push(...)` at eval time and references
15
- // a handful of dashboard globals; stub the ones it touches at load.
16
- const stubs = `
17
- function el() { return { appendChild() {}, addEventListener() {}, removeChild() {}, firstChild: null }; }
18
- const views = [];
19
- function makeSectionHeading() { return el(); }
20
- function openFunctionCard() {}
21
- function closeFunctionCard() {}
22
- function passesFilter() { return true; }
12
+ // `buildIndexes` / `resolveCalleeOcc` (and the whole Code Paths panel + views)
13
+ // now live in the typed client bundle (L4) and are exposed as page globals.
14
+ // `var sessions = []` / `var EDITOR_PROTOCOL = null` satisfy the bundle's
15
+ // load-time reads.
16
+ const head = `
17
+ var sessions = [];
18
+ var EDITOR_PROTOCOL = null;
23
19
  `;
24
20
  const tail = `return { buildIndexes, resolveCalleeOcc };`;
25
- // eslint-disable-next-line @typescript-eslint/no-implied-eval, sonarjs/code-eval -- Trusted, in-repo emitted source.
26
- const factory = new Function(stubs + dashboardPathUtilsJs() + dashboardIndexesJs() + dashboardViewCouplingJs() + tail);
21
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval, sonarjs/code-eval -- Trusted source: our own bundled dashboard JS.
22
+ const factory = new Function(head + DASHBOARD_CLIENT_BUNDLE + tail);
27
23
  return factory();
28
24
  }
29
25
  function occ(over) {
@@ -1 +1 @@
1
- {"version":3,"file":"coupling-attribution.test.js","sourceRoot":"","sources":["../../src/__tests__/coupling-attribution.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coupling-attribution.test.js","sourceRoot":"","sources":["../../src/__tests__/coupling-attribution.test.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,17 @@
6
6
  * grows past the Phase 0 budget, so a careless dependency bump or schema
7
7
  * bloat is caught before it lands in every generated report.
8
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
+ *
9
14
  * Budgets (Phase 0 §1 / §4.5):
10
15
  * - vendor bundle raw: <= 600 KB
11
- * - vendor + view emitter JS: <= 650 KB (BUDGET_KB + 50, accounts for
12
- * view-graph.ts's own emitted JS string)
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)
13
20
  * - view-model JSON per element: within the §4.5 per-node/edge estimates
14
21
  */
15
22
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-bundle-weight.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-bundle-weight.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
1
+ {"version":3,"file":"dashboard-bundle-weight.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-bundle-weight.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
@@ -6,19 +6,26 @@
6
6
  * grows past the Phase 0 budget, so a careless dependency bump or schema
7
7
  * bloat is caught before it lands in every generated report.
8
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
+ *
9
14
  * Budgets (Phase 0 §1 / §4.5):
10
15
  * - vendor bundle raw: <= 600 KB
11
- * - vendor + view emitter JS: <= 650 KB (BUDGET_KB + 50, accounts for
12
- * view-graph.ts's own emitted JS string)
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)
13
20
  * - view-model JSON per element: within the §4.5 per-node/edge estimates
14
21
  */
15
22
  import { readFileSync } from 'node:fs';
16
23
  import { dirname, join } from 'node:path';
17
24
  import { fileURLToPath } from 'node:url';
18
25
  import { describe, expect, it } from 'vitest';
26
+ import { DASHBOARD_CLIENT_BUNDLE } from '../client-bundle.generated.js';
19
27
  import { dashboardCytoscapeVendorJs } from '../code-paths/cytoscape-vendor.js';
20
28
  import { projectCatalogToGraphViewModel } from '../code-paths/graph-view-model.js';
21
- import { dashboardViewGraphJs } from '../code-paths/view-graph.js';
22
29
  /** Phase 0 §1 raw-byte budget for the vendor bundle. */
23
30
  const BUDGET_KB = 600;
24
31
  const KB = 1024;
@@ -47,17 +54,17 @@ describe('bundle weight gate', () => {
47
54
  const kb = Math.round(bytes / KB);
48
55
  expect(bytes, `vendor bundle ${kb} KB exceeds ${BUDGET_KB} KB budget`).toBeLessThanOrEqual(BUDGET_KB * KB);
49
56
  });
50
- it('vendor + Graph view emitter together stay within budget + 50 KB', () => {
51
- const bytes = size(dashboardCytoscapeVendorJs()) + size(dashboardViewGraphJs());
57
+ it('vendor + our client bundle together stay within budget + 100 KB', () => {
58
+ const bytes = size(dashboardCytoscapeVendorJs()) + size(DASHBOARD_CLIENT_BUNDLE);
52
59
  const kb = Math.round(bytes / KB);
53
- const limit = (BUDGET_KB + 50) * KB;
54
- expect(bytes, `vendor + view JS ${kb} KB exceeds ${BUDGET_KB + 50} KB budget`).toBeLessThanOrEqual(limit);
60
+ const limit = (BUDGET_KB + 100) * KB;
61
+ expect(bytes, `vendor + client bundle ${kb} KB exceeds ${BUDGET_KB + 100} KB budget`).toBeLessThanOrEqual(limit);
55
62
  });
56
- it('the Graph view emitter JS is a small fraction of the bundle', () => {
57
- // Guard against the view emitter itself ballooning (e.g. an accidental
58
- // inlined data blob). It is hand-written JS; tens of KB, not hundreds.
59
- const viewKb = size(dashboardViewGraphJs()) / KB;
60
- expect(viewKb).toBeLessThan(50);
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);
61
68
  });
62
69
  it('projected (package-level) view-model JSON stays within the per-node/edge byte budget', () => {
63
70
  const vm = projectCatalogToGraphViewModel(loadFixture());
@@ -1 +1 @@
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
+ {"version":3,"file":"dashboard-bundle-weight.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-bundle-weight.test.ts"],"names":[],"mappings":"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"}
@@ -33,9 +33,12 @@ describe('data-table cell containment contract', () => {
33
33
  });
34
34
  it('the session timestamp cell opts out via .cell-nowrap', () => {
35
35
  // Guards the view wiring: short, space-containing cells (timestamps)
36
- // must stay on one line under the wrap-by-default contract.
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.
37
40
  const html = generateDashboardHtml({ sessions: [] });
38
- expect(html).toContain("class:'cell-nowrap'");
41
+ expect(html).toContain('class: "cell-nowrap"');
39
42
  });
40
43
  it('the coupling matrix (the one non-.data-table table) stays contained by its own scroll wrapper', () => {
41
44
  // The coupling grid deliberately opts out of the .data-table contract
@@ -1 +1 @@
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,4DAA4D;QAC5D,MAAM,IAAI,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAChD,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
+ {"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,5 +1,14 @@
1
1
  /**
2
+ * @vitest-environment jsdom
3
+ *
2
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.
3
12
  */
4
13
  export {};
5
14
  //# sourceMappingURL=dashboard-editor-link.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-editor-link.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-editor-link.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
1
+ {"version":3,"file":"dashboard-editor-link.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-editor-link.test.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG"}
@@ -1,36 +1,87 @@
1
+ /// <reference lib="dom" />
1
2
  /**
3
+ * @vitest-environment jsdom
4
+ *
2
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.
3
13
  */
4
- import { describe, expect, it } from 'vitest';
5
- import { dashboardEditorLinkJs } from '../code-paths/editor-link.js';
6
- function loadEditorLink(protocol) {
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 = '';
7
47
  const protoSrc = protocol === null
8
48
  ? 'var EDITOR_PROTOCOL = null;'
9
49
  : 'var EDITOR_PROTOCOL = ' + JSON.stringify(protocol) + ';';
10
- // eslint-disable-next-line @typescript-eslint/no-implied-eval, sonarjs/code-eval -- Trusted source.
11
- const fn = new Function(protoSrc + dashboardEditorLinkJs() + '\nreturn editorLinkUrl;')();
12
- return fn;
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;
13
67
  }
14
- describe('editorLinkUrl', () => {
68
+ beforeEach(() => {
69
+ document.body.innerHTML = '';
70
+ });
71
+ describe('editorLinkUrl (via the Function Card action row)', () => {
15
72
  it('produces vscode://file/<path>:<line> for vscode', () => {
16
- const f = loadEditorLink('vscode');
17
- expect(f('packages/x/src/x.ts', 42)).toBe('vscode://file/packages/x/src/x.ts:42');
73
+ expect(editorHref('vscode', 42)).toBe('vscode://file/packages/x/src/x.ts:42');
18
74
  });
19
75
  it('produces cursor://file/<path>:<line> for cursor', () => {
20
- const f = loadEditorLink('cursor');
21
- expect(f('packages/x/src/x.ts', 7)).toBe('cursor://file/packages/x/src/x.ts:7');
22
- });
23
- it('returns null when EDITOR_PROTOCOL is null', () => {
24
- const f = loadEditorLink(null);
25
- expect(f('packages/x/src/x.ts', 1)).toBeNull();
76
+ expect(editorHref('cursor', 7)).toBe('cursor://file/packages/x/src/x.ts:7');
26
77
  });
27
- it('returns null for an unrecognized protocol', () => {
28
- const f = loadEditorLink('mystery');
29
- expect(f('packages/x/src/x.ts', 1)).toBeNull();
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');
30
82
  });
31
- it('falls back to line 1 when no line is provided', () => {
32
- const f = loadEditorLink('vscode');
33
- expect(f('packages/x/src/x.ts', 0)).toBe('vscode://file/packages/x/src/x.ts:1');
83
+ it('renders no editor anchor for an unrecognized protocol', () => {
84
+ expect(editorHref('mystery')).toBeNull();
34
85
  });
35
86
  });
36
87
  //# sourceMappingURL=dashboard-editor-link.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-editor-link.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-editor-link.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,SAAS,cAAc,CACrB,QAAuB;IAEvB,MAAM,QAAQ,GACZ,QAAQ,KAAK,IAAI;QACf,CAAC,CAAC,6BAA6B;QAC/B,CAAC,CAAC,wBAAwB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;IAChE,oGAAoG;IACpG,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,QAAQ,GAAG,qBAAqB,EAAE,GAAG,yBAAyB,CAAC,EAGrE,CAAC;IACnB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"dashboard-editor-link.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-editor-link.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-el.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dashboard-el.test.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,90 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-el.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-el.test.ts"],"names":[],"mappings":"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"}
@@ -7,24 +7,16 @@
7
7
  * own test file; this file covers the predicate shape).
8
8
  */
9
9
  import { describe, expect, it } from 'vitest';
10
- import { dashboardFiltersJs } from '../code-paths/filters.js';
11
- import { dashboardPathUtilsJs } from '../code-paths/path-utils.js';
10
+ import { DASHBOARD_CLIENT_BUNDLE } from '../client-bundle.generated.js';
12
11
  function loadFilterEnv() {
13
- // The filters/path-utils emitters expect `el(...)` and `views`/`graph*`
14
- // globals at runtime. The `passesFilter` and `packageOfPath` functions
15
- // we test here have no such dependency; we inject minimal shims.
16
- const stubs = `
17
- function el(tag, attrs, children) { const e = document.createElement(tag); return e; }
18
- const views = [];
19
- let activeViewId = null;
20
- let graphCatalog = null;
21
- let graphIndexes = null;
22
- `;
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.
23
15
  const tail = `
24
16
  return { passesFilter, packageOfPath };
25
17
  `;
26
- // eslint-disable-next-line @typescript-eslint/no-implied-eval, sonarjs/code-eval -- Trusted source.
27
- const factory = new Function(stubs + dashboardPathUtilsJs() + dashboardFiltersJs() + tail);
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);
28
20
  return factory();
29
21
  }
30
22
  function makeOcc(over) {
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-filters.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-filters.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard-filters.test.js","sourceRoot":"","sources":["../../src/__tests__/dashboard-filters.test.ts"],"names":[],"mappings":"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"}