@n-dx/web 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 +96 -0
- package/README.md +5 -0
- package/build.js +243 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/landing/index.html +325 -0
- package/dist/landing/landing.d.ts +38 -0
- package/dist/landing/landing.js +299 -0
- package/dist/landing/landing.js.map +1 -0
- package/dist/public.d.ts +55 -0
- package/dist/public.js +51 -0
- package/dist/public.js.map +1 -0
- package/dist/schema/features.d.ts +28 -0
- package/dist/schema/features.js +9 -0
- package/dist/schema/features.js.map +1 -0
- package/dist/schema/v1.d.ts +317 -0
- package/dist/schema/v1.js +3 -0
- package/dist/schema/v1.js.map +1 -0
- package/dist/server/aggregation-cache.d.ts +105 -0
- package/dist/server/aggregation-cache.js +163 -0
- package/dist/server/aggregation-cache.js.map +1 -0
- package/dist/server/concurrent-execution-metrics.d.ts +103 -0
- package/dist/server/concurrent-execution-metrics.js +253 -0
- package/dist/server/concurrent-execution-metrics.js.map +1 -0
- package/dist/server/domain-gateway.d.ts +18 -0
- package/dist/server/domain-gateway.js +19 -0
- package/dist/server/domain-gateway.js.map +1 -0
- package/dist/server/incremental-task-usage.d.ts +92 -0
- package/dist/server/incremental-task-usage.js +251 -0
- package/dist/server/incremental-task-usage.js.map +1 -0
- package/dist/server/index.d.ts +39 -0
- package/dist/server/index.js +36 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/port.d.ts +96 -0
- package/dist/server/port.js +134 -0
- package/dist/server/port.js.map +1 -0
- package/dist/server/pr-markdown-refresh-diagnostics.d.ts +59 -0
- package/dist/server/pr-markdown-refresh-diagnostics.js +429 -0
- package/dist/server/pr-markdown-refresh-diagnostics.js.map +1 -0
- package/dist/server/prd-io.d.ts +40 -0
- package/dist/server/prd-io.js +66 -0
- package/dist/server/prd-io.js.map +1 -0
- package/dist/server/process-memory-tracker.d.ts +79 -0
- package/dist/server/process-memory-tracker.js +194 -0
- package/dist/server/process-memory-tracker.js.map +1 -0
- package/dist/server/register-scheduler.d.ts +53 -0
- package/dist/server/register-scheduler.js +36 -0
- package/dist/server/register-scheduler.js.map +1 -0
- package/dist/server/rex-gateway.d.ts +39 -0
- package/dist/server/rex-gateway.js +47 -0
- package/dist/server/rex-gateway.js.map +1 -0
- package/dist/server/routes-adaptive.d.ts +21 -0
- package/dist/server/routes-adaptive.js +659 -0
- package/dist/server/routes-adaptive.js.map +1 -0
- package/dist/server/routes-config.d.ts +47 -0
- package/dist/server/routes-config.js +222 -0
- package/dist/server/routes-config.js.map +1 -0
- package/dist/server/routes-data.d.ts +14 -0
- package/dist/server/routes-data.js +129 -0
- package/dist/server/routes-data.js.map +1 -0
- package/dist/server/routes-features.d.ts +14 -0
- package/dist/server/routes-features.js +245 -0
- package/dist/server/routes-features.js.map +1 -0
- package/dist/server/routes-hench.d.ts +116 -0
- package/dist/server/routes-hench.js +2016 -0
- package/dist/server/routes-hench.js.map +1 -0
- package/dist/server/routes-integrations.d.ts +23 -0
- package/dist/server/routes-integrations.js +277 -0
- package/dist/server/routes-integrations.js.map +1 -0
- package/dist/server/routes-mcp.d.ts +31 -0
- package/dist/server/routes-mcp.js +175 -0
- package/dist/server/routes-mcp.js.map +1 -0
- package/dist/server/routes-notion.d.ts +23 -0
- package/dist/server/routes-notion.js +723 -0
- package/dist/server/routes-notion.js.map +1 -0
- package/dist/server/routes-project.d.ts +47 -0
- package/dist/server/routes-project.js +128 -0
- package/dist/server/routes-project.js.map +1 -0
- package/dist/server/routes-rex/analysis.d.ts +11 -0
- package/dist/server/routes-rex/analysis.js +583 -0
- package/dist/server/routes-rex/analysis.js.map +1 -0
- package/dist/server/routes-rex/execution.d.ts +37 -0
- package/dist/server/routes-rex/execution.js +355 -0
- package/dist/server/routes-rex/execution.js.map +1 -0
- package/dist/server/routes-rex/health.d.ts +8 -0
- package/dist/server/routes-rex/health.js +136 -0
- package/dist/server/routes-rex/health.js.map +1 -0
- package/dist/server/routes-rex/index.d.ts +35 -0
- package/dist/server/routes-rex/index.js +72 -0
- package/dist/server/routes-rex/index.js.map +1 -0
- package/dist/server/routes-rex/items.d.ts +8 -0
- package/dist/server/routes-rex/items.js +359 -0
- package/dist/server/routes-rex/items.js.map +1 -0
- package/dist/server/routes-rex/prune.d.ts +11 -0
- package/dist/server/routes-rex/prune.js +379 -0
- package/dist/server/routes-rex/prune.js.map +1 -0
- package/dist/server/routes-rex/reads.d.ts +9 -0
- package/dist/server/routes-rex/reads.js +119 -0
- package/dist/server/routes-rex/reads.js.map +1 -0
- package/dist/server/routes-rex/requirements.d.ts +10 -0
- package/dist/server/routes-rex/requirements.js +408 -0
- package/dist/server/routes-rex/requirements.js.map +1 -0
- package/dist/server/routes-rex/shared.d.ts +37 -0
- package/dist/server/routes-rex/shared.js +73 -0
- package/dist/server/routes-rex/shared.js.map +1 -0
- package/dist/server/routes-search.d.ts +26 -0
- package/dist/server/routes-search.js +82 -0
- package/dist/server/routes-search.js.map +1 -0
- package/dist/server/routes-sourcevision.d.ts +18 -0
- package/dist/server/routes-sourcevision.js +444 -0
- package/dist/server/routes-sourcevision.js.map +1 -0
- package/dist/server/routes-static.d.ts +20 -0
- package/dist/server/routes-static.js +168 -0
- package/dist/server/routes-static.js.map +1 -0
- package/dist/server/routes-status.d.ts +58 -0
- package/dist/server/routes-status.js +191 -0
- package/dist/server/routes-status.js.map +1 -0
- package/dist/server/routes-token-usage.d.ts +63 -0
- package/dist/server/routes-token-usage.js +720 -0
- package/dist/server/routes-token-usage.js.map +1 -0
- package/dist/server/routes-validation.d.ts +10 -0
- package/dist/server/routes-validation.js +365 -0
- package/dist/server/routes-validation.js.map +1 -0
- package/dist/server/routes-workflow.d.ts +15 -0
- package/dist/server/routes-workflow.js +498 -0
- package/dist/server/routes-workflow.js.map +1 -0
- package/dist/server/search-index.d.ts +111 -0
- package/dist/server/search-index.js +348 -0
- package/dist/server/search-index.js.map +1 -0
- package/dist/server/shared-types.d.ts +65 -0
- package/dist/server/shared-types.js +31 -0
- package/dist/server/shared-types.js.map +1 -0
- package/dist/server/start.d.ts +68 -0
- package/dist/server/start.js +568 -0
- package/dist/server/start.js.map +1 -0
- package/dist/server/task-usage.d.ts +17 -0
- package/dist/server/task-usage.js +20 -0
- package/dist/server/task-usage.js.map +1 -0
- package/dist/server/types.d.ts +27 -0
- package/dist/server/types.js +26 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/usage-cleanup-scheduler.d.ts +107 -0
- package/dist/server/usage-cleanup-scheduler.js +232 -0
- package/dist/server/usage-cleanup-scheduler.js.map +1 -0
- package/dist/server/websocket.d.ts +131 -0
- package/dist/server/websocket.js +512 -0
- package/dist/server/websocket.js.map +1 -0
- package/dist/shared/data-files.d.ts +17 -0
- package/dist/shared/data-files.js +18 -0
- package/dist/shared/data-files.js.map +1 -0
- package/dist/shared/index.d.ts +9 -0
- package/dist/shared/index.js +9 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/view-id.d.ts +8 -0
- package/dist/shared/view-id.js +9 -0
- package/dist/shared/view-id.js.map +1 -0
- package/dist/viewer/Hench-F.png +0 -0
- package/dist/viewer/Rex-F.png +0 -0
- package/dist/viewer/SourceVision-F.png +0 -0
- package/dist/viewer/SourceVision.png +0 -0
- package/dist/viewer/api.d.ts +19 -0
- package/dist/viewer/api.js +17 -0
- package/dist/viewer/api.js.map +1 -0
- package/dist/viewer/bootstrap.d.ts +13 -0
- package/dist/viewer/bootstrap.js +40 -0
- package/dist/viewer/bootstrap.js.map +1 -0
- package/dist/viewer/components/active-tasks-panel.d.ts +36 -0
- package/dist/viewer/components/active-tasks-panel.js +183 -0
- package/dist/viewer/components/active-tasks-panel.js.map +1 -0
- package/dist/viewer/components/breadcrumb.d.ts +21 -0
- package/dist/viewer/components/breadcrumb.js +117 -0
- package/dist/viewer/components/breadcrumb.js.map +1 -0
- package/dist/viewer/components/concurrency-panel.d.ts +18 -0
- package/dist/viewer/components/concurrency-panel.js +175 -0
- package/dist/viewer/components/concurrency-panel.js.map +1 -0
- package/dist/viewer/components/config-footer.d.ts +11 -0
- package/dist/viewer/components/config-footer.js +132 -0
- package/dist/viewer/components/config-footer.js.map +1 -0
- package/dist/viewer/components/constants.d.ts +10 -0
- package/dist/viewer/components/constants.js +11 -0
- package/dist/viewer/components/constants.js.map +1 -0
- package/dist/viewer/components/copy-link-button.d.ts +30 -0
- package/dist/viewer/components/copy-link-button.js +74 -0
- package/dist/viewer/components/copy-link-button.js.map +1 -0
- package/dist/viewer/components/crash-recovery-banner.d.ts +28 -0
- package/dist/viewer/components/crash-recovery-banner.js +47 -0
- package/dist/viewer/components/crash-recovery-banner.js.map +1 -0
- package/dist/viewer/components/data-display/collapsible-section.d.ts +14 -0
- package/dist/viewer/components/data-display/collapsible-section.js +66 -0
- package/dist/viewer/components/data-display/collapsible-section.js.map +1 -0
- package/dist/viewer/components/data-display/findings-list.d.ts +13 -0
- package/dist/viewer/components/data-display/findings-list.js +136 -0
- package/dist/viewer/components/data-display/findings-list.js.map +1 -0
- package/dist/viewer/components/data-display/health-gauge.d.ts +37 -0
- package/dist/viewer/components/data-display/health-gauge.js +62 -0
- package/dist/viewer/components/data-display/health-gauge.js.map +1 -0
- package/dist/viewer/components/data-display/mini-charts.d.ts +36 -0
- package/dist/viewer/components/data-display/mini-charts.js +124 -0
- package/dist/viewer/components/data-display/mini-charts.js.map +1 -0
- package/dist/viewer/components/data-display/tree-view.d.ts +18 -0
- package/dist/viewer/components/data-display/tree-view.js +107 -0
- package/dist/viewer/components/data-display/tree-view.js.map +1 -0
- package/dist/viewer/components/data-display/zone-map.d.ts +28 -0
- package/dist/viewer/components/data-display/zone-map.js +197 -0
- package/dist/viewer/components/data-display/zone-map.js.map +1 -0
- package/dist/viewer/components/degradation-banner.d.ts +28 -0
- package/dist/viewer/components/degradation-banner.js +47 -0
- package/dist/viewer/components/degradation-banner.js.map +1 -0
- package/dist/viewer/components/detail-panel.d.ts +12 -0
- package/dist/viewer/components/detail-panel.js +166 -0
- package/dist/viewer/components/detail-panel.js.map +1 -0
- package/dist/viewer/components/elapsed-time.d.ts +38 -0
- package/dist/viewer/components/elapsed-time.js +35 -0
- package/dist/viewer/components/elapsed-time.js.map +1 -0
- package/dist/viewer/components/faq.d.ts +12 -0
- package/dist/viewer/components/faq.js +237 -0
- package/dist/viewer/components/faq.js.map +1 -0
- package/dist/viewer/components/favicon.d.ts +30 -0
- package/dist/viewer/components/favicon.js +90 -0
- package/dist/viewer/components/favicon.js.map +1 -0
- package/dist/viewer/components/guide.d.ts +5 -0
- package/dist/viewer/components/guide.js +116 -0
- package/dist/viewer/components/guide.js.map +1 -0
- package/dist/viewer/components/index.d.ts +37 -0
- package/dist/viewer/components/index.js +46 -0
- package/dist/viewer/components/index.js.map +1 -0
- package/dist/viewer/components/logos.d.ts +42 -0
- package/dist/viewer/components/logos.js +46 -0
- package/dist/viewer/components/logos.js.map +1 -0
- package/dist/viewer/components/memory-panel.d.ts +19 -0
- package/dist/viewer/components/memory-panel.js +181 -0
- package/dist/viewer/components/memory-panel.js.map +1 -0
- package/dist/viewer/components/memory-warning.d.ts +23 -0
- package/dist/viewer/components/memory-warning.js +42 -0
- package/dist/viewer/components/memory-warning.js.map +1 -0
- package/dist/viewer/components/notion-schema-wizard.d.ts +16 -0
- package/dist/viewer/components/notion-schema-wizard.js +263 -0
- package/dist/viewer/components/notion-schema-wizard.js.map +1 -0
- package/dist/viewer/components/polling-suspension-indicator.d.ts +24 -0
- package/dist/viewer/components/polling-suspension-indicator.js +31 -0
- package/dist/viewer/components/polling-suspension-indicator.js.map +1 -0
- package/dist/viewer/components/prd-tree/add-item-form.d.ts +31 -0
- package/dist/viewer/components/prd-tree/add-item-form.js +231 -0
- package/dist/viewer/components/prd-tree/add-item-form.js.map +1 -0
- package/dist/viewer/components/prd-tree/analyze-panel.d.ts +13 -0
- package/dist/viewer/components/prd-tree/analyze-panel.js +245 -0
- package/dist/viewer/components/prd-tree/analyze-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/batch-import-panel.d.ts +34 -0
- package/dist/viewer/components/prd-tree/batch-import-panel.js +415 -0
- package/dist/viewer/components/prd-tree/batch-import-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/bulk-actions.d.ts +19 -0
- package/dist/viewer/components/prd-tree/bulk-actions.js +90 -0
- package/dist/viewer/components/prd-tree/bulk-actions.js.map +1 -0
- package/dist/viewer/components/prd-tree/compute.d.ts +32 -0
- package/dist/viewer/components/prd-tree/compute.js +129 -0
- package/dist/viewer/components/prd-tree/compute.js.map +1 -0
- package/dist/viewer/components/prd-tree/delete-confirmation.d.ts +23 -0
- package/dist/viewer/components/prd-tree/delete-confirmation.js +83 -0
- package/dist/viewer/components/prd-tree/delete-confirmation.js.map +1 -0
- package/dist/viewer/components/prd-tree/execution-panel.d.ts +14 -0
- package/dist/viewer/components/prd-tree/execution-panel.js +291 -0
- package/dist/viewer/components/prd-tree/execution-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/facet-filter.d.ts +40 -0
- package/dist/viewer/components/prd-tree/facet-filter.js +188 -0
- package/dist/viewer/components/prd-tree/facet-filter.js.map +1 -0
- package/dist/viewer/components/prd-tree/index.d.ts +24 -0
- package/dist/viewer/components/prd-tree/index.js +16 -0
- package/dist/viewer/components/prd-tree/index.js.map +1 -0
- package/dist/viewer/components/prd-tree/inline-add-form.d.ts +32 -0
- package/dist/viewer/components/prd-tree/inline-add-form.js +175 -0
- package/dist/viewer/components/prd-tree/inline-add-form.js.map +1 -0
- package/dist/viewer/components/prd-tree/inline-status-picker.d.ts +31 -0
- package/dist/viewer/components/prd-tree/inline-status-picker.js +110 -0
- package/dist/viewer/components/prd-tree/inline-status-picker.js.map +1 -0
- package/dist/viewer/components/prd-tree/lazy-children.d.ts +40 -0
- package/dist/viewer/components/prd-tree/lazy-children.js +73 -0
- package/dist/viewer/components/prd-tree/lazy-children.js.map +1 -0
- package/dist/viewer/components/prd-tree/levels.d.ts +31 -0
- package/dist/viewer/components/prd-tree/levels.js +72 -0
- package/dist/viewer/components/prd-tree/levels.js.map +1 -0
- package/dist/viewer/components/prd-tree/listener-lifecycle.d.ts +105 -0
- package/dist/viewer/components/prd-tree/listener-lifecycle.js +173 -0
- package/dist/viewer/components/prd-tree/listener-lifecycle.js.map +1 -0
- package/dist/viewer/components/prd-tree/merge-preview.d.ts +25 -0
- package/dist/viewer/components/prd-tree/merge-preview.js +181 -0
- package/dist/viewer/components/prd-tree/merge-preview.js.map +1 -0
- package/dist/viewer/components/prd-tree/prd-tree.d.ts +91 -0
- package/dist/viewer/components/prd-tree/prd-tree.js +565 -0
- package/dist/viewer/components/prd-tree/prd-tree.js.map +1 -0
- package/dist/viewer/components/prd-tree/proposal-editor.d.ts +44 -0
- package/dist/viewer/components/prd-tree/proposal-editor.js +438 -0
- package/dist/viewer/components/prd-tree/proposal-editor.js.map +1 -0
- package/dist/viewer/components/prd-tree/prune-confirmation.d.ts +25 -0
- package/dist/viewer/components/prd-tree/prune-confirmation.js +336 -0
- package/dist/viewer/components/prd-tree/prune-confirmation.js.map +1 -0
- package/dist/viewer/components/prd-tree/prune-diff-tree.d.ts +39 -0
- package/dist/viewer/components/prd-tree/prune-diff-tree.js +319 -0
- package/dist/viewer/components/prd-tree/prune-diff-tree.js.map +1 -0
- package/dist/viewer/components/prd-tree/reorganize-panel.d.ts +16 -0
- package/dist/viewer/components/prd-tree/reorganize-panel.js +213 -0
- package/dist/viewer/components/prd-tree/reorganize-panel.js.map +1 -0
- package/dist/viewer/components/prd-tree/smart-add-input.d.ts +19 -0
- package/dist/viewer/components/prd-tree/smart-add-input.js +383 -0
- package/dist/viewer/components/prd-tree/smart-add-input.js.map +1 -0
- package/dist/viewer/components/prd-tree/status-filter.d.ts +40 -0
- package/dist/viewer/components/prd-tree/status-filter.js +131 -0
- package/dist/viewer/components/prd-tree/status-filter.js.map +1 -0
- package/dist/viewer/components/prd-tree/task-detail.d.ts +41 -0
- package/dist/viewer/components/prd-tree/task-detail.js +1205 -0
- package/dist/viewer/components/prd-tree/task-detail.js.map +1 -0
- package/dist/viewer/components/prd-tree/task-utilization.d.ts +7 -0
- package/dist/viewer/components/prd-tree/task-utilization.js +25 -0
- package/dist/viewer/components/prd-tree/task-utilization.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-differ.d.ts +59 -0
- package/dist/viewer/components/prd-tree/tree-differ.js +200 -0
- package/dist/viewer/components/prd-tree/tree-differ.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-event-delegate.d.ts +70 -0
- package/dist/viewer/components/prd-tree/tree-event-delegate.js +176 -0
- package/dist/viewer/components/prd-tree/tree-event-delegate.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-search.d.ts +65 -0
- package/dist/viewer/components/prd-tree/tree-search.js +178 -0
- package/dist/viewer/components/prd-tree/tree-search.js.map +1 -0
- package/dist/viewer/components/prd-tree/tree-utils.d.ts +38 -0
- package/dist/viewer/components/prd-tree/tree-utils.js +107 -0
- package/dist/viewer/components/prd-tree/tree-utils.js.map +1 -0
- package/dist/viewer/components/prd-tree/types.d.ts +93 -0
- package/dist/viewer/components/prd-tree/types.js +16 -0
- package/dist/viewer/components/prd-tree/types.js.map +1 -0
- package/dist/viewer/components/prd-tree/virtual-scroll.d.ts +119 -0
- package/dist/viewer/components/prd-tree/virtual-scroll.js +169 -0
- package/dist/viewer/components/prd-tree/virtual-scroll.js.map +1 -0
- package/dist/viewer/components/progressive-loader.d.ts +114 -0
- package/dist/viewer/components/progressive-loader.js +225 -0
- package/dist/viewer/components/progressive-loader.js.map +1 -0
- package/dist/viewer/components/refresh-queue-status.d.ts +20 -0
- package/dist/viewer/components/refresh-queue-status.js +65 -0
- package/dist/viewer/components/refresh-queue-status.js.map +1 -0
- package/dist/viewer/components/rex-task-link.d.ts +50 -0
- package/dist/viewer/components/rex-task-link.js +218 -0
- package/dist/viewer/components/rex-task-link.js.map +1 -0
- package/dist/viewer/components/search-filter.d.ts +20 -0
- package/dist/viewer/components/search-filter.js +28 -0
- package/dist/viewer/components/search-filter.js.map +1 -0
- package/dist/viewer/components/search-overlay.d.ts +31 -0
- package/dist/viewer/components/search-overlay.js +472 -0
- package/dist/viewer/components/search-overlay.js.map +1 -0
- package/dist/viewer/components/sidebar.d.ts +18 -0
- package/dist/viewer/components/sidebar.js +357 -0
- package/dist/viewer/components/sidebar.js.map +1 -0
- package/dist/viewer/components/status-indicators.d.ts +63 -0
- package/dist/viewer/components/status-indicators.js +136 -0
- package/dist/viewer/components/status-indicators.js.map +1 -0
- package/dist/viewer/components/theme-toggle.d.ts +8 -0
- package/dist/viewer/components/theme-toggle.js +28 -0
- package/dist/viewer/components/theme-toggle.js.map +1 -0
- package/dist/viewer/components/throttle-controls.d.ts +18 -0
- package/dist/viewer/components/throttle-controls.js +304 -0
- package/dist/viewer/components/throttle-controls.js.map +1 -0
- package/dist/viewer/components/ws-health-panel.d.ts +18 -0
- package/dist/viewer/components/ws-health-panel.js +250 -0
- package/dist/viewer/components/ws-health-panel.js.map +1 -0
- package/dist/viewer/components/zone-slideout.d.ts +17 -0
- package/dist/viewer/components/zone-slideout.js +162 -0
- package/dist/viewer/components/zone-slideout.js.map +1 -0
- package/dist/viewer/crash/crash-detector.d.ts +69 -0
- package/dist/viewer/crash/crash-detector.js +239 -0
- package/dist/viewer/crash/crash-detector.js.map +1 -0
- package/dist/viewer/crash/index.d.ts +7 -0
- package/dist/viewer/crash/index.js +8 -0
- package/dist/viewer/crash/index.js.map +1 -0
- package/dist/viewer/deployed-mode.d.ts +37 -0
- package/dist/viewer/deployed-mode.js +94 -0
- package/dist/viewer/deployed-mode.js.map +1 -0
- package/dist/viewer/external.d.ts +17 -0
- package/dist/viewer/external.js +17 -0
- package/dist/viewer/external.js.map +1 -0
- package/dist/viewer/graph/index.d.ts +9 -0
- package/dist/viewer/graph/index.js +12 -0
- package/dist/viewer/graph/index.js.map +1 -0
- package/dist/viewer/graph/physics.d.ts +96 -0
- package/dist/viewer/graph/physics.js +366 -0
- package/dist/viewer/graph/physics.js.map +1 -0
- package/dist/viewer/graph/renderer.d.ts +184 -0
- package/dist/viewer/graph/renderer.js +1438 -0
- package/dist/viewer/graph/renderer.js.map +1 -0
- package/dist/viewer/hooks/index.d.ts +27 -0
- package/dist/viewer/hooks/index.js +28 -0
- package/dist/viewer/hooks/index.js.map +1 -0
- package/dist/viewer/hooks/use-app-data.d.ts +31 -0
- package/dist/viewer/hooks/use-app-data.js +152 -0
- package/dist/viewer/hooks/use-app-data.js.map +1 -0
- package/dist/viewer/hooks/use-crash-recovery.d.ts +50 -0
- package/dist/viewer/hooks/use-crash-recovery.js +76 -0
- package/dist/viewer/hooks/use-crash-recovery.js.map +1 -0
- package/dist/viewer/hooks/use-delete-actions.d.ts +48 -0
- package/dist/viewer/hooks/use-delete-actions.js +103 -0
- package/dist/viewer/hooks/use-delete-actions.js.map +1 -0
- package/dist/viewer/hooks/use-dom-performance-monitor.d.ts +68 -0
- package/dist/viewer/hooks/use-dom-performance-monitor.js +71 -0
- package/dist/viewer/hooks/use-dom-performance-monitor.js.map +1 -0
- package/dist/viewer/hooks/use-facet-state.d.ts +32 -0
- package/dist/viewer/hooks/use-facet-state.js +119 -0
- package/dist/viewer/hooks/use-facet-state.js.map +1 -0
- package/dist/viewer/hooks/use-feature-toggle.d.ts +18 -0
- package/dist/viewer/hooks/use-feature-toggle.js +57 -0
- package/dist/viewer/hooks/use-feature-toggle.js.map +1 -0
- package/dist/viewer/hooks/use-file-edges.d.ts +23 -0
- package/dist/viewer/hooks/use-file-edges.js +221 -0
- package/dist/viewer/hooks/use-file-edges.js.map +1 -0
- package/dist/viewer/hooks/use-graceful-degradation.d.ts +30 -0
- package/dist/viewer/hooks/use-graceful-degradation.js +45 -0
- package/dist/viewer/hooks/use-graceful-degradation.js.map +1 -0
- package/dist/viewer/hooks/use-item-selection.d.ts +49 -0
- package/dist/viewer/hooks/use-item-selection.js +117 -0
- package/dist/viewer/hooks/use-item-selection.js.map +1 -0
- package/dist/viewer/hooks/use-memory-monitor.d.ts +39 -0
- package/dist/viewer/hooks/use-memory-monitor.js +73 -0
- package/dist/viewer/hooks/use-memory-monitor.js.map +1 -0
- package/dist/viewer/hooks/use-pan-zoom.d.ts +33 -0
- package/dist/viewer/hooks/use-pan-zoom.js +110 -0
- package/dist/viewer/hooks/use-pan-zoom.js.map +1 -0
- package/dist/viewer/hooks/use-persistent-filter.d.ts +24 -0
- package/dist/viewer/hooks/use-persistent-filter.js +37 -0
- package/dist/viewer/hooks/use-persistent-filter.js.map +1 -0
- package/dist/viewer/hooks/use-polling-suspension.d.ts +32 -0
- package/dist/viewer/hooks/use-polling-suspension.js +41 -0
- package/dist/viewer/hooks/use-polling-suspension.js.map +1 -0
- package/dist/viewer/hooks/use-polling.d.ts +39 -0
- package/dist/viewer/hooks/use-polling.js +55 -0
- package/dist/viewer/hooks/use-polling.js.map +1 -0
- package/dist/viewer/hooks/use-prd-actions.d.ts +126 -0
- package/dist/viewer/hooks/use-prd-actions.js +250 -0
- package/dist/viewer/hooks/use-prd-actions.js.map +1 -0
- package/dist/viewer/hooks/use-prd-data.d.ts +45 -0
- package/dist/viewer/hooks/use-prd-data.js +159 -0
- package/dist/viewer/hooks/use-prd-data.js.map +1 -0
- package/dist/viewer/hooks/use-prd-deep-link.d.ts +45 -0
- package/dist/viewer/hooks/use-prd-deep-link.js +60 -0
- package/dist/viewer/hooks/use-prd-deep-link.js.map +1 -0
- package/dist/viewer/hooks/use-prd-websocket.d.ts +47 -0
- package/dist/viewer/hooks/use-prd-websocket.js +139 -0
- package/dist/viewer/hooks/use-prd-websocket.js.map +1 -0
- package/dist/viewer/hooks/use-project-metadata.d.ts +25 -0
- package/dist/viewer/hooks/use-project-metadata.js +55 -0
- package/dist/viewer/hooks/use-project-metadata.js.map +1 -0
- package/dist/viewer/hooks/use-project-status.d.ts +60 -0
- package/dist/viewer/hooks/use-project-status.js +133 -0
- package/dist/viewer/hooks/use-project-status.js.map +1 -0
- package/dist/viewer/hooks/use-refresh-throttle.d.ts +45 -0
- package/dist/viewer/hooks/use-refresh-throttle.js +52 -0
- package/dist/viewer/hooks/use-refresh-throttle.js.map +1 -0
- package/dist/viewer/hooks/use-route-state.d.ts +18 -0
- package/dist/viewer/hooks/use-route-state.js +115 -0
- package/dist/viewer/hooks/use-route-state.js.map +1 -0
- package/dist/viewer/hooks/use-subzone-edges.d.ts +21 -0
- package/dist/viewer/hooks/use-subzone-edges.js +147 -0
- package/dist/viewer/hooks/use-subzone-edges.js.map +1 -0
- package/dist/viewer/hooks/use-tab-visibility.d.ts +31 -0
- package/dist/viewer/hooks/use-tab-visibility.js +43 -0
- package/dist/viewer/hooks/use-tab-visibility.js.map +1 -0
- package/dist/viewer/hooks/use-tick.d.ts +43 -0
- package/dist/viewer/hooks/use-tick.js +76 -0
- package/dist/viewer/hooks/use-tick.js.map +1 -0
- package/dist/viewer/hooks/use-toast.d.ts +24 -0
- package/dist/viewer/hooks/use-toast.js +26 -0
- package/dist/viewer/hooks/use-toast.js.map +1 -0
- package/dist/viewer/hooks/use-zone-drag.d.ts +30 -0
- package/dist/viewer/hooks/use-zone-drag.js +60 -0
- package/dist/viewer/hooks/use-zone-drag.js.map +1 -0
- package/dist/viewer/index.html +36 -0
- package/dist/viewer/loader.d.ts +33 -0
- package/dist/viewer/loader.js +195 -0
- package/dist/viewer/loader.js.map +1 -0
- package/dist/viewer/main.d.ts +1 -0
- package/dist/viewer/main.js +121 -0
- package/dist/viewer/main.js.map +1 -0
- package/dist/viewer/messaging/call-rate-limiter.d.ts +50 -0
- package/dist/viewer/messaging/call-rate-limiter.js +103 -0
- package/dist/viewer/messaging/call-rate-limiter.js.map +1 -0
- package/dist/viewer/messaging/fetch-pipeline.d.ts +58 -0
- package/dist/viewer/messaging/fetch-pipeline.js +58 -0
- package/dist/viewer/messaging/fetch-pipeline.js.map +1 -0
- package/dist/viewer/messaging/index.d.ts +43 -0
- package/dist/viewer/messaging/index.js +46 -0
- package/dist/viewer/messaging/index.js.map +1 -0
- package/dist/viewer/messaging/message-coalescer.d.ts +96 -0
- package/dist/viewer/messaging/message-coalescer.js +121 -0
- package/dist/viewer/messaging/message-coalescer.js.map +1 -0
- package/dist/viewer/messaging/message-throttle.d.ts +95 -0
- package/dist/viewer/messaging/message-throttle.js +147 -0
- package/dist/viewer/messaging/message-throttle.js.map +1 -0
- package/dist/viewer/messaging/request-dedup.d.ts +43 -0
- package/dist/viewer/messaging/request-dedup.js +55 -0
- package/dist/viewer/messaging/request-dedup.js.map +1 -0
- package/dist/viewer/messaging/ws-pipeline.d.ts +85 -0
- package/dist/viewer/messaging/ws-pipeline.js +68 -0
- package/dist/viewer/messaging/ws-pipeline.js.map +1 -0
- package/dist/viewer/n-dx.png +0 -0
- package/dist/viewer/performance/dom-performance-monitor.d.ts +157 -0
- package/dist/viewer/performance/dom-performance-monitor.js +341 -0
- package/dist/viewer/performance/dom-performance-monitor.js.map +1 -0
- package/dist/viewer/performance/dom-update-gate.d.ts +122 -0
- package/dist/viewer/performance/dom-update-gate.js +229 -0
- package/dist/viewer/performance/dom-update-gate.js.map +1 -0
- package/dist/viewer/performance/graceful-degradation.d.ts +73 -0
- package/dist/viewer/performance/graceful-degradation.js +152 -0
- package/dist/viewer/performance/graceful-degradation.js.map +1 -0
- package/dist/viewer/performance/index.d.ts +14 -0
- package/dist/viewer/performance/index.js +20 -0
- package/dist/viewer/performance/index.js.map +1 -0
- package/dist/viewer/performance/memory-monitor.d.ts +78 -0
- package/dist/viewer/performance/memory-monitor.js +218 -0
- package/dist/viewer/performance/memory-monitor.js.map +1 -0
- package/dist/viewer/performance/refresh-throttle.d.ts +90 -0
- package/dist/viewer/performance/refresh-throttle.js +266 -0
- package/dist/viewer/performance/refresh-throttle.js.map +1 -0
- package/dist/viewer/performance/response-buffer-gate.d.ts +108 -0
- package/dist/viewer/performance/response-buffer-gate.js +170 -0
- package/dist/viewer/performance/response-buffer-gate.js.map +1 -0
- package/dist/viewer/performance/update-batcher.d.ts +79 -0
- package/dist/viewer/performance/update-batcher.js +119 -0
- package/dist/viewer/performance/update-batcher.js.map +1 -0
- package/dist/viewer/polling/batched-tick-dispatcher.d.ts +83 -0
- package/dist/viewer/polling/batched-tick-dispatcher.js +183 -0
- package/dist/viewer/polling/batched-tick-dispatcher.js.map +1 -0
- package/dist/viewer/polling/index.d.ts +13 -0
- package/dist/viewer/polling/index.js +16 -0
- package/dist/viewer/polling/index.js.map +1 -0
- package/dist/viewer/polling/polling-manager.d.ts +82 -0
- package/dist/viewer/polling/polling-manager.js +254 -0
- package/dist/viewer/polling/polling-manager.js.map +1 -0
- package/dist/viewer/polling/polling-restart.d.ts +45 -0
- package/dist/viewer/polling/polling-restart.js +98 -0
- package/dist/viewer/polling/polling-restart.js.map +1 -0
- package/dist/viewer/polling/polling-state.d.ts +182 -0
- package/dist/viewer/polling/polling-state.js +306 -0
- package/dist/viewer/polling/polling-state.js.map +1 -0
- package/dist/viewer/polling/tab-visibility.d.ts +112 -0
- package/dist/viewer/polling/tab-visibility.js +276 -0
- package/dist/viewer/polling/tab-visibility.js.map +1 -0
- package/dist/viewer/polling/tick-timer.d.ts +70 -0
- package/dist/viewer/polling/tick-timer.js +168 -0
- package/dist/viewer/polling/tick-timer.js.map +1 -0
- package/dist/viewer/polling/tick-visibility-gate.d.ts +92 -0
- package/dist/viewer/polling/tick-visibility-gate.js +146 -0
- package/dist/viewer/polling/tick-visibility-gate.js.map +1 -0
- package/dist/viewer/route-state.d.ts +8 -0
- package/dist/viewer/route-state.js +77 -0
- package/dist/viewer/route-state.js.map +1 -0
- package/dist/viewer/schema-compat.d.ts +17 -0
- package/dist/viewer/schema-compat.js +49 -0
- package/dist/viewer/schema-compat.js.map +1 -0
- package/dist/viewer/types.d.ts +66 -0
- package/dist/viewer/types.js +2 -0
- package/dist/viewer/types.js.map +1 -0
- package/dist/viewer/usage/constants.d.ts +14 -0
- package/dist/viewer/usage/constants.js +14 -0
- package/dist/viewer/usage/constants.js.map +1 -0
- package/dist/viewer/usage/index.d.ts +7 -0
- package/dist/viewer/usage/index.js +8 -0
- package/dist/viewer/usage/index.js.map +1 -0
- package/dist/viewer/utils.d.ts +25 -0
- package/dist/viewer/utils.js +48 -0
- package/dist/viewer/utils.js.map +1 -0
- package/dist/viewer/validate.d.ts +23 -0
- package/dist/viewer/validate.js +275 -0
- package/dist/viewer/validate.js.map +1 -0
- package/dist/viewer/views/analysis.d.ts +10 -0
- package/dist/viewer/views/analysis.js +109 -0
- package/dist/viewer/views/analysis.js.map +1 -0
- package/dist/viewer/views/architecture.d.ts +10 -0
- package/dist/viewer/views/architecture.js +44 -0
- package/dist/viewer/views/architecture.js.map +1 -0
- package/dist/viewer/views/domain-hench.d.ts +13 -0
- package/dist/viewer/views/domain-hench.js +14 -0
- package/dist/viewer/views/domain-hench.js.map +1 -0
- package/dist/viewer/views/domain-rex.d.ts +17 -0
- package/dist/viewer/views/domain-rex.js +18 -0
- package/dist/viewer/views/domain-rex.js.map +1 -0
- package/dist/viewer/views/domain-settings.d.ts +12 -0
- package/dist/viewer/views/domain-settings.js +13 -0
- package/dist/viewer/views/domain-settings.js.map +1 -0
- package/dist/viewer/views/domain-sourcevision.d.ts +20 -0
- package/dist/viewer/views/domain-sourcevision.js +21 -0
- package/dist/viewer/views/domain-sourcevision.js.map +1 -0
- package/dist/viewer/views/enrichment-thresholds.d.ts +11 -0
- package/dist/viewer/views/enrichment-thresholds.js +12 -0
- package/dist/viewer/views/enrichment-thresholds.js.map +1 -0
- package/dist/viewer/views/feature-toggles.d.ts +13 -0
- package/dist/viewer/views/feature-toggles.js +185 -0
- package/dist/viewer/views/feature-toggles.js.map +1 -0
- package/dist/viewer/views/files.d.ts +13 -0
- package/dist/viewer/views/files.js +174 -0
- package/dist/viewer/views/files.js.map +1 -0
- package/dist/viewer/views/graph.d.ts +12 -0
- package/dist/viewer/views/graph.js +316 -0
- package/dist/viewer/views/graph.js.map +1 -0
- package/dist/viewer/views/hench-config.d.ts +39 -0
- package/dist/viewer/views/hench-config.js +473 -0
- package/dist/viewer/views/hench-config.js.map +1 -0
- package/dist/viewer/views/hench-runs.d.ts +19 -0
- package/dist/viewer/views/hench-runs.js +460 -0
- package/dist/viewer/views/hench-runs.js.map +1 -0
- package/dist/viewer/views/hench-templates.d.ts +17 -0
- package/dist/viewer/views/hench-templates.js +262 -0
- package/dist/viewer/views/hench-templates.js.map +1 -0
- package/dist/viewer/views/integration-config.d.ts +73 -0
- package/dist/viewer/views/integration-config.js +524 -0
- package/dist/viewer/views/integration-config.js.map +1 -0
- package/dist/viewer/views/notion-config.d.ts +16 -0
- package/dist/viewer/views/notion-config.js +357 -0
- package/dist/viewer/views/notion-config.js.map +1 -0
- package/dist/viewer/views/overview.d.ts +10 -0
- package/dist/viewer/views/overview.js +187 -0
- package/dist/viewer/views/overview.js.map +1 -0
- package/dist/viewer/views/pr-markdown.d.ts +3 -0
- package/dist/viewer/views/pr-markdown.js +350 -0
- package/dist/viewer/views/pr-markdown.js.map +1 -0
- package/dist/viewer/views/prd.d.ts +34 -0
- package/dist/viewer/views/prd.js +257 -0
- package/dist/viewer/views/prd.js.map +1 -0
- package/dist/viewer/views/problems.d.ts +8 -0
- package/dist/viewer/views/problems.js +50 -0
- package/dist/viewer/views/problems.js.map +1 -0
- package/dist/viewer/views/rex-dashboard.d.ts +14 -0
- package/dist/viewer/views/rex-dashboard.js +334 -0
- package/dist/viewer/views/rex-dashboard.js.map +1 -0
- package/dist/viewer/views/routes.d.ts +8 -0
- package/dist/viewer/views/routes.js +216 -0
- package/dist/viewer/views/routes.js.map +1 -0
- package/dist/viewer/views/sourcevision-tabs.d.ts +18 -0
- package/dist/viewer/views/sourcevision-tabs.js +14 -0
- package/dist/viewer/views/sourcevision-tabs.js.map +1 -0
- package/dist/viewer/views/suggestions.d.ts +8 -0
- package/dist/viewer/views/suggestions.js +36 -0
- package/dist/viewer/views/suggestions.js.map +1 -0
- package/dist/viewer/views/task-audit.d.ts +18 -0
- package/dist/viewer/views/task-audit.js +413 -0
- package/dist/viewer/views/task-audit.js.map +1 -0
- package/dist/viewer/views/token-usage.d.ts +10 -0
- package/dist/viewer/views/token-usage.js +410 -0
- package/dist/viewer/views/token-usage.js.map +1 -0
- package/dist/viewer/views/validation.d.ts +11 -0
- package/dist/viewer/views/validation.js +475 -0
- package/dist/viewer/views/validation.js.map +1 -0
- package/dist/viewer/views/view-registry.d.ts +27 -0
- package/dist/viewer/views/view-registry.js +70 -0
- package/dist/viewer/views/view-registry.js.map +1 -0
- package/dist/viewer/views/workflow-optimization.d.ts +12 -0
- package/dist/viewer/views/workflow-optimization.js +311 -0
- package/dist/viewer/views/workflow-optimization.js.map +1 -0
- package/dist/viewer/views/zone-types.d.ts +69 -0
- package/dist/viewer/views/zone-types.js +5 -0
- package/dist/viewer/views/zone-types.js.map +1 -0
- package/dist/viewer/views/zones.d.ts +50 -0
- package/dist/viewer/views/zones.js +1438 -0
- package/dist/viewer/views/zones.js.map +1 -0
- package/dist/viewer/visualization/colors.d.ts +16 -0
- package/dist/viewer/visualization/colors.js +31 -0
- package/dist/viewer/visualization/colors.js.map +1 -0
- package/dist/viewer/visualization/flow.d.ts +54 -0
- package/dist/viewer/visualization/flow.js +123 -0
- package/dist/viewer/visualization/flow.js.map +1 -0
- package/dist/viewer/visualization/index.d.ts +34 -0
- package/dist/viewer/visualization/index.js +40 -0
- package/dist/viewer/visualization/index.js.map +1 -0
- package/dist/viewer/visualization/metrics.d.ts +8 -0
- package/dist/viewer/visualization/metrics.js +16 -0
- package/dist/viewer/visualization/metrics.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polling restart coordinator.
|
|
3
|
+
*
|
|
4
|
+
* Bridges the graceful-degradation system to the centralized polling-state
|
|
5
|
+
* manager. When memory pressure disables the `autoRefresh` feature, this
|
|
6
|
+
* module calls `suspendAllSources()` to halt all non-essential polling
|
|
7
|
+
* sources in one atomic operation. When pressure subsides and `autoRefresh`
|
|
8
|
+
* is re-enabled, it calls `resumeAllSources()` to restart everything at
|
|
9
|
+
* original intervals.
|
|
10
|
+
*
|
|
11
|
+
* This provides a safety net that ensures **all** polling loops stop and
|
|
12
|
+
* restart together, even if an individual component forgets to handle
|
|
13
|
+
* degradation on its own. Components that also track degradation individually
|
|
14
|
+
* (e.g. status-indicators, use-app-data) coexist harmlessly — suspending
|
|
15
|
+
* an already-suspended source or resuming an already-active one is a no-op
|
|
16
|
+
* in both polling-state and polling-manager.
|
|
17
|
+
*
|
|
18
|
+
* Flow:
|
|
19
|
+
*
|
|
20
|
+
* memory-monitor → graceful-degradation → polling-restart
|
|
21
|
+
* ↓
|
|
22
|
+
* polling-state
|
|
23
|
+
* ↓ ↓
|
|
24
|
+
* polling-manager tick-timer
|
|
25
|
+
*
|
|
26
|
+
* Designed as a standalone module with zero framework dependencies.
|
|
27
|
+
*/
|
|
28
|
+
import { suspendAllSources, resumeAllSources, } from "./polling-state.js";
|
|
29
|
+
import { onDegradationChange, isFeatureDisabled, } from "../performance/graceful-degradation.js";
|
|
30
|
+
// ─── Module state ────────────────────────────────────────────────────────────
|
|
31
|
+
let unsubscribeDegradation = null;
|
|
32
|
+
let started = false;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the coordinator has triggered a global suspension.
|
|
35
|
+
* Tracked separately from polling-state's `isGlobalSuspended()` so we
|
|
36
|
+
* only call `resumeAllSources()` if **we** were the ones who suspended
|
|
37
|
+
* — avoids interfering with other suspension triggers (e.g. a future
|
|
38
|
+
* manual pause button).
|
|
39
|
+
*/
|
|
40
|
+
let coordinatorSuspended = false;
|
|
41
|
+
// ─── Internal handler ────────────────────────────────────────────────────────
|
|
42
|
+
function handleDegradationChange(state) {
|
|
43
|
+
const autoRefreshDisabled = state.disabledFeatures.has("autoRefresh");
|
|
44
|
+
if (autoRefreshDisabled && !coordinatorSuspended) {
|
|
45
|
+
// Memory pressure activated — suspend all non-essential sources.
|
|
46
|
+
coordinatorSuspended = true;
|
|
47
|
+
suspendAllSources();
|
|
48
|
+
}
|
|
49
|
+
else if (!autoRefreshDisabled && coordinatorSuspended) {
|
|
50
|
+
// Memory pressure cleared — restart all sources at original intervals.
|
|
51
|
+
coordinatorSuspended = false;
|
|
52
|
+
resumeAllSources();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
56
|
+
/**
|
|
57
|
+
* Start the polling restart coordinator.
|
|
58
|
+
*
|
|
59
|
+
* Subscribes to degradation changes and evaluates the current state
|
|
60
|
+
* immediately. If `autoRefresh` is already disabled (e.g. the coordinator
|
|
61
|
+
* is started after memory pressure began), sources are suspended at once.
|
|
62
|
+
*
|
|
63
|
+
* Safe to call multiple times — restarts cleanly.
|
|
64
|
+
*/
|
|
65
|
+
export function startPollingRestart() {
|
|
66
|
+
if (started)
|
|
67
|
+
stopPollingRestart();
|
|
68
|
+
started = true;
|
|
69
|
+
coordinatorSuspended = false;
|
|
70
|
+
// Subscribe to ongoing degradation changes.
|
|
71
|
+
unsubscribeDegradation = onDegradationChange(handleDegradationChange);
|
|
72
|
+
// Evaluate current state immediately (handles late-start scenarios).
|
|
73
|
+
if (isFeatureDisabled("autoRefresh")) {
|
|
74
|
+
coordinatorSuspended = true;
|
|
75
|
+
suspendAllSources();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Stop the polling restart coordinator.
|
|
80
|
+
*
|
|
81
|
+
* Unsubscribes from degradation changes. If the coordinator had
|
|
82
|
+
* triggered a global suspension, sources are resumed to avoid
|
|
83
|
+
* leaving polling permanently frozen.
|
|
84
|
+
*/
|
|
85
|
+
export function stopPollingRestart() {
|
|
86
|
+
if (unsubscribeDegradation) {
|
|
87
|
+
unsubscribeDegradation();
|
|
88
|
+
unsubscribeDegradation = null;
|
|
89
|
+
}
|
|
90
|
+
// If we suspended sources, resume them so we don't leave
|
|
91
|
+
// polling frozen after the coordinator is stopped.
|
|
92
|
+
if (coordinatorSuspended) {
|
|
93
|
+
coordinatorSuspended = false;
|
|
94
|
+
resumeAllSources();
|
|
95
|
+
}
|
|
96
|
+
started = false;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=polling-restart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling-restart.js","sourceRoot":"","sources":["../../../src/viewer/polling/polling-restart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAIjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,wCAAwC,CAAC;AAEhD,gFAAgF;AAEhF,IAAI,sBAAsB,GAAwB,IAAI,CAAC;AACvD,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB;;;;;;GAMG;AACH,IAAI,oBAAoB,GAAG,KAAK,CAAC;AAEjC,gFAAgF;AAEhF,SAAS,uBAAuB,CAAC,KAAuB;IACtD,MAAM,mBAAmB,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEtE,IAAI,mBAAmB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACjD,iEAAiE;QACjE,oBAAoB,GAAG,IAAI,CAAC;QAC5B,iBAAiB,EAAE,CAAC;IACtB,CAAC;SAAM,IAAI,CAAC,mBAAmB,IAAI,oBAAoB,EAAE,CAAC;QACxD,uEAAuE;QACvE,oBAAoB,GAAG,KAAK,CAAC;QAC7B,gBAAgB,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,OAAO;QAAE,kBAAkB,EAAE,CAAC;IAElC,OAAO,GAAG,IAAI,CAAC;IACf,oBAAoB,GAAG,KAAK,CAAC;IAE7B,4CAA4C;IAC5C,sBAAsB,GAAG,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;IAEtE,qEAAqE;IACrE,IAAI,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;QACrC,oBAAoB,GAAG,IAAI,CAAC;QAC5B,iBAAiB,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,sBAAsB,EAAE,CAAC;QAC3B,sBAAsB,EAAE,CAAC;QACzB,sBAAsB,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,yDAAyD;IACzD,mDAAmD;IACnD,IAAI,oBAAoB,EAAE,CAAC;QACzB,oBAAoB,GAAG,KAAK,CAAC;QAC7B,gBAAgB,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,KAAK,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized polling state manager.
|
|
3
|
+
*
|
|
4
|
+
* Provides a single registry for all interval-based polling sources in the
|
|
5
|
+
* application (polling-manager, memory-monitor, DOM performance monitor,
|
|
6
|
+
* tick timer, etc.). Enables coordinated suspension, resumption, and
|
|
7
|
+
* disposal of all polling sources from one location.
|
|
8
|
+
*
|
|
9
|
+
* Problems this solves:
|
|
10
|
+
*
|
|
11
|
+
* 1. **Orphaned intervals** — Without a central registry, independent
|
|
12
|
+
* modules that manage their own `setInterval` can leak timers if
|
|
13
|
+
* their stop functions are never called.
|
|
14
|
+
*
|
|
15
|
+
* 2. **No single "stop everything"** — Previously, shutting down all
|
|
16
|
+
* polling required calling individual stop functions across 4+
|
|
17
|
+
* modules. Now `disposeAllSources()` handles it.
|
|
18
|
+
*
|
|
19
|
+
* 3. **Component remount safety** — Module-level state persists across
|
|
20
|
+
* Preact component teardown/remount cycles. Generation IDs prevent
|
|
21
|
+
* stale callbacks from restarting disposed sources.
|
|
22
|
+
*
|
|
23
|
+
* 4. **Memory-pressure coordination** — Sources can be tagged as
|
|
24
|
+
* `essential` (e.g. memory-monitor must keep running to detect
|
|
25
|
+
* recovery) or non-essential (suspended during memory pressure).
|
|
26
|
+
*
|
|
27
|
+
* Generation tracking:
|
|
28
|
+
*
|
|
29
|
+
* Each `suspendAllSources()` / `resumeAllSources()` cycle increments a
|
|
30
|
+
* generation counter. Callers can snapshot the generation before an
|
|
31
|
+
* async operation and compare afterward to detect whether a
|
|
32
|
+
* suspend/resume cycle occurred while they were waiting — preventing
|
|
33
|
+
* stale restarts from orphaned component lifecycles.
|
|
34
|
+
*
|
|
35
|
+
* Designed as a standalone module with zero framework dependencies.
|
|
36
|
+
*/
|
|
37
|
+
/** Status of an individual polling source. */
|
|
38
|
+
export type PollingSourceStatus = "active" | "suspended" | "disposed" | "idle";
|
|
39
|
+
/** Lifecycle callbacks for a registered polling source. */
|
|
40
|
+
export interface PollingSourceCallbacks {
|
|
41
|
+
/** Suspend the source (stop its interval but keep state for resume). */
|
|
42
|
+
suspend: () => void;
|
|
43
|
+
/** Resume the source (restart its interval). */
|
|
44
|
+
resume: () => void;
|
|
45
|
+
/** Fully dispose the source (stop interval, clear state). */
|
|
46
|
+
dispose: () => void;
|
|
47
|
+
/** Return the source's current status. */
|
|
48
|
+
getStatus: () => PollingSourceStatus;
|
|
49
|
+
}
|
|
50
|
+
/** Configuration for a polling source registration. */
|
|
51
|
+
export interface PollingSourceConfig {
|
|
52
|
+
/**
|
|
53
|
+
* Whether this source is essential and should NOT be suspended during
|
|
54
|
+
* memory pressure. The memory monitor itself is essential — it must
|
|
55
|
+
* keep running to detect when pressure subsides.
|
|
56
|
+
*/
|
|
57
|
+
essential: boolean;
|
|
58
|
+
}
|
|
59
|
+
/** Read-only view of a registered polling source. */
|
|
60
|
+
export interface PollingSourceInfo {
|
|
61
|
+
readonly key: string;
|
|
62
|
+
readonly status: PollingSourceStatus;
|
|
63
|
+
readonly essential: boolean;
|
|
64
|
+
readonly registeredAt: string;
|
|
65
|
+
}
|
|
66
|
+
/** Read-only snapshot of the global polling state. */
|
|
67
|
+
export interface PollingStateSnapshot {
|
|
68
|
+
/** All registered polling sources. */
|
|
69
|
+
readonly sources: readonly PollingSourceInfo[];
|
|
70
|
+
/** Number of registered sources. */
|
|
71
|
+
readonly sourceCount: number;
|
|
72
|
+
/** Number of currently active (running) sources. */
|
|
73
|
+
readonly activeCount: number;
|
|
74
|
+
/** Number of currently suspended sources. */
|
|
75
|
+
readonly suspendedCount: number;
|
|
76
|
+
/** Whether global suspension is active. */
|
|
77
|
+
readonly globalSuspended: boolean;
|
|
78
|
+
/** Current generation counter (increments on suspend/resume cycles). */
|
|
79
|
+
readonly generation: number;
|
|
80
|
+
}
|
|
81
|
+
/** Callback invoked when the global polling state changes. */
|
|
82
|
+
export type PollingStateChangeHandler = (snapshot: PollingStateSnapshot) => void;
|
|
83
|
+
/**
|
|
84
|
+
* Register a polling source with the centralized state manager.
|
|
85
|
+
*
|
|
86
|
+
* If a source with the same key already exists, it is disposed and replaced.
|
|
87
|
+
* If global suspension is active and the source is not essential, it will
|
|
88
|
+
* be immediately suspended after registration.
|
|
89
|
+
*
|
|
90
|
+
* Returns an unregister function that removes the source from the registry
|
|
91
|
+
* WITHOUT calling dispose. This allows sources to voluntarily unregister
|
|
92
|
+
* (e.g. during their own stop/shutdown) without triggering re-entrant
|
|
93
|
+
* dispose calls. The `dispose` callback is only invoked by
|
|
94
|
+
* `disposeAllSources()` or when the source is replaced by a new
|
|
95
|
+
* registration with the same key.
|
|
96
|
+
*
|
|
97
|
+
* @param key - Unique identifier for this source.
|
|
98
|
+
* @param callbacks - Lifecycle callbacks (suspend, resume, dispose, getStatus).
|
|
99
|
+
* @param config - Source configuration (essential flag).
|
|
100
|
+
*/
|
|
101
|
+
export declare function registerPollingSource(key: string, callbacks: PollingSourceCallbacks, config?: Partial<PollingSourceConfig>): () => void;
|
|
102
|
+
/**
|
|
103
|
+
* Remove a polling source from the registry WITHOUT calling dispose.
|
|
104
|
+
*
|
|
105
|
+
* Use this when the source is cleaning itself up voluntarily (e.g. a
|
|
106
|
+
* module's own stop function). The source is responsible for its own
|
|
107
|
+
* resource cleanup in this case. For forced cleanup, use
|
|
108
|
+
* `disposeAllSources()`.
|
|
109
|
+
*/
|
|
110
|
+
export declare function unregisterPollingSource(key: string): void;
|
|
111
|
+
/**
|
|
112
|
+
* Suspend all non-essential polling sources.
|
|
113
|
+
*
|
|
114
|
+
* Essential sources (e.g. memory-monitor) continue running so they can
|
|
115
|
+
* detect when conditions improve. Increments the generation counter.
|
|
116
|
+
*/
|
|
117
|
+
export declare function suspendAllSources(): void;
|
|
118
|
+
/**
|
|
119
|
+
* Resume all suspended polling sources.
|
|
120
|
+
*
|
|
121
|
+
* Restarts non-essential sources that were suspended. Essential sources
|
|
122
|
+
* that were already running are unaffected. Increments the generation counter.
|
|
123
|
+
*/
|
|
124
|
+
export declare function resumeAllSources(): void;
|
|
125
|
+
/**
|
|
126
|
+
* Dispose all registered polling sources and clear the registry.
|
|
127
|
+
*
|
|
128
|
+
* After this call, all intervals are stopped and all sources are removed.
|
|
129
|
+
* The generation counter is incremented. New sources can still be registered.
|
|
130
|
+
*/
|
|
131
|
+
export declare function disposeAllSources(): void;
|
|
132
|
+
/**
|
|
133
|
+
* Check if global suspension is active.
|
|
134
|
+
*/
|
|
135
|
+
export declare function isGlobalSuspended(): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Get the current generation counter.
|
|
138
|
+
*
|
|
139
|
+
* The generation increments on every suspend/resume/dispose cycle.
|
|
140
|
+
* Callers can snapshot this value before an async operation and compare
|
|
141
|
+
* afterward to detect whether a lifecycle change occurred.
|
|
142
|
+
*/
|
|
143
|
+
export declare function getGeneration(): number;
|
|
144
|
+
/**
|
|
145
|
+
* Check if a specific source is registered.
|
|
146
|
+
*/
|
|
147
|
+
export declare function isSourceRegistered(key: string): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Get read-only information about a specific source, or null if not registered.
|
|
150
|
+
*/
|
|
151
|
+
export declare function getSourceInfo(key: string): PollingSourceInfo | null;
|
|
152
|
+
/**
|
|
153
|
+
* Get a full snapshot of the global polling state.
|
|
154
|
+
*/
|
|
155
|
+
export declare function getPollingState(): PollingStateSnapshot;
|
|
156
|
+
/**
|
|
157
|
+
* Subscribe to polling state changes. Returns an unsubscribe function.
|
|
158
|
+
*/
|
|
159
|
+
export declare function onPollingStateChange(listener: PollingStateChangeHandler): () => void;
|
|
160
|
+
/**
|
|
161
|
+
* Get the number of registered polling sources.
|
|
162
|
+
*/
|
|
163
|
+
export declare function getSourceCount(): number;
|
|
164
|
+
/**
|
|
165
|
+
* Validate that a generation value is still current.
|
|
166
|
+
*
|
|
167
|
+
* Returns `true` if the given generation matches the current generation,
|
|
168
|
+
* meaning no suspend/resume/dispose cycle has occurred since the value
|
|
169
|
+
* was captured. Useful for guarding against stale restarts in async code:
|
|
170
|
+
*
|
|
171
|
+
* ```ts
|
|
172
|
+
* const gen = getGeneration();
|
|
173
|
+
* await fetchData();
|
|
174
|
+
* if (!isGenerationCurrent(gen)) return; // stale — bail out
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
export declare function isGenerationCurrent(gen: number): boolean;
|
|
178
|
+
/**
|
|
179
|
+
* Reset all module state (for testing). Disposes all sources, clears
|
|
180
|
+
* listeners, and resets the generation counter.
|
|
181
|
+
*/
|
|
182
|
+
export declare function resetPollingState(): void;
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized polling state manager.
|
|
3
|
+
*
|
|
4
|
+
* Provides a single registry for all interval-based polling sources in the
|
|
5
|
+
* application (polling-manager, memory-monitor, DOM performance monitor,
|
|
6
|
+
* tick timer, etc.). Enables coordinated suspension, resumption, and
|
|
7
|
+
* disposal of all polling sources from one location.
|
|
8
|
+
*
|
|
9
|
+
* Problems this solves:
|
|
10
|
+
*
|
|
11
|
+
* 1. **Orphaned intervals** — Without a central registry, independent
|
|
12
|
+
* modules that manage their own `setInterval` can leak timers if
|
|
13
|
+
* their stop functions are never called.
|
|
14
|
+
*
|
|
15
|
+
* 2. **No single "stop everything"** — Previously, shutting down all
|
|
16
|
+
* polling required calling individual stop functions across 4+
|
|
17
|
+
* modules. Now `disposeAllSources()` handles it.
|
|
18
|
+
*
|
|
19
|
+
* 3. **Component remount safety** — Module-level state persists across
|
|
20
|
+
* Preact component teardown/remount cycles. Generation IDs prevent
|
|
21
|
+
* stale callbacks from restarting disposed sources.
|
|
22
|
+
*
|
|
23
|
+
* 4. **Memory-pressure coordination** — Sources can be tagged as
|
|
24
|
+
* `essential` (e.g. memory-monitor must keep running to detect
|
|
25
|
+
* recovery) or non-essential (suspended during memory pressure).
|
|
26
|
+
*
|
|
27
|
+
* Generation tracking:
|
|
28
|
+
*
|
|
29
|
+
* Each `suspendAllSources()` / `resumeAllSources()` cycle increments a
|
|
30
|
+
* generation counter. Callers can snapshot the generation before an
|
|
31
|
+
* async operation and compare afterward to detect whether a
|
|
32
|
+
* suspend/resume cycle occurred while they were waiting — preventing
|
|
33
|
+
* stale restarts from orphaned component lifecycles.
|
|
34
|
+
*
|
|
35
|
+
* Designed as a standalone module with zero framework dependencies.
|
|
36
|
+
*/
|
|
37
|
+
// ─── Module state ────────────────────────────────────────────────────────────
|
|
38
|
+
const sources = new Map();
|
|
39
|
+
let globalSuspended = false;
|
|
40
|
+
let generation = 0;
|
|
41
|
+
let listeners = [];
|
|
42
|
+
// ─── Internal helpers ────────────────────────────────────────────────────────
|
|
43
|
+
/** Build a snapshot from current module state. */
|
|
44
|
+
function buildSnapshot() {
|
|
45
|
+
const infos = [];
|
|
46
|
+
let activeCount = 0;
|
|
47
|
+
let suspendedCount = 0;
|
|
48
|
+
for (const entry of sources.values()) {
|
|
49
|
+
const status = entry.callbacks.getStatus();
|
|
50
|
+
infos.push({
|
|
51
|
+
key: entry.key,
|
|
52
|
+
status,
|
|
53
|
+
essential: entry.config.essential,
|
|
54
|
+
registeredAt: entry.registeredAt,
|
|
55
|
+
});
|
|
56
|
+
if (status === "active")
|
|
57
|
+
activeCount++;
|
|
58
|
+
if (status === "suspended")
|
|
59
|
+
suspendedCount++;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
sources: infos,
|
|
63
|
+
sourceCount: sources.size,
|
|
64
|
+
activeCount,
|
|
65
|
+
suspendedCount,
|
|
66
|
+
globalSuspended,
|
|
67
|
+
generation,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function notifyListeners() {
|
|
71
|
+
const snapshot = buildSnapshot();
|
|
72
|
+
for (const listener of listeners) {
|
|
73
|
+
try {
|
|
74
|
+
listener(snapshot);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
console.warn("[polling-state] listener error:", err);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
82
|
+
/**
|
|
83
|
+
* Register a polling source with the centralized state manager.
|
|
84
|
+
*
|
|
85
|
+
* If a source with the same key already exists, it is disposed and replaced.
|
|
86
|
+
* If global suspension is active and the source is not essential, it will
|
|
87
|
+
* be immediately suspended after registration.
|
|
88
|
+
*
|
|
89
|
+
* Returns an unregister function that removes the source from the registry
|
|
90
|
+
* WITHOUT calling dispose. This allows sources to voluntarily unregister
|
|
91
|
+
* (e.g. during their own stop/shutdown) without triggering re-entrant
|
|
92
|
+
* dispose calls. The `dispose` callback is only invoked by
|
|
93
|
+
* `disposeAllSources()` or when the source is replaced by a new
|
|
94
|
+
* registration with the same key.
|
|
95
|
+
*
|
|
96
|
+
* @param key - Unique identifier for this source.
|
|
97
|
+
* @param callbacks - Lifecycle callbacks (suspend, resume, dispose, getStatus).
|
|
98
|
+
* @param config - Source configuration (essential flag).
|
|
99
|
+
*/
|
|
100
|
+
export function registerPollingSource(key, callbacks, config = {}) {
|
|
101
|
+
// Dispose existing source with the same key (prevents orphaned intervals).
|
|
102
|
+
const existing = sources.get(key);
|
|
103
|
+
if (existing) {
|
|
104
|
+
try {
|
|
105
|
+
existing.callbacks.dispose();
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
console.warn(`[polling-state] failed to dispose replaced source "${key}":`, err);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const entry = {
|
|
112
|
+
key,
|
|
113
|
+
callbacks,
|
|
114
|
+
config: {
|
|
115
|
+
essential: config.essential ?? false,
|
|
116
|
+
},
|
|
117
|
+
registeredAt: new Date().toISOString(),
|
|
118
|
+
};
|
|
119
|
+
sources.set(key, entry);
|
|
120
|
+
// If global suspension is active and this source is not essential,
|
|
121
|
+
// suspend it immediately to maintain consistent state.
|
|
122
|
+
if (globalSuspended && !entry.config.essential) {
|
|
123
|
+
try {
|
|
124
|
+
callbacks.suspend();
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
console.warn(`[polling-state] failed to suspend new source "${key}":`, err);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
notifyListeners();
|
|
131
|
+
return () => unregisterPollingSource(key);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Remove a polling source from the registry WITHOUT calling dispose.
|
|
135
|
+
*
|
|
136
|
+
* Use this when the source is cleaning itself up voluntarily (e.g. a
|
|
137
|
+
* module's own stop function). The source is responsible for its own
|
|
138
|
+
* resource cleanup in this case. For forced cleanup, use
|
|
139
|
+
* `disposeAllSources()`.
|
|
140
|
+
*/
|
|
141
|
+
export function unregisterPollingSource(key) {
|
|
142
|
+
if (!sources.has(key))
|
|
143
|
+
return;
|
|
144
|
+
sources.delete(key);
|
|
145
|
+
notifyListeners();
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Suspend all non-essential polling sources.
|
|
149
|
+
*
|
|
150
|
+
* Essential sources (e.g. memory-monitor) continue running so they can
|
|
151
|
+
* detect when conditions improve. Increments the generation counter.
|
|
152
|
+
*/
|
|
153
|
+
export function suspendAllSources() {
|
|
154
|
+
if (globalSuspended)
|
|
155
|
+
return;
|
|
156
|
+
globalSuspended = true;
|
|
157
|
+
generation++;
|
|
158
|
+
for (const entry of sources.values()) {
|
|
159
|
+
if (entry.config.essential)
|
|
160
|
+
continue;
|
|
161
|
+
try {
|
|
162
|
+
entry.callbacks.suspend();
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
console.warn(`[polling-state] failed to suspend source "${entry.key}":`, err);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
notifyListeners();
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Resume all suspended polling sources.
|
|
172
|
+
*
|
|
173
|
+
* Restarts non-essential sources that were suspended. Essential sources
|
|
174
|
+
* that were already running are unaffected. Increments the generation counter.
|
|
175
|
+
*/
|
|
176
|
+
export function resumeAllSources() {
|
|
177
|
+
if (!globalSuspended)
|
|
178
|
+
return;
|
|
179
|
+
globalSuspended = false;
|
|
180
|
+
generation++;
|
|
181
|
+
for (const entry of sources.values()) {
|
|
182
|
+
if (entry.config.essential)
|
|
183
|
+
continue;
|
|
184
|
+
try {
|
|
185
|
+
entry.callbacks.resume();
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
console.warn(`[polling-state] failed to resume source "${entry.key}":`, err);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
notifyListeners();
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Dispose all registered polling sources and clear the registry.
|
|
195
|
+
*
|
|
196
|
+
* After this call, all intervals are stopped and all sources are removed.
|
|
197
|
+
* The generation counter is incremented. New sources can still be registered.
|
|
198
|
+
*/
|
|
199
|
+
export function disposeAllSources() {
|
|
200
|
+
generation++;
|
|
201
|
+
for (const entry of sources.values()) {
|
|
202
|
+
try {
|
|
203
|
+
entry.callbacks.dispose();
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
console.warn(`[polling-state] failed to dispose source "${entry.key}":`, err);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
sources.clear();
|
|
210
|
+
globalSuspended = false;
|
|
211
|
+
notifyListeners();
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Check if global suspension is active.
|
|
215
|
+
*/
|
|
216
|
+
export function isGlobalSuspended() {
|
|
217
|
+
return globalSuspended;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get the current generation counter.
|
|
221
|
+
*
|
|
222
|
+
* The generation increments on every suspend/resume/dispose cycle.
|
|
223
|
+
* Callers can snapshot this value before an async operation and compare
|
|
224
|
+
* afterward to detect whether a lifecycle change occurred.
|
|
225
|
+
*/
|
|
226
|
+
export function getGeneration() {
|
|
227
|
+
return generation;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check if a specific source is registered.
|
|
231
|
+
*/
|
|
232
|
+
export function isSourceRegistered(key) {
|
|
233
|
+
return sources.has(key);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get read-only information about a specific source, or null if not registered.
|
|
237
|
+
*/
|
|
238
|
+
export function getSourceInfo(key) {
|
|
239
|
+
const entry = sources.get(key);
|
|
240
|
+
if (!entry)
|
|
241
|
+
return null;
|
|
242
|
+
return {
|
|
243
|
+
key: entry.key,
|
|
244
|
+
status: entry.callbacks.getStatus(),
|
|
245
|
+
essential: entry.config.essential,
|
|
246
|
+
registeredAt: entry.registeredAt,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get a full snapshot of the global polling state.
|
|
251
|
+
*/
|
|
252
|
+
export function getPollingState() {
|
|
253
|
+
return buildSnapshot();
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Subscribe to polling state changes. Returns an unsubscribe function.
|
|
257
|
+
*/
|
|
258
|
+
export function onPollingStateChange(listener) {
|
|
259
|
+
listeners.push(listener);
|
|
260
|
+
return () => {
|
|
261
|
+
listeners = listeners.filter((l) => l !== listener);
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Get the number of registered polling sources.
|
|
266
|
+
*/
|
|
267
|
+
export function getSourceCount() {
|
|
268
|
+
return sources.size;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Validate that a generation value is still current.
|
|
272
|
+
*
|
|
273
|
+
* Returns `true` if the given generation matches the current generation,
|
|
274
|
+
* meaning no suspend/resume/dispose cycle has occurred since the value
|
|
275
|
+
* was captured. Useful for guarding against stale restarts in async code:
|
|
276
|
+
*
|
|
277
|
+
* ```ts
|
|
278
|
+
* const gen = getGeneration();
|
|
279
|
+
* await fetchData();
|
|
280
|
+
* if (!isGenerationCurrent(gen)) return; // stale — bail out
|
|
281
|
+
* ```
|
|
282
|
+
*/
|
|
283
|
+
export function isGenerationCurrent(gen) {
|
|
284
|
+
return gen === generation;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Reset all module state (for testing). Disposes all sources, clears
|
|
288
|
+
* listeners, and resets the generation counter.
|
|
289
|
+
*/
|
|
290
|
+
export function resetPollingState() {
|
|
291
|
+
// Dispose all sources without incrementing generation
|
|
292
|
+
// (reset is a testing utility, not a lifecycle event).
|
|
293
|
+
for (const entry of sources.values()) {
|
|
294
|
+
try {
|
|
295
|
+
entry.callbacks.dispose();
|
|
296
|
+
}
|
|
297
|
+
catch (err) {
|
|
298
|
+
console.warn(`[polling-state] failed to dispose source "${entry.key}" during reset:`, err);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
sources.clear();
|
|
302
|
+
globalSuspended = false;
|
|
303
|
+
generation = 0;
|
|
304
|
+
listeners = [];
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=polling-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling-state.js","sourceRoot":"","sources":["../../../src/viewer/polling/polling-state.ts"],"names":[],"mappings":"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"}
|