@osdk/react-devtools 0.10.0 → 0.10.1-main-e39a72892d538f3130e2cd51cee05d83d11fa493

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 (199) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/build/esm/DevToolsContext.js.map +1 -1
  3. package/build/esm/components/ActionMetrics.js +2 -2
  4. package/build/esm/components/ActionMetrics.js.map +1 -1
  5. package/build/esm/components/BubbleChart.js +1 -1
  6. package/build/esm/components/BubbleChart.js.map +1 -1
  7. package/build/esm/components/CacheInspectorTab.js +1 -1
  8. package/build/esm/components/CacheInspectorTab.js.map +1 -1
  9. package/build/esm/components/CacheMetrics.js +1 -1
  10. package/build/esm/components/CacheMetrics.js.map +1 -1
  11. package/build/esm/components/ComponentCard.js +1 -1
  12. package/build/esm/components/ComponentCard.js.map +1 -1
  13. package/build/esm/components/ComputeTab.js +6 -6
  14. package/build/esm/components/ComputeTab.js.map +1 -1
  15. package/build/esm/components/CopyableCodeBlock.js.map +1 -1
  16. package/build/esm/components/DebuggingTab.js +2 -2
  17. package/build/esm/components/DebuggingTab.js.map +1 -1
  18. package/build/esm/components/HookRow.js.map +1 -1
  19. package/build/esm/components/ImprovementsTab.js.map +1 -1
  20. package/build/esm/components/InspectorSelectionHeader.js.map +1 -1
  21. package/build/esm/components/InterceptTab.js +5 -5
  22. package/build/esm/components/InterceptTab.js.map +1 -1
  23. package/build/esm/components/IssueCard.js.map +1 -1
  24. package/build/esm/components/LogEntryCard.js.map +1 -1
  25. package/build/esm/components/MockEditor.js.map +1 -1
  26. package/build/esm/components/MonitorErrorBoundary.js.map +1 -1
  27. package/build/esm/components/MonitoringPanel.js +1 -1
  28. package/build/esm/components/MonitoringPanel.js.map +1 -1
  29. package/build/esm/components/ObjectLoadingMetrics.js.map +1 -1
  30. package/build/esm/components/OsdkAppErrorBoundary.js.map +1 -1
  31. package/build/esm/components/OsdkDevTools.js.map +1 -1
  32. package/build/esm/components/OverrideEditor.js.map +1 -1
  33. package/build/esm/components/PerformanceTab.js +8 -8
  34. package/build/esm/components/PerformanceTab.js.map +1 -1
  35. package/build/esm/components/PrimitiveSelectionPanel.js +1 -1
  36. package/build/esm/components/PrimitiveSelectionPanel.js.map +1 -1
  37. package/build/esm/components/resolveComponentName.js +2 -2
  38. package/build/esm/components/resolveComponentName.js.map +1 -1
  39. package/build/esm/components/testHelpers.js.map +1 -1
  40. package/build/esm/fiber/DegradationNotice.js +2 -2
  41. package/build/esm/fiber/DegradationNotice.js.map +1 -1
  42. package/build/esm/fiber/DevtoolsHook.js +4 -4
  43. package/build/esm/fiber/DevtoolsHook.js.map +1 -1
  44. package/build/esm/fiber/FiberAccess.js.map +1 -1
  45. package/build/esm/fiber/FiberInspection.js.map +1 -1
  46. package/build/esm/fiber/FiberTags.js.map +1 -1
  47. package/build/esm/fiber/HookStateInspector.js.map +1 -1
  48. package/build/esm/fiber/SafeFiberOperation.js.map +1 -1
  49. package/build/esm/fiber/capabilities.js.map +1 -1
  50. package/build/esm/fiber/traverseFiber.js.map +1 -1
  51. package/build/esm/fiber/types.js.map +1 -1
  52. package/build/esm/fiber/validation.js +1 -1
  53. package/build/esm/fiber/validation.js.map +1 -1
  54. package/build/esm/hooks/createPollingStore.js.map +1 -1
  55. package/build/esm/hooks/useActiveComponents.js.map +1 -1
  56. package/build/esm/hooks/useComponentRegistry.js.map +1 -1
  57. package/build/esm/hooks/useComputeSelectors.js.map +1 -1
  58. package/build/esm/hooks/useConsoleLogs.js.map +1 -1
  59. package/build/esm/hooks/useInspectorSelection.js.map +1 -1
  60. package/build/esm/hooks/useMetrics.js.map +1 -1
  61. package/build/esm/hooks/usePersistedState.js.map +1 -1
  62. package/build/esm/hooks/useRecommendations.js +1 -1
  63. package/build/esm/hooks/useRecommendations.js.map +1 -1
  64. package/build/esm/hooks/useSharedTick.js.map +1 -1
  65. package/build/esm/hooks/useTimeElapsed.js.map +1 -1
  66. package/build/esm/hooks/useTrackerSubscription.js.map +1 -1
  67. package/build/esm/hooks/useUnusedFieldAnalysis.js.map +1 -1
  68. package/build/esm/inspector/ClickToInspectSystem.js.map +1 -1
  69. package/build/esm/inspector/components/ComponentLabel.js.map +1 -1
  70. package/build/esm/inspector/components/InspectorBanner.js.map +1 -1
  71. package/build/esm/inspector/components/InspectorOverlay.js.map +1 -1
  72. package/build/esm/inspector/components/SelectionHighlight.js.map +1 -1
  73. package/build/esm/inspector/createClickToInspect.js.map +1 -1
  74. package/build/esm/inspector/hooks/useAnimatedBounds.js.map +1 -1
  75. package/build/esm/inspector/inspectorController.js.map +1 -1
  76. package/build/esm/inspector/utils/elementBounds.js.map +1 -1
  77. package/build/esm/inspector/utils/interpolation.js.map +1 -1
  78. package/build/esm/inspector/utils/labelPositioning.js.map +1 -1
  79. package/build/esm/mocking/MockCacheKeyGenerator.js +3 -3
  80. package/build/esm/mocking/MockCacheKeyGenerator.js.map +1 -1
  81. package/build/esm/mocking/MockManager.js +4 -4
  82. package/build/esm/mocking/MockManager.js.map +1 -1
  83. package/build/esm/prototyping/PrototypeOverrideStore.js +1 -1
  84. package/build/esm/prototyping/PrototypeOverrideStore.js.map +1 -1
  85. package/build/esm/register.js.map +1 -1
  86. package/build/esm/store/ComputeStore.js.map +1 -1
  87. package/build/esm/store/ConsoleLogStore.js +2 -2
  88. package/build/esm/store/ConsoleLogStore.js.map +1 -1
  89. package/build/esm/store/MetricsStore.js.map +1 -1
  90. package/build/esm/store/MonitorStore.js.map +1 -1
  91. package/build/esm/store/WindowErrorStore.js.map +1 -1
  92. package/build/esm/styles.js.map +1 -1
  93. package/build/esm/types/compute.js.map +1 -1
  94. package/build/esm/utils/ActionLifecycleTracker.js.map +1 -1
  95. package/build/esm/utils/CacheEfficiencyAnalyzer.js.map +1 -1
  96. package/build/esm/utils/ComponentContextCapture.js +10 -10
  97. package/build/esm/utils/ComponentContextCapture.js.map +1 -1
  98. package/build/esm/utils/ComponentPrimitiveDiscovery.js.map +1 -1
  99. package/build/esm/utils/ComponentQueryRegistry.js +8 -8
  100. package/build/esm/utils/ComponentQueryRegistry.js.map +1 -1
  101. package/build/esm/utils/ComputeMonitor.js +2 -2
  102. package/build/esm/utils/ComputeMonitor.js.map +1 -1
  103. package/build/esm/utils/EventTimeline.js.map +1 -1
  104. package/build/esm/utils/LinkTraversalTracker.js +2 -2
  105. package/build/esm/utils/LinkTraversalTracker.js.map +1 -1
  106. package/build/esm/utils/MockDataGenerator.js +4 -4
  107. package/build/esm/utils/MockDataGenerator.js.map +1 -1
  108. package/build/esm/utils/ObservableClientMonitor.js +2 -2
  109. package/build/esm/utils/ObservableClientMonitor.js.map +1 -1
  110. package/build/esm/utils/PerformanceRecommendationEngine.js +1 -1
  111. package/build/esm/utils/PerformanceRecommendationEngine.js.map +1 -1
  112. package/build/esm/utils/PropertyAccessTracker.js +3 -3
  113. package/build/esm/utils/PropertyAccessTracker.js.map +1 -1
  114. package/build/esm/utils/RecommendationMatcher.js.map +1 -1
  115. package/build/esm/utils/SubscriptionTracker.js +1 -1
  116. package/build/esm/utils/SubscriptionTracker.js.map +1 -1
  117. package/build/esm/utils/UnusedFieldAnalyzer.js +6 -7
  118. package/build/esm/utils/UnusedFieldAnalyzer.js.map +1 -1
  119. package/build/esm/utils/WaterfallDetector.js.map +1 -1
  120. package/build/esm/utils/computePayload.js +2 -2
  121. package/build/esm/utils/computePayload.js.map +1 -1
  122. package/build/esm/utils/computeRequest.js.map +1 -1
  123. package/build/esm/utils/format.js.map +1 -1
  124. package/build/esm/vite/hookInstaller.js.map +1 -1
  125. package/build/esm/vite/index.js +2 -3
  126. package/build/esm/vite/index.js.map +1 -1
  127. package/build/types/DevToolsContext.d.ts.map +1 -1
  128. package/build/types/components/ActionMetrics.d.ts.map +1 -1
  129. package/build/types/components/BubbleChart.d.ts.map +1 -1
  130. package/build/types/components/CacheInspectorTab.d.ts.map +1 -1
  131. package/build/types/components/CacheMetrics.d.ts.map +1 -1
  132. package/build/types/components/ComponentCard.d.ts.map +1 -1
  133. package/build/types/components/ComputeTab.d.ts.map +1 -1
  134. package/build/types/components/CopyableCodeBlock.d.ts.map +1 -1
  135. package/build/types/components/DebuggingTab.d.ts.map +1 -1
  136. package/build/types/components/HookRow.d.ts.map +1 -1
  137. package/build/types/components/ImprovementsTab.d.ts.map +1 -1
  138. package/build/types/components/InspectorSelectionHeader.d.ts.map +1 -1
  139. package/build/types/components/InterceptTab.d.ts.map +1 -1
  140. package/build/types/components/IssueCard.d.ts.map +1 -1
  141. package/build/types/components/LogEntryCard.d.ts.map +1 -1
  142. package/build/types/components/MockEditor.d.ts.map +1 -1
  143. package/build/types/components/MonitorErrorBoundary.d.ts.map +1 -1
  144. package/build/types/components/MonitoringPanel.d.ts.map +1 -1
  145. package/build/types/components/ObjectLoadingMetrics.d.ts.map +1 -1
  146. package/build/types/components/OsdkAppErrorBoundary.d.ts.map +1 -1
  147. package/build/types/components/OsdkDevTools.d.ts.map +1 -1
  148. package/build/types/components/OverrideEditor.d.ts.map +1 -1
  149. package/build/types/components/PerformanceTab.d.ts.map +1 -1
  150. package/build/types/components/PrimitiveSelectionPanel.d.ts.map +1 -1
  151. package/build/types/components/resolveComponentName.d.ts.map +1 -1
  152. package/build/types/components/testHelpers.d.ts.map +1 -1
  153. package/build/types/fiber/DegradationNotice.d.ts.map +1 -1
  154. package/build/types/fiber/DevtoolsHook.d.ts.map +1 -1
  155. package/build/types/fiber/FiberInspection.d.ts.map +1 -1
  156. package/build/types/fiber/HookStateInspector.d.ts.map +1 -1
  157. package/build/types/fiber/capabilities.d.ts.map +1 -1
  158. package/build/types/fiber/traverseFiber.d.ts.map +1 -1
  159. package/build/types/fiber/types.d.ts.map +1 -1
  160. package/build/types/hooks/useActiveComponents.d.ts.map +1 -1
  161. package/build/types/hooks/useComponentRegistry.d.ts.map +1 -1
  162. package/build/types/hooks/useComputeSelectors.d.ts.map +1 -1
  163. package/build/types/hooks/useConsoleLogs.d.ts.map +1 -1
  164. package/build/types/hooks/useInspectorSelection.d.ts.map +1 -1
  165. package/build/types/hooks/useMetrics.d.ts.map +1 -1
  166. package/build/types/hooks/useRecommendations.d.ts.map +1 -1
  167. package/build/types/hooks/useUnusedFieldAnalysis.d.ts.map +1 -1
  168. package/build/types/inspector/ClickToInspectSystem.d.ts.map +1 -1
  169. package/build/types/inspector/components/ComponentLabel.d.ts.map +1 -1
  170. package/build/types/inspector/components/InspectorOverlay.d.ts.map +1 -1
  171. package/build/types/inspector/components/SelectionHighlight.d.ts.map +1 -1
  172. package/build/types/inspector/hooks/useAnimatedBounds.d.ts.map +1 -1
  173. package/build/types/mocking/MockManager.d.ts.map +1 -1
  174. package/build/types/store/ComputeStore.d.ts.map +1 -1
  175. package/build/types/store/ConsoleLogStore.d.ts.map +1 -1
  176. package/build/types/store/MetricsStore.d.ts.map +1 -1
  177. package/build/types/store/MonitorStore.d.ts.map +1 -1
  178. package/build/types/store/WindowErrorStore.d.ts.map +1 -1
  179. package/build/types/styles.d.ts +0 -1
  180. package/build/types/styles.d.ts.map +1 -1
  181. package/build/types/types/compute.d.ts.map +1 -1
  182. package/build/types/utils/ActionLifecycleTracker.d.ts.map +1 -1
  183. package/build/types/utils/CacheEfficiencyAnalyzer.d.ts.map +1 -1
  184. package/build/types/utils/ComponentContextCapture.d.ts.map +1 -1
  185. package/build/types/utils/ComponentPrimitiveDiscovery.d.ts.map +1 -1
  186. package/build/types/utils/ComponentQueryRegistry.d.ts.map +1 -1
  187. package/build/types/utils/ComputeMonitor.d.ts.map +1 -1
  188. package/build/types/utils/EventTimeline.d.ts.map +1 -1
  189. package/build/types/utils/LinkTraversalTracker.d.ts.map +1 -1
  190. package/build/types/utils/MockDataGenerator.d.ts.map +1 -1
  191. package/build/types/utils/ObservableClientMonitor.d.ts.map +1 -1
  192. package/build/types/utils/PerformanceRecommendationEngine.d.ts.map +1 -1
  193. package/build/types/utils/PropertyAccessTracker.d.ts.map +1 -1
  194. package/build/types/utils/SubscriptionTracker.d.ts.map +1 -1
  195. package/build/types/utils/UnusedFieldAnalyzer.d.ts.map +1 -1
  196. package/build/types/utils/WaterfallDetector.d.ts.map +1 -1
  197. package/build/types/utils/computeRequest.d.ts.map +1 -1
  198. package/build/types/vite/index.d.ts.map +1 -1
  199. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleLogStore.js","names":["CircularBuffer","SubscribableStore","CONSOLE_LEVELS","entryCounter","nextId","Date","now","MAX_DEPTH","MAX_STRING_SIZE","MAX_TOTAL_SIZE","INTERNAL_FRAME_PATTERN","BROWSER_LOGGER_CSS","isBrowserLoggerCall","args","startsWith","includes","CHROME_FRAME_REGEX_PAREN","CHROME_FRAME_REGEX_BARE","FIREFOX_FRAME_REGEX","serializeValue","value","depth","seen","String","type","description","name","obj","Node","tagName","Error","stack","message","has","Array","isArray","length","add","items","i","push","join","entries","key","Object","keys","val","delete","serializeArg","arg","WeakSet","result","slice","getCallerLocation","err","undefined","lines","split","line","test","match","exec","filePath","lineNum","fileName","pop","capEntrySize","totalSize","longestIndex","longestLength","replacement","ConsoleLogStore","cachedEntries","originals","Map","wrappers","installed","suppressed","capturing","notifyScheduled","constructor","capacity","install","level","original","console","set","store","wrapper","skipCapture","source","Function","prototype","apply","call","queueMicrotask","serializedArgs","map","entry","id","timestamp","scheduleNotify","uninstall","get","ourWrapper","clear","suppress","unsuppress","getEntries","toArray","getSize","notifySubscribers","dispose","clearSubscribers"],"sources":["ConsoleLogStore.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 \"../utils/CircularBuffer.js\";\nimport { SubscribableStore } from \"./SubscribableStore.js\";\n\nexport type ConsoleLogLevel = \"log\" | \"warn\" | \"error\" | \"info\" | \"debug\";\n\nconst CONSOLE_LEVELS: readonly ConsoleLogLevel[] = [\n \"log\",\n \"warn\",\n \"error\",\n \"info\",\n \"debug\",\n] as const;\n\nexport interface ConsoleLogEntry {\n readonly id: string;\n readonly level: ConsoleLogLevel;\n readonly args: readonly string[];\n readonly timestamp: number;\n readonly source?: string;\n}\n\nlet entryCounter = 0;\n\nfunction nextId(): string {\n return `console-${++entryCounter}-${Date.now()}`;\n}\n\nconst MAX_DEPTH = 3;\nconst MAX_STRING_SIZE = 10240; // 10KB\nconst MAX_TOTAL_SIZE = 10240; // 10KB\n\nconst INTERNAL_FRAME_PATTERN =\n /ConsoleLogStore|serializeArg|serializeValue|getCallerLocation|capEntrySize|osdkConsoleWrapper/;\n\n// BrowserLogger formats calls with %c CSS styling and a \"border: 1px solid\"\n// pattern from its createStyle(). We filter these from the devtools console\n// because devtools monitors the same operations through its own instrumentation.\nconst BROWSER_LOGGER_CSS = \"border: 1px solid\";\nfunction isBrowserLoggerCall(args: unknown[]): boolean {\n return typeof args[0] === \"string\"\n && args[0].startsWith(\"%c\")\n && typeof args[1] === \"string\"\n && args[1].includes(BROWSER_LOGGER_CSS);\n}\n\nconst CHROME_FRAME_REGEX_PAREN = /at\\s+.*?\\((.*?):(\\d+):\\d+\\)/;\nconst CHROME_FRAME_REGEX_BARE = /at\\s+(.*?):(\\d+):\\d+/;\nconst FIREFOX_FRAME_REGEX = /@(.*?):(\\d+):\\d+/;\n\nfunction serializeValue(\n value: unknown,\n depth: number,\n seen: WeakSet<object>,\n): string {\n if (value == null) {\n return String(value);\n }\n\n const type = typeof value;\n\n if (type === \"string\") {\n if (depth === 0) {\n return value as string;\n }\n return `\"${value as string}\"`;\n }\n if (type === \"number\" || type === \"boolean\") {\n return String(value);\n }\n if (type === \"bigint\") {\n return `BigInt(${String(value)})`;\n }\n if (type === \"symbol\") {\n return `Symbol(${(value as symbol).description ?? \"\"})`;\n }\n if (type === \"function\") {\n return `[Function: ${\n (value as (...args: readonly unknown[]) => unknown).name || \"anonymous\"\n }]`;\n }\n\n const obj = value as object;\n\n if (typeof Node !== \"undefined\" && obj instanceof Node) {\n const el = obj as { tagName?: string };\n return `[HTMLElement: ${el.tagName ?? \"unknown\"}]`;\n }\n\n if (obj instanceof Error) {\n return obj.stack ?? obj.message;\n }\n\n if (seen.has(obj)) {\n return \"[Circular]\";\n }\n\n if (depth >= MAX_DEPTH) {\n if (Array.isArray(obj)) {\n return `[Array(${obj.length})]`;\n }\n return \"[Object]\";\n }\n\n seen.add(obj);\n try {\n if (Array.isArray(obj)) {\n const items: string[] = [];\n for (let i = 0; i < obj.length; i++) {\n items.push(serializeValue(obj[i], depth + 1, seen));\n }\n return `[${items.join(\",\")}]`;\n }\n\n const entries: string[] = [];\n for (const key of Object.keys(obj)) {\n const val = serializeValue(\n (obj as Record<string, unknown>)[key],\n depth + 1,\n seen,\n );\n entries.push(`\"${key}\":${val}`);\n }\n return `{${entries.join(\",\")}}`;\n } catch {\n return String(obj);\n } finally {\n seen.delete(obj);\n }\n}\n\nfunction serializeArg(arg: unknown): string {\n const seen = new WeakSet<object>();\n const result = serializeValue(arg, 0, seen);\n if (result.length > MAX_STRING_SIZE) {\n return result.slice(0, MAX_STRING_SIZE) + \"...truncated\";\n }\n return result;\n}\n\nfunction getCallerLocation(): string | undefined {\n const err = new Error();\n const stack = err.stack;\n if (!stack) {\n return undefined;\n }\n\n const lines = stack.split(\"\\n\");\n\n for (const line of lines) {\n if (INTERNAL_FRAME_PATTERN.test(line)) {\n continue;\n }\n\n let match = CHROME_FRAME_REGEX_PAREN.exec(line);\n if (!match) {\n match = CHROME_FRAME_REGEX_BARE.exec(line);\n }\n if (!match) {\n match = FIREFOX_FRAME_REGEX.exec(line);\n }\n\n if (match) {\n const filePath = match[1];\n const lineNum = match[2];\n const fileName = filePath.split(\"/\").pop() ?? filePath;\n return `${fileName}:${lineNum}`;\n }\n }\n\n return undefined;\n}\n\nfunction capEntrySize(args: string[]): string[] {\n let totalSize = 0;\n for (const arg of args) {\n totalSize += arg.length;\n }\n\n if (totalSize <= MAX_TOTAL_SIZE) {\n return args;\n }\n\n const result = args.slice();\n while (totalSize > MAX_TOTAL_SIZE) {\n let longestIndex = 0;\n let longestLength = 0;\n for (let i = 0; i < result.length; i++) {\n if (result[i].length > longestLength) {\n longestLength = result[i].length;\n longestIndex = i;\n }\n }\n if (longestLength <= 40) {\n break;\n }\n const replacement = `...truncated (${longestLength} bytes)`;\n totalSize += replacement.length - longestLength;\n result[longestIndex] = replacement;\n }\n return result;\n}\n\nexport class ConsoleLogStore extends SubscribableStore {\n private readonly entries: CircularBuffer<ConsoleLogEntry>;\n private cachedEntries: readonly ConsoleLogEntry[] | null = null;\n private readonly originals = new Map<\n ConsoleLogLevel,\n (...args: unknown[]) => void\n >();\n private readonly wrappers = new Map<\n ConsoleLogLevel,\n (...args: unknown[]) => void\n >();\n private installed = false;\n private suppressed = false;\n private capturing = false;\n private notifyScheduled = false;\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\n for (const level of CONSOLE_LEVELS) {\n const original = console[level]; // eslint-disable-line no-console\n this.originals.set(level, original);\n\n const store = this;\n const wrapper = function osdkConsoleWrapper(\n this: Console,\n ...args: unknown[]\n ) {\n // Capture the source synchronously, before any async boundary, so the\n // user's frame is still on the stack. The in-panel `entry.source` is\n // canonical and accurate — verified by ConsoleLogStore.test.ts.\n //\n // Browser DevTools source-link attribution (the clickable link beside\n // each console row) is decided by V8 and follows wherever the original\n // method was *called*. Routing the call through Function.prototype.apply\n // is best-effort; in practice the link may still resolve to the wrapper\n // file in some Chromium versions. There is no fully-portable JS-level\n // mitigation; if needed, prefer the panel-side source field.\n //\n // Reentrancy note: capture work runs in queueMicrotask, so `capturing`\n // resets between the wrapper microtask and any nested microtask. A\n // getter that calls console.log during serialization may therefore be\n // captured (one extra entry, no infinite loop). Strict synchronous\n // reentrancy guarding is incompatible with the microtask deferral that\n // makes the source attribution improvement possible.\n const skipCapture = store.suppressed || store.capturing\n || isBrowserLoggerCall(args);\n const source = skipCapture ? undefined : getCallerLocation();\n\n Function.prototype.apply.call(original, this ?? console, args);\n\n if (skipCapture) {\n return;\n }\n\n queueMicrotask(() => {\n if (store.capturing) {\n return;\n }\n store.capturing = true;\n try {\n const serializedArgs = capEntrySize(args.map(serializeArg));\n const entry: ConsoleLogEntry = {\n id: nextId(),\n level,\n args: serializedArgs,\n timestamp: Date.now(),\n ...(source !== undefined ? { source } : {}),\n };\n\n store.entries.push(entry);\n store.cachedEntries = null;\n store.scheduleNotify();\n } catch {\n } finally {\n store.capturing = false;\n }\n });\n };\n\n console[level] = wrapper; // eslint-disable-line no-console\n this.wrappers.set(level, wrapper);\n }\n\n this.installed = true;\n }\n\n uninstall(): void {\n if (!this.installed) {\n return;\n }\n\n for (const level of CONSOLE_LEVELS) {\n const original = this.originals.get(level);\n const ourWrapper = this.wrappers.get(level);\n if (original && ourWrapper && console[level] === ourWrapper) { // eslint-disable-line no-console\n console[level] = original; // eslint-disable-line no-console\n }\n }\n\n this.originals.clear();\n this.wrappers.clear();\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 getEntries(): readonly ConsoleLogEntry[] {\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":"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","ignoreList":[]}
1
+ {"version":3,"file":"ConsoleLogStore.js","names":["CircularBuffer","SubscribableStore","CONSOLE_LEVELS","entryCounter","nextId","Date","now","MAX_DEPTH","MAX_STRING_SIZE","MAX_TOTAL_SIZE","INTERNAL_FRAME_PATTERN","BROWSER_LOGGER_CSS","isBrowserLoggerCall","args","startsWith","includes","CHROME_FRAME_REGEX_PAREN","CHROME_FRAME_REGEX_BARE","FIREFOX_FRAME_REGEX","serializeValue","value","depth","seen","String","type","description","name","obj","Node","tagName","Error","stack","message","has","Array","isArray","length","add","items","i","push","join","entries","key","Object","keys","val","delete","serializeArg","arg","WeakSet","result","slice","getCallerLocation","err","undefined","lines","split","line","test","match","exec","filePath","lineNum","fileName","pop","capEntrySize","totalSize","longestIndex","longestLength","replacement","ConsoleLogStore","cachedEntries","originals","Map","wrappers","installed","suppressed","capturing","notifyScheduled","constructor","capacity","install","level","original","console","set","store","wrapper","skipCapture","source","Function","prototype","apply","call","queueMicrotask","serializedArgs","map","entry","id","timestamp","scheduleNotify","uninstall","get","ourWrapper","clear","suppress","unsuppress","getEntries","toArray","getSize","notifySubscribers","dispose","clearSubscribers"],"sources":["ConsoleLogStore.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 \"../utils/CircularBuffer.js\";\nimport { SubscribableStore } from \"./SubscribableStore.js\";\n\nexport type ConsoleLogLevel = \"log\" | \"warn\" | \"error\" | \"info\" | \"debug\";\n\nconst CONSOLE_LEVELS: readonly ConsoleLogLevel[] = [\n \"log\",\n \"warn\",\n \"error\",\n \"info\",\n \"debug\",\n] as const;\n\nexport interface ConsoleLogEntry {\n readonly id: string;\n readonly level: ConsoleLogLevel;\n readonly args: readonly string[];\n readonly timestamp: number;\n readonly source?: string;\n}\n\nlet entryCounter = 0;\n\nfunction nextId(): string {\n return `console-${++entryCounter}-${Date.now()}`;\n}\n\nconst MAX_DEPTH = 3;\nconst MAX_STRING_SIZE = 10240; // 10KB\nconst MAX_TOTAL_SIZE = 10240; // 10KB\n\nconst INTERNAL_FRAME_PATTERN =\n /ConsoleLogStore|serializeArg|serializeValue|getCallerLocation|capEntrySize|osdkConsoleWrapper/;\n\n// BrowserLogger formats calls with %c CSS styling and a \"border: 1px solid\"\n// pattern from its createStyle(). We filter these from the devtools console\n// because devtools monitors the same operations through its own instrumentation.\nconst BROWSER_LOGGER_CSS = \"border: 1px solid\";\nfunction isBrowserLoggerCall(args: unknown[]): boolean {\n return (\n typeof args[0] === \"string\" &&\n args[0].startsWith(\"%c\") &&\n typeof args[1] === \"string\" &&\n args[1].includes(BROWSER_LOGGER_CSS)\n );\n}\n\nconst CHROME_FRAME_REGEX_PAREN = /at\\s+.*?\\((.*?):(\\d+):\\d+\\)/;\nconst CHROME_FRAME_REGEX_BARE = /at\\s+(.*?):(\\d+):\\d+/;\nconst FIREFOX_FRAME_REGEX = /@(.*?):(\\d+):\\d+/;\n\nfunction serializeValue(\n value: unknown,\n depth: number,\n seen: WeakSet<object>\n): string {\n if (value == null) {\n return String(value);\n }\n\n const type = typeof value;\n\n if (type === \"string\") {\n if (depth === 0) {\n return value as string;\n }\n return `\"${value as string}\"`;\n }\n if (type === \"number\" || type === \"boolean\") {\n return String(value);\n }\n if (type === \"bigint\") {\n return `BigInt(${String(value)})`;\n }\n if (type === \"symbol\") {\n return `Symbol(${(value as symbol).description ?? \"\"})`;\n }\n if (type === \"function\") {\n return `[Function: ${\n (value as (...args: readonly unknown[]) => unknown).name || \"anonymous\"\n }]`;\n }\n\n const obj = value as object;\n\n if (typeof Node !== \"undefined\" && obj instanceof Node) {\n const el = obj as { tagName?: string };\n return `[HTMLElement: ${el.tagName ?? \"unknown\"}]`;\n }\n\n if (obj instanceof Error) {\n return obj.stack ?? obj.message;\n }\n\n if (seen.has(obj)) {\n return \"[Circular]\";\n }\n\n if (depth >= MAX_DEPTH) {\n if (Array.isArray(obj)) {\n return `[Array(${obj.length})]`;\n }\n return \"[Object]\";\n }\n\n seen.add(obj);\n try {\n if (Array.isArray(obj)) {\n const items: string[] = [];\n for (let i = 0; i < obj.length; i++) {\n items.push(serializeValue(obj[i], depth + 1, seen));\n }\n return `[${items.join(\",\")}]`;\n }\n\n const entries: string[] = [];\n for (const key of Object.keys(obj)) {\n const val = serializeValue(\n (obj as Record<string, unknown>)[key],\n depth + 1,\n seen\n );\n entries.push(`\"${key}\":${val}`);\n }\n return `{${entries.join(\",\")}}`;\n } catch {\n return String(obj);\n } finally {\n seen.delete(obj);\n }\n}\n\nfunction serializeArg(arg: unknown): string {\n const seen = new WeakSet<object>();\n const result = serializeValue(arg, 0, seen);\n if (result.length > MAX_STRING_SIZE) {\n return `${result.slice(0, MAX_STRING_SIZE)}...truncated`;\n }\n return result;\n}\n\nfunction getCallerLocation(): string | undefined {\n const err = new Error();\n const stack = err.stack;\n if (!stack) {\n return undefined;\n }\n\n const lines = stack.split(\"\\n\");\n\n for (const line of lines) {\n if (INTERNAL_FRAME_PATTERN.test(line)) {\n continue;\n }\n\n let match = CHROME_FRAME_REGEX_PAREN.exec(line);\n if (!match) {\n match = CHROME_FRAME_REGEX_BARE.exec(line);\n }\n if (!match) {\n match = FIREFOX_FRAME_REGEX.exec(line);\n }\n\n if (match) {\n const filePath = match[1];\n const lineNum = match[2];\n const fileName = filePath.split(\"/\").pop() ?? filePath;\n return `${fileName}:${lineNum}`;\n }\n }\n\n return undefined;\n}\n\nfunction capEntrySize(args: string[]): string[] {\n let totalSize = 0;\n for (const arg of args) {\n totalSize += arg.length;\n }\n\n if (totalSize <= MAX_TOTAL_SIZE) {\n return args;\n }\n\n const result = [...args];\n while (totalSize > MAX_TOTAL_SIZE) {\n let longestIndex = 0;\n let longestLength = 0;\n for (let i = 0; i < result.length; i++) {\n if (result[i].length > longestLength) {\n longestLength = result[i].length;\n longestIndex = i;\n }\n }\n if (longestLength <= 40) {\n break;\n }\n const replacement = `...truncated (${longestLength} bytes)`;\n totalSize += replacement.length - longestLength;\n result[longestIndex] = replacement;\n }\n return result;\n}\n\nexport class ConsoleLogStore extends SubscribableStore {\n private readonly entries: CircularBuffer<ConsoleLogEntry>;\n private cachedEntries: readonly ConsoleLogEntry[] | null = null;\n private readonly originals = new Map<\n ConsoleLogLevel,\n (...args: unknown[]) => void\n >();\n private readonly wrappers = new Map<\n ConsoleLogLevel,\n (...args: unknown[]) => void\n >();\n private installed = false;\n private suppressed = false;\n private capturing = false;\n private notifyScheduled = false;\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\n for (const level of CONSOLE_LEVELS) {\n const original = console[level]; // eslint-disable-line no-console\n this.originals.set(level, original);\n\n const store = this;\n const wrapper = function osdkConsoleWrapper(\n this: Console,\n ...args: unknown[]\n ) {\n // Capture the source synchronously, before any async boundary, so the\n // user's frame is still on the stack. The in-panel `entry.source` is\n // canonical and accurate — verified by ConsoleLogStore.test.ts.\n //\n // Browser DevTools source-link attribution (the clickable link beside\n // each console row) is decided by V8 and follows wherever the original\n // method was *called*. Routing the call through Function.prototype.apply\n // is best-effort; in practice the link may still resolve to the wrapper\n // file in some Chromium versions. There is no fully-portable JS-level\n // mitigation; if needed, prefer the panel-side source field.\n //\n // Reentrancy note: capture work runs in queueMicrotask, so `capturing`\n // resets between the wrapper microtask and any nested microtask. A\n // getter that calls console.log during serialization may therefore be\n // captured (one extra entry, no infinite loop). Strict synchronous\n // reentrancy guarding is incompatible with the microtask deferral that\n // makes the source attribution improvement possible.\n const skipCapture =\n store.suppressed || store.capturing || isBrowserLoggerCall(args);\n const source = skipCapture ? undefined : getCallerLocation();\n\n Function.prototype.apply.call(original, this ?? console, args);\n\n if (skipCapture) {\n return;\n }\n\n queueMicrotask(() => {\n if (store.capturing) {\n return;\n }\n store.capturing = true;\n try {\n const serializedArgs = capEntrySize(args.map(serializeArg));\n const entry: ConsoleLogEntry = {\n id: nextId(),\n level,\n args: serializedArgs,\n timestamp: Date.now(),\n ...(source !== undefined ? { source } : {}),\n };\n\n store.entries.push(entry);\n store.cachedEntries = null;\n store.scheduleNotify();\n } catch {\n } finally {\n store.capturing = false;\n }\n });\n };\n\n console[level] = wrapper; // eslint-disable-line no-console\n this.wrappers.set(level, wrapper);\n }\n\n this.installed = true;\n }\n\n uninstall(): void {\n if (!this.installed) {\n return;\n }\n\n for (const level of CONSOLE_LEVELS) {\n const original = this.originals.get(level);\n const ourWrapper = this.wrappers.get(level);\n if (original && ourWrapper && console[level] === ourWrapper) {\n // eslint-disable-line no-console\n console[level] = original; // eslint-disable-line no-console\n }\n }\n\n this.originals.clear();\n this.wrappers.clear();\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 getEntries(): readonly ConsoleLogEntry[] {\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":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsStore.js","names":["CircularBuffer","SubscribableStore","MetricsStore","pendingUpdates","isProcessing","lastSnapshot","intervalId","subscriberCount","actionErrors","cachedAvgNetworkTime","cachedAvgBytesPerObject","networkTimeDirty","bytesPerObjectDirty","constructor","maxOperations","timeSeriesSize","operations","aggregates","cacheHits","cacheMisses","deduplications","optimisticUpdates","totalResponseTime","cachedResponseTime","networkResponseTime","requestsSaved","bytesServedFromCache","totalObjectsFromCache","totalObjectsFromNetwork","revalidations","actionCount","configuredOptimisticActionCount","optimisticActionCount","rollbackActionCount","totalOptimisticRenderTime","totalServerRoundTripTime","totalPerceivedSpeedup","totalOptimisticObjectsAffected","validationCount","totalValidationTime","timeSeries","timestamps","recordCacheHit","signature","responseTime","metadata","objectCount","operation","id","crypto","randomUUID","type","timestamp","Date","now","saved","estimateNetworkTime","queueOperation","recordCacheMiss","recordRevalidation","recordDeduplication","recordOptimisticUpdate","recordActionLifecycle","recordActionValidation","duration","actionName","getSnapshot","snapshot","recent","toArray","rates","calculateRates","reset","clear","Object","assign","length","notifySubscribers","subscribe","callback","unsub","setInterval","updateTimeSeries","clearInterval","dispose","clearSubscribers","push","scheduleProcessBatch","requestIdleCallback","processBatch","setTimeout","batch","splice","updateAggregates","estimateBytes","optimisticConfigured","optimisticObserved","rollback","optimisticRenderTime","serverRoundTripTime","perceivedSpeedup","optimisticObjectsAffected","total","totalRequests","averageValidationTime","averageServerRoundTripTime","cacheHitRate","deduplicationRate","optimisticUpdateRate","averageResponseTime","averageCachedResponseTime","optimisticActionCoverage","configuredOptimisticActionRate","rollbackRate","averageOptimisticRenderTime","averagePerceivedSpeedup","validationTimeSaved","Math","max","currentSecond","floor","lastTimestamp","shift","recentOps","getLast","op","recentMisses","filter","totalTime","reduce","sum","avgObjectCount","recordActionError","error","getActionErrors","reverse","getCacheHitRate"],"sources":["MetricsStore.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 {\n ActionError,\n MetricRates,\n MetricsSnapshot,\n Operation,\n OperationMetadata,\n} from \"../types/index.js\";\nimport { CircularBuffer } from \"../utils/CircularBuffer.js\";\nimport { SubscribableStore } from \"./SubscribableStore.js\";\n\nexport class MetricsStore extends SubscribableStore {\n private readonly maxOperations: number;\n private readonly timeSeriesSize: number;\n private readonly operations: CircularBuffer<Operation>;\n private readonly aggregates: {\n cacheHits: number;\n cacheMisses: number;\n deduplications: number;\n optimisticUpdates: number;\n totalResponseTime: number;\n cachedResponseTime: number;\n networkResponseTime: number;\n requestsSaved: number;\n bytesServedFromCache: number;\n totalObjectsFromCache: number;\n totalObjectsFromNetwork: number;\n revalidations: number;\n actionCount: number;\n configuredOptimisticActionCount: number;\n optimisticActionCount: number;\n rollbackActionCount: number;\n totalOptimisticRenderTime: number;\n totalServerRoundTripTime: number;\n totalPerceivedSpeedup: number;\n totalOptimisticObjectsAffected: number;\n validationCount: number;\n totalValidationTime: number;\n };\n private readonly timeSeries: {\n timestamps: number[];\n cacheHits: number[];\n cacheMisses: number[];\n revalidations: number[];\n deduplications: number[];\n };\n\n private pendingUpdates: Operation[] = [];\n private isProcessing = false;\n private lastSnapshot: MetricsSnapshot | null = null;\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private subscriberCount = 0;\n private actionErrors: ActionError[] = [];\n private cachedAvgNetworkTime: number = 100;\n private cachedAvgBytesPerObject: number = 1024;\n private networkTimeDirty = true;\n private bytesPerObjectDirty = true;\n\n constructor(maxOperations: number = 1000, timeSeriesSize: number = 60) {\n super();\n this.maxOperations = maxOperations;\n this.timeSeriesSize = timeSeriesSize;\n this.operations = new CircularBuffer(maxOperations);\n this.aggregates = {\n cacheHits: 0,\n cacheMisses: 0,\n deduplications: 0,\n optimisticUpdates: 0,\n totalResponseTime: 0,\n cachedResponseTime: 0,\n networkResponseTime: 0,\n requestsSaved: 0,\n bytesServedFromCache: 0,\n totalObjectsFromCache: 0,\n totalObjectsFromNetwork: 0,\n revalidations: 0,\n actionCount: 0,\n configuredOptimisticActionCount: 0,\n optimisticActionCount: 0,\n rollbackActionCount: 0,\n totalOptimisticRenderTime: 0,\n totalServerRoundTripTime: 0,\n totalPerceivedSpeedup: 0,\n totalOptimisticObjectsAffected: 0,\n validationCount: 0,\n totalValidationTime: 0,\n };\n this.timeSeries = {\n timestamps: [],\n cacheHits: [],\n cacheMisses: [],\n revalidations: [],\n deduplications: [],\n };\n }\n\n recordCacheHit(\n signature: string,\n responseTime: number,\n metadata?: OperationMetadata,\n objectCount: number = 1,\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"cache-hit\",\n signature,\n timestamp: Date.now(),\n responseTime,\n saved: this.estimateNetworkTime(signature) - responseTime,\n metadata,\n objectCount,\n };\n\n this.queueOperation(operation);\n }\n\n recordCacheMiss(\n signature: string,\n responseTime: number,\n metadata?: OperationMetadata,\n objectCount: number = 1,\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"cache-miss\",\n signature,\n timestamp: Date.now(),\n responseTime,\n metadata,\n objectCount,\n };\n\n this.queueOperation(operation);\n }\n\n recordRevalidation(\n signature: string,\n responseTime: number,\n metadata?: OperationMetadata,\n objectCount: number = 1,\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"revalidation\",\n signature,\n timestamp: Date.now(),\n responseTime,\n metadata,\n objectCount,\n };\n\n this.queueOperation(operation);\n }\n\n recordDeduplication(\n signature: string,\n metadata?: OperationMetadata,\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"deduplication\",\n signature,\n timestamp: Date.now(),\n saved: this.estimateNetworkTime(signature),\n metadata,\n };\n\n this.queueOperation(operation);\n }\n\n recordOptimisticUpdate(\n signature: string,\n metadata?: OperationMetadata,\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"optimistic-update\",\n signature,\n timestamp: Date.now(),\n saved: this.estimateNetworkTime(signature),\n metadata,\n };\n\n this.queueOperation(operation);\n }\n\n recordActionLifecycle(operation: Operation): void {\n this.queueOperation(operation);\n }\n\n recordActionValidation(\n signature: string,\n duration: number,\n metadata?: OperationMetadata,\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"action-validation\",\n signature,\n timestamp: Date.now(),\n responseTime: duration,\n metadata,\n actionName: metadata?.actionName,\n };\n\n this.queueOperation(operation);\n }\n\n getSnapshot(): MetricsSnapshot {\n if (this.lastSnapshot) {\n return this.lastSnapshot;\n }\n\n const snapshot: MetricsSnapshot = {\n recent: this.operations.toArray(),\n aggregates: { ...this.aggregates },\n rates: this.calculateRates(),\n timeSeries: {\n timestamps: [...this.timeSeries.timestamps],\n cacheHits: [...this.timeSeries.cacheHits],\n cacheMisses: [...this.timeSeries.cacheMisses],\n revalidations: [...this.timeSeries.revalidations],\n deduplications: [...this.timeSeries.deduplications],\n },\n };\n\n this.lastSnapshot = snapshot;\n return snapshot;\n }\n\n reset(): void {\n this.operations.clear();\n Object.assign(this.aggregates, {\n cacheHits: 0,\n cacheMisses: 0,\n deduplications: 0,\n optimisticUpdates: 0,\n totalResponseTime: 0,\n cachedResponseTime: 0,\n networkResponseTime: 0,\n requestsSaved: 0,\n bytesServedFromCache: 0,\n totalObjectsFromCache: 0,\n totalObjectsFromNetwork: 0,\n revalidations: 0,\n actionCount: 0,\n configuredOptimisticActionCount: 0,\n optimisticActionCount: 0,\n rollbackActionCount: 0,\n totalOptimisticRenderTime: 0,\n totalServerRoundTripTime: 0,\n totalPerceivedSpeedup: 0,\n totalOptimisticObjectsAffected: 0,\n validationCount: 0,\n totalValidationTime: 0,\n });\n this.timeSeries.timestamps.length = 0;\n this.timeSeries.cacheHits.length = 0;\n this.timeSeries.cacheMisses.length = 0;\n this.timeSeries.revalidations.length = 0;\n this.timeSeries.deduplications.length = 0;\n this.actionErrors = [];\n this.lastSnapshot = null;\n this.notifySubscribers();\n }\n\n override subscribe(callback: () => void): () => void {\n const unsub = super.subscribe(callback);\n this.subscriberCount++;\n if (this.subscriberCount === 1 && this.intervalId == null) {\n this.intervalId = setInterval(() => this.updateTimeSeries(), 1000);\n }\n return () => {\n unsub();\n this.subscriberCount--;\n if (this.subscriberCount === 0 && this.intervalId != null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n };\n }\n\n dispose(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n\n this.reset();\n this.clearSubscribers();\n this.subscriberCount = 0;\n this.pendingUpdates = [];\n this.isProcessing = false;\n }\n\n private queueOperation(operation: Operation): void {\n this.pendingUpdates.push(operation);\n\n if (!this.isProcessing) {\n this.isProcessing = true;\n this.scheduleProcessBatch();\n }\n }\n\n private scheduleProcessBatch(): void {\n if (typeof requestIdleCallback !== \"undefined\") {\n requestIdleCallback(() => this.processBatch());\n } else {\n setTimeout(() => this.processBatch(), 0);\n }\n }\n\n private processBatch(): void {\n const batch = this.pendingUpdates.splice(0, 100);\n\n for (const operation of batch) {\n this.operations.push(operation);\n this.updateAggregates(operation);\n }\n\n this.lastSnapshot = null;\n this.isProcessing = false;\n\n if (this.pendingUpdates.length > 0) {\n this.scheduleProcessBatch();\n }\n\n this.notifySubscribers();\n }\n\n private updateAggregates(operation: Operation): void {\n const objectCount = operation.objectCount ?? 0;\n\n switch (operation.type) {\n case \"cache-hit\":\n this.aggregates.cacheHits++;\n this.aggregates.totalObjectsFromCache += objectCount;\n if (operation.responseTime != null) {\n this.aggregates.cachedResponseTime += operation.responseTime;\n this.aggregates.totalResponseTime += operation.responseTime;\n }\n if (operation.saved) {\n this.aggregates.requestsSaved++;\n this.aggregates.bytesServedFromCache += this.estimateBytes(\n operation.signature,\n );\n }\n break;\n\n case \"cache-miss\":\n this.aggregates.cacheMisses++;\n this.aggregates.totalObjectsFromNetwork += objectCount;\n this.networkTimeDirty = true;\n this.bytesPerObjectDirty = true;\n if (operation.responseTime != null) {\n this.aggregates.networkResponseTime += operation.responseTime;\n this.aggregates.totalResponseTime += operation.responseTime;\n }\n break;\n\n case \"revalidation\":\n this.aggregates.revalidations++;\n this.aggregates.totalObjectsFromCache += objectCount;\n this.networkTimeDirty = true;\n if (operation.responseTime != null) {\n this.aggregates.networkResponseTime += operation.responseTime;\n this.aggregates.totalResponseTime += operation.responseTime;\n }\n break;\n\n case \"deduplication\":\n this.aggregates.deduplications++;\n this.aggregates.requestsSaved++;\n break;\n\n case \"optimistic-update\":\n this.aggregates.optimisticUpdates++;\n break;\n\n case \"action\":\n this.aggregates.actionCount++;\n if (operation.optimisticConfigured) {\n this.aggregates.configuredOptimisticActionCount++;\n }\n if (operation.optimisticObserved) {\n this.aggregates.optimisticActionCount++;\n }\n if (operation.rollback) {\n this.aggregates.rollbackActionCount++;\n }\n if (operation.optimisticRenderTime != null) {\n this.aggregates.totalOptimisticRenderTime +=\n operation.optimisticRenderTime;\n }\n if (operation.serverRoundTripTime != null) {\n this.aggregates.totalServerRoundTripTime +=\n operation.serverRoundTripTime;\n }\n if (operation.perceivedSpeedup != null) {\n this.aggregates.totalPerceivedSpeedup += operation.perceivedSpeedup;\n }\n if (operation.optimisticObjectsAffected != null) {\n this.aggregates.totalOptimisticObjectsAffected +=\n operation.optimisticObjectsAffected;\n }\n break;\n\n case \"action-validation\":\n this.aggregates.validationCount++;\n if (operation.responseTime != null) {\n this.aggregates.totalValidationTime += operation.responseTime;\n }\n break;\n }\n }\n\n private calculateRates(): MetricRates {\n const total = this.aggregates.cacheHits + this.aggregates.cacheMisses\n + this.aggregates.revalidations;\n const totalRequests = total + this.aggregates.deduplications;\n const actionCount = this.aggregates.actionCount;\n const optimisticActionCount = this.aggregates.optimisticActionCount;\n const averageValidationTime = this.aggregates.validationCount > 0\n ? this.aggregates.totalValidationTime / this.aggregates.validationCount\n : 0;\n const averageServerRoundTripTime = actionCount > 0\n ? this.aggregates.totalServerRoundTripTime / actionCount\n : 0;\n\n return {\n cacheHitRate: total > 0\n ? (this.aggregates.cacheHits + this.aggregates.revalidations) / total\n : 0,\n deduplicationRate: totalRequests > 0\n ? this.aggregates.deduplications / totalRequests\n : 0,\n optimisticUpdateRate: totalRequests > 0\n ? this.aggregates.optimisticUpdates / totalRequests\n : 0,\n averageResponseTime: total > 0\n ? this.aggregates.totalResponseTime / total\n : 0,\n averageCachedResponseTime: this.aggregates.cacheHits > 0\n ? this.aggregates.cachedResponseTime / this.aggregates.cacheHits\n : 0,\n optimisticActionCoverage: actionCount > 0\n ? optimisticActionCount / actionCount\n : 0,\n configuredOptimisticActionRate: actionCount > 0\n ? this.aggregates.configuredOptimisticActionCount / actionCount\n : 0,\n rollbackRate: actionCount > 0\n ? this.aggregates.rollbackActionCount / actionCount\n : 0,\n averageOptimisticRenderTime: optimisticActionCount > 0\n ? this.aggregates.totalOptimisticRenderTime / optimisticActionCount\n : 0,\n averageServerRoundTripTime,\n averagePerceivedSpeedup: optimisticActionCount > 0\n ? this.aggregates.totalPerceivedSpeedup / optimisticActionCount\n : 0,\n averageValidationTime,\n validationTimeSaved: Math.max(\n 0,\n averageServerRoundTripTime - averageValidationTime,\n ),\n };\n }\n\n private updateTimeSeries(): void {\n const now = Date.now();\n const currentSecond = Math.floor(now / 1000) * 1000;\n\n const lastTimestamp =\n this.timeSeries.timestamps[this.timeSeries.timestamps.length - 1];\n if (lastTimestamp === currentSecond) {\n return;\n }\n\n if (this.timeSeries.timestamps.length >= this.timeSeriesSize) {\n this.timeSeries.timestamps.shift();\n this.timeSeries.cacheHits.shift();\n this.timeSeries.cacheMisses.shift();\n this.timeSeries.revalidations.shift();\n this.timeSeries.deduplications.shift();\n }\n\n const recentOps = this.operations.getLast(100);\n let cacheHits = 0;\n let cacheMisses = 0;\n let revalidations = 0;\n let deduplications = 0;\n\n for (const op of recentOps) {\n if (\n op.timestamp >= currentSecond - 1000 && op.timestamp < currentSecond\n ) {\n switch (op.type) {\n case \"cache-hit\":\n cacheHits++;\n break;\n case \"cache-miss\":\n cacheMisses++;\n break;\n case \"revalidation\":\n revalidations++;\n break;\n case \"deduplication\":\n deduplications++;\n break;\n }\n }\n }\n\n this.timeSeries.timestamps.push(currentSecond);\n this.timeSeries.cacheHits.push(cacheHits);\n this.timeSeries.cacheMisses.push(cacheMisses);\n this.timeSeries.revalidations.push(revalidations);\n this.timeSeries.deduplications.push(deduplications);\n\n this.lastSnapshot = null;\n this.notifySubscribers();\n }\n\n private estimateNetworkTime(_signature: string): number {\n if (this.networkTimeDirty) {\n const recentMisses = this.operations.getLast(100)\n .filter(op => op.type === \"cache-miss\" && op.responseTime != null);\n\n if (recentMisses.length > 0) {\n const totalTime = recentMisses.reduce(\n (sum, op) => sum + (op.responseTime ?? 0),\n 0,\n );\n this.cachedAvgNetworkTime = totalTime / recentMisses.length;\n }\n this.networkTimeDirty = false;\n }\n return this.cachedAvgNetworkTime;\n }\n\n private estimateBytes(_signature: string): number {\n if (this.bytesPerObjectDirty) {\n const recentMisses = this.operations.getLast(100)\n .filter(\n op =>\n op.type === \"cache-miss\"\n && op.objectCount != null\n && op.objectCount > 0,\n );\n\n if (recentMisses.length > 0) {\n const avgObjectCount = recentMisses.reduce(\n (sum, op) => sum + (op.objectCount ?? 0),\n 0,\n ) / recentMisses.length;\n this.cachedAvgBytesPerObject = avgObjectCount * 1024;\n }\n this.bytesPerObjectDirty = false;\n }\n return this.cachedAvgBytesPerObject;\n }\n\n recordActionError(error: ActionError): void {\n this.actionErrors.push(error);\n\n if (this.actionErrors.length > 100) {\n this.actionErrors.shift();\n }\n\n this.notifySubscribers();\n }\n\n getActionErrors(): ActionError[] {\n return [...this.actionErrors].reverse();\n }\n\n getCacheHitRate(): number {\n const total = this.aggregates.cacheHits + this.aggregates.cacheMisses\n + this.aggregates.revalidations;\n return total > 0\n ? (this.aggregates.cacheHits + this.aggregates.revalidations) / total\n : 0;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MetricsStore.js","names":["CircularBuffer","SubscribableStore","MetricsStore","pendingUpdates","isProcessing","lastSnapshot","intervalId","subscriberCount","actionErrors","cachedAvgNetworkTime","cachedAvgBytesPerObject","networkTimeDirty","bytesPerObjectDirty","constructor","maxOperations","timeSeriesSize","operations","aggregates","cacheHits","cacheMisses","deduplications","optimisticUpdates","totalResponseTime","cachedResponseTime","networkResponseTime","requestsSaved","bytesServedFromCache","totalObjectsFromCache","totalObjectsFromNetwork","revalidations","actionCount","configuredOptimisticActionCount","optimisticActionCount","rollbackActionCount","totalOptimisticRenderTime","totalServerRoundTripTime","totalPerceivedSpeedup","totalOptimisticObjectsAffected","validationCount","totalValidationTime","timeSeries","timestamps","recordCacheHit","signature","responseTime","metadata","objectCount","operation","id","crypto","randomUUID","type","timestamp","Date","now","saved","estimateNetworkTime","queueOperation","recordCacheMiss","recordRevalidation","recordDeduplication","recordOptimisticUpdate","recordActionLifecycle","recordActionValidation","duration","actionName","getSnapshot","snapshot","recent","toArray","rates","calculateRates","reset","clear","Object","assign","length","notifySubscribers","subscribe","callback","unsub","setInterval","updateTimeSeries","clearInterval","dispose","clearSubscribers","push","scheduleProcessBatch","requestIdleCallback","processBatch","setTimeout","batch","splice","updateAggregates","estimateBytes","optimisticConfigured","optimisticObserved","rollback","optimisticRenderTime","serverRoundTripTime","perceivedSpeedup","optimisticObjectsAffected","total","totalRequests","averageValidationTime","averageServerRoundTripTime","cacheHitRate","deduplicationRate","optimisticUpdateRate","averageResponseTime","averageCachedResponseTime","optimisticActionCoverage","configuredOptimisticActionRate","rollbackRate","averageOptimisticRenderTime","averagePerceivedSpeedup","validationTimeSaved","Math","max","currentSecond","floor","lastTimestamp","shift","recentOps","getLast","op","recentMisses","filter","totalTime","reduce","sum","avgObjectCount","recordActionError","error","getActionErrors","reverse","getCacheHitRate"],"sources":["MetricsStore.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 {\n ActionError,\n MetricRates,\n MetricsSnapshot,\n Operation,\n OperationMetadata,\n} from \"../types/index.js\";\nimport { CircularBuffer } from \"../utils/CircularBuffer.js\";\nimport { SubscribableStore } from \"./SubscribableStore.js\";\n\nexport class MetricsStore extends SubscribableStore {\n private readonly maxOperations: number;\n private readonly timeSeriesSize: number;\n private readonly operations: CircularBuffer<Operation>;\n private readonly aggregates: {\n cacheHits: number;\n cacheMisses: number;\n deduplications: number;\n optimisticUpdates: number;\n totalResponseTime: number;\n cachedResponseTime: number;\n networkResponseTime: number;\n requestsSaved: number;\n bytesServedFromCache: number;\n totalObjectsFromCache: number;\n totalObjectsFromNetwork: number;\n revalidations: number;\n actionCount: number;\n configuredOptimisticActionCount: number;\n optimisticActionCount: number;\n rollbackActionCount: number;\n totalOptimisticRenderTime: number;\n totalServerRoundTripTime: number;\n totalPerceivedSpeedup: number;\n totalOptimisticObjectsAffected: number;\n validationCount: number;\n totalValidationTime: number;\n };\n private readonly timeSeries: {\n timestamps: number[];\n cacheHits: number[];\n cacheMisses: number[];\n revalidations: number[];\n deduplications: number[];\n };\n\n private pendingUpdates: Operation[] = [];\n private isProcessing = false;\n private lastSnapshot: MetricsSnapshot | null = null;\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private subscriberCount = 0;\n private actionErrors: ActionError[] = [];\n private cachedAvgNetworkTime: number = 100;\n private cachedAvgBytesPerObject: number = 1024;\n private networkTimeDirty = true;\n private bytesPerObjectDirty = true;\n\n constructor(maxOperations: number = 1000, timeSeriesSize: number = 60) {\n super();\n this.maxOperations = maxOperations;\n this.timeSeriesSize = timeSeriesSize;\n this.operations = new CircularBuffer(maxOperations);\n this.aggregates = {\n cacheHits: 0,\n cacheMisses: 0,\n deduplications: 0,\n optimisticUpdates: 0,\n totalResponseTime: 0,\n cachedResponseTime: 0,\n networkResponseTime: 0,\n requestsSaved: 0,\n bytesServedFromCache: 0,\n totalObjectsFromCache: 0,\n totalObjectsFromNetwork: 0,\n revalidations: 0,\n actionCount: 0,\n configuredOptimisticActionCount: 0,\n optimisticActionCount: 0,\n rollbackActionCount: 0,\n totalOptimisticRenderTime: 0,\n totalServerRoundTripTime: 0,\n totalPerceivedSpeedup: 0,\n totalOptimisticObjectsAffected: 0,\n validationCount: 0,\n totalValidationTime: 0,\n };\n this.timeSeries = {\n timestamps: [],\n cacheHits: [],\n cacheMisses: [],\n revalidations: [],\n deduplications: [],\n };\n }\n\n recordCacheHit(\n signature: string,\n responseTime: number,\n metadata?: OperationMetadata,\n objectCount: number = 1\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"cache-hit\",\n signature,\n timestamp: Date.now(),\n responseTime,\n saved: this.estimateNetworkTime(signature) - responseTime,\n metadata,\n objectCount,\n };\n\n this.queueOperation(operation);\n }\n\n recordCacheMiss(\n signature: string,\n responseTime: number,\n metadata?: OperationMetadata,\n objectCount: number = 1\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"cache-miss\",\n signature,\n timestamp: Date.now(),\n responseTime,\n metadata,\n objectCount,\n };\n\n this.queueOperation(operation);\n }\n\n recordRevalidation(\n signature: string,\n responseTime: number,\n metadata?: OperationMetadata,\n objectCount: number = 1\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"revalidation\",\n signature,\n timestamp: Date.now(),\n responseTime,\n metadata,\n objectCount,\n };\n\n this.queueOperation(operation);\n }\n\n recordDeduplication(signature: string, metadata?: OperationMetadata): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"deduplication\",\n signature,\n timestamp: Date.now(),\n saved: this.estimateNetworkTime(signature),\n metadata,\n };\n\n this.queueOperation(operation);\n }\n\n recordOptimisticUpdate(\n signature: string,\n metadata?: OperationMetadata\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"optimistic-update\",\n signature,\n timestamp: Date.now(),\n saved: this.estimateNetworkTime(signature),\n metadata,\n };\n\n this.queueOperation(operation);\n }\n\n recordActionLifecycle(operation: Operation): void {\n this.queueOperation(operation);\n }\n\n recordActionValidation(\n signature: string,\n duration: number,\n metadata?: OperationMetadata\n ): void {\n const operation: Operation = {\n id: crypto.randomUUID(),\n type: \"action-validation\",\n signature,\n timestamp: Date.now(),\n responseTime: duration,\n metadata,\n actionName: metadata?.actionName,\n };\n\n this.queueOperation(operation);\n }\n\n getSnapshot(): MetricsSnapshot {\n if (this.lastSnapshot) {\n return this.lastSnapshot;\n }\n\n const snapshot: MetricsSnapshot = {\n recent: this.operations.toArray(),\n aggregates: { ...this.aggregates },\n rates: this.calculateRates(),\n timeSeries: {\n timestamps: [...this.timeSeries.timestamps],\n cacheHits: [...this.timeSeries.cacheHits],\n cacheMisses: [...this.timeSeries.cacheMisses],\n revalidations: [...this.timeSeries.revalidations],\n deduplications: [...this.timeSeries.deduplications],\n },\n };\n\n this.lastSnapshot = snapshot;\n return snapshot;\n }\n\n reset(): void {\n this.operations.clear();\n Object.assign(this.aggregates, {\n cacheHits: 0,\n cacheMisses: 0,\n deduplications: 0,\n optimisticUpdates: 0,\n totalResponseTime: 0,\n cachedResponseTime: 0,\n networkResponseTime: 0,\n requestsSaved: 0,\n bytesServedFromCache: 0,\n totalObjectsFromCache: 0,\n totalObjectsFromNetwork: 0,\n revalidations: 0,\n actionCount: 0,\n configuredOptimisticActionCount: 0,\n optimisticActionCount: 0,\n rollbackActionCount: 0,\n totalOptimisticRenderTime: 0,\n totalServerRoundTripTime: 0,\n totalPerceivedSpeedup: 0,\n totalOptimisticObjectsAffected: 0,\n validationCount: 0,\n totalValidationTime: 0,\n });\n this.timeSeries.timestamps.length = 0;\n this.timeSeries.cacheHits.length = 0;\n this.timeSeries.cacheMisses.length = 0;\n this.timeSeries.revalidations.length = 0;\n this.timeSeries.deduplications.length = 0;\n this.actionErrors = [];\n this.lastSnapshot = null;\n this.notifySubscribers();\n }\n\n override subscribe(callback: () => void): () => void {\n const unsub = super.subscribe(callback);\n this.subscriberCount++;\n if (this.subscriberCount === 1 && this.intervalId == null) {\n this.intervalId = setInterval(() => this.updateTimeSeries(), 1000);\n }\n return () => {\n unsub();\n this.subscriberCount--;\n if (this.subscriberCount === 0 && this.intervalId != null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n };\n }\n\n dispose(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n\n this.reset();\n this.clearSubscribers();\n this.subscriberCount = 0;\n this.pendingUpdates = [];\n this.isProcessing = false;\n }\n\n private queueOperation(operation: Operation): void {\n this.pendingUpdates.push(operation);\n\n if (!this.isProcessing) {\n this.isProcessing = true;\n this.scheduleProcessBatch();\n }\n }\n\n private scheduleProcessBatch(): void {\n if (typeof requestIdleCallback !== \"undefined\") {\n requestIdleCallback(() => this.processBatch());\n } else {\n setTimeout(() => this.processBatch(), 0);\n }\n }\n\n private processBatch(): void {\n const batch = this.pendingUpdates.splice(0, 100);\n\n for (const operation of batch) {\n this.operations.push(operation);\n this.updateAggregates(operation);\n }\n\n this.lastSnapshot = null;\n this.isProcessing = false;\n\n if (this.pendingUpdates.length > 0) {\n this.scheduleProcessBatch();\n }\n\n this.notifySubscribers();\n }\n\n private updateAggregates(operation: Operation): void {\n const objectCount = operation.objectCount ?? 0;\n\n switch (operation.type) {\n case \"cache-hit\":\n this.aggregates.cacheHits++;\n this.aggregates.totalObjectsFromCache += objectCount;\n if (operation.responseTime != null) {\n this.aggregates.cachedResponseTime += operation.responseTime;\n this.aggregates.totalResponseTime += operation.responseTime;\n }\n if (operation.saved) {\n this.aggregates.requestsSaved++;\n this.aggregates.bytesServedFromCache += this.estimateBytes(\n operation.signature\n );\n }\n break;\n\n case \"cache-miss\":\n this.aggregates.cacheMisses++;\n this.aggregates.totalObjectsFromNetwork += objectCount;\n this.networkTimeDirty = true;\n this.bytesPerObjectDirty = true;\n if (operation.responseTime != null) {\n this.aggregates.networkResponseTime += operation.responseTime;\n this.aggregates.totalResponseTime += operation.responseTime;\n }\n break;\n\n case \"revalidation\":\n this.aggregates.revalidations++;\n this.aggregates.totalObjectsFromCache += objectCount;\n this.networkTimeDirty = true;\n if (operation.responseTime != null) {\n this.aggregates.networkResponseTime += operation.responseTime;\n this.aggregates.totalResponseTime += operation.responseTime;\n }\n break;\n\n case \"deduplication\":\n this.aggregates.deduplications++;\n this.aggregates.requestsSaved++;\n break;\n\n case \"optimistic-update\":\n this.aggregates.optimisticUpdates++;\n break;\n\n case \"action\":\n this.aggregates.actionCount++;\n if (operation.optimisticConfigured) {\n this.aggregates.configuredOptimisticActionCount++;\n }\n if (operation.optimisticObserved) {\n this.aggregates.optimisticActionCount++;\n }\n if (operation.rollback) {\n this.aggregates.rollbackActionCount++;\n }\n if (operation.optimisticRenderTime != null) {\n this.aggregates.totalOptimisticRenderTime +=\n operation.optimisticRenderTime;\n }\n if (operation.serverRoundTripTime != null) {\n this.aggregates.totalServerRoundTripTime +=\n operation.serverRoundTripTime;\n }\n if (operation.perceivedSpeedup != null) {\n this.aggregates.totalPerceivedSpeedup += operation.perceivedSpeedup;\n }\n if (operation.optimisticObjectsAffected != null) {\n this.aggregates.totalOptimisticObjectsAffected +=\n operation.optimisticObjectsAffected;\n }\n break;\n\n case \"action-validation\":\n this.aggregates.validationCount++;\n if (operation.responseTime != null) {\n this.aggregates.totalValidationTime += operation.responseTime;\n }\n break;\n }\n }\n\n private calculateRates(): MetricRates {\n const total =\n this.aggregates.cacheHits +\n this.aggregates.cacheMisses +\n this.aggregates.revalidations;\n const totalRequests = total + this.aggregates.deduplications;\n const actionCount = this.aggregates.actionCount;\n const optimisticActionCount = this.aggregates.optimisticActionCount;\n const averageValidationTime =\n this.aggregates.validationCount > 0\n ? this.aggregates.totalValidationTime / this.aggregates.validationCount\n : 0;\n const averageServerRoundTripTime =\n actionCount > 0\n ? this.aggregates.totalServerRoundTripTime / actionCount\n : 0;\n\n return {\n cacheHitRate:\n total > 0\n ? (this.aggregates.cacheHits + this.aggregates.revalidations) / total\n : 0,\n deduplicationRate:\n totalRequests > 0 ? this.aggregates.deduplications / totalRequests : 0,\n optimisticUpdateRate:\n totalRequests > 0\n ? this.aggregates.optimisticUpdates / totalRequests\n : 0,\n averageResponseTime:\n total > 0 ? this.aggregates.totalResponseTime / total : 0,\n averageCachedResponseTime:\n this.aggregates.cacheHits > 0\n ? this.aggregates.cachedResponseTime / this.aggregates.cacheHits\n : 0,\n optimisticActionCoverage:\n actionCount > 0 ? optimisticActionCount / actionCount : 0,\n configuredOptimisticActionRate:\n actionCount > 0\n ? this.aggregates.configuredOptimisticActionCount / actionCount\n : 0,\n rollbackRate:\n actionCount > 0 ? this.aggregates.rollbackActionCount / actionCount : 0,\n averageOptimisticRenderTime:\n optimisticActionCount > 0\n ? this.aggregates.totalOptimisticRenderTime / optimisticActionCount\n : 0,\n averageServerRoundTripTime,\n averagePerceivedSpeedup:\n optimisticActionCount > 0\n ? this.aggregates.totalPerceivedSpeedup / optimisticActionCount\n : 0,\n averageValidationTime,\n validationTimeSaved: Math.max(\n 0,\n averageServerRoundTripTime - averageValidationTime\n ),\n };\n }\n\n private updateTimeSeries(): void {\n const now = Date.now();\n const currentSecond = Math.floor(now / 1000) * 1000;\n\n const lastTimestamp =\n this.timeSeries.timestamps[this.timeSeries.timestamps.length - 1];\n if (lastTimestamp === currentSecond) {\n return;\n }\n\n if (this.timeSeries.timestamps.length >= this.timeSeriesSize) {\n this.timeSeries.timestamps.shift();\n this.timeSeries.cacheHits.shift();\n this.timeSeries.cacheMisses.shift();\n this.timeSeries.revalidations.shift();\n this.timeSeries.deduplications.shift();\n }\n\n const recentOps = this.operations.getLast(100);\n let cacheHits = 0;\n let cacheMisses = 0;\n let revalidations = 0;\n let deduplications = 0;\n\n for (const op of recentOps) {\n if (\n op.timestamp >= currentSecond - 1000 &&\n op.timestamp < currentSecond\n ) {\n switch (op.type) {\n case \"cache-hit\":\n cacheHits++;\n break;\n case \"cache-miss\":\n cacheMisses++;\n break;\n case \"revalidation\":\n revalidations++;\n break;\n case \"deduplication\":\n deduplications++;\n break;\n }\n }\n }\n\n this.timeSeries.timestamps.push(currentSecond);\n this.timeSeries.cacheHits.push(cacheHits);\n this.timeSeries.cacheMisses.push(cacheMisses);\n this.timeSeries.revalidations.push(revalidations);\n this.timeSeries.deduplications.push(deduplications);\n\n this.lastSnapshot = null;\n this.notifySubscribers();\n }\n\n private estimateNetworkTime(_signature: string): number {\n if (this.networkTimeDirty) {\n const recentMisses = this.operations\n .getLast(100)\n .filter((op) => op.type === \"cache-miss\" && op.responseTime != null);\n\n if (recentMisses.length > 0) {\n const totalTime = recentMisses.reduce(\n (sum, op) => sum + (op.responseTime ?? 0),\n 0\n );\n this.cachedAvgNetworkTime = totalTime / recentMisses.length;\n }\n this.networkTimeDirty = false;\n }\n return this.cachedAvgNetworkTime;\n }\n\n private estimateBytes(_signature: string): number {\n if (this.bytesPerObjectDirty) {\n const recentMisses = this.operations\n .getLast(100)\n .filter(\n (op) =>\n op.type === \"cache-miss\" &&\n op.objectCount != null &&\n op.objectCount > 0\n );\n\n if (recentMisses.length > 0) {\n const avgObjectCount =\n recentMisses.reduce((sum, op) => sum + (op.objectCount ?? 0), 0) /\n recentMisses.length;\n this.cachedAvgBytesPerObject = avgObjectCount * 1024;\n }\n this.bytesPerObjectDirty = false;\n }\n return this.cachedAvgBytesPerObject;\n }\n\n recordActionError(error: ActionError): void {\n this.actionErrors.push(error);\n\n if (this.actionErrors.length > 100) {\n this.actionErrors.shift();\n }\n\n this.notifySubscribers();\n }\n\n getActionErrors(): ActionError[] {\n return [...this.actionErrors].reverse();\n }\n\n getCacheHitRate(): number {\n const total =\n this.aggregates.cacheHits +\n this.aggregates.cacheMisses +\n this.aggregates.revalidations;\n return total > 0\n ? (this.aggregates.cacheHits + this.aggregates.revalidations) / total\n : 0;\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,SAASA,cAAc,QAAQ,4BAA4B;AAC3D,SAASC,iBAAiB,QAAQ,wBAAwB;AAE1D,OAAO,MAAMC,YAAY,SAASD,iBAAiB,CAAC;EAoC1CE,cAAc,GAAgB,EAAE;EAChCC,YAAY,GAAG,KAAK;EACpBC,YAAY,GAA2B,IAAI;EAC3CC,UAAU,GAA0C,IAAI;EACxDC,eAAe,GAAG,CAAC;EACnBC,YAAY,GAAkB,EAAE;EAChCC,oBAAoB,GAAW,GAAG;EAClCC,uBAAuB,GAAW,IAAI;EACtCC,gBAAgB,GAAG,IAAI;EACvBC,mBAAmB,GAAG,IAAI;EAElCC,WAAWA,CAACC,aAAqB,GAAG,IAAI,EAAEC,cAAsB,GAAG,EAAE,EAAE;IACrE,KAAK,CAAC,CAAC;IACP,IAAI,CAACD,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACC,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACC,UAAU,GAAG,IAAIhB,cAAc,CAACc,aAAa,CAAC;IACnD,IAAI,CAACG,UAAU,GAAG;MAChBC,SAAS,EAAE,CAAC;MACZC,WAAW,EAAE,CAAC;MACdC,cAAc,EAAE,CAAC;MACjBC,iBAAiB,EAAE,CAAC;MACpBC,iBAAiB,EAAE,CAAC;MACpBC,kBAAkB,EAAE,CAAC;MACrBC,mBAAmB,EAAE,CAAC;MACtBC,aAAa,EAAE,CAAC;MAChBC,oBAAoB,EAAE,CAAC;MACvBC,qBAAqB,EAAE,CAAC;MACxBC,uBAAuB,EAAE,CAAC;MAC1BC,aAAa,EAAE,CAAC;MAChBC,WAAW,EAAE,CAAC;MACdC,+BAA+B,EAAE,CAAC;MAClCC,qBAAqB,EAAE,CAAC;MACxBC,mBAAmB,EAAE,CAAC;MACtBC,yBAAyB,EAAE,CAAC;MAC5BC,wBAAwB,EAAE,CAAC;MAC3BC,qBAAqB,EAAE,CAAC;MACxBC,8BAA8B,EAAE,CAAC;MACjCC,eAAe,EAAE,CAAC;MAClBC,mBAAmB,EAAE;IACvB,CAAC;IACD,IAAI,CAACC,UAAU,GAAG;MAChBC,UAAU,EAAE,EAAE;MACdvB,SAAS,EAAE,EAAE;MACbC,WAAW,EAAE,EAAE;MACfU,aAAa,EAAE,EAAE;MACjBT,cAAc,EAAE;IAClB,CAAC;EACH;EAEAsB,cAAcA,CACZC,SAAiB,EACjBC,YAAoB,EACpBC,QAA4B,EAC5BC,WAAmB,GAAG,CAAC,EACjB;IACN,MAAMC,SAAoB,GAAG;MAC3BC,EAAE,EAAEC,MAAM,CAACC,UAAU,CAAC,CAAC;MACvBC,IAAI,EAAE,WAAW;MACjBR,SAAS;MACTS,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrBV,YAAY;MACZW,KAAK,EAAE,IAAI,CAACC,mBAAmB,CAACb,SAAS,CAAC,GAAGC,YAAY;MACzDC,QAAQ;MACRC;IACF,CAAC;IAED,IAAI,CAACW,cAAc,CAACV,SAAS,CAAC;EAChC;EAEAW,eAAeA,CACbf,SAAiB,EACjBC,YAAoB,EACpBC,QAA4B,EAC5BC,WAAmB,GAAG,CAAC,EACjB;IACN,MAAMC,SAAoB,GAAG;MAC3BC,EAAE,EAAEC,MAAM,CAACC,UAAU,CAAC,CAAC;MACvBC,IAAI,EAAE,YAAY;MAClBR,SAAS;MACTS,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrBV,YAAY;MACZC,QAAQ;MACRC;IACF,CAAC;IAED,IAAI,CAACW,cAAc,CAACV,SAAS,CAAC;EAChC;EAEAY,kBAAkBA,CAChBhB,SAAiB,EACjBC,YAAoB,EACpBC,QAA4B,EAC5BC,WAAmB,GAAG,CAAC,EACjB;IACN,MAAMC,SAAoB,GAAG;MAC3BC,EAAE,EAAEC,MAAM,CAACC,UAAU,CAAC,CAAC;MACvBC,IAAI,EAAE,cAAc;MACpBR,SAAS;MACTS,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrBV,YAAY;MACZC,QAAQ;MACRC;IACF,CAAC;IAED,IAAI,CAACW,cAAc,CAACV,SAAS,CAAC;EAChC;EAEAa,mBAAmBA,CAACjB,SAAiB,EAAEE,QAA4B,EAAQ;IACzE,MAAME,SAAoB,GAAG;MAC3BC,EAAE,EAAEC,MAAM,CAACC,UAAU,CAAC,CAAC;MACvBC,IAAI,EAAE,eAAe;MACrBR,SAAS;MACTS,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrBC,KAAK,EAAE,IAAI,CAACC,mBAAmB,CAACb,SAAS,CAAC;MAC1CE;IACF,CAAC;IAED,IAAI,CAACY,cAAc,CAACV,SAAS,CAAC;EAChC;EAEAc,sBAAsBA,CACpBlB,SAAiB,EACjBE,QAA4B,EACtB;IACN,MAAME,SAAoB,GAAG;MAC3BC,EAAE,EAAEC,MAAM,CAACC,UAAU,CAAC,CAAC;MACvBC,IAAI,EAAE,mBAAmB;MACzBR,SAAS;MACTS,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrBC,KAAK,EAAE,IAAI,CAACC,mBAAmB,CAACb,SAAS,CAAC;MAC1CE;IACF,CAAC;IAED,IAAI,CAACY,cAAc,CAACV,SAAS,CAAC;EAChC;EAEAe,qBAAqBA,CAACf,SAAoB,EAAQ;IAChD,IAAI,CAACU,cAAc,CAACV,SAAS,CAAC;EAChC;EAEAgB,sBAAsBA,CACpBpB,SAAiB,EACjBqB,QAAgB,EAChBnB,QAA4B,EACtB;IACN,MAAME,SAAoB,GAAG;MAC3BC,EAAE,EAAEC,MAAM,CAACC,UAAU,CAAC,CAAC;MACvBC,IAAI,EAAE,mBAAmB;MACzBR,SAAS;MACTS,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrBV,YAAY,EAAEoB,QAAQ;MACtBnB,QAAQ;MACRoB,UAAU,EAAEpB,QAAQ,EAAEoB;IACxB,CAAC;IAED,IAAI,CAACR,cAAc,CAACV,SAAS,CAAC;EAChC;EAEAmB,WAAWA,CAAA,EAAoB;IAC7B,IAAI,IAAI,CAAC7D,YAAY,EAAE;MACrB,OAAO,IAAI,CAACA,YAAY;IAC1B;IAEA,MAAM8D,QAAyB,GAAG;MAChCC,MAAM,EAAE,IAAI,CAACpD,UAAU,CAACqD,OAAO,CAAC,CAAC;MACjCpD,UAAU,EAAE;QAAE,GAAG,IAAI,CAACA;MAAW,CAAC;MAClCqD,KAAK,EAAE,IAAI,CAACC,cAAc,CAAC,CAAC;MAC5B/B,UAAU,EAAE;QACVC,UAAU,EAAE,CAAC,GAAG,IAAI,CAACD,UAAU,CAACC,UAAU,CAAC;QAC3CvB,SAAS,EAAE,CAAC,GAAG,IAAI,CAACsB,UAAU,CAACtB,SAAS,CAAC;QACzCC,WAAW,EAAE,CAAC,GAAG,IAAI,CAACqB,UAAU,CAACrB,WAAW,CAAC;QAC7CU,aAAa,EAAE,CAAC,GAAG,IAAI,CAACW,UAAU,CAACX,aAAa,CAAC;QACjDT,cAAc,EAAE,CAAC,GAAG,IAAI,CAACoB,UAAU,CAACpB,cAAc;MACpD;IACF,CAAC;IAED,IAAI,CAACf,YAAY,GAAG8D,QAAQ;IAC5B,OAAOA,QAAQ;EACjB;EAEAK,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACxD,UAAU,CAACyD,KAAK,CAAC,CAAC;IACvBC,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC1D,UAAU,EAAE;MAC7BC,SAAS,EAAE,CAAC;MACZC,WAAW,EAAE,CAAC;MACdC,cAAc,EAAE,CAAC;MACjBC,iBAAiB,EAAE,CAAC;MACpBC,iBAAiB,EAAE,CAAC;MACpBC,kBAAkB,EAAE,CAAC;MACrBC,mBAAmB,EAAE,CAAC;MACtBC,aAAa,EAAE,CAAC;MAChBC,oBAAoB,EAAE,CAAC;MACvBC,qBAAqB,EAAE,CAAC;MACxBC,uBAAuB,EAAE,CAAC;MAC1BC,aAAa,EAAE,CAAC;MAChBC,WAAW,EAAE,CAAC;MACdC,+BAA+B,EAAE,CAAC;MAClCC,qBAAqB,EAAE,CAAC;MACxBC,mBAAmB,EAAE,CAAC;MACtBC,yBAAyB,EAAE,CAAC;MAC5BC,wBAAwB,EAAE,CAAC;MAC3BC,qBAAqB,EAAE,CAAC;MACxBC,8BAA8B,EAAE,CAAC;MACjCC,eAAe,EAAE,CAAC;MAClBC,mBAAmB,EAAE;IACvB,CAAC,CAAC;IACF,IAAI,CAACC,UAAU,CAACC,UAAU,CAACmC,MAAM,GAAG,CAAC;IACrC,IAAI,CAACpC,UAAU,CAACtB,SAAS,CAAC0D,MAAM,GAAG,CAAC;IACpC,IAAI,CAACpC,UAAU,CAACrB,WAAW,CAACyD,MAAM,GAAG,CAAC;IACtC,IAAI,CAACpC,UAAU,CAACX,aAAa,CAAC+C,MAAM,GAAG,CAAC;IACxC,IAAI,CAACpC,UAAU,CAACpB,cAAc,CAACwD,MAAM,GAAG,CAAC;IACzC,IAAI,CAACpE,YAAY,GAAG,EAAE;IACtB,IAAI,CAACH,YAAY,GAAG,IAAI;IACxB,IAAI,CAACwE,iBAAiB,CAAC,CAAC;EAC1B;EAESC,SAASA,CAACC,QAAoB,EAAc;IACnD,MAAMC,KAAK,GAAG,KAAK,CAACF,SAAS,CAACC,QAAQ,CAAC;IACvC,IAAI,CAACxE,eAAe,EAAE;IACtB,IAAI,IAAI,CAACA,eAAe,KAAK,CAAC,IAAI,IAAI,CAACD,UAAU,IAAI,IAAI,EAAE;MACzD,IAAI,CAACA,UAAU,GAAG2E,WAAW,CAAC,MAAM,IAAI,CAACC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC;IACpE;IACA,OAAO,MAAM;MACXF,KAAK,CAAC,CAAC;MACP,IAAI,CAACzE,eAAe,EAAE;MACtB,IAAI,IAAI,CAACA,eAAe,KAAK,CAAC,IAAI,IAAI,CAACD,UAAU,IAAI,IAAI,EAAE;QACzD6E,aAAa,CAAC,IAAI,CAAC7E,UAAU,CAAC;QAC9B,IAAI,CAACA,UAAU,GAAG,IAAI;MACxB;IACF,CAAC;EACH;EAEA8E,OAAOA,CAAA,EAAS;IACd,IAAI,IAAI,CAAC9E,UAAU,EAAE;MACnB6E,aAAa,CAAC,IAAI,CAAC7E,UAAU,CAAC;MAC9B,IAAI,CAACA,UAAU,GAAG,IAAI;IACxB;IAEA,IAAI,CAACkE,KAAK,CAAC,CAAC;IACZ,IAAI,CAACa,gBAAgB,CAAC,CAAC;IACvB,IAAI,CAAC9E,eAAe,GAAG,CAAC;IACxB,IAAI,CAACJ,cAAc,GAAG,EAAE;IACxB,IAAI,CAACC,YAAY,GAAG,KAAK;EAC3B;EAEQqD,cAAcA,CAACV,SAAoB,EAAQ;IACjD,IAAI,CAAC5C,cAAc,CAACmF,IAAI,CAACvC,SAAS,CAAC;IAEnC,IAAI,CAAC,IAAI,CAAC3C,YAAY,EAAE;MACtB,IAAI,CAACA,YAAY,GAAG,IAAI;MACxB,IAAI,CAACmF,oBAAoB,CAAC,CAAC;IAC7B;EACF;EAEQA,oBAAoBA,CAAA,EAAS;IACnC,IAAI,OAAOC,mBAAmB,KAAK,WAAW,EAAE;MAC9CA,mBAAmB,CAAC,MAAM,IAAI,CAACC,YAAY,CAAC,CAAC,CAAC;IAChD,CAAC,MAAM;MACLC,UAAU,CAAC,MAAM,IAAI,CAACD,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1C;EACF;EAEQA,YAAYA,CAAA,EAAS;IAC3B,MAAME,KAAK,GAAG,IAAI,CAACxF,cAAc,CAACyF,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;IAEhD,KAAK,MAAM7C,SAAS,IAAI4C,KAAK,EAAE;MAC7B,IAAI,CAAC3E,UAAU,CAACsE,IAAI,CAACvC,SAAS,CAAC;MAC/B,IAAI,CAAC8C,gBAAgB,CAAC9C,SAAS,CAAC;IAClC;IAEA,IAAI,CAAC1C,YAAY,GAAG,IAAI;IACxB,IAAI,CAACD,YAAY,GAAG,KAAK;IAEzB,IAAI,IAAI,CAACD,cAAc,CAACyE,MAAM,GAAG,CAAC,EAAE;MAClC,IAAI,CAACW,oBAAoB,CAAC,CAAC;IAC7B;IAEA,IAAI,CAACV,iBAAiB,CAAC,CAAC;EAC1B;EAEQgB,gBAAgBA,CAAC9C,SAAoB,EAAQ;IACnD,MAAMD,WAAW,GAAGC,SAAS,CAACD,WAAW,IAAI,CAAC;IAE9C,QAAQC,SAAS,CAACI,IAAI;MACpB,KAAK,WAAW;QACd,IAAI,CAAClC,UAAU,CAACC,SAAS,EAAE;QAC3B,IAAI,CAACD,UAAU,CAACU,qBAAqB,IAAImB,WAAW;QACpD,IAAIC,SAAS,CAACH,YAAY,IAAI,IAAI,EAAE;UAClC,IAAI,CAAC3B,UAAU,CAACM,kBAAkB,IAAIwB,SAAS,CAACH,YAAY;UAC5D,IAAI,CAAC3B,UAAU,CAACK,iBAAiB,IAAIyB,SAAS,CAACH,YAAY;QAC7D;QACA,IAAIG,SAAS,CAACQ,KAAK,EAAE;UACnB,IAAI,CAACtC,UAAU,CAACQ,aAAa,EAAE;UAC/B,IAAI,CAACR,UAAU,CAACS,oBAAoB,IAAI,IAAI,CAACoE,aAAa,CACxD/C,SAAS,CAACJ,SACZ,CAAC;QACH;QACA;MAEF,KAAK,YAAY;QACf,IAAI,CAAC1B,UAAU,CAACE,WAAW,EAAE;QAC7B,IAAI,CAACF,UAAU,CAACW,uBAAuB,IAAIkB,WAAW;QACtD,IAAI,CAACnC,gBAAgB,GAAG,IAAI;QAC5B,IAAI,CAACC,mBAAmB,GAAG,IAAI;QAC/B,IAAImC,SAAS,CAACH,YAAY,IAAI,IAAI,EAAE;UAClC,IAAI,CAAC3B,UAAU,CAACO,mBAAmB,IAAIuB,SAAS,CAACH,YAAY;UAC7D,IAAI,CAAC3B,UAAU,CAACK,iBAAiB,IAAIyB,SAAS,CAACH,YAAY;QAC7D;QACA;MAEF,KAAK,cAAc;QACjB,IAAI,CAAC3B,UAAU,CAACY,aAAa,EAAE;QAC/B,IAAI,CAACZ,UAAU,CAACU,qBAAqB,IAAImB,WAAW;QACpD,IAAI,CAACnC,gBAAgB,GAAG,IAAI;QAC5B,IAAIoC,SAAS,CAACH,YAAY,IAAI,IAAI,EAAE;UAClC,IAAI,CAAC3B,UAAU,CAACO,mBAAmB,IAAIuB,SAAS,CAACH,YAAY;UAC7D,IAAI,CAAC3B,UAAU,CAACK,iBAAiB,IAAIyB,SAAS,CAACH,YAAY;QAC7D;QACA;MAEF,KAAK,eAAe;QAClB,IAAI,CAAC3B,UAAU,CAACG,cAAc,EAAE;QAChC,IAAI,CAACH,UAAU,CAACQ,aAAa,EAAE;QAC/B;MAEF,KAAK,mBAAmB;QACtB,IAAI,CAACR,UAAU,CAACI,iBAAiB,EAAE;QACnC;MAEF,KAAK,QAAQ;QACX,IAAI,CAACJ,UAAU,CAACa,WAAW,EAAE;QAC7B,IAAIiB,SAAS,CAACgD,oBAAoB,EAAE;UAClC,IAAI,CAAC9E,UAAU,CAACc,+BAA+B,EAAE;QACnD;QACA,IAAIgB,SAAS,CAACiD,kBAAkB,EAAE;UAChC,IAAI,CAAC/E,UAAU,CAACe,qBAAqB,EAAE;QACzC;QACA,IAAIe,SAAS,CAACkD,QAAQ,EAAE;UACtB,IAAI,CAAChF,UAAU,CAACgB,mBAAmB,EAAE;QACvC;QACA,IAAIc,SAAS,CAACmD,oBAAoB,IAAI,IAAI,EAAE;UAC1C,IAAI,CAACjF,UAAU,CAACiB,yBAAyB,IACvCa,SAAS,CAACmD,oBAAoB;QAClC;QACA,IAAInD,SAAS,CAACoD,mBAAmB,IAAI,IAAI,EAAE;UACzC,IAAI,CAAClF,UAAU,CAACkB,wBAAwB,IACtCY,SAAS,CAACoD,mBAAmB;QACjC;QACA,IAAIpD,SAAS,CAACqD,gBAAgB,IAAI,IAAI,EAAE;UACtC,IAAI,CAACnF,UAAU,CAACmB,qBAAqB,IAAIW,SAAS,CAACqD,gBAAgB;QACrE;QACA,IAAIrD,SAAS,CAACsD,yBAAyB,IAAI,IAAI,EAAE;UAC/C,IAAI,CAACpF,UAAU,CAACoB,8BAA8B,IAC5CU,SAAS,CAACsD,yBAAyB;QACvC;QACA;MAEF,KAAK,mBAAmB;QACtB,IAAI,CAACpF,UAAU,CAACqB,eAAe,EAAE;QACjC,IAAIS,SAAS,CAACH,YAAY,IAAI,IAAI,EAAE;UAClC,IAAI,CAAC3B,UAAU,CAACsB,mBAAmB,IAAIQ,SAAS,CAACH,YAAY;QAC/D;QACA;IACJ;EACF;EAEQ2B,cAAcA,CAAA,EAAgB;IACpC,MAAM+B,KAAK,GACT,IAAI,CAACrF,UAAU,CAACC,SAAS,GACzB,IAAI,CAACD,UAAU,CAACE,WAAW,GAC3B,IAAI,CAACF,UAAU,CAACY,aAAa;IAC/B,MAAM0E,aAAa,GAAGD,KAAK,GAAG,IAAI,CAACrF,UAAU,CAACG,cAAc;IAC5D,MAAMU,WAAW,GAAG,IAAI,CAACb,UAAU,CAACa,WAAW;IAC/C,MAAME,qBAAqB,GAAG,IAAI,CAACf,UAAU,CAACe,qBAAqB;IACnE,MAAMwE,qBAAqB,GACzB,IAAI,CAACvF,UAAU,CAACqB,eAAe,GAAG,CAAC,GAC/B,IAAI,CAACrB,UAAU,CAACsB,mBAAmB,GAAG,IAAI,CAACtB,UAAU,CAACqB,eAAe,GACrE,CAAC;IACP,MAAMmE,0BAA0B,GAC9B3E,WAAW,GAAG,CAAC,GACX,IAAI,CAACb,UAAU,CAACkB,wBAAwB,GAAGL,WAAW,GACtD,CAAC;IAEP,OAAO;MACL4E,YAAY,EACVJ,KAAK,GAAG,CAAC,GACL,CAAC,IAAI,CAACrF,UAAU,CAACC,SAAS,GAAG,IAAI,CAACD,UAAU,CAACY,aAAa,IAAIyE,KAAK,GACnE,CAAC;MACPK,iBAAiB,EACfJ,aAAa,GAAG,CAAC,GAAG,IAAI,CAACtF,UAAU,CAACG,cAAc,GAAGmF,aAAa,GAAG,CAAC;MACxEK,oBAAoB,EAClBL,aAAa,GAAG,CAAC,GACb,IAAI,CAACtF,UAAU,CAACI,iBAAiB,GAAGkF,aAAa,GACjD,CAAC;MACPM,mBAAmB,EACjBP,KAAK,GAAG,CAAC,GAAG,IAAI,CAACrF,UAAU,CAACK,iBAAiB,GAAGgF,KAAK,GAAG,CAAC;MAC3DQ,yBAAyB,EACvB,IAAI,CAAC7F,UAAU,CAACC,SAAS,GAAG,CAAC,GACzB,IAAI,CAACD,UAAU,CAACM,kBAAkB,GAAG,IAAI,CAACN,UAAU,CAACC,SAAS,GAC9D,CAAC;MACP6F,wBAAwB,EACtBjF,WAAW,GAAG,CAAC,GAAGE,qBAAqB,GAAGF,WAAW,GAAG,CAAC;MAC3DkF,8BAA8B,EAC5BlF,WAAW,GAAG,CAAC,GACX,IAAI,CAACb,UAAU,CAACc,+BAA+B,GAAGD,WAAW,GAC7D,CAAC;MACPmF,YAAY,EACVnF,WAAW,GAAG,CAAC,GAAG,IAAI,CAACb,UAAU,CAACgB,mBAAmB,GAAGH,WAAW,GAAG,CAAC;MACzEoF,2BAA2B,EACzBlF,qBAAqB,GAAG,CAAC,GACrB,IAAI,CAACf,UAAU,CAACiB,yBAAyB,GAAGF,qBAAqB,GACjE,CAAC;MACPyE,0BAA0B;MAC1BU,uBAAuB,EACrBnF,qBAAqB,GAAG,CAAC,GACrB,IAAI,CAACf,UAAU,CAACmB,qBAAqB,GAAGJ,qBAAqB,GAC7D,CAAC;MACPwE,qBAAqB;MACrBY,mBAAmB,EAAEC,IAAI,CAACC,GAAG,CAC3B,CAAC,EACDb,0BAA0B,GAAGD,qBAC/B;IACF,CAAC;EACH;EAEQtB,gBAAgBA,CAAA,EAAS;IAC/B,MAAM5B,GAAG,GAAGD,IAAI,CAACC,GAAG,CAAC,CAAC;IACtB,MAAMiE,aAAa,GAAGF,IAAI,CAACG,KAAK,CAAClE,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI;IAEnD,MAAMmE,aAAa,GACjB,IAAI,CAACjF,UAAU,CAACC,UAAU,CAAC,IAAI,CAACD,UAAU,CAACC,UAAU,CAACmC,MAAM,GAAG,CAAC,CAAC;IACnE,IAAI6C,aAAa,KAAKF,aAAa,EAAE;MACnC;IACF;IAEA,IAAI,IAAI,CAAC/E,UAAU,CAACC,UAAU,CAACmC,MAAM,IAAI,IAAI,CAAC7D,cAAc,EAAE;MAC5D,IAAI,CAACyB,UAAU,CAACC,UAAU,CAACiF,KAAK,CAAC,CAAC;MAClC,IAAI,CAAClF,UAAU,CAACtB,SAAS,CAACwG,KAAK,CAAC,CAAC;MACjC,IAAI,CAAClF,UAAU,CAACrB,WAAW,CAACuG,KAAK,CAAC,CAAC;MACnC,IAAI,CAAClF,UAAU,CAACX,aAAa,CAAC6F,KAAK,CAAC,CAAC;MACrC,IAAI,CAAClF,UAAU,CAACpB,cAAc,CAACsG,KAAK,CAAC,CAAC;IACxC;IAEA,MAAMC,SAAS,GAAG,IAAI,CAAC3G,UAAU,CAAC4G,OAAO,CAAC,GAAG,CAAC;IAC9C,IAAI1G,SAAS,GAAG,CAAC;IACjB,IAAIC,WAAW,GAAG,CAAC;IACnB,IAAIU,aAAa,GAAG,CAAC;IACrB,IAAIT,cAAc,GAAG,CAAC;IAEtB,KAAK,MAAMyG,EAAE,IAAIF,SAAS,EAAE;MAC1B,IACEE,EAAE,CAACzE,SAAS,IAAImE,aAAa,GAAG,IAAI,IACpCM,EAAE,CAACzE,SAAS,GAAGmE,aAAa,EAC5B;QACA,QAAQM,EAAE,CAAC1E,IAAI;UACb,KAAK,WAAW;YACdjC,SAAS,EAAE;YACX;UACF,KAAK,YAAY;YACfC,WAAW,EAAE;YACb;UACF,KAAK,cAAc;YACjBU,aAAa,EAAE;YACf;UACF,KAAK,eAAe;YAClBT,cAAc,EAAE;YAChB;QACJ;MACF;IACF;IAEA,IAAI,CAACoB,UAAU,CAACC,UAAU,CAAC6C,IAAI,CAACiC,aAAa,CAAC;IAC9C,IAAI,CAAC/E,UAAU,CAACtB,SAAS,CAACoE,IAAI,CAACpE,SAAS,CAAC;IACzC,IAAI,CAACsB,UAAU,CAACrB,WAAW,CAACmE,IAAI,CAACnE,WAAW,CAAC;IAC7C,IAAI,CAACqB,UAAU,CAACX,aAAa,CAACyD,IAAI,CAACzD,aAAa,CAAC;IACjD,IAAI,CAACW,UAAU,CAACpB,cAAc,CAACkE,IAAI,CAAClE,cAAc,CAAC;IAEnD,IAAI,CAACf,YAAY,GAAG,IAAI;IACxB,IAAI,CAACwE,iBAAiB,CAAC,CAAC;EAC1B;EAEQrB,mBAAmBA,CAAA,EAA6B;IACtD,IAAI,IAAI,CAAC7C,gBAAgB,EAAE;MACzB,MAAMmH,YAAY,GAAG,IAAI,CAAC9G,UAAU,CACjC4G,OAAO,CAAC,GAAG,CAAC,CACZG,MAAM,CAAEF,EAAE,IAAKA,EAAE,CAAC1E,IAAI,KAAK,YAAY,IAAI0E,EAAE,CAACjF,YAAY,IAAI,IAAI,CAAC;MAEtE,IAAIkF,YAAY,CAAClD,MAAM,GAAG,CAAC,EAAE;QAC3B,MAAMoD,SAAS,GAAGF,YAAY,CAACG,MAAM,CACnC,CAACC,GAAG,EAAEL,EAAE,KAAKK,GAAG,IAAIL,EAAE,CAACjF,YAAY,IAAI,CAAC,CAAC,EACzC,CACF,CAAC;QACD,IAAI,CAACnC,oBAAoB,GAAGuH,SAAS,GAAGF,YAAY,CAAClD,MAAM;MAC7D;MACA,IAAI,CAACjE,gBAAgB,GAAG,KAAK;IAC/B;IACA,OAAO,IAAI,CAACF,oBAAoB;EAClC;EAEQqF,aAAaA,CAAA,EAA6B;IAChD,IAAI,IAAI,CAAClF,mBAAmB,EAAE;MAC5B,MAAMkH,YAAY,GAAG,IAAI,CAAC9G,UAAU,CACjC4G,OAAO,CAAC,GAAG,CAAC,CACZG,MAAM,CACJF,EAAE,IACDA,EAAE,CAAC1E,IAAI,KAAK,YAAY,IACxB0E,EAAE,CAAC/E,WAAW,IAAI,IAAI,IACtB+E,EAAE,CAAC/E,WAAW,GAAG,CACrB,CAAC;MAEH,IAAIgF,YAAY,CAAClD,MAAM,GAAG,CAAC,EAAE;QAC3B,MAAMuD,cAAc,GAClBL,YAAY,CAACG,MAAM,CAAC,CAACC,GAAG,EAAEL,EAAE,KAAKK,GAAG,IAAIL,EAAE,CAAC/E,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAChEgF,YAAY,CAAClD,MAAM;QACrB,IAAI,CAAClE,uBAAuB,GAAGyH,cAAc,GAAG,IAAI;MACtD;MACA,IAAI,CAACvH,mBAAmB,GAAG,KAAK;IAClC;IACA,OAAO,IAAI,CAACF,uBAAuB;EACrC;EAEA0H,iBAAiBA,CAACC,KAAkB,EAAQ;IAC1C,IAAI,CAAC7H,YAAY,CAAC8E,IAAI,CAAC+C,KAAK,CAAC;IAE7B,IAAI,IAAI,CAAC7H,YAAY,CAACoE,MAAM,GAAG,GAAG,EAAE;MAClC,IAAI,CAACpE,YAAY,CAACkH,KAAK,CAAC,CAAC;IAC3B;IAEA,IAAI,CAAC7C,iBAAiB,CAAC,CAAC;EAC1B;EAEAyD,eAAeA,CAAA,EAAkB;IAC/B,OAAO,CAAC,GAAG,IAAI,CAAC9H,YAAY,CAAC,CAAC+H,OAAO,CAAC,CAAC;EACzC;EAEAC,eAAeA,CAAA,EAAW;IACxB,MAAMlC,KAAK,GACT,IAAI,CAACrF,UAAU,CAACC,SAAS,GACzB,IAAI,CAACD,UAAU,CAACE,WAAW,GAC3B,IAAI,CAACF,UAAU,CAACY,aAAa;IAC/B,OAAOyE,KAAK,GAAG,CAAC,GACZ,CAAC,IAAI,CAACrF,UAAU,CAACC,SAAS,GAAG,IAAI,CAACD,UAAU,CAACY,aAAa,IAAIyE,KAAK,GACnE,CAAC;EACP;AACF","ignoreList":[]}
@@ -1 +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":"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","ignoreList":[]}
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(client);\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 async clearCache(): Promise<void> {\n if (!this.monitor) {\n return;\n }\n\n try {\n await this.monitor.invalidateAll();\n } catch {}\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +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":[]}
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(reason: unknown): {\n message: string;\n stack?: string;\n} {\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: ((event: PromiseRejectionEvent) => void) | null =\n 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 =\n event.message ||\n (event.error instanceof Error ? event.error.message : \"Error\");\n const stack =\n event.error instanceof Error ? event.error.stack : 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":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","names":[],"sources":["styles.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// Placeholder. scripts/build-css.mjs replaces the transpiled\n// build/esm/styles.js with a runtime-injection module that adds devtools\n// styles (including Blueprint) to document.head when the package is\n// imported.\n\nexport {};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA","ignoreList":[]}
1
+ {"version":3,"file":"styles.js","names":[],"sources":["styles.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// Placeholder. scripts/build-css.mjs replaces the transpiled\n// build/esm/styles.js with a runtime-injection module that adds devtools\n// styles (including Blueprint) to document.head when the package is\n// imported.\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"compute.js","names":[],"sources":["compute.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\ninterface ComputeRequestBase {\n id: string;\n requestUrl: string;\n requestTimestamp: Date;\n requestPayload: string;\n requestPayloadHash: number;\n}\n\nexport interface PendingComputeRequest extends ComputeRequestBase {\n type: \"pending\";\n}\n\nexport type ComputeRequestError =\n | { type: \"osdk-network-paused\" }\n | {\n type: \"api-gateway-error\";\n status: number;\n errorCode: string;\n errorInstanceId: string;\n errorName: string;\n }\n | { type: \"http-error\"; status: number; message?: string }\n | { type: \"fetch-error\"; message: string }\n | { type: \"unknown\" };\n\nexport interface FailedComputeRequest extends ComputeRequestBase {\n type: \"failed\";\n failedTimestamp: Date;\n error: ComputeRequestError;\n}\n\nexport interface FulfilledComputeRequest extends ComputeRequestBase {\n type: \"fulfilled\";\n computeUsage: number;\n responseTimestamp: Date;\n responsePayload: string;\n responsePayloadBytes: number;\n responsePayloadHash: number;\n}\n\nexport interface FulfilledWithoutUsageComputeRequest\n extends ComputeRequestBase\n{\n type: \"fulfilled-without-usage\";\n responseTimestamp: Date;\n responsePayload: string;\n responsePayloadBytes: number;\n responsePayloadHash: number;\n}\n\nexport type ComputeRequest =\n | FulfilledComputeRequest\n | FulfilledWithoutUsageComputeRequest\n | PendingComputeRequest\n | FailedComputeRequest;\n\nexport interface ComputeMetrics {\n readonly totalUsage: number;\n readonly lastMinuteUsage: number;\n readonly requestCount: number;\n readonly fulfilledCount: number;\n readonly fulfilledWithoutUsageCount: number;\n readonly failedCount: number;\n readonly pendingCount: number;\n readonly averageUsagePerRequest: number;\n readonly averageResponseBytes: number;\n}\n\nexport interface RecordingEvent {\n type: \"started\" | \"ended\";\n timestamp: Date;\n endTimestamp?: Date;\n}\n\nexport interface ComputeSnapshot {\n readonly metrics: ComputeMetrics;\n readonly requests: ReadonlyArray<ComputeRequest>;\n readonly isRecording: boolean;\n readonly isNetworkPaused: boolean;\n readonly lastRecordingEvent: RecordingEvent | undefined;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"compute.js","names":[],"sources":["compute.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\ninterface ComputeRequestBase {\n id: string;\n requestUrl: string;\n requestTimestamp: Date;\n requestPayload: string;\n requestPayloadHash: number;\n}\n\nexport interface PendingComputeRequest extends ComputeRequestBase {\n type: \"pending\";\n}\n\nexport type ComputeRequestError =\n | { type: \"osdk-network-paused\" }\n | {\n type: \"api-gateway-error\";\n status: number;\n errorCode: string;\n errorInstanceId: string;\n errorName: string;\n }\n | { type: \"http-error\"; status: number; message?: string }\n | { type: \"fetch-error\"; message: string }\n | { type: \"unknown\" };\n\nexport interface FailedComputeRequest extends ComputeRequestBase {\n type: \"failed\";\n failedTimestamp: Date;\n error: ComputeRequestError;\n}\n\nexport interface FulfilledComputeRequest extends ComputeRequestBase {\n type: \"fulfilled\";\n computeUsage: number;\n responseTimestamp: Date;\n responsePayload: string;\n responsePayloadBytes: number;\n responsePayloadHash: number;\n}\n\nexport interface FulfilledWithoutUsageComputeRequest extends ComputeRequestBase {\n type: \"fulfilled-without-usage\";\n responseTimestamp: Date;\n responsePayload: string;\n responsePayloadBytes: number;\n responsePayloadHash: number;\n}\n\nexport type ComputeRequest =\n | FulfilledComputeRequest\n | FulfilledWithoutUsageComputeRequest\n | PendingComputeRequest\n | FailedComputeRequest;\n\nexport interface ComputeMetrics {\n readonly totalUsage: number;\n readonly lastMinuteUsage: number;\n readonly requestCount: number;\n readonly fulfilledCount: number;\n readonly fulfilledWithoutUsageCount: number;\n readonly failedCount: number;\n readonly pendingCount: number;\n readonly averageUsagePerRequest: number;\n readonly averageResponseBytes: number;\n}\n\nexport interface RecordingEvent {\n type: \"started\" | \"ended\";\n timestamp: Date;\n endTimestamp?: Date;\n}\n\nexport interface ComputeSnapshot {\n readonly metrics: ComputeMetrics;\n readonly requests: ReadonlyArray<ComputeRequest>;\n readonly isRecording: boolean;\n readonly isNetworkPaused: boolean;\n readonly lastRecordingEvent: RecordingEvent | undefined;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionLifecycleTracker.js","names":["ActionLifecycleTracker","actions","Map","layerToAction","subscriptions","constructor","metricsStore","eventTimeline","startAction","options","actionId","crypto","randomUUID","timestamp","Date","now","set","signature","metadata","actionName","startedAt","optimisticConfigured","optimisticSeen","rollback","optimisticObjectsAffected","optimisticLayerIds","Set","optimisticLayerCount","record","type","componentId","registerOptimisticLayer","layerId","action","get","add","handleLayerCleared","delete","lastLayerClearedTimestamp","firstConfirmationTimestamp","undefined","noteEmission","subscriptionId","optimisticId","isOptimistic","objectCount","optimisticRenderTimestamp","state","counted","clearSubscription","markActionSettled","completedAt","succeeded","success","finalizeAction","serverRoundTripTime","optimisticRenderTime","perceivedSpeedup","renderGapBeforeServer","optimisticObserved","recordActionLifecycle","id","dispose","clear"],"sources":["ActionLifecycleTracker.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 { MetricsStore } from \"../store/MetricsStore.js\";\nimport type { OperationMetadata } from \"../types/index.js\";\nimport type { EventTimeline } from \"./EventTimeline.js\";\n\ninterface ActionLifecycleData {\n readonly actionId: string;\n readonly signature: string;\n readonly metadata?: OperationMetadata;\n readonly startedAt: number;\n readonly optimisticConfigured: boolean;\n readonly actionName?: string;\n optimisticSeen: boolean;\n optimisticRenderTimestamp?: number;\n firstConfirmationTimestamp?: number;\n lastLayerClearedTimestamp?: number;\n completedAt?: number;\n rollback: boolean;\n optimisticObjectsAffected: number;\n optimisticLayerIds: Set<unknown>;\n optimisticLayerCount: number;\n}\n\ninterface SubscriptionState {\n actionId?: string;\n optimisticId?: string | number;\n counted?: boolean;\n}\n\ninterface StartActionOptions {\n signature: string;\n actionName?: string;\n metadata?: OperationMetadata;\n optimisticConfigured: boolean;\n componentId?: string;\n}\n\ninterface SettleActionOptions {\n actionId: string;\n succeeded: boolean;\n completedAt: number;\n}\n\ninterface EmissionOptions {\n subscriptionId: string;\n optimisticId?: string | number;\n isOptimistic: boolean;\n timestamp: number;\n objectCount: number;\n}\n\nexport class ActionLifecycleTracker {\n private readonly actions = new Map<string, ActionLifecycleData>();\n private readonly layerToAction = new Map<unknown, string>();\n private readonly subscriptions = new Map<string, SubscriptionState>();\n\n constructor(\n private readonly metricsStore: MetricsStore,\n private readonly eventTimeline?: EventTimeline,\n ) {}\n\n startAction(options: StartActionOptions): string {\n const actionId = crypto.randomUUID();\n const timestamp = Date.now();\n\n this.actions.set(actionId, {\n actionId,\n signature: options.signature,\n metadata: options.metadata,\n actionName: options.actionName,\n startedAt: timestamp,\n optimisticConfigured: options.optimisticConfigured,\n optimisticSeen: false,\n rollback: false,\n optimisticObjectsAffected: 0,\n optimisticLayerIds: new Set(),\n optimisticLayerCount: 0,\n });\n\n if (this.eventTimeline && options.actionName) {\n this.eventTimeline.record({\n type: \"ACTION_START\",\n actionId,\n actionName: options.actionName,\n timestamp,\n componentId: options.componentId,\n });\n }\n\n return actionId;\n }\n\n registerOptimisticLayer(actionId: string, layerId: unknown): void {\n const action = this.actions.get(actionId);\n if (!action) return;\n\n action.optimisticLayerIds.add(layerId);\n action.optimisticSeen = true;\n action.optimisticLayerCount++;\n this.layerToAction.set(layerId, actionId);\n }\n\n handleLayerCleared(layerId: unknown, timestamp: number): void {\n const actionId = this.layerToAction.get(layerId);\n if (!actionId) return;\n\n const action = this.actions.get(actionId);\n if (!action) {\n this.layerToAction.delete(layerId);\n return;\n }\n\n action.optimisticLayerIds.delete(layerId);\n action.lastLayerClearedTimestamp = timestamp;\n if (action.firstConfirmationTimestamp === undefined) {\n action.firstConfirmationTimestamp = timestamp;\n }\n\n this.layerToAction.delete(layerId);\n }\n\n noteEmission(options: EmissionOptions): void {\n const {\n subscriptionId,\n optimisticId,\n isOptimistic,\n timestamp,\n objectCount,\n } = options;\n\n if (isOptimistic && optimisticId != null) {\n const actionId = this.layerToAction.get(optimisticId);\n if (!actionId) {\n return;\n }\n\n const action = this.actions.get(actionId);\n if (!action) {\n return;\n }\n\n action.optimisticSeen = true;\n if (\n action.optimisticRenderTimestamp === undefined\n || timestamp < action.optimisticRenderTimestamp\n ) {\n action.optimisticRenderTimestamp = timestamp;\n }\n\n const state = this.subscriptions.get(subscriptionId) ?? {};\n if (state.actionId !== actionId) {\n state.counted = false;\n }\n state.actionId = actionId;\n state.optimisticId = optimisticId;\n\n if (objectCount > 0 && state.counted !== true) {\n action.optimisticObjectsAffected += objectCount;\n state.counted = true;\n }\n\n this.subscriptions.set(subscriptionId, state);\n return;\n }\n\n const state = this.subscriptions.get(subscriptionId);\n if (!state?.actionId) {\n return;\n }\n\n const action = this.actions.get(state.actionId);\n if (!action) {\n this.subscriptions.delete(subscriptionId);\n return;\n }\n\n if (action.firstConfirmationTimestamp === undefined) {\n action.firstConfirmationTimestamp = timestamp;\n }\n\n if (!isOptimistic) {\n this.subscriptions.delete(subscriptionId);\n }\n }\n\n clearSubscription(subscriptionId: string): void {\n this.subscriptions.delete(subscriptionId);\n }\n\n markActionSettled(options: SettleActionOptions): void {\n const action = this.actions.get(options.actionId);\n if (!action) return;\n\n action.completedAt = options.completedAt;\n action.rollback = !options.succeeded;\n\n if (action.firstConfirmationTimestamp === undefined) {\n action.firstConfirmationTimestamp = action.lastLayerClearedTimestamp\n ?? options.completedAt;\n }\n\n if (this.eventTimeline) {\n this.eventTimeline.record({\n type: \"ACTION_COMPLETE\",\n actionId: options.actionId,\n timestamp: options.completedAt,\n success: options.succeeded,\n });\n }\n\n this.finalizeAction(action);\n }\n\n private finalizeAction(action: ActionLifecycleData): void {\n const completedAt = action.completedAt ?? Date.now();\n const serverRoundTripTime = completedAt - action.startedAt;\n const optimisticRenderTime = action.optimisticRenderTimestamp != null\n ? action.optimisticRenderTimestamp - action.startedAt\n : undefined;\n const perceivedSpeedup = optimisticRenderTime != null\n ? serverRoundTripTime - optimisticRenderTime\n : undefined;\n const renderGapBeforeServer = action.optimisticRenderTimestamp != null\n && action.firstConfirmationTimestamp != null\n ? action.firstConfirmationTimestamp\n - action.optimisticRenderTimestamp\n : undefined;\n const optimisticObserved = action.optimisticLayerCount > 0\n || action.optimisticSeen;\n\n this.metricsStore.recordActionLifecycle({\n id: action.actionId,\n type: \"action\",\n signature: action.signature,\n timestamp: completedAt,\n metadata: action.metadata,\n actionName: action.actionName,\n optimisticConfigured: action.optimisticConfigured,\n optimisticObserved,\n optimisticRenderTime,\n serverRoundTripTime,\n perceivedSpeedup,\n rollback: action.rollback,\n optimisticObjectsAffected: action.optimisticObjectsAffected,\n renderGapBeforeServer,\n optimisticLayerCount: action.optimisticLayerCount,\n });\n\n this.actions.delete(action.actionId);\n }\n\n dispose(): void {\n this.actions.clear();\n this.layerToAction.clear();\n this.subscriptions.clear();\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ActionLifecycleTracker.js","names":["ActionLifecycleTracker","actions","Map","layerToAction","subscriptions","constructor","metricsStore","eventTimeline","startAction","options","actionId","crypto","randomUUID","timestamp","Date","now","set","signature","metadata","actionName","startedAt","optimisticConfigured","optimisticSeen","rollback","optimisticObjectsAffected","optimisticLayerIds","Set","optimisticLayerCount","record","type","componentId","registerOptimisticLayer","layerId","action","get","add","handleLayerCleared","delete","lastLayerClearedTimestamp","firstConfirmationTimestamp","undefined","noteEmission","subscriptionId","optimisticId","isOptimistic","objectCount","optimisticRenderTimestamp","state","counted","clearSubscription","markActionSettled","completedAt","succeeded","success","finalizeAction","serverRoundTripTime","optimisticRenderTime","perceivedSpeedup","renderGapBeforeServer","optimisticObserved","recordActionLifecycle","id","dispose","clear"],"sources":["ActionLifecycleTracker.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 { MetricsStore } from \"../store/MetricsStore.js\";\nimport type { OperationMetadata } from \"../types/index.js\";\nimport type { EventTimeline } from \"./EventTimeline.js\";\n\ninterface ActionLifecycleData {\n readonly actionId: string;\n readonly signature: string;\n readonly metadata?: OperationMetadata;\n readonly startedAt: number;\n readonly optimisticConfigured: boolean;\n readonly actionName?: string;\n optimisticSeen: boolean;\n optimisticRenderTimestamp?: number;\n firstConfirmationTimestamp?: number;\n lastLayerClearedTimestamp?: number;\n completedAt?: number;\n rollback: boolean;\n optimisticObjectsAffected: number;\n optimisticLayerIds: Set<unknown>;\n optimisticLayerCount: number;\n}\n\ninterface SubscriptionState {\n actionId?: string;\n optimisticId?: string | number;\n counted?: boolean;\n}\n\ninterface StartActionOptions {\n signature: string;\n actionName?: string;\n metadata?: OperationMetadata;\n optimisticConfigured: boolean;\n componentId?: string;\n}\n\ninterface SettleActionOptions {\n actionId: string;\n succeeded: boolean;\n completedAt: number;\n}\n\ninterface EmissionOptions {\n subscriptionId: string;\n optimisticId?: string | number;\n isOptimistic: boolean;\n timestamp: number;\n objectCount: number;\n}\n\nexport class ActionLifecycleTracker {\n private readonly actions = new Map<string, ActionLifecycleData>();\n private readonly layerToAction = new Map<unknown, string>();\n private readonly subscriptions = new Map<string, SubscriptionState>();\n\n constructor(\n private readonly metricsStore: MetricsStore,\n private readonly eventTimeline?: EventTimeline\n ) {}\n\n startAction(options: StartActionOptions): string {\n const actionId = crypto.randomUUID();\n const timestamp = Date.now();\n\n this.actions.set(actionId, {\n actionId,\n signature: options.signature,\n metadata: options.metadata,\n actionName: options.actionName,\n startedAt: timestamp,\n optimisticConfigured: options.optimisticConfigured,\n optimisticSeen: false,\n rollback: false,\n optimisticObjectsAffected: 0,\n optimisticLayerIds: new Set(),\n optimisticLayerCount: 0,\n });\n\n if (this.eventTimeline && options.actionName) {\n this.eventTimeline.record({\n type: \"ACTION_START\",\n actionId,\n actionName: options.actionName,\n timestamp,\n componentId: options.componentId,\n });\n }\n\n return actionId;\n }\n\n registerOptimisticLayer(actionId: string, layerId: unknown): void {\n const action = this.actions.get(actionId);\n if (!action) return;\n\n action.optimisticLayerIds.add(layerId);\n action.optimisticSeen = true;\n action.optimisticLayerCount++;\n this.layerToAction.set(layerId, actionId);\n }\n\n handleLayerCleared(layerId: unknown, timestamp: number): void {\n const actionId = this.layerToAction.get(layerId);\n if (!actionId) return;\n\n const action = this.actions.get(actionId);\n if (!action) {\n this.layerToAction.delete(layerId);\n return;\n }\n\n action.optimisticLayerIds.delete(layerId);\n action.lastLayerClearedTimestamp = timestamp;\n if (action.firstConfirmationTimestamp === undefined) {\n action.firstConfirmationTimestamp = timestamp;\n }\n\n this.layerToAction.delete(layerId);\n }\n\n noteEmission(options: EmissionOptions): void {\n const {\n subscriptionId,\n optimisticId,\n isOptimistic,\n timestamp,\n objectCount,\n } = options;\n\n if (isOptimistic && optimisticId != null) {\n const actionId = this.layerToAction.get(optimisticId);\n if (!actionId) {\n return;\n }\n\n const action = this.actions.get(actionId);\n if (!action) {\n return;\n }\n\n action.optimisticSeen = true;\n if (\n action.optimisticRenderTimestamp === undefined ||\n timestamp < action.optimisticRenderTimestamp\n ) {\n action.optimisticRenderTimestamp = timestamp;\n }\n\n const state = this.subscriptions.get(subscriptionId) ?? {};\n if (state.actionId !== actionId) {\n state.counted = false;\n }\n state.actionId = actionId;\n state.optimisticId = optimisticId;\n\n if (objectCount > 0 && state.counted !== true) {\n action.optimisticObjectsAffected += objectCount;\n state.counted = true;\n }\n\n this.subscriptions.set(subscriptionId, state);\n return;\n }\n\n const state = this.subscriptions.get(subscriptionId);\n if (!state?.actionId) {\n return;\n }\n\n const action = this.actions.get(state.actionId);\n if (!action) {\n this.subscriptions.delete(subscriptionId);\n return;\n }\n\n if (action.firstConfirmationTimestamp === undefined) {\n action.firstConfirmationTimestamp = timestamp;\n }\n\n if (!isOptimistic) {\n this.subscriptions.delete(subscriptionId);\n }\n }\n\n clearSubscription(subscriptionId: string): void {\n this.subscriptions.delete(subscriptionId);\n }\n\n markActionSettled(options: SettleActionOptions): void {\n const action = this.actions.get(options.actionId);\n if (!action) return;\n\n action.completedAt = options.completedAt;\n action.rollback = !options.succeeded;\n\n if (action.firstConfirmationTimestamp === undefined) {\n action.firstConfirmationTimestamp =\n action.lastLayerClearedTimestamp ?? options.completedAt;\n }\n\n if (this.eventTimeline) {\n this.eventTimeline.record({\n type: \"ACTION_COMPLETE\",\n actionId: options.actionId,\n timestamp: options.completedAt,\n success: options.succeeded,\n });\n }\n\n this.finalizeAction(action);\n }\n\n private finalizeAction(action: ActionLifecycleData): void {\n const completedAt = action.completedAt ?? Date.now();\n const serverRoundTripTime = completedAt - action.startedAt;\n const optimisticRenderTime =\n action.optimisticRenderTimestamp != null\n ? action.optimisticRenderTimestamp - action.startedAt\n : undefined;\n const perceivedSpeedup =\n optimisticRenderTime != null\n ? serverRoundTripTime - optimisticRenderTime\n : undefined;\n const renderGapBeforeServer =\n action.optimisticRenderTimestamp != null &&\n action.firstConfirmationTimestamp != null\n ? action.firstConfirmationTimestamp - action.optimisticRenderTimestamp\n : undefined;\n const optimisticObserved =\n action.optimisticLayerCount > 0 || action.optimisticSeen;\n\n this.metricsStore.recordActionLifecycle({\n id: action.actionId,\n type: \"action\",\n signature: action.signature,\n timestamp: completedAt,\n metadata: action.metadata,\n actionName: action.actionName,\n optimisticConfigured: action.optimisticConfigured,\n optimisticObserved,\n optimisticRenderTime,\n serverRoundTripTime,\n perceivedSpeedup,\n rollback: action.rollback,\n optimisticObjectsAffected: action.optimisticObjectsAffected,\n renderGapBeforeServer,\n optimisticLayerCount: action.optimisticLayerCount,\n });\n\n this.actions.delete(action.actionId);\n }\n\n dispose(): void {\n this.actions.clear();\n this.layerToAction.clear();\n this.subscriptions.clear();\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAoDA,OAAO,MAAMA,sBAAsB,CAAC;EACjBC,OAAO,GAAG,IAAIC,GAAG,CAA8B,CAAC;EAChDC,aAAa,GAAG,IAAID,GAAG,CAAkB,CAAC;EAC1CE,aAAa,GAAG,IAAIF,GAAG,CAA4B,CAAC;EAErEG,WAAWA,CACQC,YAA0B,EAC1BC,aAA6B,EAC9C;IAAA,KAFiBD,YAA0B,GAA1BA,YAA0B;IAAA,KAC1BC,aAA6B,GAA7BA,aAA6B;EAC7C;EAEHC,WAAWA,CAACC,OAA2B,EAAU;IAC/C,MAAMC,QAAQ,GAAGC,MAAM,CAACC,UAAU,CAAC,CAAC;IACpC,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAE5B,IAAI,CAACd,OAAO,CAACe,GAAG,CAACN,QAAQ,EAAE;MACzBA,QAAQ;MACRO,SAAS,EAAER,OAAO,CAACQ,SAAS;MAC5BC,QAAQ,EAAET,OAAO,CAACS,QAAQ;MAC1BC,UAAU,EAAEV,OAAO,CAACU,UAAU;MAC9BC,SAAS,EAAEP,SAAS;MACpBQ,oBAAoB,EAAEZ,OAAO,CAACY,oBAAoB;MAClDC,cAAc,EAAE,KAAK;MACrBC,QAAQ,EAAE,KAAK;MACfC,yBAAyB,EAAE,CAAC;MAC5BC,kBAAkB,EAAE,IAAIC,GAAG,CAAC,CAAC;MAC7BC,oBAAoB,EAAE;IACxB,CAAC,CAAC;IAEF,IAAI,IAAI,CAACpB,aAAa,IAAIE,OAAO,CAACU,UAAU,EAAE;MAC5C,IAAI,CAACZ,aAAa,CAACqB,MAAM,CAAC;QACxBC,IAAI,EAAE,cAAc;QACpBnB,QAAQ;QACRS,UAAU,EAAEV,OAAO,CAACU,UAAU;QAC9BN,SAAS;QACTiB,WAAW,EAAErB,OAAO,CAACqB;MACvB,CAAC,CAAC;IACJ;IAEA,OAAOpB,QAAQ;EACjB;EAEAqB,uBAAuBA,CAACrB,QAAgB,EAAEsB,OAAgB,EAAQ;IAChE,MAAMC,MAAM,GAAG,IAAI,CAAChC,OAAO,CAACiC,GAAG,CAACxB,QAAQ,CAAC;IACzC,IAAI,CAACuB,MAAM,EAAE;IAEbA,MAAM,CAACR,kBAAkB,CAACU,GAAG,CAACH,OAAO,CAAC;IACtCC,MAAM,CAACX,cAAc,GAAG,IAAI;IAC5BW,MAAM,CAACN,oBAAoB,EAAE;IAC7B,IAAI,CAACxB,aAAa,CAACa,GAAG,CAACgB,OAAO,EAAEtB,QAAQ,CAAC;EAC3C;EAEA0B,kBAAkBA,CAACJ,OAAgB,EAAEnB,SAAiB,EAAQ;IAC5D,MAAMH,QAAQ,GAAG,IAAI,CAACP,aAAa,CAAC+B,GAAG,CAACF,OAAO,CAAC;IAChD,IAAI,CAACtB,QAAQ,EAAE;IAEf,MAAMuB,MAAM,GAAG,IAAI,CAAChC,OAAO,CAACiC,GAAG,CAACxB,QAAQ,CAAC;IACzC,IAAI,CAACuB,MAAM,EAAE;MACX,IAAI,CAAC9B,aAAa,CAACkC,MAAM,CAACL,OAAO,CAAC;MAClC;IACF;IAEAC,MAAM,CAACR,kBAAkB,CAACY,MAAM,CAACL,OAAO,CAAC;IACzCC,MAAM,CAACK,yBAAyB,GAAGzB,SAAS;IAC5C,IAAIoB,MAAM,CAACM,0BAA0B,KAAKC,SAAS,EAAE;MACnDP,MAAM,CAACM,0BAA0B,GAAG1B,SAAS;IAC/C;IAEA,IAAI,CAACV,aAAa,CAACkC,MAAM,CAACL,OAAO,CAAC;EACpC;EAEAS,YAAYA,CAAChC,OAAwB,EAAQ;IAC3C,MAAM;MACJiC,cAAc;MACdC,YAAY;MACZC,YAAY;MACZ/B,SAAS;MACTgC;IACF,CAAC,GAAGpC,OAAO;IAEX,IAAImC,YAAY,IAAID,YAAY,IAAI,IAAI,EAAE;MACxC,MAAMjC,QAAQ,GAAG,IAAI,CAACP,aAAa,CAAC+B,GAAG,CAACS,YAAY,CAAC;MACrD,IAAI,CAACjC,QAAQ,EAAE;QACb;MACF;MAEA,MAAMuB,MAAM,GAAG,IAAI,CAAChC,OAAO,CAACiC,GAAG,CAACxB,QAAQ,CAAC;MACzC,IAAI,CAACuB,MAAM,EAAE;QACX;MACF;MAEAA,MAAM,CAACX,cAAc,GAAG,IAAI;MAC5B,IACEW,MAAM,CAACa,yBAAyB,KAAKN,SAAS,IAC9C3B,SAAS,GAAGoB,MAAM,CAACa,yBAAyB,EAC5C;QACAb,MAAM,CAACa,yBAAyB,GAAGjC,SAAS;MAC9C;MAEA,MAAMkC,KAAK,GAAG,IAAI,CAAC3C,aAAa,CAAC8B,GAAG,CAACQ,cAAc,CAAC,IAAI,CAAC,CAAC;MAC1D,IAAIK,KAAK,CAACrC,QAAQ,KAAKA,QAAQ,EAAE;QAC/BqC,KAAK,CAACC,OAAO,GAAG,KAAK;MACvB;MACAD,KAAK,CAACrC,QAAQ,GAAGA,QAAQ;MACzBqC,KAAK,CAACJ,YAAY,GAAGA,YAAY;MAEjC,IAAIE,WAAW,GAAG,CAAC,IAAIE,KAAK,CAACC,OAAO,KAAK,IAAI,EAAE;QAC7Cf,MAAM,CAACT,yBAAyB,IAAIqB,WAAW;QAC/CE,KAAK,CAACC,OAAO,GAAG,IAAI;MACtB;MAEA,IAAI,CAAC5C,aAAa,CAACY,GAAG,CAAC0B,cAAc,EAAEK,KAAK,CAAC;MAC7C;IACF;IAEA,MAAMA,KAAK,GAAG,IAAI,CAAC3C,aAAa,CAAC8B,GAAG,CAACQ,cAAc,CAAC;IACpD,IAAI,CAACK,KAAK,EAAErC,QAAQ,EAAE;MACpB;IACF;IAEA,MAAMuB,MAAM,GAAG,IAAI,CAAChC,OAAO,CAACiC,GAAG,CAACa,KAAK,CAACrC,QAAQ,CAAC;IAC/C,IAAI,CAACuB,MAAM,EAAE;MACX,IAAI,CAAC7B,aAAa,CAACiC,MAAM,CAACK,cAAc,CAAC;MACzC;IACF;IAEA,IAAIT,MAAM,CAACM,0BAA0B,KAAKC,SAAS,EAAE;MACnDP,MAAM,CAACM,0BAA0B,GAAG1B,SAAS;IAC/C;IAEA,IAAI,CAAC+B,YAAY,EAAE;MACjB,IAAI,CAACxC,aAAa,CAACiC,MAAM,CAACK,cAAc,CAAC;IAC3C;EACF;EAEAO,iBAAiBA,CAACP,cAAsB,EAAQ;IAC9C,IAAI,CAACtC,aAAa,CAACiC,MAAM,CAACK,cAAc,CAAC;EAC3C;EAEAQ,iBAAiBA,CAACzC,OAA4B,EAAQ;IACpD,MAAMwB,MAAM,GAAG,IAAI,CAAChC,OAAO,CAACiC,GAAG,CAACzB,OAAO,CAACC,QAAQ,CAAC;IACjD,IAAI,CAACuB,MAAM,EAAE;IAEbA,MAAM,CAACkB,WAAW,GAAG1C,OAAO,CAAC0C,WAAW;IACxClB,MAAM,CAACV,QAAQ,GAAG,CAACd,OAAO,CAAC2C,SAAS;IAEpC,IAAInB,MAAM,CAACM,0BAA0B,KAAKC,SAAS,EAAE;MACnDP,MAAM,CAACM,0BAA0B,GAC/BN,MAAM,CAACK,yBAAyB,IAAI7B,OAAO,CAAC0C,WAAW;IAC3D;IAEA,IAAI,IAAI,CAAC5C,aAAa,EAAE;MACtB,IAAI,CAACA,aAAa,CAACqB,MAAM,CAAC;QACxBC,IAAI,EAAE,iBAAiB;QACvBnB,QAAQ,EAAED,OAAO,CAACC,QAAQ;QAC1BG,SAAS,EAAEJ,OAAO,CAAC0C,WAAW;QAC9BE,OAAO,EAAE5C,OAAO,CAAC2C;MACnB,CAAC,CAAC;IACJ;IAEA,IAAI,CAACE,cAAc,CAACrB,MAAM,CAAC;EAC7B;EAEQqB,cAAcA,CAACrB,MAA2B,EAAQ;IACxD,MAAMkB,WAAW,GAAGlB,MAAM,CAACkB,WAAW,IAAIrC,IAAI,CAACC,GAAG,CAAC,CAAC;IACpD,MAAMwC,mBAAmB,GAAGJ,WAAW,GAAGlB,MAAM,CAACb,SAAS;IAC1D,MAAMoC,oBAAoB,GACxBvB,MAAM,CAACa,yBAAyB,IAAI,IAAI,GACpCb,MAAM,CAACa,yBAAyB,GAAGb,MAAM,CAACb,SAAS,GACnDoB,SAAS;IACf,MAAMiB,gBAAgB,GACpBD,oBAAoB,IAAI,IAAI,GACxBD,mBAAmB,GAAGC,oBAAoB,GAC1ChB,SAAS;IACf,MAAMkB,qBAAqB,GACzBzB,MAAM,CAACa,yBAAyB,IAAI,IAAI,IACxCb,MAAM,CAACM,0BAA0B,IAAI,IAAI,GACrCN,MAAM,CAACM,0BAA0B,GAAGN,MAAM,CAACa,yBAAyB,GACpEN,SAAS;IACf,MAAMmB,kBAAkB,GACtB1B,MAAM,CAACN,oBAAoB,GAAG,CAAC,IAAIM,MAAM,CAACX,cAAc;IAE1D,IAAI,CAAChB,YAAY,CAACsD,qBAAqB,CAAC;MACtCC,EAAE,EAAE5B,MAAM,CAACvB,QAAQ;MACnBmB,IAAI,EAAE,QAAQ;MACdZ,SAAS,EAAEgB,MAAM,CAAChB,SAAS;MAC3BJ,SAAS,EAAEsC,WAAW;MACtBjC,QAAQ,EAAEe,MAAM,CAACf,QAAQ;MACzBC,UAAU,EAAEc,MAAM,CAACd,UAAU;MAC7BE,oBAAoB,EAAEY,MAAM,CAACZ,oBAAoB;MACjDsC,kBAAkB;MAClBH,oBAAoB;MACpBD,mBAAmB;MACnBE,gBAAgB;MAChBlC,QAAQ,EAAEU,MAAM,CAACV,QAAQ;MACzBC,yBAAyB,EAAES,MAAM,CAACT,yBAAyB;MAC3DkC,qBAAqB;MACrB/B,oBAAoB,EAAEM,MAAM,CAACN;IAC/B,CAAC,CAAC;IAEF,IAAI,CAAC1B,OAAO,CAACoC,MAAM,CAACJ,MAAM,CAACvB,QAAQ,CAAC;EACtC;EAEAoD,OAAOA,CAAA,EAAS;IACd,IAAI,CAAC7D,OAAO,CAAC8D,KAAK,CAAC,CAAC;IACpB,IAAI,CAAC5D,aAAa,CAAC4D,KAAK,CAAC,CAAC;IAC1B,IAAI,CAAC3D,aAAa,CAAC2D,KAAK,CAAC,CAAC;EAC5B;AACF","ignoreList":[]}