@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,288 @@
|
|
|
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 { createClient } from "@osdk/client";
|
|
18
|
+
import { createObservableClient } from "@osdk/client/observable";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Configuration for creating a monitored OSDK client.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { onCommitFiberRoot } from "../fiber/DevtoolsHook.js";
|
|
25
|
+
import { discoverOsdkComponentsFromRoot } from "../fiber/HookStateInspector.js";
|
|
26
|
+
import { createClickToInspect } from "../inspector/createClickToInspect.js";
|
|
27
|
+
import { MockManager } from "../mocking/MockManager.js";
|
|
28
|
+
import { PrototypeOverrideStore } from "../prototyping/PrototypeOverrideStore.js";
|
|
29
|
+
import { DEFAULT_MONITOR_CONFIG } from "../types/index.js";
|
|
30
|
+
import { componentContextCapture } from "../utils/ComponentContextCapture.js";
|
|
31
|
+
import { ComponentPrimitiveDiscovery } from "../utils/ComponentPrimitiveDiscovery.js";
|
|
32
|
+
import { ComponentQueryRegistry } from "../utils/ComponentQueryRegistry.js";
|
|
33
|
+
import { ComputeMonitor } from "../utils/ComputeMonitor.js";
|
|
34
|
+
import { EventTimeline } from "../utils/EventTimeline.js";
|
|
35
|
+
import { LinkTraversalTracker } from "../utils/LinkTraversalTracker.js";
|
|
36
|
+
import { createMonitorLogger } from "../utils/logger.js";
|
|
37
|
+
import { ObservableClientMonitor } from "../utils/ObservableClientMonitor.js";
|
|
38
|
+
import { PerformanceRecommendationEngine } from "../utils/PerformanceRecommendationEngine.js";
|
|
39
|
+
import { PropertyAccessTracker } from "../utils/PropertyAccessTracker.js";
|
|
40
|
+
import { ComputeStore } from "./ComputeStore.js";
|
|
41
|
+
import { ConsoleLogStore } from "./ConsoleLogStore.js";
|
|
42
|
+
import { MetricsStore } from "./MetricsStore.js";
|
|
43
|
+
import { WindowErrorStore } from "./WindowErrorStore.js";
|
|
44
|
+
const monitorStoreMap = new WeakMap();
|
|
45
|
+
export function getMonitorStore(client) {
|
|
46
|
+
return monitorStoreMap.get(client);
|
|
47
|
+
}
|
|
48
|
+
export class MonitorStore {
|
|
49
|
+
monitor = null;
|
|
50
|
+
originalGlobalFetch = null;
|
|
51
|
+
interceptedGlobalFetch = null;
|
|
52
|
+
unsubscribeFiberCommit = null;
|
|
53
|
+
constructor(config = {}) {
|
|
54
|
+
this.config = {
|
|
55
|
+
...DEFAULT_MONITOR_CONFIG,
|
|
56
|
+
...config
|
|
57
|
+
};
|
|
58
|
+
this.logger = config.logger ?? createMonitorLogger();
|
|
59
|
+
this.metricsStore = new MetricsStore(this.config.maxOperations, this.config.timeSeriesSize);
|
|
60
|
+
this.computeStore = new ComputeStore();
|
|
61
|
+
this.componentRegistry = new ComponentQueryRegistry();
|
|
62
|
+
this.linkTraversalTracker = new LinkTraversalTracker();
|
|
63
|
+
this.propertyAccessTracker = new PropertyAccessTracker();
|
|
64
|
+
this.eventTimeline = new EventTimeline(10000);
|
|
65
|
+
this.computeMonitor = new ComputeMonitor(this.computeStore, this.logger, undefined, this.eventTimeline);
|
|
66
|
+
this.primitiveDiscovery = new ComponentPrimitiveDiscovery(this.componentRegistry);
|
|
67
|
+
this.clickToInspect = createClickToInspect({
|
|
68
|
+
onSelect: component => {
|
|
69
|
+
const fiber = component.fiber.deref();
|
|
70
|
+
if (!fiber) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const primitives = this.primitiveDiscovery.discoverPrimitives(fiber);
|
|
74
|
+
window.dispatchEvent(new CustomEvent("primitives-discovered", {
|
|
75
|
+
detail: {
|
|
76
|
+
componentId: primitives.componentId,
|
|
77
|
+
primitives
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
},
|
|
81
|
+
onDeactivate: () => {
|
|
82
|
+
window.dispatchEvent(new CustomEvent("inspector-deactivated"));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
this.mockManager = new MockManager();
|
|
86
|
+
this.prototypeOverrideStore = new PrototypeOverrideStore();
|
|
87
|
+
this.consoleLogStore = new ConsoleLogStore(1000);
|
|
88
|
+
this.consoleLogStore.install();
|
|
89
|
+
this.windowErrorStore = new WindowErrorStore(1000);
|
|
90
|
+
this.windowErrorStore.install();
|
|
91
|
+
this.recommendationEngine = new PerformanceRecommendationEngine(this.metricsStore, this.componentRegistry, this.eventTimeline);
|
|
92
|
+
this.propertyAccessTracker.setEventTimeline(this.eventTimeline);
|
|
93
|
+
this.linkTraversalTracker.setEventTimeline(this.eventTimeline);
|
|
94
|
+
this.installGlobalFetchInterceptor();
|
|
95
|
+
if (typeof window !== "undefined") {
|
|
96
|
+
window.__OSDK_MONITOR__ = {
|
|
97
|
+
componentRegistry: this.componentRegistry,
|
|
98
|
+
componentContextCapture,
|
|
99
|
+
prototypeOverrideStore: this.prototypeOverrideStore
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
this.unsubscribeFiberCommit = onCommitFiberRoot((_rendererId, root) => {
|
|
103
|
+
const discovered = discoverOsdkComponentsFromRoot(root);
|
|
104
|
+
if (discovered.size > 0) {
|
|
105
|
+
this.componentRegistry.updateFromFiberDiscovery(discovered);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
createMonitoredClient(config) {
|
|
110
|
+
const interceptedFetch = this.computeMonitor.createInterceptedFetch();
|
|
111
|
+
const client = createClient(config.baseUrl, config.ontologyRid, config.auth, {
|
|
112
|
+
logger: config.logger,
|
|
113
|
+
UNSTABLE_DO_NOT_USE_BRANCH: config.branch
|
|
114
|
+
}, interceptedFetch);
|
|
115
|
+
const observableClient = createObservableClient(client);
|
|
116
|
+
const fullyWrappedClient = this.wrapWithMonitoring(observableClient);
|
|
117
|
+
return {
|
|
118
|
+
client,
|
|
119
|
+
observableClient: fullyWrappedClient
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
wrapExistingClient(client) {
|
|
123
|
+
this.installGlobalFetchInterceptor();
|
|
124
|
+
const fullyWrappedClient = this.wrapWithMonitoring(client);
|
|
125
|
+
monitorStoreMap.set(fullyWrappedClient, this);
|
|
126
|
+
return fullyWrappedClient;
|
|
127
|
+
}
|
|
128
|
+
wrapWithMonitoring(client) {
|
|
129
|
+
if (!this.monitor) {
|
|
130
|
+
this.monitor = new ObservableClientMonitor({
|
|
131
|
+
metricsStore: this.metricsStore,
|
|
132
|
+
componentRegistry: this.componentRegistry,
|
|
133
|
+
linkTraversalTracker: this.linkTraversalTracker,
|
|
134
|
+
propertyAccessTracker: this.propertyAccessTracker,
|
|
135
|
+
eventTimeline: this.eventTimeline,
|
|
136
|
+
captureComponentContext: true,
|
|
137
|
+
captureQueryParams: true,
|
|
138
|
+
cleanupIntervalMs: this.config.cleanupIntervalMs,
|
|
139
|
+
cacheThresholdMs: this.config.cacheDetectionThresholdMs,
|
|
140
|
+
mockManager: this.mockManager
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return this.monitor.wrapClient(client);
|
|
144
|
+
}
|
|
145
|
+
installGlobalFetchInterceptor() {
|
|
146
|
+
if (this.originalGlobalFetch != null) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
this.originalGlobalFetch = globalThis.fetch;
|
|
150
|
+
const interceptedFetch = this.computeMonitor.createInterceptedFetch();
|
|
151
|
+
this.interceptedGlobalFetch = interceptedFetch;
|
|
152
|
+
globalThis.fetch = interceptedFetch;
|
|
153
|
+
}
|
|
154
|
+
uninstallGlobalFetchInterceptor() {
|
|
155
|
+
if (this.originalGlobalFetch == null) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (globalThis.fetch === this.interceptedGlobalFetch) {
|
|
159
|
+
globalThis.fetch = this.originalGlobalFetch;
|
|
160
|
+
}
|
|
161
|
+
this.originalGlobalFetch = null;
|
|
162
|
+
this.interceptedGlobalFetch = null;
|
|
163
|
+
}
|
|
164
|
+
getMetricsStore() {
|
|
165
|
+
return this.metricsStore;
|
|
166
|
+
}
|
|
167
|
+
getComputeStore() {
|
|
168
|
+
return this.computeStore;
|
|
169
|
+
}
|
|
170
|
+
getComponentRegistry() {
|
|
171
|
+
return this.componentRegistry;
|
|
172
|
+
}
|
|
173
|
+
getLinkTraversalTracker() {
|
|
174
|
+
return this.linkTraversalTracker;
|
|
175
|
+
}
|
|
176
|
+
getPropertyAccessTracker() {
|
|
177
|
+
return this.propertyAccessTracker;
|
|
178
|
+
}
|
|
179
|
+
getMonitor() {
|
|
180
|
+
return this.monitor;
|
|
181
|
+
}
|
|
182
|
+
getEventTimeline() {
|
|
183
|
+
return this.eventTimeline;
|
|
184
|
+
}
|
|
185
|
+
getPrimitiveDiscovery() {
|
|
186
|
+
return this.primitiveDiscovery;
|
|
187
|
+
}
|
|
188
|
+
getClickToInspectSystem() {
|
|
189
|
+
return this.clickToInspect;
|
|
190
|
+
}
|
|
191
|
+
getMockManager() {
|
|
192
|
+
return this.mockManager;
|
|
193
|
+
}
|
|
194
|
+
getRecommendationEngine() {
|
|
195
|
+
return this.recommendationEngine;
|
|
196
|
+
}
|
|
197
|
+
getPrototypeOverrideStore() {
|
|
198
|
+
return this.prototypeOverrideStore;
|
|
199
|
+
}
|
|
200
|
+
getConsoleLogStore() {
|
|
201
|
+
return this.consoleLogStore;
|
|
202
|
+
}
|
|
203
|
+
getWindowErrorStore() {
|
|
204
|
+
return this.windowErrorStore;
|
|
205
|
+
}
|
|
206
|
+
dispose() {
|
|
207
|
+
this.unsubscribeFiberCommit?.();
|
|
208
|
+
this.unsubscribeFiberCommit = null;
|
|
209
|
+
this.uninstallGlobalFetchInterceptor();
|
|
210
|
+
if (typeof window !== "undefined") {
|
|
211
|
+
delete window.__OSDK_MONITOR__;
|
|
212
|
+
}
|
|
213
|
+
this.metricsStore.dispose();
|
|
214
|
+
this.computeStore.dispose();
|
|
215
|
+
this.componentRegistry.clear();
|
|
216
|
+
this.linkTraversalTracker.clear();
|
|
217
|
+
this.propertyAccessTracker.clear();
|
|
218
|
+
this.eventTimeline.clear();
|
|
219
|
+
this.clickToInspect.dispose();
|
|
220
|
+
this.consoleLogStore.dispose();
|
|
221
|
+
this.windowErrorStore.dispose();
|
|
222
|
+
this.mockManager.clear();
|
|
223
|
+
this.prototypeOverrideStore.clearAll();
|
|
224
|
+
this.monitor?.dispose();
|
|
225
|
+
this.monitor = null;
|
|
226
|
+
}
|
|
227
|
+
async loadCacheEntries() {
|
|
228
|
+
if (!this.monitor) {
|
|
229
|
+
return [];
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
const snapshot = await this.monitor.getCacheSnapshot();
|
|
233
|
+
return snapshot.entries;
|
|
234
|
+
} catch {
|
|
235
|
+
return [];
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/** @deprecated Use `loadCacheEntries()` — name was misleading because the method is async. */
|
|
240
|
+
getCacheEntries() {
|
|
241
|
+
return this.loadCacheEntries();
|
|
242
|
+
}
|
|
243
|
+
async getCacheSnapshot() {
|
|
244
|
+
if (!this.monitor) {
|
|
245
|
+
return {
|
|
246
|
+
entries: [],
|
|
247
|
+
stats: {
|
|
248
|
+
totalEntries: 0,
|
|
249
|
+
totalSize: 0,
|
|
250
|
+
totalHits: 0
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
try {
|
|
255
|
+
return await this.monitor.getCacheSnapshot();
|
|
256
|
+
} catch {
|
|
257
|
+
return {
|
|
258
|
+
entries: [],
|
|
259
|
+
stats: {
|
|
260
|
+
totalEntries: 0,
|
|
261
|
+
totalSize: 0,
|
|
262
|
+
totalHits: 0
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
async invalidateCacheEntry(entry) {
|
|
268
|
+
if (!this.monitor) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
if (entry.type === "object" && entry.data) {
|
|
273
|
+
await this.monitor.invalidateObjects(entry.data);
|
|
274
|
+
} else {
|
|
275
|
+
await this.monitor.invalidateObjectType(entry.objectType);
|
|
276
|
+
}
|
|
277
|
+
} catch {}
|
|
278
|
+
}
|
|
279
|
+
async clearCache() {
|
|
280
|
+
if (!this.monitor) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
await this.monitor.invalidateAll();
|
|
285
|
+
} catch {}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=MonitorStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonitorStore.js","names":["createClient","createObservableClient","onCommitFiberRoot","discoverOsdkComponentsFromRoot","createClickToInspect","MockManager","PrototypeOverrideStore","DEFAULT_MONITOR_CONFIG","componentContextCapture","ComponentPrimitiveDiscovery","ComponentQueryRegistry","ComputeMonitor","EventTimeline","LinkTraversalTracker","createMonitorLogger","ObservableClientMonitor","PerformanceRecommendationEngine","PropertyAccessTracker","ComputeStore","ConsoleLogStore","MetricsStore","WindowErrorStore","monitorStoreMap","WeakMap","getMonitorStore","client","get","MonitorStore","monitor","originalGlobalFetch","interceptedGlobalFetch","unsubscribeFiberCommit","constructor","config","logger","metricsStore","maxOperations","timeSeriesSize","computeStore","componentRegistry","linkTraversalTracker","propertyAccessTracker","eventTimeline","computeMonitor","undefined","primitiveDiscovery","clickToInspect","onSelect","component","fiber","deref","primitives","discoverPrimitives","window","dispatchEvent","CustomEvent","detail","componentId","onDeactivate","mockManager","prototypeOverrideStore","consoleLogStore","install","windowErrorStore","recommendationEngine","setEventTimeline","installGlobalFetchInterceptor","__OSDK_MONITOR__","_rendererId","root","discovered","size","updateFromFiberDiscovery","createMonitoredClient","interceptedFetch","createInterceptedFetch","baseUrl","ontologyRid","auth","UNSTABLE_DO_NOT_USE_BRANCH","branch","observableClient","fullyWrappedClient","wrapWithMonitoring","wrapExistingClient","set","captureComponentContext","captureQueryParams","cleanupIntervalMs","cacheThresholdMs","cacheDetectionThresholdMs","wrapClient","globalThis","fetch","uninstallGlobalFetchInterceptor","getMetricsStore","getComputeStore","getComponentRegistry","getLinkTraversalTracker","getPropertyAccessTracker","getMonitor","getEventTimeline","getPrimitiveDiscovery","getClickToInspectSystem","getMockManager","getRecommendationEngine","getPrototypeOverrideStore","getConsoleLogStore","getWindowErrorStore","dispose","clear","clearAll","loadCacheEntries","snapshot","getCacheSnapshot","entries","getCacheEntries","stats","totalEntries","totalSize","totalHits","invalidateCacheEntry","entry","type","data","invalidateObjects","invalidateObjectType","objectType","clearCache","invalidateAll"],"sources":["MonitorStore.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 { Logger } from \"@osdk/api\";\nimport { type Client, createClient } from \"@osdk/client\";\nimport {\n type CacheEntry,\n type CacheSnapshot,\n createObservableClient,\n type ObservableClient,\n} from \"@osdk/client/observable\";\n\n/**\n * Configuration for creating a monitored OSDK client.\n */\ninterface ClientConfig {\n baseUrl: string;\n ontologyRid: string | Promise<string>;\n auth: () => Promise<string>;\n logger?: Logger;\n branch?: string;\n}\nimport { onCommitFiberRoot } from \"../fiber/DevtoolsHook.js\";\nimport { discoverOsdkComponentsFromRoot } from \"../fiber/HookStateInspector.js\";\nimport type { ClickToInspectSystem } from \"../inspector/ClickToInspectSystem.js\";\nimport { createClickToInspect } from \"../inspector/createClickToInspect.js\";\nimport { MockManager } from \"../mocking/MockManager.js\";\nimport { PrototypeOverrideStore } from \"../prototyping/PrototypeOverrideStore.js\";\nimport {\n DEFAULT_MONITOR_CONFIG,\n type MonitoringConfig,\n} from \"../types/index.js\";\nimport { componentContextCapture } from \"../utils/ComponentContextCapture.js\";\nimport { ComponentPrimitiveDiscovery } from \"../utils/ComponentPrimitiveDiscovery.js\";\nimport { ComponentQueryRegistry } from \"../utils/ComponentQueryRegistry.js\";\nimport { ComputeMonitor } from \"../utils/ComputeMonitor.js\";\nimport { EventTimeline } from \"../utils/EventTimeline.js\";\nimport { LinkTraversalTracker } from \"../utils/LinkTraversalTracker.js\";\nimport { createMonitorLogger } from \"../utils/logger.js\";\nimport { ObservableClientMonitor } from \"../utils/ObservableClientMonitor.js\";\nimport { PerformanceRecommendationEngine } from \"../utils/PerformanceRecommendationEngine.js\";\nimport { PropertyAccessTracker } from \"../utils/PropertyAccessTracker.js\";\nimport { ComputeStore } from \"./ComputeStore.js\";\nimport { ConsoleLogStore } from \"./ConsoleLogStore.js\";\nimport { MetricsStore } from \"./MetricsStore.js\";\nimport { WindowErrorStore } from \"./WindowErrorStore.js\";\n\nconst monitorStoreMap = new WeakMap<object, MonitorStore>();\n\nexport function getMonitorStore(client: object): MonitorStore | undefined {\n return monitorStoreMap.get(client);\n}\n\nexport class MonitorStore {\n private readonly config: MonitoringConfig;\n private readonly logger: Logger;\n private readonly metricsStore: MetricsStore;\n private readonly computeStore: ComputeStore;\n private readonly computeMonitor: ComputeMonitor;\n private readonly componentRegistry: ComponentQueryRegistry;\n private readonly linkTraversalTracker: LinkTraversalTracker;\n private readonly propertyAccessTracker: PropertyAccessTracker;\n private readonly eventTimeline: EventTimeline;\n private readonly primitiveDiscovery: ComponentPrimitiveDiscovery;\n private readonly clickToInspect: ClickToInspectSystem;\n private readonly mockManager: MockManager;\n private readonly recommendationEngine: PerformanceRecommendationEngine;\n private readonly prototypeOverrideStore: PrototypeOverrideStore;\n private readonly consoleLogStore: ConsoleLogStore;\n private readonly windowErrorStore: WindowErrorStore;\n private monitor: ObservableClientMonitor | null = null;\n private originalGlobalFetch: typeof globalThis.fetch | null = null;\n private interceptedGlobalFetch: typeof globalThis.fetch | null = null;\n private unsubscribeFiberCommit: (() => void) | null = null;\n\n constructor(config: Partial<MonitoringConfig> = {}) {\n this.config = { ...DEFAULT_MONITOR_CONFIG, ...config };\n this.logger = config.logger ?? createMonitorLogger();\n this.metricsStore = new MetricsStore(\n this.config.maxOperations,\n this.config.timeSeriesSize,\n );\n this.computeStore = new ComputeStore();\n this.componentRegistry = new ComponentQueryRegistry();\n this.linkTraversalTracker = new LinkTraversalTracker();\n this.propertyAccessTracker = new PropertyAccessTracker();\n this.eventTimeline = new EventTimeline(10000);\n this.computeMonitor = new ComputeMonitor(\n this.computeStore,\n this.logger,\n undefined,\n this.eventTimeline,\n );\n this.primitiveDiscovery = new ComponentPrimitiveDiscovery(\n this.componentRegistry,\n );\n this.clickToInspect = createClickToInspect({\n onSelect: (component) => {\n const fiber = component.fiber.deref();\n if (!fiber) {\n return;\n }\n const primitives = this.primitiveDiscovery.discoverPrimitives(fiber);\n window.dispatchEvent(\n new CustomEvent(\"primitives-discovered\", {\n detail: {\n componentId: primitives.componentId,\n primitives,\n },\n }),\n );\n },\n onDeactivate: () => {\n window.dispatchEvent(new CustomEvent(\"inspector-deactivated\"));\n },\n });\n this.mockManager = new MockManager();\n this.prototypeOverrideStore = new PrototypeOverrideStore();\n this.consoleLogStore = new ConsoleLogStore(1000);\n this.consoleLogStore.install();\n this.windowErrorStore = new WindowErrorStore(1000);\n this.windowErrorStore.install();\n this.recommendationEngine = new PerformanceRecommendationEngine(\n this.metricsStore,\n this.componentRegistry,\n this.eventTimeline,\n );\n\n this.propertyAccessTracker.setEventTimeline(this.eventTimeline);\n this.linkTraversalTracker.setEventTimeline(this.eventTimeline);\n this.installGlobalFetchInterceptor();\n\n if (typeof window !== \"undefined\") {\n window.__OSDK_MONITOR__ = {\n componentRegistry: this.componentRegistry,\n componentContextCapture,\n prototypeOverrideStore: this.prototypeOverrideStore,\n };\n }\n\n this.unsubscribeFiberCommit = onCommitFiberRoot((_rendererId, root) => {\n const discovered = discoverOsdkComponentsFromRoot(root);\n if (discovered.size > 0) {\n this.componentRegistry.updateFromFiberDiscovery(discovered);\n }\n });\n }\n\n createMonitoredClient(config: ClientConfig): {\n client: Client;\n observableClient: ObservableClient;\n } {\n const interceptedFetch = this.computeMonitor.createInterceptedFetch();\n\n const client = createClient(\n config.baseUrl,\n config.ontologyRid,\n config.auth,\n {\n logger: config.logger,\n UNSTABLE_DO_NOT_USE_BRANCH: config.branch,\n },\n interceptedFetch,\n );\n\n const observableClient: ObservableClient = createObservableClient(\n client,\n );\n\n const fullyWrappedClient = this.wrapWithMonitoring(observableClient);\n\n return {\n client,\n observableClient: fullyWrappedClient,\n };\n }\n\n wrapExistingClient(client: ObservableClient): ObservableClient {\n this.installGlobalFetchInterceptor();\n\n const fullyWrappedClient = this.wrapWithMonitoring(client);\n monitorStoreMap.set(fullyWrappedClient, this);\n\n return fullyWrappedClient;\n }\n\n private wrapWithMonitoring(client: ObservableClient): ObservableClient {\n if (!this.monitor) {\n this.monitor = new ObservableClientMonitor({\n metricsStore: this.metricsStore,\n componentRegistry: this.componentRegistry,\n linkTraversalTracker: this.linkTraversalTracker,\n propertyAccessTracker: this.propertyAccessTracker,\n eventTimeline: this.eventTimeline,\n captureComponentContext: true,\n captureQueryParams: true,\n cleanupIntervalMs: this.config.cleanupIntervalMs,\n cacheThresholdMs: this.config.cacheDetectionThresholdMs,\n mockManager: this.mockManager,\n });\n }\n return this.monitor.wrapClient(client);\n }\n\n installGlobalFetchInterceptor(): void {\n if (this.originalGlobalFetch != null) {\n return;\n }\n\n this.originalGlobalFetch = globalThis.fetch;\n const interceptedFetch = this.computeMonitor.createInterceptedFetch();\n this.interceptedGlobalFetch = interceptedFetch;\n globalThis.fetch = interceptedFetch;\n }\n\n private uninstallGlobalFetchInterceptor(): void {\n if (this.originalGlobalFetch == null) {\n return;\n }\n\n if (globalThis.fetch === this.interceptedGlobalFetch) {\n globalThis.fetch = this.originalGlobalFetch;\n }\n\n this.originalGlobalFetch = null;\n this.interceptedGlobalFetch = null;\n }\n\n getMetricsStore(): MetricsStore {\n return this.metricsStore;\n }\n\n getComputeStore(): ComputeStore {\n return this.computeStore;\n }\n\n getComponentRegistry(): ComponentQueryRegistry {\n return this.componentRegistry;\n }\n\n getLinkTraversalTracker(): LinkTraversalTracker {\n return this.linkTraversalTracker;\n }\n\n getPropertyAccessTracker(): PropertyAccessTracker {\n return this.propertyAccessTracker;\n }\n\n getMonitor(): ObservableClientMonitor | null {\n return this.monitor;\n }\n\n getEventTimeline(): EventTimeline {\n return this.eventTimeline;\n }\n\n getPrimitiveDiscovery(): ComponentPrimitiveDiscovery {\n return this.primitiveDiscovery;\n }\n\n getClickToInspectSystem(): ClickToInspectSystem {\n return this.clickToInspect;\n }\n\n getMockManager(): MockManager {\n return this.mockManager;\n }\n\n getRecommendationEngine(): PerformanceRecommendationEngine {\n return this.recommendationEngine;\n }\n\n getPrototypeOverrideStore(): PrototypeOverrideStore {\n return this.prototypeOverrideStore;\n }\n\n getConsoleLogStore(): ConsoleLogStore {\n return this.consoleLogStore;\n }\n\n getWindowErrorStore(): WindowErrorStore {\n return this.windowErrorStore;\n }\n\n dispose(): void {\n this.unsubscribeFiberCommit?.();\n this.unsubscribeFiberCommit = null;\n this.uninstallGlobalFetchInterceptor();\n if (typeof window !== \"undefined\") {\n delete (window as unknown as Record<string, unknown>).__OSDK_MONITOR__;\n }\n this.metricsStore.dispose();\n this.computeStore.dispose();\n this.componentRegistry.clear();\n this.linkTraversalTracker.clear();\n this.propertyAccessTracker.clear();\n this.eventTimeline.clear();\n this.clickToInspect.dispose();\n this.consoleLogStore.dispose();\n this.windowErrorStore.dispose();\n this.mockManager.clear();\n this.prototypeOverrideStore.clearAll();\n this.monitor?.dispose();\n this.monitor = null;\n }\n\n async loadCacheEntries(): Promise<CacheEntry[]> {\n if (!this.monitor) {\n return [];\n }\n\n try {\n const snapshot = await this.monitor.getCacheSnapshot();\n return snapshot.entries;\n } catch {\n return [];\n }\n }\n\n /** @deprecated Use `loadCacheEntries()` — name was misleading because the method is async. */\n getCacheEntries(): Promise<CacheEntry[]> {\n return this.loadCacheEntries();\n }\n\n async getCacheSnapshot(): Promise<CacheSnapshot> {\n if (!this.monitor) {\n return {\n entries: [],\n stats: { totalEntries: 0, totalSize: 0, totalHits: 0 },\n };\n }\n\n try {\n return await this.monitor.getCacheSnapshot();\n } catch {\n return {\n entries: [],\n stats: { totalEntries: 0, totalSize: 0, totalHits: 0 },\n };\n }\n }\n\n async invalidateCacheEntry(entry: {\n type: \"object\" | \"list\" | \"link\" | \"objectSet\";\n objectType: string;\n data?: unknown;\n }): Promise<void> {\n if (!this.monitor) {\n return;\n }\n\n try {\n if (entry.type === \"object\" && entry.data) {\n await this.monitor.invalidateObjects(entry.data);\n } else {\n await this.monitor.invalidateObjectType(entry.objectType);\n }\n } catch {\n }\n }\n\n async clearCache(): Promise<void> {\n if (!this.monitor) {\n return;\n }\n\n try {\n await this.monitor.invalidateAll();\n } catch {\n }\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAAsBA,YAAY,QAAQ,cAAc;AACxD,SAGEC,sBAAsB,QAEjB,yBAAyB;;AAEhC;AACA;AACA;;AAQA,SAASC,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,8BAA8B,QAAQ,gCAAgC;AAE/E,SAASC,oBAAoB,QAAQ,sCAAsC;AAC3E,SAASC,WAAW,QAAQ,2BAA2B;AACvD,SAASC,sBAAsB,QAAQ,0CAA0C;AACjF,SACEC,sBAAsB,QAEjB,mBAAmB;AAC1B,SAASC,uBAAuB,QAAQ,qCAAqC;AAC7E,SAASC,2BAA2B,QAAQ,yCAAyC;AACrF,SAASC,sBAAsB,QAAQ,oCAAoC;AAC3E,SAASC,cAAc,QAAQ,4BAA4B;AAC3D,SAASC,aAAa,QAAQ,2BAA2B;AACzD,SAASC,oBAAoB,QAAQ,kCAAkC;AACvE,SAASC,mBAAmB,QAAQ,oBAAoB;AACxD,SAASC,uBAAuB,QAAQ,qCAAqC;AAC7E,SAASC,+BAA+B,QAAQ,6CAA6C;AAC7F,SAASC,qBAAqB,QAAQ,mCAAmC;AACzE,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,eAAe,QAAQ,sBAAsB;AACtD,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,gBAAgB,QAAQ,uBAAuB;AAExD,MAAMC,eAAe,GAAG,IAAIC,OAAO,CAAuB,CAAC;AAE3D,OAAO,SAASC,eAAeA,CAACC,MAAc,EAA4B;EACxE,OAAOH,eAAe,CAACI,GAAG,CAACD,MAAM,CAAC;AACpC;AAEA,OAAO,MAAME,YAAY,CAAC;EAiBhBC,OAAO,GAAmC,IAAI;EAC9CC,mBAAmB,GAAmC,IAAI;EAC1DC,sBAAsB,GAAmC,IAAI;EAC7DC,sBAAsB,GAAwB,IAAI;EAE1DC,WAAWA,CAACC,MAAiC,GAAG,CAAC,CAAC,EAAE;IAClD,IAAI,CAACA,MAAM,GAAG;MAAE,GAAG1B,sBAAsB;MAAE,GAAG0B;IAAO,CAAC;IACtD,IAAI,CAACC,MAAM,GAAGD,MAAM,CAACC,MAAM,IAAIpB,mBAAmB,CAAC,CAAC;IACpD,IAAI,CAACqB,YAAY,GAAG,IAAIf,YAAY,CAClC,IAAI,CAACa,MAAM,CAACG,aAAa,EACzB,IAAI,CAACH,MAAM,CAACI,cACd,CAAC;IACD,IAAI,CAACC,YAAY,GAAG,IAAIpB,YAAY,CAAC,CAAC;IACtC,IAAI,CAACqB,iBAAiB,GAAG,IAAI7B,sBAAsB,CAAC,CAAC;IACrD,IAAI,CAAC8B,oBAAoB,GAAG,IAAI3B,oBAAoB,CAAC,CAAC;IACtD,IAAI,CAAC4B,qBAAqB,GAAG,IAAIxB,qBAAqB,CAAC,CAAC;IACxD,IAAI,CAACyB,aAAa,GAAG,IAAI9B,aAAa,CAAC,KAAK,CAAC;IAC7C,IAAI,CAAC+B,cAAc,GAAG,IAAIhC,cAAc,CACtC,IAAI,CAAC2B,YAAY,EACjB,IAAI,CAACJ,MAAM,EACXU,SAAS,EACT,IAAI,CAACF,aACP,CAAC;IACD,IAAI,CAACG,kBAAkB,GAAG,IAAIpC,2BAA2B,CACvD,IAAI,CAAC8B,iBACP,CAAC;IACD,IAAI,CAACO,cAAc,GAAG1C,oBAAoB,CAAC;MACzC2C,QAAQ,EAAGC,SAAS,IAAK;QACvB,MAAMC,KAAK,GAAGD,SAAS,CAACC,KAAK,CAACC,KAAK,CAAC,CAAC;QACrC,IAAI,CAACD,KAAK,EAAE;UACV;QACF;QACA,MAAME,UAAU,GAAG,IAAI,CAACN,kBAAkB,CAACO,kBAAkB,CAACH,KAAK,CAAC;QACpEI,MAAM,CAACC,aAAa,CAClB,IAAIC,WAAW,CAAC,uBAAuB,EAAE;UACvCC,MAAM,EAAE;YACNC,WAAW,EAAEN,UAAU,CAACM,WAAW;YACnCN;UACF;QACF,CAAC,CACH,CAAC;MACH,CAAC;MACDO,YAAY,EAAEA,CAAA,KAAM;QAClBL,MAAM,CAACC,aAAa,CAAC,IAAIC,WAAW,CAAC,uBAAuB,CAAC,CAAC;MAChE;IACF,CAAC,CAAC;IACF,IAAI,CAACI,WAAW,GAAG,IAAItD,WAAW,CAAC,CAAC;IACpC,IAAI,CAACuD,sBAAsB,GAAG,IAAItD,sBAAsB,CAAC,CAAC;IAC1D,IAAI,CAACuD,eAAe,GAAG,IAAI1C,eAAe,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC0C,eAAe,CAACC,OAAO,CAAC,CAAC;IAC9B,IAAI,CAACC,gBAAgB,GAAG,IAAI1C,gBAAgB,CAAC,IAAI,CAAC;IAClD,IAAI,CAAC0C,gBAAgB,CAACD,OAAO,CAAC,CAAC;IAC/B,IAAI,CAACE,oBAAoB,GAAG,IAAIhD,+BAA+B,CAC7D,IAAI,CAACmB,YAAY,EACjB,IAAI,CAACI,iBAAiB,EACtB,IAAI,CAACG,aACP,CAAC;IAED,IAAI,CAACD,qBAAqB,CAACwB,gBAAgB,CAAC,IAAI,CAACvB,aAAa,CAAC;IAC/D,IAAI,CAACF,oBAAoB,CAACyB,gBAAgB,CAAC,IAAI,CAACvB,aAAa,CAAC;IAC9D,IAAI,CAACwB,6BAA6B,CAAC,CAAC;IAEpC,IAAI,OAAOb,MAAM,KAAK,WAAW,EAAE;MACjCA,MAAM,CAACc,gBAAgB,GAAG;QACxB5B,iBAAiB,EAAE,IAAI,CAACA,iBAAiB;QACzC/B,uBAAuB;QACvBoD,sBAAsB,EAAE,IAAI,CAACA;MAC/B,CAAC;IACH;IAEA,IAAI,CAAC7B,sBAAsB,GAAG7B,iBAAiB,CAAC,CAACkE,WAAW,EAAEC,IAAI,KAAK;MACrE,MAAMC,UAAU,GAAGnE,8BAA8B,CAACkE,IAAI,CAAC;MACvD,IAAIC,UAAU,CAACC,IAAI,GAAG,CAAC,EAAE;QACvB,IAAI,CAAChC,iBAAiB,CAACiC,wBAAwB,CAACF,UAAU,CAAC;MAC7D;IACF,CAAC,CAAC;EACJ;EAEAG,qBAAqBA,CAACxC,MAAoB,EAGxC;IACA,MAAMyC,gBAAgB,GAAG,IAAI,CAAC/B,cAAc,CAACgC,sBAAsB,CAAC,CAAC;IAErE,MAAMlD,MAAM,GAAGzB,YAAY,CACzBiC,MAAM,CAAC2C,OAAO,EACd3C,MAAM,CAAC4C,WAAW,EAClB5C,MAAM,CAAC6C,IAAI,EACX;MACE5C,MAAM,EAAED,MAAM,CAACC,MAAM;MACrB6C,0BAA0B,EAAE9C,MAAM,CAAC+C;IACrC,CAAC,EACDN,gBACF,CAAC;IAED,MAAMO,gBAAkC,GAAGhF,sBAAsB,CAC/DwB,MACF,CAAC;IAED,MAAMyD,kBAAkB,GAAG,IAAI,CAACC,kBAAkB,CAACF,gBAAgB,CAAC;IAEpE,OAAO;MACLxD,MAAM;MACNwD,gBAAgB,EAAEC;IACpB,CAAC;EACH;EAEAE,kBAAkBA,CAAC3D,MAAwB,EAAoB;IAC7D,IAAI,CAACyC,6BAA6B,CAAC,CAAC;IAEpC,MAAMgB,kBAAkB,GAAG,IAAI,CAACC,kBAAkB,CAAC1D,MAAM,CAAC;IAC1DH,eAAe,CAAC+D,GAAG,CAACH,kBAAkB,EAAE,IAAI,CAAC;IAE7C,OAAOA,kBAAkB;EAC3B;EAEQC,kBAAkBA,CAAC1D,MAAwB,EAAoB;IACrE,IAAI,CAAC,IAAI,CAACG,OAAO,EAAE;MACjB,IAAI,CAACA,OAAO,GAAG,IAAIb,uBAAuB,CAAC;QACzCoB,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BI,iBAAiB,EAAE,IAAI,CAACA,iBAAiB;QACzCC,oBAAoB,EAAE,IAAI,CAACA,oBAAoB;QAC/CC,qBAAqB,EAAE,IAAI,CAACA,qBAAqB;QACjDC,aAAa,EAAE,IAAI,CAACA,aAAa;QACjC4C,uBAAuB,EAAE,IAAI;QAC7BC,kBAAkB,EAAE,IAAI;QACxBC,iBAAiB,EAAE,IAAI,CAACvD,MAAM,CAACuD,iBAAiB;QAChDC,gBAAgB,EAAE,IAAI,CAACxD,MAAM,CAACyD,yBAAyB;QACvD/B,WAAW,EAAE,IAAI,CAACA;MACpB,CAAC,CAAC;IACJ;IACA,OAAO,IAAI,CAAC/B,OAAO,CAAC+D,UAAU,CAAClE,MAAM,CAAC;EACxC;EAEAyC,6BAA6BA,CAAA,EAAS;IACpC,IAAI,IAAI,CAACrC,mBAAmB,IAAI,IAAI,EAAE;MACpC;IACF;IAEA,IAAI,CAACA,mBAAmB,GAAG+D,UAAU,CAACC,KAAK;IAC3C,MAAMnB,gBAAgB,GAAG,IAAI,CAAC/B,cAAc,CAACgC,sBAAsB,CAAC,CAAC;IACrE,IAAI,CAAC7C,sBAAsB,GAAG4C,gBAAgB;IAC9CkB,UAAU,CAACC,KAAK,GAAGnB,gBAAgB;EACrC;EAEQoB,+BAA+BA,CAAA,EAAS;IAC9C,IAAI,IAAI,CAACjE,mBAAmB,IAAI,IAAI,EAAE;MACpC;IACF;IAEA,IAAI+D,UAAU,CAACC,KAAK,KAAK,IAAI,CAAC/D,sBAAsB,EAAE;MACpD8D,UAAU,CAACC,KAAK,GAAG,IAAI,CAAChE,mBAAmB;IAC7C;IAEA,IAAI,CAACA,mBAAmB,GAAG,IAAI;IAC/B,IAAI,CAACC,sBAAsB,GAAG,IAAI;EACpC;EAEAiE,eAAeA,CAAA,EAAiB;IAC9B,OAAO,IAAI,CAAC5D,YAAY;EAC1B;EAEA6D,eAAeA,CAAA,EAAiB;IAC9B,OAAO,IAAI,CAAC1D,YAAY;EAC1B;EAEA2D,oBAAoBA,CAAA,EAA2B;IAC7C,OAAO,IAAI,CAAC1D,iBAAiB;EAC/B;EAEA2D,uBAAuBA,CAAA,EAAyB;IAC9C,OAAO,IAAI,CAAC1D,oBAAoB;EAClC;EAEA2D,wBAAwBA,CAAA,EAA0B;IAChD,OAAO,IAAI,CAAC1D,qBAAqB;EACnC;EAEA2D,UAAUA,CAAA,EAAmC;IAC3C,OAAO,IAAI,CAACxE,OAAO;EACrB;EAEAyE,gBAAgBA,CAAA,EAAkB;IAChC,OAAO,IAAI,CAAC3D,aAAa;EAC3B;EAEA4D,qBAAqBA,CAAA,EAAgC;IACnD,OAAO,IAAI,CAACzD,kBAAkB;EAChC;EAEA0D,uBAAuBA,CAAA,EAAyB;IAC9C,OAAO,IAAI,CAACzD,cAAc;EAC5B;EAEA0D,cAAcA,CAAA,EAAgB;IAC5B,OAAO,IAAI,CAAC7C,WAAW;EACzB;EAEA8C,uBAAuBA,CAAA,EAAoC;IACzD,OAAO,IAAI,CAACzC,oBAAoB;EAClC;EAEA0C,yBAAyBA,CAAA,EAA2B;IAClD,OAAO,IAAI,CAAC9C,sBAAsB;EACpC;EAEA+C,kBAAkBA,CAAA,EAAoB;IACpC,OAAO,IAAI,CAAC9C,eAAe;EAC7B;EAEA+C,mBAAmBA,CAAA,EAAqB;IACtC,OAAO,IAAI,CAAC7C,gBAAgB;EAC9B;EAEA8C,OAAOA,CAAA,EAAS;IACd,IAAI,CAAC9E,sBAAsB,GAAG,CAAC;IAC/B,IAAI,CAACA,sBAAsB,GAAG,IAAI;IAClC,IAAI,CAAC+D,+BAA+B,CAAC,CAAC;IACtC,IAAI,OAAOzC,MAAM,KAAK,WAAW,EAAE;MACjC,OAAQA,MAAM,CAAwCc,gBAAgB;IACxE;IACA,IAAI,CAAChC,YAAY,CAAC0E,OAAO,CAAC,CAAC;IAC3B,IAAI,CAACvE,YAAY,CAACuE,OAAO,CAAC,CAAC;IAC3B,IAAI,CAACtE,iBAAiB,CAACuE,KAAK,CAAC,CAAC;IAC9B,IAAI,CAACtE,oBAAoB,CAACsE,KAAK,CAAC,CAAC;IACjC,IAAI,CAACrE,qBAAqB,CAACqE,KAAK,CAAC,CAAC;IAClC,IAAI,CAACpE,aAAa,CAACoE,KAAK,CAAC,CAAC;IAC1B,IAAI,CAAChE,cAAc,CAAC+D,OAAO,CAAC,CAAC;IAC7B,IAAI,CAAChD,eAAe,CAACgD,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC9C,gBAAgB,CAAC8C,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAClD,WAAW,CAACmD,KAAK,CAAC,CAAC;IACxB,IAAI,CAAClD,sBAAsB,CAACmD,QAAQ,CAAC,CAAC;IACtC,IAAI,CAACnF,OAAO,EAAEiF,OAAO,CAAC,CAAC;IACvB,IAAI,CAACjF,OAAO,GAAG,IAAI;EACrB;EAEA,MAAMoF,gBAAgBA,CAAA,EAA0B;IAC9C,IAAI,CAAC,IAAI,CAACpF,OAAO,EAAE;MACjB,OAAO,EAAE;IACX;IAEA,IAAI;MACF,MAAMqF,QAAQ,GAAG,MAAM,IAAI,CAACrF,OAAO,CAACsF,gBAAgB,CAAC,CAAC;MACtD,OAAOD,QAAQ,CAACE,OAAO;IACzB,CAAC,CAAC,MAAM;MACN,OAAO,EAAE;IACX;EACF;;EAEA;EACAC,eAAeA,CAAA,EAA0B;IACvC,OAAO,IAAI,CAACJ,gBAAgB,CAAC,CAAC;EAChC;EAEA,MAAME,gBAAgBA,CAAA,EAA2B;IAC/C,IAAI,CAAC,IAAI,CAACtF,OAAO,EAAE;MACjB,OAAO;QACLuF,OAAO,EAAE,EAAE;QACXE,KAAK,EAAE;UAAEC,YAAY,EAAE,CAAC;UAAEC,SAAS,EAAE,CAAC;UAAEC,SAAS,EAAE;QAAE;MACvD,CAAC;IACH;IAEA,IAAI;MACF,OAAO,MAAM,IAAI,CAAC5F,OAAO,CAACsF,gBAAgB,CAAC,CAAC;IAC9C,CAAC,CAAC,MAAM;MACN,OAAO;QACLC,OAAO,EAAE,EAAE;QACXE,KAAK,EAAE;UAAEC,YAAY,EAAE,CAAC;UAAEC,SAAS,EAAE,CAAC;UAAEC,SAAS,EAAE;QAAE;MACvD,CAAC;IACH;EACF;EAEA,MAAMC,oBAAoBA,CAACC,KAI1B,EAAiB;IAChB,IAAI,CAAC,IAAI,CAAC9F,OAAO,EAAE;MACjB;IACF;IAEA,IAAI;MACF,IAAI8F,KAAK,CAACC,IAAI,KAAK,QAAQ,IAAID,KAAK,CAACE,IAAI,EAAE;QACzC,MAAM,IAAI,CAAChG,OAAO,CAACiG,iBAAiB,CAACH,KAAK,CAACE,IAAI,CAAC;MAClD,CAAC,MAAM;QACL,MAAM,IAAI,CAAChG,OAAO,CAACkG,oBAAoB,CAACJ,KAAK,CAACK,UAAU,CAAC;MAC3D;IACF,CAAC,CAAC,MAAM,CACR;EACF;EAEA,MAAMC,UAAUA,CAAA,EAAkB;IAChC,IAAI,CAAC,IAAI,CAACpG,OAAO,EAAE;MACjB;IACF;IAEA,IAAI;MACF,MAAM,IAAI,CAACA,OAAO,CAACqG,aAAa,CAAC,CAAC;IACpC,CAAC,CAAC,MAAM,CACR;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 SubscribableStore {
|
|
18
|
+
subscribers = new Set();
|
|
19
|
+
subscribe(callback) {
|
|
20
|
+
this.subscribers.add(callback);
|
|
21
|
+
return () => {
|
|
22
|
+
this.subscribers.delete(callback);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
notifySubscribers() {
|
|
26
|
+
for (const callback of this.subscribers) {
|
|
27
|
+
try {
|
|
28
|
+
callback();
|
|
29
|
+
} catch {
|
|
30
|
+
// don't let a bad subscriber break others
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
clearSubscribers() {
|
|
35
|
+
this.subscribers.clear();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=SubscribableStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscribableStore.js","names":["SubscribableStore","subscribers","Set","subscribe","callback","add","delete","notifySubscribers","clearSubscribers","clear"],"sources":["SubscribableStore.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\nexport abstract class SubscribableStore {\n private readonly subscribers = new Set<() => void>();\n\n subscribe(callback: () => void): () => void {\n this.subscribers.add(callback);\n return () => {\n this.subscribers.delete(callback);\n };\n }\n\n protected notifySubscribers(): void {\n for (const callback of this.subscribers) {\n try {\n callback();\n } catch {\n // don't let a bad subscriber break others\n }\n }\n }\n\n protected clearSubscribers(): void {\n this.subscribers.clear();\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAeA,iBAAiB,CAAC;EACrBC,WAAW,GAAG,IAAIC,GAAG,CAAa,CAAC;EAEpDC,SAASA,CAACC,QAAoB,EAAc;IAC1C,IAAI,CAACH,WAAW,CAACI,GAAG,CAACD,QAAQ,CAAC;IAC9B,OAAO,MAAM;MACX,IAAI,CAACH,WAAW,CAACK,MAAM,CAACF,QAAQ,CAAC;IACnC,CAAC;EACH;EAEUG,iBAAiBA,CAAA,EAAS;IAClC,KAAK,MAAMH,QAAQ,IAAI,IAAI,CAACH,WAAW,EAAE;MACvC,IAAI;QACFG,QAAQ,CAAC,CAAC;MACZ,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ;EACF;EAEUI,gBAAgBA,CAAA,EAAS;IACjC,IAAI,CAACP,WAAW,CAACQ,KAAK,CAAC,CAAC;EAC1B;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,195 @@
|
|
|
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
|
+
// Captures global JS errors (uncaught throws) and unhandled promise rejections
|
|
18
|
+
// from the host page. React's dev-mode render errors are captured separately
|
|
19
|
+
// via console.error in ConsoleLogStore, so we don't ship a dedicated error
|
|
20
|
+
// boundary alongside this.
|
|
21
|
+
|
|
22
|
+
import { CircularBuffer } from "../utils/CircularBuffer.js";
|
|
23
|
+
import { SubscribableStore } from "./SubscribableStore.js";
|
|
24
|
+
let entryCounter = 0;
|
|
25
|
+
function nextId() {
|
|
26
|
+
return `windowError-${++entryCounter}-${Date.now()}`;
|
|
27
|
+
}
|
|
28
|
+
function describeRejectionReason(reason) {
|
|
29
|
+
if (reason instanceof Error) {
|
|
30
|
+
return {
|
|
31
|
+
message: reason.message,
|
|
32
|
+
stack: reason.stack
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (typeof reason === "string") {
|
|
36
|
+
return {
|
|
37
|
+
message: reason
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
return {
|
|
42
|
+
message: JSON.stringify(reason)
|
|
43
|
+
};
|
|
44
|
+
} catch {
|
|
45
|
+
return {
|
|
46
|
+
message: String(reason)
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class WindowErrorStore extends SubscribableStore {
|
|
51
|
+
cachedEntries = null;
|
|
52
|
+
installed = false;
|
|
53
|
+
suppressed = false;
|
|
54
|
+
notifyScheduled = false;
|
|
55
|
+
errorListener = null;
|
|
56
|
+
rejectionListener = null;
|
|
57
|
+
constructor(capacity = 1000) {
|
|
58
|
+
super();
|
|
59
|
+
this.entries = new CircularBuffer(capacity);
|
|
60
|
+
}
|
|
61
|
+
install() {
|
|
62
|
+
if (this.installed) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (typeof window === "undefined") {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
this.errorListener = event => {
|
|
69
|
+
if (this.suppressed) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const message = event.message || (event.error instanceof Error ? event.error.message : "Error");
|
|
73
|
+
const stack = event.error instanceof Error ? event.error.stack : undefined;
|
|
74
|
+
const entry = {
|
|
75
|
+
id: nextId(),
|
|
76
|
+
kind: "error",
|
|
77
|
+
message,
|
|
78
|
+
...(stack !== undefined ? {
|
|
79
|
+
stack
|
|
80
|
+
} : {}),
|
|
81
|
+
...(event.filename ? {
|
|
82
|
+
filename: event.filename
|
|
83
|
+
} : {}),
|
|
84
|
+
...(typeof event.lineno === "number" ? {
|
|
85
|
+
lineno: event.lineno
|
|
86
|
+
} : {}),
|
|
87
|
+
...(typeof event.colno === "number" ? {
|
|
88
|
+
colno: event.colno
|
|
89
|
+
} : {}),
|
|
90
|
+
timestamp: Date.now()
|
|
91
|
+
};
|
|
92
|
+
this.entries.push(entry);
|
|
93
|
+
this.cachedEntries = null;
|
|
94
|
+
this.scheduleNotify();
|
|
95
|
+
};
|
|
96
|
+
this.rejectionListener = event => {
|
|
97
|
+
if (this.suppressed) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const {
|
|
101
|
+
message,
|
|
102
|
+
stack
|
|
103
|
+
} = describeRejectionReason(event.reason);
|
|
104
|
+
const entry = {
|
|
105
|
+
id: nextId(),
|
|
106
|
+
kind: "unhandledrejection",
|
|
107
|
+
message,
|
|
108
|
+
...(stack !== undefined ? {
|
|
109
|
+
stack
|
|
110
|
+
} : {}),
|
|
111
|
+
timestamp: Date.now()
|
|
112
|
+
};
|
|
113
|
+
this.entries.push(entry);
|
|
114
|
+
this.cachedEntries = null;
|
|
115
|
+
this.scheduleNotify();
|
|
116
|
+
};
|
|
117
|
+
window.addEventListener("error", this.errorListener);
|
|
118
|
+
window.addEventListener("unhandledrejection", this.rejectionListener);
|
|
119
|
+
this.installed = true;
|
|
120
|
+
}
|
|
121
|
+
uninstall() {
|
|
122
|
+
if (!this.installed) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (typeof window !== "undefined") {
|
|
126
|
+
if (this.errorListener) {
|
|
127
|
+
window.removeEventListener("error", this.errorListener);
|
|
128
|
+
}
|
|
129
|
+
if (this.rejectionListener) {
|
|
130
|
+
window.removeEventListener("unhandledrejection", this.rejectionListener);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
this.errorListener = null;
|
|
134
|
+
this.rejectionListener = null;
|
|
135
|
+
this.installed = false;
|
|
136
|
+
}
|
|
137
|
+
suppress() {
|
|
138
|
+
this.suppressed = true;
|
|
139
|
+
}
|
|
140
|
+
unsuppress() {
|
|
141
|
+
this.suppressed = false;
|
|
142
|
+
}
|
|
143
|
+
recordError(error, source) {
|
|
144
|
+
if (this.suppressed) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const entry = {
|
|
148
|
+
id: nextId(),
|
|
149
|
+
kind: "error",
|
|
150
|
+
message: error.message,
|
|
151
|
+
...(error.stack !== undefined ? {
|
|
152
|
+
stack: error.stack
|
|
153
|
+
} : {}),
|
|
154
|
+
...(source !== undefined ? {
|
|
155
|
+
filename: source
|
|
156
|
+
} : {}),
|
|
157
|
+
timestamp: Date.now()
|
|
158
|
+
};
|
|
159
|
+
this.entries.push(entry);
|
|
160
|
+
this.cachedEntries = null;
|
|
161
|
+
this.scheduleNotify();
|
|
162
|
+
}
|
|
163
|
+
getEntries() {
|
|
164
|
+
if (this.cachedEntries != null) {
|
|
165
|
+
return this.cachedEntries;
|
|
166
|
+
}
|
|
167
|
+
this.cachedEntries = this.entries.toArray();
|
|
168
|
+
return this.cachedEntries;
|
|
169
|
+
}
|
|
170
|
+
getSize() {
|
|
171
|
+
return this.entries.getSize();
|
|
172
|
+
}
|
|
173
|
+
clear() {
|
|
174
|
+
this.entries.clear();
|
|
175
|
+
this.cachedEntries = null;
|
|
176
|
+
this.notifySubscribers();
|
|
177
|
+
}
|
|
178
|
+
dispose() {
|
|
179
|
+
this.uninstall();
|
|
180
|
+
this.entries.clear();
|
|
181
|
+
this.cachedEntries = null;
|
|
182
|
+
this.clearSubscribers();
|
|
183
|
+
}
|
|
184
|
+
scheduleNotify() {
|
|
185
|
+
if (this.notifyScheduled) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
this.notifyScheduled = true;
|
|
189
|
+
queueMicrotask(() => {
|
|
190
|
+
this.notifyScheduled = false;
|
|
191
|
+
this.notifySubscribers();
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=WindowErrorStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WindowErrorStore.js","names":["CircularBuffer","SubscribableStore","entryCounter","nextId","Date","now","describeRejectionReason","reason","Error","message","stack","JSON","stringify","String","WindowErrorStore","cachedEntries","installed","suppressed","notifyScheduled","errorListener","rejectionListener","constructor","capacity","entries","install","window","event","error","undefined","entry","id","kind","filename","lineno","colno","timestamp","push","scheduleNotify","addEventListener","uninstall","removeEventListener","suppress","unsuppress","recordError","source","getEntries","toArray","getSize","clear","notifySubscribers","dispose","clearSubscribers","queueMicrotask"],"sources":["WindowErrorStore.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\n// Captures global JS errors (uncaught throws) and unhandled promise rejections\n// from the host page. React's dev-mode render errors are captured separately\n// via console.error in ConsoleLogStore, so we don't ship a dedicated error\n// boundary alongside this.\n\nimport { CircularBuffer } from \"../utils/CircularBuffer.js\";\nimport { SubscribableStore } from \"./SubscribableStore.js\";\n\nexport type WindowErrorKind = \"error\" | \"unhandledrejection\";\n\nexport interface WindowErrorEntry {\n readonly id: string;\n readonly kind: WindowErrorKind;\n readonly message: string;\n readonly stack?: string;\n readonly filename?: string;\n readonly lineno?: number;\n readonly colno?: number;\n readonly timestamp: number;\n}\n\nlet entryCounter = 0;\n\nfunction nextId(): string {\n return `windowError-${++entryCounter}-${Date.now()}`;\n}\n\nfunction describeRejectionReason(\n reason: unknown,\n): { message: string; stack?: string } {\n if (reason instanceof Error) {\n return { message: reason.message, stack: reason.stack };\n }\n if (typeof reason === \"string\") {\n return { message: reason };\n }\n try {\n return { message: JSON.stringify(reason) };\n } catch {\n return { message: String(reason) };\n }\n}\n\nexport class WindowErrorStore extends SubscribableStore {\n private readonly entries: CircularBuffer<WindowErrorEntry>;\n private cachedEntries: readonly WindowErrorEntry[] | null = null;\n private installed = false;\n private suppressed = false;\n private notifyScheduled = false;\n\n private errorListener: ((event: ErrorEvent) => void) | null = null;\n private rejectionListener:\n | ((event: PromiseRejectionEvent) => void)\n | null = null;\n\n constructor(capacity: number = 1000) {\n super();\n this.entries = new CircularBuffer(capacity);\n }\n\n install(): void {\n if (this.installed) {\n return;\n }\n if (typeof window === \"undefined\") {\n return;\n }\n\n this.errorListener = (event: ErrorEvent) => {\n if (this.suppressed) {\n return;\n }\n const message = event.message\n || (event.error instanceof Error ? event.error.message : \"Error\");\n const stack = event.error instanceof Error\n ? event.error.stack\n : undefined;\n const entry: WindowErrorEntry = {\n id: nextId(),\n kind: \"error\",\n message,\n ...(stack !== undefined ? { stack } : {}),\n ...(event.filename ? { filename: event.filename } : {}),\n ...(typeof event.lineno === \"number\" ? { lineno: event.lineno } : {}),\n ...(typeof event.colno === \"number\" ? { colno: event.colno } : {}),\n timestamp: Date.now(),\n };\n this.entries.push(entry);\n this.cachedEntries = null;\n this.scheduleNotify();\n };\n\n this.rejectionListener = (event: PromiseRejectionEvent) => {\n if (this.suppressed) {\n return;\n }\n const { message, stack } = describeRejectionReason(event.reason);\n const entry: WindowErrorEntry = {\n id: nextId(),\n kind: \"unhandledrejection\",\n message,\n ...(stack !== undefined ? { stack } : {}),\n timestamp: Date.now(),\n };\n this.entries.push(entry);\n this.cachedEntries = null;\n this.scheduleNotify();\n };\n\n window.addEventListener(\"error\", this.errorListener);\n window.addEventListener(\"unhandledrejection\", this.rejectionListener);\n this.installed = true;\n }\n\n uninstall(): void {\n if (!this.installed) {\n return;\n }\n if (typeof window !== \"undefined\") {\n if (this.errorListener) {\n window.removeEventListener(\"error\", this.errorListener);\n }\n if (this.rejectionListener) {\n window.removeEventListener(\n \"unhandledrejection\",\n this.rejectionListener,\n );\n }\n }\n this.errorListener = null;\n this.rejectionListener = null;\n this.installed = false;\n }\n\n suppress(): void {\n this.suppressed = true;\n }\n\n unsuppress(): void {\n this.suppressed = false;\n }\n\n recordError(error: Error, source?: string): void {\n if (this.suppressed) {\n return;\n }\n const entry: WindowErrorEntry = {\n id: nextId(),\n kind: \"error\",\n message: error.message,\n ...(error.stack !== undefined ? { stack: error.stack } : {}),\n ...(source !== undefined ? { filename: source } : {}),\n timestamp: Date.now(),\n };\n this.entries.push(entry);\n this.cachedEntries = null;\n this.scheduleNotify();\n }\n\n getEntries(): readonly WindowErrorEntry[] {\n if (this.cachedEntries != null) {\n return this.cachedEntries;\n }\n this.cachedEntries = this.entries.toArray();\n return this.cachedEntries;\n }\n\n getSize(): number {\n return this.entries.getSize();\n }\n\n clear(): void {\n this.entries.clear();\n this.cachedEntries = null;\n this.notifySubscribers();\n }\n\n dispose(): void {\n this.uninstall();\n this.entries.clear();\n this.cachedEntries = null;\n this.clearSubscribers();\n }\n\n private scheduleNotify(): void {\n if (this.notifyScheduled) {\n return;\n }\n this.notifyScheduled = true;\n queueMicrotask(() => {\n this.notifyScheduled = false;\n this.notifySubscribers();\n });\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAASA,cAAc,QAAQ,4BAA4B;AAC3D,SAASC,iBAAiB,QAAQ,wBAAwB;AAe1D,IAAIC,YAAY,GAAG,CAAC;AAEpB,SAASC,MAAMA,CAAA,EAAW;EACxB,OAAO,eAAe,EAAED,YAAY,IAAIE,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE;AACtD;AAEA,SAASC,uBAAuBA,CAC9BC,MAAe,EACsB;EACrC,IAAIA,MAAM,YAAYC,KAAK,EAAE;IAC3B,OAAO;MAAEC,OAAO,EAAEF,MAAM,CAACE,OAAO;MAAEC,KAAK,EAAEH,MAAM,CAACG;IAAM,CAAC;EACzD;EACA,IAAI,OAAOH,MAAM,KAAK,QAAQ,EAAE;IAC9B,OAAO;MAAEE,OAAO,EAAEF;IAAO,CAAC;EAC5B;EACA,IAAI;IACF,OAAO;MAAEE,OAAO,EAAEE,IAAI,CAACC,SAAS,CAACL,MAAM;IAAE,CAAC;EAC5C,CAAC,CAAC,MAAM;IACN,OAAO;MAAEE,OAAO,EAAEI,MAAM,CAACN,MAAM;IAAE,CAAC;EACpC;AACF;AAEA,OAAO,MAAMO,gBAAgB,SAASb,iBAAiB,CAAC;EAE9Cc,aAAa,GAAuC,IAAI;EACxDC,SAAS,GAAG,KAAK;EACjBC,UAAU,GAAG,KAAK;EAClBC,eAAe,GAAG,KAAK;EAEvBC,aAAa,GAAyC,IAAI;EAC1DC,iBAAiB,GAEd,IAAI;EAEfC,WAAWA,CAACC,QAAgB,GAAG,IAAI,EAAE;IACnC,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,OAAO,GAAG,IAAIvB,cAAc,CAACsB,QAAQ,CAAC;EAC7C;EAEAE,OAAOA,CAAA,EAAS;IACd,IAAI,IAAI,CAACR,SAAS,EAAE;MAClB;IACF;IACA,IAAI,OAAOS,MAAM,KAAK,WAAW,EAAE;MACjC;IACF;IAEA,IAAI,CAACN,aAAa,GAAIO,KAAiB,IAAK;MAC1C,IAAI,IAAI,CAACT,UAAU,EAAE;QACnB;MACF;MACA,MAAMR,OAAO,GAAGiB,KAAK,CAACjB,OAAO,KACvBiB,KAAK,CAACC,KAAK,YAAYnB,KAAK,GAAGkB,KAAK,CAACC,KAAK,CAAClB,OAAO,GAAG,OAAO,CAAC;MACnE,MAAMC,KAAK,GAAGgB,KAAK,CAACC,KAAK,YAAYnB,KAAK,GACtCkB,KAAK,CAACC,KAAK,CAACjB,KAAK,GACjBkB,SAAS;MACb,MAAMC,KAAuB,GAAG;QAC9BC,EAAE,EAAE3B,MAAM,CAAC,CAAC;QACZ4B,IAAI,EAAE,OAAO;QACbtB,OAAO;QACP,IAAIC,KAAK,KAAKkB,SAAS,GAAG;UAAElB;QAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,IAAIgB,KAAK,CAACM,QAAQ,GAAG;UAAEA,QAAQ,EAAEN,KAAK,CAACM;QAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,OAAON,KAAK,CAACO,MAAM,KAAK,QAAQ,GAAG;UAAEA,MAAM,EAAEP,KAAK,CAACO;QAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,IAAI,OAAOP,KAAK,CAACQ,KAAK,KAAK,QAAQ,GAAG;UAAEA,KAAK,EAAER,KAAK,CAACQ;QAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAClEC,SAAS,EAAE/B,IAAI,CAACC,GAAG,CAAC;MACtB,CAAC;MACD,IAAI,CAACkB,OAAO,CAACa,IAAI,CAACP,KAAK,CAAC;MACxB,IAAI,CAACd,aAAa,GAAG,IAAI;MACzB,IAAI,CAACsB,cAAc,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAACjB,iBAAiB,GAAIM,KAA4B,IAAK;MACzD,IAAI,IAAI,CAACT,UAAU,EAAE;QACnB;MACF;MACA,MAAM;QAAER,OAAO;QAAEC;MAAM,CAAC,GAAGJ,uBAAuB,CAACoB,KAAK,CAACnB,MAAM,CAAC;MAChE,MAAMsB,KAAuB,GAAG;QAC9BC,EAAE,EAAE3B,MAAM,CAAC,CAAC;QACZ4B,IAAI,EAAE,oBAAoB;QAC1BtB,OAAO;QACP,IAAIC,KAAK,KAAKkB,SAAS,GAAG;UAAElB;QAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACzCyB,SAAS,EAAE/B,IAAI,CAACC,GAAG,CAAC;MACtB,CAAC;MACD,IAAI,CAACkB,OAAO,CAACa,IAAI,CAACP,KAAK,CAAC;MACxB,IAAI,CAACd,aAAa,GAAG,IAAI;MACzB,IAAI,CAACsB,cAAc,CAAC,CAAC;IACvB,CAAC;IAEDZ,MAAM,CAACa,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACnB,aAAa,CAAC;IACpDM,MAAM,CAACa,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAClB,iBAAiB,CAAC;IACrE,IAAI,CAACJ,SAAS,GAAG,IAAI;EACvB;EAEAuB,SAASA,CAAA,EAAS;IAChB,IAAI,CAAC,IAAI,CAACvB,SAAS,EAAE;MACnB;IACF;IACA,IAAI,OAAOS,MAAM,KAAK,WAAW,EAAE;MACjC,IAAI,IAAI,CAACN,aAAa,EAAE;QACtBM,MAAM,CAACe,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAACrB,aAAa,CAAC;MACzD;MACA,IAAI,IAAI,CAACC,iBAAiB,EAAE;QAC1BK,MAAM,CAACe,mBAAmB,CACxB,oBAAoB,EACpB,IAAI,CAACpB,iBACP,CAAC;MACH;IACF;IACA,IAAI,CAACD,aAAa,GAAG,IAAI;IACzB,IAAI,CAACC,iBAAiB,GAAG,IAAI;IAC7B,IAAI,CAACJ,SAAS,GAAG,KAAK;EACxB;EAEAyB,QAAQA,CAAA,EAAS;IACf,IAAI,CAACxB,UAAU,GAAG,IAAI;EACxB;EAEAyB,UAAUA,CAAA,EAAS;IACjB,IAAI,CAACzB,UAAU,GAAG,KAAK;EACzB;EAEA0B,WAAWA,CAAChB,KAAY,EAAEiB,MAAe,EAAQ;IAC/C,IAAI,IAAI,CAAC3B,UAAU,EAAE;MACnB;IACF;IACA,MAAMY,KAAuB,GAAG;MAC9BC,EAAE,EAAE3B,MAAM,CAAC,CAAC;MACZ4B,IAAI,EAAE,OAAO;MACbtB,OAAO,EAAEkB,KAAK,CAAClB,OAAO;MACtB,IAAIkB,KAAK,CAACjB,KAAK,KAAKkB,SAAS,GAAG;QAAElB,KAAK,EAAEiB,KAAK,CAACjB;MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;MAC5D,IAAIkC,MAAM,KAAKhB,SAAS,GAAG;QAAEI,QAAQ,EAAEY;MAAO,CAAC,GAAG,CAAC,CAAC,CAAC;MACrDT,SAAS,EAAE/B,IAAI,CAACC,GAAG,CAAC;IACtB,CAAC;IACD,IAAI,CAACkB,OAAO,CAACa,IAAI,CAACP,KAAK,CAAC;IACxB,IAAI,CAACd,aAAa,GAAG,IAAI;IACzB,IAAI,CAACsB,cAAc,CAAC,CAAC;EACvB;EAEAQ,UAAUA,CAAA,EAAgC;IACxC,IAAI,IAAI,CAAC9B,aAAa,IAAI,IAAI,EAAE;MAC9B,OAAO,IAAI,CAACA,aAAa;IAC3B;IACA,IAAI,CAACA,aAAa,GAAG,IAAI,CAACQ,OAAO,CAACuB,OAAO,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC/B,aAAa;EAC3B;EAEAgC,OAAOA,CAAA,EAAW;IAChB,OAAO,IAAI,CAACxB,OAAO,CAACwB,OAAO,CAAC,CAAC;EAC/B;EAEAC,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACzB,OAAO,CAACyB,KAAK,CAAC,CAAC;IACpB,IAAI,CAACjC,aAAa,GAAG,IAAI;IACzB,IAAI,CAACkC,iBAAiB,CAAC,CAAC;EAC1B;EAEAC,OAAOA,CAAA,EAAS;IACd,IAAI,CAACX,SAAS,CAAC,CAAC;IAChB,IAAI,CAAChB,OAAO,CAACyB,KAAK,CAAC,CAAC;IACpB,IAAI,CAACjC,aAAa,GAAG,IAAI;IACzB,IAAI,CAACoC,gBAAgB,CAAC,CAAC;EACzB;EAEQd,cAAcA,CAAA,EAAS;IAC7B,IAAI,IAAI,CAACnB,eAAe,EAAE;MACxB;IACF;IACA,IAAI,CAACA,eAAe,GAAG,IAAI;IAC3BkC,cAAc,CAAC,MAAM;MACnB,IAAI,CAAClC,eAAe,GAAG,KAAK;MAC5B,IAAI,CAAC+B,iBAAiB,CAAC,CAAC;IAC1B,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
|