@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.
- package/README.md +4 -2
- package/dist/client-bundle.generated.d.ts.map +1 -1
- package/dist/client-bundle.generated.js +1 -1
- package/dist/client-bundle.generated.js.map +1 -1
- package/dist/code-paths/graph-view-model.js +0 -1
- package/dist/code-paths/graph-view-model.js.map +1 -1
- package/dist/css/theme.js +1 -1
- package/dist/generator.d.ts +2 -0
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +10 -4
- package/dist/generator.js.map +1 -1
- package/dist/report-cup-icon.d.ts +17 -0
- package/dist/report-cup-icon.d.ts.map +1 -0
- package/dist/report-cup-icon.js +34 -0
- package/dist/report-cup-icon.js.map +1 -0
- package/dist/tool-tabs-registrations.js +10 -0
- package/dist/tool-tabs-registrations.js.map +1 -1
- package/package.json +3 -3
- package/dist/__tests__/catalog-provenance.test.d.ts +0 -11
- package/dist/__tests__/catalog-provenance.test.d.ts.map +0 -1
- package/dist/__tests__/catalog-provenance.test.js +0 -112
- package/dist/__tests__/catalog-provenance.test.js.map +0 -1
- package/dist/__tests__/coupling-attribution.test.d.ts +0 -9
- package/dist/__tests__/coupling-attribution.test.d.ts.map +0 -1
- package/dist/__tests__/coupling-attribution.test.js +0 -95
- package/dist/__tests__/coupling-attribution.test.js.map +0 -1
- package/dist/__tests__/dashboard-bundle-weight.test.d.ts +0 -23
- package/dist/__tests__/dashboard-bundle-weight.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-bundle-weight.test.js +0 -80
- package/dist/__tests__/dashboard-bundle-weight.test.js.map +0 -1
- package/dist/__tests__/dashboard-cell-containment.test.d.ts +0 -2
- package/dist/__tests__/dashboard-cell-containment.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-cell-containment.test.js +0 -52
- package/dist/__tests__/dashboard-cell-containment.test.js.map +0 -1
- package/dist/__tests__/dashboard-cytoscape-vendor.test.d.ts +0 -10
- package/dist/__tests__/dashboard-cytoscape-vendor.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-cytoscape-vendor.test.js +0 -40
- package/dist/__tests__/dashboard-cytoscape-vendor.test.js.map +0 -1
- package/dist/__tests__/dashboard-editor-link.test.d.ts +0 -14
- package/dist/__tests__/dashboard-editor-link.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-editor-link.test.js +0 -87
- package/dist/__tests__/dashboard-editor-link.test.js.map +0 -1
- package/dist/__tests__/dashboard-el.test.d.ts +0 -18
- package/dist/__tests__/dashboard-el.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-el.test.js +0 -90
- package/dist/__tests__/dashboard-el.test.js.map +0 -1
- package/dist/__tests__/dashboard-filters.test.d.ts +0 -9
- package/dist/__tests__/dashboard-filters.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-filters.test.js +0 -87
- package/dist/__tests__/dashboard-filters.test.js.map +0 -1
- package/dist/__tests__/dashboard-function-card-singleton.test.d.ts +0 -9
- package/dist/__tests__/dashboard-function-card-singleton.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-function-card-singleton.test.js +0 -75
- package/dist/__tests__/dashboard-function-card-singleton.test.js.map +0 -1
- package/dist/__tests__/dashboard-function-card.test.d.ts +0 -10
- package/dist/__tests__/dashboard-function-card.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-function-card.test.js +0 -439
- package/dist/__tests__/dashboard-function-card.test.js.map +0 -1
- package/dist/__tests__/dashboard-function-row.test.d.ts +0 -11
- package/dist/__tests__/dashboard-function-row.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-function-row.test.js +0 -102
- package/dist/__tests__/dashboard-function-row.test.js.map +0 -1
- package/dist/__tests__/dashboard-generator-graph-catalog.test.d.ts +0 -9
- package/dist/__tests__/dashboard-generator-graph-catalog.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-generator-graph-catalog.test.js +0 -77
- package/dist/__tests__/dashboard-generator-graph-catalog.test.js.map +0 -1
- package/dist/__tests__/dashboard-graph-offline.integration.test.d.ts +0 -13
- package/dist/__tests__/dashboard-graph-offline.integration.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-graph-offline.integration.test.js +0 -57
- package/dist/__tests__/dashboard-graph-offline.integration.test.js.map +0 -1
- package/dist/__tests__/dashboard-graph-scc.test.d.ts +0 -17
- package/dist/__tests__/dashboard-graph-scc.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-graph-scc.test.js +0 -89
- package/dist/__tests__/dashboard-graph-scc.test.js.map +0 -1
- package/dist/__tests__/dashboard-graph-view-model.test.d.ts +0 -12
- package/dist/__tests__/dashboard-graph-view-model.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-graph-view-model.test.js +0 -331
- package/dist/__tests__/dashboard-graph-view-model.test.js.map +0 -1
- package/dist/__tests__/dashboard-help-drawer.test.d.ts +0 -9
- package/dist/__tests__/dashboard-help-drawer.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-help-drawer.test.js +0 -95
- package/dist/__tests__/dashboard-help-drawer.test.js.map +0 -1
- package/dist/__tests__/dashboard-html.test.d.ts +0 -2
- package/dist/__tests__/dashboard-html.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-html.test.js +0 -169
- package/dist/__tests__/dashboard-html.test.js.map +0 -1
- package/dist/__tests__/dashboard-indexes.test.d.ts +0 -11
- package/dist/__tests__/dashboard-indexes.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-indexes.test.js +0 -214
- package/dist/__tests__/dashboard-indexes.test.js.map +0 -1
- package/dist/__tests__/dashboard-pagination.test.d.ts +0 -15
- package/dist/__tests__/dashboard-pagination.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-pagination.test.js +0 -140
- package/dist/__tests__/dashboard-pagination.test.js.map +0 -1
- package/dist/__tests__/dashboard-path-utils.test.d.ts +0 -13
- package/dist/__tests__/dashboard-path-utils.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-path-utils.test.js +0 -62
- package/dist/__tests__/dashboard-path-utils.test.js.map +0 -1
- package/dist/__tests__/dashboard-search.test.d.ts +0 -10
- package/dist/__tests__/dashboard-search.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-search.test.js +0 -52
- package/dist/__tests__/dashboard-search.test.js.map +0 -1
- package/dist/__tests__/dashboard-sessions.test.d.ts +0 -14
- package/dist/__tests__/dashboard-sessions.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-sessions.test.js +0 -332
- package/dist/__tests__/dashboard-sessions.test.js.map +0 -1
- package/dist/__tests__/dashboard-trace.test.d.ts +0 -16
- package/dist/__tests__/dashboard-trace.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-trace.test.js +0 -170
- package/dist/__tests__/dashboard-trace.test.js.map +0 -1
- package/dist/__tests__/dashboard-validation.integration.test.d.ts +0 -14
- package/dist/__tests__/dashboard-validation.integration.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-validation.integration.test.js +0 -221
- package/dist/__tests__/dashboard-validation.integration.test.js.map +0 -1
- package/dist/__tests__/dashboard-view-conformance.test.d.ts +0 -12
- package/dist/__tests__/dashboard-view-conformance.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-view-conformance.test.js +0 -52
- package/dist/__tests__/dashboard-view-conformance.test.js.map +0 -1
- package/dist/__tests__/dashboard-view-coupling.test.d.ts +0 -7
- package/dist/__tests__/dashboard-view-coupling.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-view-coupling.test.js +0 -360
- package/dist/__tests__/dashboard-view-coupling.test.js.map +0 -1
- package/dist/__tests__/dashboard-view-distribution.test.d.ts +0 -10
- package/dist/__tests__/dashboard-view-distribution.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-view-distribution.test.js +0 -249
- package/dist/__tests__/dashboard-view-distribution.test.js.map +0 -1
- package/dist/__tests__/dashboard-view-graph.test.d.ts +0 -13
- package/dist/__tests__/dashboard-view-graph.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-view-graph.test.js +0 -299
- package/dist/__tests__/dashboard-view-graph.test.js.map +0 -1
- package/dist/__tests__/dashboard-view-template.test.d.ts +0 -20
- package/dist/__tests__/dashboard-view-template.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard-view-template.test.js +0 -206
- package/dist/__tests__/dashboard-view-template.test.js.map +0 -1
- package/dist/__tests__/dashboard.test.d.ts +0 -2
- package/dist/__tests__/dashboard.test.d.ts.map +0 -1
- package/dist/__tests__/dashboard.test.js +0 -129
- package/dist/__tests__/dashboard.test.js.map +0 -1
- package/dist/__tests__/graph-tab.test.d.ts +0 -10
- package/dist/__tests__/graph-tab.test.d.ts.map +0 -1
- package/dist/__tests__/graph-tab.test.js +0 -78
- package/dist/__tests__/graph-tab.test.js.map +0 -1
- package/dist/client/el.d.ts +0 -17
- package/dist/client/el.d.ts.map +0 -1
- package/dist/client/el.js +0 -36
- package/dist/client/el.js.map +0 -1
- package/dist/code-paths/__tests__/views-registry.test.d.ts +0 -18
- package/dist/code-paths/__tests__/views-registry.test.d.ts.map +0 -1
- package/dist/code-paths/__tests__/views-registry.test.js +0 -41
- 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 +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":"AAAA,2BAA2B;AAC3B;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAQxE,MAAM,OAAO,GAAiB;IAC5B,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,YAAY;IACtB,OAAO,EAAE,KAAK;IACd,SAAS,EAAE;QACT,CAAC,EAAE;YACD;gBACE,aAAa,EAAE,GAAG;gBAClB,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,qBAAqB;gBAC/B,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,sBAAsB;gBAC5B,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,IAAI;gBACpB,UAAU,EAAE,EAAE;gBACd,UAAU,EAAE,UAAU;gBACtB,UAAU,EAAE,KAAK;gBACjB,kBAAkB,EAAE,KAAK;gBACzB,KAAK,EAAE,EAAE;aAC8C;SAC1D;KACF;CACF,CAAC;AAEF,qHAAqH;AACrH,SAAS,UAAU,CAAC,QAAuB,EAAE,IAAI,GAAG,EAAE;IACpD,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAC7B,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,MAAM,GAAG,GAAiB;QACxB,GAAG,OAAO;QACV,SAAS,EAAE;YACT,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;SACzC;KACF,CAAC;IACF,MAAM,IAAI,GACR,sBAAsB,GAAG,QAAQ,GAAG,wDAAwD,CAAC;IAC/F,MAAM,IAAI,GAAG;iBACE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;;;CAGnC,CAAC;IACA,kIAAkI;IAClI,IAAI,QAAQ,CAAC,IAAI,GAAG,uBAAuB,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpE,UAAyC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAoB,yBAAyB,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAChE,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACpC,qDAAqD;QACrD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,8BAA8B,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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"}
|