@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":"EventTimeline.js","names":["CircularBuffer","EventTimeline","eventCounts","Map","subscribers","Set","constructor","maxEvents","events","record","event","push","set","type","get","notifySubscribers","findEventsInWindow","timestamp","windowMs","eventType","allEvents","getEventsByType","toArray","filter","e","Math","abs","findEventsBefore","findRenderTrigger","renderEvent","recentEmissions","length","reduce","latest","current","buildActionCausality","actionId","start","find","complete","Error","actionEvents","emissions","optimisticUpdates","isOptimistic","refetches","renders","duration","subscribe","callback","add","delete","getAllEvents","getEventCounts","clear","getSize","console","error","findLast","predicate","arr","getLast","i","getLastEmission","subscriptionId"],"sources":["EventTimeline.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CircularBuffer } from \"./CircularBuffer.js\";\n\n/**\n * Union type for all monitoring events.\n * Each event type has a timestamp for temporal correlation.\n */\nexport type MonitorEvent =\n | RenderEvent\n | EmissionEvent\n | ActionStartEvent\n | ActionCompleteEvent\n | PropertyAccessEvent\n | LinkTraversalEvent\n | ObjectModifiedEvent\n | MockHitEvent\n | OsdkPauseBlockEvent;\n\nexport interface RenderEvent {\n type: \"RENDER\";\n componentId: string;\n componentName: string;\n duration: number;\n timestamp: number;\n renderCycle?: number;\n}\n\nexport interface EmissionEvent {\n type: \"EMISSION\";\n subscriptionId: string;\n objectKey?: string;\n timestamp: number;\n isOptimistic?: boolean;\n}\n\nexport interface ActionStartEvent {\n type: \"ACTION_START\";\n actionId: string;\n actionName: string;\n timestamp: number;\n componentId?: string;\n}\n\nexport interface ActionCompleteEvent {\n type: \"ACTION_COMPLETE\";\n actionId: string;\n timestamp: number;\n success: boolean;\n error?: string;\n}\n\nexport interface PropertyAccessEvent {\n type: \"PROPERTY_ACCESS\";\n componentId: string;\n objectKey: string;\n property: string;\n timestamp: number;\n renderCycle?: number;\n}\n\nexport interface LinkTraversalEvent {\n type: \"LINK_TRAVERSAL\";\n sourceKey: string;\n linkName: string;\n timestamp: number;\n componentId?: string;\n}\n\nexport interface ObjectModifiedEvent {\n type: \"OBJECT_MODIFIED\";\n actionId: string;\n objectType: string;\n primaryKey: string;\n modifiedBy: \"optimistic\" | \"server\";\n timestamp: number;\n}\n\nexport interface MockHitEvent {\n type: \"MOCK_HIT\";\n subscriptionId: string;\n timestamp: number;\n mockId?: string;\n}\n\nexport interface OsdkPauseBlockEvent {\n type: \"OSDK_PAUSE_BLOCK\";\n pathname: string;\n timestamp: number;\n}\n\nexport interface ActionCausality {\n start: ActionStartEvent;\n complete: ActionCompleteEvent;\n optimisticUpdates: EmissionEvent[];\n refetches: EmissionEvent[];\n renders: RenderEvent[];\n duration: number;\n}\n\nexport class EventTimeline {\n private events: CircularBuffer<MonitorEvent>;\n private eventCounts = new Map<MonitorEvent[\"type\"], number>();\n private subscribers = new Set<(event: MonitorEvent) => void>();\n\n constructor(maxEvents: number = 10000) {\n this.events = new CircularBuffer(maxEvents);\n }\n\n record(event: MonitorEvent): void {\n this.events.push(event);\n\n // Track counts by type\n this.eventCounts.set(\n event.type,\n (this.eventCounts.get(event.type) ?? 0) + 1,\n );\n\n // Notify subscribers\n this.notifySubscribers(event);\n }\n\n findEventsInWindow(\n timestamp: number,\n windowMs: number,\n eventType?: MonitorEvent[\"type\"],\n ): MonitorEvent[] {\n const allEvents = eventType\n ? this.getEventsByType(eventType)\n : this.events.toArray();\n\n return allEvents.filter((e) =>\n Math.abs(e.timestamp - timestamp) <= windowMs\n );\n }\n\n findEventsBefore(\n timestamp: number,\n windowMs: number,\n eventType?: MonitorEvent[\"type\"],\n ): MonitorEvent[] {\n const allEvents = eventType\n ? this.getEventsByType(eventType)\n : this.events.toArray();\n\n return allEvents.filter(\n (e) => e.timestamp <= timestamp && timestamp - e.timestamp <= windowMs,\n );\n }\n\n findRenderTrigger(renderEvent: RenderEvent): EmissionEvent | null {\n const CORRELATION_WINDOW = 16;\n\n const recentEmissions = this.getEventsByType(\"EMISSION\")\n .filter(e =>\n e.timestamp <= renderEvent.timestamp\n && renderEvent.timestamp - e.timestamp <= CORRELATION_WINDOW\n );\n\n if (recentEmissions.length === 0) {\n return null;\n }\n\n // Return most recent emission (closest to render)\n return recentEmissions.reduce((latest, current) =>\n current.timestamp > latest.timestamp ? current : latest\n );\n }\n\n buildActionCausality(actionId: string): ActionCausality {\n const allEvents = this.events.toArray();\n\n const start = allEvents.find(\n (e): e is ActionStartEvent =>\n e.type === \"ACTION_START\" && e.actionId === actionId,\n );\n\n const complete = allEvents.find(\n (e): e is ActionCompleteEvent =>\n e.type === \"ACTION_COMPLETE\" && e.actionId === actionId,\n );\n\n if (!start) {\n throw new Error(`Action start event not found for action ${actionId}`);\n }\n\n if (!complete) {\n throw new Error(`Action complete event not found for action ${actionId}`);\n }\n\n // Find all events between start and complete\n const actionEvents = allEvents.filter(\n (e) =>\n e.timestamp >= start.timestamp && e.timestamp <= complete.timestamp,\n );\n\n // Separate optimistic updates from refetches\n const emissions = actionEvents.filter(\n (e): e is EmissionEvent => e.type === \"EMISSION\",\n );\n const optimisticUpdates = emissions.filter((e) => e.isOptimistic === true);\n const refetches = emissions.filter((e) => !e.isOptimistic);\n\n // Find renders triggered during the action\n const renders = actionEvents.filter(\n (e): e is RenderEvent => e.type === \"RENDER\",\n );\n\n return {\n start,\n complete,\n optimisticUpdates,\n refetches,\n renders,\n duration: complete.timestamp - start.timestamp,\n };\n }\n\n subscribe(callback: (event: MonitorEvent) => void): () => void {\n this.subscribers.add(callback);\n return () => this.subscribers.delete(callback);\n }\n\n getEventsByType<T extends MonitorEvent[\"type\"]>(\n type: T,\n ): Extract<MonitorEvent, { type: T }>[] {\n return this.events.toArray().filter(\n (e): e is Extract<MonitorEvent, { type: T }> => e.type === type,\n );\n }\n\n getAllEvents(): MonitorEvent[] {\n return this.events.toArray();\n }\n\n getEventCounts(): Map<MonitorEvent[\"type\"], number> {\n return new Map(this.eventCounts);\n }\n\n clear(): void {\n this.events.clear();\n this.eventCounts.clear();\n }\n\n getSize(): number {\n return this.events.getSize();\n }\n\n private notifySubscribers(event: MonitorEvent): void {\n for (const callback of this.subscribers) {\n try {\n callback(event);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"[EventTimeline] Subscriber error:\", e);\n }\n }\n }\n\n findLast<T extends MonitorEvent[\"type\"]>(\n type: T,\n predicate: (event: Extract<MonitorEvent, { type: T }>) => boolean,\n ): Extract<MonitorEvent, { type: T }> | null {\n const arr = this.events.getLast(this.events.getSize());\n for (let i = arr.length - 1; i >= 0; i--) {\n const event = arr[i];\n if (\n event.type === type\n && predicate(event as Extract<MonitorEvent, { type: T }>)\n ) {\n return event as Extract<MonitorEvent, { type: T }>;\n }\n }\n return null;\n }\n\n getLastEmission(subscriptionId: string): EmissionEvent | null {\n return this.findLast(\n \"EMISSION\",\n (e) => e.subscriptionId === subscriptionId,\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"EventTimeline.js","names":["CircularBuffer","EventTimeline","eventCounts","Map","subscribers","Set","constructor","maxEvents","events","record","event","push","set","type","get","notifySubscribers","findEventsInWindow","timestamp","windowMs","eventType","allEvents","getEventsByType","toArray","filter","e","Math","abs","findEventsBefore","findRenderTrigger","renderEvent","recentEmissions","length","reduce","latest","current","buildActionCausality","actionId","start","find","complete","Error","actionEvents","emissions","optimisticUpdates","isOptimistic","refetches","renders","duration","subscribe","callback","add","delete","getAllEvents","getEventCounts","clear","getSize","console","error","findLast","predicate","arr","getLast","i","getLastEmission","subscriptionId"],"sources":["EventTimeline.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CircularBuffer } from \"./CircularBuffer.js\";\n\n/**\n * Union type for all monitoring events.\n * Each event type has a timestamp for temporal correlation.\n */\nexport type MonitorEvent =\n | RenderEvent\n | EmissionEvent\n | ActionStartEvent\n | ActionCompleteEvent\n | PropertyAccessEvent\n | LinkTraversalEvent\n | ObjectModifiedEvent\n | MockHitEvent\n | OsdkPauseBlockEvent;\n\nexport interface RenderEvent {\n type: \"RENDER\";\n componentId: string;\n componentName: string;\n duration: number;\n timestamp: number;\n renderCycle?: number;\n}\n\nexport interface EmissionEvent {\n type: \"EMISSION\";\n subscriptionId: string;\n objectKey?: string;\n timestamp: number;\n isOptimistic?: boolean;\n}\n\nexport interface ActionStartEvent {\n type: \"ACTION_START\";\n actionId: string;\n actionName: string;\n timestamp: number;\n componentId?: string;\n}\n\nexport interface ActionCompleteEvent {\n type: \"ACTION_COMPLETE\";\n actionId: string;\n timestamp: number;\n success: boolean;\n error?: string;\n}\n\nexport interface PropertyAccessEvent {\n type: \"PROPERTY_ACCESS\";\n componentId: string;\n objectKey: string;\n property: string;\n timestamp: number;\n renderCycle?: number;\n}\n\nexport interface LinkTraversalEvent {\n type: \"LINK_TRAVERSAL\";\n sourceKey: string;\n linkName: string;\n timestamp: number;\n componentId?: string;\n}\n\nexport interface ObjectModifiedEvent {\n type: \"OBJECT_MODIFIED\";\n actionId: string;\n objectType: string;\n primaryKey: string;\n modifiedBy: \"optimistic\" | \"server\";\n timestamp: number;\n}\n\nexport interface MockHitEvent {\n type: \"MOCK_HIT\";\n subscriptionId: string;\n timestamp: number;\n mockId?: string;\n}\n\nexport interface OsdkPauseBlockEvent {\n type: \"OSDK_PAUSE_BLOCK\";\n pathname: string;\n timestamp: number;\n}\n\nexport interface ActionCausality {\n start: ActionStartEvent;\n complete: ActionCompleteEvent;\n optimisticUpdates: EmissionEvent[];\n refetches: EmissionEvent[];\n renders: RenderEvent[];\n duration: number;\n}\n\nexport class EventTimeline {\n private events: CircularBuffer<MonitorEvent>;\n private eventCounts = new Map<MonitorEvent[\"type\"], number>();\n private subscribers = new Set<(event: MonitorEvent) => void>();\n\n constructor(maxEvents: number = 10000) {\n this.events = new CircularBuffer(maxEvents);\n }\n\n record(event: MonitorEvent): void {\n this.events.push(event);\n\n // Track counts by type\n this.eventCounts.set(\n event.type,\n (this.eventCounts.get(event.type) ?? 0) + 1\n );\n\n // Notify subscribers\n this.notifySubscribers(event);\n }\n\n findEventsInWindow(\n timestamp: number,\n windowMs: number,\n eventType?: MonitorEvent[\"type\"]\n ): MonitorEvent[] {\n const allEvents = eventType\n ? this.getEventsByType(eventType)\n : this.events.toArray();\n\n return allEvents.filter(\n (e) => Math.abs(e.timestamp - timestamp) <= windowMs\n );\n }\n\n findEventsBefore(\n timestamp: number,\n windowMs: number,\n eventType?: MonitorEvent[\"type\"]\n ): MonitorEvent[] {\n const allEvents = eventType\n ? this.getEventsByType(eventType)\n : this.events.toArray();\n\n return allEvents.filter(\n (e) => e.timestamp <= timestamp && timestamp - e.timestamp <= windowMs\n );\n }\n\n findRenderTrigger(renderEvent: RenderEvent): EmissionEvent | null {\n const CORRELATION_WINDOW = 16;\n\n const recentEmissions = this.getEventsByType(\"EMISSION\").filter(\n (e) =>\n e.timestamp <= renderEvent.timestamp &&\n renderEvent.timestamp - e.timestamp <= CORRELATION_WINDOW\n );\n\n if (recentEmissions.length === 0) {\n return null;\n }\n\n // Return most recent emission (closest to render)\n return recentEmissions.reduce((latest, current) =>\n current.timestamp > latest.timestamp ? current : latest\n );\n }\n\n buildActionCausality(actionId: string): ActionCausality {\n const allEvents = this.events.toArray();\n\n const start = allEvents.find(\n (e): e is ActionStartEvent =>\n e.type === \"ACTION_START\" && e.actionId === actionId\n );\n\n const complete = allEvents.find(\n (e): e is ActionCompleteEvent =>\n e.type === \"ACTION_COMPLETE\" && e.actionId === actionId\n );\n\n if (!start) {\n throw new Error(`Action start event not found for action ${actionId}`);\n }\n\n if (!complete) {\n throw new Error(`Action complete event not found for action ${actionId}`);\n }\n\n // Find all events between start and complete\n const actionEvents = allEvents.filter(\n (e) => e.timestamp >= start.timestamp && e.timestamp <= complete.timestamp\n );\n\n // Separate optimistic updates from refetches\n const emissions = actionEvents.filter(\n (e): e is EmissionEvent => e.type === \"EMISSION\"\n );\n const optimisticUpdates = emissions.filter((e) => e.isOptimistic === true);\n const refetches = emissions.filter((e) => !e.isOptimistic);\n\n // Find renders triggered during the action\n const renders = actionEvents.filter(\n (e): e is RenderEvent => e.type === \"RENDER\"\n );\n\n return {\n start,\n complete,\n optimisticUpdates,\n refetches,\n renders,\n duration: complete.timestamp - start.timestamp,\n };\n }\n\n subscribe(callback: (event: MonitorEvent) => void): () => void {\n this.subscribers.add(callback);\n return () => this.subscribers.delete(callback);\n }\n\n getEventsByType<T extends MonitorEvent[\"type\"]>(\n type: T\n ): Extract<MonitorEvent, { type: T }>[] {\n return this.events\n .toArray()\n .filter((e): e is Extract<MonitorEvent, { type: T }> => e.type === type);\n }\n\n getAllEvents(): MonitorEvent[] {\n return this.events.toArray();\n }\n\n getEventCounts(): Map<MonitorEvent[\"type\"], number> {\n return new Map(this.eventCounts);\n }\n\n clear(): void {\n this.events.clear();\n this.eventCounts.clear();\n }\n\n getSize(): number {\n return this.events.getSize();\n }\n\n private notifySubscribers(event: MonitorEvent): void {\n for (const callback of this.subscribers) {\n try {\n callback(event);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"[EventTimeline] Subscriber error:\", e);\n }\n }\n }\n\n findLast<T extends MonitorEvent[\"type\"]>(\n type: T,\n predicate: (event: Extract<MonitorEvent, { type: T }>) => boolean\n ): Extract<MonitorEvent, { type: T }> | null {\n const arr = this.events.getLast(this.events.getSize());\n for (let i = arr.length - 1; i >= 0; i--) {\n const event = arr[i];\n if (\n event.type === type &&\n predicate(event as Extract<MonitorEvent, { type: T }>)\n ) {\n return event as Extract<MonitorEvent, { type: T }>;\n }\n }\n return null;\n }\n\n getLastEmission(subscriptionId: string): EmissionEvent | null {\n return this.findLast(\n \"EMISSION\",\n (e) => e.subscriptionId === subscriptionId\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -77,7 +77,7 @@ export class LinkTraversalTracker {
|
|
|
77
77
|
}
|
|
78
78
|
counts.set(key, existing);
|
|
79
79
|
}
|
|
80
|
-
return
|
|
80
|
+
return [...counts.entries()].filter(([_, data]) => data.count > 1).map(([linkKey, data]) => ({
|
|
81
81
|
linkKey,
|
|
82
82
|
...data
|
|
83
83
|
})).sort((a, b) => b.count - a.count);
|
|
@@ -108,7 +108,7 @@ export class LinkTraversalTracker {
|
|
|
108
108
|
totalTraversals: this.traversals.length,
|
|
109
109
|
uniqueLinks: linkCounts.size,
|
|
110
110
|
uniqueComponents: componentCounts.size,
|
|
111
|
-
mostUsedLinks:
|
|
111
|
+
mostUsedLinks: [...linkCounts.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5),
|
|
112
112
|
linkedObjectsTracked: this.linkedObjects.size
|
|
113
113
|
};
|
|
114
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkTraversalTracker.js","names":["LinkTraversalTracker","traversals","linkedObjects","Map","maxTraversals","eventTimeline","recordTraversal","event","push","length","overflow","splice","record","type","sourceKey","sourceObjectType","sourceObjectKey","linkName","timestamp","componentId","setEventTimeline","timeline","recordLinkedObjects","set","subscriptionId","getTraversalChain","chain","visited","Set","buildChain","currentKey","has","add","traversal","find","t","linkedObjs","get","obj","objects","objectType","primaryKey","findRedundantTraversals","windowMs","now","Date","recent","filter","counts","key","existing","count","componentIds","Array","from","entries","_","data","map","linkKey","sort","a","b","getRecentTraversals","limit","slice","getTraversalsByComponent","getTraversalsByLink","clear","getStats","linkCounts","componentCounts","totalTraversals","uniqueLinks","size","uniqueComponents","mostUsedLinks","linkedObjectsTracked"],"sources":["LinkTraversalTracker.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { EventTimeline } from \"./EventTimeline.js\";\n\nexport interface LinkTraversalEvent {\n sourceObjectType: string;\n sourceObjectKey: string;\n linkName: string;\n timestamp: number;\n componentId?: string;\n subscriptionId: string;\n}\n\nexport interface LinkedObjectsEvent {\n subscriptionId: string;\n linkName: string;\n objects: Array<{ objectType: string; primaryKey: string }>;\n}\n\nexport class LinkTraversalTracker {\n private traversals: LinkTraversalEvent[] = [];\n private linkedObjects = new Map<string, LinkedObjectsEvent>();\n private maxTraversals = 1000;\n private eventTimeline: EventTimeline | null = null;\n\n recordTraversal(event: LinkTraversalEvent): void {\n this.traversals.push(event);\n\n if (this.traversals.length > this.maxTraversals) {\n const overflow = this.traversals.length - this.maxTraversals;\n this.traversals.splice(0, overflow);\n }\n\n if (this.eventTimeline) {\n this.eventTimeline.record({\n type: \"LINK_TRAVERSAL\",\n sourceKey: `${event.sourceObjectType}:${event.sourceObjectKey}`,\n linkName: event.linkName,\n timestamp: event.timestamp,\n componentId: event.componentId,\n });\n }\n }\n\n setEventTimeline(timeline: EventTimeline | null): void {\n this.eventTimeline = timeline;\n }\n\n recordLinkedObjects(event: LinkedObjectsEvent): void {\n this.linkedObjects.set(event.subscriptionId, event);\n }\n\n getTraversalChain(sourceObjectKey: string): LinkTraversalEvent[] {\n const chain: LinkTraversalEvent[] = [];\n const visited = new Set<string>();\n\n const buildChain = (currentKey: string) => {\n if (visited.has(currentKey)) return;\n visited.add(currentKey);\n\n const traversal = this.traversals.find(\n (t) => `${t.sourceObjectType}:${t.sourceObjectKey}` === currentKey,\n );\n\n if (traversal) {\n chain.push(traversal);\n\n const linkedObjs = this.linkedObjects.get(traversal.subscriptionId);\n if (linkedObjs) {\n for (const obj of linkedObjs.objects) {\n buildChain(`${obj.objectType}:${obj.primaryKey}`);\n }\n }\n }\n };\n\n buildChain(sourceObjectKey);\n return chain;\n }\n\n findRedundantTraversals(\n windowMs: number = 5000,\n ): Array<{\n linkKey: string;\n count: number;\n componentIds: Set<string>;\n }> {\n const now = Date.now();\n const recent = this.traversals.filter((t) => now - t.timestamp < windowMs);\n\n const counts = new Map<\n string,\n { count: number; componentIds: Set<string> }\n >();\n\n for (const traversal of recent) {\n const key = `${traversal.sourceObjectKey}:${traversal.linkName}`;\n const existing = counts.get(key) || {\n count: 0,\n componentIds: new Set(),\n };\n\n existing.count++;\n if (traversal.componentId) {\n existing.componentIds.add(traversal.componentId);\n }\n\n counts.set(key, existing);\n }\n\n return Array.from(counts.entries())\n .filter(([_, data]) => data.count > 1)\n .map(([linkKey, data]) => ({ linkKey, ...data }))\n .sort((a, b) => b.count - a.count);\n }\n\n getRecentTraversals(limit: number = 50): LinkTraversalEvent[] {\n return this.traversals.slice(-limit);\n }\n\n getTraversalsByComponent(componentId: string): LinkTraversalEvent[] {\n return this.traversals.filter((t) => t.componentId === componentId);\n }\n\n getTraversalsByLink(linkName: string): LinkTraversalEvent[] {\n return this.traversals.filter((t) => t.linkName === linkName);\n }\n\n clear(): void {\n this.traversals = [];\n this.linkedObjects.clear();\n }\n\n getStats(): {\n totalTraversals: number;\n uniqueLinks: number;\n uniqueComponents: number;\n mostUsedLinks: Array<[string, number]>;\n linkedObjectsTracked: number;\n } {\n const linkCounts = new Map<string, number>();\n const componentCounts = new Map<string, number>();\n\n for (const traversal of this.traversals) {\n linkCounts.set(\n traversal.linkName,\n (linkCounts.get(traversal.linkName) || 0) + 1,\n );\n\n if (traversal.componentId) {\n componentCounts.set(\n traversal.componentId,\n (componentCounts.get(traversal.componentId) || 0) + 1,\n );\n }\n }\n\n return {\n totalTraversals: this.traversals.length,\n uniqueLinks: linkCounts.size,\n uniqueComponents: componentCounts.size,\n mostUsedLinks: Array.from(linkCounts.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5),\n linkedObjectsTracked: this.linkedObjects.size,\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"LinkTraversalTracker.js","names":["LinkTraversalTracker","traversals","linkedObjects","Map","maxTraversals","eventTimeline","recordTraversal","event","push","length","overflow","splice","record","type","sourceKey","sourceObjectType","sourceObjectKey","linkName","timestamp","componentId","setEventTimeline","timeline","recordLinkedObjects","set","subscriptionId","getTraversalChain","chain","visited","Set","buildChain","currentKey","has","add","traversal","find","t","linkedObjs","get","obj","objects","objectType","primaryKey","findRedundantTraversals","windowMs","now","Date","recent","filter","counts","key","existing","count","componentIds","entries","_","data","map","linkKey","sort","a","b","getRecentTraversals","limit","slice","getTraversalsByComponent","getTraversalsByLink","clear","getStats","linkCounts","componentCounts","totalTraversals","uniqueLinks","size","uniqueComponents","mostUsedLinks","linkedObjectsTracked"],"sources":["LinkTraversalTracker.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { EventTimeline } from \"./EventTimeline.js\";\n\nexport interface LinkTraversalEvent {\n sourceObjectType: string;\n sourceObjectKey: string;\n linkName: string;\n timestamp: number;\n componentId?: string;\n subscriptionId: string;\n}\n\nexport interface LinkedObjectsEvent {\n subscriptionId: string;\n linkName: string;\n objects: Array<{ objectType: string; primaryKey: string }>;\n}\n\nexport class LinkTraversalTracker {\n private traversals: LinkTraversalEvent[] = [];\n private linkedObjects = new Map<string, LinkedObjectsEvent>();\n private maxTraversals = 1000;\n private eventTimeline: EventTimeline | null = null;\n\n recordTraversal(event: LinkTraversalEvent): void {\n this.traversals.push(event);\n\n if (this.traversals.length > this.maxTraversals) {\n const overflow = this.traversals.length - this.maxTraversals;\n this.traversals.splice(0, overflow);\n }\n\n if (this.eventTimeline) {\n this.eventTimeline.record({\n type: \"LINK_TRAVERSAL\",\n sourceKey: `${event.sourceObjectType}:${event.sourceObjectKey}`,\n linkName: event.linkName,\n timestamp: event.timestamp,\n componentId: event.componentId,\n });\n }\n }\n\n setEventTimeline(timeline: EventTimeline | null): void {\n this.eventTimeline = timeline;\n }\n\n recordLinkedObjects(event: LinkedObjectsEvent): void {\n this.linkedObjects.set(event.subscriptionId, event);\n }\n\n getTraversalChain(sourceObjectKey: string): LinkTraversalEvent[] {\n const chain: LinkTraversalEvent[] = [];\n const visited = new Set<string>();\n\n const buildChain = (currentKey: string) => {\n if (visited.has(currentKey)) return;\n visited.add(currentKey);\n\n const traversal = this.traversals.find(\n (t) => `${t.sourceObjectType}:${t.sourceObjectKey}` === currentKey\n );\n\n if (traversal) {\n chain.push(traversal);\n\n const linkedObjs = this.linkedObjects.get(traversal.subscriptionId);\n if (linkedObjs) {\n for (const obj of linkedObjs.objects) {\n buildChain(`${obj.objectType}:${obj.primaryKey}`);\n }\n }\n }\n };\n\n buildChain(sourceObjectKey);\n return chain;\n }\n\n findRedundantTraversals(windowMs: number = 5000): Array<{\n linkKey: string;\n count: number;\n componentIds: Set<string>;\n }> {\n const now = Date.now();\n const recent = this.traversals.filter((t) => now - t.timestamp < windowMs);\n\n const counts = new Map<\n string,\n { count: number; componentIds: Set<string> }\n >();\n\n for (const traversal of recent) {\n const key = `${traversal.sourceObjectKey}:${traversal.linkName}`;\n const existing = counts.get(key) || {\n count: 0,\n componentIds: new Set(),\n };\n\n existing.count++;\n if (traversal.componentId) {\n existing.componentIds.add(traversal.componentId);\n }\n\n counts.set(key, existing);\n }\n\n return [...counts.entries()]\n .filter(([_, data]) => data.count > 1)\n .map(([linkKey, data]) => ({ linkKey, ...data }))\n .sort((a, b) => b.count - a.count);\n }\n\n getRecentTraversals(limit: number = 50): LinkTraversalEvent[] {\n return this.traversals.slice(-limit);\n }\n\n getTraversalsByComponent(componentId: string): LinkTraversalEvent[] {\n return this.traversals.filter((t) => t.componentId === componentId);\n }\n\n getTraversalsByLink(linkName: string): LinkTraversalEvent[] {\n return this.traversals.filter((t) => t.linkName === linkName);\n }\n\n clear(): void {\n this.traversals = [];\n this.linkedObjects.clear();\n }\n\n getStats(): {\n totalTraversals: number;\n uniqueLinks: number;\n uniqueComponents: number;\n mostUsedLinks: Array<[string, number]>;\n linkedObjectsTracked: number;\n } {\n const linkCounts = new Map<string, number>();\n const componentCounts = new Map<string, number>();\n\n for (const traversal of this.traversals) {\n linkCounts.set(\n traversal.linkName,\n (linkCounts.get(traversal.linkName) || 0) + 1\n );\n\n if (traversal.componentId) {\n componentCounts.set(\n traversal.componentId,\n (componentCounts.get(traversal.componentId) || 0) + 1\n );\n }\n }\n\n return {\n totalTraversals: this.traversals.length,\n uniqueLinks: linkCounts.size,\n uniqueComponents: componentCounts.size,\n mostUsedLinks: [...linkCounts.entries()]\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5),\n linkedObjectsTracked: this.linkedObjects.size,\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -60,7 +60,7 @@ export class MockDataGenerator {
|
|
|
60
60
|
case "query":
|
|
61
61
|
return this.generateQueryMockData(primitive.data);
|
|
62
62
|
case "aggregation":
|
|
63
|
-
return
|
|
63
|
+
return '{\n "data": {},\n "status": "SUCCESS"\n}';
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
static generateFunctionCode(primitive) {
|
|
@@ -76,7 +76,7 @@ export class MockDataGenerator {
|
|
|
76
76
|
case "query":
|
|
77
77
|
return this.generateQueryFunctionCode(primitive.data);
|
|
78
78
|
case "aggregation":
|
|
79
|
-
return
|
|
79
|
+
return 'function generateMock(params) {\n return {\n data: {},\n status: "SUCCESS"\n };\n}';
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
static generateActionMockData(actionData) {
|
|
@@ -92,7 +92,7 @@ export class MockDataGenerator {
|
|
|
92
92
|
type: "edits",
|
|
93
93
|
addedObjects: [{
|
|
94
94
|
primaryKey: actionId,
|
|
95
|
-
objectType
|
|
95
|
+
objectType
|
|
96
96
|
}],
|
|
97
97
|
modifiedObjects: [],
|
|
98
98
|
deletedObjects: [],
|
|
@@ -404,7 +404,7 @@ function generateId() {
|
|
|
404
404
|
}
|
|
405
405
|
let singular = linkName;
|
|
406
406
|
if (linkName.endsWith("ies")) {
|
|
407
|
-
singular = linkName.slice(0, -3)
|
|
407
|
+
singular = `${linkName.slice(0, -3)}y`;
|
|
408
408
|
} else if (linkName.endsWith("es")) {
|
|
409
409
|
singular = linkName.slice(0, -2);
|
|
410
410
|
} else if (linkName.endsWith("s")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockDataGenerator.js","names":["MockDataGenerator","generatePayload","primitive","type","actionName","data","name","parameters","toLowerCase","includes","objectType","extractObjectTypeFromAction","generateCreateParameters","generateUpdateParameters","generateDeleteParameters","id","crypto","randomUUID","field1","field2","JSON","stringify","options","mode","returnEdits","generateStaticData","generateActionMockData","generateObjectMockData","generateObjectSetMockData","generateLinksMockData","generateQueryMockData","generateFunctionCode","generateActionFunctionCode","generateObjectFunctionCode","generateObjectSetFunctionCode","generateLinksFunctionCode","generateQueryFunctionCode","actionData","actionId","mockData","addedObjects","primaryKey","modifiedObjects","deletedObjects","addedLinks","deletedLinks","deletedObjectsCount","deletedLinksCount","editedObjectTypes","objectData","__apiName","__primaryKey","__title","generateFieldsForObjectType","objectSetData","pageSize","objects","Array","from","length","Math","min","_","index","totalCount","String","linkData","linkName","sourceType","linkedType","inferLinkedTypeFromLinkName","linkedObjects","$apiName","$primaryKey","$objectType","$title","queryData","customField1","customField2","customField3","metadata","queryType","hookType","signature","generateDynamicFieldsForObjectType","title","isComplete","description","createdAt","Date","toISOString","employeeId","floor","random","fullName","email","department","officeId","location","capacity","status","modifiedAt","patterns","pattern","match","charAt","toUpperCase","slice","singular","endsWith","Todo","is_complete","todo","employee","object","reason"],"sources":["MockDataGenerator.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 {\n DiscoveredAction,\n DiscoveredLink,\n DiscoveredObject,\n DiscoveredObjectSet,\n DiscoveredQuery,\n} from \"./ComponentPrimitiveDiscovery.js\";\n\nexport class MockDataGenerator {\n static generatePayload(primitive: SelectedPrimitive): string {\n if (primitive.type !== \"action\") {\n return \"{}\";\n }\n\n const actionName = primitive.data.name;\n\n let parameters: Record<string, unknown>;\n\n if (actionName.toLowerCase().includes(\"create\")) {\n const objectType = this.extractObjectTypeFromAction(actionName);\n parameters = this.generateCreateParameters(objectType);\n } else if (\n actionName.toLowerCase().includes(\"update\")\n || actionName.toLowerCase().includes(\"modify\")\n ) {\n const objectType = this.extractObjectTypeFromAction(actionName);\n parameters = this.generateUpdateParameters(objectType);\n } else if (actionName.toLowerCase().includes(\"delete\")) {\n const objectType = this.extractObjectTypeFromAction(actionName);\n parameters = this.generateDeleteParameters(objectType);\n } else {\n parameters = {\n id: crypto.randomUUID(),\n data: {\n field1: \"value1\",\n field2: 42,\n },\n };\n }\n\n return JSON.stringify(\n {\n parameters,\n options: {\n mode: \"VALIDATE_AND_EXECUTE\",\n returnEdits: \"ALL_V2_WITH_DELETIONS\",\n },\n },\n null,\n 2,\n );\n }\n\n static generateStaticData(primitive: SelectedPrimitive): string {\n switch (primitive.type) {\n case \"action\":\n return this.generateActionMockData(primitive.data);\n case \"object\":\n return this.generateObjectMockData(primitive.data);\n case \"objectSet\":\n return this.generateObjectSetMockData(primitive.data);\n case \"link\":\n return this.generateLinksMockData(primitive.data);\n case \"query\":\n return this.generateQueryMockData(primitive.data);\n case \"aggregation\":\n return \"{\\n \\\"data\\\": {},\\n \\\"status\\\": \\\"SUCCESS\\\"\\n}\";\n }\n }\n\n static generateFunctionCode(primitive: SelectedPrimitive): string {\n switch (primitive.type) {\n case \"action\":\n return this.generateActionFunctionCode(primitive.data);\n case \"object\":\n return this.generateObjectFunctionCode(primitive.data);\n case \"objectSet\":\n return this.generateObjectSetFunctionCode(primitive.data);\n case \"link\":\n return this.generateLinksFunctionCode(primitive.data);\n case \"query\":\n return this.generateQueryFunctionCode(primitive.data);\n case \"aggregation\":\n return \"function generateMock(params) {\\n return {\\n data: {},\\n status: \\\"SUCCESS\\\"\\n };\\n}\";\n }\n }\n\n private static generateActionMockData(actionData: DiscoveredAction): string {\n const actionName = actionData.name;\n const actionId = crypto.randomUUID();\n\n let objectType: string;\n\n if (actionName === \"createTodo\") {\n objectType = \"TodoLike\";\n } else {\n objectType = this.extractObjectTypeFromAction(actionName);\n }\n\n const mockData = {\n type: \"edits\",\n addedObjects: [\n {\n primaryKey: actionId,\n objectType: objectType,\n },\n ],\n modifiedObjects: [],\n deletedObjects: [],\n addedLinks: [],\n deletedLinks: [],\n deletedObjectsCount: 0,\n deletedLinksCount: 0,\n editedObjectTypes: [objectType],\n };\n\n return JSON.stringify(mockData, null, 2);\n }\n\n private static generateObjectMockData(objectData: DiscoveredObject): string {\n const objectType = objectData.type;\n const primaryKey = objectData.primaryKey || crypto.randomUUID();\n\n const mockData = {\n id: primaryKey,\n __apiName: objectType,\n __primaryKey: primaryKey,\n __title: `Mock ${objectType}`,\n ...this.generateFieldsForObjectType(objectType),\n };\n\n return JSON.stringify(mockData, null, 2);\n }\n\n private static generateObjectSetMockData(\n objectSetData: DiscoveredObjectSet,\n ): string {\n const objectType = objectSetData.type;\n const pageSize = objectSetData.pageSize || 10;\n\n const objects = Array.from(\n { length: Math.min(pageSize, 3) },\n (_, index) => {\n const id = crypto.randomUUID();\n return {\n id,\n __apiName: objectType,\n __primaryKey: id,\n __title: `${objectType} ${index + 1}`,\n ...this.generateFieldsForObjectType(objectType),\n };\n },\n );\n\n const mockData = {\n data: objects,\n totalCount: String(objects.length),\n };\n\n return JSON.stringify(mockData, null, 2);\n }\n\n private static generateLinksMockData(linkData: DiscoveredLink): string {\n const linkName = linkData.linkName;\n const sourceType = linkData.sourceType;\n\n const linkedType = this.inferLinkedTypeFromLinkName(linkName, sourceType);\n\n const linkedObjects = Array.from({ length: 2 }, (_, index) => {\n const id = crypto.randomUUID();\n return {\n $apiName: linkedType,\n $primaryKey: id,\n $objectType: linkedType,\n $title: `${linkedType} ${index + 1}`,\n ...this.generateFieldsForObjectType(linkedType),\n };\n });\n\n const mockData = {\n data: linkedObjects,\n totalCount: String(linkedObjects.length),\n };\n\n return JSON.stringify(mockData, null, 2);\n }\n\n private static generateQueryMockData(queryData: DiscoveredQuery): string {\n const mockData = {\n data: [\n {\n id: crypto.randomUUID(),\n __apiName: \"QueryResult\",\n __primaryKey: crypto.randomUUID(),\n __title: \"Query Result 1\",\n customField1: \"value1\",\n customField2: 42,\n customField3: true,\n },\n ],\n totalCount: \"1\",\n metadata: {\n queryType: queryData.hookType || \"advanced\",\n signature: queryData.signature || \"custom query\",\n },\n };\n\n return JSON.stringify(mockData, null, 2);\n }\n\n private static generateActionFunctionCode(\n actionData: DiscoveredAction,\n ): string {\n const actionName = actionData.name;\n\n return `function generateMock(params) {\n // Access action parameters\n console.log(\"Action: ${actionName}\", params);\n\n // Generate dynamic response based on parameters\n const primaryKey = generateId();\n\n return {\n validation: {\n result: \"VALID\",\n submissionCriteria: [],\n parameters: params\n },\n edits: {\n type: \"edits\",\n edits: [\n {\n type: \"addObject\",\n primaryKey: primaryKey,\n objectType: \"${this.extractObjectTypeFromAction(actionName)}\"\n }\n ],\n addedObjectCount: 1,\n modifiedObjectsCount: 0,\n deletedObjectsCount: 0,\n addedLinksCount: 0,\n deletedLinksCount: 0\n }\n };\n}\n\nfunction generateId() {\n return crypto.randomUUID();\n}`;\n }\n\n private static generateObjectFunctionCode(\n objectData: DiscoveredObject,\n ): string {\n const objectType = objectData.type;\n\n return `function generateMock(params) {\n // Access object primary key\n const primaryKey = params.primaryKey || generateId();\n\n return {\n id: primaryKey,\n __apiName: \"${objectType}\",\n __primaryKey: primaryKey,\n __title: \\`Mock ${objectType} \\${primaryKey}\\`,\n // Add dynamic fields based on context\n createdAt: new Date().toISOString(),\n modifiedAt: new Date().toISOString(),\n ${this.generateDynamicFieldsForObjectType(objectType)}\n };\n}\n\nfunction generateId() {\n return crypto.randomUUID();\n}`;\n }\n\n private static generateObjectSetFunctionCode(\n objectSetData: DiscoveredObjectSet,\n ): string {\n const objectType = objectSetData.type;\n\n return `function generateMock(params) {\n // Access query parameters\n const pageSize = params.pageSize || 10;\n const where = params.where || {};\n\n // Generate dynamic list based on parameters\n const objects = Array.from({ length: pageSize }, (_, index) => {\n const id = generateId();\n return {\n id,\n __apiName: \"${objectType}\",\n __primaryKey: id,\n __title: \\`${objectType} \\${index + 1}\\`,\n // Add fields based on where clause\n ${this.generateDynamicFieldsForObjectType(objectType)}\n };\n });\n\n return {\n data: objects,\n totalCount: String(objects.length)\n };\n}\n\nfunction generateId() {\n return crypto.randomUUID();\n}`;\n }\n\n private static generateLinksFunctionCode(linkData: DiscoveredLink): string {\n const linkName = linkData.linkName;\n const linkedType = this.inferLinkedTypeFromLinkName(\n linkName,\n linkData.sourceType,\n );\n\n return `function generateMock(params) {\n // Access link traversal context\n const sourceObject = params.sourceObject;\n const linkName = \"${linkName}\";\n\n // Generate linked objects based on source\n const linkedObjects = Array.from({ length: 3 }, (_, index) => {\n const id = generateId();\n return {\n $apiName: \"${linkedType}\",\n $primaryKey: id,\n $objectType: \"${linkedType}\",\n $title: \\`${linkedType} \\${index + 1}\\`,\n // Add relationship fields\n sourceId: sourceObject?.$primaryKey,\n ${this.generateDynamicFieldsForObjectType(linkedType)}\n };\n });\n\n return {\n data: linkedObjects,\n totalCount: String(linkedObjects.length)\n };\n}\n\nfunction generateId() {\n return crypto.randomUUID();\n}`;\n }\n\n private static generateQueryFunctionCode(queryData: DiscoveredQuery): string {\n return `function generateMock(params) {\n // Access advanced query parameters\n console.log(\"Query params:\", params);\n\n // Generate dynamic results based on query\n const results = Array.from({ length: 5 }, (_, index) => ({\n id: generateId(),\n __apiName: \"QueryResult\",\n __primaryKey: generateId(),\n __title: \\`Result \\${index + 1}\\`,\n // Add computed fields\n score: Math.random() * 100,\n relevance: Math.random(),\n timestamp: new Date().toISOString()\n }));\n\n return {\n data: results,\n totalCount: String(results.length),\n metadata: {\n queryType: \"${queryData.hookType || \"advanced\"}\",\n executionTime: Math.random() * 1000\n }\n };\n}\n\nfunction generateId() {\n return crypto.randomUUID();\n}`;\n }\n\n private static generateFieldsForObjectType(\n objectType: string,\n ): Record<string, unknown> {\n if (objectType === \"Todo\") {\n return {\n title: \"Sample Todo\",\n isComplete: false,\n description: \"This is a mock todo item\",\n createdAt: new Date().toISOString(),\n };\n }\n\n if (objectType === \"Employee\") {\n return {\n employeeId: Math.floor(Math.random() * 10000),\n fullName: \"John Doe\",\n email: \"john.doe@example.com\",\n department: \"Engineering\",\n };\n }\n\n if (objectType === \"Office\") {\n return {\n officeId: `OFFICE-${Math.floor(Math.random() * 100)}`,\n name: \"Main Office\",\n location: \"New York\",\n capacity: 100,\n };\n }\n\n return {\n name: `Sample ${objectType}`,\n status: \"ACTIVE\",\n createdAt: new Date().toISOString(),\n modifiedAt: new Date().toISOString(),\n };\n }\n\n private static generateDynamicFieldsForObjectType(\n objectType: string,\n ): string {\n if (objectType === \"Todo\") {\n return `title: \\`Todo Item \\${index || \"\"}\\`,\n isComplete: Math.random() > 0.5,\n description: \"Generated todo description\",\n createdAt: new Date().toISOString()`;\n }\n\n if (objectType === \"Employee\") {\n return `employeeId: Math.floor(Math.random() * 10000),\n fullName: \\`Employee \\${index || \"\"}\\`,\n email: \\`employee\\${index || \"\"}@example.com\\`,\n department: [\"Engineering\", \"Sales\", \"Marketing\"][Math.floor(Math.random() * 3)]`;\n }\n\n return `name: \\`${objectType} \\${index || \"\"}\\`,\n status: \"ACTIVE\",\n createdAt: new Date().toISOString()`;\n }\n\n private static extractObjectTypeFromAction(actionName: string): string {\n const patterns = [\n /create[_-]?(\\w+)/i,\n /add[_-]?(\\w+)/i,\n /new[_-]?(\\w+)/i,\n /(\\w+)[_-]?create/i,\n /(\\w+)[_-]?add/i,\n ];\n\n for (const pattern of patterns) {\n const match = actionName.match(pattern);\n if (match && match[1]) {\n return match[1].charAt(0).toUpperCase()\n + match[1].slice(1).toLowerCase();\n }\n }\n\n return \"Object\";\n }\n\n private static inferLinkedTypeFromLinkName(\n linkName: string,\n sourceType: string,\n ): string {\n if (linkName === \"occupants\" || linkName === \"employees\") {\n return \"Employee\";\n }\n if (linkName === \"offices\" || linkName === \"locations\") {\n return \"Office\";\n }\n if (linkName === \"todos\" || linkName === \"tasks\") {\n return \"Todo\";\n }\n if (linkName === \"children\" || linkName === \"parents\") {\n return sourceType;\n }\n\n let singular = linkName;\n if (linkName.endsWith(\"ies\")) {\n singular = linkName.slice(0, -3) + \"y\";\n } else if (linkName.endsWith(\"es\")) {\n singular = linkName.slice(0, -2);\n } else if (linkName.endsWith(\"s\")) {\n singular = linkName.slice(0, -1);\n }\n\n return singular.charAt(0).toUpperCase() + singular.slice(1);\n }\n\n private static generateCreateParameters(\n objectType: string,\n ): Record<string, unknown> {\n if (objectType === \"Todo\") {\n return {\n Todo: \"New Todo Item\",\n is_complete: false,\n location: \"0,0\",\n };\n }\n\n if (objectType === \"Employee\") {\n return {\n fullName: \"John Doe\",\n email: \"john.doe@example.com\",\n employeeId: Math.floor(Math.random() * 10000),\n department: \"Engineering\",\n };\n }\n\n return {\n name: `New ${objectType}`,\n description: `Description for ${objectType}`,\n status: \"ACTIVE\",\n };\n }\n\n private static generateUpdateParameters(\n objectType: string,\n ): Record<string, unknown> {\n if (objectType === \"Todo\") {\n return {\n todo: { $primaryKey: crypto.randomUUID() },\n is_complete: true,\n Todo: \"Updated Todo\",\n };\n }\n\n if (objectType === \"Employee\") {\n return {\n employee: { $primaryKey: crypto.randomUUID() },\n department: \"Marketing\",\n email: \"updated.email@example.com\",\n };\n }\n\n return {\n object: { $primaryKey: crypto.randomUUID() },\n name: `Updated ${objectType}`,\n status: \"MODIFIED\",\n };\n }\n\n private static generateDeleteParameters(\n _objectType: string,\n ): Record<string, unknown> {\n return {\n object: { $primaryKey: crypto.randomUUID() },\n reason: \"No longer needed\",\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MockDataGenerator.js","names":["MockDataGenerator","generatePayload","primitive","type","actionName","data","name","parameters","toLowerCase","includes","objectType","extractObjectTypeFromAction","generateCreateParameters","generateUpdateParameters","generateDeleteParameters","id","crypto","randomUUID","field1","field2","JSON","stringify","options","mode","returnEdits","generateStaticData","generateActionMockData","generateObjectMockData","generateObjectSetMockData","generateLinksMockData","generateQueryMockData","generateFunctionCode","generateActionFunctionCode","generateObjectFunctionCode","generateObjectSetFunctionCode","generateLinksFunctionCode","generateQueryFunctionCode","actionData","actionId","mockData","addedObjects","primaryKey","modifiedObjects","deletedObjects","addedLinks","deletedLinks","deletedObjectsCount","deletedLinksCount","editedObjectTypes","objectData","__apiName","__primaryKey","__title","generateFieldsForObjectType","objectSetData","pageSize","objects","Array","from","length","Math","min","_","index","totalCount","String","linkData","linkName","sourceType","linkedType","inferLinkedTypeFromLinkName","linkedObjects","$apiName","$primaryKey","$objectType","$title","queryData","customField1","customField2","customField3","metadata","queryType","hookType","signature","generateDynamicFieldsForObjectType","title","isComplete","description","createdAt","Date","toISOString","employeeId","floor","random","fullName","email","department","officeId","location","capacity","status","modifiedAt","patterns","pattern","match","charAt","toUpperCase","slice","singular","endsWith","Todo","is_complete","todo","employee","object","reason"],"sources":["MockDataGenerator.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 {\n DiscoveredAction,\n DiscoveredLink,\n DiscoveredObject,\n DiscoveredObjectSet,\n DiscoveredQuery,\n} from \"./ComponentPrimitiveDiscovery.js\";\n\nexport class MockDataGenerator {\n static generatePayload(primitive: SelectedPrimitive): string {\n if (primitive.type !== \"action\") {\n return \"{}\";\n }\n\n const actionName = primitive.data.name;\n\n let parameters: Record<string, unknown>;\n\n if (actionName.toLowerCase().includes(\"create\")) {\n const objectType = this.extractObjectTypeFromAction(actionName);\n parameters = this.generateCreateParameters(objectType);\n } else if (\n actionName.toLowerCase().includes(\"update\") ||\n actionName.toLowerCase().includes(\"modify\")\n ) {\n const objectType = this.extractObjectTypeFromAction(actionName);\n parameters = this.generateUpdateParameters(objectType);\n } else if (actionName.toLowerCase().includes(\"delete\")) {\n const objectType = this.extractObjectTypeFromAction(actionName);\n parameters = this.generateDeleteParameters(objectType);\n } else {\n parameters = {\n id: crypto.randomUUID(),\n data: {\n field1: \"value1\",\n field2: 42,\n },\n };\n }\n\n return JSON.stringify(\n {\n parameters,\n options: {\n mode: \"VALIDATE_AND_EXECUTE\",\n returnEdits: \"ALL_V2_WITH_DELETIONS\",\n },\n },\n null,\n 2\n );\n }\n\n static generateStaticData(primitive: SelectedPrimitive): string {\n switch (primitive.type) {\n case \"action\":\n return this.generateActionMockData(primitive.data);\n case \"object\":\n return this.generateObjectMockData(primitive.data);\n case \"objectSet\":\n return this.generateObjectSetMockData(primitive.data);\n case \"link\":\n return this.generateLinksMockData(primitive.data);\n case \"query\":\n return this.generateQueryMockData(primitive.data);\n case \"aggregation\":\n return '{\\n \"data\": {},\\n \"status\": \"SUCCESS\"\\n}';\n }\n }\n\n static generateFunctionCode(primitive: SelectedPrimitive): string {\n switch (primitive.type) {\n case \"action\":\n return this.generateActionFunctionCode(primitive.data);\n case \"object\":\n return this.generateObjectFunctionCode(primitive.data);\n case \"objectSet\":\n return this.generateObjectSetFunctionCode(primitive.data);\n case \"link\":\n return this.generateLinksFunctionCode(primitive.data);\n case \"query\":\n return this.generateQueryFunctionCode(primitive.data);\n case \"aggregation\":\n return 'function generateMock(params) {\\n return {\\n data: {},\\n status: \"SUCCESS\"\\n };\\n}';\n }\n }\n\n private static generateActionMockData(actionData: DiscoveredAction): string {\n const actionName = actionData.name;\n const actionId = crypto.randomUUID();\n\n let objectType: string;\n\n if (actionName === \"createTodo\") {\n objectType = \"TodoLike\";\n } else {\n objectType = this.extractObjectTypeFromAction(actionName);\n }\n\n const mockData = {\n type: \"edits\",\n addedObjects: [\n {\n primaryKey: actionId,\n objectType,\n },\n ],\n modifiedObjects: [],\n deletedObjects: [],\n addedLinks: [],\n deletedLinks: [],\n deletedObjectsCount: 0,\n deletedLinksCount: 0,\n editedObjectTypes: [objectType],\n };\n\n return JSON.stringify(mockData, null, 2);\n }\n\n private static generateObjectMockData(objectData: DiscoveredObject): string {\n const objectType = objectData.type;\n const primaryKey = objectData.primaryKey || crypto.randomUUID();\n\n const mockData = {\n id: primaryKey,\n __apiName: objectType,\n __primaryKey: primaryKey,\n __title: `Mock ${objectType}`,\n ...this.generateFieldsForObjectType(objectType),\n };\n\n return JSON.stringify(mockData, null, 2);\n }\n\n private static generateObjectSetMockData(\n objectSetData: DiscoveredObjectSet\n ): string {\n const objectType = objectSetData.type;\n const pageSize = objectSetData.pageSize || 10;\n\n const objects = Array.from(\n { length: Math.min(pageSize, 3) },\n (_, index) => {\n const id = crypto.randomUUID();\n return {\n id,\n __apiName: objectType,\n __primaryKey: id,\n __title: `${objectType} ${index + 1}`,\n ...this.generateFieldsForObjectType(objectType),\n };\n }\n );\n\n const mockData = {\n data: objects,\n totalCount: String(objects.length),\n };\n\n return JSON.stringify(mockData, null, 2);\n }\n\n private static generateLinksMockData(linkData: DiscoveredLink): string {\n const linkName = linkData.linkName;\n const sourceType = linkData.sourceType;\n\n const linkedType = this.inferLinkedTypeFromLinkName(linkName, sourceType);\n\n const linkedObjects = Array.from({ length: 2 }, (_, index) => {\n const id = crypto.randomUUID();\n return {\n $apiName: linkedType,\n $primaryKey: id,\n $objectType: linkedType,\n $title: `${linkedType} ${index + 1}`,\n ...this.generateFieldsForObjectType(linkedType),\n };\n });\n\n const mockData = {\n data: linkedObjects,\n totalCount: String(linkedObjects.length),\n };\n\n return JSON.stringify(mockData, null, 2);\n }\n\n private static generateQueryMockData(queryData: DiscoveredQuery): string {\n const mockData = {\n data: [\n {\n id: crypto.randomUUID(),\n __apiName: \"QueryResult\",\n __primaryKey: crypto.randomUUID(),\n __title: \"Query Result 1\",\n customField1: \"value1\",\n customField2: 42,\n customField3: true,\n },\n ],\n totalCount: \"1\",\n metadata: {\n queryType: queryData.hookType || \"advanced\",\n signature: queryData.signature || \"custom query\",\n },\n };\n\n return JSON.stringify(mockData, null, 2);\n }\n\n private static generateActionFunctionCode(\n actionData: DiscoveredAction\n ): string {\n const actionName = actionData.name;\n\n return `function generateMock(params) {\n // Access action parameters\n console.log(\"Action: ${actionName}\", params);\n\n // Generate dynamic response based on parameters\n const primaryKey = generateId();\n\n return {\n validation: {\n result: \"VALID\",\n submissionCriteria: [],\n parameters: params\n },\n edits: {\n type: \"edits\",\n edits: [\n {\n type: \"addObject\",\n primaryKey: primaryKey,\n objectType: \"${this.extractObjectTypeFromAction(actionName)}\"\n }\n ],\n addedObjectCount: 1,\n modifiedObjectsCount: 0,\n deletedObjectsCount: 0,\n addedLinksCount: 0,\n deletedLinksCount: 0\n }\n };\n}\n\nfunction generateId() {\n return crypto.randomUUID();\n}`;\n }\n\n private static generateObjectFunctionCode(\n objectData: DiscoveredObject\n ): string {\n const objectType = objectData.type;\n\n return `function generateMock(params) {\n // Access object primary key\n const primaryKey = params.primaryKey || generateId();\n\n return {\n id: primaryKey,\n __apiName: \"${objectType}\",\n __primaryKey: primaryKey,\n __title: \\`Mock ${objectType} \\${primaryKey}\\`,\n // Add dynamic fields based on context\n createdAt: new Date().toISOString(),\n modifiedAt: new Date().toISOString(),\n ${this.generateDynamicFieldsForObjectType(objectType)}\n };\n}\n\nfunction generateId() {\n return crypto.randomUUID();\n}`;\n }\n\n private static generateObjectSetFunctionCode(\n objectSetData: DiscoveredObjectSet\n ): string {\n const objectType = objectSetData.type;\n\n return `function generateMock(params) {\n // Access query parameters\n const pageSize = params.pageSize || 10;\n const where = params.where || {};\n\n // Generate dynamic list based on parameters\n const objects = Array.from({ length: pageSize }, (_, index) => {\n const id = generateId();\n return {\n id,\n __apiName: \"${objectType}\",\n __primaryKey: id,\n __title: \\`${objectType} \\${index + 1}\\`,\n // Add fields based on where clause\n ${this.generateDynamicFieldsForObjectType(objectType)}\n };\n });\n\n return {\n data: objects,\n totalCount: String(objects.length)\n };\n}\n\nfunction generateId() {\n return crypto.randomUUID();\n}`;\n }\n\n private static generateLinksFunctionCode(linkData: DiscoveredLink): string {\n const linkName = linkData.linkName;\n const linkedType = this.inferLinkedTypeFromLinkName(\n linkName,\n linkData.sourceType\n );\n\n return `function generateMock(params) {\n // Access link traversal context\n const sourceObject = params.sourceObject;\n const linkName = \"${linkName}\";\n\n // Generate linked objects based on source\n const linkedObjects = Array.from({ length: 3 }, (_, index) => {\n const id = generateId();\n return {\n $apiName: \"${linkedType}\",\n $primaryKey: id,\n $objectType: \"${linkedType}\",\n $title: \\`${linkedType} \\${index + 1}\\`,\n // Add relationship fields\n sourceId: sourceObject?.$primaryKey,\n ${this.generateDynamicFieldsForObjectType(linkedType)}\n };\n });\n\n return {\n data: linkedObjects,\n totalCount: String(linkedObjects.length)\n };\n}\n\nfunction generateId() {\n return crypto.randomUUID();\n}`;\n }\n\n private static generateQueryFunctionCode(queryData: DiscoveredQuery): string {\n return `function generateMock(params) {\n // Access advanced query parameters\n console.log(\"Query params:\", params);\n\n // Generate dynamic results based on query\n const results = Array.from({ length: 5 }, (_, index) => ({\n id: generateId(),\n __apiName: \"QueryResult\",\n __primaryKey: generateId(),\n __title: \\`Result \\${index + 1}\\`,\n // Add computed fields\n score: Math.random() * 100,\n relevance: Math.random(),\n timestamp: new Date().toISOString()\n }));\n\n return {\n data: results,\n totalCount: String(results.length),\n metadata: {\n queryType: \"${queryData.hookType || \"advanced\"}\",\n executionTime: Math.random() * 1000\n }\n };\n}\n\nfunction generateId() {\n return crypto.randomUUID();\n}`;\n }\n\n private static generateFieldsForObjectType(\n objectType: string\n ): Record<string, unknown> {\n if (objectType === \"Todo\") {\n return {\n title: \"Sample Todo\",\n isComplete: false,\n description: \"This is a mock todo item\",\n createdAt: new Date().toISOString(),\n };\n }\n\n if (objectType === \"Employee\") {\n return {\n employeeId: Math.floor(Math.random() * 10000),\n fullName: \"John Doe\",\n email: \"john.doe@example.com\",\n department: \"Engineering\",\n };\n }\n\n if (objectType === \"Office\") {\n return {\n officeId: `OFFICE-${Math.floor(Math.random() * 100)}`,\n name: \"Main Office\",\n location: \"New York\",\n capacity: 100,\n };\n }\n\n return {\n name: `Sample ${objectType}`,\n status: \"ACTIVE\",\n createdAt: new Date().toISOString(),\n modifiedAt: new Date().toISOString(),\n };\n }\n\n private static generateDynamicFieldsForObjectType(\n objectType: string\n ): string {\n if (objectType === \"Todo\") {\n return `title: \\`Todo Item \\${index || \"\"}\\`,\n isComplete: Math.random() > 0.5,\n description: \"Generated todo description\",\n createdAt: new Date().toISOString()`;\n }\n\n if (objectType === \"Employee\") {\n return `employeeId: Math.floor(Math.random() * 10000),\n fullName: \\`Employee \\${index || \"\"}\\`,\n email: \\`employee\\${index || \"\"}@example.com\\`,\n department: [\"Engineering\", \"Sales\", \"Marketing\"][Math.floor(Math.random() * 3)]`;\n }\n\n return `name: \\`${objectType} \\${index || \"\"}\\`,\n status: \"ACTIVE\",\n createdAt: new Date().toISOString()`;\n }\n\n private static extractObjectTypeFromAction(actionName: string): string {\n const patterns = [\n /create[_-]?(\\w+)/i,\n /add[_-]?(\\w+)/i,\n /new[_-]?(\\w+)/i,\n /(\\w+)[_-]?create/i,\n /(\\w+)[_-]?add/i,\n ];\n\n for (const pattern of patterns) {\n const match = actionName.match(pattern);\n if (match && match[1]) {\n return (\n match[1].charAt(0).toUpperCase() + match[1].slice(1).toLowerCase()\n );\n }\n }\n\n return \"Object\";\n }\n\n private static inferLinkedTypeFromLinkName(\n linkName: string,\n sourceType: string\n ): string {\n if (linkName === \"occupants\" || linkName === \"employees\") {\n return \"Employee\";\n }\n if (linkName === \"offices\" || linkName === \"locations\") {\n return \"Office\";\n }\n if (linkName === \"todos\" || linkName === \"tasks\") {\n return \"Todo\";\n }\n if (linkName === \"children\" || linkName === \"parents\") {\n return sourceType;\n }\n\n let singular = linkName;\n if (linkName.endsWith(\"ies\")) {\n singular = `${linkName.slice(0, -3)}y`;\n } else if (linkName.endsWith(\"es\")) {\n singular = linkName.slice(0, -2);\n } else if (linkName.endsWith(\"s\")) {\n singular = linkName.slice(0, -1);\n }\n\n return singular.charAt(0).toUpperCase() + singular.slice(1);\n }\n\n private static generateCreateParameters(\n objectType: string\n ): Record<string, unknown> {\n if (objectType === \"Todo\") {\n return {\n Todo: \"New Todo Item\",\n is_complete: false,\n location: \"0,0\",\n };\n }\n\n if (objectType === \"Employee\") {\n return {\n fullName: \"John Doe\",\n email: \"john.doe@example.com\",\n employeeId: Math.floor(Math.random() * 10000),\n department: \"Engineering\",\n };\n }\n\n return {\n name: `New ${objectType}`,\n description: `Description for ${objectType}`,\n status: \"ACTIVE\",\n };\n }\n\n private static generateUpdateParameters(\n objectType: string\n ): Record<string, unknown> {\n if (objectType === \"Todo\") {\n return {\n todo: { $primaryKey: crypto.randomUUID() },\n is_complete: true,\n Todo: \"Updated Todo\",\n };\n }\n\n if (objectType === \"Employee\") {\n return {\n employee: { $primaryKey: crypto.randomUUID() },\n department: \"Marketing\",\n email: \"updated.email@example.com\",\n };\n }\n\n return {\n object: { $primaryKey: crypto.randomUUID() },\n name: `Updated ${objectType}`,\n status: \"MODIFIED\",\n };\n }\n\n private static generateDeleteParameters(\n _objectType: string\n ): Record<string, unknown> {\n return {\n object: { $primaryKey: crypto.randomUUID() },\n reason: \"No longer needed\",\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -223,7 +223,7 @@ export class ObservableClientMonitor {
|
|
|
223
223
|
error: err => {
|
|
224
224
|
try {
|
|
225
225
|
this.cleanupSubscription(subscriptionId);
|
|
226
|
-
} catch
|
|
226
|
+
} catch {}
|
|
227
227
|
if (componentContext) {
|
|
228
228
|
this.componentRegistry.unregisterComponent(componentContext.id);
|
|
229
229
|
}
|
|
@@ -570,7 +570,7 @@ export class ObservableClientMonitor {
|
|
|
570
570
|
this.metricsStore.recordOptimisticUpdate(signature, metadata);
|
|
571
571
|
}
|
|
572
572
|
const instrumentedOptions = {
|
|
573
|
-
...
|
|
573
|
+
...options,
|
|
574
574
|
__debugListeners: {
|
|
575
575
|
onLayerCreated: id => {
|
|
576
576
|
this.actionTracker.registerOptimisticLayer(actionId, id);
|