import type { Bridge } from '@vue-devtools/shared-utils' import type { CustomInspectorOptions, ID, TimelineEventOptions, TimelineLayerOptions, TimelineMarkerOptions, WithId, } from '@vue/devtools-api' import type { AppRecord } from './app-record' import type { Plugin } from './plugin' import type { DevtoolsHook } from './global-hook' import type { DevtoolsBackend } from './backend' export interface BackendContext { bridge: Bridge hook: DevtoolsHook backends: DevtoolsBackend[] appRecords: AppRecord[] currentTab: string currentAppRecord: AppRecord currentInspectedComponentId: string plugins: Plugin[] currentPlugin: Plugin timelineLayers: TimelineLayer[] nextTimelineEventId: number timelineEventMap: Map perfUniqueGroupId: number customInspectors: CustomInspector[] timelineMarkers: TimelineMarker[] } export interface TimelineLayer extends TimelineLayerOptions { appRecord: AppRecord | null plugin: Plugin events: (TimelineEventOptions & WithId)[] } export interface TimelineMarker extends TimelineMarkerOptions { appRecord: AppRecord | null } export interface CustomInspector extends CustomInspectorOptions { appRecord: AppRecord plugin: Plugin treeFilter: string selectedNodeId: string } export interface CreateBackendContextOptions { bridge: Bridge hook: DevtoolsHook } export function createBackendContext(options: CreateBackendContextOptions): BackendContext { return { bridge: options.bridge, hook: options.hook, backends: [], appRecords: [], currentTab: null, currentAppRecord: null, currentInspectedComponentId: null, plugins: [], currentPlugin: null, timelineLayers: [], nextTimelineEventId: 0, timelineEventMap: new Map(), perfUniqueGroupId: 0, customInspectors: [], timelineMarkers: [], } }