@lytjs/devtools-extension 6.5.0 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/state.ts","../src/component-tree.ts","../src/signals.ts","../src/events.ts","../src/snapshots.ts","../src/bridge.ts","../src/api.ts","../src/store-integration.ts","../src/router-integration.ts","../src/panel/state-editor.ts","../src/panel/time-travel.ts","../src/panel/performance.ts","../src/panel/index.ts"],"names":["isActive","getComponentById","signal","startRecording","stopRecording","components","signals","events","performance"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @lytjs/devtools - DevTools state management\n */\n\nimport type { DevToolsState } from './types';\nimport { signal, effect } from '@lytjs/reactivity';\n\nconst devtoolsState = signal<DevToolsState>({\n enabled: false,\n connected: false,\n recording: false,\n});\n\nconst stateSubscribers = new Set<(state: DevToolsState) => void>();\n\nexport function getState(): DevToolsState {\n return devtoolsState();\n}\n\nexport function enable(): void {\n devtoolsState.set({ ...devtoolsState(), enabled: true });\n}\n\nexport function disable(): void {\n devtoolsState.set({ ...devtoolsState(), enabled: false });\n}\n\nexport function setConnected(connected: boolean): void {\n devtoolsState.set({ ...devtoolsState(), connected });\n}\n\nexport function startRecording(): void {\n devtoolsState.set({ ...devtoolsState(), recording: true });\n}\n\nexport function stopRecording(): void {\n devtoolsState.set({ ...devtoolsState(), recording: false });\n}\n\nexport function subscribeState(callback: (state: DevToolsState) => void): () => void {\n let isActive = true;\n\n const stopEffect = effect(() => {\n const currentState = devtoolsState();\n if (isActive) {\n callback(currentState);\n }\n });\n\n const cleanup = (): void => {\n if (isActive) {\n isActive = false;\n stateSubscribers.delete(cleanup);\n stopEffect();\n }\n };\n\n stateSubscribers.add(cleanup);\n return cleanup;\n}\n\nexport function notifyStateChange(): void {\n const state = devtoolsState();\n stateSubscribers.forEach((callback) => callback(state));\n}\n\nexport function resetState(): void {\n devtoolsState.set({\n enabled: false,\n connected: false,\n recording: false,\n });\n}\n\nexport function getStateSnapshot(): DevToolsState {\n return { ...devtoolsState() };\n}\n\nexport function restoreState(state: Partial<DevToolsState>): void {\n devtoolsState.set({ ...devtoolsState(), ...state });\n}\n\nexport function clearStateSubscribers(): void {\n stateSubscribers.forEach((callback) => callback(devtoolsState()));\n stateSubscribers.clear();\n}\n","/**\n * DevTools 组件树管理模块\n */\n\nimport type { ComponentTreeNode } from './types';\n\nexport interface ComponentInfo {\n id: string;\n name: string;\n parentId?: string;\n children: string[];\n props?: Record<string, unknown>;\n slots?: Record<string, unknown>;\n}\n\nconst components = new Map<string, ComponentInfo>();\nlet idCounter = 0;\n\n/**\n * 生成组件 ID\n */\nexport function generateComponentId(): string {\n return `component-${++idCounter}-${Date.now().toString(36)}`;\n}\n\nexport function registerComponent(info: ComponentInfo): void {\n components.set(info.id, info);\n if (info.parentId) {\n const parent = components.get(info.parentId);\n if (parent && !parent.children.includes(info.id)) {\n parent.children.push(info.id);\n }\n }\n}\n\nexport function unregisterComponent(id: string): void {\n const component = components.get(id);\n if (component?.parentId) {\n const parent = components.get(component.parentId);\n if (parent) {\n parent.children = parent.children.filter((cid) => cid !== id);\n }\n }\n components.delete(id);\n}\n\nexport function getComponentById(id: string): ComponentInfo | undefined {\n return components.get(id);\n}\n\nexport function getAllComponents(): ComponentInfo[] {\n return Array.from(components.values());\n}\n\nexport function getRootComponents(): ComponentInfo[] {\n return Array.from(components.values()).filter((c) => !c.parentId);\n}\n\nexport function clearComponents(): void {\n components.clear();\n}\n\n/**\n * 获取组件数量\n */\nexport function getComponentCount(): number {\n return components.size;\n}\n\n/**\n * 构建层级组件树\n * 将扁平的组件列表转换为树形结构\n */\nexport function buildComponentTree(): ComponentTreeNode[] {\n const roots: ComponentTreeNode[] = [];\n const nodeMap = new Map<string, ComponentTreeNode>();\n\n // 首先创建所有节点\n for (const component of components.values()) {\n const node: ComponentTreeNode = {\n id: component.id,\n name: component.name,\n type: 'component',\n children: [],\n props: component.props || {},\n emits: [],\n slots: Object.keys(component.slots || {}),\n };\n nodeMap.set(component.id, node);\n }\n\n // 然后建立父子关系\n for (const component of components.values()) {\n const node = nodeMap.get(component.id);\n if (!node) continue;\n\n if (component.parentId) {\n const parent = nodeMap.get(component.parentId);\n if (parent) {\n node.parent = component.parentId;\n parent.children.push(node);\n }\n } else {\n roots.push(node);\n }\n }\n\n return roots;\n}\n\n/**\n * 获取组件树(兼容旧接口,返回树形结构)\n */\nexport function getComponentTree(): ComponentTreeNode[] {\n return buildComponentTree();\n}\n\n/**\n * 清除组件注册表并重置计数器\n */\nexport function clearComponentRegistry(): void {\n components.clear();\n idCounter = 0;\n}\n\n/**\n * 组件实例接口(用于自动注册)\n */\nexport interface ComponentInstance {\n /** 组件类型/名称 */\n type?: string;\n /** 组件名称(备用) */\n name?: string;\n /** 组件 props */\n props?: Record<string, unknown>;\n /** 子组件实例列表 */\n children?: ComponentInstance[];\n /** 父组件 ID */\n parent?: string;\n /** 插槽 */\n slots?: Record<string, unknown>;\n}\n\n/**\n * 从组件实例自动提取信息并注册\n *\n * @description\n * 接受一个包含 type, props, children, parent 等字段的对象,\n * 自动生成组件 ID 并注册到组件树中。同时递归注册所有子组件。\n *\n * @param instance - 组件实例对象\n * @returns 注册后的组件 ID\n */\nexport function autoRegisterFromInstance(instance: ComponentInstance): string {\n const id = generateComponentId();\n const name = instance.type || instance.name || 'Anonymous';\n\n // 提取 props(过滤掉函数类型的值)\n const props: Record<string, unknown> = {};\n if (instance.props) {\n for (const [key, value] of Object.entries(instance.props)) {\n if (typeof value !== 'function') {\n props[key] = value;\n }\n }\n }\n\n const info: ComponentInfo = {\n id,\n name,\n parentId: instance.parent,\n children: [],\n props,\n slots: instance.slots,\n };\n\n registerComponent(info);\n\n // 递归注册子组件\n if (instance.children && Array.isArray(instance.children)) {\n for (const child of instance.children) {\n const childId = autoRegisterFromInstance({ ...child, parent: id });\n if (!info.children.includes(childId)) {\n info.children.push(childId);\n }\n }\n }\n\n return id;\n}\n","/**\n * DevTools 信号管理模块\n * 提供响应式信号的注册、查询和修改功能\n */\n\nexport type SignalType = 'ref' | 'reactive' | 'computed' | 'signal';\n\nexport interface SignalInfo {\n id: string;\n name: string;\n type: SignalType;\n value: unknown;\n componentId?: string;\n dependencies?: string[];\n dependents?: string[];\n}\n\nconst signals = new Map<string, SignalInfo>();\nlet signalIdCounter = 0;\n\n/**\n * 生成信号 ID\n */\nexport function generateSignalId(): string {\n return `signal-${++signalIdCounter}-${Date.now().toString(36)}`;\n}\n\n/**\n * 注册信号\n */\nexport function registerSignal(info: SignalInfo): void {\n signals.set(info.id, info);\n}\n\n/**\n * 注销信号\n */\nexport function unregisterSignal(id: string): void {\n signals.delete(id);\n}\n\n/**\n * 获取所有信号\n */\nexport function getSignals(): SignalInfo[] {\n return Array.from(signals.values());\n}\n\n/**\n * 通过 ID 获取信号\n */\nexport function getSignalById(id: string): SignalInfo | undefined {\n return signals.get(id);\n}\n\n/**\n * 获取信号值\n */\nexport function getSignalValue(id: string): unknown {\n const signal = signals.get(id);\n return signal?.value;\n}\n\n/**\n * 设置信号值\n */\nexport function setSignalValue(id: string, value: unknown): boolean {\n const signal = signals.get(id);\n if (!signal) return false;\n signal.value = value;\n return true;\n}\n\n/**\n * 通过组件 ID 获取信号\n */\nexport function getSignalsByComponent(componentId: string): SignalInfo[] {\n return Array.from(signals.values()).filter((s) => s.componentId === componentId);\n}\n\n/**\n * 清除所有信号\n */\nexport function clearSignals(): void {\n signals.clear();\n}\n\n/**\n * 清除信号注册表并重置计数器\n */\nexport function clearSignalRegistry(): void {\n signals.clear();\n signalIdCounter = 0;\n}\n","/**\n * DevTools 事件记录模块\n */\n\nexport interface EventRecord {\n id: string;\n type: string;\n componentId?: string;\n target?: string;\n timestamp: number;\n data?: unknown;\n}\n\nconst events: EventRecord[] = [];\nlet maxEvents = 1000;\nlet isRecording = false;\nconst eventSubscribers: Array<(event: EventRecord) => void> = [];\n\nexport function setMaxEvents(max: number): void {\n maxEvents = max;\n}\n\nexport function recordEvent(type: string, data?: unknown): EventRecord;\nexport function recordEvent(event: Omit<EventRecord, 'id' | 'timestamp'>): EventRecord;\nexport function recordEvent(\n typeOrEvent: string | Omit<EventRecord, 'id' | 'timestamp'>,\n data?: unknown,\n): EventRecord {\n let record: EventRecord;\n\n if (typeof typeOrEvent === 'string') {\n record = {\n id: `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`,\n timestamp: Date.now(),\n type: typeOrEvent,\n data,\n };\n } else {\n record = {\n ...typeOrEvent,\n id: `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`,\n timestamp: Date.now(),\n };\n }\n\n events.push(record);\n\n // 限制事件数量\n if (events.length > maxEvents) {\n events.splice(0, events.length - maxEvents);\n }\n\n // 通知订阅者\n eventSubscribers.forEach((callback) => {\n try {\n callback(record);\n } catch (e) {\n console.error('[DevTools Events] Subscriber error:', e);\n }\n });\n\n return record;\n}\n\nexport function getEvents(): EventRecord[] {\n return [...events];\n}\n\nexport function getEventsByComponent(componentId: string): EventRecord[] {\n return events.filter((e) => e.componentId === componentId);\n}\n\nexport function getEventsByType(type: string): EventRecord[] {\n return events.filter((e) => e.type === type);\n}\n\nexport function clearEvents(): void {\n events.length = 0;\n}\n\nexport function getEventStats(): Record<string, number> {\n const stats: Record<string, number> = {};\n events.forEach((e) => {\n stats[e.type] = (stats[e.type] || 0) + 1;\n });\n return stats;\n}\n\n/**\n * 开始记录事件\n */\nexport function startRecording(): void {\n isRecording = true;\n}\n\n/**\n * 停止记录事件\n */\nexport function stopRecording(): void {\n isRecording = false;\n}\n\n/**\n * 检查是否正在记录事件\n */\nexport function isEventRecording(): boolean {\n return isRecording;\n}\n\n/**\n * 订阅事件\n * @param callback - 事件回调函数\n * @returns 取消订阅函数\n */\nexport function subscribeEvents(callback: (event: EventRecord) => void): () => void {\n eventSubscribers.push(callback);\n return () => {\n const index = eventSubscribers.indexOf(callback);\n if (index > -1) {\n eventSubscribers.splice(index, 1);\n }\n };\n}\n\n/**\n * 获取事件数量\n */\nexport function getEventCount(): number {\n return events.length;\n}\n","/**\n * DevTools 状态快照管理模块\n */\n\nimport type { StateSnapshot, ComponentTreeNode, SignalInfo, DevToolsEvent } from './types';\nimport { setSignalValue } from './signals';\n\n// 重新导出 StateSnapshot 类型以保持兼容性\nexport type { StateSnapshot as Snapshot };\n\nconst snapshots = new Map<string, StateSnapshot>();\nlet snapshotIdCounter = 0;\n\n/**\n * 生成快照 ID\n */\nfunction generateSnapshotId(): string {\n return `snapshot-${++snapshotIdCounter}-${Date.now().toString(36)}`;\n}\n\n/**\n * 创建快照\n */\nexport function takeSnapshot(\n components?: ComponentTreeNode[],\n signals?: SignalInfo[],\n events?: DevToolsEvent[],\n): StateSnapshot {\n const snapshot: StateSnapshot = {\n id: generateSnapshotId(),\n timestamp: Date.now(),\n components: components || [],\n signals: signals || [],\n events: events || [],\n };\n snapshots.set(snapshot.id, snapshot);\n return snapshot;\n}\n\n/**\n * 创建快照(兼容旧接口)\n */\nexport function createSnapshot(\n id: string,\n data: Record<string, unknown>,\n description?: string,\n): StateSnapshot {\n const snapshot: StateSnapshot = {\n id,\n timestamp: Date.now(),\n components: [],\n signals: Object.entries(data).map(([name, value]) => ({\n id: `signal-${name}`,\n name,\n type: 'signal',\n value,\n dependencies: [],\n dependents: [],\n })),\n events: description\n ? [\n {\n id: `event-${Date.now()}`,\n type: 'store:mutation',\n timestamp: Date.now(),\n payload: { description },\n },\n ]\n : [],\n };\n snapshots.set(id, snapshot);\n return snapshot;\n}\n\n/**\n * 获取快照\n */\nexport function getSnapshot(id: string): StateSnapshot | undefined {\n return snapshots.get(id);\n}\n\n/**\n * 通过 ID 获取快照(兼容新接口)\n */\nexport function getSnapshotById(id: string): StateSnapshot | undefined {\n return snapshots.get(id);\n}\n\n/**\n * 获取所有快照\n */\nexport function getAllSnapshots(): StateSnapshot[] {\n return Array.from(snapshots.values()).sort((a, b) => a.timestamp - b.timestamp);\n}\n\n/**\n * 获取所有快照列表(兼容新接口)\n */\nexport function getSnapshots(): StateSnapshot[] {\n return getAllSnapshots();\n}\n\n/**\n * 删除快照\n */\nexport function deleteSnapshot(id: string): boolean {\n return snapshots.delete(id);\n}\n\n/**\n * 清除所有快照\n */\nexport function clearSnapshots(): void {\n snapshots.clear();\n}\n\n/**\n * 导出快照为 JSON\n */\nexport function exportSnapshots(): string {\n return JSON.stringify(getAllSnapshots(), null, 2);\n}\n\n/**\n * 从 JSON 导入快照\n */\nexport function importSnapshots(json: string): StateSnapshot[] {\n try {\n const parsed = JSON.parse(json) as StateSnapshot[];\n parsed.forEach((s) => snapshots.set(s.id, s));\n return parsed;\n } catch (e) {\n console.error('[DevTools Snapshots] Import failed:', e);\n return [];\n }\n}\n\n/**\n * 恢复快照\n *\n * @description\n * 遍历快照中的 signals,调用 setSignalValue 逐个恢复信号的值。\n * 如果某个信号恢复失败,会记录错误但不会中断其余信号的恢复。\n *\n * @param snapshot - 要恢复的状态快照\n * @returns 是否全部恢复成功\n */\nexport function restoreSnapshot(snapshot: StateSnapshot): boolean {\n try {\n if (!snapshot.signals || snapshot.signals.length === 0) {\n console.warn('[DevTools Snapshots] No signals to restore in snapshot:', snapshot.id);\n return true;\n }\n\n let allSuccess = true;\n\n for (const signalInfo of snapshot.signals) {\n try {\n const success = setSignalValue(signalInfo.id, signalInfo.value);\n if (!success) {\n console.warn(\n `[DevTools Snapshots] Failed to restore signal \"${signalInfo.name}\" (id: ${signalInfo.id}): not found in registry`,\n );\n allSuccess = false;\n }\n } catch (err) {\n console.error(`[DevTools Snapshots] Error restoring signal \"${signalInfo.name}\":`, err);\n allSuccess = false;\n }\n }\n\n console.warn('[DevTools Snapshots] Snapshot restored:', snapshot.id);\n return allSuccess;\n } catch (e) {\n console.error('[DevTools Snapshots] Restore failed:', e);\n return false;\n }\n}\n","/**\n * DevTools 与面板通信桥接模块\n */\n\nexport type MessageType =\n | 'init'\n | 'update-component-tree'\n | 'update-signals'\n | 'edit-state'\n | 'time-travel'\n | 'performance-data'\n | string;\n\nexport interface BridgeMessage {\n type: MessageType;\n payload?: unknown;\n timestamp?: number;\n}\n\ntype MessageHandler = (message: BridgeMessage) => void;\ntype GenericMessageHandler = (message: unknown) => void;\n\nconst handlers = new Map<MessageType, Set<MessageHandler>>();\nconst genericHandlers = new Set<GenericMessageHandler>();\nlet isActive = false;\n\n/**\n * 注册面板消息处理器\n * @param type - 消息类型\n * @param handler - 消息处理器\n * @returns 取消注册函数\n */\nexport function onPanelMessage(type: MessageType, handler: MessageHandler): () => void;\n/**\n * 注册通用面板消息处理器(接收所有类型消息)\n * @param handler - 消息处理器\n * @returns 取消注册函数\n */\nexport function onPanelMessage(handler: GenericMessageHandler): () => void;\nexport function onPanelMessage(\n typeOrHandler: MessageType | GenericMessageHandler,\n handler?: MessageHandler,\n): () => void {\n // 处理通用处理器(只传入一个函数参数)\n if (typeof typeOrHandler === 'function') {\n genericHandlers.add(typeOrHandler);\n return () => {\n genericHandlers.delete(typeOrHandler);\n };\n }\n\n // 处理特定类型处理器\n const type = typeOrHandler;\n if (!handler) {\n throw new Error('Handler is required when specifying a message type');\n }\n\n if (!handlers.has(type)) {\n handlers.set(type, new Set());\n }\n handlers.get(type)!.add(handler);\n\n return () => {\n handlers.get(type)?.delete(handler);\n };\n}\n\n/**\n * 发送消息到面板\n */\nexport function sendToPanel(message: BridgeMessage): void {\n // 实际实现中,这里会通过 chrome.runtime 或 window.postMessage 发送\n // 简化版本:直接触发对应类型的处理器\n const typeHandlers = handlers.get(message.type);\n if (typeHandlers) {\n typeHandlers.forEach((handler) => {\n try {\n handler(message);\n } catch (e) {\n console.error('[DevTools Bridge] Handler error:', e);\n }\n });\n }\n\n // 触发通用处理器\n genericHandlers.forEach((handler) => {\n try {\n handler(message);\n } catch (e) {\n console.error('[DevTools Bridge] Generic handler error:', e);\n }\n });\n}\n\n/**\n * 广播消息到面板\n */\nexport function broadcastToPanel(message: BridgeMessage): void {\n // 广播到所有类型的处理器\n handlers.forEach((typeHandlers, type) => {\n if (type !== message.type) return;\n typeHandlers.forEach((handler) => {\n try {\n handler(message);\n } catch (e) {\n console.error('[DevTools Bridge] Broadcast error:', e);\n }\n });\n });\n\n // 触发通用处理器\n genericHandlers.forEach((handler) => {\n try {\n handler(message);\n } catch (e) {\n console.error('[DevTools Bridge] Generic broadcast error:', e);\n }\n });\n}\n\n/**\n * 清除所有处理器\n */\nexport function clearHandlers(): void {\n handlers.clear();\n genericHandlers.clear();\n}\n\n/**\n * 激活桥接\n */\nexport function activateBridge(): void {\n isActive = true;\n}\n\n/**\n * 停用桥接\n */\nexport function deactivateBridge(): void {\n isActive = false;\n}\n\n/**\n * 检查桥接是否激活\n */\nexport function isBridgeActive(): boolean {\n return isActive;\n}\n","/**\n * @lytjs/devtools - Public API implementation\n */\n\nimport type {\n DevToolsAPI,\n DevToolsState,\n EventType,\n StateSnapshot,\n ComponentTreeNode,\n SignalInfo,\n DevToolsEvent,\n} from './types';\nimport { getState, enable, disable } from './state';\nimport { getComponentTree, getComponentById } from './component-tree';\nimport { getSignals, getSignalById } from './signals';\nimport {\n startRecording as startEventRecording,\n stopRecording as stopEventRecording,\n getEvents,\n clearEvents,\n} from './events';\nimport { takeSnapshot, restoreSnapshot, getSnapshots } from './snapshots';\nimport { sendToPanel, onPanelMessage } from './bridge';\n\nexport function createDevToolsAPI(): DevToolsAPI {\n return {\n getState(): DevToolsState {\n return getState();\n },\n enable(): void {\n enable();\n },\n disable(): void {\n disable();\n },\n getComponentTree(): ComponentTreeNode[] {\n return getComponentTree() as unknown as ComponentTreeNode[];\n },\n getComponentById(id: string): ComponentTreeNode | undefined {\n return getComponentById(id) as unknown as ComponentTreeNode | undefined;\n },\n getSignals(): SignalInfo[] {\n return getSignals() as unknown as SignalInfo[];\n },\n getSignalValue(id: string): unknown {\n const signalInfo = getSignalById(id);\n return signalInfo?.value;\n },\n startRecording(): void {\n startEventRecording();\n },\n stopRecording(): void {\n stopEventRecording();\n },\n getEvents(filter?: EventType[]): DevToolsEvent[] {\n const allEvents = getEvents() as unknown as DevToolsEvent[];\n if (!filter) return allEvents;\n return allEvents.filter((e) => filter.includes(e.type as EventType));\n },\n clearEvents(): void {\n clearEvents();\n },\n takeSnapshot(): StateSnapshot {\n return takeSnapshot();\n },\n restoreSnapshot(snapshot: StateSnapshot): void {\n restoreSnapshot(snapshot);\n },\n getSnapshots(): StateSnapshot[] {\n return getSnapshots();\n },\n sendToPanel(message: object): void {\n sendToPanel(message as Parameters<typeof sendToPanel>[0]);\n },\n onPanelMessage(handler: (message: object) => void): () => void {\n return onPanelMessage(handler as Parameters<typeof onPanelMessage>[0]);\n },\n };\n}\n","/**\n * @lytjs/devtools - Store integration\n *\n * Provides hooks for @lytjs/store to integrate with DevTools.\n */\n\nimport { recordEvent, isEventRecording } from './events';\nimport { registerSignal, unregisterSignal } from './signals';\nimport { generateId } from '@lytjs/common-string';\n\n/**\n * Track a store mutation in DevTools\n */\nexport function trackStoreMutation(storeId: string, type: string, payload: unknown): void {\n if (!isEventRecording()) return;\n\n recordEvent('store:mutation', { storeId, mutationType: type, payload });\n}\n\n/**\n * Register a store's state signals for inspection\n */\nexport function registerStoreSignals(\n storeId: string,\n state: Record<string, unknown>,\n): Map<string, string> {\n const signalIds = new Map<string, string>();\n\n for (const [key, value] of Object.entries(state)) {\n const id = generateId('signal');\n const name = `${storeId}.${key}`;\n registerSignal({ id, name, type: 'signal', value });\n signalIds.set(key, id);\n }\n\n return signalIds;\n}\n\n/**\n * Unregister a store's signals\n */\nexport function unregisterStoreSignals(signalIds: Map<string, string>): void {\n for (const id of signalIds.values()) {\n unregisterSignal(id);\n }\n}\n","/**\n * @lytjs/devtools - Router integration\n *\n * Provides hooks for @lytjs/router to integrate with DevTools.\n */\n\nimport { recordEvent, isEventRecording } from './events';\n\n/**\n * Track a router navigation in DevTools\n */\nexport function trackRouterNavigation(\n from: { path: string; fullPath: string },\n to: { path: string; fullPath: string },\n): void {\n if (!isEventRecording()) return;\n\n recordEvent('router:navigation', {\n from: { path: from.path, fullPath: from.fullPath },\n to: { path: to.path, fullPath: to.fullPath },\n });\n}\n","/**\n * @lytjs/devtools - State Editor Panel\n *\n * Provides in-panel editing of reactive state (ref/reactive/signal).\n * Changes are immediately reflected in the view.\n */\n\nimport type { SignalInfo } from '../types';\nimport { setSignalValue, getSignals } from '../signals';\nimport { sendToPanel, onPanelMessage } from '../bridge';\nimport { recordEvent } from '../events';\n\n// ===== Types =====\n\nexport interface StateEditMessage {\n type: 'edit-state';\n componentId: string;\n path: string;\n value: unknown;\n}\n\nexport interface StateEditResult {\n success: boolean;\n error?: string;\n oldValue?: unknown;\n newValue?: unknown;\n}\n\nexport interface ComponentState {\n componentId: string;\n componentName: string;\n state: Record<string, StateValue>;\n props: Record<string, StateValue>;\n}\n\nexport interface StateValue {\n type: 'ref' | 'reactive' | 'computed' | 'signal' | 'primitive';\n value: unknown;\n editable: boolean;\n path: string;\n}\n\n// ===== State Editor State =====\n\ninterface EditorState {\n selectedComponentId: string | null;\n expandedPaths: Set<string>;\n editHistory: StateEditRecord[];\n}\n\ninterface StateEditRecord {\n id: string;\n timestamp: number;\n componentId: string;\n path: string;\n oldValue: unknown;\n newValue: unknown;\n}\n\nconst editorState: EditorState = {\n selectedComponentId: null,\n expandedPaths: new Set(),\n editHistory: [],\n};\n\n// ===== Component State Extraction =====\n\n/**\n * Extract state from a component instance\n */\nexport function extractComponentState(componentId: string): ComponentState | null {\n const component = getComponentById(componentId);\n if (!component) return null;\n\n const state: Record<string, StateValue> = {};\n const props: Record<string, StateValue> = {};\n\n // Extract props\n for (const [key, value] of Object.entries(component.props || {})) {\n props[key] = {\n type: 'primitive',\n value,\n editable: true,\n path: `props.${key}`,\n };\n }\n\n // Extract signals associated with this component\n const signals = getSignals();\n for (const signal of signals) {\n // Check if signal belongs to this component (by naming convention or metadata)\n if (\n isSignalBelongsToComponent(\n signal as Parameters<typeof isSignalBelongsToComponent>[0],\n componentId,\n )\n ) {\n state[signal.name] = {\n type: signal.type,\n value: signal.value,\n editable: signal.type !== 'computed',\n path: signal.name,\n };\n }\n }\n\n return {\n componentId,\n componentName: component.name,\n state,\n props,\n };\n}\n\n/**\n * Check if a signal belongs to a component\n * This uses heuristics: signal name prefix or metadata\n */\ninterface SignalWithComponentId extends SignalInfo {\n componentId?: string;\n}\n\nfunction isSignalBelongsToComponent(signal: SignalInfo, componentId: string): boolean {\n // Check for component metadata in signal\n const signalWithMeta = signal as SignalWithComponentId;\n if (signalWithMeta.componentId === componentId) {\n return true;\n }\n\n // Check naming convention: componentName_stateName\n const component = getComponentById(componentId);\n if (component && signal.name.startsWith(`${component.name}_`)) {\n return true;\n }\n\n return false;\n}\n\n// ===== State Editing =====\n\n/**\n * Apply a state edit to a component\n */\nexport function applyStateEdit(componentId: string, path: string, value: unknown): StateEditResult {\n try {\n // Get current value for history\n const oldValue = getStateValue(componentId, path);\n\n // Find the signal to update\n const signalId = findSignalIdForPath(componentId, path);\n if (!signalId) {\n return {\n success: false,\n error: `Signal not found for path: ${path}`,\n };\n }\n\n // Update the signal value\n const success = setSignalValue(signalId, value);\n if (!success) {\n return {\n success: false,\n error: 'Failed to set signal value',\n };\n }\n\n // Record in history\n const record: StateEditRecord = {\n id: `edit-${Date.now()}`,\n timestamp: Date.now(),\n componentId,\n path,\n oldValue,\n newValue: value,\n };\n editorState.editHistory.push(record);\n\n // Record event for time travel\n recordEvent('signal:changed', {\n signalId,\n path,\n oldValue,\n newValue: value,\n componentId,\n });\n\n // Notify panel of the change\n sendToPanel({\n type: 'STATE_EDITED',\n payload: {\n componentId,\n path,\n oldValue,\n newValue: value,\n timestamp: record.timestamp,\n },\n });\n\n return {\n success: true,\n oldValue,\n newValue: value,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Get current value at a path\n */\nfunction getStateValue(componentId: string, path: string): unknown {\n const componentState = extractComponentState(componentId);\n if (!componentState) return undefined;\n\n const parts = path.split('.');\n let current: unknown = componentState.state;\n\n for (const part of parts) {\n if (current && typeof current === 'object' && part in current) {\n current = (current as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n\n return current;\n}\n\n/**\n * Find signal ID for a given path\n */\nfunction findSignalIdForPath(componentId: string, path: string): string | null {\n const signals = getSignals();\n const component = getComponentById(componentId);\n\n for (const signal of signals) {\n // Match by component association and path\n if (\n isSignalBelongsToComponent(\n signal as Parameters<typeof isSignalBelongsToComponent>[0],\n componentId,\n )\n ) {\n const stateName = component\n ? signal.name.substring(component.name.length + 1) // 使用 substring 而不是 replace\n : signal.name;\n if (stateName === path || signal.name === path) {\n return signal.id;\n }\n }\n }\n\n return null;\n}\n\n// ===== Nested State Editing =====\n\n/**\n * Set a nested value in an object by path\n */\nexport function setNestedValue(\n obj: Record<string, unknown>,\n path: string,\n value: unknown,\n): boolean {\n const parts = path.split('.');\n let current: Record<string, unknown> = obj;\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]!;\n if (!(part in current) || typeof current[part] !== 'object') {\n current[part] = {};\n }\n current = current[part];\n }\n\n const lastPart = parts[parts.length - 1]!;\n current[lastPart] = value;\n return true;\n}\n\n/**\n * Get a nested value from an object by path\n */\nexport function getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = obj;\n\n for (const part of parts) {\n if (current && typeof current === 'object' && part in (current as Record<string, unknown>)) {\n current = (current as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n\n return current;\n}\n\n// ===== Value Parsing =====\n\n/**\n * Parse user input into appropriate type\n */\nexport function parseValue(input: string, targetType: string): unknown {\n const trimmed = input.trim();\n\n // Try to parse as JSON first\n if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']')) ||\n trimmed === 'true' ||\n trimmed === 'false' ||\n trimmed === 'null' ||\n /^-?\\d+(\\.\\d+)?$/.test(trimmed)\n ) {\n try {\n return JSON.parse(trimmed);\n } catch {\n // Fall through to string\n }\n }\n\n // Handle special types\n switch (targetType) {\n case 'number':\n return parseFloat(trimmed) || 0;\n case 'boolean':\n return trimmed === 'true' || trimmed === '1';\n case 'string':\n default:\n return trimmed;\n }\n}\n\n/**\n * Format value for display\n */\nexport function formatValue(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'string') return `\"${value}\"`;\n if (typeof value === 'function') return 'ƒ()';\n if (Array.isArray(value)) return `Array(${value.length})`;\n if (typeof value === 'object') {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return '{...}';\n }\n }\n return String(value);\n}\n\n// ===== History Management =====\n\n/**\n * Get edit history\n */\nexport function getEditHistory(): StateEditRecord[] {\n return [...editorState.editHistory];\n}\n\n/**\n * Clear edit history\n */\nexport function clearEditHistory(): void {\n editorState.editHistory = [];\n}\n\n/**\n * Undo last edit (if possible)\n */\nexport function undoLastEdit(): StateEditResult {\n const lastEdit = editorState.editHistory.pop();\n if (!lastEdit) {\n return { success: false, error: 'No edits to undo' };\n }\n\n return applyStateEdit(lastEdit.componentId, lastEdit.path, lastEdit.oldValue);\n}\n\n// ===== Panel Integration =====\n\n/**\n * Initialize state editor panel\n */\nexport function initStateEditor(): () => void {\n // Listen for messages from panel\n const unsubscribe = onPanelMessage((message: unknown) => {\n const msg = message as { type: string; data?: unknown };\n\n switch (msg.type) {\n case 'GET_COMPONENT_STATE':\n handleGetComponentState(msg.data as { componentId: string });\n break;\n\n case 'EDIT_STATE':\n handleEditState(msg.data as StateEditMessage);\n break;\n\n case 'GET_EDIT_HISTORY':\n sendToPanel({\n type: 'EDIT_HISTORY',\n payload: getEditHistory(),\n });\n break;\n\n case 'UNDO_LAST_EDIT':\n handleUndoLastEdit();\n break;\n }\n });\n\n return unsubscribe;\n}\n\nfunction handleGetComponentState(data: { componentId: string } | undefined): void {\n if (!data?.componentId) return;\n\n const state = extractComponentState(data.componentId);\n sendToPanel({\n type: 'COMPONENT_STATE',\n payload: state,\n });\n}\n\nfunction handleEditState(data: StateEditMessage | undefined): void {\n if (!data) return;\n\n const result = applyStateEdit(data.componentId, data.path, data.value);\n sendToPanel({\n type: 'STATE_EDIT_RESULT',\n payload: {\n ...result,\n componentId: data.componentId,\n path: data.path,\n },\n });\n}\n\nfunction handleUndoLastEdit(): void {\n const result = undoLastEdit();\n sendToPanel({\n type: 'UNDO_RESULT',\n payload: result,\n });\n}\n\n// ===== Exports =====\n\nexport { editorState };\n","/**\n * @lytjs/devtools - Time Travel Debugging Panel\n *\n * Records all state changes and supports forward/backward/jump to any point in time.\n */\n\nimport type { StateSnapshot } from '../types';\nimport { subscribeEvents, clearEvents, recordEvent as _recordEvent } from '../events';\nimport { setSignalValue } from '../signals';\nimport { sendToPanel, onPanelMessage } from '../bridge';\nimport { takeSnapshot, restoreSnapshot, getSnapshots } from '../snapshots';\n\n// ===== Types =====\n\nexport interface HistoryEntry {\n id: string;\n timestamp: number;\n type: 'state-change' | 'event' | 'snapshot';\n description: string;\n data: {\n event?: DevToolsEvent;\n snapshot?: StateSnapshot;\n stateDiff?: StateDiff[];\n };\n index: number;\n}\n\nexport interface StateDiff {\n path: string;\n oldValue: unknown;\n newValue: unknown;\n}\n\nexport interface TimeTravelState {\n isRecording: boolean;\n currentIndex: number;\n history: HistoryEntry[];\n maxHistorySize: number;\n}\n\nexport interface ExportData {\n version: string;\n exportedAt: string;\n history: HistoryEntry[];\n snapshots: StateSnapshot[];\n metadata: {\n totalEvents: number;\n recordingDuration: number;\n appVersion?: string;\n };\n}\n\n// ===== State =====\n\nconst timeTravelState: TimeTravelState = {\n isRecording: false,\n currentIndex: -1,\n history: [],\n maxHistorySize: 1000,\n};\n\nlet recordingStartTime = 0;\nlet unsubscribeEvents: (() => void) | null = null;\n\n// ===== History Recording =====\n\n/**\n * Start recording state changes\n */\nexport function startHistoryRecording(): void {\n if (timeTravelState.isRecording) return;\n\n timeTravelState.isRecording = true;\n recordingStartTime = Date.now();\n\n // Subscribe to events\n unsubscribeEvents = subscribeEvents((event) => {\n const eventWithPayload = event as DevToolsEvent;\n addHistoryEntry({\n type: 'event',\n description: formatEventDescription(eventWithPayload),\n data: { event: eventWithPayload },\n });\n });\n\n // Record initial snapshot\n const snapshot = takeSnapshot();\n addHistoryEntry({\n type: 'snapshot',\n description: 'Initial state',\n data: { snapshot },\n });\n\n sendToPanel({\n type: 'TIME_TRAVEL_STATUS',\n payload: { isRecording: true, currentIndex: timeTravelState.currentIndex },\n });\n}\n\n/**\n * Stop recording state changes\n */\nexport function stopHistoryRecording(): void {\n if (!timeTravelState.isRecording) return;\n\n timeTravelState.isRecording = false;\n\n if (unsubscribeEvents) {\n unsubscribeEvents();\n unsubscribeEvents = null;\n }\n\n sendToPanel({\n type: 'TIME_TRAVEL_STATUS',\n payload: { isRecording: false, currentIndex: timeTravelState.currentIndex },\n });\n}\n\n/**\n * Add a history entry\n */\nfunction addHistoryEntry(entry: Omit<HistoryEntry, 'id' | 'timestamp' | 'index'>): void {\n const historyEntry: HistoryEntry = {\n ...entry,\n id: `history-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,\n timestamp: Date.now(),\n index: timeTravelState.history.length,\n };\n\n timeTravelState.history.push(historyEntry);\n\n // Limit history size\n if (timeTravelState.history.length > timeTravelState.maxHistorySize) {\n timeTravelState.history.shift();\n // Re-index\n timeTravelState.history.forEach((h, i) => {\n h.index = i;\n });\n }\n\n // Update current index to latest\n timeTravelState.currentIndex = timeTravelState.history.length - 1;\n\n // Notify panel\n sendToPanel({\n type: 'HISTORY_UPDATED',\n payload: {\n entry: historyEntry,\n totalEntries: timeTravelState.history.length,\n currentIndex: timeTravelState.currentIndex,\n },\n });\n}\n\n// 定义 payload 类型接口\ninterface ComponentPayload {\n name?: string;\n}\n\ninterface SignalPayload {\n path?: string;\n}\n\ninterface StorePayload {\n type?: string;\n}\n\ninterface RouterPayload {\n to?: string;\n}\n\ninterface ErrorPayload {\n message?: string;\n}\n\n/**\n * Format event description\n */\nfunction formatEventDescription(event: DevToolsEvent): string {\n switch (event.type) {\n case 'component:created':\n return `Component created: ${(event.payload as ComponentPayload)?.name || 'Unknown'}`;\n case 'component:mounted':\n return `Component mounted: ${(event.payload as ComponentPayload)?.name || 'Unknown'}`;\n case 'component:updated':\n return `Component updated: ${(event.payload as ComponentPayload)?.name || 'Unknown'}`;\n case 'component:unmounted':\n return `Component unmounted: ${(event.payload as ComponentPayload)?.name || 'Unknown'}`;\n case 'signal:changed':\n return `State changed: ${(event.payload as SignalPayload)?.path || 'Unknown'}`;\n case 'store:mutation':\n return `Store mutation: ${(event.payload as StorePayload)?.type || 'Unknown'}`;\n case 'router:navigation':\n return `Navigation: ${(event.payload as RouterPayload)?.to || 'Unknown'}`;\n case 'error:captured':\n return `Error: ${(event.payload as ErrorPayload)?.message || 'Unknown'}`;\n default:\n return `Event: ${event.type}`;\n }\n}\n\n// ===== Time Navigation =====\n\n/**\n * Jump to a specific point in history\n */\nexport function jumpToHistory(index: number): boolean {\n if (index < 0 || index >= timeTravelState.history.length) {\n return false;\n }\n\n const entry = timeTravelState.history[index]!;\n timeTravelState.currentIndex = index;\n\n if (entry.data.snapshot) {\n restoreSnapshot(entry.data.snapshot);\n } else if (entry.data.event?.type === 'signal:changed') {\n interface SignalChangePayload {\n signalId?: string;\n newValue?: unknown;\n }\n const payload = entry.data.event.payload as SignalChangePayload;\n if (payload?.signalId && payload?.newValue !== undefined) {\n setSignalValue(payload.signalId, payload.newValue);\n }\n }\n\n sendToPanel({\n type: 'TIME_TRAVEL_JUMP',\n payload: {\n index,\n entry,\n canGoBack: index > 0,\n canGoForward: index < timeTravelState.history.length - 1,\n },\n });\n\n return true;\n}\n\n/**\n * Go back one step in history\n */\nexport function goBack(): boolean {\n if (timeTravelState.currentIndex <= 0) {\n return false;\n }\n return jumpToHistory(timeTravelState.currentIndex - 1);\n}\n\n/**\n * Go forward one step in history\n */\nexport function goForward(): boolean {\n if (timeTravelState.currentIndex >= timeTravelState.history.length - 1) {\n return false;\n }\n return jumpToHistory(timeTravelState.currentIndex + 1);\n}\n\n/**\n * Go to the beginning of history\n */\nexport function goToStart(): boolean {\n if (timeTravelState.history.length === 0) {\n return false;\n }\n return jumpToHistory(0);\n}\n\n/**\n * Go to the end of history (latest state)\n */\nexport function goToEnd(): boolean {\n if (timeTravelState.history.length === 0) {\n return false;\n }\n return jumpToHistory(timeTravelState.history.length - 1);\n}\n\n// ===== History Management =====\n\n/**\n * Get all history entries\n */\nexport function getHistory(): HistoryEntry[] {\n return [...timeTravelState.history];\n}\n\n/**\n * Get current history index\n */\nexport function getCurrentIndex(): number {\n return timeTravelState.currentIndex;\n}\n\n/**\n * Clear history\n */\nexport function clearHistory(): void {\n timeTravelState.history = [];\n timeTravelState.currentIndex = -1;\n clearEvents();\n\n sendToPanel({\n type: 'HISTORY_CLEARED',\n payload: {},\n });\n}\n\n/**\n * Get history entry at index\n */\nexport function getHistoryEntry(index: number): HistoryEntry | undefined {\n return timeTravelState.history[index];\n}\n\n// ===== Export/Import =====\n\n/**\n * Export history and snapshots to JSON\n */\nexport function exportHistory(): string {\n const exportData: ExportData = {\n version: '1.0.0',\n exportedAt: new Date().toISOString(),\n history: timeTravelState.history,\n snapshots: getSnapshots(),\n metadata: {\n totalEvents: timeTravelState.history.filter((h) => h.type === 'event').length,\n recordingDuration: recordingStartTime ? Date.now() - recordingStartTime : 0,\n },\n };\n\n return JSON.stringify(exportData, null, 2);\n}\n\n/**\n * Import history from JSON\n */\nexport function importHistory(json: string): boolean {\n try {\n const data: ExportData = JSON.parse(json);\n\n // Validate version\n if (!data.version || !data.history) {\n throw new Error('Invalid export format');\n }\n\n // Clear existing history\n clearHistory();\n\n // Import history\n timeTravelState.history = data.history.map((h, i) => ({\n ...h,\n index: i,\n }));\n timeTravelState.currentIndex = timeTravelState.history.length - 1;\n\n // Notify panel\n sendToPanel({\n type: 'HISTORY_IMPORTED',\n payload: {\n totalEntries: timeTravelState.history.length,\n currentIndex: timeTravelState.currentIndex,\n },\n });\n\n return true;\n } catch (error) {\n sendToPanel({\n type: 'HISTORY_IMPORT_ERROR',\n payload: { error: error instanceof Error ? error.message : String(error) },\n });\n return false;\n }\n}\n\n/**\n * Download history as file\n */\nexport function downloadHistory(filename?: string): void {\n // 浏览器环境检测\n if (\n typeof document === 'undefined' ||\n typeof Blob === 'undefined' ||\n typeof URL === 'undefined'\n ) {\n console.warn('[DevTools TimeTravel] downloadHistory is only available in browser environment');\n return;\n }\n\n const data = exportHistory();\n const blob = new Blob([data], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n\n const a = document.createElement('a');\n a.href = url;\n a.download = filename || `lytjs-history-${new Date().toISOString().slice(0, 10)}.json`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n\n URL.revokeObjectURL(url);\n}\n\n// ===== State Comparison =====\n\n/**\n * Compare two snapshots and return differences\n */\nexport function compareSnapshots(snapshot1: StateSnapshot, snapshot2: StateSnapshot): StateDiff[] {\n const diffs: StateDiff[] = [];\n\n // Compare signals\n const signals1 = new Map(snapshot1.signals.map((s) => [s.id, s]));\n const signals2 = new Map(snapshot2.signals.map((s) => [s.id, s]));\n\n // Find changed and added signals\n for (const [id, signal2] of signals2) {\n const signal1 = signals1.get(id);\n if (!signal1) {\n diffs.push({\n path: `signals.${signal2.name}`,\n oldValue: undefined,\n newValue: signal2.value,\n });\n } else if (JSON.stringify(signal1.value) !== JSON.stringify(signal2.value)) {\n diffs.push({\n path: `signals.${signal2.name}`,\n oldValue: signal1.value,\n newValue: signal2.value,\n });\n }\n }\n\n // Find removed signals\n for (const [id, signal1] of signals1) {\n if (!signals2.has(id)) {\n diffs.push({\n path: `signals.${signal1.name}`,\n oldValue: signal1.value,\n newValue: undefined,\n });\n }\n }\n\n return diffs;\n}\n\n/**\n * Get state diff for a history entry\n */\nexport function getStateDiffForEntry(index: number): StateDiff[] {\n if (index <= 0 || index >= timeTravelState.history.length) {\n return [];\n }\n\n const currentEntry = timeTravelState.history[index]!;\n const previousEntry = timeTravelState.history[index - 1]!;\n\n if (currentEntry.data.snapshot && previousEntry.data.snapshot) {\n return compareSnapshots(previousEntry.data.snapshot, currentEntry.data.snapshot);\n }\n\n return currentEntry.data.stateDiff || [];\n}\n\n// ===== Panel Integration =====\n\n/**\n * Initialize time travel panel\n */\nexport function initTimeTravel(): () => void {\n const unsubscribe = onPanelMessage((message: unknown) => {\n const msg = message as { type: string; data?: unknown };\n\n switch (msg.type) {\n case 'START_TIME_TRAVEL_RECORDING':\n startHistoryRecording();\n break;\n\n case 'STOP_TIME_TRAVEL_RECORDING':\n stopHistoryRecording();\n break;\n\n case 'JUMP_TO_HISTORY':\n handleJumpToHistory(msg.data as { index: number });\n break;\n\n case 'GO_BACK':\n handleGoBack();\n break;\n\n case 'GO_FORWARD':\n handleGoForward();\n break;\n\n case 'GO_TO_START':\n handleGoToStart();\n break;\n\n case 'GO_TO_END':\n handleGoToEnd();\n break;\n\n case 'GET_HISTORY':\n sendToPanel({\n type: 'HISTORY_LIST',\n payload: {\n history: getHistory(),\n currentIndex: getCurrentIndex(),\n isRecording: timeTravelState.isRecording,\n },\n });\n break;\n\n case 'CLEAR_HISTORY':\n clearHistory();\n break;\n\n case 'EXPORT_HISTORY':\n handleExportHistory();\n break;\n\n case 'IMPORT_HISTORY':\n handleImportHistory(msg.data as { json: string });\n break;\n\n case 'GET_STATE_DIFF':\n handleGetStateDiff(msg.data as { index: number });\n break;\n }\n });\n\n return unsubscribe;\n}\n\nfunction handleJumpToHistory(data: { index: number } | undefined): void {\n if (data) {\n const success = jumpToHistory(data.index);\n sendToPanel({\n type: 'JUMP_RESULT',\n payload: { success, index: data.index },\n });\n }\n}\n\nfunction handleGoBack(): void {\n const success = goBack();\n sendToPanel({\n type: 'NAVIGATION_RESULT',\n payload: { direction: 'back', success, currentIndex: getCurrentIndex() },\n });\n}\n\nfunction handleGoForward(): void {\n const success = goForward();\n sendToPanel({\n type: 'NAVIGATION_RESULT',\n payload: { direction: 'forward', success, currentIndex: getCurrentIndex() },\n });\n}\n\nfunction handleGoToStart(): void {\n const success = goToStart();\n sendToPanel({\n type: 'NAVIGATION_RESULT',\n payload: { direction: 'start', success, currentIndex: getCurrentIndex() },\n });\n}\n\nfunction handleGoToEnd(): void {\n const success = goToEnd();\n sendToPanel({\n type: 'NAVIGATION_RESULT',\n payload: { direction: 'end', success, currentIndex: getCurrentIndex() },\n });\n}\n\nfunction handleExportHistory(): void {\n const data = exportHistory();\n sendToPanel({\n type: 'HISTORY_EXPORTED',\n payload: { json: data },\n });\n}\n\nfunction handleImportHistory(data: { json: string } | undefined): void {\n if (data?.json) {\n const success = importHistory(data.json);\n sendToPanel({\n type: 'HISTORY_IMPORT_RESULT',\n payload: { success },\n });\n }\n}\n\nfunction handleGetStateDiff(data: { index: number } | undefined): void {\n if (data) {\n const diffs = getStateDiffForEntry(data.index);\n sendToPanel({\n type: 'STATE_DIFF',\n payload: { index: data.index, diffs },\n });\n }\n}\n\n// ===== Exports =====\n\nexport { timeTravelState };\n","/**\n * @lytjs/devtools - Performance Panel\n *\n * Displays component render times, re-render counts, memory usage and other performance metrics.\n */\n\nimport { sendToPanel, onPanelMessage } from '../bridge';\nimport { recordEvent } from '../events';\n\n// ===== Types =====\n\nexport interface ComponentPerformance {\n componentId: string;\n componentName: string;\n renderCount: number;\n totalRenderTime: number;\n averageRenderTime: number;\n lastRenderTime: number;\n minRenderTime: number;\n maxRenderTime: number;\n renderTimes: number[]; // Last N render times\n lastRenderTimestamp: number;\n updateFrequency: 'low' | 'medium' | 'high' | 'extreme';\n}\n\nexport interface PerformanceMetrics {\n timestamp: number;\n totalComponents: number;\n totalRenders: number;\n averageRenderTime: number;\n memoryUsage?: MemoryInfo;\n fps?: number;\n}\n\nexport interface MemoryInfo {\n usedJSHeapSize: number;\n totalJSHeapSize: number;\n jsHeapSizeLimit: number;\n}\n\nexport interface RenderHeatmapData {\n componentId: string;\n componentName: string;\n intensity: number; // 0-1\n renderCount: number;\n frequency: 'low' | 'medium' | 'high' | 'extreme';\n}\n\nexport interface PerformanceTimelineEntry {\n timestamp: number;\n metrics: PerformanceMetrics;\n slowRenders: SlowRenderInfo[];\n}\n\nexport interface SlowRenderInfo {\n componentId: string;\n componentName: string;\n renderTime: number;\n timestamp: number;\n}\n\nexport interface PerformanceConfig {\n maxRenderHistory: number;\n slowRenderThreshold: number; // ms\n timelineMaxSize: number;\n updateInterval: number; // ms\n}\n\n// ===== State =====\n\nconst performanceConfig: PerformanceConfig = {\n maxRenderHistory: 50,\n slowRenderThreshold: 16, // 60fps = 16.67ms per frame\n timelineMaxSize: 100,\n updateInterval: 1000,\n};\n\nconst componentPerformanceMap = new Map<string, ComponentPerformance>();\nconst performanceTimeline: PerformanceTimelineEntry[] = [];\nlet isMonitoring = false;\nlet updateIntervalId: ReturnType<typeof setInterval> | null = null;\nlet frameCount = 0;\nlet lastFpsUpdate = 0;\nlet currentFps = 0;\n\n// ===== Component Performance Tracking =====\n\n/**\n * Record a component render\n */\nexport function recordComponentRender(\n componentId: string,\n componentName: string,\n renderTime: number,\n): void {\n if (!isMonitoring) return;\n\n const existing = componentPerformanceMap.get(componentId);\n const now = Date.now();\n\n if (existing) {\n existing.renderCount++;\n existing.totalRenderTime += renderTime;\n existing.averageRenderTime = existing.totalRenderTime / existing.renderCount;\n existing.lastRenderTime = renderTime;\n existing.minRenderTime = Math.min(existing.minRenderTime, renderTime);\n existing.maxRenderTime = Math.max(existing.maxRenderTime, renderTime);\n existing.lastRenderTimestamp = now;\n\n // Keep last N render times\n existing.renderTimes.push(renderTime);\n if (existing.renderTimes.length > performanceConfig.maxRenderHistory) {\n existing.renderTimes.shift();\n }\n\n // Update frequency\n existing.updateFrequency = calculateUpdateFrequency(existing);\n } else {\n const performance: ComponentPerformance = {\n componentId,\n componentName,\n renderCount: 1,\n totalRenderTime: renderTime,\n averageRenderTime: renderTime,\n lastRenderTime: renderTime,\n minRenderTime: renderTime,\n maxRenderTime: renderTime,\n renderTimes: [renderTime],\n lastRenderTimestamp: now,\n updateFrequency: 'low',\n };\n componentPerformanceMap.set(componentId, performance);\n }\n\n // Record slow renders\n if (renderTime > performanceConfig.slowRenderThreshold) {\n recordEvent('error:captured', {\n type: 'slow-render',\n componentId,\n componentName,\n renderTime,\n });\n }\n}\n\n/**\n * Calculate update frequency based on render count and time\n */\nfunction calculateUpdateFrequency(\n performance: ComponentPerformance,\n): ComponentPerformance['updateFrequency'] {\n const recentRenders = performance.renderTimes.length;\n const avgTime = performance.averageRenderTime;\n\n if (recentRenders > 30 || avgTime > 50) return 'extreme';\n if (recentRenders > 15 || avgTime > 30) return 'high';\n if (recentRenders > 5 || avgTime > 16) return 'medium';\n return 'low';\n}\n\n/**\n * Get performance data for a component\n */\nexport function getComponentPerformance(componentId: string): ComponentPerformance | undefined {\n return componentPerformanceMap.get(componentId);\n}\n\n/**\n * Get all component performance data\n */\nexport function getAllComponentPerformance(): ComponentPerformance[] {\n return Array.from(componentPerformanceMap.values());\n}\n\n/**\n * Clear component performance data\n */\nexport function clearComponentPerformance(): void {\n componentPerformanceMap.clear();\n}\n\n// ===== Performance Monitoring =====\n\n/**\n * Start performance monitoring\n */\nexport function startPerformanceMonitoring(): void {\n if (isMonitoring) return;\n\n isMonitoring = true;\n lastFpsUpdate = performance.now();\n frameCount = 0;\n\n // Start FPS counter (浏览器环境检测)\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(updateFps);\n }\n\n // Start periodic metrics update\n updateIntervalId = setInterval(() => {\n updatePerformanceMetrics();\n }, performanceConfig.updateInterval);\n\n sendToPanel({\n type: 'PERFORMANCE_MONITORING_STATUS',\n payload: { isMonitoring: true },\n });\n}\n\n/**\n * Stop performance monitoring\n */\nexport function stopPerformanceMonitoring(): void {\n if (!isMonitoring) return;\n\n isMonitoring = false;\n\n if (updateIntervalId) {\n clearInterval(updateIntervalId);\n updateIntervalId = null;\n }\n\n sendToPanel({\n type: 'PERFORMANCE_MONITORING_STATUS',\n payload: { isMonitoring: false },\n });\n}\n\n/**\n * Check if monitoring is active\n */\nexport function isPerformanceMonitoring(): boolean {\n return isMonitoring;\n}\n\n/**\n * Update FPS counter\n */\nfunction updateFps(): void {\n if (!isMonitoring) return;\n\n frameCount++;\n const now = performance.now();\n\n if (now - lastFpsUpdate >= 1000) {\n currentFps = Math.round((frameCount * 1000) / (now - lastFpsUpdate));\n frameCount = 0;\n lastFpsUpdate = now;\n }\n\n // 浏览器环境检测\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(updateFps);\n }\n}\n\n/**\n * Update performance metrics\n */\nfunction updatePerformanceMetrics(): void {\n if (!isMonitoring) return;\n\n const metrics = collectPerformanceMetrics();\n const slowRenders = findSlowRenders();\n\n const entry: PerformanceTimelineEntry = {\n timestamp: Date.now(),\n metrics,\n slowRenders,\n };\n\n performanceTimeline.push(entry);\n\n // Limit timeline size\n if (performanceTimeline.length > performanceConfig.timelineMaxSize) {\n performanceTimeline.shift();\n }\n\n // Send update to panel\n sendToPanel({\n type: 'PERFORMANCE_METRICS',\n payload: {\n metrics,\n slowRenders,\n timeline: getPerformanceTimelineSummary(),\n },\n });\n}\n\n/**\n * Collect current performance metrics\n */\nfunction collectPerformanceMetrics(): PerformanceMetrics {\n const components = getAllComponentPerformance();\n const totalRenders = components.reduce((sum, c) => sum + c.renderCount, 0);\n const avgRenderTime =\n components.length > 0\n ? components.reduce((sum, c) => sum + c.averageRenderTime, 0) / components.length\n : 0;\n\n return {\n timestamp: Date.now(),\n totalComponents: components.length,\n totalRenders,\n averageRenderTime: Math.round(avgRenderTime * 100) / 100,\n memoryUsage: getMemoryInfo(),\n fps: currentFps,\n };\n}\n\n/**\n * Chrome 性能内存信息接口\n */\ninterface ChromePerformance extends Performance {\n memory?: {\n usedJSHeapSize: number;\n totalJSHeapSize: number;\n jsHeapSizeLimit: number;\n };\n}\n\n/**\n * Get memory info if available\n */\nfunction getMemoryInfo(): MemoryInfo | undefined {\n const perf = performance as ChromePerformance;\n if (typeof performance !== 'undefined' && perf.memory) {\n const mem = perf.memory;\n return {\n usedJSHeapSize: mem.usedJSHeapSize,\n totalJSHeapSize: mem.totalJSHeapSize,\n jsHeapSizeLimit: mem.jsHeapSizeLimit,\n };\n }\n return undefined;\n}\n\n/**\n * Find slow renders\n */\nfunction findSlowRenders(): SlowRenderInfo[] {\n const slowRenders: SlowRenderInfo[] = [];\n\n for (const perf of componentPerformanceMap.values()) {\n if (perf.lastRenderTime > performanceConfig.slowRenderThreshold) {\n slowRenders.push({\n componentId: perf.componentId,\n componentName: perf.componentName,\n renderTime: perf.lastRenderTime,\n timestamp: perf.lastRenderTimestamp,\n });\n }\n }\n\n return slowRenders.sort((a, b) => b.renderTime - a.renderTime).slice(0, 10);\n}\n\n// ===== Render Heatmap =====\n\n/**\n * Get render heatmap data\n */\nexport function getRenderHeatmap(): RenderHeatmapData[] {\n const components = getAllComponentPerformance();\n\n if (components.length === 0) return [];\n\n // Find max render count for normalization\n const maxRenders = Math.max(...components.map((c) => c.renderCount), 1);\n const maxAvgTime = Math.max(...components.map((c) => c.averageRenderTime), 1);\n\n return components\n .map((c) => {\n // Calculate intensity based on render count and average time\n const countIntensity = c.renderCount / maxRenders;\n const timeIntensity = Math.min(c.averageRenderTime / maxAvgTime, 1);\n const intensity = countIntensity * 0.5 + timeIntensity * 0.5;\n\n return {\n componentId: c.componentId,\n componentName: c.componentName,\n intensity: Math.round(intensity * 100) / 100,\n renderCount: c.renderCount,\n frequency: c.updateFrequency,\n };\n })\n .sort((a, b) => b.intensity - a.intensity);\n}\n\n// ===== Timeline =====\n\n/**\n * Get performance timeline\n */\nexport function getPerformanceTimeline(): PerformanceTimelineEntry[] {\n return [...performanceTimeline];\n}\n\n/**\n * Get timeline summary (for charts)\n */\nexport function getPerformanceTimelineSummary(): {\n timestamps: number[];\n fps: number[];\n memory: number[];\n renderCounts: number[];\n} {\n return {\n timestamps: performanceTimeline.map((e) => e.timestamp),\n fps: performanceTimeline.map((e) => e.metrics.fps || 0),\n memory: performanceTimeline.map((e) => e.metrics.memoryUsage?.usedJSHeapSize || 0),\n renderCounts: performanceTimeline.map((e) => e.metrics.totalRenders),\n };\n}\n\n/**\n * Clear performance timeline\n */\nexport function clearPerformanceTimeline(): void {\n performanceTimeline.length = 0;\n}\n\n// ===== Memory Tracking =====\n\n/**\n * Get memory trend data\n */\nexport function getMemoryTrend(): {\n timestamps: number[];\n used: number[];\n total: number[];\n limit: number[];\n} {\n const entries = performanceTimeline.filter((e) => e.metrics.memoryUsage);\n\n return {\n timestamps: entries.map((e) => e.timestamp),\n used: entries.map((e) => e.metrics.memoryUsage!.usedJSHeapSize / 1024 / 1024), // MB\n total: entries.map((e) => e.metrics.memoryUsage!.totalJSHeapSize / 1024 / 1024), // MB\n limit: entries.map((e) => e.metrics.memoryUsage!.jsHeapSizeLimit / 1024 / 1024), // MB\n };\n}\n\n/**\n * 带有 gc 方法的全局对象接口\n */\ninterface GlobalWithGC {\n gc?: () => void;\n}\n\n/**\n * Force garbage collection hint (if available)\n */\nexport function suggestGarbageCollection(): void {\n const globalWithGC = globalThis as GlobalWithGC;\n if (typeof globalWithGC.gc === 'function') {\n try {\n globalWithGC.gc();\n sendToPanel({\n type: 'GC_SUGGESTED',\n payload: { success: true },\n });\n } catch (e) {\n sendToPanel({\n type: 'GC_SUGGESTED',\n payload: { success: false, error: String(e) },\n });\n }\n } else {\n sendToPanel({\n type: 'GC_SUGGESTED',\n payload: { success: false, error: 'GC not available' },\n });\n }\n}\n\n// ===== Config =====\n\n/**\n * Update performance config\n */\nexport function updatePerformanceConfig(config: Partial<PerformanceConfig>): void {\n Object.assign(performanceConfig, config);\n\n sendToPanel({\n type: 'PERFORMANCE_CONFIG_UPDATED',\n payload: performanceConfig,\n });\n}\n\n/**\n * Get performance config\n */\nexport function getPerformanceConfig(): PerformanceConfig {\n return { ...performanceConfig };\n}\n\n// ===== Panel Integration =====\n\n/**\n * Initialize performance panel\n */\nexport function initPerformancePanel(): () => void {\n const unsubscribe = onPanelMessage((message: unknown) => {\n const msg = message as { type: string; data?: unknown };\n\n switch (msg.type) {\n case 'START_PERFORMANCE_MONITORING':\n startPerformanceMonitoring();\n break;\n\n case 'STOP_PERFORMANCE_MONITORING':\n stopPerformanceMonitoring();\n break;\n\n case 'GET_PERFORMANCE_METRICS':\n handleGetPerformanceMetrics();\n break;\n\n case 'GET_RENDER_HEATMAP':\n handleGetRenderHeatmap();\n break;\n\n case 'GET_COMPONENT_PERFORMANCE':\n handleGetComponentPerformance(msg.data as { componentId: string });\n break;\n\n case 'GET_PERFORMANCE_TIMELINE':\n handleGetPerformanceTimeline();\n break;\n\n case 'GET_MEMORY_TREND':\n handleGetMemoryTrend();\n break;\n\n case 'CLEAR_PERFORMANCE_DATA':\n clearComponentPerformance();\n clearPerformanceTimeline();\n sendToPanel({ type: 'PERFORMANCE_DATA_CLEARED', payload: {} });\n break;\n\n case 'SUGGEST_GC':\n suggestGarbageCollection();\n break;\n\n case 'UPDATE_PERFORMANCE_CONFIG':\n if (msg.data) {\n updatePerformanceConfig(msg.data as Partial<PerformanceConfig>);\n }\n break;\n\n case 'GET_PERFORMANCE_CONFIG':\n sendToPanel({\n type: 'PERFORMANCE_CONFIG',\n payload: getPerformanceConfig(),\n });\n break;\n }\n });\n\n return unsubscribe;\n}\n\nfunction handleGetPerformanceMetrics(): void {\n const metrics = collectPerformanceMetrics();\n const slowRenders = findSlowRenders();\n\n sendToPanel({\n type: 'PERFORMANCE_METRICS',\n payload: {\n metrics,\n slowRenders,\n isMonitoring,\n },\n });\n}\n\nfunction handleGetRenderHeatmap(): void {\n const heatmap = getRenderHeatmap();\n\n sendToPanel({\n type: 'RENDER_HEATMAP',\n payload: heatmap,\n });\n}\n\nfunction handleGetComponentPerformance(data: { componentId: string } | undefined): void {\n if (!data?.componentId) return;\n\n const performance = getComponentPerformance(data.componentId);\n\n sendToPanel({\n type: 'COMPONENT_PERFORMANCE',\n payload: performance,\n });\n}\n\nfunction handleGetPerformanceTimeline(): void {\n sendToPanel({\n type: 'PERFORMANCE_TIMELINE',\n payload: getPerformanceTimelineSummary(),\n });\n}\n\nfunction handleGetMemoryTrend(): void {\n sendToPanel({\n type: 'MEMORY_TREND',\n payload: getMemoryTrend(),\n });\n}\n\n// ===== Exports =====\n\nexport { performanceConfig, componentPerformanceMap, performanceTimeline };\n","/**\n * @lytjs/devtools - DevTools Panel Integration\n */\n\nimport { initStateEditor } from './state-editor';\nimport {\n initTimeTravel,\n startHistoryRecording,\n stopHistoryRecording,\n getHistory,\n getCurrentIndex,\n} from './time-travel';\nimport {\n initPerformancePanel,\n recordComponentRender,\n startPerformanceMonitoring,\n stopPerformanceMonitoring,\n} from './performance';\nimport { sendToPanel, onPanelMessage } from '../bridge';\nimport { getState, enable, setConnected } from '../state';\nimport { getComponentTree } from '../component-tree';\nimport { getSignals } from '../signals';\nimport { getSnapshots } from '../snapshots';\nimport { startRecording, stopRecording, getEvents } from '../events';\n\ninterface PanelState {\n isInitialized: boolean;\n activeTab: 'components' | 'state' | 'time-travel' | 'performance' | 'events';\n selectedComponentId: string | null;\n isRecording: boolean;\n}\n\nconst panelState: PanelState = {\n isInitialized: false,\n activeTab: 'components',\n selectedComponentId: null,\n isRecording: false,\n};\n\nconst cleanupFunctions: Array<() => void> = [];\n\nexport function initDevToolsPanel(): void {\n if (panelState.isInitialized) return;\n\n enable();\n setConnected(true);\n\n cleanupFunctions.push(initStateEditor());\n cleanupFunctions.push(initTimeTravel());\n cleanupFunctions.push(initPerformancePanel());\n cleanupFunctions.push(initPanelMessageHandler());\n\n panelState.isInitialized = true;\n sendInitialData();\n}\n\nexport function cleanupDevToolsPanel(): void {\n if (!panelState.isInitialized) return;\n\n cleanupFunctions.forEach((cleanup) => cleanup());\n cleanupFunctions.length = 0;\n setConnected(false);\n panelState.isInitialized = false;\n}\n\nfunction initPanelMessageHandler(): () => void {\n return onPanelMessage((message: unknown) => {\n const msg = message as { type: string; data?: unknown };\n switch (msg.type) {\n case 'SWITCH_TAB':\n if (msg.data && typeof msg.data === 'object') {\n panelState.activeTab = (msg.data as { tab: PanelState['activeTab'] }).tab;\n }\n break;\n case 'SELECT_COMPONENT':\n if (msg.data && typeof msg.data === 'object') {\n panelState.selectedComponentId = (msg.data as { componentId: string }).componentId;\n }\n break;\n case 'START_RECORDING':\n panelState.isRecording = true;\n startRecording();\n break;\n case 'STOP_RECORDING':\n panelState.isRecording = false;\n stopRecording();\n break;\n case 'REFRESH_DATA':\n case 'GET_ALL_DATA':\n sendInitialData();\n break;\n }\n });\n}\n\nfunction sendInitialData(): void {\n sendToPanel({\n type: 'INITIAL_DATA',\n payload: {\n state: getState(),\n componentTree: getComponentTree(),\n signals: getSignals(),\n snapshots: getSnapshots(),\n events: getEvents(),\n },\n } as unknown as Parameters<typeof sendToPanel>[0]);\n}\n\nexport function getPanelState(): Readonly<PanelState> {\n return { ...panelState };\n}\n\nexport function isPanelInitialized(): boolean {\n return panelState.isInitialized;\n}\n\nexport function setActiveTab(tab: PanelState['activeTab']): void {\n panelState.activeTab = tab;\n}\n\nexport function getActiveTab(): PanelState['activeTab'] {\n return panelState.activeTab;\n}\n\nexport {\n initStateEditor,\n initTimeTravel,\n initPerformancePanel,\n recordComponentRender,\n startPerformanceMonitoring,\n stopPerformanceMonitoring,\n startHistoryRecording,\n stopHistoryRecording,\n getHistory,\n getCurrentIndex,\n};\n"]}
package/package.json CHANGED
@@ -1,54 +1,54 @@
1
- {
2
- "name": "@lytjs/devtools-extension",
3
- "version": "6.5.0",
4
- "description": "LytJS browser DevTools extension for debugging LytJS applications",
5
- "type": "module",
6
- "main": "./dist/index.cjs",
7
- "module": "./dist/index.mjs",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.mjs",
13
- "require": "./dist/index.cjs"
14
- },
15
- "./package.json": "./package.json"
16
- },
17
- "files": [
18
- "dist"
19
- ],
20
- "sideEffects": false,
21
- "scripts": {
22
- "build": "echo 'Skipping devtools build for now'",
23
- "dev": "tsup --watch",
24
- "test": "vitest run",
25
- "test:watch": "vitest",
26
- "test:coverage": "vitest run --coverage",
27
- "type-check": "tsc --noEmit",
28
- "lint": "eslint \"src/**/*.ts\"",
29
- "clean": "rm -rf dist"
30
- },
31
- "dependencies": {
32
- "@lytjs/reactivity": "^6.0.0",
33
- "@lytjs/component": "^6.0.0",
34
- "@lytjs/common-string": "^6.0.0"
35
- },
36
- "devDependencies": {
37
- "tsup": "^8.0.0",
38
- "typescript": "^5.4.0",
39
- "vitest": "^3.0.0"
40
- },
41
- "license": "MIT",
42
- "repository": {
43
- "type": "git",
44
- "url": "https://gitee.com/lytjs/lytjs.git",
45
- "directory": "packages/tools/packages/devtools"
46
- },
47
- "keywords": [
48
- "lytjs",
49
- "devtools",
50
- "debug",
51
- "inspector",
52
- "extension"
53
- ]
54
- }
1
+ {
2
+ "name": "@lytjs/devtools-extension",
3
+ "version": "6.6.0",
4
+ "description": "LytJS browser DevTools extension for debugging LytJS applications",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.cjs"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "sideEffects": false,
21
+ "scripts": {
22
+ "build": "tsup",
23
+ "dev": "tsup --watch",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest",
26
+ "test:coverage": "vitest run --coverage",
27
+ "type-check": "tsc --noEmit",
28
+ "lint": "eslint \"src/**/*.ts\"",
29
+ "clean": "rm -rf dist"
30
+ },
31
+ "dependencies": {
32
+ "@lytjs/reactivity": "workspace:*",
33
+ "@lytjs/component": "workspace:*",
34
+ "@lytjs/common-string": "workspace:*"
35
+ },
36
+ "devDependencies": {
37
+ "tsup": "^8.0.0",
38
+ "typescript": "^5.4.0",
39
+ "vitest": "^3.0.0"
40
+ },
41
+ "license": "MIT",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://gitee.com/lytjs/lytjs.git",
45
+ "directory": "packages/tools/packages/devtools"
46
+ },
47
+ "keywords": [
48
+ "lytjs",
49
+ "devtools",
50
+ "debug",
51
+ "inspector",
52
+ "extension"
53
+ ]
54
+ }