@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.
Files changed (443) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/build/esm/DevToolsContext.js +19 -0
  3. package/build/esm/DevToolsContext.js.map +1 -0
  4. package/build/esm/components/ActionMetrics.js +89 -0
  5. package/build/esm/components/ActionMetrics.js.map +1 -0
  6. package/build/esm/components/BubbleChart.js +175 -0
  7. package/build/esm/components/BubbleChart.js.map +1 -0
  8. package/build/esm/components/BubbleChart.module.scss.js +6 -0
  9. package/build/esm/components/CacheInspectorTab.js +291 -0
  10. package/build/esm/components/CacheInspectorTab.js.map +1 -0
  11. package/build/esm/components/CacheInspectorTab.module.scss.js +39 -0
  12. package/build/esm/components/CacheMetrics.js +55 -0
  13. package/build/esm/components/CacheMetrics.js.map +1 -0
  14. package/build/esm/components/ComponentCard.js +124 -0
  15. package/build/esm/components/ComponentCard.js.map +1 -0
  16. package/build/esm/components/ComponentCard.module.scss.js +31 -0
  17. package/build/esm/components/ComputeTab.js +175 -0
  18. package/build/esm/components/ComputeTab.js.map +1 -0
  19. package/build/esm/components/CopyableCodeBlock.js +49 -0
  20. package/build/esm/components/CopyableCodeBlock.js.map +1 -0
  21. package/build/esm/components/CopyableCodeBlock.module.scss.js +10 -0
  22. package/build/esm/components/DebuggingTab.js +342 -0
  23. package/build/esm/components/DebuggingTab.js.map +1 -0
  24. package/build/esm/components/DebuggingTab.module.scss.js +18 -0
  25. package/build/esm/components/HookRow.js +180 -0
  26. package/build/esm/components/HookRow.js.map +1 -0
  27. package/build/esm/components/HookRow.module.scss.js +16 -0
  28. package/build/esm/components/ImprovementsTab.js +138 -0
  29. package/build/esm/components/ImprovementsTab.js.map +1 -0
  30. package/build/esm/components/ImprovementsTab.module.scss.js +30 -0
  31. package/build/esm/components/InspectorSelectionHeader.js +65 -0
  32. package/build/esm/components/InspectorSelectionHeader.js.map +1 -0
  33. package/build/esm/components/InterceptTab.js +862 -0
  34. package/build/esm/components/InterceptTab.js.map +1 -0
  35. package/build/esm/components/InterceptTab.module.scss.js +49 -0
  36. package/build/esm/components/IssueCard.js +115 -0
  37. package/build/esm/components/IssueCard.js.map +1 -0
  38. package/build/esm/components/IssueCard.module.scss.js +24 -0
  39. package/build/esm/components/LogEntryCard.js +94 -0
  40. package/build/esm/components/LogEntryCard.js.map +1 -0
  41. package/build/esm/components/LogEntryCard.module.scss.js +19 -0
  42. package/build/esm/components/MockEditor.js +316 -0
  43. package/build/esm/components/MockEditor.js.map +1 -0
  44. package/build/esm/components/MonitorErrorBoundary.js +64 -0
  45. package/build/esm/components/MonitorErrorBoundary.js.map +1 -0
  46. package/build/esm/components/MonitorErrorBoundary.module.scss.js +9 -0
  47. package/build/esm/components/MonitoringPanel.js +434 -0
  48. package/build/esm/components/MonitoringPanel.js.map +1 -0
  49. package/build/esm/components/MonitoringPanel.module.scss.js +81 -0
  50. package/build/esm/components/ObjectLoadingMetrics.js +60 -0
  51. package/build/esm/components/ObjectLoadingMetrics.js.map +1 -0
  52. package/build/esm/components/OsdkAppErrorBoundary.js +68 -0
  53. package/build/esm/components/OsdkAppErrorBoundary.js.map +1 -0
  54. package/build/esm/components/OsdkDevTools.js +40 -0
  55. package/build/esm/components/OsdkDevTools.js.map +1 -0
  56. package/build/esm/components/OverrideEditor.js +197 -0
  57. package/build/esm/components/OverrideEditor.js.map +1 -0
  58. package/build/esm/components/PerformanceTab.js +297 -0
  59. package/build/esm/components/PerformanceTab.js.map +1 -0
  60. package/build/esm/components/PrimitiveSelectionPanel.js +220 -0
  61. package/build/esm/components/PrimitiveSelectionPanel.js.map +1 -0
  62. package/build/esm/components/PrimitiveSelectionPanel.module.scss.js +26 -0
  63. package/build/esm/components/issueTypes.js +2 -0
  64. package/build/esm/components/issueTypes.js.map +1 -0
  65. package/build/esm/components/resolveComponentName.js +57 -0
  66. package/build/esm/components/resolveComponentName.js.map +1 -0
  67. package/build/esm/components/testHelpers.js +312 -0
  68. package/build/esm/components/testHelpers.js.map +1 -0
  69. package/build/esm/css.d.ts +20 -0
  70. package/build/esm/fiber/DegradationNotice.js +193 -0
  71. package/build/esm/fiber/DegradationNotice.js.map +1 -0
  72. package/build/esm/fiber/DevtoolsHook.js +252 -0
  73. package/build/esm/fiber/DevtoolsHook.js.map +1 -0
  74. package/build/esm/fiber/FiberAccess.js +65 -0
  75. package/build/esm/fiber/FiberAccess.js.map +1 -0
  76. package/build/esm/fiber/FiberInspection.js +140 -0
  77. package/build/esm/fiber/FiberInspection.js.map +1 -0
  78. package/build/esm/fiber/FiberTags.js +52 -0
  79. package/build/esm/fiber/FiberTags.js.map +1 -0
  80. package/build/esm/fiber/HookStateInspector.js +254 -0
  81. package/build/esm/fiber/HookStateInspector.js.map +1 -0
  82. package/build/esm/fiber/SafeFiberOperation.js +35 -0
  83. package/build/esm/fiber/SafeFiberOperation.js.map +1 -0
  84. package/build/esm/fiber/capabilities.js +180 -0
  85. package/build/esm/fiber/capabilities.js.map +1 -0
  86. package/build/esm/fiber/traverseFiber.js +129 -0
  87. package/build/esm/fiber/traverseFiber.js.map +1 -0
  88. package/build/esm/fiber/types.js +2 -0
  89. package/build/esm/fiber/types.js.map +1 -0
  90. package/build/esm/fiber/validation.js +155 -0
  91. package/build/esm/fiber/validation.js.map +1 -0
  92. package/build/esm/hooks/createPollingStore.js +81 -0
  93. package/build/esm/hooks/createPollingStore.js.map +1 -0
  94. package/build/esm/hooks/useActiveComponents.js +27 -0
  95. package/build/esm/hooks/useActiveComponents.js.map +1 -0
  96. package/build/esm/hooks/useComponentRegistry.js +25 -0
  97. package/build/esm/hooks/useComponentRegistry.js.map +1 -0
  98. package/build/esm/hooks/useComputeSelectors.js +43 -0
  99. package/build/esm/hooks/useComputeSelectors.js.map +1 -0
  100. package/build/esm/hooks/useConsoleLogs.js +46 -0
  101. package/build/esm/hooks/useConsoleLogs.js.map +1 -0
  102. package/build/esm/hooks/useInspectorSelection.js +93 -0
  103. package/build/esm/hooks/useInspectorSelection.js.map +1 -0
  104. package/build/esm/hooks/useMetrics.js +23 -0
  105. package/build/esm/hooks/useMetrics.js.map +1 -0
  106. package/build/esm/hooks/usePersistedState.js +89 -0
  107. package/build/esm/hooks/usePersistedState.js.map +1 -0
  108. package/build/esm/hooks/useRecommendations.js +123 -0
  109. package/build/esm/hooks/useRecommendations.js.map +1 -0
  110. package/build/esm/hooks/useSharedTick.js +49 -0
  111. package/build/esm/hooks/useSharedTick.js.map +1 -0
  112. package/build/esm/hooks/useTimeElapsed.js +51 -0
  113. package/build/esm/hooks/useTimeElapsed.js.map +1 -0
  114. package/build/esm/hooks/useTrackerSubscription.js +97 -0
  115. package/build/esm/hooks/useTrackerSubscription.js.map +1 -0
  116. package/build/esm/hooks/useUnusedFieldAnalysis.js +99 -0
  117. package/build/esm/hooks/useUnusedFieldAnalysis.js.map +1 -0
  118. package/build/esm/index.js +31 -0
  119. package/build/esm/index.js.map +1 -0
  120. package/build/esm/inspector/ClickToInspectSystem.js +228 -0
  121. package/build/esm/inspector/ClickToInspectSystem.js.map +1 -0
  122. package/build/esm/inspector/components/ComponentLabel.js +175 -0
  123. package/build/esm/inspector/components/ComponentLabel.js.map +1 -0
  124. package/build/esm/inspector/components/ComponentLabel.module.scss.js +12 -0
  125. package/build/esm/inspector/components/InspectorBanner.js +79 -0
  126. package/build/esm/inspector/components/InspectorBanner.js.map +1 -0
  127. package/build/esm/inspector/components/InspectorOverlay.js +149 -0
  128. package/build/esm/inspector/components/InspectorOverlay.js.map +1 -0
  129. package/build/esm/inspector/components/SelectionHighlight.js +74 -0
  130. package/build/esm/inspector/components/SelectionHighlight.js.map +1 -0
  131. package/build/esm/inspector/createClickToInspect.js +21 -0
  132. package/build/esm/inspector/createClickToInspect.js.map +1 -0
  133. package/build/esm/inspector/hooks/useAnimatedBounds.js +167 -0
  134. package/build/esm/inspector/hooks/useAnimatedBounds.js.map +1 -0
  135. package/build/esm/inspector/index.js +40 -0
  136. package/build/esm/inspector/index.js.map +1 -0
  137. package/build/esm/inspector/inspectorController.js +328 -0
  138. package/build/esm/inspector/inspectorController.js.map +1 -0
  139. package/build/esm/inspector/types.js +2 -0
  140. package/build/esm/inspector/types.js.map +1 -0
  141. package/build/esm/inspector/utils/elementBounds.js +72 -0
  142. package/build/esm/inspector/utils/elementBounds.js.map +1 -0
  143. package/build/esm/inspector/utils/interpolation.js +26 -0
  144. package/build/esm/inspector/utils/interpolation.js.map +1 -0
  145. package/build/esm/inspector/utils/labelPositioning.js +62 -0
  146. package/build/esm/inspector/utils/labelPositioning.js.map +1 -0
  147. package/build/esm/mocking/MockCacheKeyGenerator.js +109 -0
  148. package/build/esm/mocking/MockCacheKeyGenerator.js.map +1 -0
  149. package/build/esm/mocking/MockManager.js +281 -0
  150. package/build/esm/mocking/MockManager.js.map +1 -0
  151. package/build/esm/prototyping/PrototypeOverrideStore.js +66 -0
  152. package/build/esm/prototyping/PrototypeOverrideStore.js.map +1 -0
  153. package/build/esm/prototyping/index.js +18 -0
  154. package/build/esm/prototyping/index.js.map +1 -0
  155. package/build/esm/public/vite.js +19 -0
  156. package/build/esm/public/vite.js.map +1 -0
  157. package/build/esm/register.js +41 -0
  158. package/build/esm/register.js.map +1 -0
  159. package/build/esm/scss.d.ts +20 -0
  160. package/build/esm/store/ComputeStore.js +269 -0
  161. package/build/esm/store/ComputeStore.js.map +1 -0
  162. package/build/esm/store/ConsoleLogStore.js +289 -0
  163. package/build/esm/store/ConsoleLogStore.js.map +1 -0
  164. package/build/esm/store/MetricsStore.js +428 -0
  165. package/build/esm/store/MetricsStore.js.map +1 -0
  166. package/build/esm/store/MonitorStore.js +288 -0
  167. package/build/esm/store/MonitorStore.js.map +1 -0
  168. package/build/esm/store/SubscribableStore.js +38 -0
  169. package/build/esm/store/SubscribableStore.js.map +1 -0
  170. package/build/esm/store/WindowErrorStore.js +195 -0
  171. package/build/esm/store/WindowErrorStore.js.map +1 -0
  172. package/build/esm/styles.css +19441 -0
  173. package/build/esm/styles.js +31 -0
  174. package/build/esm/styles.js.map +1 -0
  175. package/build/esm/types/compute.js +2 -0
  176. package/build/esm/types/compute.js.map +1 -0
  177. package/build/esm/types/emissions.js +2 -0
  178. package/build/esm/types/emissions.js.map +1 -0
  179. package/build/esm/types/index.js +23 -0
  180. package/build/esm/types/index.js.map +1 -0
  181. package/build/esm/utils/ActionLifecycleTracker.js +178 -0
  182. package/build/esm/utils/ActionLifecycleTracker.js.map +1 -0
  183. package/build/esm/utils/CacheEfficiencyAnalyzer.js +198 -0
  184. package/build/esm/utils/CacheEfficiencyAnalyzer.js.map +1 -0
  185. package/build/esm/utils/CircularBuffer.js +96 -0
  186. package/build/esm/utils/CircularBuffer.js.map +1 -0
  187. package/build/esm/utils/ComponentContextCapture.js +215 -0
  188. package/build/esm/utils/ComponentContextCapture.js.map +1 -0
  189. package/build/esm/utils/ComponentPrimitiveDiscovery.js +173 -0
  190. package/build/esm/utils/ComponentPrimitiveDiscovery.js.map +1 -0
  191. package/build/esm/utils/ComponentQueryRegistry.js +340 -0
  192. package/build/esm/utils/ComponentQueryRegistry.js.map +1 -0
  193. package/build/esm/utils/ComputeMonitor.js +199 -0
  194. package/build/esm/utils/ComputeMonitor.js.map +1 -0
  195. package/build/esm/utils/EventTimeline.js +130 -0
  196. package/build/esm/utils/EventTimeline.js.map +1 -0
  197. package/build/esm/utils/LinkTraversalTracker.js +116 -0
  198. package/build/esm/utils/LinkTraversalTracker.js.map +1 -0
  199. package/build/esm/utils/MockDataGenerator.js +473 -0
  200. package/build/esm/utils/MockDataGenerator.js.map +1 -0
  201. package/build/esm/utils/ObservableClientMonitor.js +768 -0
  202. package/build/esm/utils/ObservableClientMonitor.js.map +1 -0
  203. package/build/esm/utils/PerformanceRecommendationEngine.js +185 -0
  204. package/build/esm/utils/PerformanceRecommendationEngine.js.map +1 -0
  205. package/build/esm/utils/PropertyAccessTracker.js +238 -0
  206. package/build/esm/utils/PropertyAccessTracker.js.map +1 -0
  207. package/build/esm/utils/RecommendationMatcher.js +53 -0
  208. package/build/esm/utils/RecommendationMatcher.js.map +1 -0
  209. package/build/esm/utils/SubscriptionTracker.js +132 -0
  210. package/build/esm/utils/SubscriptionTracker.js.map +1 -0
  211. package/build/esm/utils/UnusedFieldAnalyzer.js +186 -0
  212. package/build/esm/utils/UnusedFieldAnalyzer.js.map +1 -0
  213. package/build/esm/utils/WaterfallDetector.js +200 -0
  214. package/build/esm/utils/WaterfallDetector.js.map +1 -0
  215. package/build/esm/utils/computePayload.js +37 -0
  216. package/build/esm/utils/computePayload.js.map +1 -0
  217. package/build/esm/utils/computeRequest.js +29 -0
  218. package/build/esm/utils/computeRequest.js.map +1 -0
  219. package/build/esm/utils/format.js +69 -0
  220. package/build/esm/utils/format.js.map +1 -0
  221. package/build/esm/utils/logger.js +31 -0
  222. package/build/esm/utils/logger.js.map +1 -0
  223. package/build/esm/vite/constants.js +18 -0
  224. package/build/esm/vite/constants.js.map +1 -0
  225. package/build/esm/vite/hookInstaller.js +99 -0
  226. package/build/esm/vite/hookInstaller.js.map +1 -0
  227. package/build/esm/vite/index.js +77 -0
  228. package/build/esm/vite/index.js.map +1 -0
  229. package/build/types/DevToolsContext.d.ts +3 -0
  230. package/build/types/DevToolsContext.d.ts.map +1 -0
  231. package/build/types/components/ActionMetrics.d.ts +6 -0
  232. package/build/types/components/ActionMetrics.d.ts.map +1 -0
  233. package/build/types/components/BubbleChart.d.ts +10 -0
  234. package/build/types/components/BubbleChart.d.ts.map +1 -0
  235. package/build/types/components/CacheInspectorTab.d.ts +6 -0
  236. package/build/types/components/CacheInspectorTab.d.ts.map +1 -0
  237. package/build/types/components/CacheMetrics.d.ts +6 -0
  238. package/build/types/components/CacheMetrics.d.ts.map +1 -0
  239. package/build/types/components/ComponentCard.d.ts +13 -0
  240. package/build/types/components/ComponentCard.d.ts.map +1 -0
  241. package/build/types/components/ComputeTab.d.ts +6 -0
  242. package/build/types/components/ComputeTab.d.ts.map +1 -0
  243. package/build/types/components/CopyableCodeBlock.d.ts +7 -0
  244. package/build/types/components/CopyableCodeBlock.d.ts.map +1 -0
  245. package/build/types/components/DebuggingTab.d.ts +6 -0
  246. package/build/types/components/DebuggingTab.d.ts.map +1 -0
  247. package/build/types/components/HookRow.d.ts +9 -0
  248. package/build/types/components/HookRow.d.ts.map +1 -0
  249. package/build/types/components/ImprovementsTab.d.ts +7 -0
  250. package/build/types/components/ImprovementsTab.d.ts.map +1 -0
  251. package/build/types/components/InspectorSelectionHeader.d.ts +12 -0
  252. package/build/types/components/InspectorSelectionHeader.d.ts.map +1 -0
  253. package/build/types/components/InterceptTab.d.ts +126 -0
  254. package/build/types/components/InterceptTab.d.ts.map +1 -0
  255. package/build/types/components/IssueCard.d.ts +8 -0
  256. package/build/types/components/IssueCard.d.ts.map +1 -0
  257. package/build/types/components/LogEntryCard.d.ts +7 -0
  258. package/build/types/components/LogEntryCard.d.ts.map +1 -0
  259. package/build/types/components/MockEditor.d.ts +58 -0
  260. package/build/types/components/MockEditor.d.ts.map +1 -0
  261. package/build/types/components/MonitorErrorBoundary.d.ts +16 -0
  262. package/build/types/components/MonitorErrorBoundary.d.ts.map +1 -0
  263. package/build/types/components/MonitoringPanel.d.ts +8 -0
  264. package/build/types/components/MonitoringPanel.d.ts.map +1 -0
  265. package/build/types/components/ObjectLoadingMetrics.d.ts +7 -0
  266. package/build/types/components/ObjectLoadingMetrics.d.ts.map +1 -0
  267. package/build/types/components/OsdkAppErrorBoundary.d.ts +18 -0
  268. package/build/types/components/OsdkAppErrorBoundary.d.ts.map +1 -0
  269. package/build/types/components/OsdkDevTools.d.ts +2 -0
  270. package/build/types/components/OsdkDevTools.d.ts.map +1 -0
  271. package/build/types/components/OverrideEditor.d.ts +26 -0
  272. package/build/types/components/OverrideEditor.d.ts.map +1 -0
  273. package/build/types/components/PerformanceTab.d.ts +8 -0
  274. package/build/types/components/PerformanceTab.d.ts.map +1 -0
  275. package/build/types/components/PrimitiveSelectionPanel.d.ts +28 -0
  276. package/build/types/components/PrimitiveSelectionPanel.d.ts.map +1 -0
  277. package/build/types/components/issueTypes.d.ts +16 -0
  278. package/build/types/components/issueTypes.d.ts.map +1 -0
  279. package/build/types/components/resolveComponentName.d.ts +3 -0
  280. package/build/types/components/resolveComponentName.d.ts.map +1 -0
  281. package/build/types/components/testHelpers.d.ts +2 -0
  282. package/build/types/components/testHelpers.d.ts.map +1 -0
  283. package/build/types/css.d.d.ts +4 -0
  284. package/build/types/css.d.d.ts.map +1 -0
  285. package/build/types/fiber/DegradationNotice.d.ts +8 -0
  286. package/build/types/fiber/DegradationNotice.d.ts.map +1 -0
  287. package/build/types/fiber/DevtoolsHook.d.ts +7 -0
  288. package/build/types/fiber/DevtoolsHook.d.ts.map +1 -0
  289. package/build/types/fiber/FiberAccess.d.ts +2 -0
  290. package/build/types/fiber/FiberAccess.d.ts.map +1 -0
  291. package/build/types/fiber/FiberInspection.d.ts +6 -0
  292. package/build/types/fiber/FiberInspection.d.ts.map +1 -0
  293. package/build/types/fiber/FiberTags.d.ts +33 -0
  294. package/build/types/fiber/FiberTags.d.ts.map +1 -0
  295. package/build/types/fiber/HookStateInspector.d.ts +45 -0
  296. package/build/types/fiber/HookStateInspector.d.ts.map +1 -0
  297. package/build/types/fiber/SafeFiberOperation.d.ts +7 -0
  298. package/build/types/fiber/SafeFiberOperation.d.ts.map +1 -0
  299. package/build/types/fiber/capabilities.d.ts +38 -0
  300. package/build/types/fiber/capabilities.d.ts.map +1 -0
  301. package/build/types/fiber/traverseFiber.d.ts +5 -0
  302. package/build/types/fiber/traverseFiber.d.ts.map +1 -0
  303. package/build/types/fiber/types.d.ts +87 -0
  304. package/build/types/fiber/types.d.ts.map +1 -0
  305. package/build/types/fiber/validation.d.ts +10 -0
  306. package/build/types/fiber/validation.d.ts.map +1 -0
  307. package/build/types/hooks/createPollingStore.d.ts +5 -0
  308. package/build/types/hooks/createPollingStore.d.ts.map +1 -0
  309. package/build/types/hooks/useActiveComponents.d.ts +3 -0
  310. package/build/types/hooks/useActiveComponents.d.ts.map +1 -0
  311. package/build/types/hooks/useComponentRegistry.d.ts +3 -0
  312. package/build/types/hooks/useComponentRegistry.d.ts.map +1 -0
  313. package/build/types/hooks/useComputeSelectors.d.ts +7 -0
  314. package/build/types/hooks/useComputeSelectors.d.ts.map +1 -0
  315. package/build/types/hooks/useConsoleLogs.d.ts +7 -0
  316. package/build/types/hooks/useConsoleLogs.d.ts.map +1 -0
  317. package/build/types/hooks/useInspectorSelection.d.ts +9 -0
  318. package/build/types/hooks/useInspectorSelection.d.ts.map +1 -0
  319. package/build/types/hooks/useMetrics.d.ts +3 -0
  320. package/build/types/hooks/useMetrics.d.ts.map +1 -0
  321. package/build/types/hooks/usePersistedState.d.ts +1 -0
  322. package/build/types/hooks/usePersistedState.d.ts.map +1 -0
  323. package/build/types/hooks/useRecommendations.d.ts +10 -0
  324. package/build/types/hooks/useRecommendations.d.ts.map +1 -0
  325. package/build/types/hooks/useSharedTick.d.ts +1 -0
  326. package/build/types/hooks/useSharedTick.d.ts.map +1 -0
  327. package/build/types/hooks/useTimeElapsed.d.ts +1 -0
  328. package/build/types/hooks/useTimeElapsed.d.ts.map +1 -0
  329. package/build/types/hooks/useTrackerSubscription.d.ts +16 -0
  330. package/build/types/hooks/useTrackerSubscription.d.ts.map +1 -0
  331. package/build/types/hooks/useUnusedFieldAnalysis.d.ts +8 -0
  332. package/build/types/hooks/useUnusedFieldAnalysis.d.ts.map +1 -0
  333. package/build/types/index.d.ts +21 -0
  334. package/build/types/index.d.ts.map +1 -0
  335. package/build/types/inspector/ClickToInspectSystem.d.ts +40 -0
  336. package/build/types/inspector/ClickToInspectSystem.d.ts.map +1 -0
  337. package/build/types/inspector/components/ComponentLabel.d.ts +3 -0
  338. package/build/types/inspector/components/ComponentLabel.d.ts.map +1 -0
  339. package/build/types/inspector/components/InspectorBanner.d.ts +5 -0
  340. package/build/types/inspector/components/InspectorBanner.d.ts.map +1 -0
  341. package/build/types/inspector/components/InspectorOverlay.d.ts +3 -0
  342. package/build/types/inspector/components/InspectorOverlay.d.ts.map +1 -0
  343. package/build/types/inspector/components/SelectionHighlight.d.ts +3 -0
  344. package/build/types/inspector/components/SelectionHighlight.d.ts.map +1 -0
  345. package/build/types/inspector/createClickToInspect.d.ts +3 -0
  346. package/build/types/inspector/createClickToInspect.d.ts.map +1 -0
  347. package/build/types/inspector/hooks/useAnimatedBounds.d.ts +2 -0
  348. package/build/types/inspector/hooks/useAnimatedBounds.d.ts.map +1 -0
  349. package/build/types/inspector/index.d.ts +13 -0
  350. package/build/types/inspector/index.d.ts.map +1 -0
  351. package/build/types/inspector/inspectorController.d.ts +2 -0
  352. package/build/types/inspector/inspectorController.d.ts.map +1 -0
  353. package/build/types/inspector/types.d.ts +94 -0
  354. package/build/types/inspector/types.d.ts.map +1 -0
  355. package/build/types/inspector/utils/elementBounds.d.ts +3 -0
  356. package/build/types/inspector/utils/elementBounds.d.ts.map +1 -0
  357. package/build/types/inspector/utils/interpolation.d.ts +7 -0
  358. package/build/types/inspector/utils/interpolation.d.ts.map +1 -0
  359. package/build/types/inspector/utils/labelPositioning.d.ts +3 -0
  360. package/build/types/inspector/utils/labelPositioning.d.ts.map +1 -0
  361. package/build/types/mocking/MockCacheKeyGenerator.d.ts +41 -0
  362. package/build/types/mocking/MockCacheKeyGenerator.d.ts.map +1 -0
  363. package/build/types/mocking/MockManager.d.ts +103 -0
  364. package/build/types/mocking/MockManager.d.ts.map +1 -0
  365. package/build/types/prototyping/PrototypeOverrideStore.d.ts +33 -0
  366. package/build/types/prototyping/PrototypeOverrideStore.d.ts.map +1 -0
  367. package/build/types/prototyping/index.d.ts +1 -0
  368. package/build/types/prototyping/index.d.ts.map +1 -0
  369. package/build/types/public/vite.d.ts +2 -0
  370. package/build/types/public/vite.d.ts.map +1 -0
  371. package/build/types/register.d.ts +1 -0
  372. package/build/types/register.d.ts.map +1 -0
  373. package/build/types/scss.d.d.ts +6 -0
  374. package/build/types/scss.d.d.ts.map +1 -0
  375. package/build/types/store/ComputeStore.d.ts +47 -0
  376. package/build/types/store/ComputeStore.d.ts.map +1 -0
  377. package/build/types/store/ConsoleLogStore.d.ts +29 -0
  378. package/build/types/store/ConsoleLogStore.d.ts.map +1 -0
  379. package/build/types/store/MetricsStore.d.ts +42 -0
  380. package/build/types/store/MetricsStore.d.ts.map +1 -0
  381. package/build/types/store/MonitorStore.d.ts +86 -0
  382. package/build/types/store/MonitorStore.d.ts.map +1 -0
  383. package/build/types/store/SubscribableStore.d.ts +6 -0
  384. package/build/types/store/SubscribableStore.d.ts.map +1 -0
  385. package/build/types/store/WindowErrorStore.d.ts +32 -0
  386. package/build/types/store/WindowErrorStore.d.ts.map +1 -0
  387. package/build/types/styles.d.ts +1 -0
  388. package/build/types/styles.d.ts.map +1 -0
  389. package/build/types/types/compute.d.ts +73 -0
  390. package/build/types/types/compute.d.ts.map +1 -0
  391. package/build/types/types/emissions.d.ts +24 -0
  392. package/build/types/types/emissions.d.ts.map +1 -0
  393. package/build/types/types/index.d.ts +143 -0
  394. package/build/types/types/index.d.ts.map +1 -0
  395. package/build/types/utils/ActionLifecycleTracker.d.ts +39 -0
  396. package/build/types/utils/ActionLifecycleTracker.d.ts.map +1 -0
  397. package/build/types/utils/CacheEfficiencyAnalyzer.d.ts +45 -0
  398. package/build/types/utils/CacheEfficiencyAnalyzer.d.ts.map +1 -0
  399. package/build/types/utils/CircularBuffer.d.ts +18 -0
  400. package/build/types/utils/CircularBuffer.d.ts.map +1 -0
  401. package/build/types/utils/ComponentContextCapture.d.ts +29 -0
  402. package/build/types/utils/ComponentContextCapture.d.ts.map +1 -0
  403. package/build/types/utils/ComponentPrimitiveDiscovery.d.ts +62 -0
  404. package/build/types/utils/ComponentPrimitiveDiscovery.d.ts.map +1 -0
  405. package/build/types/utils/ComponentQueryRegistry.d.ts +91 -0
  406. package/build/types/utils/ComponentQueryRegistry.d.ts.map +1 -0
  407. package/build/types/utils/ComputeMonitor.d.ts +14 -0
  408. package/build/types/utils/ComputeMonitor.d.ts.map +1 -0
  409. package/build/types/utils/EventTimeline.d.ts +102 -0
  410. package/build/types/utils/EventTimeline.d.ts.map +1 -0
  411. package/build/types/utils/LinkTraversalTracker.d.ts +43 -0
  412. package/build/types/utils/LinkTraversalTracker.d.ts.map +1 -0
  413. package/build/types/utils/MockDataGenerator.d.ts +23 -0
  414. package/build/types/utils/MockDataGenerator.d.ts.map +1 -0
  415. package/build/types/utils/ObservableClientMonitor.d.ts +62 -0
  416. package/build/types/utils/ObservableClientMonitor.d.ts.map +1 -0
  417. package/build/types/utils/PerformanceRecommendationEngine.d.ts +67 -0
  418. package/build/types/utils/PerformanceRecommendationEngine.d.ts.map +1 -0
  419. package/build/types/utils/PropertyAccessTracker.d.ts +50 -0
  420. package/build/types/utils/PropertyAccessTracker.d.ts.map +1 -0
  421. package/build/types/utils/RecommendationMatcher.d.ts +5 -0
  422. package/build/types/utils/RecommendationMatcher.d.ts.map +1 -0
  423. package/build/types/utils/SubscriptionTracker.d.ts +17 -0
  424. package/build/types/utils/SubscriptionTracker.d.ts.map +1 -0
  425. package/build/types/utils/UnusedFieldAnalyzer.d.ts +46 -0
  426. package/build/types/utils/UnusedFieldAnalyzer.d.ts.map +1 -0
  427. package/build/types/utils/WaterfallDetector.d.ts +28 -0
  428. package/build/types/utils/WaterfallDetector.d.ts.map +1 -0
  429. package/build/types/utils/computePayload.d.ts +3 -0
  430. package/build/types/utils/computePayload.d.ts.map +1 -0
  431. package/build/types/utils/computeRequest.d.ts +20 -0
  432. package/build/types/utils/computeRequest.d.ts.map +1 -0
  433. package/build/types/utils/format.d.ts +5 -0
  434. package/build/types/utils/format.d.ts.map +1 -0
  435. package/build/types/utils/logger.d.ts +2 -0
  436. package/build/types/utils/logger.d.ts.map +1 -0
  437. package/build/types/vite/constants.d.ts +1 -0
  438. package/build/types/vite/constants.d.ts.map +1 -0
  439. package/build/types/vite/hookInstaller.d.ts +1 -0
  440. package/build/types/vite/hookInstaller.d.ts.map +1 -0
  441. package/build/types/vite/index.d.ts +20 -0
  442. package/build/types/vite/index.d.ts.map +1 -0
  443. 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":"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","ignoreList":[]}