@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.
- package/README.md +2 -2
- package/dist/__tests__/catalog-provenance.test.js +6 -24
- package/dist/__tests__/catalog-provenance.test.js.map +1 -1
- package/dist/__tests__/coupling-attribution.test.js +10 -14
- package/dist/__tests__/coupling-attribution.test.js.map +1 -1
- package/dist/__tests__/dashboard-bundle-weight.test.d.ts +9 -2
- package/dist/__tests__/dashboard-bundle-weight.test.d.ts.map +1 -1
- package/dist/__tests__/dashboard-bundle-weight.test.js +19 -12
- package/dist/__tests__/dashboard-bundle-weight.test.js.map +1 -1
- package/dist/__tests__/dashboard-cell-containment.test.js +5 -2
- package/dist/__tests__/dashboard-cell-containment.test.js.map +1 -1
- package/dist/__tests__/dashboard-editor-link.test.d.ts +9 -0
- package/dist/__tests__/dashboard-editor-link.test.d.ts.map +1 -1
- package/dist/__tests__/dashboard-editor-link.test.js +72 -21
- package/dist/__tests__/dashboard-editor-link.test.js.map +1 -1
- package/dist/__tests__/dashboard-el.test.d.ts +18 -0
- package/dist/__tests__/dashboard-el.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-el.test.js +90 -0
- package/dist/__tests__/dashboard-el.test.js.map +1 -0
- package/dist/__tests__/dashboard-filters.test.js +6 -14
- package/dist/__tests__/dashboard-filters.test.js.map +1 -1
- package/dist/__tests__/dashboard-function-card-singleton.test.js +15 -27
- package/dist/__tests__/dashboard-function-card-singleton.test.js.map +1 -1
- package/dist/__tests__/dashboard-function-card.test.d.ts +4 -4
- package/dist/__tests__/dashboard-function-card.test.js +80 -44
- package/dist/__tests__/dashboard-function-card.test.js.map +1 -1
- package/dist/__tests__/dashboard-function-row.test.js +52 -51
- package/dist/__tests__/dashboard-function-row.test.js.map +1 -1
- package/dist/__tests__/dashboard-generator-graph-catalog.test.js +3 -1
- package/dist/__tests__/dashboard-generator-graph-catalog.test.js.map +1 -1
- package/dist/__tests__/dashboard-graph-offline.integration.test.js +3 -1
- package/dist/__tests__/dashboard-graph-offline.integration.test.js.map +1 -1
- package/dist/__tests__/dashboard-help-drawer.test.js +11 -17
- package/dist/__tests__/dashboard-help-drawer.test.js.map +1 -1
- package/dist/__tests__/dashboard-indexes.test.d.ts +6 -4
- package/dist/__tests__/dashboard-indexes.test.d.ts.map +1 -1
- package/dist/__tests__/dashboard-indexes.test.js +10 -7
- package/dist/__tests__/dashboard-indexes.test.js.map +1 -1
- package/dist/__tests__/dashboard-pagination.test.d.ts +15 -0
- package/dist/__tests__/dashboard-pagination.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-pagination.test.js +140 -0
- package/dist/__tests__/dashboard-pagination.test.js.map +1 -0
- package/dist/__tests__/dashboard-path-utils.test.d.ts +7 -0
- package/dist/__tests__/dashboard-path-utils.test.d.ts.map +1 -1
- package/dist/__tests__/dashboard-path-utils.test.js +11 -3
- package/dist/__tests__/dashboard-path-utils.test.js.map +1 -1
- package/dist/__tests__/dashboard-search.test.d.ts +5 -0
- package/dist/__tests__/dashboard-search.test.d.ts.map +1 -1
- package/dist/__tests__/dashboard-search.test.js +9 -3
- package/dist/__tests__/dashboard-search.test.js.map +1 -1
- package/dist/__tests__/dashboard-sessions.test.js +13 -11
- package/dist/__tests__/dashboard-sessions.test.js.map +1 -1
- package/dist/__tests__/dashboard-trace.test.d.ts +11 -0
- package/dist/__tests__/dashboard-trace.test.d.ts.map +1 -1
- package/dist/__tests__/dashboard-trace.test.js +55 -32
- package/dist/__tests__/dashboard-trace.test.js.map +1 -1
- package/dist/__tests__/dashboard-view-conformance.test.js +9 -15
- package/dist/__tests__/dashboard-view-conformance.test.js.map +1 -1
- package/dist/__tests__/dashboard-view-coupling.test.js +14 -35
- package/dist/__tests__/dashboard-view-coupling.test.js.map +1 -1
- package/dist/__tests__/dashboard-view-distribution.test.js +14 -37
- package/dist/__tests__/dashboard-view-distribution.test.js.map +1 -1
- package/dist/__tests__/dashboard-view-graph.test.js +29 -62
- package/dist/__tests__/dashboard-view-graph.test.js.map +1 -1
- package/dist/__tests__/dashboard-view-template.test.d.ts +13 -14
- package/dist/__tests__/dashboard-view-template.test.d.ts.map +1 -1
- package/dist/__tests__/dashboard-view-template.test.js +165 -112
- package/dist/__tests__/dashboard-view-template.test.js.map +1 -1
- package/dist/__tests__/graph-tab.test.js +4 -2
- package/dist/__tests__/graph-tab.test.js.map +1 -1
- package/dist/client/el.d.ts +17 -0
- package/dist/client/el.d.ts.map +1 -0
- package/dist/client/el.js +36 -0
- package/dist/client/el.js.map +1 -0
- package/dist/client-bundle.generated.d.ts +2 -0
- package/dist/client-bundle.generated.d.ts.map +1 -0
- package/dist/client-bundle.generated.js +3 -0
- package/dist/client-bundle.generated.js.map +1 -0
- package/dist/code-paths/__tests__/views-registry.test.d.ts +13 -8
- package/dist/code-paths/__tests__/views-registry.test.d.ts.map +1 -1
- package/dist/code-paths/__tests__/views-registry.test.js +27 -25
- package/dist/code-paths/__tests__/views-registry.test.js.map +1 -1
- package/dist/code-paths.d.ts +21 -62
- package/dist/code-paths.d.ts.map +1 -1
- package/dist/code-paths.js +24 -349
- package/dist/code-paths.js.map +1 -1
- package/dist/generator.d.ts +2 -0
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +28 -17
- package/dist/generator.js.map +1 -1
- package/package.json +5 -4
- package/dist/checks.d.ts +0 -7
- package/dist/checks.d.ts.map +0 -1
- package/dist/checks.js +0 -283
- package/dist/checks.js.map +0 -1
- package/dist/code-paths/catalog-provenance.d.ts +0 -22
- package/dist/code-paths/catalog-provenance.d.ts.map +0 -1
- package/dist/code-paths/catalog-provenance.js +0 -108
- package/dist/code-paths/catalog-provenance.js.map +0 -1
- package/dist/code-paths/catalog-recipes-tables.d.ts +0 -11
- package/dist/code-paths/catalog-recipes-tables.d.ts.map +0 -1
- package/dist/code-paths/catalog-recipes-tables.js +0 -86
- package/dist/code-paths/catalog-recipes-tables.js.map +0 -1
- package/dist/code-paths/editor-link.d.ts +0 -10
- package/dist/code-paths/editor-link.d.ts.map +0 -1
- package/dist/code-paths/editor-link.js +0 -20
- package/dist/code-paths/editor-link.js.map +0 -1
- package/dist/code-paths/filters.d.ts +0 -19
- package/dist/code-paths/filters.d.ts.map +0 -1
- package/dist/code-paths/filters.js +0 -47
- package/dist/code-paths/filters.js.map +0 -1
- package/dist/code-paths/function-card.d.ts +0 -15
- package/dist/code-paths/function-card.d.ts.map +0 -1
- package/dist/code-paths/function-card.js +0 -169
- package/dist/code-paths/function-card.js.map +0 -1
- package/dist/code-paths/function-row.d.ts +0 -17
- package/dist/code-paths/function-row.d.ts.map +0 -1
- package/dist/code-paths/function-row.js +0 -77
- package/dist/code-paths/function-row.js.map +0 -1
- package/dist/code-paths/graph-controls.d.ts +0 -27
- package/dist/code-paths/graph-controls.d.ts.map +0 -1
- package/dist/code-paths/graph-controls.js +0 -257
- package/dist/code-paths/graph-controls.js.map +0 -1
- package/dist/code-paths/graph-stylesheet.d.ts +0 -22
- package/dist/code-paths/graph-stylesheet.d.ts.map +0 -1
- package/dist/code-paths/graph-stylesheet.js +0 -121
- package/dist/code-paths/graph-stylesheet.js.map +0 -1
- package/dist/code-paths/help-drawer.d.ts +0 -18
- package/dist/code-paths/help-drawer.d.ts.map +0 -1
- package/dist/code-paths/help-drawer.js +0 -54
- package/dist/code-paths/help-drawer.js.map +0 -1
- package/dist/code-paths/indexes.d.ts +0 -28
- package/dist/code-paths/indexes.d.ts.map +0 -1
- package/dist/code-paths/indexes.js +0 -97
- package/dist/code-paths/indexes.js.map +0 -1
- package/dist/code-paths/path-utils.d.ts +0 -15
- package/dist/code-paths/path-utils.d.ts.map +0 -1
- package/dist/code-paths/path-utils.js +0 -47
- package/dist/code-paths/path-utils.js.map +0 -1
- package/dist/code-paths/search.d.ts +0 -14
- package/dist/code-paths/search.d.ts.map +0 -1
- package/dist/code-paths/search.js +0 -54
- package/dist/code-paths/search.js.map +0 -1
- package/dist/code-paths/trace.d.ts +0 -11
- package/dist/code-paths/trace.d.ts.map +0 -1
- package/dist/code-paths/trace.js +0 -60
- package/dist/code-paths/trace.js.map +0 -1
- package/dist/code-paths/view-coupling.d.ts +0 -22
- package/dist/code-paths/view-coupling.d.ts.map +0 -1
- package/dist/code-paths/view-coupling.js +0 -218
- package/dist/code-paths/view-coupling.js.map +0 -1
- package/dist/code-paths/view-distribution.d.ts +0 -20
- package/dist/code-paths/view-distribution.d.ts.map +0 -1
- package/dist/code-paths/view-distribution.js +0 -82
- package/dist/code-paths/view-distribution.js.map +0 -1
- package/dist/code-paths/view-graph.d.ts +0 -35
- package/dist/code-paths/view-graph.d.ts.map +0 -1
- package/dist/code-paths/view-graph.js +0 -379
- package/dist/code-paths/view-graph.js.map +0 -1
- package/dist/code-paths/view-template.d.ts +0 -154
- package/dist/code-paths/view-template.d.ts.map +0 -1
- package/dist/code-paths/view-template.js +0 -218
- package/dist/code-paths/view-template.js.map +0 -1
- package/dist/code-paths/views-registry.d.ts +0 -13
- package/dist/code-paths/views-registry.d.ts.map +0 -1
- package/dist/code-paths/views-registry.js +0 -53
- package/dist/code-paths/views-registry.js.map +0 -1
- package/dist/overview.d.ts +0 -13
- package/dist/overview.d.ts.map +0 -1
- package/dist/overview.js +0 -91
- package/dist/overview.js.map +0 -1
- package/dist/recipes.d.ts +0 -6
- package/dist/recipes.d.ts.map +0 -1
- package/dist/recipes.js +0 -68
- package/dist/recipes.js.map +0 -1
- package/dist/sessions.d.ts +0 -6
- package/dist/sessions.d.ts.map +0 -1
- package/dist/sessions.js +0 -288
- package/dist/sessions.js.map +0 -1
- package/dist/shared/el.d.ts +0 -13
- package/dist/shared/el.d.ts.map +0 -1
- package/dist/shared/el.js +0 -27
- package/dist/shared/el.js.map +0 -1
- package/dist/shared/pagination.d.ts +0 -15
- package/dist/shared/pagination.d.ts.map +0 -1
- package/dist/shared/pagination.js +0 -113
- package/dist/shared/pagination.js.map +0 -1
- package/dist/shared/sortable.d.ts +0 -14
- package/dist/shared/sortable.d.ts.map +0 -1
- package/dist/shared/sortable.js +0 -101
- package/dist/shared/sortable.js.map +0 -1
- package/dist/shared/tab-activators.d.ts +0 -16
- package/dist/shared/tab-activators.d.ts.map +0 -1
- package/dist/shared/tab-activators.js +0 -33
- package/dist/shared/tab-activators.js.map +0 -1
- package/dist/shared/tab-bar.d.ts +0 -8
- package/dist/shared/tab-bar.d.ts.map +0 -1
- package/dist/shared/tab-bar.js +0 -20
- package/dist/shared/tab-bar.js.map +0 -1
- package/dist/shared.d.ts +0 -26
- package/dist/shared.d.ts.map +0 -1
- package/dist/shared.js +0 -39
- package/dist/shared.js.map +0 -1
- package/dist/subtab-bar.d.ts +0 -23
- package/dist/subtab-bar.d.ts.map +0 -1
- package/dist/subtab-bar.js +0 -77
- package/dist/subtab-bar.js.map +0 -1
- package/dist/tool-tabs.d.ts +0 -12
- package/dist/tool-tabs.d.ts.map +0 -1
- package/dist/tool-tabs.js +0 -80
- package/dist/tool-tabs.js.map +0 -1
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `defineRankedView` — JS-string emitter for ranked-list views.
|
|
3
|
-
*
|
|
4
|
-
* Hot, Big, Wide, and Untested all share the same skeleton:
|
|
5
|
-
*
|
|
6
|
-
* 1. Bail out with an empty-state message if the catalog is missing.
|
|
7
|
-
* 2. Walk `indexes.byBodyHash.values()`, applying the active filter
|
|
8
|
-
* chips (`passesFilter`) and an optional view-specific predicate.
|
|
9
|
-
* 3. Compute a per-occurrence numeric metric.
|
|
10
|
-
* 4. Sort descending by that metric.
|
|
11
|
-
* 5. Render via `renderFunctionRows` with the supplied column
|
|
12
|
-
* definitions, or show an empty-state if everything was filtered
|
|
13
|
-
* out.
|
|
14
|
-
*
|
|
15
|
-
* This helper accepts a declarative config and emits the JS source for
|
|
16
|
-
* one view. Each `view-*.ts` that fits the shape collapses to ~15 lines
|
|
17
|
-
* of config; bespoke views (coupling, sccs, search) keep their own
|
|
18
|
-
* emitters.
|
|
19
|
-
*
|
|
20
|
-
* The `metric` and `predicate` (and column `value`) fields are JS
|
|
21
|
-
* source strings that close over the in-page locals `occ`, `o`,
|
|
22
|
-
* `indexes`, `filterState`, etc. The helper splices them directly into
|
|
23
|
-
* the emitted view; that is how the existing per-view emitters work
|
|
24
|
-
* too. The skeleton is the only place that knows the rank-and-render
|
|
25
|
-
* shape — adding a new ranked view means writing a config, not a new
|
|
26
|
-
* `view-*.ts` file from scratch.
|
|
27
|
-
*/
|
|
28
|
-
/**
|
|
29
|
-
* Emit the JS source for a ranked view.
|
|
30
|
-
*
|
|
31
|
-
* The generated JS pushes a `View` literal into the `views` registry
|
|
32
|
-
* already declared by `dashboardViewsRegistryJs`. The helper assumes
|
|
33
|
-
* the standard set of in-page locals (`el`, `passesFilter`,
|
|
34
|
-
* `displayName`, `packageOfPath`, `renderFunctionRows`) are available
|
|
35
|
-
* — which they are, because `code-paths.ts` orders the emitters so
|
|
36
|
-
* those declarations precede the view emitters.
|
|
37
|
-
*/
|
|
38
|
-
/**
|
|
39
|
-
* Emit a JS source string literal in the project house style — single
|
|
40
|
-
* quotes with `'` and `\\` escaped. Used so the generated views stay
|
|
41
|
-
* byte-comparable to the hand-written ones they replace.
|
|
42
|
-
*/
|
|
43
|
-
function jsString(value) {
|
|
44
|
-
// Order matters — escape backslashes before quotes so the substituted
|
|
45
|
-
// backslashes from quote-escaping aren't doubled.
|
|
46
|
-
const BACKSLASH = String.fromCodePoint(92);
|
|
47
|
-
const QUOTE = String.fromCodePoint(39);
|
|
48
|
-
const escaped = value
|
|
49
|
-
.split(BACKSLASH)
|
|
50
|
-
.join(BACKSLASH + BACKSLASH)
|
|
51
|
-
.split(QUOTE)
|
|
52
|
-
.join(BACKSLASH + QUOTE);
|
|
53
|
-
return QUOTE + escaped + QUOTE;
|
|
54
|
-
}
|
|
55
|
-
export function defineRankedView(config) {
|
|
56
|
-
const helpJson = JSON.stringify(config.help);
|
|
57
|
-
const columnsLiteral = config.columns
|
|
58
|
-
.map((c) => ` { label: ${jsString(c.label)}, value: ${c.value} }`)
|
|
59
|
-
.join(',\n');
|
|
60
|
-
const predicate = config.predicate ?? 'passesFilter(occ, filterState)';
|
|
61
|
-
const rowExtras = config.rowExtras ?? '{}';
|
|
62
|
-
const preamble = config.preamble ?? '';
|
|
63
|
-
// When searchByName is on, the view keeps a module-scoped query string,
|
|
64
|
-
// renders a search input above the table, and re-filters the ranked
|
|
65
|
-
// rows by simple-name (case-insensitive substring) in place. The state
|
|
66
|
-
// var is namespaced by view id so multiple search-enabled views can
|
|
67
|
-
// coexist without clobbering each other.
|
|
68
|
-
const searchByName = config.searchByName === true;
|
|
69
|
-
const filterByKP = config.filterByKindPackage === true;
|
|
70
|
-
const toggle = config.filterToggle ?? null;
|
|
71
|
-
const hasControls = searchByName || filterByKP || toggle !== null;
|
|
72
|
-
const idSuffix = config.id.replaceAll(/\W/g, '_');
|
|
73
|
-
const queryVar = `__rankedSearchQuery_${idSuffix}`;
|
|
74
|
-
const kindVar = `__rankedKind_${idSuffix}`;
|
|
75
|
-
const pkgVar = `__rankedPkg_${idSuffix}`;
|
|
76
|
-
const toggleVar = `__rankedToggle_${idSuffix}`;
|
|
77
|
-
const stateDecl = (searchByName ? `let ${queryVar} = '';\n` : '') +
|
|
78
|
-
(filterByKP ? `let ${kindVar} = '';\nlet ${pkgVar} = '';\n` : '') +
|
|
79
|
-
(toggle ? `let ${toggleVar} = false;\n` : '');
|
|
80
|
-
// Kind + Package single-selects (filterByKindPackage). Built into the shared
|
|
81
|
-
// controls row; each re-filters the table in place. Options come from the
|
|
82
|
-
// shared KIND_LIST / packagesInCatalog (declared by the filters emitter).
|
|
83
|
-
const kindPackageBlock = filterByKP
|
|
84
|
-
? String.raw `
|
|
85
|
-
controlsRow.appendChild(el('span', { class: 'code-paths-graph-toolbar-label', text: 'Kind' }));
|
|
86
|
-
const fnKindSel = el('select', { class: 'code-paths-graph-select', 'data-control': 'fn-kind' });
|
|
87
|
-
fnKindSel.appendChild(el('option', { value: '', text: 'All kinds' }));
|
|
88
|
-
(typeof KIND_LIST !== 'undefined' ? KIND_LIST : []).forEach(function(k) {
|
|
89
|
-
const o = el('option', { value: k, text: k });
|
|
90
|
-
if (k === ${kindVar}) o.selected = true;
|
|
91
|
-
fnKindSel.appendChild(o);
|
|
92
|
-
});
|
|
93
|
-
fnKindSel.addEventListener('change', e => { ${kindVar} = (e.target && e.target.value) || ''; renderRows(); });
|
|
94
|
-
controlsRow.appendChild(fnKindSel);
|
|
95
|
-
controlsRow.appendChild(el('span', { class: 'code-paths-graph-toolbar-label', text: 'Package' }));
|
|
96
|
-
const fnPkgSel = el('select', { class: 'code-paths-graph-select', 'data-control': 'fn-package' });
|
|
97
|
-
fnPkgSel.appendChild(el('option', { value: '', text: 'All packages' }));
|
|
98
|
-
((typeof packagesInCatalog === 'function') ? packagesInCatalog(catalog) : []).forEach(function(p) {
|
|
99
|
-
const o = el('option', { value: p, text: p });
|
|
100
|
-
if (p === ${pkgVar}) o.selected = true;
|
|
101
|
-
fnPkgSel.appendChild(o);
|
|
102
|
-
});
|
|
103
|
-
fnPkgSel.addEventListener('change', e => { ${pkgVar} = (e.target && e.target.value) || ''; renderRows(); });
|
|
104
|
-
controlsRow.appendChild(fnPkgSel);`
|
|
105
|
-
: '';
|
|
106
|
-
const searchInputBlock = searchByName
|
|
107
|
-
? String.raw `
|
|
108
|
-
const searchInput = el('input', {
|
|
109
|
-
type: 'search',
|
|
110
|
-
class: 'search-input code-paths-search',
|
|
111
|
-
id: 'code-paths-search-${config.id}',
|
|
112
|
-
placeholder: 'Filter functions by name…',
|
|
113
|
-
});
|
|
114
|
-
searchInput.value = ${queryVar};
|
|
115
|
-
searchInput.addEventListener('input', e => {
|
|
116
|
-
${queryVar} = (e.target && e.target.value) || '';
|
|
117
|
-
renderRows();
|
|
118
|
-
});
|
|
119
|
-
controlsRow.appendChild(searchInput);`
|
|
120
|
-
: '';
|
|
121
|
-
// Checkbox toggle (filterToggle) — rendered AFTER the search box; narrows the
|
|
122
|
-
// table to rows matching the predicate when checked.
|
|
123
|
-
const toggleBlock = toggle
|
|
124
|
-
? String.raw `
|
|
125
|
-
const toggleLabel = el('label', { class: 'code-paths-graph-checkbox' });
|
|
126
|
-
const toggleCb = el('input', { type: 'checkbox', 'data-control': 'fn-toggle' });
|
|
127
|
-
toggleCb.checked = ${toggleVar};
|
|
128
|
-
toggleCb.addEventListener('change', () => { ${toggleVar} = toggleCb.checked; renderRows(); });
|
|
129
|
-
toggleLabel.appendChild(toggleCb);
|
|
130
|
-
toggleLabel.appendChild(document.createTextNode(' ' + ${jsString(toggle.label)}));
|
|
131
|
-
controlsRow.appendChild(toggleLabel);`
|
|
132
|
-
: '';
|
|
133
|
-
// The controls row (Kind · Package · search · toggle) sits above the table.
|
|
134
|
-
// When no controls are configured, rows render straight into the container.
|
|
135
|
-
const controlsBlock = hasControls
|
|
136
|
-
? String.raw `
|
|
137
|
-
const controlsRow = el('div', { class: 'code-paths-ranked-controls' });${kindPackageBlock}${searchInputBlock}${toggleBlock}
|
|
138
|
-
container.appendChild(controlsRow);`
|
|
139
|
-
: '';
|
|
140
|
-
// The section heading renders into its OWN host ABOVE the controls (so the
|
|
141
|
-
// "Functions (N) ⓘ" heading sits above the dropdowns, consistent with the
|
|
142
|
-
// Coupling and Visualization views). The rows always render into a separate
|
|
143
|
-
// host below — renderFunctionRows clears its host, so it must NOT be the
|
|
144
|
-
// shared container (that would wipe the heading + controls).
|
|
145
|
-
// Combined row predicate: Kind, Package, then name substring. Each clause is
|
|
146
|
-
// skipped when its control is absent or set to "all"/empty.
|
|
147
|
-
const kindClause = filterByKP ? `if (${kindVar} && occ.kind !== ${kindVar}) return false;` : '';
|
|
148
|
-
const pkgClause = filterByKP ? `if (${pkgVar} && pkgOf(occ) !== ${pkgVar}) return false;` : '';
|
|
149
|
-
const nameClause = searchByName
|
|
150
|
-
? `const q = (${queryVar} || '').trim().toLowerCase(); if (q.length && (occ.simpleName || '').toLowerCase().indexOf(q) === -1) return false;`
|
|
151
|
-
: '';
|
|
152
|
-
const toggleClause = toggle ? `if (${toggleVar} && !(${toggle.predicate})) return false;` : '';
|
|
153
|
-
const rowFilterExpr = hasControls
|
|
154
|
-
? `(function(occ){ ${kindClause} ${pkgClause} ${nameClause} ${toggleClause} return true; })`
|
|
155
|
-
: '(function(){ return true; })';
|
|
156
|
-
const onActivateBlock = searchByName
|
|
157
|
-
? String.raw `,
|
|
158
|
-
onActivate() {
|
|
159
|
-
const input = document.getElementById('code-paths-search-${config.id}');
|
|
160
|
-
if (input && typeof input.focus === 'function') input.focus();
|
|
161
|
-
}`
|
|
162
|
-
: '';
|
|
163
|
-
return String.raw `
|
|
164
|
-
${stateDecl}views.push({
|
|
165
|
-
id: ${jsString(config.id)},
|
|
166
|
-
label: ${jsString(config.label)},
|
|
167
|
-
help: ${helpJson},
|
|
168
|
-
render(container, catalog, indexes, filterState) {
|
|
169
|
-
while (container.firstChild) container.removeChild(container.firstChild);
|
|
170
|
-
if (!catalog || !catalog.functions) {
|
|
171
|
-
container.appendChild(el('div', { class: 'empty', text: 'No catalog loaded.' }));
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
${preamble}
|
|
175
|
-
const ranked = [];
|
|
176
|
-
for (const occ of indexes.byBodyHash.values()) {
|
|
177
|
-
if (!(${predicate})) continue;
|
|
178
|
-
const metric = (${config.metric});
|
|
179
|
-
if (metric === false) continue;
|
|
180
|
-
ranked.push({ occ, metric });
|
|
181
|
-
}
|
|
182
|
-
ranked.sort((a, b) => b.metric - a.metric);
|
|
183
|
-
if (ranked.length === 0) {
|
|
184
|
-
container.appendChild(el('div', { class: 'empty', text: ${jsString(config.emptyMessage)} }));
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
const headingHost = el('div'); container.appendChild(headingHost);
|
|
188
|
-
${controlsBlock}
|
|
189
|
-
const rowsHost = el('div'); container.appendChild(rowsHost);
|
|
190
|
-
const __rowFilter = ${rowFilterExpr};
|
|
191
|
-
function renderRows() {
|
|
192
|
-
const filtered = ranked.filter(r => __rowFilter(r.occ));
|
|
193
|
-
// Heading (with the ⓘ help button) above the controls; its count tracks
|
|
194
|
-
// the currently-shown rows as the filters narrow them.
|
|
195
|
-
while (headingHost.firstChild) headingHost.removeChild(headingHost.firstChild);
|
|
196
|
-
headingHost.appendChild(makeSectionHeading(${jsString(config.headingText)} + ' (' + filtered.length + ')', ${jsString(config.id)}));
|
|
197
|
-
if (filtered.length === 0) {
|
|
198
|
-
while (rowsHost.firstChild) rowsHost.removeChild(rowsHost.firstChild);
|
|
199
|
-
rowsHost.appendChild(el('div', { class: 'empty', text: ${jsString(config.emptyMessage)} }));
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
renderFunctionRows(
|
|
203
|
-
rowsHost,
|
|
204
|
-
filtered.map(r => Object.assign({}, r.occ, { __metric: r.metric }, (function(occ, metric){ return ${rowExtras}; })(r.occ, r.metric))),
|
|
205
|
-
[
|
|
206
|
-
${columnsLiteral}
|
|
207
|
-
],
|
|
208
|
-
${jsString(config.headingText)},
|
|
209
|
-
${jsString(config.id)},
|
|
210
|
-
true,
|
|
211
|
-
);
|
|
212
|
-
}
|
|
213
|
-
renderRows();
|
|
214
|
-
}${onActivateBlock}
|
|
215
|
-
});
|
|
216
|
-
`;
|
|
217
|
-
}
|
|
218
|
-
//# sourceMappingURL=view-template.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"view-template.js","sourceRoot":"","sources":["../../src/code-paths/view-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* View registry — emits the singleton `views = []` and the dispatch
|
|
3
|
-
* helpers (`activateView(id)`, `renderActiveView()`).
|
|
4
|
-
*
|
|
5
|
-
* Each `view-*.ts` file pushes its own `View` literal into `views`. The
|
|
6
|
-
* panel orchestrator iterates the registry to render tabs and to fan
|
|
7
|
-
* out filter-change notifications (§10.1 / §10.3).
|
|
8
|
-
*
|
|
9
|
-
* `activateView(id)` updates `location.hash` to `#code-paths/<id>` so
|
|
10
|
-
* each view is deep-linkable (§7 Phase P3 step 4).
|
|
11
|
-
*/
|
|
12
|
-
export declare function dashboardViewsRegistryJs(): string;
|
|
13
|
-
//# sourceMappingURL=views-registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"views-registry.d.ts","sourceRoot":"","sources":["../../src/code-paths/views-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,wBAAgB,wBAAwB,IAAI,MAAM,CAwCjD"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* View registry — emits the singleton `views = []` and the dispatch
|
|
3
|
-
* helpers (`activateView(id)`, `renderActiveView()`).
|
|
4
|
-
*
|
|
5
|
-
* Each `view-*.ts` file pushes its own `View` literal into `views`. The
|
|
6
|
-
* panel orchestrator iterates the registry to render tabs and to fan
|
|
7
|
-
* out filter-change notifications (§10.1 / §10.3).
|
|
8
|
-
*
|
|
9
|
-
* `activateView(id)` updates `location.hash` to `#code-paths/<id>` so
|
|
10
|
-
* each view is deep-linkable (§7 Phase P3 step 4).
|
|
11
|
-
*/
|
|
12
|
-
export function dashboardViewsRegistryJs() {
|
|
13
|
-
return String.raw `
|
|
14
|
-
const views = [];
|
|
15
|
-
let activeViewId = null;
|
|
16
|
-
|
|
17
|
-
function getView(id) {
|
|
18
|
-
for (const v of views) if (v.id === id) return v;
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function renderActiveView() {
|
|
23
|
-
if (!activeViewId) return;
|
|
24
|
-
const view = getView(activeViewId);
|
|
25
|
-
if (!view) return;
|
|
26
|
-
const container = document.getElementById('code-paths-view-' + view.id);
|
|
27
|
-
if (!container) return;
|
|
28
|
-
view.render(container, graphCatalog, graphIndexes, filterState);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function activateView(id) {
|
|
32
|
-
const view = getView(id);
|
|
33
|
-
if (!view) return;
|
|
34
|
-
activeViewId = id;
|
|
35
|
-
document.querySelectorAll('.code-paths-tab').forEach(t => {
|
|
36
|
-
t.classList.toggle('active', t.dataset.view === id);
|
|
37
|
-
});
|
|
38
|
-
document.querySelectorAll('.code-paths-view').forEach(p => {
|
|
39
|
-
p.classList.toggle('active', p.id === 'code-paths-view-' + id);
|
|
40
|
-
});
|
|
41
|
-
// Deep-link via hash, but don't loop on programmatic updates.
|
|
42
|
-
const next = '#code-paths/' + id;
|
|
43
|
-
if (typeof window !== 'undefined' && window.location.hash !== next) {
|
|
44
|
-
try { history.replaceState(null, '', next); } catch (e) { /* ignore */ }
|
|
45
|
-
}
|
|
46
|
-
renderActiveView();
|
|
47
|
-
if (typeof view.onActivate === 'function') {
|
|
48
|
-
try { view.onActivate(); } catch (e) { /* ignore */ }
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
`;
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=views-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"views-registry.js","sourceRoot":"","sources":["../../src/code-paths/views-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,UAAU,wBAAwB;IACtC,OAAO,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsClB,CAAC;AACF,CAAC"}
|
package/dist/overview.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Overview tab — cross-tool recent activity table.
|
|
3
|
-
* Returns JS code as a string.
|
|
4
|
-
*
|
|
5
|
-
* The `toolBadgeStyles` and `tabMap` literals spliced into the emitted
|
|
6
|
-
* JS are derived from the `defineToolTab` registry rather than
|
|
7
|
-
* hard-coded — every registered tool tab contributes one entry to
|
|
8
|
-
* each map. Adding a new tool is a `defineToolTab` call; this
|
|
9
|
-
* function picks it up automatically. (F1/F8.)
|
|
10
|
-
*/
|
|
11
|
-
import './tool-tabs-registrations.js';
|
|
12
|
-
export declare function dashboardOverviewJs(): string;
|
|
13
|
-
//# sourceMappingURL=overview.d.ts.map
|
package/dist/overview.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../src/overview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,8BAA8B,CAAC;AAEtC,wBAAgB,mBAAmB,IAAI,MAAM,CA6E5C"}
|
package/dist/overview.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Overview tab — cross-tool recent activity table.
|
|
3
|
-
* Returns JS code as a string.
|
|
4
|
-
*
|
|
5
|
-
* The `toolBadgeStyles` and `tabMap` literals spliced into the emitted
|
|
6
|
-
* JS are derived from the `defineToolTab` registry rather than
|
|
7
|
-
* hard-coded — every registered tool tab contributes one entry to
|
|
8
|
-
* each map. Adding a new tool is a `defineToolTab` call; this
|
|
9
|
-
* function picks it up automatically. (F1/F8.)
|
|
10
|
-
*/
|
|
11
|
-
import { listToolTabs } from './tool-tab-registry.js';
|
|
12
|
-
import './tool-tabs-registrations.js'; // side-effect: registers fit/sim/graph
|
|
13
|
-
export function dashboardOverviewJs() {
|
|
14
|
-
const toolTabs = listToolTabs();
|
|
15
|
-
const badgeStylesEntries = toolTabs
|
|
16
|
-
.map((t) => ` ${JSON.stringify(t.tool)}: ${JSON.stringify(t.badgeStyle)},`)
|
|
17
|
-
.join('\n');
|
|
18
|
-
const tabMapEntries = toolTabs
|
|
19
|
-
.map((t) => `${JSON.stringify(t.tool)}: ${JSON.stringify(t.id)}`)
|
|
20
|
-
.join(', ');
|
|
21
|
-
return `
|
|
22
|
-
// =======================================================
|
|
23
|
-
// OVERVIEW TAB
|
|
24
|
-
// =======================================================
|
|
25
|
-
function renderOverview() {
|
|
26
|
-
const panel = document.getElementById('panel-overview');
|
|
27
|
-
if (!sessions.length) { panel.appendChild(el('div', {class:'empty', text:'No sessions yet.'})); return; }
|
|
28
|
-
|
|
29
|
-
const sec = el('div', {class:'section'}, [el('h3', {text:'Recent Activity'})]);
|
|
30
|
-
const table = el('table', {class:'data-table sortable'});
|
|
31
|
-
const thead = el('thead');
|
|
32
|
-
const headerRow = el('tr');
|
|
33
|
-
['Timestamp', 'Tool', 'Recipe', 'Pass Rate', 'Status', 'Checks', 'Findings', 'Duration'].forEach(h => {
|
|
34
|
-
headerRow.appendChild(el('th', {text: h}));
|
|
35
|
-
});
|
|
36
|
-
thead.appendChild(headerRow);
|
|
37
|
-
table.appendChild(thead);
|
|
38
|
-
|
|
39
|
-
const tbody = el('tbody');
|
|
40
|
-
// Derived from the defineToolTab registry — see tool-tab-registry.ts
|
|
41
|
-
// and tool-tabs-registrations.ts. New tools register descriptors;
|
|
42
|
-
// these maps update automatically.
|
|
43
|
-
const toolBadgeStyles = {
|
|
44
|
-
${badgeStylesEntries}
|
|
45
|
-
};
|
|
46
|
-
const tabMap = { ${tabMapEntries} };
|
|
47
|
-
|
|
48
|
-
sessions.forEach(s => {
|
|
49
|
-
const sc2 = s.score >= 90 ? 'color:var(--success)' : s.score >= 70 ? 'color:var(--warning)' : 'color:var(--error)';
|
|
50
|
-
// Per-session counts live in the tool-owned opaque payload. Tools
|
|
51
|
-
// that persist no summary (or none yet) fall back to zeros so the
|
|
52
|
-
// cross-tool row stays well-formed.
|
|
53
|
-
const sm = (s.payload && s.payload.summary) || { total: 0, passed: 0, failed: 0, errors: 0, warnings: 0 };
|
|
54
|
-
const row = el('tr', {class:'clickable', onclick: () => {
|
|
55
|
-
// Tabs that need session-aware deep-linking (Code Paths today;
|
|
56
|
-
// future fit/sim detail views) register an activator into the
|
|
57
|
-
// shared tabActivators registry. If one matches this session's
|
|
58
|
-
// tool, hand off to it. Otherwise fall back to plain top-level
|
|
59
|
-
// tab switching by name.
|
|
60
|
-
if (activateTabForSession(s)) return;
|
|
61
|
-
const tabName = tabMap[s.tool] || s.tool;
|
|
62
|
-
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
|
|
63
|
-
document.querySelectorAll('.tab-panel').forEach(p => p.classList.remove('active'));
|
|
64
|
-
const tab = document.querySelector('.tab[data-tab="' + tabName + '"]');
|
|
65
|
-
if (tab) tab.classList.add('active');
|
|
66
|
-
const panel = document.getElementById('panel-' + tabName);
|
|
67
|
-
if (panel) panel.classList.add('active');
|
|
68
|
-
}});
|
|
69
|
-
row.appendChild(el('td', {class:'cell-nowrap', text: new Date(s.startedAt).toLocaleString(), style:'color:var(--text-dim)'}));
|
|
70
|
-
const toolCell = el('td');
|
|
71
|
-
toolCell.appendChild(el('span', {class:'badge', style: toolBadgeStyles[s.tool] || '', text: s.tool.toUpperCase()}));
|
|
72
|
-
row.appendChild(toolCell);
|
|
73
|
-
row.appendChild(el('td', {text: s.recipe || 'default', style:'color:var(--text-muted)'}));
|
|
74
|
-
row.appendChild(el('td', {text: s.score+'%', style:'font-weight:600;'+sc2}));
|
|
75
|
-
const statusCell = el('td');
|
|
76
|
-
statusCell.appendChild(statusBadge(sessionStatus(s)));
|
|
77
|
-
row.appendChild(statusCell);
|
|
78
|
-
row.appendChild(el('td', {text: sm.passed+'/'+sm.total}));
|
|
79
|
-
row.appendChild(el('td', {text: ''+(sm.errors + (sm.warnings || 0))}));
|
|
80
|
-
row.appendChild(el('td', {text: (s.durationMs/1000).toFixed(1)+'s', style:'color:var(--text-dim)'}));
|
|
81
|
-
tbody.appendChild(row);
|
|
82
|
-
});
|
|
83
|
-
table.appendChild(tbody);
|
|
84
|
-
const pag = el('div', {class:'pagination'});
|
|
85
|
-
sec.appendChild(el('div', {class:'card'}, [table, pag]));
|
|
86
|
-
panel.appendChild(sec);
|
|
87
|
-
paginateTable(tbody, pag, 10);
|
|
88
|
-
}
|
|
89
|
-
`;
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=overview.js.map
|
package/dist/overview.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../src/overview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,8BAA8B,CAAC,CAAC,uCAAuC;AAE9E,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,kBAAkB,GAAG,QAAQ;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;SAC7E,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,aAAa,GAAG,QAAQ;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;SAChE,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;;;;;;;;;;;;;;;;;;;;;;;EAuBP,kBAAkB;;qBAEC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CjC,CAAC;AACF,CAAC"}
|
package/dist/recipes.d.ts
DELETED
package/dist/recipes.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,kBAAkB,IAAI,MAAM,CA8D3C"}
|
package/dist/recipes.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Recipes catalog rendering — shows available recipes with their configuration.
|
|
3
|
-
* Returns JS code as a string.
|
|
4
|
-
*/
|
|
5
|
-
export function dashboardRecipesJs() {
|
|
6
|
-
return `
|
|
7
|
-
// =======================================================
|
|
8
|
-
// RECIPES CATALOG
|
|
9
|
-
// =======================================================
|
|
10
|
-
|
|
11
|
-
function renderRecipesPanel(container, recipesData) {
|
|
12
|
-
if (!recipesData || !recipesData.length) {
|
|
13
|
-
container.appendChild(el('div', {class:'empty', text:'No recipes available.'}));
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const table = el('table', {class:'data-table'});
|
|
18
|
-
const thead = el('thead');
|
|
19
|
-
const headerRow = el('tr');
|
|
20
|
-
['Recipe', 'Description', 'Selector', 'Mode', 'Timeout', 'Tags'].forEach(h => {
|
|
21
|
-
headerRow.appendChild(el('th', {text: h}));
|
|
22
|
-
});
|
|
23
|
-
thead.appendChild(headerRow);
|
|
24
|
-
table.appendChild(thead);
|
|
25
|
-
|
|
26
|
-
const tbody = el('tbody');
|
|
27
|
-
recipesData.forEach(recipe => {
|
|
28
|
-
const row = el('tr');
|
|
29
|
-
|
|
30
|
-
// Name
|
|
31
|
-
const nameCell = el('td', {style:'font-weight:500'});
|
|
32
|
-
nameCell.appendChild(el('div', {text: recipe.displayName}));
|
|
33
|
-
nameCell.appendChild(el('div', {text: recipe.name, style:'font-size:11px;color:var(--text-dim);font-weight:400'}));
|
|
34
|
-
row.appendChild(nameCell);
|
|
35
|
-
|
|
36
|
-
// Description
|
|
37
|
-
row.appendChild(el('td', {text: recipe.description, style:'color:var(--text-muted)'}));
|
|
38
|
-
|
|
39
|
-
// Selector type
|
|
40
|
-
const selCell = el('td');
|
|
41
|
-
selCell.appendChild(el('span', {class:'badge', style:'background:var(--bg-hover);color:var(--text-muted)', text: recipe.selectorType}));
|
|
42
|
-
row.appendChild(selCell);
|
|
43
|
-
|
|
44
|
-
// Mode
|
|
45
|
-
const modeCell = el('td');
|
|
46
|
-
const modeColor = recipe.mode === 'parallel' ? 'color:var(--success)' : 'color:var(--warning)';
|
|
47
|
-
modeCell.appendChild(el('span', {text: recipe.mode, style: modeColor + ';font-size:12px'}));
|
|
48
|
-
row.appendChild(modeCell);
|
|
49
|
-
|
|
50
|
-
// Timeout
|
|
51
|
-
row.appendChild(el('td', {text: (recipe.timeout / 1000) + 's', style:'color:var(--text-dim);font-size:12px'}));
|
|
52
|
-
|
|
53
|
-
// Tags
|
|
54
|
-
const tagsCell = el('td');
|
|
55
|
-
(recipe.tags || []).forEach(t => {
|
|
56
|
-
tagsCell.appendChild(el('span', {class:'tag-badge', text: t}));
|
|
57
|
-
});
|
|
58
|
-
row.appendChild(tagsCell);
|
|
59
|
-
|
|
60
|
-
tbody.appendChild(row);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
table.appendChild(tbody);
|
|
64
|
-
container.appendChild(el('div', {class:'card'}, [table]));
|
|
65
|
-
}
|
|
66
|
-
`;
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=recipes.js.map
|
package/dist/recipes.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.js","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DR,CAAC;AACF,CAAC"}
|
package/dist/sessions.d.ts
DELETED
package/dist/sessions.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,mBAAmB,IAAI,MAAM,CA0R5C"}
|