@osdk/react-devtools 0.5.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/CHANGELOG.md +79 -0
- package/build/esm/DevToolsContext.js +19 -0
- package/build/esm/DevToolsContext.js.map +1 -0
- package/build/esm/components/ActionMetrics.js +89 -0
- package/build/esm/components/ActionMetrics.js.map +1 -0
- package/build/esm/components/BubbleChart.js +175 -0
- package/build/esm/components/BubbleChart.js.map +1 -0
- package/build/esm/components/BubbleChart.module.scss.js +6 -0
- package/build/esm/components/CacheInspectorTab.js +291 -0
- package/build/esm/components/CacheInspectorTab.js.map +1 -0
- package/build/esm/components/CacheInspectorTab.module.scss.js +39 -0
- package/build/esm/components/CacheMetrics.js +55 -0
- package/build/esm/components/CacheMetrics.js.map +1 -0
- package/build/esm/components/ComponentCard.js +124 -0
- package/build/esm/components/ComponentCard.js.map +1 -0
- package/build/esm/components/ComponentCard.module.scss.js +31 -0
- package/build/esm/components/ComputeTab.js +175 -0
- package/build/esm/components/ComputeTab.js.map +1 -0
- package/build/esm/components/CopyableCodeBlock.js +49 -0
- package/build/esm/components/CopyableCodeBlock.js.map +1 -0
- package/build/esm/components/CopyableCodeBlock.module.scss.js +10 -0
- package/build/esm/components/DebuggingTab.js +342 -0
- package/build/esm/components/DebuggingTab.js.map +1 -0
- package/build/esm/components/DebuggingTab.module.scss.js +18 -0
- package/build/esm/components/HookRow.js +180 -0
- package/build/esm/components/HookRow.js.map +1 -0
- package/build/esm/components/HookRow.module.scss.js +16 -0
- package/build/esm/components/ImprovementsTab.js +138 -0
- package/build/esm/components/ImprovementsTab.js.map +1 -0
- package/build/esm/components/ImprovementsTab.module.scss.js +30 -0
- package/build/esm/components/InspectorSelectionHeader.js +65 -0
- package/build/esm/components/InspectorSelectionHeader.js.map +1 -0
- package/build/esm/components/InterceptTab.js +862 -0
- package/build/esm/components/InterceptTab.js.map +1 -0
- package/build/esm/components/InterceptTab.module.scss.js +49 -0
- package/build/esm/components/IssueCard.js +115 -0
- package/build/esm/components/IssueCard.js.map +1 -0
- package/build/esm/components/IssueCard.module.scss.js +24 -0
- package/build/esm/components/LogEntryCard.js +94 -0
- package/build/esm/components/LogEntryCard.js.map +1 -0
- package/build/esm/components/LogEntryCard.module.scss.js +19 -0
- package/build/esm/components/MockEditor.js +316 -0
- package/build/esm/components/MockEditor.js.map +1 -0
- package/build/esm/components/MonitorErrorBoundary.js +64 -0
- package/build/esm/components/MonitorErrorBoundary.js.map +1 -0
- package/build/esm/components/MonitorErrorBoundary.module.scss.js +9 -0
- package/build/esm/components/MonitoringPanel.js +434 -0
- package/build/esm/components/MonitoringPanel.js.map +1 -0
- package/build/esm/components/MonitoringPanel.module.scss.js +81 -0
- package/build/esm/components/ObjectLoadingMetrics.js +60 -0
- package/build/esm/components/ObjectLoadingMetrics.js.map +1 -0
- package/build/esm/components/OsdkAppErrorBoundary.js +68 -0
- package/build/esm/components/OsdkAppErrorBoundary.js.map +1 -0
- package/build/esm/components/OsdkDevTools.js +40 -0
- package/build/esm/components/OsdkDevTools.js.map +1 -0
- package/build/esm/components/OverrideEditor.js +197 -0
- package/build/esm/components/OverrideEditor.js.map +1 -0
- package/build/esm/components/PerformanceTab.js +297 -0
- package/build/esm/components/PerformanceTab.js.map +1 -0
- package/build/esm/components/PrimitiveSelectionPanel.js +220 -0
- package/build/esm/components/PrimitiveSelectionPanel.js.map +1 -0
- package/build/esm/components/PrimitiveSelectionPanel.module.scss.js +26 -0
- package/build/esm/components/issueTypes.js +2 -0
- package/build/esm/components/issueTypes.js.map +1 -0
- package/build/esm/components/resolveComponentName.js +57 -0
- package/build/esm/components/resolveComponentName.js.map +1 -0
- package/build/esm/components/testHelpers.js +312 -0
- package/build/esm/components/testHelpers.js.map +1 -0
- package/build/esm/css.d.ts +20 -0
- package/build/esm/fiber/DegradationNotice.js +193 -0
- package/build/esm/fiber/DegradationNotice.js.map +1 -0
- package/build/esm/fiber/DevtoolsHook.js +252 -0
- package/build/esm/fiber/DevtoolsHook.js.map +1 -0
- package/build/esm/fiber/FiberAccess.js +65 -0
- package/build/esm/fiber/FiberAccess.js.map +1 -0
- package/build/esm/fiber/FiberInspection.js +140 -0
- package/build/esm/fiber/FiberInspection.js.map +1 -0
- package/build/esm/fiber/FiberTags.js +52 -0
- package/build/esm/fiber/FiberTags.js.map +1 -0
- package/build/esm/fiber/HookStateInspector.js +254 -0
- package/build/esm/fiber/HookStateInspector.js.map +1 -0
- package/build/esm/fiber/SafeFiberOperation.js +35 -0
- package/build/esm/fiber/SafeFiberOperation.js.map +1 -0
- package/build/esm/fiber/capabilities.js +180 -0
- package/build/esm/fiber/capabilities.js.map +1 -0
- package/build/esm/fiber/traverseFiber.js +129 -0
- package/build/esm/fiber/traverseFiber.js.map +1 -0
- package/build/esm/fiber/types.js +2 -0
- package/build/esm/fiber/types.js.map +1 -0
- package/build/esm/fiber/validation.js +155 -0
- package/build/esm/fiber/validation.js.map +1 -0
- package/build/esm/hooks/createPollingStore.js +81 -0
- package/build/esm/hooks/createPollingStore.js.map +1 -0
- package/build/esm/hooks/useActiveComponents.js +27 -0
- package/build/esm/hooks/useActiveComponents.js.map +1 -0
- package/build/esm/hooks/useComponentRegistry.js +25 -0
- package/build/esm/hooks/useComponentRegistry.js.map +1 -0
- package/build/esm/hooks/useComputeSelectors.js +43 -0
- package/build/esm/hooks/useComputeSelectors.js.map +1 -0
- package/build/esm/hooks/useConsoleLogs.js +46 -0
- package/build/esm/hooks/useConsoleLogs.js.map +1 -0
- package/build/esm/hooks/useInspectorSelection.js +93 -0
- package/build/esm/hooks/useInspectorSelection.js.map +1 -0
- package/build/esm/hooks/useMetrics.js +23 -0
- package/build/esm/hooks/useMetrics.js.map +1 -0
- package/build/esm/hooks/usePersistedState.js +89 -0
- package/build/esm/hooks/usePersistedState.js.map +1 -0
- package/build/esm/hooks/useRecommendations.js +123 -0
- package/build/esm/hooks/useRecommendations.js.map +1 -0
- package/build/esm/hooks/useSharedTick.js +49 -0
- package/build/esm/hooks/useSharedTick.js.map +1 -0
- package/build/esm/hooks/useTimeElapsed.js +51 -0
- package/build/esm/hooks/useTimeElapsed.js.map +1 -0
- package/build/esm/hooks/useTrackerSubscription.js +97 -0
- package/build/esm/hooks/useTrackerSubscription.js.map +1 -0
- package/build/esm/hooks/useUnusedFieldAnalysis.js +99 -0
- package/build/esm/hooks/useUnusedFieldAnalysis.js.map +1 -0
- package/build/esm/index.js +31 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/inspector/ClickToInspectSystem.js +228 -0
- package/build/esm/inspector/ClickToInspectSystem.js.map +1 -0
- package/build/esm/inspector/components/ComponentLabel.js +175 -0
- package/build/esm/inspector/components/ComponentLabel.js.map +1 -0
- package/build/esm/inspector/components/ComponentLabel.module.scss.js +12 -0
- package/build/esm/inspector/components/InspectorBanner.js +79 -0
- package/build/esm/inspector/components/InspectorBanner.js.map +1 -0
- package/build/esm/inspector/components/InspectorOverlay.js +149 -0
- package/build/esm/inspector/components/InspectorOverlay.js.map +1 -0
- package/build/esm/inspector/components/SelectionHighlight.js +74 -0
- package/build/esm/inspector/components/SelectionHighlight.js.map +1 -0
- package/build/esm/inspector/createClickToInspect.js +21 -0
- package/build/esm/inspector/createClickToInspect.js.map +1 -0
- package/build/esm/inspector/hooks/useAnimatedBounds.js +167 -0
- package/build/esm/inspector/hooks/useAnimatedBounds.js.map +1 -0
- package/build/esm/inspector/index.js +40 -0
- package/build/esm/inspector/index.js.map +1 -0
- package/build/esm/inspector/inspectorController.js +328 -0
- package/build/esm/inspector/inspectorController.js.map +1 -0
- package/build/esm/inspector/types.js +2 -0
- package/build/esm/inspector/types.js.map +1 -0
- package/build/esm/inspector/utils/elementBounds.js +72 -0
- package/build/esm/inspector/utils/elementBounds.js.map +1 -0
- package/build/esm/inspector/utils/interpolation.js +26 -0
- package/build/esm/inspector/utils/interpolation.js.map +1 -0
- package/build/esm/inspector/utils/labelPositioning.js +62 -0
- package/build/esm/inspector/utils/labelPositioning.js.map +1 -0
- package/build/esm/mocking/MockCacheKeyGenerator.js +109 -0
- package/build/esm/mocking/MockCacheKeyGenerator.js.map +1 -0
- package/build/esm/mocking/MockManager.js +281 -0
- package/build/esm/mocking/MockManager.js.map +1 -0
- package/build/esm/prototyping/PrototypeOverrideStore.js +66 -0
- package/build/esm/prototyping/PrototypeOverrideStore.js.map +1 -0
- package/build/esm/prototyping/index.js +18 -0
- package/build/esm/prototyping/index.js.map +1 -0
- package/build/esm/public/vite.js +19 -0
- package/build/esm/public/vite.js.map +1 -0
- package/build/esm/register.js +41 -0
- package/build/esm/register.js.map +1 -0
- package/build/esm/scss.d.ts +20 -0
- package/build/esm/store/ComputeStore.js +269 -0
- package/build/esm/store/ComputeStore.js.map +1 -0
- package/build/esm/store/ConsoleLogStore.js +289 -0
- package/build/esm/store/ConsoleLogStore.js.map +1 -0
- package/build/esm/store/MetricsStore.js +428 -0
- package/build/esm/store/MetricsStore.js.map +1 -0
- package/build/esm/store/MonitorStore.js +288 -0
- package/build/esm/store/MonitorStore.js.map +1 -0
- package/build/esm/store/SubscribableStore.js +38 -0
- package/build/esm/store/SubscribableStore.js.map +1 -0
- package/build/esm/store/WindowErrorStore.js +195 -0
- package/build/esm/store/WindowErrorStore.js.map +1 -0
- package/build/esm/styles.css +19441 -0
- package/build/esm/styles.js +31 -0
- package/build/esm/styles.js.map +1 -0
- package/build/esm/types/compute.js +2 -0
- package/build/esm/types/compute.js.map +1 -0
- package/build/esm/types/emissions.js +2 -0
- package/build/esm/types/emissions.js.map +1 -0
- package/build/esm/types/index.js +23 -0
- package/build/esm/types/index.js.map +1 -0
- package/build/esm/utils/ActionLifecycleTracker.js +178 -0
- package/build/esm/utils/ActionLifecycleTracker.js.map +1 -0
- package/build/esm/utils/CacheEfficiencyAnalyzer.js +198 -0
- package/build/esm/utils/CacheEfficiencyAnalyzer.js.map +1 -0
- package/build/esm/utils/CircularBuffer.js +96 -0
- package/build/esm/utils/CircularBuffer.js.map +1 -0
- package/build/esm/utils/ComponentContextCapture.js +215 -0
- package/build/esm/utils/ComponentContextCapture.js.map +1 -0
- package/build/esm/utils/ComponentPrimitiveDiscovery.js +173 -0
- package/build/esm/utils/ComponentPrimitiveDiscovery.js.map +1 -0
- package/build/esm/utils/ComponentQueryRegistry.js +340 -0
- package/build/esm/utils/ComponentQueryRegistry.js.map +1 -0
- package/build/esm/utils/ComputeMonitor.js +199 -0
- package/build/esm/utils/ComputeMonitor.js.map +1 -0
- package/build/esm/utils/EventTimeline.js +130 -0
- package/build/esm/utils/EventTimeline.js.map +1 -0
- package/build/esm/utils/LinkTraversalTracker.js +116 -0
- package/build/esm/utils/LinkTraversalTracker.js.map +1 -0
- package/build/esm/utils/MockDataGenerator.js +473 -0
- package/build/esm/utils/MockDataGenerator.js.map +1 -0
- package/build/esm/utils/ObservableClientMonitor.js +768 -0
- package/build/esm/utils/ObservableClientMonitor.js.map +1 -0
- package/build/esm/utils/PerformanceRecommendationEngine.js +185 -0
- package/build/esm/utils/PerformanceRecommendationEngine.js.map +1 -0
- package/build/esm/utils/PropertyAccessTracker.js +238 -0
- package/build/esm/utils/PropertyAccessTracker.js.map +1 -0
- package/build/esm/utils/RecommendationMatcher.js +53 -0
- package/build/esm/utils/RecommendationMatcher.js.map +1 -0
- package/build/esm/utils/SubscriptionTracker.js +132 -0
- package/build/esm/utils/SubscriptionTracker.js.map +1 -0
- package/build/esm/utils/UnusedFieldAnalyzer.js +186 -0
- package/build/esm/utils/UnusedFieldAnalyzer.js.map +1 -0
- package/build/esm/utils/WaterfallDetector.js +200 -0
- package/build/esm/utils/WaterfallDetector.js.map +1 -0
- package/build/esm/utils/computePayload.js +37 -0
- package/build/esm/utils/computePayload.js.map +1 -0
- package/build/esm/utils/computeRequest.js +29 -0
- package/build/esm/utils/computeRequest.js.map +1 -0
- package/build/esm/utils/format.js +69 -0
- package/build/esm/utils/format.js.map +1 -0
- package/build/esm/utils/logger.js +31 -0
- package/build/esm/utils/logger.js.map +1 -0
- package/build/esm/vite/constants.js +18 -0
- package/build/esm/vite/constants.js.map +1 -0
- package/build/esm/vite/hookInstaller.js +99 -0
- package/build/esm/vite/hookInstaller.js.map +1 -0
- package/build/esm/vite/index.js +77 -0
- package/build/esm/vite/index.js.map +1 -0
- package/build/types/DevToolsContext.d.ts +3 -0
- package/build/types/DevToolsContext.d.ts.map +1 -0
- package/build/types/components/ActionMetrics.d.ts +6 -0
- package/build/types/components/ActionMetrics.d.ts.map +1 -0
- package/build/types/components/BubbleChart.d.ts +10 -0
- package/build/types/components/BubbleChart.d.ts.map +1 -0
- package/build/types/components/CacheInspectorTab.d.ts +6 -0
- package/build/types/components/CacheInspectorTab.d.ts.map +1 -0
- package/build/types/components/CacheMetrics.d.ts +6 -0
- package/build/types/components/CacheMetrics.d.ts.map +1 -0
- package/build/types/components/ComponentCard.d.ts +13 -0
- package/build/types/components/ComponentCard.d.ts.map +1 -0
- package/build/types/components/ComputeTab.d.ts +6 -0
- package/build/types/components/ComputeTab.d.ts.map +1 -0
- package/build/types/components/CopyableCodeBlock.d.ts +7 -0
- package/build/types/components/CopyableCodeBlock.d.ts.map +1 -0
- package/build/types/components/DebuggingTab.d.ts +6 -0
- package/build/types/components/DebuggingTab.d.ts.map +1 -0
- package/build/types/components/HookRow.d.ts +9 -0
- package/build/types/components/HookRow.d.ts.map +1 -0
- package/build/types/components/ImprovementsTab.d.ts +7 -0
- package/build/types/components/ImprovementsTab.d.ts.map +1 -0
- package/build/types/components/InspectorSelectionHeader.d.ts +12 -0
- package/build/types/components/InspectorSelectionHeader.d.ts.map +1 -0
- package/build/types/components/InterceptTab.d.ts +126 -0
- package/build/types/components/InterceptTab.d.ts.map +1 -0
- package/build/types/components/IssueCard.d.ts +8 -0
- package/build/types/components/IssueCard.d.ts.map +1 -0
- package/build/types/components/LogEntryCard.d.ts +7 -0
- package/build/types/components/LogEntryCard.d.ts.map +1 -0
- package/build/types/components/MockEditor.d.ts +58 -0
- package/build/types/components/MockEditor.d.ts.map +1 -0
- package/build/types/components/MonitorErrorBoundary.d.ts +16 -0
- package/build/types/components/MonitorErrorBoundary.d.ts.map +1 -0
- package/build/types/components/MonitoringPanel.d.ts +8 -0
- package/build/types/components/MonitoringPanel.d.ts.map +1 -0
- package/build/types/components/ObjectLoadingMetrics.d.ts +7 -0
- package/build/types/components/ObjectLoadingMetrics.d.ts.map +1 -0
- package/build/types/components/OsdkAppErrorBoundary.d.ts +18 -0
- package/build/types/components/OsdkAppErrorBoundary.d.ts.map +1 -0
- package/build/types/components/OsdkDevTools.d.ts +2 -0
- package/build/types/components/OsdkDevTools.d.ts.map +1 -0
- package/build/types/components/OverrideEditor.d.ts +26 -0
- package/build/types/components/OverrideEditor.d.ts.map +1 -0
- package/build/types/components/PerformanceTab.d.ts +8 -0
- package/build/types/components/PerformanceTab.d.ts.map +1 -0
- package/build/types/components/PrimitiveSelectionPanel.d.ts +28 -0
- package/build/types/components/PrimitiveSelectionPanel.d.ts.map +1 -0
- package/build/types/components/issueTypes.d.ts +16 -0
- package/build/types/components/issueTypes.d.ts.map +1 -0
- package/build/types/components/resolveComponentName.d.ts +3 -0
- package/build/types/components/resolveComponentName.d.ts.map +1 -0
- package/build/types/components/testHelpers.d.ts +2 -0
- package/build/types/components/testHelpers.d.ts.map +1 -0
- package/build/types/css.d.d.ts +4 -0
- package/build/types/css.d.d.ts.map +1 -0
- package/build/types/fiber/DegradationNotice.d.ts +8 -0
- package/build/types/fiber/DegradationNotice.d.ts.map +1 -0
- package/build/types/fiber/DevtoolsHook.d.ts +7 -0
- package/build/types/fiber/DevtoolsHook.d.ts.map +1 -0
- package/build/types/fiber/FiberAccess.d.ts +2 -0
- package/build/types/fiber/FiberAccess.d.ts.map +1 -0
- package/build/types/fiber/FiberInspection.d.ts +6 -0
- package/build/types/fiber/FiberInspection.d.ts.map +1 -0
- package/build/types/fiber/FiberTags.d.ts +33 -0
- package/build/types/fiber/FiberTags.d.ts.map +1 -0
- package/build/types/fiber/HookStateInspector.d.ts +45 -0
- package/build/types/fiber/HookStateInspector.d.ts.map +1 -0
- package/build/types/fiber/SafeFiberOperation.d.ts +7 -0
- package/build/types/fiber/SafeFiberOperation.d.ts.map +1 -0
- package/build/types/fiber/capabilities.d.ts +38 -0
- package/build/types/fiber/capabilities.d.ts.map +1 -0
- package/build/types/fiber/traverseFiber.d.ts +5 -0
- package/build/types/fiber/traverseFiber.d.ts.map +1 -0
- package/build/types/fiber/types.d.ts +87 -0
- package/build/types/fiber/types.d.ts.map +1 -0
- package/build/types/fiber/validation.d.ts +10 -0
- package/build/types/fiber/validation.d.ts.map +1 -0
- package/build/types/hooks/createPollingStore.d.ts +5 -0
- package/build/types/hooks/createPollingStore.d.ts.map +1 -0
- package/build/types/hooks/useActiveComponents.d.ts +3 -0
- package/build/types/hooks/useActiveComponents.d.ts.map +1 -0
- package/build/types/hooks/useComponentRegistry.d.ts +3 -0
- package/build/types/hooks/useComponentRegistry.d.ts.map +1 -0
- package/build/types/hooks/useComputeSelectors.d.ts +7 -0
- package/build/types/hooks/useComputeSelectors.d.ts.map +1 -0
- package/build/types/hooks/useConsoleLogs.d.ts +7 -0
- package/build/types/hooks/useConsoleLogs.d.ts.map +1 -0
- package/build/types/hooks/useInspectorSelection.d.ts +9 -0
- package/build/types/hooks/useInspectorSelection.d.ts.map +1 -0
- package/build/types/hooks/useMetrics.d.ts +3 -0
- package/build/types/hooks/useMetrics.d.ts.map +1 -0
- package/build/types/hooks/usePersistedState.d.ts +1 -0
- package/build/types/hooks/usePersistedState.d.ts.map +1 -0
- package/build/types/hooks/useRecommendations.d.ts +10 -0
- package/build/types/hooks/useRecommendations.d.ts.map +1 -0
- package/build/types/hooks/useSharedTick.d.ts +1 -0
- package/build/types/hooks/useSharedTick.d.ts.map +1 -0
- package/build/types/hooks/useTimeElapsed.d.ts +1 -0
- package/build/types/hooks/useTimeElapsed.d.ts.map +1 -0
- package/build/types/hooks/useTrackerSubscription.d.ts +16 -0
- package/build/types/hooks/useTrackerSubscription.d.ts.map +1 -0
- package/build/types/hooks/useUnusedFieldAnalysis.d.ts +8 -0
- package/build/types/hooks/useUnusedFieldAnalysis.d.ts.map +1 -0
- package/build/types/index.d.ts +21 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/inspector/ClickToInspectSystem.d.ts +40 -0
- package/build/types/inspector/ClickToInspectSystem.d.ts.map +1 -0
- package/build/types/inspector/components/ComponentLabel.d.ts +3 -0
- package/build/types/inspector/components/ComponentLabel.d.ts.map +1 -0
- package/build/types/inspector/components/InspectorBanner.d.ts +5 -0
- package/build/types/inspector/components/InspectorBanner.d.ts.map +1 -0
- package/build/types/inspector/components/InspectorOverlay.d.ts +3 -0
- package/build/types/inspector/components/InspectorOverlay.d.ts.map +1 -0
- package/build/types/inspector/components/SelectionHighlight.d.ts +3 -0
- package/build/types/inspector/components/SelectionHighlight.d.ts.map +1 -0
- package/build/types/inspector/createClickToInspect.d.ts +3 -0
- package/build/types/inspector/createClickToInspect.d.ts.map +1 -0
- package/build/types/inspector/hooks/useAnimatedBounds.d.ts +2 -0
- package/build/types/inspector/hooks/useAnimatedBounds.d.ts.map +1 -0
- package/build/types/inspector/index.d.ts +13 -0
- package/build/types/inspector/index.d.ts.map +1 -0
- package/build/types/inspector/inspectorController.d.ts +2 -0
- package/build/types/inspector/inspectorController.d.ts.map +1 -0
- package/build/types/inspector/types.d.ts +94 -0
- package/build/types/inspector/types.d.ts.map +1 -0
- package/build/types/inspector/utils/elementBounds.d.ts +3 -0
- package/build/types/inspector/utils/elementBounds.d.ts.map +1 -0
- package/build/types/inspector/utils/interpolation.d.ts +7 -0
- package/build/types/inspector/utils/interpolation.d.ts.map +1 -0
- package/build/types/inspector/utils/labelPositioning.d.ts +3 -0
- package/build/types/inspector/utils/labelPositioning.d.ts.map +1 -0
- package/build/types/mocking/MockCacheKeyGenerator.d.ts +41 -0
- package/build/types/mocking/MockCacheKeyGenerator.d.ts.map +1 -0
- package/build/types/mocking/MockManager.d.ts +103 -0
- package/build/types/mocking/MockManager.d.ts.map +1 -0
- package/build/types/prototyping/PrototypeOverrideStore.d.ts +33 -0
- package/build/types/prototyping/PrototypeOverrideStore.d.ts.map +1 -0
- package/build/types/prototyping/index.d.ts +1 -0
- package/build/types/prototyping/index.d.ts.map +1 -0
- package/build/types/public/vite.d.ts +2 -0
- package/build/types/public/vite.d.ts.map +1 -0
- package/build/types/register.d.ts +1 -0
- package/build/types/register.d.ts.map +1 -0
- package/build/types/scss.d.d.ts +6 -0
- package/build/types/scss.d.d.ts.map +1 -0
- package/build/types/store/ComputeStore.d.ts +47 -0
- package/build/types/store/ComputeStore.d.ts.map +1 -0
- package/build/types/store/ConsoleLogStore.d.ts +29 -0
- package/build/types/store/ConsoleLogStore.d.ts.map +1 -0
- package/build/types/store/MetricsStore.d.ts +42 -0
- package/build/types/store/MetricsStore.d.ts.map +1 -0
- package/build/types/store/MonitorStore.d.ts +86 -0
- package/build/types/store/MonitorStore.d.ts.map +1 -0
- package/build/types/store/SubscribableStore.d.ts +6 -0
- package/build/types/store/SubscribableStore.d.ts.map +1 -0
- package/build/types/store/WindowErrorStore.d.ts +32 -0
- package/build/types/store/WindowErrorStore.d.ts.map +1 -0
- package/build/types/styles.d.ts +1 -0
- package/build/types/styles.d.ts.map +1 -0
- package/build/types/types/compute.d.ts +73 -0
- package/build/types/types/compute.d.ts.map +1 -0
- package/build/types/types/emissions.d.ts +24 -0
- package/build/types/types/emissions.d.ts.map +1 -0
- package/build/types/types/index.d.ts +143 -0
- package/build/types/types/index.d.ts.map +1 -0
- package/build/types/utils/ActionLifecycleTracker.d.ts +39 -0
- package/build/types/utils/ActionLifecycleTracker.d.ts.map +1 -0
- package/build/types/utils/CacheEfficiencyAnalyzer.d.ts +45 -0
- package/build/types/utils/CacheEfficiencyAnalyzer.d.ts.map +1 -0
- package/build/types/utils/CircularBuffer.d.ts +18 -0
- package/build/types/utils/CircularBuffer.d.ts.map +1 -0
- package/build/types/utils/ComponentContextCapture.d.ts +29 -0
- package/build/types/utils/ComponentContextCapture.d.ts.map +1 -0
- package/build/types/utils/ComponentPrimitiveDiscovery.d.ts +62 -0
- package/build/types/utils/ComponentPrimitiveDiscovery.d.ts.map +1 -0
- package/build/types/utils/ComponentQueryRegistry.d.ts +91 -0
- package/build/types/utils/ComponentQueryRegistry.d.ts.map +1 -0
- package/build/types/utils/ComputeMonitor.d.ts +14 -0
- package/build/types/utils/ComputeMonitor.d.ts.map +1 -0
- package/build/types/utils/EventTimeline.d.ts +102 -0
- package/build/types/utils/EventTimeline.d.ts.map +1 -0
- package/build/types/utils/LinkTraversalTracker.d.ts +43 -0
- package/build/types/utils/LinkTraversalTracker.d.ts.map +1 -0
- package/build/types/utils/MockDataGenerator.d.ts +23 -0
- package/build/types/utils/MockDataGenerator.d.ts.map +1 -0
- package/build/types/utils/ObservableClientMonitor.d.ts +62 -0
- package/build/types/utils/ObservableClientMonitor.d.ts.map +1 -0
- package/build/types/utils/PerformanceRecommendationEngine.d.ts +67 -0
- package/build/types/utils/PerformanceRecommendationEngine.d.ts.map +1 -0
- package/build/types/utils/PropertyAccessTracker.d.ts +50 -0
- package/build/types/utils/PropertyAccessTracker.d.ts.map +1 -0
- package/build/types/utils/RecommendationMatcher.d.ts +5 -0
- package/build/types/utils/RecommendationMatcher.d.ts.map +1 -0
- package/build/types/utils/SubscriptionTracker.d.ts +17 -0
- package/build/types/utils/SubscriptionTracker.d.ts.map +1 -0
- package/build/types/utils/UnusedFieldAnalyzer.d.ts +46 -0
- package/build/types/utils/UnusedFieldAnalyzer.d.ts.map +1 -0
- package/build/types/utils/WaterfallDetector.d.ts +28 -0
- package/build/types/utils/WaterfallDetector.d.ts.map +1 -0
- package/build/types/utils/computePayload.d.ts +3 -0
- package/build/types/utils/computePayload.d.ts.map +1 -0
- package/build/types/utils/computeRequest.d.ts +20 -0
- package/build/types/utils/computeRequest.d.ts.map +1 -0
- package/build/types/utils/format.d.ts +5 -0
- package/build/types/utils/format.d.ts.map +1 -0
- package/build/types/utils/logger.d.ts +2 -0
- package/build/types/utils/logger.d.ts.map +1 -0
- package/build/types/vite/constants.d.ts +1 -0
- package/build/types/vite/constants.d.ts.map +1 -0
- package/build/types/vite/hookInstaller.d.ts +1 -0
- package/build/types/vite/hookInstaller.d.ts.map +1 -0
- package/build/types/vite/index.d.ts +20 -0
- package/build/types/vite/index.d.ts.map +1 -0
- package/package.json +114 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { CircularBuffer } from "./CircularBuffer.js";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Union type for all monitoring events.
|
|
21
|
+
* Each event type has a timestamp for temporal correlation.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
export class EventTimeline {
|
|
25
|
+
eventCounts = new Map();
|
|
26
|
+
subscribers = new Set();
|
|
27
|
+
constructor(maxEvents = 10000) {
|
|
28
|
+
this.events = new CircularBuffer(maxEvents);
|
|
29
|
+
}
|
|
30
|
+
record(event) {
|
|
31
|
+
this.events.push(event);
|
|
32
|
+
|
|
33
|
+
// Track counts by type
|
|
34
|
+
this.eventCounts.set(event.type, (this.eventCounts.get(event.type) ?? 0) + 1);
|
|
35
|
+
|
|
36
|
+
// Notify subscribers
|
|
37
|
+
this.notifySubscribers(event);
|
|
38
|
+
}
|
|
39
|
+
findEventsInWindow(timestamp, windowMs, eventType) {
|
|
40
|
+
const allEvents = eventType ? this.getEventsByType(eventType) : this.events.toArray();
|
|
41
|
+
return allEvents.filter(e => Math.abs(e.timestamp - timestamp) <= windowMs);
|
|
42
|
+
}
|
|
43
|
+
findEventsBefore(timestamp, windowMs, eventType) {
|
|
44
|
+
const allEvents = eventType ? this.getEventsByType(eventType) : this.events.toArray();
|
|
45
|
+
return allEvents.filter(e => e.timestamp <= timestamp && timestamp - e.timestamp <= windowMs);
|
|
46
|
+
}
|
|
47
|
+
findRenderTrigger(renderEvent) {
|
|
48
|
+
const recentEmissions = this.getEventsByType("EMISSION").filter(e => e.timestamp <= renderEvent.timestamp && renderEvent.timestamp - e.timestamp <= 16);
|
|
49
|
+
if (recentEmissions.length === 0) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Return most recent emission (closest to render)
|
|
54
|
+
return recentEmissions.reduce((latest, current) => current.timestamp > latest.timestamp ? current : latest);
|
|
55
|
+
}
|
|
56
|
+
buildActionCausality(actionId) {
|
|
57
|
+
const allEvents = this.events.toArray();
|
|
58
|
+
const start = allEvents.find(e => e.type === "ACTION_START" && e.actionId === actionId);
|
|
59
|
+
const complete = allEvents.find(e => e.type === "ACTION_COMPLETE" && e.actionId === actionId);
|
|
60
|
+
if (!start) {
|
|
61
|
+
throw new Error(`Action start event not found for action ${actionId}`);
|
|
62
|
+
}
|
|
63
|
+
if (!complete) {
|
|
64
|
+
throw new Error(`Action complete event not found for action ${actionId}`);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Find all events between start and complete
|
|
68
|
+
const actionEvents = allEvents.filter(e => e.timestamp >= start.timestamp && e.timestamp <= complete.timestamp);
|
|
69
|
+
|
|
70
|
+
// Separate optimistic updates from refetches
|
|
71
|
+
const emissions = actionEvents.filter(e => e.type === "EMISSION");
|
|
72
|
+
const optimisticUpdates = emissions.filter(e => e.isOptimistic === true);
|
|
73
|
+
const refetches = emissions.filter(e => !e.isOptimistic);
|
|
74
|
+
|
|
75
|
+
// Find renders triggered during the action
|
|
76
|
+
const renders = actionEvents.filter(e => e.type === "RENDER");
|
|
77
|
+
return {
|
|
78
|
+
start,
|
|
79
|
+
complete,
|
|
80
|
+
optimisticUpdates,
|
|
81
|
+
refetches,
|
|
82
|
+
renders,
|
|
83
|
+
duration: complete.timestamp - start.timestamp
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
subscribe(callback) {
|
|
87
|
+
this.subscribers.add(callback);
|
|
88
|
+
return () => this.subscribers.delete(callback);
|
|
89
|
+
}
|
|
90
|
+
getEventsByType(type) {
|
|
91
|
+
return this.events.toArray().filter(e => e.type === type);
|
|
92
|
+
}
|
|
93
|
+
getAllEvents() {
|
|
94
|
+
return this.events.toArray();
|
|
95
|
+
}
|
|
96
|
+
getEventCounts() {
|
|
97
|
+
return new Map(this.eventCounts);
|
|
98
|
+
}
|
|
99
|
+
clear() {
|
|
100
|
+
this.events.clear();
|
|
101
|
+
this.eventCounts.clear();
|
|
102
|
+
}
|
|
103
|
+
getSize() {
|
|
104
|
+
return this.events.getSize();
|
|
105
|
+
}
|
|
106
|
+
notifySubscribers(event) {
|
|
107
|
+
for (const callback of this.subscribers) {
|
|
108
|
+
try {
|
|
109
|
+
callback(event);
|
|
110
|
+
} catch (e) {
|
|
111
|
+
// eslint-disable-next-line no-console
|
|
112
|
+
console.error("[EventTimeline] Subscriber error:", e);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
findLast(type, predicate) {
|
|
117
|
+
const arr = this.events.getLast(this.events.getSize());
|
|
118
|
+
for (let i = arr.length - 1; i >= 0; i--) {
|
|
119
|
+
const event = arr[i];
|
|
120
|
+
if (event.type === type && predicate(event)) {
|
|
121
|
+
return event;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
getLastEmission(subscriptionId) {
|
|
127
|
+
return this.findLast("EMISSION", e => e.subscriptionId === subscriptionId);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=EventTimeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventTimeline.js","names":["CircularBuffer","EventTimeline","eventCounts","Map","subscribers","Set","constructor","maxEvents","events","record","event","push","set","type","get","notifySubscribers","findEventsInWindow","timestamp","windowMs","eventType","allEvents","getEventsByType","toArray","filter","e","Math","abs","findEventsBefore","findRenderTrigger","renderEvent","recentEmissions","length","reduce","latest","current","buildActionCausality","actionId","start","find","complete","Error","actionEvents","emissions","optimisticUpdates","isOptimistic","refetches","renders","duration","subscribe","callback","add","delete","getAllEvents","getEventCounts","clear","getSize","console","error","findLast","predicate","arr","getLast","i","getLastEmission","subscriptionId"],"sources":["EventTimeline.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CircularBuffer } from \"./CircularBuffer.js\";\n\n/**\n * Union type for all monitoring events.\n * Each event type has a timestamp for temporal correlation.\n */\nexport type MonitorEvent =\n | RenderEvent\n | EmissionEvent\n | ActionStartEvent\n | ActionCompleteEvent\n | PropertyAccessEvent\n | LinkTraversalEvent\n | ObjectModifiedEvent\n | MockHitEvent\n | OsdkPauseBlockEvent;\n\nexport interface RenderEvent {\n type: \"RENDER\";\n componentId: string;\n componentName: string;\n duration: number;\n timestamp: number;\n renderCycle?: number;\n}\n\nexport interface EmissionEvent {\n type: \"EMISSION\";\n subscriptionId: string;\n objectKey?: string;\n timestamp: number;\n isOptimistic?: boolean;\n}\n\nexport interface ActionStartEvent {\n type: \"ACTION_START\";\n actionId: string;\n actionName: string;\n timestamp: number;\n componentId?: string;\n}\n\nexport interface ActionCompleteEvent {\n type: \"ACTION_COMPLETE\";\n actionId: string;\n timestamp: number;\n success: boolean;\n error?: string;\n}\n\nexport interface PropertyAccessEvent {\n type: \"PROPERTY_ACCESS\";\n componentId: string;\n objectKey: string;\n property: string;\n timestamp: number;\n renderCycle?: number;\n}\n\nexport interface LinkTraversalEvent {\n type: \"LINK_TRAVERSAL\";\n sourceKey: string;\n linkName: string;\n timestamp: number;\n componentId?: string;\n}\n\nexport interface ObjectModifiedEvent {\n type: \"OBJECT_MODIFIED\";\n actionId: string;\n objectType: string;\n primaryKey: string;\n modifiedBy: \"optimistic\" | \"server\";\n timestamp: number;\n}\n\nexport interface MockHitEvent {\n type: \"MOCK_HIT\";\n subscriptionId: string;\n timestamp: number;\n mockId?: string;\n}\n\nexport interface OsdkPauseBlockEvent {\n type: \"OSDK_PAUSE_BLOCK\";\n pathname: string;\n timestamp: number;\n}\n\nexport interface ActionCausality {\n start: ActionStartEvent;\n complete: ActionCompleteEvent;\n optimisticUpdates: EmissionEvent[];\n refetches: EmissionEvent[];\n renders: RenderEvent[];\n duration: number;\n}\n\nexport class EventTimeline {\n private events: CircularBuffer<MonitorEvent>;\n private eventCounts = new Map<MonitorEvent[\"type\"], number>();\n private subscribers = new Set<(event: MonitorEvent) => void>();\n\n constructor(maxEvents: number = 10000) {\n this.events = new CircularBuffer(maxEvents);\n }\n\n record(event: MonitorEvent): void {\n this.events.push(event);\n\n // Track counts by type\n this.eventCounts.set(\n event.type,\n (this.eventCounts.get(event.type) ?? 0) + 1,\n );\n\n // Notify subscribers\n this.notifySubscribers(event);\n }\n\n findEventsInWindow(\n timestamp: number,\n windowMs: number,\n eventType?: MonitorEvent[\"type\"],\n ): MonitorEvent[] {\n const allEvents = eventType\n ? this.getEventsByType(eventType)\n : this.events.toArray();\n\n return allEvents.filter((e) =>\n Math.abs(e.timestamp - timestamp) <= windowMs\n );\n }\n\n findEventsBefore(\n timestamp: number,\n windowMs: number,\n eventType?: MonitorEvent[\"type\"],\n ): MonitorEvent[] {\n const allEvents = eventType\n ? this.getEventsByType(eventType)\n : this.events.toArray();\n\n return allEvents.filter(\n (e) => e.timestamp <= timestamp && timestamp - e.timestamp <= windowMs,\n );\n }\n\n findRenderTrigger(renderEvent: RenderEvent): EmissionEvent | null {\n const CORRELATION_WINDOW = 16;\n\n const recentEmissions = this.getEventsByType(\"EMISSION\")\n .filter(e =>\n e.timestamp <= renderEvent.timestamp\n && renderEvent.timestamp - e.timestamp <= CORRELATION_WINDOW\n );\n\n if (recentEmissions.length === 0) {\n return null;\n }\n\n // Return most recent emission (closest to render)\n return recentEmissions.reduce((latest, current) =>\n current.timestamp > latest.timestamp ? current : latest\n );\n }\n\n buildActionCausality(actionId: string): ActionCausality {\n const allEvents = this.events.toArray();\n\n const start = allEvents.find(\n (e): e is ActionStartEvent =>\n e.type === \"ACTION_START\" && e.actionId === actionId,\n );\n\n const complete = allEvents.find(\n (e): e is ActionCompleteEvent =>\n e.type === \"ACTION_COMPLETE\" && e.actionId === actionId,\n );\n\n if (!start) {\n throw new Error(`Action start event not found for action ${actionId}`);\n }\n\n if (!complete) {\n throw new Error(`Action complete event not found for action ${actionId}`);\n }\n\n // Find all events between start and complete\n const actionEvents = allEvents.filter(\n (e) =>\n e.timestamp >= start.timestamp && e.timestamp <= complete.timestamp,\n );\n\n // Separate optimistic updates from refetches\n const emissions = actionEvents.filter(\n (e): e is EmissionEvent => e.type === \"EMISSION\",\n );\n const optimisticUpdates = emissions.filter((e) => e.isOptimistic === true);\n const refetches = emissions.filter((e) => !e.isOptimistic);\n\n // Find renders triggered during the action\n const renders = actionEvents.filter(\n (e): e is RenderEvent => e.type === \"RENDER\",\n );\n\n return {\n start,\n complete,\n optimisticUpdates,\n refetches,\n renders,\n duration: complete.timestamp - start.timestamp,\n };\n }\n\n subscribe(callback: (event: MonitorEvent) => void): () => void {\n this.subscribers.add(callback);\n return () => this.subscribers.delete(callback);\n }\n\n getEventsByType<T extends MonitorEvent[\"type\"]>(\n type: T,\n ): Extract<MonitorEvent, { type: T }>[] {\n return this.events.toArray().filter(\n (e): e is Extract<MonitorEvent, { type: T }> => e.type === type,\n );\n }\n\n getAllEvents(): MonitorEvent[] {\n return this.events.toArray();\n }\n\n getEventCounts(): Map<MonitorEvent[\"type\"], number> {\n return new Map(this.eventCounts);\n }\n\n clear(): void {\n this.events.clear();\n this.eventCounts.clear();\n }\n\n getSize(): number {\n return this.events.getSize();\n }\n\n private notifySubscribers(event: MonitorEvent): void {\n for (const callback of this.subscribers) {\n try {\n callback(event);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"[EventTimeline] Subscriber error:\", e);\n }\n }\n }\n\n findLast<T extends MonitorEvent[\"type\"]>(\n type: T,\n predicate: (event: Extract<MonitorEvent, { type: T }>) => boolean,\n ): Extract<MonitorEvent, { type: T }> | null {\n const arr = this.events.getLast(this.events.getSize());\n for (let i = arr.length - 1; i >= 0; i--) {\n const event = arr[i];\n if (\n event.type === type\n && predicate(event as Extract<MonitorEvent, { type: T }>)\n ) {\n return event as Extract<MonitorEvent, { type: T }>;\n }\n }\n return null;\n }\n\n getLastEmission(subscriptionId: string): EmissionEvent | null {\n return this.findLast(\n \"EMISSION\",\n (e) => e.subscriptionId === subscriptionId,\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export class LinkTraversalTracker {
|
|
18
|
+
traversals = [];
|
|
19
|
+
linkedObjects = new Map();
|
|
20
|
+
maxTraversals = 1000;
|
|
21
|
+
eventTimeline = null;
|
|
22
|
+
recordTraversal(event) {
|
|
23
|
+
this.traversals.push(event);
|
|
24
|
+
if (this.traversals.length > this.maxTraversals) {
|
|
25
|
+
const overflow = this.traversals.length - this.maxTraversals;
|
|
26
|
+
this.traversals.splice(0, overflow);
|
|
27
|
+
}
|
|
28
|
+
if (this.eventTimeline) {
|
|
29
|
+
this.eventTimeline.record({
|
|
30
|
+
type: "LINK_TRAVERSAL",
|
|
31
|
+
sourceKey: `${event.sourceObjectType}:${event.sourceObjectKey}`,
|
|
32
|
+
linkName: event.linkName,
|
|
33
|
+
timestamp: event.timestamp,
|
|
34
|
+
componentId: event.componentId
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
setEventTimeline(timeline) {
|
|
39
|
+
this.eventTimeline = timeline;
|
|
40
|
+
}
|
|
41
|
+
recordLinkedObjects(event) {
|
|
42
|
+
this.linkedObjects.set(event.subscriptionId, event);
|
|
43
|
+
}
|
|
44
|
+
getTraversalChain(sourceObjectKey) {
|
|
45
|
+
const chain = [];
|
|
46
|
+
const visited = new Set();
|
|
47
|
+
const buildChain = currentKey => {
|
|
48
|
+
if (visited.has(currentKey)) return;
|
|
49
|
+
visited.add(currentKey);
|
|
50
|
+
const traversal = this.traversals.find(t => `${t.sourceObjectType}:${t.sourceObjectKey}` === currentKey);
|
|
51
|
+
if (traversal) {
|
|
52
|
+
chain.push(traversal);
|
|
53
|
+
const linkedObjs = this.linkedObjects.get(traversal.subscriptionId);
|
|
54
|
+
if (linkedObjs) {
|
|
55
|
+
for (const obj of linkedObjs.objects) {
|
|
56
|
+
buildChain(`${obj.objectType}:${obj.primaryKey}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
buildChain(sourceObjectKey);
|
|
62
|
+
return chain;
|
|
63
|
+
}
|
|
64
|
+
findRedundantTraversals(windowMs = 5000) {
|
|
65
|
+
const now = Date.now();
|
|
66
|
+
const recent = this.traversals.filter(t => now - t.timestamp < windowMs);
|
|
67
|
+
const counts = new Map();
|
|
68
|
+
for (const traversal of recent) {
|
|
69
|
+
const key = `${traversal.sourceObjectKey}:${traversal.linkName}`;
|
|
70
|
+
const existing = counts.get(key) || {
|
|
71
|
+
count: 0,
|
|
72
|
+
componentIds: new Set()
|
|
73
|
+
};
|
|
74
|
+
existing.count++;
|
|
75
|
+
if (traversal.componentId) {
|
|
76
|
+
existing.componentIds.add(traversal.componentId);
|
|
77
|
+
}
|
|
78
|
+
counts.set(key, existing);
|
|
79
|
+
}
|
|
80
|
+
return Array.from(counts.entries()).filter(([_, data]) => data.count > 1).map(([linkKey, data]) => ({
|
|
81
|
+
linkKey,
|
|
82
|
+
...data
|
|
83
|
+
})).sort((a, b) => b.count - a.count);
|
|
84
|
+
}
|
|
85
|
+
getRecentTraversals(limit = 50) {
|
|
86
|
+
return this.traversals.slice(-limit);
|
|
87
|
+
}
|
|
88
|
+
getTraversalsByComponent(componentId) {
|
|
89
|
+
return this.traversals.filter(t => t.componentId === componentId);
|
|
90
|
+
}
|
|
91
|
+
getTraversalsByLink(linkName) {
|
|
92
|
+
return this.traversals.filter(t => t.linkName === linkName);
|
|
93
|
+
}
|
|
94
|
+
clear() {
|
|
95
|
+
this.traversals = [];
|
|
96
|
+
this.linkedObjects.clear();
|
|
97
|
+
}
|
|
98
|
+
getStats() {
|
|
99
|
+
const linkCounts = new Map();
|
|
100
|
+
const componentCounts = new Map();
|
|
101
|
+
for (const traversal of this.traversals) {
|
|
102
|
+
linkCounts.set(traversal.linkName, (linkCounts.get(traversal.linkName) || 0) + 1);
|
|
103
|
+
if (traversal.componentId) {
|
|
104
|
+
componentCounts.set(traversal.componentId, (componentCounts.get(traversal.componentId) || 0) + 1);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
totalTraversals: this.traversals.length,
|
|
109
|
+
uniqueLinks: linkCounts.size,
|
|
110
|
+
uniqueComponents: componentCounts.size,
|
|
111
|
+
mostUsedLinks: Array.from(linkCounts.entries()).sort((a, b) => b[1] - a[1]).slice(0, 5),
|
|
112
|
+
linkedObjectsTracked: this.linkedObjects.size
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=LinkTraversalTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkTraversalTracker.js","names":["LinkTraversalTracker","traversals","linkedObjects","Map","maxTraversals","eventTimeline","recordTraversal","event","push","length","overflow","splice","record","type","sourceKey","sourceObjectType","sourceObjectKey","linkName","timestamp","componentId","setEventTimeline","timeline","recordLinkedObjects","set","subscriptionId","getTraversalChain","chain","visited","Set","buildChain","currentKey","has","add","traversal","find","t","linkedObjs","get","obj","objects","objectType","primaryKey","findRedundantTraversals","windowMs","now","Date","recent","filter","counts","key","existing","count","componentIds","Array","from","entries","_","data","map","linkKey","sort","a","b","getRecentTraversals","limit","slice","getTraversalsByComponent","getTraversalsByLink","clear","getStats","linkCounts","componentCounts","totalTraversals","uniqueLinks","size","uniqueComponents","mostUsedLinks","linkedObjectsTracked"],"sources":["LinkTraversalTracker.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { EventTimeline } from \"./EventTimeline.js\";\n\nexport interface LinkTraversalEvent {\n sourceObjectType: string;\n sourceObjectKey: string;\n linkName: string;\n timestamp: number;\n componentId?: string;\n subscriptionId: string;\n}\n\nexport interface LinkedObjectsEvent {\n subscriptionId: string;\n linkName: string;\n objects: Array<{ objectType: string; primaryKey: string }>;\n}\n\nexport class LinkTraversalTracker {\n private traversals: LinkTraversalEvent[] = [];\n private linkedObjects = new Map<string, LinkedObjectsEvent>();\n private maxTraversals = 1000;\n private eventTimeline: EventTimeline | null = null;\n\n recordTraversal(event: LinkTraversalEvent): void {\n this.traversals.push(event);\n\n if (this.traversals.length > this.maxTraversals) {\n const overflow = this.traversals.length - this.maxTraversals;\n this.traversals.splice(0, overflow);\n }\n\n if (this.eventTimeline) {\n this.eventTimeline.record({\n type: \"LINK_TRAVERSAL\",\n sourceKey: `${event.sourceObjectType}:${event.sourceObjectKey}`,\n linkName: event.linkName,\n timestamp: event.timestamp,\n componentId: event.componentId,\n });\n }\n }\n\n setEventTimeline(timeline: EventTimeline | null): void {\n this.eventTimeline = timeline;\n }\n\n recordLinkedObjects(event: LinkedObjectsEvent): void {\n this.linkedObjects.set(event.subscriptionId, event);\n }\n\n getTraversalChain(sourceObjectKey: string): LinkTraversalEvent[] {\n const chain: LinkTraversalEvent[] = [];\n const visited = new Set<string>();\n\n const buildChain = (currentKey: string) => {\n if (visited.has(currentKey)) return;\n visited.add(currentKey);\n\n const traversal = this.traversals.find(\n (t) => `${t.sourceObjectType}:${t.sourceObjectKey}` === currentKey,\n );\n\n if (traversal) {\n chain.push(traversal);\n\n const linkedObjs = this.linkedObjects.get(traversal.subscriptionId);\n if (linkedObjs) {\n for (const obj of linkedObjs.objects) {\n buildChain(`${obj.objectType}:${obj.primaryKey}`);\n }\n }\n }\n };\n\n buildChain(sourceObjectKey);\n return chain;\n }\n\n findRedundantTraversals(\n windowMs: number = 5000,\n ): Array<{\n linkKey: string;\n count: number;\n componentIds: Set<string>;\n }> {\n const now = Date.now();\n const recent = this.traversals.filter((t) => now - t.timestamp < windowMs);\n\n const counts = new Map<\n string,\n { count: number; componentIds: Set<string> }\n >();\n\n for (const traversal of recent) {\n const key = `${traversal.sourceObjectKey}:${traversal.linkName}`;\n const existing = counts.get(key) || {\n count: 0,\n componentIds: new Set(),\n };\n\n existing.count++;\n if (traversal.componentId) {\n existing.componentIds.add(traversal.componentId);\n }\n\n counts.set(key, existing);\n }\n\n return Array.from(counts.entries())\n .filter(([_, data]) => data.count > 1)\n .map(([linkKey, data]) => ({ linkKey, ...data }))\n .sort((a, b) => b.count - a.count);\n }\n\n getRecentTraversals(limit: number = 50): LinkTraversalEvent[] {\n return this.traversals.slice(-limit);\n }\n\n getTraversalsByComponent(componentId: string): LinkTraversalEvent[] {\n return this.traversals.filter((t) => t.componentId === componentId);\n }\n\n getTraversalsByLink(linkName: string): LinkTraversalEvent[] {\n return this.traversals.filter((t) => t.linkName === linkName);\n }\n\n clear(): void {\n this.traversals = [];\n this.linkedObjects.clear();\n }\n\n getStats(): {\n totalTraversals: number;\n uniqueLinks: number;\n uniqueComponents: number;\n mostUsedLinks: Array<[string, number]>;\n linkedObjectsTracked: number;\n } {\n const linkCounts = new Map<string, number>();\n const componentCounts = new Map<string, number>();\n\n for (const traversal of this.traversals) {\n linkCounts.set(\n traversal.linkName,\n (linkCounts.get(traversal.linkName) || 0) + 1,\n );\n\n if (traversal.componentId) {\n componentCounts.set(\n traversal.componentId,\n (componentCounts.get(traversal.componentId) || 0) + 1,\n );\n }\n }\n\n return {\n totalTraversals: this.traversals.length,\n uniqueLinks: linkCounts.size,\n uniqueComponents: componentCounts.size,\n mostUsedLinks: Array.from(linkCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5),\n linkedObjectsTracked: this.linkedObjects.size,\n };\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmBA,OAAO,MAAMA,oBAAoB,CAAC;EACxBC,UAAU,GAAyB,EAAE;EACrCC,aAAa,GAAG,IAAIC,GAAG,CAA6B,CAAC;EACrDC,aAAa,GAAG,IAAI;EACpBC,aAAa,GAAyB,IAAI;EAElDC,eAAeA,CAACC,KAAyB,EAAQ;IAC/C,IAAI,CAACN,UAAU,CAACO,IAAI,CAACD,KAAK,CAAC;IAE3B,IAAI,IAAI,CAACN,UAAU,CAACQ,MAAM,GAAG,IAAI,CAACL,aAAa,EAAE;MAC/C,MAAMM,QAAQ,GAAG,IAAI,CAACT,UAAU,CAACQ,MAAM,GAAG,IAAI,CAACL,aAAa;MAC5D,IAAI,CAACH,UAAU,CAACU,MAAM,CAAC,CAAC,EAAED,QAAQ,CAAC;IACrC;IAEA,IAAI,IAAI,CAACL,aAAa,EAAE;MACtB,IAAI,CAACA,aAAa,CAACO,MAAM,CAAC;QACxBC,IAAI,EAAE,gBAAgB;QACtBC,SAAS,EAAE,GAAGP,KAAK,CAACQ,gBAAgB,IAAIR,KAAK,CAACS,eAAe,EAAE;QAC/DC,QAAQ,EAAEV,KAAK,CAACU,QAAQ;QACxBC,SAAS,EAAEX,KAAK,CAACW,SAAS;QAC1BC,WAAW,EAAEZ,KAAK,CAACY;MACrB,CAAC,CAAC;IACJ;EACF;EAEAC,gBAAgBA,CAACC,QAA8B,EAAQ;IACrD,IAAI,CAAChB,aAAa,GAAGgB,QAAQ;EAC/B;EAEAC,mBAAmBA,CAACf,KAAyB,EAAQ;IACnD,IAAI,CAACL,aAAa,CAACqB,GAAG,CAAChB,KAAK,CAACiB,cAAc,EAAEjB,KAAK,CAAC;EACrD;EAEAkB,iBAAiBA,CAACT,eAAuB,EAAwB;IAC/D,MAAMU,KAA2B,GAAG,EAAE;IACtC,MAAMC,OAAO,GAAG,IAAIC,GAAG,CAAS,CAAC;IAEjC,MAAMC,UAAU,GAAIC,UAAkB,IAAK;MACzC,IAAIH,OAAO,CAACI,GAAG,CAACD,UAAU,CAAC,EAAE;MAC7BH,OAAO,CAACK,GAAG,CAACF,UAAU,CAAC;MAEvB,MAAMG,SAAS,GAAG,IAAI,CAAChC,UAAU,CAACiC,IAAI,CACnCC,CAAC,IAAK,GAAGA,CAAC,CAACpB,gBAAgB,IAAIoB,CAAC,CAACnB,eAAe,EAAE,KAAKc,UAC1D,CAAC;MAED,IAAIG,SAAS,EAAE;QACbP,KAAK,CAAClB,IAAI,CAACyB,SAAS,CAAC;QAErB,MAAMG,UAAU,GAAG,IAAI,CAAClC,aAAa,CAACmC,GAAG,CAACJ,SAAS,CAACT,cAAc,CAAC;QACnE,IAAIY,UAAU,EAAE;UACd,KAAK,MAAME,GAAG,IAAIF,UAAU,CAACG,OAAO,EAAE;YACpCV,UAAU,CAAC,GAAGS,GAAG,CAACE,UAAU,IAAIF,GAAG,CAACG,UAAU,EAAE,CAAC;UACnD;QACF;MACF;IACF,CAAC;IAEDZ,UAAU,CAACb,eAAe,CAAC;IAC3B,OAAOU,KAAK;EACd;EAEAgB,uBAAuBA,CACrBC,QAAgB,GAAG,IAAI,EAKtB;IACD,MAAMC,GAAG,GAAGC,IAAI,CAACD,GAAG,CAAC,CAAC;IACtB,MAAME,MAAM,GAAG,IAAI,CAAC7C,UAAU,CAAC8C,MAAM,CAAEZ,CAAC,IAAKS,GAAG,GAAGT,CAAC,CAACjB,SAAS,GAAGyB,QAAQ,CAAC;IAE1E,MAAMK,MAAM,GAAG,IAAI7C,GAAG,CAGpB,CAAC;IAEH,KAAK,MAAM8B,SAAS,IAAIa,MAAM,EAAE;MAC9B,MAAMG,GAAG,GAAG,GAAGhB,SAAS,CAACjB,eAAe,IAAIiB,SAAS,CAAChB,QAAQ,EAAE;MAChE,MAAMiC,QAAQ,GAAGF,MAAM,CAACX,GAAG,CAACY,GAAG,CAAC,IAAI;QAClCE,KAAK,EAAE,CAAC;QACRC,YAAY,EAAE,IAAIxB,GAAG,CAAC;MACxB,CAAC;MAEDsB,QAAQ,CAACC,KAAK,EAAE;MAChB,IAAIlB,SAAS,CAACd,WAAW,EAAE;QACzB+B,QAAQ,CAACE,YAAY,CAACpB,GAAG,CAACC,SAAS,CAACd,WAAW,CAAC;MAClD;MAEA6B,MAAM,CAACzB,GAAG,CAAC0B,GAAG,EAAEC,QAAQ,CAAC;IAC3B;IAEA,OAAOG,KAAK,CAACC,IAAI,CAACN,MAAM,CAACO,OAAO,CAAC,CAAC,CAAC,CAChCR,MAAM,CAAC,CAAC,CAACS,CAAC,EAAEC,IAAI,CAAC,KAAKA,IAAI,CAACN,KAAK,GAAG,CAAC,CAAC,CACrCO,GAAG,CAAC,CAAC,CAACC,OAAO,EAAEF,IAAI,CAAC,MAAM;MAAEE,OAAO;MAAE,GAAGF;IAAK,CAAC,CAAC,CAAC,CAChDG,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACX,KAAK,GAAGU,CAAC,CAACV,KAAK,CAAC;EACtC;EAEAY,mBAAmBA,CAACC,KAAa,GAAG,EAAE,EAAwB;IAC5D,OAAO,IAAI,CAAC/D,UAAU,CAACgE,KAAK,CAAC,CAACD,KAAK,CAAC;EACtC;EAEAE,wBAAwBA,CAAC/C,WAAmB,EAAwB;IAClE,OAAO,IAAI,CAAClB,UAAU,CAAC8C,MAAM,CAAEZ,CAAC,IAAKA,CAAC,CAAChB,WAAW,KAAKA,WAAW,CAAC;EACrE;EAEAgD,mBAAmBA,CAAClD,QAAgB,EAAwB;IAC1D,OAAO,IAAI,CAAChB,UAAU,CAAC8C,MAAM,CAAEZ,CAAC,IAAKA,CAAC,CAAClB,QAAQ,KAAKA,QAAQ,CAAC;EAC/D;EAEAmD,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACnE,UAAU,GAAG,EAAE;IACpB,IAAI,CAACC,aAAa,CAACkE,KAAK,CAAC,CAAC;EAC5B;EAEAC,QAAQA,CAAA,EAMN;IACA,MAAMC,UAAU,GAAG,IAAInE,GAAG,CAAiB,CAAC;IAC5C,MAAMoE,eAAe,GAAG,IAAIpE,GAAG,CAAiB,CAAC;IAEjD,KAAK,MAAM8B,SAAS,IAAI,IAAI,CAAChC,UAAU,EAAE;MACvCqE,UAAU,CAAC/C,GAAG,CACZU,SAAS,CAAChB,QAAQ,EAClB,CAACqD,UAAU,CAACjC,GAAG,CAACJ,SAAS,CAAChB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAC9C,CAAC;MAED,IAAIgB,SAAS,CAACd,WAAW,EAAE;QACzBoD,eAAe,CAAChD,GAAG,CACjBU,SAAS,CAACd,WAAW,EACrB,CAACoD,eAAe,CAAClC,GAAG,CAACJ,SAAS,CAACd,WAAW,CAAC,IAAI,CAAC,IAAI,CACtD,CAAC;MACH;IACF;IAEA,OAAO;MACLqD,eAAe,EAAE,IAAI,CAACvE,UAAU,CAACQ,MAAM;MACvCgE,WAAW,EAAEH,UAAU,CAACI,IAAI;MAC5BC,gBAAgB,EAAEJ,eAAe,CAACG,IAAI;MACtCE,aAAa,EAAEvB,KAAK,CAACC,IAAI,CAACgB,UAAU,CAACf,OAAO,CAAC,CAAC,CAAC,CAC5CK,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC,CAAC,CAAC,GAAGD,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3BI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;MACdY,oBAAoB,EAAE,IAAI,CAAC3E,aAAa,CAACwE;IAC3C,CAAC;EACH;AACF","ignoreList":[]}
|