@opensip-cli/dashboard 0.1.0
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/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +31 -0
- package/dist/__tests__/catalog-provenance.test.d.ts +11 -0
- package/dist/__tests__/catalog-provenance.test.d.ts.map +1 -0
- package/dist/__tests__/catalog-provenance.test.js +130 -0
- package/dist/__tests__/catalog-provenance.test.js.map +1 -0
- package/dist/__tests__/coupling-attribution.test.d.ts +9 -0
- package/dist/__tests__/coupling-attribution.test.d.ts.map +1 -0
- package/dist/__tests__/coupling-attribution.test.js +99 -0
- package/dist/__tests__/coupling-attribution.test.js.map +1 -0
- package/dist/__tests__/dashboard-bundle-weight.test.d.ts +16 -0
- package/dist/__tests__/dashboard-bundle-weight.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-bundle-weight.test.js +73 -0
- package/dist/__tests__/dashboard-bundle-weight.test.js.map +1 -0
- package/dist/__tests__/dashboard-cell-containment.test.d.ts +2 -0
- package/dist/__tests__/dashboard-cell-containment.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-cell-containment.test.js +49 -0
- package/dist/__tests__/dashboard-cell-containment.test.js.map +1 -0
- package/dist/__tests__/dashboard-cytoscape-vendor.test.d.ts +10 -0
- package/dist/__tests__/dashboard-cytoscape-vendor.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-cytoscape-vendor.test.js +40 -0
- package/dist/__tests__/dashboard-cytoscape-vendor.test.js.map +1 -0
- package/dist/__tests__/dashboard-editor-link.test.d.ts +5 -0
- package/dist/__tests__/dashboard-editor-link.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-editor-link.test.js +36 -0
- package/dist/__tests__/dashboard-editor-link.test.js.map +1 -0
- package/dist/__tests__/dashboard-filters.test.d.ts +9 -0
- package/dist/__tests__/dashboard-filters.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-filters.test.js +95 -0
- package/dist/__tests__/dashboard-filters.test.js.map +1 -0
- package/dist/__tests__/dashboard-function-card-singleton.test.d.ts +9 -0
- package/dist/__tests__/dashboard-function-card-singleton.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-function-card-singleton.test.js +87 -0
- package/dist/__tests__/dashboard-function-card-singleton.test.js.map +1 -0
- package/dist/__tests__/dashboard-function-card.test.d.ts +10 -0
- package/dist/__tests__/dashboard-function-card.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-function-card.test.js +403 -0
- package/dist/__tests__/dashboard-function-card.test.js.map +1 -0
- package/dist/__tests__/dashboard-function-row.test.d.ts +11 -0
- package/dist/__tests__/dashboard-function-row.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-function-row.test.js +101 -0
- package/dist/__tests__/dashboard-function-row.test.js.map +1 -0
- package/dist/__tests__/dashboard-generator-graph-catalog.test.d.ts +9 -0
- package/dist/__tests__/dashboard-generator-graph-catalog.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-generator-graph-catalog.test.js +75 -0
- package/dist/__tests__/dashboard-generator-graph-catalog.test.js.map +1 -0
- package/dist/__tests__/dashboard-graph-offline.integration.test.d.ts +13 -0
- package/dist/__tests__/dashboard-graph-offline.integration.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-graph-offline.integration.test.js +55 -0
- package/dist/__tests__/dashboard-graph-offline.integration.test.js.map +1 -0
- package/dist/__tests__/dashboard-graph-scc.test.d.ts +17 -0
- package/dist/__tests__/dashboard-graph-scc.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-graph-scc.test.js +89 -0
- package/dist/__tests__/dashboard-graph-scc.test.js.map +1 -0
- package/dist/__tests__/dashboard-graph-view-model.test.d.ts +12 -0
- package/dist/__tests__/dashboard-graph-view-model.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-graph-view-model.test.js +331 -0
- package/dist/__tests__/dashboard-graph-view-model.test.js.map +1 -0
- package/dist/__tests__/dashboard-help-drawer.test.d.ts +9 -0
- package/dist/__tests__/dashboard-help-drawer.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-help-drawer.test.js +101 -0
- package/dist/__tests__/dashboard-help-drawer.test.js.map +1 -0
- package/dist/__tests__/dashboard-html.test.d.ts +2 -0
- package/dist/__tests__/dashboard-html.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-html.test.js +169 -0
- package/dist/__tests__/dashboard-html.test.js.map +1 -0
- package/dist/__tests__/dashboard-indexes.test.d.ts +9 -0
- package/dist/__tests__/dashboard-indexes.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-indexes.test.js +211 -0
- package/dist/__tests__/dashboard-indexes.test.js.map +1 -0
- package/dist/__tests__/dashboard-path-utils.test.d.ts +6 -0
- package/dist/__tests__/dashboard-path-utils.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-path-utils.test.js +54 -0
- package/dist/__tests__/dashboard-path-utils.test.js.map +1 -0
- package/dist/__tests__/dashboard-search.test.d.ts +5 -0
- package/dist/__tests__/dashboard-search.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-search.test.js +46 -0
- package/dist/__tests__/dashboard-search.test.js.map +1 -0
- package/dist/__tests__/dashboard-sessions.test.d.ts +14 -0
- package/dist/__tests__/dashboard-sessions.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-sessions.test.js +330 -0
- package/dist/__tests__/dashboard-sessions.test.js.map +1 -0
- package/dist/__tests__/dashboard-trace.test.d.ts +5 -0
- package/dist/__tests__/dashboard-trace.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-trace.test.js +147 -0
- package/dist/__tests__/dashboard-trace.test.js.map +1 -0
- package/dist/__tests__/dashboard-validation.integration.test.d.ts +14 -0
- package/dist/__tests__/dashboard-validation.integration.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-validation.integration.test.js +221 -0
- package/dist/__tests__/dashboard-validation.integration.test.js.map +1 -0
- package/dist/__tests__/dashboard-view-conformance.test.d.ts +12 -0
- package/dist/__tests__/dashboard-view-conformance.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-view-conformance.test.js +58 -0
- package/dist/__tests__/dashboard-view-conformance.test.js.map +1 -0
- package/dist/__tests__/dashboard-view-coupling.test.d.ts +7 -0
- package/dist/__tests__/dashboard-view-coupling.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-view-coupling.test.js +381 -0
- package/dist/__tests__/dashboard-view-coupling.test.js.map +1 -0
- package/dist/__tests__/dashboard-view-distribution.test.d.ts +10 -0
- package/dist/__tests__/dashboard-view-distribution.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-view-distribution.test.js +272 -0
- package/dist/__tests__/dashboard-view-distribution.test.js.map +1 -0
- package/dist/__tests__/dashboard-view-graph.test.d.ts +13 -0
- package/dist/__tests__/dashboard-view-graph.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-view-graph.test.js +332 -0
- package/dist/__tests__/dashboard-view-graph.test.js.map +1 -0
- package/dist/__tests__/dashboard-view-template.test.d.ts +21 -0
- package/dist/__tests__/dashboard-view-template.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-view-template.test.js +153 -0
- package/dist/__tests__/dashboard-view-template.test.js.map +1 -0
- package/dist/__tests__/dashboard.test.d.ts +2 -0
- package/dist/__tests__/dashboard.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard.test.js +129 -0
- package/dist/__tests__/dashboard.test.js.map +1 -0
- package/dist/__tests__/graph-tab.test.d.ts +10 -0
- package/dist/__tests__/graph-tab.test.d.ts.map +1 -0
- package/dist/__tests__/graph-tab.test.js +76 -0
- package/dist/__tests__/graph-tab.test.js.map +1 -0
- package/dist/checks.d.ts +7 -0
- package/dist/checks.d.ts.map +1 -0
- package/dist/checks.js +283 -0
- package/dist/checks.js.map +1 -0
- package/dist/code-paths/__tests__/views-registry.test.d.ts +13 -0
- package/dist/code-paths/__tests__/views-registry.test.d.ts.map +1 -0
- package/dist/code-paths/__tests__/views-registry.test.js +39 -0
- package/dist/code-paths/__tests__/views-registry.test.js.map +1 -0
- package/dist/code-paths/catalog-provenance.d.ts +22 -0
- package/dist/code-paths/catalog-provenance.d.ts.map +1 -0
- package/dist/code-paths/catalog-provenance.js +108 -0
- package/dist/code-paths/catalog-provenance.js.map +1 -0
- package/dist/code-paths/catalog-recipes-tables.d.ts +11 -0
- package/dist/code-paths/catalog-recipes-tables.d.ts.map +1 -0
- package/dist/code-paths/catalog-recipes-tables.js +86 -0
- package/dist/code-paths/catalog-recipes-tables.js.map +1 -0
- package/dist/code-paths/cytoscape-vendor.d.ts +27 -0
- package/dist/code-paths/cytoscape-vendor.d.ts.map +1 -0
- package/dist/code-paths/cytoscape-vendor.js +68 -0
- package/dist/code-paths/cytoscape-vendor.js.map +1 -0
- package/dist/code-paths/editor-link.d.ts +10 -0
- package/dist/code-paths/editor-link.d.ts.map +1 -0
- package/dist/code-paths/editor-link.js +20 -0
- package/dist/code-paths/editor-link.js.map +1 -0
- package/dist/code-paths/filters.d.ts +19 -0
- package/dist/code-paths/filters.d.ts.map +1 -0
- package/dist/code-paths/filters.js +47 -0
- package/dist/code-paths/filters.js.map +1 -0
- package/dist/code-paths/function-card.d.ts +15 -0
- package/dist/code-paths/function-card.d.ts.map +1 -0
- package/dist/code-paths/function-card.js +169 -0
- package/dist/code-paths/function-card.js.map +1 -0
- package/dist/code-paths/function-row.d.ts +17 -0
- package/dist/code-paths/function-row.d.ts.map +1 -0
- package/dist/code-paths/function-row.js +77 -0
- package/dist/code-paths/function-row.js.map +1 -0
- package/dist/code-paths/graph-controls.d.ts +27 -0
- package/dist/code-paths/graph-controls.d.ts.map +1 -0
- package/dist/code-paths/graph-controls.js +257 -0
- package/dist/code-paths/graph-controls.js.map +1 -0
- package/dist/code-paths/graph-scc.d.ts +32 -0
- package/dist/code-paths/graph-scc.d.ts.map +1 -0
- package/dist/code-paths/graph-scc.js +136 -0
- package/dist/code-paths/graph-scc.js.map +1 -0
- package/dist/code-paths/graph-stylesheet.d.ts +22 -0
- package/dist/code-paths/graph-stylesheet.d.ts.map +1 -0
- package/dist/code-paths/graph-stylesheet.js +121 -0
- package/dist/code-paths/graph-stylesheet.js.map +1 -0
- package/dist/code-paths/graph-view-model.d.ts +120 -0
- package/dist/code-paths/graph-view-model.d.ts.map +1 -0
- package/dist/code-paths/graph-view-model.js +199 -0
- package/dist/code-paths/graph-view-model.js.map +1 -0
- package/dist/code-paths/help-drawer.d.ts +18 -0
- package/dist/code-paths/help-drawer.d.ts.map +1 -0
- package/dist/code-paths/help-drawer.js +54 -0
- package/dist/code-paths/help-drawer.js.map +1 -0
- package/dist/code-paths/indexes.d.ts +28 -0
- package/dist/code-paths/indexes.d.ts.map +1 -0
- package/dist/code-paths/indexes.js +97 -0
- package/dist/code-paths/indexes.js.map +1 -0
- package/dist/code-paths/path-utils.d.ts +15 -0
- package/dist/code-paths/path-utils.d.ts.map +1 -0
- package/dist/code-paths/path-utils.js +47 -0
- package/dist/code-paths/path-utils.js.map +1 -0
- package/dist/code-paths/search.d.ts +14 -0
- package/dist/code-paths/search.d.ts.map +1 -0
- package/dist/code-paths/search.js +54 -0
- package/dist/code-paths/search.js.map +1 -0
- package/dist/code-paths/trace.d.ts +11 -0
- package/dist/code-paths/trace.d.ts.map +1 -0
- package/dist/code-paths/trace.js +60 -0
- package/dist/code-paths/trace.js.map +1 -0
- package/dist/code-paths/view-coupling.d.ts +22 -0
- package/dist/code-paths/view-coupling.d.ts.map +1 -0
- package/dist/code-paths/view-coupling.js +218 -0
- package/dist/code-paths/view-coupling.js.map +1 -0
- package/dist/code-paths/view-distribution.d.ts +20 -0
- package/dist/code-paths/view-distribution.d.ts.map +1 -0
- package/dist/code-paths/view-distribution.js +82 -0
- package/dist/code-paths/view-distribution.js.map +1 -0
- package/dist/code-paths/view-graph.d.ts +35 -0
- package/dist/code-paths/view-graph.d.ts.map +1 -0
- package/dist/code-paths/view-graph.js +379 -0
- package/dist/code-paths/view-graph.js.map +1 -0
- package/dist/code-paths/view-template.d.ts +154 -0
- package/dist/code-paths/view-template.d.ts.map +1 -0
- package/dist/code-paths/view-template.js +218 -0
- package/dist/code-paths/view-template.js.map +1 -0
- package/dist/code-paths/views-registry.d.ts +13 -0
- package/dist/code-paths/views-registry.d.ts.map +1 -0
- package/dist/code-paths/views-registry.js +53 -0
- package/dist/code-paths/views-registry.js.map +1 -0
- package/dist/code-paths.d.ts +69 -0
- package/dist/code-paths.d.ts.map +1 -0
- package/dist/code-paths.js +356 -0
- package/dist/code-paths.js.map +1 -0
- package/dist/css/cards.d.ts +9 -0
- package/dist/css/cards.d.ts.map +1 -0
- package/dist/css/cards.js +36 -0
- package/dist/css/cards.js.map +1 -0
- package/dist/css/code-paths.d.ts +9 -0
- package/dist/css/code-paths.d.ts.map +1 -0
- package/dist/css/code-paths.js +111 -0
- package/dist/css/code-paths.js.map +1 -0
- package/dist/css/data-table.d.ts +12 -0
- package/dist/css/data-table.d.ts.map +1 -0
- package/dist/css/data-table.js +103 -0
- package/dist/css/data-table.js.map +1 -0
- package/dist/css/function-card.d.ts +6 -0
- package/dist/css/function-card.d.ts.map +1 -0
- package/dist/css/function-card.js +26 -0
- package/dist/css/function-card.js.map +1 -0
- package/dist/css/help-drawer.d.ts +6 -0
- package/dist/css/help-drawer.d.ts.map +1 -0
- package/dist/css/help-drawer.js +22 -0
- package/dist/css/help-drawer.js.map +1 -0
- package/dist/css/tabs.d.ts +9 -0
- package/dist/css/tabs.d.ts.map +1 -0
- package/dist/css/tabs.js +28 -0
- package/dist/css/tabs.js.map +1 -0
- package/dist/css/theme.d.ts +8 -0
- package/dist/css/theme.d.ts.map +1 -0
- package/dist/css/theme.js +34 -0
- package/dist/css/theme.js.map +1 -0
- package/dist/css.d.ts +13 -0
- package/dist/css.d.ts.map +1 -0
- package/dist/css.js +30 -0
- package/dist/css.js.map +1 -0
- package/dist/generator.d.ts +33 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +161 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/overview.d.ts +13 -0
- package/dist/overview.d.ts.map +1 -0
- package/dist/overview.js +91 -0
- package/dist/overview.js.map +1 -0
- package/dist/recipes.d.ts +6 -0
- package/dist/recipes.d.ts.map +1 -0
- package/dist/recipes.js +68 -0
- package/dist/recipes.js.map +1 -0
- package/dist/sessions.d.ts +6 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +288 -0
- package/dist/sessions.js.map +1 -0
- package/dist/shared/el.d.ts +13 -0
- package/dist/shared/el.d.ts.map +1 -0
- package/dist/shared/el.js +27 -0
- package/dist/shared/el.js.map +1 -0
- package/dist/shared/pagination.d.ts +15 -0
- package/dist/shared/pagination.d.ts.map +1 -0
- package/dist/shared/pagination.js +113 -0
- package/dist/shared/pagination.js.map +1 -0
- package/dist/shared/sortable.d.ts +14 -0
- package/dist/shared/sortable.d.ts.map +1 -0
- package/dist/shared/sortable.js +101 -0
- package/dist/shared/sortable.js.map +1 -0
- package/dist/shared/tab-activators.d.ts +16 -0
- package/dist/shared/tab-activators.d.ts.map +1 -0
- package/dist/shared/tab-activators.js +33 -0
- package/dist/shared/tab-activators.js.map +1 -0
- package/dist/shared/tab-bar.d.ts +8 -0
- package/dist/shared/tab-bar.d.ts.map +1 -0
- package/dist/shared/tab-bar.js +20 -0
- package/dist/shared/tab-bar.js.map +1 -0
- package/dist/shared.d.ts +26 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +39 -0
- package/dist/shared.js.map +1 -0
- package/dist/subtab-bar.d.ts +23 -0
- package/dist/subtab-bar.d.ts.map +1 -0
- package/dist/subtab-bar.js +77 -0
- package/dist/subtab-bar.js.map +1 -0
- package/dist/tool-tab-registry.d.ts +76 -0
- package/dist/tool-tab-registry.d.ts.map +1 -0
- package/dist/tool-tab-registry.js +44 -0
- package/dist/tool-tab-registry.js.map +1 -0
- package/dist/tool-tabs-registrations.d.ts +19 -0
- package/dist/tool-tabs-registrations.d.ts.map +1 -0
- package/dist/tool-tabs-registrations.js +46 -0
- package/dist/tool-tabs-registrations.js.map +1 -0
- package/dist/tool-tabs.d.ts +12 -0
- package/dist/tool-tabs.d.ts.map +1 -0
- package/dist/tool-tabs.js +80 -0
- package/dist/tool-tabs.js.map +1 -0
- package/dist/vendor/cytoscape-bundle.js +600 -0
- package/package.json +52 -0
|
@@ -0,0 +1,218 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-template.js","sourceRoot":"","sources":["../../src/code-paths/view-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dashboard Code Paths panel — graph-tool surface with two subtabs:
|
|
3
|
+
* 1. Sessions — recent graph runs and their per-rule findings
|
|
4
|
+
* (uses the shared renderSessionTable from sessions.ts).
|
|
5
|
+
* 2. Explore — interactive catalog browser with three views
|
|
6
|
+
* (Graph, Coupling, Functions/distribution). The Graph view
|
|
7
|
+
* carries the SCC cycle highlight that the standalone SCCs view
|
|
8
|
+
* used to own. The Functions view absorbs the former standalone
|
|
9
|
+
* Search subtab via an in-table name filter.
|
|
10
|
+
*
|
|
11
|
+
* Architecture: vanilla DOM, no framework. Each view-*.ts emits a
|
|
12
|
+
* JS string that pushes a `View` literal into the singleton `views`
|
|
13
|
+
* registry. The Explore subtab renders the view tab bar + one
|
|
14
|
+
* container per view; Sessions subtab renders the standard session
|
|
15
|
+
* table.
|
|
16
|
+
*
|
|
17
|
+
* The file imports JS-string emitters from sibling modules under
|
|
18
|
+
* `code-paths/`. It MUST NOT import from `@opensip-cli/graph` —
|
|
19
|
+
* the catalog is consumed by JSON shape only (the structural shape
|
|
20
|
+
* lives in @opensip-cli/contracts to keep this panel decoupled
|
|
21
|
+
* from the graph engine's runtime types).
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Concatenation order is load-bearing — each emitter declares
|
|
25
|
+
* top-level names that later emitters reference. The order below is
|
|
26
|
+
* the topological sort; reordering will silently break the page with
|
|
27
|
+
* `<name> is not defined`. Free-identifier dependencies of each
|
|
28
|
+
* emitter, listed against the emitter that supplies them:
|
|
29
|
+
*
|
|
30
|
+
* 1. path-utils — declares `displayName`, `packageOfPath`, `pkgOf`,
|
|
31
|
+
* `shortPkg`.
|
|
32
|
+
* 2. indexes — declares `buildIndexes`, `resolveCalleeOcc`. Uses
|
|
33
|
+
* `pkgOf` (path-utils, above).
|
|
34
|
+
* 3. filters — declares `filterState` (default, non-interactive),
|
|
35
|
+
* `passesFilter`, `packagesInCatalog`, `KIND_LIST`.
|
|
36
|
+
* Uses `pkgOf` (path-utils, above).
|
|
37
|
+
* 4. editor-link — declares `editorLink`. Reads `EDITOR_PROTOCOL`
|
|
38
|
+
* (declared in generator.ts before the script
|
|
39
|
+
* block).
|
|
40
|
+
* 5. trace — declares `findUpstreamTrace`. Uses `indexes`.
|
|
41
|
+
* 6. search — declares `searchFunctions`. Uses `indexes`,
|
|
42
|
+
* `displayName`.
|
|
43
|
+
* 7. function-row — declares `renderFunctionRows` and the empty
|
|
44
|
+
* states it uses. Calls `el`, `displayName`,
|
|
45
|
+
* `packageOfPath`, `passesFilter`.
|
|
46
|
+
* 8. function-card — declares `openFunctionCard`, `closeFunctionCard`.
|
|
47
|
+
* Uses `editorLink`, `findUpstreamTrace`, `el`.
|
|
48
|
+
* 9. views-registry — declares the singleton `views = []` array.
|
|
49
|
+
* Must come before any view emitter.
|
|
50
|
+
* 10. help-drawer — declares `openHelpDrawer`. No external deps
|
|
51
|
+
* beyond `el`.
|
|
52
|
+
* 11-13. view-* — push View descriptors into `views` in TAB order:
|
|
53
|
+
* coupling / distribution / graph (alphabetical:
|
|
54
|
+
* Coupling, Functions, Visualization — the first is the
|
|
55
|
+
* default view). Each renderer closes over `el`,
|
|
56
|
+
* `passesFilter`, `displayName`, `packageOfPath`,
|
|
57
|
+
* `renderFunctionRows`, plus its own utilities; the
|
|
58
|
+
* Visualization renderer also uses `resolveCalleeOcc`
|
|
59
|
+
* (prelude) for its function-level projection.
|
|
60
|
+
* 15. panelOrchestrator — top-level `renderCodePathsTab`,
|
|
61
|
+
* `renderCodePathsExplore`, `openCodePathsSession`.
|
|
62
|
+
* Uses every name above plus `renderSubtabBar`
|
|
63
|
+
* (from shared/) and `registerTabActivator`.
|
|
64
|
+
*
|
|
65
|
+
* If the list grows past ~30 entries, replace this manual order with
|
|
66
|
+
* a `{ id, deps, emit }` topological sort.
|
|
67
|
+
*/
|
|
68
|
+
export declare function dashboardCodePathsJs(_restructured?: boolean): string;
|
|
69
|
+
//# sourceMappingURL=code-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-paths.d.ts","sourceRoot":"","sources":["../src/code-paths.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAuCH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,GAAE,OAAmC,GAAG,MAAM,CAyC/F"}
|