@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.
- package/CHANGELOG.md +10 -0
- package/build/esm/DevToolsContext.js.map +1 -1
- package/build/esm/components/ActionMetrics.js +2 -2
- package/build/esm/components/ActionMetrics.js.map +1 -1
- package/build/esm/components/BubbleChart.js +1 -1
- package/build/esm/components/BubbleChart.js.map +1 -1
- package/build/esm/components/CacheInspectorTab.js +1 -1
- package/build/esm/components/CacheInspectorTab.js.map +1 -1
- package/build/esm/components/CacheMetrics.js +1 -1
- package/build/esm/components/CacheMetrics.js.map +1 -1
- package/build/esm/components/ComponentCard.js +1 -1
- package/build/esm/components/ComponentCard.js.map +1 -1
- package/build/esm/components/ComputeTab.js +6 -6
- package/build/esm/components/ComputeTab.js.map +1 -1
- package/build/esm/components/CopyableCodeBlock.js.map +1 -1
- package/build/esm/components/DebuggingTab.js +2 -2
- package/build/esm/components/DebuggingTab.js.map +1 -1
- package/build/esm/components/HookRow.js.map +1 -1
- package/build/esm/components/ImprovementsTab.js.map +1 -1
- package/build/esm/components/InspectorSelectionHeader.js.map +1 -1
- package/build/esm/components/InterceptTab.js +5 -5
- package/build/esm/components/InterceptTab.js.map +1 -1
- package/build/esm/components/IssueCard.js.map +1 -1
- package/build/esm/components/LogEntryCard.js.map +1 -1
- package/build/esm/components/MockEditor.js.map +1 -1
- package/build/esm/components/MonitorErrorBoundary.js.map +1 -1
- package/build/esm/components/MonitoringPanel.js +1 -1
- package/build/esm/components/MonitoringPanel.js.map +1 -1
- package/build/esm/components/ObjectLoadingMetrics.js.map +1 -1
- package/build/esm/components/OsdkAppErrorBoundary.js.map +1 -1
- package/build/esm/components/OsdkDevTools.js.map +1 -1
- package/build/esm/components/OverrideEditor.js.map +1 -1
- package/build/esm/components/PerformanceTab.js +8 -8
- package/build/esm/components/PerformanceTab.js.map +1 -1
- package/build/esm/components/PrimitiveSelectionPanel.js +1 -1
- package/build/esm/components/PrimitiveSelectionPanel.js.map +1 -1
- package/build/esm/components/resolveComponentName.js +2 -2
- package/build/esm/components/resolveComponentName.js.map +1 -1
- package/build/esm/components/testHelpers.js.map +1 -1
- package/build/esm/fiber/DegradationNotice.js +2 -2
- package/build/esm/fiber/DegradationNotice.js.map +1 -1
- package/build/esm/fiber/DevtoolsHook.js +4 -4
- package/build/esm/fiber/DevtoolsHook.js.map +1 -1
- package/build/esm/fiber/FiberAccess.js.map +1 -1
- package/build/esm/fiber/FiberInspection.js.map +1 -1
- package/build/esm/fiber/FiberTags.js.map +1 -1
- package/build/esm/fiber/HookStateInspector.js.map +1 -1
- package/build/esm/fiber/SafeFiberOperation.js.map +1 -1
- package/build/esm/fiber/capabilities.js.map +1 -1
- package/build/esm/fiber/traverseFiber.js.map +1 -1
- package/build/esm/fiber/types.js.map +1 -1
- package/build/esm/fiber/validation.js +1 -1
- package/build/esm/fiber/validation.js.map +1 -1
- package/build/esm/hooks/createPollingStore.js.map +1 -1
- package/build/esm/hooks/useActiveComponents.js.map +1 -1
- package/build/esm/hooks/useComponentRegistry.js.map +1 -1
- package/build/esm/hooks/useComputeSelectors.js.map +1 -1
- package/build/esm/hooks/useConsoleLogs.js.map +1 -1
- package/build/esm/hooks/useInspectorSelection.js.map +1 -1
- package/build/esm/hooks/useMetrics.js.map +1 -1
- package/build/esm/hooks/usePersistedState.js.map +1 -1
- package/build/esm/hooks/useRecommendations.js +1 -1
- package/build/esm/hooks/useRecommendations.js.map +1 -1
- package/build/esm/hooks/useSharedTick.js.map +1 -1
- package/build/esm/hooks/useTimeElapsed.js.map +1 -1
- package/build/esm/hooks/useTrackerSubscription.js.map +1 -1
- package/build/esm/hooks/useUnusedFieldAnalysis.js.map +1 -1
- package/build/esm/inspector/ClickToInspectSystem.js.map +1 -1
- package/build/esm/inspector/components/ComponentLabel.js.map +1 -1
- package/build/esm/inspector/components/InspectorBanner.js.map +1 -1
- package/build/esm/inspector/components/InspectorOverlay.js.map +1 -1
- package/build/esm/inspector/components/SelectionHighlight.js.map +1 -1
- package/build/esm/inspector/createClickToInspect.js.map +1 -1
- package/build/esm/inspector/hooks/useAnimatedBounds.js.map +1 -1
- package/build/esm/inspector/inspectorController.js.map +1 -1
- package/build/esm/inspector/utils/elementBounds.js.map +1 -1
- package/build/esm/inspector/utils/interpolation.js.map +1 -1
- package/build/esm/inspector/utils/labelPositioning.js.map +1 -1
- package/build/esm/mocking/MockCacheKeyGenerator.js +3 -3
- package/build/esm/mocking/MockCacheKeyGenerator.js.map +1 -1
- package/build/esm/mocking/MockManager.js +4 -4
- package/build/esm/mocking/MockManager.js.map +1 -1
- package/build/esm/prototyping/PrototypeOverrideStore.js +1 -1
- package/build/esm/prototyping/PrototypeOverrideStore.js.map +1 -1
- package/build/esm/register.js.map +1 -1
- package/build/esm/store/ComputeStore.js.map +1 -1
- package/build/esm/store/ConsoleLogStore.js +2 -2
- package/build/esm/store/ConsoleLogStore.js.map +1 -1
- package/build/esm/store/MetricsStore.js.map +1 -1
- package/build/esm/store/MonitorStore.js.map +1 -1
- package/build/esm/store/WindowErrorStore.js.map +1 -1
- package/build/esm/styles.js.map +1 -1
- package/build/esm/types/compute.js.map +1 -1
- package/build/esm/utils/ActionLifecycleTracker.js.map +1 -1
- package/build/esm/utils/CacheEfficiencyAnalyzer.js.map +1 -1
- package/build/esm/utils/ComponentContextCapture.js +10 -10
- package/build/esm/utils/ComponentContextCapture.js.map +1 -1
- package/build/esm/utils/ComponentPrimitiveDiscovery.js.map +1 -1
- package/build/esm/utils/ComponentQueryRegistry.js +8 -8
- package/build/esm/utils/ComponentQueryRegistry.js.map +1 -1
- package/build/esm/utils/ComputeMonitor.js +2 -2
- package/build/esm/utils/ComputeMonitor.js.map +1 -1
- package/build/esm/utils/EventTimeline.js.map +1 -1
- package/build/esm/utils/LinkTraversalTracker.js +2 -2
- package/build/esm/utils/LinkTraversalTracker.js.map +1 -1
- package/build/esm/utils/MockDataGenerator.js +4 -4
- package/build/esm/utils/MockDataGenerator.js.map +1 -1
- package/build/esm/utils/ObservableClientMonitor.js +2 -2
- package/build/esm/utils/ObservableClientMonitor.js.map +1 -1
- package/build/esm/utils/PerformanceRecommendationEngine.js +1 -1
- package/build/esm/utils/PerformanceRecommendationEngine.js.map +1 -1
- package/build/esm/utils/PropertyAccessTracker.js +3 -3
- package/build/esm/utils/PropertyAccessTracker.js.map +1 -1
- package/build/esm/utils/RecommendationMatcher.js.map +1 -1
- package/build/esm/utils/SubscriptionTracker.js +1 -1
- package/build/esm/utils/SubscriptionTracker.js.map +1 -1
- package/build/esm/utils/UnusedFieldAnalyzer.js +6 -7
- package/build/esm/utils/UnusedFieldAnalyzer.js.map +1 -1
- package/build/esm/utils/WaterfallDetector.js.map +1 -1
- package/build/esm/utils/computePayload.js +2 -2
- package/build/esm/utils/computePayload.js.map +1 -1
- package/build/esm/utils/computeRequest.js.map +1 -1
- package/build/esm/utils/format.js.map +1 -1
- package/build/esm/vite/hookInstaller.js.map +1 -1
- package/build/esm/vite/index.js +2 -3
- package/build/esm/vite/index.js.map +1 -1
- package/build/types/DevToolsContext.d.ts.map +1 -1
- package/build/types/components/ActionMetrics.d.ts.map +1 -1
- package/build/types/components/BubbleChart.d.ts.map +1 -1
- package/build/types/components/CacheInspectorTab.d.ts.map +1 -1
- package/build/types/components/CacheMetrics.d.ts.map +1 -1
- package/build/types/components/ComponentCard.d.ts.map +1 -1
- package/build/types/components/ComputeTab.d.ts.map +1 -1
- package/build/types/components/CopyableCodeBlock.d.ts.map +1 -1
- package/build/types/components/DebuggingTab.d.ts.map +1 -1
- package/build/types/components/HookRow.d.ts.map +1 -1
- package/build/types/components/ImprovementsTab.d.ts.map +1 -1
- package/build/types/components/InspectorSelectionHeader.d.ts.map +1 -1
- package/build/types/components/InterceptTab.d.ts.map +1 -1
- package/build/types/components/IssueCard.d.ts.map +1 -1
- package/build/types/components/LogEntryCard.d.ts.map +1 -1
- package/build/types/components/MockEditor.d.ts.map +1 -1
- package/build/types/components/MonitorErrorBoundary.d.ts.map +1 -1
- package/build/types/components/MonitoringPanel.d.ts.map +1 -1
- package/build/types/components/ObjectLoadingMetrics.d.ts.map +1 -1
- package/build/types/components/OsdkAppErrorBoundary.d.ts.map +1 -1
- package/build/types/components/OsdkDevTools.d.ts.map +1 -1
- package/build/types/components/OverrideEditor.d.ts.map +1 -1
- package/build/types/components/PerformanceTab.d.ts.map +1 -1
- package/build/types/components/PrimitiveSelectionPanel.d.ts.map +1 -1
- package/build/types/components/resolveComponentName.d.ts.map +1 -1
- package/build/types/components/testHelpers.d.ts.map +1 -1
- package/build/types/fiber/DegradationNotice.d.ts.map +1 -1
- package/build/types/fiber/DevtoolsHook.d.ts.map +1 -1
- package/build/types/fiber/FiberInspection.d.ts.map +1 -1
- package/build/types/fiber/HookStateInspector.d.ts.map +1 -1
- package/build/types/fiber/capabilities.d.ts.map +1 -1
- package/build/types/fiber/traverseFiber.d.ts.map +1 -1
- package/build/types/fiber/types.d.ts.map +1 -1
- package/build/types/hooks/useActiveComponents.d.ts.map +1 -1
- package/build/types/hooks/useComponentRegistry.d.ts.map +1 -1
- package/build/types/hooks/useComputeSelectors.d.ts.map +1 -1
- package/build/types/hooks/useConsoleLogs.d.ts.map +1 -1
- package/build/types/hooks/useInspectorSelection.d.ts.map +1 -1
- package/build/types/hooks/useMetrics.d.ts.map +1 -1
- package/build/types/hooks/useRecommendations.d.ts.map +1 -1
- package/build/types/hooks/useUnusedFieldAnalysis.d.ts.map +1 -1
- package/build/types/inspector/ClickToInspectSystem.d.ts.map +1 -1
- package/build/types/inspector/components/ComponentLabel.d.ts.map +1 -1
- package/build/types/inspector/components/InspectorOverlay.d.ts.map +1 -1
- package/build/types/inspector/components/SelectionHighlight.d.ts.map +1 -1
- package/build/types/inspector/hooks/useAnimatedBounds.d.ts.map +1 -1
- package/build/types/mocking/MockManager.d.ts.map +1 -1
- package/build/types/store/ComputeStore.d.ts.map +1 -1
- package/build/types/store/ConsoleLogStore.d.ts.map +1 -1
- package/build/types/store/MetricsStore.d.ts.map +1 -1
- package/build/types/store/MonitorStore.d.ts.map +1 -1
- package/build/types/store/WindowErrorStore.d.ts.map +1 -1
- package/build/types/styles.d.ts +0 -1
- package/build/types/styles.d.ts.map +1 -1
- package/build/types/types/compute.d.ts.map +1 -1
- package/build/types/utils/ActionLifecycleTracker.d.ts.map +1 -1
- package/build/types/utils/CacheEfficiencyAnalyzer.d.ts.map +1 -1
- package/build/types/utils/ComponentContextCapture.d.ts.map +1 -1
- package/build/types/utils/ComponentPrimitiveDiscovery.d.ts.map +1 -1
- package/build/types/utils/ComponentQueryRegistry.d.ts.map +1 -1
- package/build/types/utils/ComputeMonitor.d.ts.map +1 -1
- package/build/types/utils/EventTimeline.d.ts.map +1 -1
- package/build/types/utils/LinkTraversalTracker.d.ts.map +1 -1
- package/build/types/utils/MockDataGenerator.d.ts.map +1 -1
- package/build/types/utils/ObservableClientMonitor.d.ts.map +1 -1
- package/build/types/utils/PerformanceRecommendationEngine.d.ts.map +1 -1
- package/build/types/utils/PropertyAccessTracker.d.ts.map +1 -1
- package/build/types/utils/SubscriptionTracker.d.ts.map +1 -1
- package/build/types/utils/UnusedFieldAnalyzer.d.ts.map +1 -1
- package/build/types/utils/WaterfallDetector.d.ts.map +1 -1
- package/build/types/utils/computeRequest.d.ts.map +1 -1
- package/build/types/vite/index.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspectorController.js","names":["getFiberFromElement","getComponentName","getHookStates","getProps","getSourceLocation","isUserComponent","findParentComponent","createElementBounds","getElementAtPosition","OFFSCREEN_POSITION","DEFAULT_THROTTLE_MS","DEFAULT_BOUNDS_REFRESH_INTERVAL_MS","createInitialState","mode","mouseX","mouseY","hoveredElement","selectedElement","frozenElement","inspectedComponent","selectionBounds","labelPosition","labelStatus","viewportVersion","extractComponentInfo","element","fiber","name","sourceLocation","props","hookStates","WeakRef","hookCount","length","createInspectorController","options","containerElement","document","body","throttleMs","boundsRefreshIntervalMs","eventHandlers","state","listeners","Set","lastElementDetectionTime","boundsRefreshIntervalId","abortController","setState","partial","forEach","listener","handleMouseMove","event","clientX","clientY","now","performance","detectElementAtPosition","onHover","componentFiber","componentInfo","handleClick","target","closest","preventDefault","stopImmediatePropagation","onSelect","handleKeyDown","key","deactivate","handleScroll","recalculateBounds","handleResize","contains","startBoundsRefreshInterval","setInterval","stopBoundsRefreshInterval","clearInterval","attachEventListeners","AbortController","signal","addEventListener","passive","capture","window","detachEventListeners","abort","onDeactivate","freeze","getState","activate","onActivate","unfreeze","subscribe","add","delete","destroy","clear"],"sources":["inspectorController.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 { getFiberFromElement } from \"../fiber/FiberAccess.js\";\nimport {\n getComponentName,\n getHookStates,\n getProps,\n getSourceLocation,\n} from \"../fiber/FiberInspection.js\";\nimport { isUserComponent } from \"../fiber/FiberTags.js\";\nimport { findParentComponent } from \"../fiber/traverseFiber.js\";\nimport type { Fiber } from \"../fiber/types.js\";\nimport type {\n InspectedComponent,\n InspectorController,\n InspectorOptions,\n InspectorState,\n} from \"./types.js\";\nimport {\n createElementBounds,\n getElementAtPosition,\n} from \"./utils/elementBounds.js\";\n\nconst OFFSCREEN_POSITION = -9999;\nconst DEFAULT_THROTTLE_MS = 32;\nconst DEFAULT_BOUNDS_REFRESH_INTERVAL_MS = 100;\n\nfunction createInitialState(): InspectorState {\n return {\n mode: \"inactive\",\n mouseX: OFFSCREEN_POSITION,\n mouseY: OFFSCREEN_POSITION,\n hoveredElement: null,\n selectedElement: null,\n frozenElement: null,\n inspectedComponent: null,\n selectionBounds: null,\n labelPosition: null,\n labelStatus: \"idle\",\n viewportVersion: 0,\n };\n}\n\nfunction extractComponentInfo(\n element: Element,\n fiber: Fiber,\n): InspectedComponent | null {\n const name = getComponentName(fiber);\n if (!name) {\n return null;\n }\n\n const sourceLocation = getSourceLocation(fiber);\n const props = getProps(fiber);\n const hookStates = getHookStates(fiber);\n\n return {\n name,\n fiber: new WeakRef(fiber),\n element: new WeakRef(element),\n sourceLocation,\n props,\n hookCount: hookStates.length,\n };\n}\n\nexport function createInspectorController(\n options: InspectorOptions = {},\n): InspectorController {\n const {\n containerElement = document.body,\n throttleMs = DEFAULT_THROTTLE_MS,\n boundsRefreshIntervalMs = DEFAULT_BOUNDS_REFRESH_INTERVAL_MS,\n eventHandlers = {},\n } = options;\n\n let state = createInitialState();\n const listeners = new Set<(state: InspectorState) => void>();\n let lastElementDetectionTime = 0;\n let boundsRefreshIntervalId: ReturnType<typeof setInterval> | null = null;\n let abortController: AbortController | null = null;\n\n function setState(partial: Partial<InspectorState>): void {\n state = { ...state, ...partial };\n listeners.forEach((listener) => listener(state));\n }\n\n function handleMouseMove(event: MouseEvent): void {\n if (state.mode === \"inactive\" || state.mode === \"frozen\") {\n return;\n }\n\n const { clientX, clientY } = event;\n setState({ mouseX: clientX, mouseY: clientY });\n\n const now = performance.now();\n if (now - lastElementDetectionTime < throttleMs) {\n return;\n }\n lastElementDetectionTime = now;\n\n detectElementAtPosition(clientX, clientY);\n }\n\n function detectElementAtPosition(clientX: number, clientY: number): void {\n const element = getElementAtPosition(\n clientX,\n clientY,\n \"[data-osdk-devtools-ignore]\",\n );\n\n if (!element) {\n setState({\n hoveredElement: null,\n inspectedComponent: null,\n selectionBounds: null,\n labelStatus: \"idle\",\n });\n eventHandlers.onHover?.(null);\n return;\n }\n\n if (element === state.hoveredElement) {\n return;\n }\n\n const fiber = getFiberFromElement(element);\n if (!fiber) {\n setState({\n hoveredElement: element,\n inspectedComponent: null,\n selectionBounds: createElementBounds(element),\n labelStatus: \"idle\",\n });\n eventHandlers.onHover?.(null);\n return;\n }\n\n const componentFiber = isUserComponent(fiber)\n ? fiber\n : findParentComponent(fiber);\n if (!componentFiber) {\n setState({\n hoveredElement: element,\n inspectedComponent: null,\n selectionBounds: createElementBounds(element),\n labelStatus: \"idle\",\n });\n eventHandlers.onHover?.(null);\n return;\n }\n\n const componentInfo = extractComponentInfo(element, componentFiber);\n setState({\n hoveredElement: element,\n inspectedComponent: componentInfo,\n selectionBounds: createElementBounds(element),\n labelStatus: \"hover\",\n });\n\n if (componentInfo) {\n eventHandlers.onHover?.(componentInfo);\n }\n }\n\n function handleClick(event: MouseEvent): void {\n if (state.mode === \"inactive\") {\n return;\n }\n\n const target = event.target as Element;\n\n if (target.closest(\"[data-osdk-devtools-ignore]\")) {\n return;\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n\n if (state.mode === \"frozen\") {\n setState({ mode: \"hover\", frozenElement: null, labelStatus: \"hover\" });\n return;\n }\n\n if (state.hoveredElement && state.inspectedComponent) {\n setState({\n mode: \"frozen\",\n frozenElement: state.hoveredElement,\n selectedElement: state.hoveredElement,\n labelStatus: \"selected\",\n });\n eventHandlers.onSelect?.(state.inspectedComponent);\n }\n }\n\n function handleKeyDown(event: KeyboardEvent): void {\n if (state.mode === \"inactive\") {\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopImmediatePropagation();\n\n if (state.mode === \"frozen\") {\n setState({ mode: \"hover\", frozenElement: null, labelStatus: \"hover\" });\n } else {\n deactivate();\n }\n }\n }\n\n function handleScroll(): void {\n if (state.mode === \"inactive\") {\n return;\n }\n setState({ viewportVersion: state.viewportVersion + 1 });\n recalculateBounds();\n }\n\n function handleResize(): void {\n if (state.mode === \"inactive\") {\n return;\n }\n setState({ viewportVersion: state.viewportVersion + 1 });\n recalculateBounds();\n }\n\n function recalculateBounds(): void {\n const element = state.frozenElement ?? state.hoveredElement;\n if (!element || !document.contains(element)) {\n setState({\n hoveredElement: null,\n frozenElement: null,\n inspectedComponent: null,\n selectionBounds: null,\n labelStatus: \"idle\",\n });\n return;\n }\n\n setState({ selectionBounds: createElementBounds(element) });\n }\n\n function startBoundsRefreshInterval(): void {\n if (boundsRefreshIntervalId) {\n return;\n }\n boundsRefreshIntervalId = setInterval(\n recalculateBounds,\n boundsRefreshIntervalMs,\n );\n }\n\n function stopBoundsRefreshInterval(): void {\n if (boundsRefreshIntervalId) {\n clearInterval(boundsRefreshIntervalId);\n boundsRefreshIntervalId = null;\n }\n }\n\n function attachEventListeners(): void {\n abortController = new AbortController();\n const { signal } = abortController;\n\n containerElement.addEventListener(\"mousemove\", handleMouseMove, {\n signal,\n passive: true,\n });\n containerElement.addEventListener(\"click\", handleClick, {\n signal,\n capture: true,\n });\n document.addEventListener(\"keydown\", handleKeyDown, {\n signal,\n capture: true,\n });\n window.addEventListener(\"scroll\", handleScroll, { signal, passive: true });\n window.addEventListener(\"resize\", handleResize, { signal, passive: true });\n }\n\n function detachEventListeners(): void {\n if (abortController) {\n abortController.abort();\n abortController = null;\n }\n }\n\n function activate(): void {\n if (state.mode !== \"inactive\") {\n return;\n }\n\n setState({ mode: \"hover\" });\n attachEventListeners();\n startBoundsRefreshInterval();\n eventHandlers.onActivate?.();\n }\n\n function deactivate(): void {\n if (state.mode === \"inactive\") {\n return;\n }\n\n detachEventListeners();\n stopBoundsRefreshInterval();\n setState(createInitialState());\n eventHandlers.onDeactivate?.();\n }\n\n function freeze(): void {\n if (state.mode !== \"hover\" || !state.hoveredElement) {\n return;\n }\n\n setState({\n mode: \"frozen\",\n frozenElement: state.hoveredElement,\n selectedElement: state.hoveredElement,\n labelStatus: \"selected\",\n });\n\n if (state.inspectedComponent) {\n eventHandlers.onSelect?.(state.inspectedComponent);\n }\n }\n\n function unfreeze(): void {\n if (state.mode !== \"frozen\") {\n return;\n }\n\n setState({\n mode: \"hover\",\n frozenElement: null,\n labelStatus: \"hover\",\n });\n }\n\n function getState(): InspectorState {\n return state;\n }\n\n function subscribe(listener: (state: InspectorState) => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n function destroy(): void {\n deactivate();\n listeners.clear();\n }\n\n return {\n activate,\n deactivate,\n freeze,\n unfreeze,\n getState,\n subscribe,\n destroy,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"inspectorController.js","names":["getFiberFromElement","getComponentName","getHookStates","getProps","getSourceLocation","isUserComponent","findParentComponent","createElementBounds","getElementAtPosition","OFFSCREEN_POSITION","DEFAULT_THROTTLE_MS","DEFAULT_BOUNDS_REFRESH_INTERVAL_MS","createInitialState","mode","mouseX","mouseY","hoveredElement","selectedElement","frozenElement","inspectedComponent","selectionBounds","labelPosition","labelStatus","viewportVersion","extractComponentInfo","element","fiber","name","sourceLocation","props","hookStates","WeakRef","hookCount","length","createInspectorController","options","containerElement","document","body","throttleMs","boundsRefreshIntervalMs","eventHandlers","state","listeners","Set","lastElementDetectionTime","boundsRefreshIntervalId","abortController","setState","partial","forEach","listener","handleMouseMove","event","clientX","clientY","now","performance","detectElementAtPosition","onHover","componentFiber","componentInfo","handleClick","target","closest","preventDefault","stopImmediatePropagation","onSelect","handleKeyDown","key","deactivate","handleScroll","recalculateBounds","handleResize","contains","startBoundsRefreshInterval","setInterval","stopBoundsRefreshInterval","clearInterval","attachEventListeners","AbortController","signal","addEventListener","passive","capture","window","detachEventListeners","abort","onDeactivate","freeze","getState","activate","onActivate","unfreeze","subscribe","add","delete","destroy","clear"],"sources":["inspectorController.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 { getFiberFromElement } from \"../fiber/FiberAccess.js\";\nimport {\n getComponentName,\n getHookStates,\n getProps,\n getSourceLocation,\n} from \"../fiber/FiberInspection.js\";\nimport { isUserComponent } from \"../fiber/FiberTags.js\";\nimport { findParentComponent } from \"../fiber/traverseFiber.js\";\nimport type { Fiber } from \"../fiber/types.js\";\nimport type {\n InspectedComponent,\n InspectorController,\n InspectorOptions,\n InspectorState,\n} from \"./types.js\";\nimport {\n createElementBounds,\n getElementAtPosition,\n} from \"./utils/elementBounds.js\";\n\nconst OFFSCREEN_POSITION = -9999;\nconst DEFAULT_THROTTLE_MS = 32;\nconst DEFAULT_BOUNDS_REFRESH_INTERVAL_MS = 100;\n\nfunction createInitialState(): InspectorState {\n return {\n mode: \"inactive\",\n mouseX: OFFSCREEN_POSITION,\n mouseY: OFFSCREEN_POSITION,\n hoveredElement: null,\n selectedElement: null,\n frozenElement: null,\n inspectedComponent: null,\n selectionBounds: null,\n labelPosition: null,\n labelStatus: \"idle\",\n viewportVersion: 0,\n };\n}\n\nfunction extractComponentInfo(\n element: Element,\n fiber: Fiber\n): InspectedComponent | null {\n const name = getComponentName(fiber);\n if (!name) {\n return null;\n }\n\n const sourceLocation = getSourceLocation(fiber);\n const props = getProps(fiber);\n const hookStates = getHookStates(fiber);\n\n return {\n name,\n fiber: new WeakRef(fiber),\n element: new WeakRef(element),\n sourceLocation,\n props,\n hookCount: hookStates.length,\n };\n}\n\nexport function createInspectorController(\n options: InspectorOptions = {}\n): InspectorController {\n const {\n containerElement = document.body,\n throttleMs = DEFAULT_THROTTLE_MS,\n boundsRefreshIntervalMs = DEFAULT_BOUNDS_REFRESH_INTERVAL_MS,\n eventHandlers = {},\n } = options;\n\n let state = createInitialState();\n const listeners = new Set<(state: InspectorState) => void>();\n let lastElementDetectionTime = 0;\n let boundsRefreshIntervalId: ReturnType<typeof setInterval> | null = null;\n let abortController: AbortController | null = null;\n\n function setState(partial: Partial<InspectorState>): void {\n state = { ...state, ...partial };\n listeners.forEach((listener) => listener(state));\n }\n\n function handleMouseMove(event: MouseEvent): void {\n if (state.mode === \"inactive\" || state.mode === \"frozen\") {\n return;\n }\n\n const { clientX, clientY } = event;\n setState({ mouseX: clientX, mouseY: clientY });\n\n const now = performance.now();\n if (now - lastElementDetectionTime < throttleMs) {\n return;\n }\n lastElementDetectionTime = now;\n\n detectElementAtPosition(clientX, clientY);\n }\n\n function detectElementAtPosition(clientX: number, clientY: number): void {\n const element = getElementAtPosition(\n clientX,\n clientY,\n \"[data-osdk-devtools-ignore]\"\n );\n\n if (!element) {\n setState({\n hoveredElement: null,\n inspectedComponent: null,\n selectionBounds: null,\n labelStatus: \"idle\",\n });\n eventHandlers.onHover?.(null);\n return;\n }\n\n if (element === state.hoveredElement) {\n return;\n }\n\n const fiber = getFiberFromElement(element);\n if (!fiber) {\n setState({\n hoveredElement: element,\n inspectedComponent: null,\n selectionBounds: createElementBounds(element),\n labelStatus: \"idle\",\n });\n eventHandlers.onHover?.(null);\n return;\n }\n\n const componentFiber = isUserComponent(fiber)\n ? fiber\n : findParentComponent(fiber);\n if (!componentFiber) {\n setState({\n hoveredElement: element,\n inspectedComponent: null,\n selectionBounds: createElementBounds(element),\n labelStatus: \"idle\",\n });\n eventHandlers.onHover?.(null);\n return;\n }\n\n const componentInfo = extractComponentInfo(element, componentFiber);\n setState({\n hoveredElement: element,\n inspectedComponent: componentInfo,\n selectionBounds: createElementBounds(element),\n labelStatus: \"hover\",\n });\n\n if (componentInfo) {\n eventHandlers.onHover?.(componentInfo);\n }\n }\n\n function handleClick(event: MouseEvent): void {\n if (state.mode === \"inactive\") {\n return;\n }\n\n const target = event.target as Element;\n\n if (target.closest(\"[data-osdk-devtools-ignore]\")) {\n return;\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n\n if (state.mode === \"frozen\") {\n setState({ mode: \"hover\", frozenElement: null, labelStatus: \"hover\" });\n return;\n }\n\n if (state.hoveredElement && state.inspectedComponent) {\n setState({\n mode: \"frozen\",\n frozenElement: state.hoveredElement,\n selectedElement: state.hoveredElement,\n labelStatus: \"selected\",\n });\n eventHandlers.onSelect?.(state.inspectedComponent);\n }\n }\n\n function handleKeyDown(event: KeyboardEvent): void {\n if (state.mode === \"inactive\") {\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopImmediatePropagation();\n\n if (state.mode === \"frozen\") {\n setState({ mode: \"hover\", frozenElement: null, labelStatus: \"hover\" });\n } else {\n deactivate();\n }\n }\n }\n\n function handleScroll(): void {\n if (state.mode === \"inactive\") {\n return;\n }\n setState({ viewportVersion: state.viewportVersion + 1 });\n recalculateBounds();\n }\n\n function handleResize(): void {\n if (state.mode === \"inactive\") {\n return;\n }\n setState({ viewportVersion: state.viewportVersion + 1 });\n recalculateBounds();\n }\n\n function recalculateBounds(): void {\n const element = state.frozenElement ?? state.hoveredElement;\n if (!element || !document.contains(element)) {\n setState({\n hoveredElement: null,\n frozenElement: null,\n inspectedComponent: null,\n selectionBounds: null,\n labelStatus: \"idle\",\n });\n return;\n }\n\n setState({ selectionBounds: createElementBounds(element) });\n }\n\n function startBoundsRefreshInterval(): void {\n if (boundsRefreshIntervalId) {\n return;\n }\n boundsRefreshIntervalId = setInterval(\n recalculateBounds,\n boundsRefreshIntervalMs\n );\n }\n\n function stopBoundsRefreshInterval(): void {\n if (boundsRefreshIntervalId) {\n clearInterval(boundsRefreshIntervalId);\n boundsRefreshIntervalId = null;\n }\n }\n\n function attachEventListeners(): void {\n abortController = new AbortController();\n const { signal } = abortController;\n\n containerElement.addEventListener(\"mousemove\", handleMouseMove, {\n signal,\n passive: true,\n });\n containerElement.addEventListener(\"click\", handleClick, {\n signal,\n capture: true,\n });\n document.addEventListener(\"keydown\", handleKeyDown, {\n signal,\n capture: true,\n });\n window.addEventListener(\"scroll\", handleScroll, { signal, passive: true });\n window.addEventListener(\"resize\", handleResize, { signal, passive: true });\n }\n\n function detachEventListeners(): void {\n if (abortController) {\n abortController.abort();\n abortController = null;\n }\n }\n\n function activate(): void {\n if (state.mode !== \"inactive\") {\n return;\n }\n\n setState({ mode: \"hover\" });\n attachEventListeners();\n startBoundsRefreshInterval();\n eventHandlers.onActivate?.();\n }\n\n function deactivate(): void {\n if (state.mode === \"inactive\") {\n return;\n }\n\n detachEventListeners();\n stopBoundsRefreshInterval();\n setState(createInitialState());\n eventHandlers.onDeactivate?.();\n }\n\n function freeze(): void {\n if (state.mode !== \"hover\" || !state.hoveredElement) {\n return;\n }\n\n setState({\n mode: \"frozen\",\n frozenElement: state.hoveredElement,\n selectedElement: state.hoveredElement,\n labelStatus: \"selected\",\n });\n\n if (state.inspectedComponent) {\n eventHandlers.onSelect?.(state.inspectedComponent);\n }\n }\n\n function unfreeze(): void {\n if (state.mode !== \"frozen\") {\n return;\n }\n\n setState({\n mode: \"hover\",\n frozenElement: null,\n labelStatus: \"hover\",\n });\n }\n\n function getState(): InspectorState {\n return state;\n }\n\n function subscribe(listener: (state: InspectorState) => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n function destroy(): void {\n deactivate();\n listeners.clear();\n }\n\n return {\n activate,\n deactivate,\n freeze,\n unfreeze,\n getState,\n subscribe,\n destroy,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elementBounds.js","names":["stripTranslateFromTransform","element","computedStyle","window","getComputedStyle","transform","matrixMatch","match","a","b","c","d","matrix3dMatch","values","split","map","v","trim","length","join","createElementBounds","boundingRect","getBoundingClientRect","x","left","y","top","width","height","borderRadius","getElementAtPosition","clientX","clientY","ignoreSelector","elementsAtPoint","document","elementsFromPoint","matches","hasAttribute","tagName","toLowerCase"],"sources":["elementBounds.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 { OverlayBounds } from \"../types.js\";\n\nfunction stripTranslateFromTransform(element: Element): string {\n const computedStyle = window.getComputedStyle(element);\n const transform = computedStyle.transform;\n\n if (!transform || transform === \"none\") {\n return \"\";\n }\n\n const matrixMatch = transform.match(\n /matrix\\(([^,]+),\\s*([^,]+),\\s*([^,]+),\\s*([^,]+),\\s*[^,]+,\\s*[^)]+\\)
|
|
1
|
+
{"version":3,"file":"elementBounds.js","names":["stripTranslateFromTransform","element","computedStyle","window","getComputedStyle","transform","matrixMatch","match","a","b","c","d","matrix3dMatch","values","split","map","v","trim","length","join","createElementBounds","boundingRect","getBoundingClientRect","x","left","y","top","width","height","borderRadius","getElementAtPosition","clientX","clientY","ignoreSelector","elementsAtPoint","document","elementsFromPoint","matches","hasAttribute","tagName","toLowerCase"],"sources":["elementBounds.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 { OverlayBounds } from \"../types.js\";\n\nfunction stripTranslateFromTransform(element: Element): string {\n const computedStyle = window.getComputedStyle(element);\n const transform = computedStyle.transform;\n\n if (!transform || transform === \"none\") {\n return \"\";\n }\n\n const matrixMatch = transform.match(\n /matrix\\(([^,]+),\\s*([^,]+),\\s*([^,]+),\\s*([^,]+),\\s*[^,]+,\\s*[^)]+\\)/\n );\n\n if (matrixMatch) {\n const [, a, b, c, d] = matrixMatch;\n if (a === \"1\" && b === \"0\" && c === \"0\" && d === \"1\") {\n return \"\";\n }\n return `matrix(${a}, ${b}, ${c}, ${d}, 0, 0)`;\n }\n\n const matrix3dMatch = transform.match(/matrix3d\\(([^)]+)\\)/);\n if (matrix3dMatch) {\n const values = matrix3dMatch[1].split(\",\").map((v) => v.trim());\n if (values.length === 16) {\n values[12] = \"0\";\n values[13] = \"0\";\n values[14] = \"0\";\n return `matrix3d(${values.join(\", \")})`;\n }\n }\n\n return \"\";\n}\n\nexport function createElementBounds(element: Element): OverlayBounds {\n const boundingRect = element.getBoundingClientRect();\n const computedStyle = window.getComputedStyle(element);\n\n return {\n x: boundingRect.left,\n y: boundingRect.top,\n width: boundingRect.width,\n height: boundingRect.height,\n borderRadius: computedStyle.borderRadius || \"0px\",\n transform: stripTranslateFromTransform(element),\n };\n}\n\nexport function getElementAtPosition(\n clientX: number,\n clientY: number,\n ignoreSelector?: string\n): Element | null {\n const elementsAtPoint = document.elementsFromPoint(clientX, clientY);\n\n for (const element of elementsAtPoint) {\n if (ignoreSelector && element.matches(ignoreSelector)) {\n continue;\n }\n\n if (element.hasAttribute(\"data-osdk-devtools-ignore\")) {\n continue;\n }\n\n const tagName = element.tagName.toLowerCase();\n if (\n tagName === \"script\" ||\n tagName === \"style\" ||\n tagName === \"link\" ||\n tagName === \"meta\" ||\n tagName === \"head\" ||\n tagName === \"html\"\n ) {\n continue;\n }\n\n return element;\n }\n\n return null;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpolation.js","names":["interpolate","start","end","factor","INTERPOLATION_FACTORS","selection","drag","crosshair","DEFAULT_CONVERGENCE_THRESHOLD"],"sources":["interpolation.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function interpolate(\n start: number,\n end: number,\n factor: number
|
|
1
|
+
{"version":3,"file":"interpolation.js","names":["interpolate","start","end","factor","INTERPOLATION_FACTORS","selection","drag","crosshair","DEFAULT_CONVERGENCE_THRESHOLD"],"sources":["interpolation.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function interpolate(\n start: number,\n end: number,\n factor: number\n): number {\n return start + (end - start) * factor;\n}\n\nexport const INTERPOLATION_FACTORS = {\n selection: 0.95,\n drag: 0.7,\n crosshair: 0.3,\n} as const;\n\nexport const DEFAULT_CONVERGENCE_THRESHOLD = 0.5;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,SAASA,WAAWA,CACzBC,KAAa,EACbC,GAAW,EACXC,MAAc,EACN;EACR,OAAOF,KAAK,GAAG,CAACC,GAAG,GAAGD,KAAK,IAAIE,MAAM;AACvC;AAEA,OAAO,MAAMC,qBAAqB,GAAG;EACnCC,SAAS,EAAE,IAAI;EACfC,IAAI,EAAE,GAAG;EACTC,SAAS,EAAE;AACb,CAAU;AAEV,OAAO,MAAMC,6BAA6B,GAAG,GAAG","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labelPositioning.js","names":["VIEWPORT_MARGIN_PX","ARROW_HEIGHT","LABEL_GAP","MIN_ARROW_OFFSET","computeLabelPosition","selectionBounds","labelWidth","labelHeight","mouseX","viewportWidth","window","innerWidth","viewportHeight","innerHeight","selectionCenterX","x","width","cursorX","selectionBottom","y","height","selectionTop","positionLeft","positionTop","arrowPosition","fitsBelow","arrowLeft","Math","max","min","left","top","OFFSCREEN_POSITION"],"sources":["labelPositioning.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 { LabelPosition, OverlayBounds } from \"../types.js\";\n\nconst VIEWPORT_MARGIN_PX = 8;\nconst ARROW_HEIGHT = 8;\nconst LABEL_GAP = 4;\nconst MIN_ARROW_OFFSET = 12;\n\nexport function computeLabelPosition(\n selectionBounds: OverlayBounds,\n labelWidth: number,\n labelHeight: number,\n mouseX: number
|
|
1
|
+
{"version":3,"file":"labelPositioning.js","names":["VIEWPORT_MARGIN_PX","ARROW_HEIGHT","LABEL_GAP","MIN_ARROW_OFFSET","computeLabelPosition","selectionBounds","labelWidth","labelHeight","mouseX","viewportWidth","window","innerWidth","viewportHeight","innerHeight","selectionCenterX","x","width","cursorX","selectionBottom","y","height","selectionTop","positionLeft","positionTop","arrowPosition","fitsBelow","arrowLeft","Math","max","min","left","top","OFFSCREEN_POSITION"],"sources":["labelPositioning.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 { LabelPosition, OverlayBounds } from \"../types.js\";\n\nconst VIEWPORT_MARGIN_PX = 8;\nconst ARROW_HEIGHT = 8;\nconst LABEL_GAP = 4;\nconst MIN_ARROW_OFFSET = 12;\n\nexport function computeLabelPosition(\n selectionBounds: OverlayBounds,\n labelWidth: number,\n labelHeight: number,\n mouseX: number\n): LabelPosition {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const selectionCenterX = selectionBounds.x + selectionBounds.width / 2;\n const cursorX = mouseX ?? selectionCenterX;\n const selectionBottom = selectionBounds.y + selectionBounds.height;\n const selectionTop = selectionBounds.y;\n\n let positionLeft = cursorX - labelWidth / 2;\n let positionTop = selectionBottom + ARROW_HEIGHT + LABEL_GAP;\n let arrowPosition: \"top\" | \"bottom\" = \"bottom\";\n\n if (positionLeft + labelWidth > viewportWidth - VIEWPORT_MARGIN_PX) {\n positionLeft = viewportWidth - labelWidth - VIEWPORT_MARGIN_PX;\n }\n if (positionLeft < VIEWPORT_MARGIN_PX) {\n positionLeft = VIEWPORT_MARGIN_PX;\n }\n\n const totalHeightNeeded = labelHeight + ARROW_HEIGHT + LABEL_GAP;\n const fitsBelow =\n positionTop + labelHeight <= viewportHeight - VIEWPORT_MARGIN_PX;\n\n if (!fitsBelow) {\n positionTop = selectionTop - totalHeightNeeded;\n arrowPosition = \"top\";\n }\n\n if (positionTop < VIEWPORT_MARGIN_PX) {\n positionTop = VIEWPORT_MARGIN_PX;\n }\n if (positionTop + labelHeight > viewportHeight - VIEWPORT_MARGIN_PX) {\n positionTop = viewportHeight - labelHeight - VIEWPORT_MARGIN_PX;\n }\n\n const arrowLeft = Math.max(\n MIN_ARROW_OFFSET,\n Math.min(cursorX - positionLeft, labelWidth - MIN_ARROW_OFFSET)\n );\n\n return {\n left: positionLeft,\n top: positionTop,\n arrowLeft,\n arrowPosition,\n };\n}\n\nexport const OFFSCREEN_POSITION: LabelPosition = {\n left: -9999,\n top: -9999,\n arrowLeft: 0,\n arrowPosition: \"bottom\",\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMA,kBAAkB,GAAG,CAAC;AAC5B,MAAMC,YAAY,GAAG,CAAC;AACtB,MAAMC,SAAS,GAAG,CAAC;AACnB,MAAMC,gBAAgB,GAAG,EAAE;AAE3B,OAAO,SAASC,oBAAoBA,CAClCC,eAA8B,EAC9BC,UAAkB,EAClBC,WAAmB,EACnBC,MAAc,EACC;EACf,MAAMC,aAAa,GAAGC,MAAM,CAACC,UAAU;EACvC,MAAMC,cAAc,GAAGF,MAAM,CAACG,WAAW;EAEzC,MAAMC,gBAAgB,GAAGT,eAAe,CAACU,CAAC,GAAGV,eAAe,CAACW,KAAK,GAAG,CAAC;EACtE,MAAMC,OAAO,GAAGT,MAAM,IAAIM,gBAAgB;EAC1C,MAAMI,eAAe,GAAGb,eAAe,CAACc,CAAC,GAAGd,eAAe,CAACe,MAAM;EAClE,MAAMC,YAAY,GAAGhB,eAAe,CAACc,CAAC;EAEtC,IAAIG,YAAY,GAAGL,OAAO,GAAGX,UAAU,GAAG,CAAC;EAC3C,IAAIiB,WAAW,GAAGL,eAAe,GAAGjB,YAAY,GAAGC,SAAS;EAC5D,IAAIsB,aAA+B,GAAG,QAAQ;EAE9C,IAAIF,YAAY,GAAGhB,UAAU,GAAGG,aAAa,GAAGT,kBAAkB,EAAE;IAClEsB,YAAY,GAAGb,aAAa,GAAGH,UAAU,GAAGN,kBAAkB;EAChE;EACA,IAAIsB,YAAY,GAAGtB,kBAAkB,EAAE;IACrCsB,YAAY,GAAGtB,kBAAkB;EACnC;EAGA,MAAMyB,SAAS,GACbF,WAAW,GAAGhB,WAAW,IAAIK,cAAc,GAAGZ,kBAAkB;EAElE,IAAI,CAACyB,SAAS,EAAE;IACdF,WAAW,GAAGF,YAAY,IALFd,WAAW,GAAGN,YAAY,GAAGC,SAAS,CAKhB;IAC9CsB,aAAa,GAAG,KAAK;EACvB;EAEA,IAAID,WAAW,GAAGvB,kBAAkB,EAAE;IACpCuB,WAAW,GAAGvB,kBAAkB;EAClC;EACA,IAAIuB,WAAW,GAAGhB,WAAW,GAAGK,cAAc,GAAGZ,kBAAkB,EAAE;IACnEuB,WAAW,GAAGX,cAAc,GAAGL,WAAW,GAAGP,kBAAkB;EACjE;EAEA,MAAM0B,SAAS,GAAGC,IAAI,CAACC,GAAG,CACxBzB,gBAAgB,EAChBwB,IAAI,CAACE,GAAG,CAACZ,OAAO,GAAGK,YAAY,EAAEhB,UAAU,GAAGH,gBAAgB,CAChE,CAAC;EAED,OAAO;IACL2B,IAAI,EAAER,YAAY;IAClBS,GAAG,EAAER,WAAW;IAChBG,SAAS;IACTF;EACF,CAAC;AACH;AAEA,OAAO,MAAMQ,kBAAiC,GAAG;EAC/CF,IAAI,EAAE,CAAC,IAAI;EACXC,GAAG,EAAE,CAAC,IAAI;EACVL,SAAS,EAAE,CAAC;EACZF,aAAa,EAAE;AACjB,CAAC","ignoreList":[]}
|
|
@@ -46,7 +46,7 @@ export class MockCacheKeyGenerator {
|
|
|
46
46
|
type: "list",
|
|
47
47
|
apiName: data.type,
|
|
48
48
|
where: whereClause,
|
|
49
|
-
orderBy
|
|
49
|
+
orderBy,
|
|
50
50
|
otherKeys: [data.type, this.canonicalizeWhereClause(whereClause), this.canonicalizeOrderBy(orderBy)]
|
|
51
51
|
};
|
|
52
52
|
}
|
|
@@ -59,7 +59,7 @@ export class MockCacheKeyGenerator {
|
|
|
59
59
|
sourcePk: data.sourcePk,
|
|
60
60
|
linkName: data.linkName,
|
|
61
61
|
where: whereClause,
|
|
62
|
-
orderBy
|
|
62
|
+
orderBy,
|
|
63
63
|
otherKeys: [data.sourceType, data.sourcePk, data.linkName, this.canonicalizeWhereClause(whereClause), this.canonicalizeOrderBy(orderBy)]
|
|
64
64
|
};
|
|
65
65
|
}
|
|
@@ -70,7 +70,7 @@ export class MockCacheKeyGenerator {
|
|
|
70
70
|
type: "aggregation",
|
|
71
71
|
apiName: data.type,
|
|
72
72
|
where: whereClause,
|
|
73
|
-
aggregate
|
|
73
|
+
aggregate,
|
|
74
74
|
otherKeys: ["object", data.type, this.canonicalizeWhereClause(whereClause), undefined, JSON.stringify(aggregate)]
|
|
75
75
|
};
|
|
76
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockCacheKeyGenerator.js","names":["MockCacheKeyGenerator","generateCacheKey","primitive","type","generateObjectCacheKey","data","generateObjectSetCacheKey","generateLinkCacheKey","generateAggregationCacheKey","apiName","primaryKey","otherKeys","whereClause","orderBy","where","canonicalizeWhereClause","canonicalizeOrderBy","sourceType","sourcePk","linkName","aggregate","undefined","JSON","stringify","Object","keys","length","sortedKeys","sort","sorted","key","Array","isArray","cacheKeysMatch","key1","key2","serialized1","serialized2","cacheKeyToString","cacheKey"],"sources":["MockCacheKeyGenerator.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 { SelectedPrimitive } from \"../components/PrimitiveSelectionPanel.js\";\n\ntype OrderByEntry = Record<string, \"asc\" | \"desc\">;\ntype OrderByValue = OrderByEntry | OrderByEntry[];\n\nexport interface ObjectCacheKeyData {\n type: string;\n primaryKey?: string;\n}\n\nexport interface ObjectSetCacheKeyData {\n type: string;\n whereClause?: Record<string, unknown>;\n orderBy?: OrderByValue;\n}\n\nexport interface LinkCacheKeyData {\n sourceType: string;\n sourcePk?: string;\n linkName: string;\n where?: Record<string, unknown>;\n orderBy?: OrderByValue;\n}\n\nexport interface AggregationCacheKeyData {\n type: string;\n whereClause?: Record<string, unknown>;\n aggregate?: Record<string, unknown>;\n}\n\nexport interface CacheKey {\n type: string;\n otherKeys: unknown[];\n [key: string]: unknown;\n}\n\nexport class MockCacheKeyGenerator {\n static generateCacheKey(primitive: SelectedPrimitive): CacheKey | null {\n switch (primitive.type) {\n case \"object\":\n return this.generateObjectCacheKey(primitive.data);\n\n case \"objectSet\":\n return this.generateObjectSetCacheKey(primitive.data);\n\n case \"link\":\n return this.generateLinkCacheKey(primitive.data);\n\n case \"aggregation\":\n return this.generateAggregationCacheKey(primitive.data);\n\n case \"action\":\n return null;\n\n default:\n return null;\n }\n }\n\n private static generateObjectCacheKey(data: ObjectCacheKeyData): CacheKey {\n return {\n type: \"object\",\n apiName: data.type,\n primaryKey: data.primaryKey,\n otherKeys: [data.type, data.primaryKey],\n };\n }\n\n private static generateObjectSetCacheKey(\n data: ObjectSetCacheKeyData
|
|
1
|
+
{"version":3,"file":"MockCacheKeyGenerator.js","names":["MockCacheKeyGenerator","generateCacheKey","primitive","type","generateObjectCacheKey","data","generateObjectSetCacheKey","generateLinkCacheKey","generateAggregationCacheKey","apiName","primaryKey","otherKeys","whereClause","orderBy","where","canonicalizeWhereClause","canonicalizeOrderBy","sourceType","sourcePk","linkName","aggregate","undefined","JSON","stringify","Object","keys","length","sortedKeys","sort","sorted","key","Array","isArray","cacheKeysMatch","key1","key2","serialized1","serialized2","cacheKeyToString","cacheKey"],"sources":["MockCacheKeyGenerator.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 { SelectedPrimitive } from \"../components/PrimitiveSelectionPanel.js\";\n\ntype OrderByEntry = Record<string, \"asc\" | \"desc\">;\ntype OrderByValue = OrderByEntry | OrderByEntry[];\n\nexport interface ObjectCacheKeyData {\n type: string;\n primaryKey?: string;\n}\n\nexport interface ObjectSetCacheKeyData {\n type: string;\n whereClause?: Record<string, unknown>;\n orderBy?: OrderByValue;\n}\n\nexport interface LinkCacheKeyData {\n sourceType: string;\n sourcePk?: string;\n linkName: string;\n where?: Record<string, unknown>;\n orderBy?: OrderByValue;\n}\n\nexport interface AggregationCacheKeyData {\n type: string;\n whereClause?: Record<string, unknown>;\n aggregate?: Record<string, unknown>;\n}\n\nexport interface CacheKey {\n type: string;\n otherKeys: unknown[];\n [key: string]: unknown;\n}\n\nexport class MockCacheKeyGenerator {\n static generateCacheKey(primitive: SelectedPrimitive): CacheKey | null {\n switch (primitive.type) {\n case \"object\":\n return this.generateObjectCacheKey(primitive.data);\n\n case \"objectSet\":\n return this.generateObjectSetCacheKey(primitive.data);\n\n case \"link\":\n return this.generateLinkCacheKey(primitive.data);\n\n case \"aggregation\":\n return this.generateAggregationCacheKey(primitive.data);\n\n case \"action\":\n return null;\n\n default:\n return null;\n }\n }\n\n private static generateObjectCacheKey(data: ObjectCacheKeyData): CacheKey {\n return {\n type: \"object\",\n apiName: data.type,\n primaryKey: data.primaryKey,\n otherKeys: [data.type, data.primaryKey],\n };\n }\n\n private static generateObjectSetCacheKey(\n data: ObjectSetCacheKeyData\n ): CacheKey {\n const whereClause = data.whereClause || {};\n const orderBy = data.orderBy || [];\n\n return {\n type: \"list\",\n apiName: data.type,\n where: whereClause,\n orderBy,\n otherKeys: [\n data.type,\n this.canonicalizeWhereClause(whereClause),\n this.canonicalizeOrderBy(orderBy),\n ],\n };\n }\n\n private static generateLinkCacheKey(data: LinkCacheKeyData): CacheKey {\n const whereClause = data.where || {};\n const orderBy = data.orderBy || [];\n\n return {\n type: \"link\",\n sourceType: data.sourceType,\n sourcePk: data.sourcePk,\n linkName: data.linkName,\n where: whereClause,\n orderBy,\n otherKeys: [\n data.sourceType,\n data.sourcePk,\n data.linkName,\n this.canonicalizeWhereClause(whereClause),\n this.canonicalizeOrderBy(orderBy),\n ],\n };\n }\n\n private static generateAggregationCacheKey(\n data: AggregationCacheKeyData\n ): CacheKey {\n const whereClause = data.whereClause || {};\n const aggregate = data.aggregate || {};\n\n return {\n type: \"aggregation\",\n apiName: data.type,\n where: whereClause,\n aggregate,\n otherKeys: [\n \"object\",\n data.type,\n this.canonicalizeWhereClause(whereClause),\n undefined,\n JSON.stringify(aggregate),\n ],\n };\n }\n\n private static canonicalizeWhereClause(\n where: Record<string, unknown>\n ): string {\n if (!where || Object.keys(where).length === 0) {\n return \"{}\";\n }\n\n const sortedKeys = Object.keys(where).sort();\n const sorted: Record<string, unknown> = {};\n for (const key of sortedKeys) {\n sorted[key] = where[key];\n }\n\n return JSON.stringify(sorted);\n }\n\n private static canonicalizeOrderBy(\n orderBy: OrderByValue | undefined\n ): string {\n if (!orderBy || (Array.isArray(orderBy) && orderBy.length === 0)) {\n return \"[]\";\n }\n\n if (!Array.isArray(orderBy)) {\n return JSON.stringify([orderBy]);\n }\n\n return JSON.stringify(orderBy);\n }\n\n static cacheKeysMatch(key1: CacheKey, key2: CacheKey): boolean {\n if (key1.type !== key2.type) {\n return false;\n }\n\n const serialized1 = JSON.stringify(key1.otherKeys);\n const serialized2 = JSON.stringify(key2.otherKeys);\n\n return serialized1 === serialized2;\n }\n\n static cacheKeyToString(cacheKey: CacheKey): string {\n return JSON.stringify([cacheKey.type, ...cacheKey.otherKeys]);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -32,7 +32,7 @@ export class MockManager {
|
|
|
32
32
|
id: objectMockId,
|
|
33
33
|
type: "object",
|
|
34
34
|
matcher: {
|
|
35
|
-
objectType
|
|
35
|
+
objectType,
|
|
36
36
|
primaryKey: String(primaryKey)
|
|
37
37
|
},
|
|
38
38
|
response: {
|
|
@@ -44,7 +44,7 @@ export class MockManager {
|
|
|
44
44
|
cacheKey: {
|
|
45
45
|
type: "object",
|
|
46
46
|
apiName: objectType,
|
|
47
|
-
primaryKey
|
|
47
|
+
primaryKey,
|
|
48
48
|
otherKeys: [objectType, primaryKey]
|
|
49
49
|
}
|
|
50
50
|
});
|
|
@@ -172,7 +172,7 @@ export class MockManager {
|
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
getMocks() {
|
|
175
|
-
return
|
|
175
|
+
return [...this.mocks.values()];
|
|
176
176
|
}
|
|
177
177
|
getMock(id) {
|
|
178
178
|
return this.mocks.get(id);
|
|
@@ -240,7 +240,7 @@ export class MockManager {
|
|
|
240
240
|
this.requestLog = [];
|
|
241
241
|
}
|
|
242
242
|
exportMocks() {
|
|
243
|
-
return JSON.stringify(
|
|
243
|
+
return JSON.stringify([...this.mocks.values()], null, 2);
|
|
244
244
|
}
|
|
245
245
|
importMocks(json) {
|
|
246
246
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockManager.js","names":["MockCacheKeyGenerator","MockManager","mocks","Map","requestLog","maxLogSize","injectedObjects","setStore","store","setMockLayer","layer","mockLayer","injectMockedObjectToCache","mockId","objectType","primaryKey","objectData","objectMockId","set","id","type","matcher","String","response","object","usedCount","enabled","cacheKey","apiName","otherKeys","injectedList","get","push","invalidateMock","invalidateObjectType","cleanupInjectedObjects","injected","length","affectedTypes","Set","obj","delete","add","registerMock","mock","Date","now","Math","random","toString","substring","primitive","generateCacheKey","invalidateCacheKey","findMock","request","values","maxUses","isMatch","matches","logRequest","failureRate","error","RegExp","test","actionName","whereClause","JSON","stringify","linkName","matchedMock","timestamp","shift","getMocks","Array","from","getMock","updateMock","updates","removeMock","findMockByCacheKey","cacheKeysMatch","list","result","metadata","mockType","getRequestLog","clear","exportMocks","importMocks","json","imported","parse","getStats","enabledMocks","disabledMocks","exhaustedMocks","matchedRequests","filter","entry","totalMocks","size","totalRequests"],"sources":["MockManager.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 { SelectedPrimitive } from \"../components/PrimitiveSelectionPanel.js\";\nimport type { CacheKey } from \"./MockCacheKeyGenerator.js\";\nimport { MockCacheKeyGenerator } from \"./MockCacheKeyGenerator.js\";\n\nexport interface MockMatcher {\n objectType?: string;\n primaryKey?: string | RegExp;\n actionName?: string;\n whereClause?: Record<string, unknown>;\n linkName?: string;\n}\n\nexport type MockResponseData =\n | { type: \"object\"; object: unknown }\n | { type: \"list\"; list: unknown[]; hasMore: boolean }\n | { type: \"action\"; result: unknown }\n | { type: \"error\"; error: string }\n | { type: \"passthrough\" };\n\nexport interface MockResponse {\n id: string;\n type: \"object\" | \"list\" | \"action\" | \"links\";\n matcher: MockMatcher;\n response: MockResponseData;\n delay?: number;\n failureRate?: number;\n maxUses?: number;\n usedCount: number;\n enabled: boolean;\n cacheKey?: CacheKey;\n primitive?: SelectedPrimitive;\n usePayload?: boolean;\n payload?: string;\n}\n\nexport interface MockRequest {\n type: \"object\" | \"list\" | \"action\" | \"links\";\n objectType?: string;\n primaryKey?: string;\n actionName?: string;\n whereClause?: Record<string, unknown>;\n linkName?: string;\n}\n\nexport interface RequestLogEntry {\n request: MockRequest;\n matchedMock?: string;\n timestamp: number;\n}\n\nexport interface InjectedObject {\n objectType: string;\n primaryKey: string | number;\n mockId: string;\n}\n\ninterface MockLayer {\n invalidateMock(mockId: string): void;\n}\n\ninterface MockStore {\n invalidateObjectType(objectType: string): void;\n invalidateCacheKey(cacheKey: CacheKey): void;\n}\n\nexport class MockManager {\n private mocks = new Map<string, MockResponse>();\n private requestLog: RequestLogEntry[] = [];\n private maxLogSize = 1000;\n private mockLayer?: MockLayer;\n private store?: MockStore;\n private injectedObjects = new Map<string, InjectedObject[]>();\n\n setStore(store: MockStore): void {\n this.store = store;\n }\n\n setMockLayer(layer: MockLayer): void {\n this.mockLayer = layer;\n }\n\n injectMockedObjectToCache(\n mockId: string,\n objectType: string,\n primaryKey: string | number,\n objectData: Record<string, unknown>,\n ): void {\n const objectMockId = `${mockId}-object-${primaryKey}`;\n this.mocks.set(objectMockId, {\n id: objectMockId,\n type: \"object\",\n matcher: {\n objectType: objectType,\n primaryKey: String(primaryKey),\n },\n response: {\n type: \"object\",\n object: objectData,\n },\n usedCount: 0,\n enabled: true,\n cacheKey: {\n type: \"object\",\n apiName: objectType,\n primaryKey: primaryKey,\n otherKeys: [objectType, primaryKey],\n },\n });\n\n let injectedList = this.injectedObjects.get(mockId);\n if (!injectedList) {\n injectedList = [];\n this.injectedObjects.set(mockId, injectedList);\n }\n injectedList.push({ objectType, primaryKey, mockId: objectMockId });\n\n if (this.mockLayer) {\n this.mockLayer.invalidateMock(objectMockId);\n }\n if (this.store) {\n this.store.invalidateObjectType(objectType);\n }\n }\n\n cleanupInjectedObjects(mockId: string): void {\n const injected = this.injectedObjects.get(mockId);\n if (!injected || injected.length === 0) {\n return;\n }\n\n const affectedTypes = new Set<string>();\n\n for (const obj of injected) {\n this.mocks.delete(obj.mockId);\n if (this.mockLayer) {\n this.mockLayer.invalidateMock(obj.mockId);\n }\n affectedTypes.add(obj.objectType);\n }\n\n if (this.store) {\n for (const type of affectedTypes) {\n this.store.invalidateObjectType(type);\n }\n }\n\n this.injectedObjects.delete(mockId);\n }\n\n registerMock(mock: MockResponse): string {\n const id = mock.id\n || `mock-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n\n if (mock.primitive) {\n const cacheKey = MockCacheKeyGenerator.generateCacheKey(mock.primitive);\n if (cacheKey) {\n mock.cacheKey = cacheKey;\n }\n }\n\n this.mocks.set(id, { ...mock, id });\n\n if (this.mockLayer) {\n this.mockLayer.invalidateMock(id);\n }\n\n if (this.store && mock.cacheKey) {\n this.store.invalidateCacheKey(mock.cacheKey);\n }\n\n return id;\n }\n\n findMock(request: MockRequest): MockResponse | null {\n for (const mock of this.mocks.values()) {\n if (!mock.enabled) {\n continue;\n }\n if (mock.type !== request.type) {\n continue;\n }\n\n if (mock.maxUses && mock.usedCount >= mock.maxUses) {\n continue;\n }\n\n const isMatch = this.matches(mock.matcher, request);\n\n if (isMatch) {\n this.logRequest(request, mock.id);\n\n mock.usedCount++;\n\n if (mock.failureRate && Math.random() < mock.failureRate) {\n return {\n ...mock,\n response: {\n type: \"error\",\n error: \"Simulated failure: MOCK_FAILURE\",\n },\n };\n }\n\n return mock;\n }\n }\n\n this.logRequest(request);\n return null;\n }\n\n private matches(matcher: MockMatcher, request: MockRequest): boolean {\n if (matcher.objectType && matcher.objectType !== request.objectType) {\n return false;\n }\n\n if (matcher.primaryKey) {\n if (matcher.primaryKey instanceof RegExp) {\n if (\n !request.primaryKey || !matcher.primaryKey.test(request.primaryKey)\n ) {\n return false;\n }\n } else if (matcher.primaryKey !== request.primaryKey) {\n return false;\n }\n }\n\n if (matcher.actionName && matcher.actionName !== request.actionName) {\n return false;\n }\n\n if (matcher.whereClause) {\n if (\n JSON.stringify(matcher.whereClause)\n !== JSON.stringify(request.whereClause)\n ) {\n return false;\n }\n }\n\n if (matcher.linkName && matcher.linkName !== request.linkName) {\n return false;\n }\n\n return true;\n }\n\n private logRequest(request: MockRequest, matchedMock?: string): void {\n this.requestLog.push({\n request,\n matchedMock,\n timestamp: Date.now(),\n });\n\n if (this.requestLog.length > this.maxLogSize) {\n this.requestLog.shift();\n }\n }\n\n getMocks(): MockResponse[] {\n return Array.from(this.mocks.values());\n }\n\n getMock(id: string): MockResponse | undefined {\n return this.mocks.get(id);\n }\n\n updateMock(id: string, updates: Partial<MockResponse>): boolean {\n const mock = this.mocks.get(id);\n if (!mock) {\n return false;\n }\n\n if (mock.enabled && updates.enabled === false) {\n this.cleanupInjectedObjects(id);\n }\n\n this.mocks.set(id, { ...mock, ...updates, id });\n return true;\n }\n\n removeMock(id: string): boolean {\n const mock = this.mocks.get(id);\n if (!mock) {\n return false;\n }\n\n this.cleanupInjectedObjects(id);\n this.mocks.delete(id);\n\n if (this.mockLayer) {\n this.mockLayer.invalidateMock(id);\n }\n if (this.store && mock.cacheKey) {\n this.store.invalidateCacheKey(mock.cacheKey);\n }\n\n return true;\n }\n\n findMockByCacheKey(\n cacheKey: CacheKey,\n ):\n | { id: string; response: unknown; metadata?: Record<string, unknown> }\n | null\n {\n for (const mock of this.mocks.values()) {\n if (\n mock.enabled && mock.cacheKey\n && MockCacheKeyGenerator.cacheKeysMatch(mock.cacheKey, cacheKey)\n ) {\n let response: unknown;\n\n if (mock.response.type === \"object\") {\n response = mock.response.object;\n } else if (mock.response.type === \"list\") {\n response = mock.response.list;\n } else if (mock.response.type === \"action\") {\n response = mock.response.result;\n } else {\n response = null;\n }\n\n return {\n id: mock.id,\n response,\n metadata: {\n mockType: mock.type,\n usedCount: mock.usedCount,\n },\n };\n }\n }\n return null;\n }\n\n getRequestLog(): RequestLogEntry[] {\n return [...this.requestLog];\n }\n\n clear(): void {\n this.mocks.clear();\n this.requestLog = [];\n }\n\n exportMocks(): string {\n return JSON.stringify(Array.from(this.mocks.values()), null, 2);\n }\n\n importMocks(json: string): number {\n try {\n const imported = JSON.parse(json) as MockResponse[];\n for (const mock of imported) {\n this.registerMock(mock);\n }\n return imported.length;\n } catch {\n return 0;\n }\n }\n\n getStats(): {\n totalMocks: number;\n enabledMocks: number;\n disabledMocks: number;\n exhaustedMocks: number;\n totalRequests: number;\n matchedRequests: number;\n } {\n let enabledMocks = 0;\n let disabledMocks = 0;\n let exhaustedMocks = 0;\n\n for (const mock of this.mocks.values()) {\n if (mock.enabled) {\n enabledMocks++;\n } else {\n disabledMocks++;\n }\n\n if (mock.maxUses && mock.usedCount >= mock.maxUses) {\n exhaustedMocks++;\n }\n }\n\n const matchedRequests =\n this.requestLog.filter((entry) => entry.matchedMock).length;\n\n return {\n totalMocks: this.mocks.size,\n enabledMocks,\n disabledMocks,\n exhaustedMocks,\n totalRequests: this.requestLog.length,\n matchedRequests,\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MockManager.js","names":["MockCacheKeyGenerator","MockManager","mocks","Map","requestLog","maxLogSize","injectedObjects","setStore","store","setMockLayer","layer","mockLayer","injectMockedObjectToCache","mockId","objectType","primaryKey","objectData","objectMockId","set","id","type","matcher","String","response","object","usedCount","enabled","cacheKey","apiName","otherKeys","injectedList","get","push","invalidateMock","invalidateObjectType","cleanupInjectedObjects","injected","length","affectedTypes","Set","obj","delete","add","registerMock","mock","Date","now","Math","random","toString","substring","primitive","generateCacheKey","invalidateCacheKey","findMock","request","values","maxUses","isMatch","matches","logRequest","failureRate","error","RegExp","test","actionName","whereClause","JSON","stringify","linkName","matchedMock","timestamp","shift","getMocks","getMock","updateMock","updates","removeMock","findMockByCacheKey","cacheKeysMatch","list","result","metadata","mockType","getRequestLog","clear","exportMocks","importMocks","json","imported","parse","getStats","enabledMocks","disabledMocks","exhaustedMocks","matchedRequests","filter","entry","totalMocks","size","totalRequests"],"sources":["MockManager.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 { SelectedPrimitive } from \"../components/PrimitiveSelectionPanel.js\";\nimport type { CacheKey } from \"./MockCacheKeyGenerator.js\";\nimport { MockCacheKeyGenerator } from \"./MockCacheKeyGenerator.js\";\n\nexport interface MockMatcher {\n objectType?: string;\n primaryKey?: string | RegExp;\n actionName?: string;\n whereClause?: Record<string, unknown>;\n linkName?: string;\n}\n\nexport type MockResponseData =\n | { type: \"object\"; object: unknown }\n | { type: \"list\"; list: unknown[]; hasMore: boolean }\n | { type: \"action\"; result: unknown }\n | { type: \"error\"; error: string }\n | { type: \"passthrough\" };\n\nexport interface MockResponse {\n id: string;\n type: \"object\" | \"list\" | \"action\" | \"links\";\n matcher: MockMatcher;\n response: MockResponseData;\n delay?: number;\n failureRate?: number;\n maxUses?: number;\n usedCount: number;\n enabled: boolean;\n cacheKey?: CacheKey;\n primitive?: SelectedPrimitive;\n usePayload?: boolean;\n payload?: string;\n}\n\nexport interface MockRequest {\n type: \"object\" | \"list\" | \"action\" | \"links\";\n objectType?: string;\n primaryKey?: string;\n actionName?: string;\n whereClause?: Record<string, unknown>;\n linkName?: string;\n}\n\nexport interface RequestLogEntry {\n request: MockRequest;\n matchedMock?: string;\n timestamp: number;\n}\n\nexport interface InjectedObject {\n objectType: string;\n primaryKey: string | number;\n mockId: string;\n}\n\ninterface MockLayer {\n invalidateMock(mockId: string): void;\n}\n\ninterface MockStore {\n invalidateObjectType(objectType: string): void;\n invalidateCacheKey(cacheKey: CacheKey): void;\n}\n\nexport class MockManager {\n private mocks = new Map<string, MockResponse>();\n private requestLog: RequestLogEntry[] = [];\n private maxLogSize = 1000;\n private mockLayer?: MockLayer;\n private store?: MockStore;\n private injectedObjects = new Map<string, InjectedObject[]>();\n\n setStore(store: MockStore): void {\n this.store = store;\n }\n\n setMockLayer(layer: MockLayer): void {\n this.mockLayer = layer;\n }\n\n injectMockedObjectToCache(\n mockId: string,\n objectType: string,\n primaryKey: string | number,\n objectData: Record<string, unknown>\n ): void {\n const objectMockId = `${mockId}-object-${primaryKey}`;\n this.mocks.set(objectMockId, {\n id: objectMockId,\n type: \"object\",\n matcher: {\n objectType,\n primaryKey: String(primaryKey),\n },\n response: {\n type: \"object\",\n object: objectData,\n },\n usedCount: 0,\n enabled: true,\n cacheKey: {\n type: \"object\",\n apiName: objectType,\n primaryKey,\n otherKeys: [objectType, primaryKey],\n },\n });\n\n let injectedList = this.injectedObjects.get(mockId);\n if (!injectedList) {\n injectedList = [];\n this.injectedObjects.set(mockId, injectedList);\n }\n injectedList.push({ objectType, primaryKey, mockId: objectMockId });\n\n if (this.mockLayer) {\n this.mockLayer.invalidateMock(objectMockId);\n }\n if (this.store) {\n this.store.invalidateObjectType(objectType);\n }\n }\n\n cleanupInjectedObjects(mockId: string): void {\n const injected = this.injectedObjects.get(mockId);\n if (!injected || injected.length === 0) {\n return;\n }\n\n const affectedTypes = new Set<string>();\n\n for (const obj of injected) {\n this.mocks.delete(obj.mockId);\n if (this.mockLayer) {\n this.mockLayer.invalidateMock(obj.mockId);\n }\n affectedTypes.add(obj.objectType);\n }\n\n if (this.store) {\n for (const type of affectedTypes) {\n this.store.invalidateObjectType(type);\n }\n }\n\n this.injectedObjects.delete(mockId);\n }\n\n registerMock(mock: MockResponse): string {\n const id =\n mock.id ||\n `mock-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n\n if (mock.primitive) {\n const cacheKey = MockCacheKeyGenerator.generateCacheKey(mock.primitive);\n if (cacheKey) {\n mock.cacheKey = cacheKey;\n }\n }\n\n this.mocks.set(id, { ...mock, id });\n\n if (this.mockLayer) {\n this.mockLayer.invalidateMock(id);\n }\n\n if (this.store && mock.cacheKey) {\n this.store.invalidateCacheKey(mock.cacheKey);\n }\n\n return id;\n }\n\n findMock(request: MockRequest): MockResponse | null {\n for (const mock of this.mocks.values()) {\n if (!mock.enabled) {\n continue;\n }\n if (mock.type !== request.type) {\n continue;\n }\n\n if (mock.maxUses && mock.usedCount >= mock.maxUses) {\n continue;\n }\n\n const isMatch = this.matches(mock.matcher, request);\n\n if (isMatch) {\n this.logRequest(request, mock.id);\n\n mock.usedCount++;\n\n if (mock.failureRate && Math.random() < mock.failureRate) {\n return {\n ...mock,\n response: {\n type: \"error\",\n error: \"Simulated failure: MOCK_FAILURE\",\n },\n };\n }\n\n return mock;\n }\n }\n\n this.logRequest(request);\n return null;\n }\n\n private matches(matcher: MockMatcher, request: MockRequest): boolean {\n if (matcher.objectType && matcher.objectType !== request.objectType) {\n return false;\n }\n\n if (matcher.primaryKey) {\n if (matcher.primaryKey instanceof RegExp) {\n if (\n !request.primaryKey ||\n !matcher.primaryKey.test(request.primaryKey)\n ) {\n return false;\n }\n } else if (matcher.primaryKey !== request.primaryKey) {\n return false;\n }\n }\n\n if (matcher.actionName && matcher.actionName !== request.actionName) {\n return false;\n }\n\n if (matcher.whereClause) {\n if (\n JSON.stringify(matcher.whereClause) !==\n JSON.stringify(request.whereClause)\n ) {\n return false;\n }\n }\n\n if (matcher.linkName && matcher.linkName !== request.linkName) {\n return false;\n }\n\n return true;\n }\n\n private logRequest(request: MockRequest, matchedMock?: string): void {\n this.requestLog.push({\n request,\n matchedMock,\n timestamp: Date.now(),\n });\n\n if (this.requestLog.length > this.maxLogSize) {\n this.requestLog.shift();\n }\n }\n\n getMocks(): MockResponse[] {\n return [...this.mocks.values()];\n }\n\n getMock(id: string): MockResponse | undefined {\n return this.mocks.get(id);\n }\n\n updateMock(id: string, updates: Partial<MockResponse>): boolean {\n const mock = this.mocks.get(id);\n if (!mock) {\n return false;\n }\n\n if (mock.enabled && updates.enabled === false) {\n this.cleanupInjectedObjects(id);\n }\n\n this.mocks.set(id, { ...mock, ...updates, id });\n return true;\n }\n\n removeMock(id: string): boolean {\n const mock = this.mocks.get(id);\n if (!mock) {\n return false;\n }\n\n this.cleanupInjectedObjects(id);\n this.mocks.delete(id);\n\n if (this.mockLayer) {\n this.mockLayer.invalidateMock(id);\n }\n if (this.store && mock.cacheKey) {\n this.store.invalidateCacheKey(mock.cacheKey);\n }\n\n return true;\n }\n\n findMockByCacheKey(cacheKey: CacheKey): {\n id: string;\n response: unknown;\n metadata?: Record<string, unknown>;\n } | null {\n for (const mock of this.mocks.values()) {\n if (\n mock.enabled &&\n mock.cacheKey &&\n MockCacheKeyGenerator.cacheKeysMatch(mock.cacheKey, cacheKey)\n ) {\n let response: unknown;\n\n if (mock.response.type === \"object\") {\n response = mock.response.object;\n } else if (mock.response.type === \"list\") {\n response = mock.response.list;\n } else if (mock.response.type === \"action\") {\n response = mock.response.result;\n } else {\n response = null;\n }\n\n return {\n id: mock.id,\n response,\n metadata: {\n mockType: mock.type,\n usedCount: mock.usedCount,\n },\n };\n }\n }\n return null;\n }\n\n getRequestLog(): RequestLogEntry[] {\n return [...this.requestLog];\n }\n\n clear(): void {\n this.mocks.clear();\n this.requestLog = [];\n }\n\n exportMocks(): string {\n return JSON.stringify([...this.mocks.values()], null, 2);\n }\n\n importMocks(json: string): number {\n try {\n const imported = JSON.parse(json) as MockResponse[];\n for (const mock of imported) {\n this.registerMock(mock);\n }\n return imported.length;\n } catch {\n return 0;\n }\n }\n\n getStats(): {\n totalMocks: number;\n enabledMocks: number;\n disabledMocks: number;\n exhaustedMocks: number;\n totalRequests: number;\n matchedRequests: number;\n } {\n let enabledMocks = 0;\n let disabledMocks = 0;\n let exhaustedMocks = 0;\n\n for (const mock of this.mocks.values()) {\n if (mock.enabled) {\n enabledMocks++;\n } else {\n disabledMocks++;\n }\n\n if (mock.maxUses && mock.usedCount >= mock.maxUses) {\n exhaustedMocks++;\n }\n }\n\n const matchedRequests = this.requestLog.filter(\n (entry) => entry.matchedMock\n ).length;\n\n return {\n totalMocks: this.mocks.size,\n enabledMocks,\n disabledMocks,\n exhaustedMocks,\n totalRequests: this.requestLog.length,\n matchedRequests,\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -57,7 +57,7 @@ export class PrototypeOverrideStore extends SubscribableStore {
|
|
|
57
57
|
this.notifySubscribers();
|
|
58
58
|
}
|
|
59
59
|
getAll() {
|
|
60
|
-
return
|
|
60
|
+
return [...this.overrides.values()];
|
|
61
61
|
}
|
|
62
62
|
hasOverride(querySignature) {
|
|
63
63
|
return this.signatureToBindingId.has(querySignature);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrototypeOverrideStore.js","names":["SubscribableStore","PrototypeOverrideStore","overrides","Map","signatureToBindingId","setOverride","override","set","bindingId","querySignature","notifySubscribers","getOverride","get","getOverrideBySignature","undefined","updateOverride","updates","existing","clearOverride","delete","clearAll","clear","getAll","
|
|
1
|
+
{"version":3,"file":"PrototypeOverrideStore.js","names":["SubscribableStore","PrototypeOverrideStore","overrides","Map","signatureToBindingId","setOverride","override","set","bindingId","querySignature","notifySubscribers","getOverride","get","getOverrideBySignature","undefined","updateOverride","updates","existing","clearOverride","delete","clearAll","clear","getAll","values","hasOverride","has"],"sources":["PrototypeOverrideStore.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 { SubscribableStore } from \"../store/SubscribableStore.js\";\n\nexport interface PrototypeOverrideParams {\n where?: Record<string, unknown>;\n orderBy?: Record<string, \"asc\" | \"desc\">;\n pageSize?: number;\n groupBy?: Record<string, unknown>;\n select?: Record<string, unknown>;\n}\n\nexport interface PrototypeOverride {\n bindingId: string;\n componentId: string;\n componentName: string;\n hookType: string;\n hookIndex: number;\n objectType: string;\n querySignature: string;\n originalParams: PrototypeOverrideParams;\n overrideParams: PrototypeOverrideParams;\n enabled: boolean;\n createdAt: number;\n}\n\nexport class PrototypeOverrideStore extends SubscribableStore {\n private overrides = new Map<string, PrototypeOverride>();\n private signatureToBindingId = new Map<string, string>();\n\n setOverride(override: PrototypeOverride): void {\n this.overrides.set(override.bindingId, override);\n this.signatureToBindingId.set(override.querySignature, override.bindingId);\n this.notifySubscribers();\n }\n\n getOverride(bindingId: string): PrototypeOverride | undefined {\n return this.overrides.get(bindingId);\n }\n\n getOverrideBySignature(\n querySignature: string\n ): PrototypeOverride | undefined {\n const bindingId = this.signatureToBindingId.get(querySignature);\n if (bindingId) {\n return this.overrides.get(bindingId);\n }\n return undefined;\n }\n\n updateOverride(\n bindingId: string,\n updates: Partial<Pick<PrototypeOverride, \"overrideParams\" | \"enabled\">>\n ): void {\n const existing = this.overrides.get(bindingId);\n if (existing) {\n this.overrides.set(bindingId, { ...existing, ...updates });\n this.notifySubscribers();\n }\n }\n\n clearOverride(bindingId: string): void {\n const override = this.overrides.get(bindingId);\n if (override) {\n this.signatureToBindingId.delete(override.querySignature);\n this.overrides.delete(bindingId);\n this.notifySubscribers();\n }\n }\n\n clearAll(): void {\n this.overrides.clear();\n this.signatureToBindingId.clear();\n this.notifySubscribers();\n }\n\n getAll(): PrototypeOverride[] {\n return [...this.overrides.values()];\n }\n\n hasOverride(querySignature: string): boolean {\n return this.signatureToBindingId.has(querySignature);\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,iBAAiB,QAAQ,+BAA+B;AAwBjE,OAAO,MAAMC,sBAAsB,SAASD,iBAAiB,CAAC;EACpDE,SAAS,GAAG,IAAIC,GAAG,CAA4B,CAAC;EAChDC,oBAAoB,GAAG,IAAID,GAAG,CAAiB,CAAC;EAExDE,WAAWA,CAACC,QAA2B,EAAQ;IAC7C,IAAI,CAACJ,SAAS,CAACK,GAAG,CAACD,QAAQ,CAACE,SAAS,EAAEF,QAAQ,CAAC;IAChD,IAAI,CAACF,oBAAoB,CAACG,GAAG,CAACD,QAAQ,CAACG,cAAc,EAAEH,QAAQ,CAACE,SAAS,CAAC;IAC1E,IAAI,CAACE,iBAAiB,CAAC,CAAC;EAC1B;EAEAC,WAAWA,CAACH,SAAiB,EAAiC;IAC5D,OAAO,IAAI,CAACN,SAAS,CAACU,GAAG,CAACJ,SAAS,CAAC;EACtC;EAEAK,sBAAsBA,CACpBJ,cAAsB,EACS;IAC/B,MAAMD,SAAS,GAAG,IAAI,CAACJ,oBAAoB,CAACQ,GAAG,CAACH,cAAc,CAAC;IAC/D,IAAID,SAAS,EAAE;MACb,OAAO,IAAI,CAACN,SAAS,CAACU,GAAG,CAACJ,SAAS,CAAC;IACtC;IACA,OAAOM,SAAS;EAClB;EAEAC,cAAcA,CACZP,SAAiB,EACjBQ,OAAuE,EACjE;IACN,MAAMC,QAAQ,GAAG,IAAI,CAACf,SAAS,CAACU,GAAG,CAACJ,SAAS,CAAC;IAC9C,IAAIS,QAAQ,EAAE;MACZ,IAAI,CAACf,SAAS,CAACK,GAAG,CAACC,SAAS,EAAE;QAAE,GAAGS,QAAQ;QAAE,GAAGD;MAAQ,CAAC,CAAC;MAC1D,IAAI,CAACN,iBAAiB,CAAC,CAAC;IAC1B;EACF;EAEAQ,aAAaA,CAACV,SAAiB,EAAQ;IACrC,MAAMF,QAAQ,GAAG,IAAI,CAACJ,SAAS,CAACU,GAAG,CAACJ,SAAS,CAAC;IAC9C,IAAIF,QAAQ,EAAE;MACZ,IAAI,CAACF,oBAAoB,CAACe,MAAM,CAACb,QAAQ,CAACG,cAAc,CAAC;MACzD,IAAI,CAACP,SAAS,CAACiB,MAAM,CAACX,SAAS,CAAC;MAChC,IAAI,CAACE,iBAAiB,CAAC,CAAC;IAC1B;EACF;EAEAU,QAAQA,CAAA,EAAS;IACf,IAAI,CAAClB,SAAS,CAACmB,KAAK,CAAC,CAAC;IACtB,IAAI,CAACjB,oBAAoB,CAACiB,KAAK,CAAC,CAAC;IACjC,IAAI,CAACX,iBAAiB,CAAC,CAAC;EAC1B;EAEAY,MAAMA,CAAA,EAAwB;IAC5B,OAAO,CAAC,GAAG,IAAI,CAACpB,SAAS,CAACqB,MAAM,CAAC,CAAC,CAAC;EACrC;EAEAC,WAAWA,CAACf,cAAsB,EAAW;IAC3C,OAAO,IAAI,CAACL,oBAAoB,CAACqB,GAAG,CAAChB,cAAc,CAAC;EACtD;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","names":["registerDevTools","React","SafeMonitoringPanel","DevToolsContext","safelyInstallDevToolsHook","MonitorStore","isDev","process","env","NODE_ENV","globalMonitorStore","globalThis","__OSDK_DEVTOOLS_MONITOR_STORE__","wrapClient","client","wrapExistingClient","wrapChildren","children","createElement","Provider","value","monitorStore"],"sources":["register.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 { ObservableClient } from \"@osdk/client/observable\";\nimport { registerDevTools } from \"@osdk/react/devtools-registry\";\nimport React from \"react\";\nimport { SafeMonitoringPanel } from \"./components/MonitoringPanel.js\";\nimport { DevToolsContext } from \"./DevToolsContext.js\";\nimport { safelyInstallDevToolsHook } from \"./fiber/DevtoolsHook.js\";\nimport { MonitorStore } from \"./store/MonitorStore.js\";\n\nconst isDev
|
|
1
|
+
{"version":3,"file":"register.js","names":["registerDevTools","React","SafeMonitoringPanel","DevToolsContext","safelyInstallDevToolsHook","MonitorStore","isDev","process","env","NODE_ENV","globalMonitorStore","globalThis","__OSDK_DEVTOOLS_MONITOR_STORE__","wrapClient","client","wrapExistingClient","wrapChildren","children","createElement","Provider","value","monitorStore"],"sources":["register.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 { ObservableClient } from \"@osdk/client/observable\";\nimport { registerDevTools } from \"@osdk/react/devtools-registry\";\nimport React from \"react\";\n\nimport { SafeMonitoringPanel } from \"./components/MonitoringPanel.js\";\nimport { DevToolsContext } from \"./DevToolsContext.js\";\nimport { safelyInstallDevToolsHook } from \"./fiber/DevtoolsHook.js\";\nimport { MonitorStore } from \"./store/MonitorStore.js\";\n\nconst isDev =\n typeof process !== \"undefined\"\n ? process.env?.NODE_ENV !== \"production\"\n : true;\n\nif (isDev) {\n safelyInstallDevToolsHook();\n const globalMonitorStore = new MonitorStore();\n (globalThis as Record<string, unknown>).__OSDK_DEVTOOLS_MONITOR_STORE__ =\n globalMonitorStore;\n\n registerDevTools({\n wrapClient: (client: ObservableClient) => {\n return globalMonitorStore.wrapExistingClient(client);\n },\n\n wrapChildren: (\n children: React.ReactNode,\n _monitoredClient: ObservableClient\n ) => {\n return React.createElement(\n DevToolsContext.Provider,\n { value: globalMonitorStore },\n children,\n React.createElement(SafeMonitoringPanel, {\n monitorStore: globalMonitorStore,\n })\n );\n },\n });\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,gBAAgB,QAAQ,+BAA+B;AAChE,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,mBAAmB,QAAQ,iCAAiC;AACrE,SAASC,eAAe,QAAQ,sBAAsB;AACtD,SAASC,yBAAyB,QAAQ,yBAAyB;AACnE,SAASC,YAAY,QAAQ,yBAAyB;AAEtD,MAAMC,KAAK,GACT,OAAOC,OAAO,KAAK,WAAW,GAC1BA,OAAO,CAACC,GAAG,EAAEC,QAAQ,KAAK,YAAY,GACtC,IAAI;AAEV,IAAIH,KAAK,EAAE;EACTF,yBAAyB,CAAC,CAAC;EAC3B,MAAMM,kBAAkB,GAAG,IAAIL,YAAY,CAAC,CAAC;EAC5CM,UAAU,CAA6BC,+BAA+B,GACrEF,kBAAkB;EAEpBV,gBAAgB,CAAC;IACfa,UAAU,EAAGC,MAAwB,IAAK;MACxC,OAAOJ,kBAAkB,CAACK,kBAAkB,CAACD,MAAM,CAAC;IACtD,CAAC;IAEDE,YAAY,EACVC,QAAyB,IAEtB;MACH,oBAAOhB,KAAK,CAACiB,aAAa,CACxBf,eAAe,CAACgB,QAAQ,EACxB;QAAEC,KAAK,EAAEV;MAAmB,CAAC,EAC7BO,QAAQ,eACRhB,KAAK,CAACiB,aAAa,CAAChB,mBAAmB,EAAE;QACvCmB,YAAY,EAAEX;MAChB,CAAC,CACH,CAAC;IACH;EACF,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComputeStore.js","names":["CircularBuffer","SubscribableStore","DEFAULT_MAX_REQUESTS","ComputeStore","requestMap","Map","isNetworkPaused","lastSnapshot","version","cachedRequests","cachedRequestsVersion","cachedMetrics","cachedMetricsVersion","totalUsage","totalResponseBytes","fulfilledCount","fulfilledWithoutUsageCount","failedCount","pendingCount","constructor","maxRequests","requests","evicted","delete","id","createPendingRequest","request","crypto","randomUUID","pendingRequest","type","push","set","invalidate","fulfillRequest","requestId","responseInfo","pending","get","fulfilled","requestTimestamp","requestUrl","requestPayload","requestPayloadHash","responseTimestamp","Date","computeUsage","responsePayloadBytes","fulfillWithoutUsage","failRequest","error","failed","failedTimestamp","setIsRecording","isRecording","lastRecordingEvent","timestamp","clear","endTimestamp","toggleNetworkPaused","getIsNetworkPaused","getLastRecordingEvent","reset","undefined","getRequests","requestsFromBuffer","toArray","newRequests","map","req","arraysReferentiallyEqual","getSnapshot","snapshot","metrics","getMetrics","oneMinuteAgo","now","lastMinuteUsage","recentRequests","getLast","current","getTime","requestCount","completedWithResponseBytes","newMetrics","Math","round","averageUsagePerRequest","averageResponseBytes","metricsEqual","dispose","clearSubscribers","notifySubscribers","a","b","length","i"],"sources":["ComputeStore.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 ComputeMetrics,\n ComputeRequest,\n ComputeRequestError,\n ComputeSnapshot,\n PendingComputeRequest,\n RecordingEvent,\n} from \"../types/compute.js\";\nimport { CircularBuffer } from \"../utils/CircularBuffer.js\";\nimport { SubscribableStore } from \"./SubscribableStore.js\";\n\nconst DEFAULT_MAX_REQUESTS = 500;\n\nexport class ComputeStore extends SubscribableStore {\n private readonly requests: CircularBuffer<ComputeRequest>;\n private readonly requestMap = new Map<string, ComputeRequest>();\n private lastRecordingEvent: RecordingEvent | undefined;\n private isNetworkPaused = false;\n private lastSnapshot: ComputeSnapshot | null = null;\n\n private version = 0;\n private cachedRequests: ReadonlyArray<ComputeRequest> = [];\n private cachedRequestsVersion = -1;\n private cachedMetrics: ComputeMetrics | null = null;\n private cachedMetricsVersion = -1;\n\n private totalUsage = 0;\n private totalResponseBytes = 0;\n private fulfilledCount = 0;\n private fulfilledWithoutUsageCount = 0;\n private failedCount = 0;\n private pendingCount = 0;\n\n constructor(maxRequests: number = DEFAULT_MAX_REQUESTS) {\n super();\n this.requests = new CircularBuffer(maxRequests, (evicted) => {\n this.requestMap.delete(evicted.id);\n });\n }\n\n createPendingRequest(\n request: Omit<PendingComputeRequest, \"type\" | \"id\">,\n ): string {\n const id = crypto.randomUUID();\n const pendingRequest: PendingComputeRequest = {\n type: \"pending\",\n id,\n ...request,\n };\n this.requests.push(pendingRequest);\n this.requestMap.set(id, pendingRequest);\n this.pendingCount++;\n this.invalidate();\n return id;\n }\n\n fulfillRequest(\n requestId: string,\n responseInfo: {\n computeUsage: number;\n responsePayloadBytes: number;\n responsePayloadHash: number;\n responsePayload: string;\n },\n ): void {\n const pending = this.requestMap.get(requestId);\n\n if (!pending || pending.type !== \"pending\") {\n return;\n }\n\n const fulfilled: ComputeRequest = {\n type: \"fulfilled\",\n id: pending.id,\n requestTimestamp: pending.requestTimestamp,\n requestUrl: pending.requestUrl,\n requestPayload: pending.requestPayload,\n requestPayloadHash: pending.requestPayloadHash,\n responseTimestamp: new Date(),\n ...responseInfo,\n };\n\n this.requestMap.set(requestId, fulfilled);\n this.pendingCount--;\n this.fulfilledCount++;\n this.totalUsage += responseInfo.computeUsage;\n this.totalResponseBytes += responseInfo.responsePayloadBytes;\n this.invalidate();\n }\n\n fulfillWithoutUsage(\n requestId: string,\n responseInfo: {\n responsePayloadBytes: number;\n responsePayloadHash: number;\n responsePayload: string;\n },\n ): void {\n const pending = this.requestMap.get(requestId);\n\n if (!pending || pending.type !== \"pending\") {\n return;\n }\n\n const fulfilled: ComputeRequest = {\n type: \"fulfilled-without-usage\",\n id: pending.id,\n requestTimestamp: pending.requestTimestamp,\n requestUrl: pending.requestUrl,\n requestPayload: pending.requestPayload,\n requestPayloadHash: pending.requestPayloadHash,\n responseTimestamp: new Date(),\n ...responseInfo,\n };\n\n this.requestMap.set(requestId, fulfilled);\n this.pendingCount--;\n this.fulfilledWithoutUsageCount++;\n this.totalResponseBytes += responseInfo.responsePayloadBytes;\n this.invalidate();\n }\n\n failRequest(requestId: string, error: ComputeRequestError): void {\n const pending = this.requestMap.get(requestId);\n\n if (!pending || pending.type !== \"pending\") {\n return;\n }\n\n const failed: ComputeRequest = {\n type: \"failed\",\n id: pending.id,\n requestTimestamp: pending.requestTimestamp,\n requestUrl: pending.requestUrl,\n requestPayload: pending.requestPayload,\n requestPayloadHash: pending.requestPayloadHash,\n failedTimestamp: new Date(),\n error,\n };\n\n this.requestMap.set(requestId, failed);\n this.pendingCount--;\n this.failedCount++;\n this.invalidate();\n }\n\n setIsRecording(isRecording: boolean): void {\n if (\n this.lastRecordingEvent?.type === \"started\" && isRecording\n ) {\n return;\n }\n\n if (isRecording) {\n this.lastRecordingEvent = {\n type: \"started\",\n timestamp: new Date(),\n };\n this.requests.clear();\n this.requestMap.clear();\n this.totalUsage = 0;\n this.totalResponseBytes = 0;\n this.fulfilledCount = 0;\n this.fulfilledWithoutUsageCount = 0;\n this.failedCount = 0;\n this.pendingCount = 0;\n } else if (this.lastRecordingEvent?.type === \"started\") {\n this.lastRecordingEvent = {\n type: \"ended\",\n timestamp: this.lastRecordingEvent.timestamp,\n endTimestamp: new Date(),\n };\n }\n\n this.invalidate();\n }\n\n toggleNetworkPaused(): void {\n this.isNetworkPaused = !this.isNetworkPaused;\n this.invalidate();\n }\n\n getIsNetworkPaused(): boolean {\n return this.isNetworkPaused;\n }\n\n getLastRecordingEvent(): RecordingEvent | undefined {\n return this.lastRecordingEvent;\n }\n\n isRecording(): boolean {\n return this.lastRecordingEvent?.type === \"started\";\n }\n\n reset(): void {\n this.requests.clear();\n this.requestMap.clear();\n this.lastRecordingEvent = undefined;\n this.isNetworkPaused = false;\n this.totalUsage = 0;\n this.totalResponseBytes = 0;\n this.fulfilledCount = 0;\n this.fulfilledWithoutUsageCount = 0;\n this.failedCount = 0;\n this.pendingCount = 0;\n this.invalidate();\n }\n\n getRequests(): ReadonlyArray<ComputeRequest> {\n if (this.cachedRequestsVersion === this.version) {\n return this.cachedRequests;\n }\n\n const requestsFromBuffer = this.requests.toArray();\n const newRequests = requestsFromBuffer.map(req =>\n this.requestMap.get(req.id) ?? req\n );\n\n if (this.arraysReferentiallyEqual(this.cachedRequests, newRequests)) {\n this.cachedRequestsVersion = this.version;\n return this.cachedRequests;\n }\n\n this.cachedRequests = newRequests;\n this.cachedRequestsVersion = this.version;\n return this.cachedRequests;\n }\n\n getSnapshot(): ComputeSnapshot {\n if (this.lastSnapshot) {\n return this.lastSnapshot;\n }\n\n const snapshot: ComputeSnapshot = {\n metrics: this.getMetrics(),\n requests: this.getRequests(),\n isRecording: this.isRecording(),\n isNetworkPaused: this.isNetworkPaused,\n lastRecordingEvent: this.lastRecordingEvent,\n };\n\n this.lastSnapshot = snapshot;\n return snapshot;\n }\n\n getMetrics(): ComputeMetrics {\n if (this.cachedMetricsVersion === this.version && this.cachedMetrics) {\n return this.cachedMetrics;\n }\n\n const oneMinuteAgo = Date.now() - 60000;\n let lastMinuteUsage = 0;\n\n const recentRequests = this.requests.getLast(100);\n for (const req of recentRequests) {\n const current = this.requestMap.get(req.id) ?? req;\n if (\n current.type === \"fulfilled\"\n && current.responseTimestamp.getTime() >= oneMinuteAgo\n ) {\n lastMinuteUsage += current.computeUsage;\n }\n }\n\n const requestCount = this.fulfilledCount + this.fulfilledWithoutUsageCount\n + this.failedCount + this.pendingCount;\n\n const completedWithResponseBytes = this.fulfilledCount\n + this.fulfilledWithoutUsageCount;\n\n const newMetrics: ComputeMetrics = {\n totalUsage: Math.round(this.totalUsage),\n lastMinuteUsage: Math.round(lastMinuteUsage),\n requestCount,\n fulfilledCount: this.fulfilledCount,\n fulfilledWithoutUsageCount: this.fulfilledWithoutUsageCount,\n failedCount: this.failedCount,\n pendingCount: this.pendingCount,\n averageUsagePerRequest: this.fulfilledCount > 0\n ? Math.round(this.totalUsage / this.fulfilledCount)\n : 0,\n averageResponseBytes: completedWithResponseBytes > 0\n ? Math.round(this.totalResponseBytes / completedWithResponseBytes)\n : 0,\n };\n\n if (\n this.cachedMetrics && this.metricsEqual(this.cachedMetrics, newMetrics)\n ) {\n this.cachedMetricsVersion = this.version;\n return this.cachedMetrics;\n }\n\n this.cachedMetrics = newMetrics;\n this.cachedMetricsVersion = this.version;\n return this.cachedMetrics;\n }\n\n dispose(): void {\n this.requests.clear();\n this.requestMap.clear();\n this.clearSubscribers();\n this.lastRecordingEvent = undefined;\n this.isNetworkPaused = false;\n this.totalUsage = 0;\n this.totalResponseBytes = 0;\n this.fulfilledCount = 0;\n this.fulfilledWithoutUsageCount = 0;\n this.failedCount = 0;\n this.pendingCount = 0;\n this.lastSnapshot = null;\n this.cachedRequests = [];\n this.cachedRequestsVersion = -1;\n this.cachedMetrics = null;\n this.cachedMetricsVersion = -1;\n }\n\n private invalidate(): void {\n this.version++;\n this.lastSnapshot = null;\n this.notifySubscribers();\n }\n\n private arraysReferentiallyEqual(\n a: ReadonlyArray<ComputeRequest>,\n b: ReadonlyArray<ComputeRequest>,\n ): boolean {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n private metricsEqual(a: ComputeMetrics, b: ComputeMetrics): boolean {\n return a.totalUsage === b.totalUsage\n && a.lastMinuteUsage === b.lastMinuteUsage\n && a.requestCount === b.requestCount\n && a.fulfilledCount === b.fulfilledCount\n && a.fulfilledWithoutUsageCount === b.fulfilledWithoutUsageCount\n && a.failedCount === b.failedCount\n && a.pendingCount === b.pendingCount\n && a.averageUsagePerRequest === b.averageUsagePerRequest\n && a.averageResponseBytes === b.averageResponseBytes;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ComputeStore.js","names":["CircularBuffer","SubscribableStore","DEFAULT_MAX_REQUESTS","ComputeStore","requestMap","Map","isNetworkPaused","lastSnapshot","version","cachedRequests","cachedRequestsVersion","cachedMetrics","cachedMetricsVersion","totalUsage","totalResponseBytes","fulfilledCount","fulfilledWithoutUsageCount","failedCount","pendingCount","constructor","maxRequests","requests","evicted","delete","id","createPendingRequest","request","crypto","randomUUID","pendingRequest","type","push","set","invalidate","fulfillRequest","requestId","responseInfo","pending","get","fulfilled","requestTimestamp","requestUrl","requestPayload","requestPayloadHash","responseTimestamp","Date","computeUsage","responsePayloadBytes","fulfillWithoutUsage","failRequest","error","failed","failedTimestamp","setIsRecording","isRecording","lastRecordingEvent","timestamp","clear","endTimestamp","toggleNetworkPaused","getIsNetworkPaused","getLastRecordingEvent","reset","undefined","getRequests","requestsFromBuffer","toArray","newRequests","map","req","arraysReferentiallyEqual","getSnapshot","snapshot","metrics","getMetrics","oneMinuteAgo","now","lastMinuteUsage","recentRequests","getLast","current","getTime","requestCount","completedWithResponseBytes","newMetrics","Math","round","averageUsagePerRequest","averageResponseBytes","metricsEqual","dispose","clearSubscribers","notifySubscribers","a","b","length","i"],"sources":["ComputeStore.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 ComputeMetrics,\n ComputeRequest,\n ComputeRequestError,\n ComputeSnapshot,\n PendingComputeRequest,\n RecordingEvent,\n} from \"../types/compute.js\";\nimport { CircularBuffer } from \"../utils/CircularBuffer.js\";\nimport { SubscribableStore } from \"./SubscribableStore.js\";\n\nconst DEFAULT_MAX_REQUESTS = 500;\n\nexport class ComputeStore extends SubscribableStore {\n private readonly requests: CircularBuffer<ComputeRequest>;\n private readonly requestMap = new Map<string, ComputeRequest>();\n private lastRecordingEvent: RecordingEvent | undefined;\n private isNetworkPaused = false;\n private lastSnapshot: ComputeSnapshot | null = null;\n\n private version = 0;\n private cachedRequests: ReadonlyArray<ComputeRequest> = [];\n private cachedRequestsVersion = -1;\n private cachedMetrics: ComputeMetrics | null = null;\n private cachedMetricsVersion = -1;\n\n private totalUsage = 0;\n private totalResponseBytes = 0;\n private fulfilledCount = 0;\n private fulfilledWithoutUsageCount = 0;\n private failedCount = 0;\n private pendingCount = 0;\n\n constructor(maxRequests: number = DEFAULT_MAX_REQUESTS) {\n super();\n this.requests = new CircularBuffer(maxRequests, (evicted) => {\n this.requestMap.delete(evicted.id);\n });\n }\n\n createPendingRequest(\n request: Omit<PendingComputeRequest, \"type\" | \"id\">\n ): string {\n const id = crypto.randomUUID();\n const pendingRequest: PendingComputeRequest = {\n type: \"pending\",\n id,\n ...request,\n };\n this.requests.push(pendingRequest);\n this.requestMap.set(id, pendingRequest);\n this.pendingCount++;\n this.invalidate();\n return id;\n }\n\n fulfillRequest(\n requestId: string,\n responseInfo: {\n computeUsage: number;\n responsePayloadBytes: number;\n responsePayloadHash: number;\n responsePayload: string;\n }\n ): void {\n const pending = this.requestMap.get(requestId);\n\n if (!pending || pending.type !== \"pending\") {\n return;\n }\n\n const fulfilled: ComputeRequest = {\n type: \"fulfilled\",\n id: pending.id,\n requestTimestamp: pending.requestTimestamp,\n requestUrl: pending.requestUrl,\n requestPayload: pending.requestPayload,\n requestPayloadHash: pending.requestPayloadHash,\n responseTimestamp: new Date(),\n ...responseInfo,\n };\n\n this.requestMap.set(requestId, fulfilled);\n this.pendingCount--;\n this.fulfilledCount++;\n this.totalUsage += responseInfo.computeUsage;\n this.totalResponseBytes += responseInfo.responsePayloadBytes;\n this.invalidate();\n }\n\n fulfillWithoutUsage(\n requestId: string,\n responseInfo: {\n responsePayloadBytes: number;\n responsePayloadHash: number;\n responsePayload: string;\n }\n ): void {\n const pending = this.requestMap.get(requestId);\n\n if (!pending || pending.type !== \"pending\") {\n return;\n }\n\n const fulfilled: ComputeRequest = {\n type: \"fulfilled-without-usage\",\n id: pending.id,\n requestTimestamp: pending.requestTimestamp,\n requestUrl: pending.requestUrl,\n requestPayload: pending.requestPayload,\n requestPayloadHash: pending.requestPayloadHash,\n responseTimestamp: new Date(),\n ...responseInfo,\n };\n\n this.requestMap.set(requestId, fulfilled);\n this.pendingCount--;\n this.fulfilledWithoutUsageCount++;\n this.totalResponseBytes += responseInfo.responsePayloadBytes;\n this.invalidate();\n }\n\n failRequest(requestId: string, error: ComputeRequestError): void {\n const pending = this.requestMap.get(requestId);\n\n if (!pending || pending.type !== \"pending\") {\n return;\n }\n\n const failed: ComputeRequest = {\n type: \"failed\",\n id: pending.id,\n requestTimestamp: pending.requestTimestamp,\n requestUrl: pending.requestUrl,\n requestPayload: pending.requestPayload,\n requestPayloadHash: pending.requestPayloadHash,\n failedTimestamp: new Date(),\n error,\n };\n\n this.requestMap.set(requestId, failed);\n this.pendingCount--;\n this.failedCount++;\n this.invalidate();\n }\n\n setIsRecording(isRecording: boolean): void {\n if (this.lastRecordingEvent?.type === \"started\" && isRecording) {\n return;\n }\n\n if (isRecording) {\n this.lastRecordingEvent = {\n type: \"started\",\n timestamp: new Date(),\n };\n this.requests.clear();\n this.requestMap.clear();\n this.totalUsage = 0;\n this.totalResponseBytes = 0;\n this.fulfilledCount = 0;\n this.fulfilledWithoutUsageCount = 0;\n this.failedCount = 0;\n this.pendingCount = 0;\n } else if (this.lastRecordingEvent?.type === \"started\") {\n this.lastRecordingEvent = {\n type: \"ended\",\n timestamp: this.lastRecordingEvent.timestamp,\n endTimestamp: new Date(),\n };\n }\n\n this.invalidate();\n }\n\n toggleNetworkPaused(): void {\n this.isNetworkPaused = !this.isNetworkPaused;\n this.invalidate();\n }\n\n getIsNetworkPaused(): boolean {\n return this.isNetworkPaused;\n }\n\n getLastRecordingEvent(): RecordingEvent | undefined {\n return this.lastRecordingEvent;\n }\n\n isRecording(): boolean {\n return this.lastRecordingEvent?.type === \"started\";\n }\n\n reset(): void {\n this.requests.clear();\n this.requestMap.clear();\n this.lastRecordingEvent = undefined;\n this.isNetworkPaused = false;\n this.totalUsage = 0;\n this.totalResponseBytes = 0;\n this.fulfilledCount = 0;\n this.fulfilledWithoutUsageCount = 0;\n this.failedCount = 0;\n this.pendingCount = 0;\n this.invalidate();\n }\n\n getRequests(): ReadonlyArray<ComputeRequest> {\n if (this.cachedRequestsVersion === this.version) {\n return this.cachedRequests;\n }\n\n const requestsFromBuffer = this.requests.toArray();\n const newRequests = requestsFromBuffer.map(\n (req) => this.requestMap.get(req.id) ?? req\n );\n\n if (this.arraysReferentiallyEqual(this.cachedRequests, newRequests)) {\n this.cachedRequestsVersion = this.version;\n return this.cachedRequests;\n }\n\n this.cachedRequests = newRequests;\n this.cachedRequestsVersion = this.version;\n return this.cachedRequests;\n }\n\n getSnapshot(): ComputeSnapshot {\n if (this.lastSnapshot) {\n return this.lastSnapshot;\n }\n\n const snapshot: ComputeSnapshot = {\n metrics: this.getMetrics(),\n requests: this.getRequests(),\n isRecording: this.isRecording(),\n isNetworkPaused: this.isNetworkPaused,\n lastRecordingEvent: this.lastRecordingEvent,\n };\n\n this.lastSnapshot = snapshot;\n return snapshot;\n }\n\n getMetrics(): ComputeMetrics {\n if (this.cachedMetricsVersion === this.version && this.cachedMetrics) {\n return this.cachedMetrics;\n }\n\n const oneMinuteAgo = Date.now() - 60000;\n let lastMinuteUsage = 0;\n\n const recentRequests = this.requests.getLast(100);\n for (const req of recentRequests) {\n const current = this.requestMap.get(req.id) ?? req;\n if (\n current.type === \"fulfilled\" &&\n current.responseTimestamp.getTime() >= oneMinuteAgo\n ) {\n lastMinuteUsage += current.computeUsage;\n }\n }\n\n const requestCount =\n this.fulfilledCount +\n this.fulfilledWithoutUsageCount +\n this.failedCount +\n this.pendingCount;\n\n const completedWithResponseBytes =\n this.fulfilledCount + this.fulfilledWithoutUsageCount;\n\n const newMetrics: ComputeMetrics = {\n totalUsage: Math.round(this.totalUsage),\n lastMinuteUsage: Math.round(lastMinuteUsage),\n requestCount,\n fulfilledCount: this.fulfilledCount,\n fulfilledWithoutUsageCount: this.fulfilledWithoutUsageCount,\n failedCount: this.failedCount,\n pendingCount: this.pendingCount,\n averageUsagePerRequest:\n this.fulfilledCount > 0\n ? Math.round(this.totalUsage / this.fulfilledCount)\n : 0,\n averageResponseBytes:\n completedWithResponseBytes > 0\n ? Math.round(this.totalResponseBytes / completedWithResponseBytes)\n : 0,\n };\n\n if (\n this.cachedMetrics &&\n this.metricsEqual(this.cachedMetrics, newMetrics)\n ) {\n this.cachedMetricsVersion = this.version;\n return this.cachedMetrics;\n }\n\n this.cachedMetrics = newMetrics;\n this.cachedMetricsVersion = this.version;\n return this.cachedMetrics;\n }\n\n dispose(): void {\n this.requests.clear();\n this.requestMap.clear();\n this.clearSubscribers();\n this.lastRecordingEvent = undefined;\n this.isNetworkPaused = false;\n this.totalUsage = 0;\n this.totalResponseBytes = 0;\n this.fulfilledCount = 0;\n this.fulfilledWithoutUsageCount = 0;\n this.failedCount = 0;\n this.pendingCount = 0;\n this.lastSnapshot = null;\n this.cachedRequests = [];\n this.cachedRequestsVersion = -1;\n this.cachedMetrics = null;\n this.cachedMetricsVersion = -1;\n }\n\n private invalidate(): void {\n this.version++;\n this.lastSnapshot = null;\n this.notifySubscribers();\n }\n\n private arraysReferentiallyEqual(\n a: ReadonlyArray<ComputeRequest>,\n b: ReadonlyArray<ComputeRequest>\n ): boolean {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n private metricsEqual(a: ComputeMetrics, b: ComputeMetrics): boolean {\n return (\n a.totalUsage === b.totalUsage &&\n a.lastMinuteUsage === b.lastMinuteUsage &&\n a.requestCount === b.requestCount &&\n a.fulfilledCount === b.fulfilledCount &&\n a.fulfilledWithoutUsageCount === b.fulfilledWithoutUsageCount &&\n a.failedCount === b.failedCount &&\n a.pendingCount === b.pendingCount &&\n a.averageUsagePerRequest === b.averageUsagePerRequest &&\n a.averageResponseBytes === b.averageResponseBytes\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -101,7 +101,7 @@ function serializeArg(arg) {
|
|
|
101
101
|
const seen = new WeakSet();
|
|
102
102
|
const result = serializeValue(arg, 0, seen);
|
|
103
103
|
if (result.length > MAX_STRING_SIZE) {
|
|
104
|
-
return result.slice(0, MAX_STRING_SIZE)
|
|
104
|
+
return `${result.slice(0, MAX_STRING_SIZE)}...truncated`;
|
|
105
105
|
}
|
|
106
106
|
return result;
|
|
107
107
|
}
|
|
@@ -140,7 +140,7 @@ function capEntrySize(args) {
|
|
|
140
140
|
if (totalSize <= MAX_TOTAL_SIZE) {
|
|
141
141
|
return args;
|
|
142
142
|
}
|
|
143
|
-
const result = args
|
|
143
|
+
const result = [...args];
|
|
144
144
|
while (totalSize > MAX_TOTAL_SIZE) {
|
|
145
145
|
let longestIndex = 0;
|
|
146
146
|
let longestLength = 0;
|