@dimina-kit/devtools 0.2.0 → 0.3.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.
Files changed (156) hide show
  1. package/dist/main/index.bundle.js +2716 -0
  2. package/dist/main/services/projects/project-repository.js +6 -0
  3. package/dist/main/services/workspace/workspace-service.js +12 -0
  4. package/package.json +23 -21
  5. package/dist/main/api.d.ts.map +0 -1
  6. package/dist/main/api.js.map +0 -1
  7. package/dist/main/app/app.d.ts.map +0 -1
  8. package/dist/main/app/app.js.map +0 -1
  9. package/dist/main/app/bootstrap.d.ts.map +0 -1
  10. package/dist/main/app/bootstrap.js.map +0 -1
  11. package/dist/main/app/launch.d.ts.map +0 -1
  12. package/dist/main/app/launch.js.map +0 -1
  13. package/dist/main/app/lifecycle.d.ts.map +0 -1
  14. package/dist/main/app/lifecycle.js.map +0 -1
  15. package/dist/main/index.d.ts.map +0 -1
  16. package/dist/main/index.js.map +0 -1
  17. package/dist/main/ipc/app.d.ts.map +0 -1
  18. package/dist/main/ipc/app.js.map +0 -1
  19. package/dist/main/ipc/index.d.ts.map +0 -1
  20. package/dist/main/ipc/index.js.map +0 -1
  21. package/dist/main/ipc/panels.d.ts.map +0 -1
  22. package/dist/main/ipc/panels.js.map +0 -1
  23. package/dist/main/ipc/popover.d.ts.map +0 -1
  24. package/dist/main/ipc/popover.js.map +0 -1
  25. package/dist/main/ipc/projects.d.ts.map +0 -1
  26. package/dist/main/ipc/projects.js.map +0 -1
  27. package/dist/main/ipc/session.d.ts.map +0 -1
  28. package/dist/main/ipc/session.js.map +0 -1
  29. package/dist/main/ipc/settings.d.ts.map +0 -1
  30. package/dist/main/ipc/settings.js.map +0 -1
  31. package/dist/main/ipc/simulator.d.ts.map +0 -1
  32. package/dist/main/ipc/simulator.js.map +0 -1
  33. package/dist/main/ipc/toolbar.d.ts.map +0 -1
  34. package/dist/main/ipc/toolbar.js.map +0 -1
  35. package/dist/main/menu/index.d.ts.map +0 -1
  36. package/dist/main/menu/index.js.map +0 -1
  37. package/dist/main/services/automation/exec.d.ts.map +0 -1
  38. package/dist/main/services/automation/exec.js.map +0 -1
  39. package/dist/main/services/automation/handlers/app.d.ts.map +0 -1
  40. package/dist/main/services/automation/handlers/app.js.map +0 -1
  41. package/dist/main/services/automation/handlers/element.d.ts.map +0 -1
  42. package/dist/main/services/automation/handlers/element.js.map +0 -1
  43. package/dist/main/services/automation/handlers/page.d.ts.map +0 -1
  44. package/dist/main/services/automation/handlers/page.js.map +0 -1
  45. package/dist/main/services/automation/handlers/tool.d.ts.map +0 -1
  46. package/dist/main/services/automation/handlers/tool.js.map +0 -1
  47. package/dist/main/services/automation/index.d.ts.map +0 -1
  48. package/dist/main/services/automation/index.js.map +0 -1
  49. package/dist/main/services/automation/registry.d.ts.map +0 -1
  50. package/dist/main/services/automation/registry.js.map +0 -1
  51. package/dist/main/services/automation/shared.d.ts.map +0 -1
  52. package/dist/main/services/automation/shared.js.map +0 -1
  53. package/dist/main/services/default-adapter.d.ts.map +0 -1
  54. package/dist/main/services/default-adapter.js.map +0 -1
  55. package/dist/main/services/layout/index.d.ts.map +0 -1
  56. package/dist/main/services/layout/index.js.map +0 -1
  57. package/dist/main/services/mcp/index.d.ts.map +0 -1
  58. package/dist/main/services/mcp/index.js.map +0 -1
  59. package/dist/main/services/mcp/server.d.ts.map +0 -1
  60. package/dist/main/services/mcp/server.js.map +0 -1
  61. package/dist/main/services/mcp/target-manager.d.ts.map +0 -1
  62. package/dist/main/services/mcp/target-manager.js.map +0 -1
  63. package/dist/main/services/mcp/tool-registry.d.ts.map +0 -1
  64. package/dist/main/services/mcp/tool-registry.js.map +0 -1
  65. package/dist/main/services/mcp/tools/context-tools.d.ts.map +0 -1
  66. package/dist/main/services/mcp/tools/context-tools.js.map +0 -1
  67. package/dist/main/services/mcp/tools/simulator-tools.d.ts.map +0 -1
  68. package/dist/main/services/mcp/tools/simulator-tools.js.map +0 -1
  69. package/dist/main/services/mcp/tools/workbench-tools.d.ts.map +0 -1
  70. package/dist/main/services/mcp/tools/workbench-tools.js.map +0 -1
  71. package/dist/main/services/notifications/renderer-notifier.d.ts.map +0 -1
  72. package/dist/main/services/notifications/renderer-notifier.js.map +0 -1
  73. package/dist/main/services/projects/index.d.ts.map +0 -1
  74. package/dist/main/services/projects/index.js.map +0 -1
  75. package/dist/main/services/projects/project-repository.d.ts.map +0 -1
  76. package/dist/main/services/projects/project-repository.js.map +0 -1
  77. package/dist/main/services/settings/index.d.ts.map +0 -1
  78. package/dist/main/services/settings/index.js.map +0 -1
  79. package/dist/main/services/simulator/dir.d.ts.map +0 -1
  80. package/dist/main/services/simulator/dir.js.map +0 -1
  81. package/dist/main/services/simulator/referer.d.ts.map +0 -1
  82. package/dist/main/services/simulator/referer.js.map +0 -1
  83. package/dist/main/services/simulator-storage/index.d.ts.map +0 -1
  84. package/dist/main/services/simulator-storage/index.js.map +0 -1
  85. package/dist/main/services/update/github-release-checker.d.ts.map +0 -1
  86. package/dist/main/services/update/github-release-checker.js.map +0 -1
  87. package/dist/main/services/update/index.d.ts.map +0 -1
  88. package/dist/main/services/update/index.js.map +0 -1
  89. package/dist/main/services/update/update-manager.d.ts.map +0 -1
  90. package/dist/main/services/update/update-manager.js.map +0 -1
  91. package/dist/main/services/views/view-manager.d.ts.map +0 -1
  92. package/dist/main/services/views/view-manager.js.map +0 -1
  93. package/dist/main/services/workbench-context.d.ts.map +0 -1
  94. package/dist/main/services/workbench-context.js.map +0 -1
  95. package/dist/main/services/workspace/index.d.ts.map +0 -1
  96. package/dist/main/services/workspace/index.js.map +0 -1
  97. package/dist/main/services/workspace/workspace-service.d.ts.map +0 -1
  98. package/dist/main/services/workspace/workspace-service.js.map +0 -1
  99. package/dist/main/utils/logger.d.ts.map +0 -1
  100. package/dist/main/utils/logger.js.map +0 -1
  101. package/dist/main/utils/paths.d.ts.map +0 -1
  102. package/dist/main/utils/paths.js.map +0 -1
  103. package/dist/main/utils/theme.d.ts.map +0 -1
  104. package/dist/main/utils/theme.js.map +0 -1
  105. package/dist/main/windows/main-window/create.d.ts.map +0 -1
  106. package/dist/main/windows/main-window/create.js.map +0 -1
  107. package/dist/main/windows/main-window/events.d.ts.map +0 -1
  108. package/dist/main/windows/main-window/events.js.map +0 -1
  109. package/dist/main/windows/main-window/index.d.ts.map +0 -1
  110. package/dist/main/windows/main-window/index.js.map +0 -1
  111. package/dist/main/windows/settings-window/create.d.ts.map +0 -1
  112. package/dist/main/windows/settings-window/create.js.map +0 -1
  113. package/dist/main/windows/settings-window/events.d.ts.map +0 -1
  114. package/dist/main/windows/settings-window/events.js.map +0 -1
  115. package/dist/main/windows/settings-window/index.d.ts.map +0 -1
  116. package/dist/main/windows/settings-window/index.js.map +0 -1
  117. package/dist/preload/instrumentation/app-data.d.ts.map +0 -1
  118. package/dist/preload/instrumentation/app-data.js.map +0 -1
  119. package/dist/preload/instrumentation/console.d.ts.map +0 -1
  120. package/dist/preload/instrumentation/console.js.map +0 -1
  121. package/dist/preload/instrumentation/disposable.d.ts.map +0 -1
  122. package/dist/preload/instrumentation/disposable.js.map +0 -1
  123. package/dist/preload/instrumentation/index.d.ts.map +0 -1
  124. package/dist/preload/instrumentation/index.js.map +0 -1
  125. package/dist/preload/instrumentation/wxml-extract.d.ts.map +0 -1
  126. package/dist/preload/instrumentation/wxml-extract.js.map +0 -1
  127. package/dist/preload/instrumentation/wxml.d.ts.map +0 -1
  128. package/dist/preload/instrumentation/wxml.js.map +0 -1
  129. package/dist/preload/runtime/bridge.d.ts.map +0 -1
  130. package/dist/preload/runtime/bridge.js.map +0 -1
  131. package/dist/preload/runtime/host.d.ts.map +0 -1
  132. package/dist/preload/runtime/host.js.map +0 -1
  133. package/dist/preload/shared/api-compat.d.ts.map +0 -1
  134. package/dist/preload/shared/api-compat.js.map +0 -1
  135. package/dist/preload/shared/constants.d.ts.map +0 -1
  136. package/dist/preload/shared/constants.js.map +0 -1
  137. package/dist/preload/shared/types.d.ts.map +0 -1
  138. package/dist/preload/shared/types.js.map +0 -1
  139. package/dist/preload/windows/main.d.ts.map +0 -1
  140. package/dist/preload/windows/main.js.map +0 -1
  141. package/dist/preload/windows/simulator.js.map +0 -7
  142. package/dist/renderer/assets/index-D_HFRqZA.js.map +0 -1
  143. package/dist/renderer/assets/input-VLotwer2.js.map +0 -1
  144. package/dist/renderer/assets/ipc-transport-COKIC6Ny.js.map +0 -1
  145. package/dist/renderer/assets/popover-Dn0RwMLI.js.map +0 -1
  146. package/dist/renderer/assets/select-DzIsLaKX.js.map +0 -1
  147. package/dist/renderer/assets/settings-CD-dacWB.js.map +0 -1
  148. package/dist/renderer/assets/settings-api-BV9MPckG.js.map +0 -1
  149. package/dist/renderer/assets/workbenchSettings-ClwgsvJL.js.map +0 -1
  150. package/dist/shared/constants.d.ts.map +0 -1
  151. package/dist/shared/constants.js.map +0 -1
  152. package/dist/shared/ipc-channels.d.ts.map +0 -1
  153. package/dist/shared/ipc-channels.js.map +0 -1
  154. package/dist/shared/types.d.ts.map +0 -1
  155. package/dist/shared/types.js.map +0 -1
  156. package/dist/simulator/assets/simulator-C1eHXnuq.js.map +0 -1
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/preload/runtime/bridge.ts", "../../../src/shared/ipc-channels.ts", "../../../src/preload/runtime/host.ts", "../../../src/preload/instrumentation/console.ts", "../../../src/preload/instrumentation/disposable.ts", "../../../src/preload/instrumentation/app-data.ts", "../../../src/preload/shared/constants.ts", "../../../src/preload/instrumentation/wxml-extract.ts", "../../../src/preload/instrumentation/wxml.ts", "../../../src/preload/shared/api-compat.ts", "../../../src/preload/windows/simulator.ts"],
4
- "sourcesContent": ["import { contextBridge } from 'electron'\n\nexport interface WxmlNode {\n tagName: string\n attrs: Record<string, string>\n children: WxmlNode[]\n text?: string\n sid?: string\n}\n\nexport interface Snapshot<T> {\n gen: number\n ready: boolean\n data: T\n}\n\nexport interface StorageSnapshot extends Snapshot<Record<string, string>> {\n namespace: string | null\n}\n\ntype RefreshTarget = 'wxml' | 'appdata' | 'storage'\n\ninterface SimulatorBridgeState {\n appdata: Snapshot<Record<string, unknown>>\n storage: StorageSnapshot\n wxml: Snapshot<WxmlNode | WxmlNode[] | null>\n refreshHandler: ((type: RefreshTarget) => void) | null\n}\n\nconst state: SimulatorBridgeState = {\n appdata: { gen: 0, ready: true, data: {} },\n storage: { gen: 0, ready: false, namespace: null, data: {} },\n wxml: { gen: 0, ready: false, data: null },\n refreshHandler: null,\n}\n\nlet highlightOverlay: HTMLDivElement | null = null\nlet exposedApi: Record<string, unknown> | null = null\n\nfunction clone<T>(value: T): T {\n try {\n return JSON.parse(JSON.stringify(value)) as T\n } catch {\n return value\n }\n}\n\nfunction getPageIframe(): HTMLIFrameElement | null {\n const iframes = document.querySelectorAll<HTMLIFrameElement>('.dimina-native-webview__window')\n return iframes.length > 0 ? iframes[iframes.length - 1]! : null\n}\n\nfunction ensureOverlay(doc: Document): HTMLDivElement {\n if (highlightOverlay && highlightOverlay.ownerDocument === doc) return highlightOverlay\n highlightOverlay = doc.createElement('div')\n highlightOverlay.id = '__simulator-highlight'\n highlightOverlay.style.cssText =\n 'position:fixed;pointer-events:none;z-index:999999;' +\n 'border:2px solid #1a73e8;background:rgba(26,115,232,0.12);' +\n 'transition:all 0.1s ease;display:none;border-radius:2px;'\n doc.body.appendChild(highlightOverlay)\n return highlightOverlay\n}\n\nfunction highlightElement(sid: string): void {\n const iframe = getPageIframe()\n if (!iframe?.contentDocument) return\n const doc = iframe.contentDocument\n const el = doc.querySelector(`[data-sid=\"${sid}\"]`) as HTMLElement | null\n if (!el) return\n const rect = el.getBoundingClientRect()\n const overlay = ensureOverlay(doc)\n overlay.style.left = `${rect.left}px`\n overlay.style.top = `${rect.top}px`\n overlay.style.width = `${rect.width}px`\n overlay.style.height = `${rect.height}px`\n overlay.style.display = 'block'\n}\n\nfunction unhighlightElement(): void {\n if (highlightOverlay) highlightOverlay.style.display = 'none'\n}\n\nexport { highlightElement, unhighlightElement }\n\nfunction buildApi(): Record<string, unknown> {\n return {\n getAppdata: () => clone(state.appdata.data),\n getAppdataSnapshot: () => clone(state.appdata),\n getAppdataGen: () => state.appdata.gen,\n getStorageSnapshot: () => clone(state.storage),\n getStorageGen: () => state.storage.gen,\n getWxml: () => clone(state.wxml.data),\n getWxmlSnapshot: () => clone(state.wxml),\n getWxmlGen: () => state.wxml.gen,\n refresh: (type: RefreshTarget) => state.refreshHandler?.(type),\n highlightElement,\n unhighlightElement,\n }\n}\n\nexport const simulatorBridge = state\n\nexport function setRefreshHandler(handler: ((type: RefreshTarget) => void) | null): void {\n state.refreshHandler = handler\n}\n\nexport function setAppDataSnapshot(data: Record<string, unknown>): void {\n state.appdata = {\n gen: state.appdata.gen + 1,\n ready: true,\n data: clone(data),\n }\n}\n\nexport function clearAppDataSnapshot(): void {\n state.appdata = {\n gen: state.appdata.gen + 1,\n ready: true,\n data: {},\n }\n}\n\nexport function setStorageSnapshot(namespace: string | null, data: Record<string, string>): void {\n state.storage = {\n gen: state.storage.gen + 1,\n ready: namespace !== null,\n namespace,\n data: clone(data),\n }\n}\n\nexport function clearStorageSnapshot(): void {\n state.storage = {\n gen: state.storage.gen + 1,\n ready: false,\n namespace: null,\n data: {},\n }\n}\n\nexport function setWxmlSnapshot(data: WxmlNode | WxmlNode[] | null, ready = true): void {\n state.wxml = {\n gen: state.wxml.gen + 1,\n ready,\n data: clone(data),\n }\n}\n\nexport function clearWxmlSnapshot(): void {\n state.wxml = {\n gen: state.wxml.gen + 1,\n ready: false,\n data: null,\n }\n}\n\nexport function resetBridgeState(): void {\n clearAppDataSnapshot()\n clearStorageSnapshot()\n clearWxmlSnapshot()\n unhighlightElement()\n state.refreshHandler = null\n}\n\nexport function installSimulatorBridge(): () => void {\n if (!exposedApi) {\n exposedApi = buildApi()\n }\n\n try {\n contextBridge.exposeInMainWorld('__simulatorData', {\n ...exposedApi,\n getAppdata: () => clone(state.appdata.data),\n getAppdataSnapshot: () => clone(state.appdata),\n getStorageSnapshot: () => clone(state.storage),\n getWxml: () => clone(state.wxml.data),\n getWxmlSnapshot: () => clone(state.wxml),\n })\n } catch {\n ;(window as unknown as Record<string, unknown>).__simulatorData = exposedApi\n }\n\n return () => {\n resetBridgeState()\n const windowRef = window as unknown as Record<string, unknown>\n if (windowRef.__simulatorData === exposedApi) {\n delete windowRef.__simulatorData\n }\n }\n}\n", "/**\n * Centralised IPC channel name constants for dimina-devtools.\n *\n * Every raw channel string used across main, renderer, preload and e2e code\n * should reference one of these constants so that renaming a channel only\n * requires a single edit.\n */\n\n// \u2500\u2500 Simulator (preload \u2192 host / renderer \u2194 main) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const SimulatorChannel = {\n Attach: 'simulator:attach',\n Detach: 'simulator:detach',\n Resize: 'simulator:resize',\n SetVisible: 'simulator:setVisible',\n Console: 'simulator:console',\n Wxml: 'simulator:wxml',\n AppData: 'simulator:appdata',\n AppDataAll: 'simulator:appdata-all',\n} as const\n\n// \u2500\u2500 Storage (CDP-backed; main process attaches the debugger to the\n// simulator <webview> and forwards DOMStorage events to the renderer) \u2500\u2500\nexport const SimulatorStorageChannel = {\n GetSnapshot: 'simulator:storage:snapshot',\n Event: 'simulator:storage:event',\n} as const\n\nexport interface StorageItem { key: string; value: string }\nexport type StorageEvent =\n | { type: 'added'; key: string; newValue: string }\n | { type: 'updated'; key: string; oldValue: string; newValue: string }\n | { type: 'removed'; key: string }\n | { type: 'cleared' }\n\n// \u2500\u2500 Workbench \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const WorkbenchChannel = {\n GetPanelConfig: 'workbench:getPanelConfig',\n GetApiNamespaces: 'workbench:getApiNamespaces',\n Reset: 'workbench:reset',\n} as const\n\n// \u2500\u2500 Workbench settings \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const WorkbenchSettingsChannel = {\n Get: 'workbenchSettings:get',\n Save: 'workbenchSettings:save',\n SetTheme: 'workbenchSettings:setTheme',\n GetCdpStatus: 'workbenchSettings:getCdpStatus',\n SetVisible: 'workbenchSettings:setVisible',\n Init: 'workbenchSettings:init',\n} as const\n\n// \u2500\u2500 Project session \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const ProjectChannel = {\n Open: 'project:open',\n Close: 'project:close',\n GetPages: 'project:getPages',\n GetCompileConfig: 'project:getCompileConfig',\n SaveCompileConfig: 'project:saveCompileConfig',\n Status: 'project:status',\n} as const\n\n// \u2500\u2500 Project list / workspace \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const ProjectsChannel = {\n List: 'projects:list',\n Add: 'projects:add',\n Remove: 'projects:remove',\n} as const\n\n// \u2500\u2500 Dialog \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const DialogChannel = {\n OpenDirectory: 'dialog:openDirectory',\n} as const\n\n// \u2500\u2500 Panels \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const PanelChannel = {\n List: 'panel:list',\n Eval: 'panel:eval',\n Select: 'panel:select',\n SelectSimulator: 'panel:selectSimulator',\n} as const\n\n// \u2500\u2500 Popover \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const PopoverChannel = {\n Show: 'popover:show',\n Hide: 'popover:hide',\n Relaunch: 'popover:relaunch',\n Closed: 'popover:closed',\n Init: 'popover:init',\n} as const\n\n// \u2500\u2500 Toolbar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const ToolbarChannel = {\n GetActions: 'toolbar:getActions',\n ActionsChanged: 'toolbar:actionsChanged',\n /** Prefix for dynamic action channels: `toolbar:action:${actionId}` */\n ActionPrefix: 'toolbar:action:',\n} as const\n\n// \u2500\u2500 Window \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const WindowChannel = {\n NavigateBack: 'window:navigateBack',\n} as const\n\n// \u2500\u2500 App \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const AppChannel = {\n GetPreloadPath: 'app:getPreloadPath',\n GetBranding: 'app:getBranding',\n} as const\n\n// \u2500\u2500 Bridge (renderer \u2194 preload, webview.send / sendToHost) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const BridgeChannel = {\n WxmlRefreshRequest: 'wxml:refresh:request',\n AppDataGetAllRequest: 'appdata:getAll:request',\n AppDataGetAllResponse: 'appdata:getAll:response',\n} as const\n\n// \u2500\u2500 Automation (WebSocket server) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const AutomationChannel = {\n GetPort: 'automation:port',\n} as const\n\n// \u2500\u2500 Embedded settings overlay \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const SettingsChannel = {\n SetVisible: 'settings:setVisible',\n ConfigChanged: 'settings:configChanged',\n ProjectSettingsChanged: 'settings:projectSettingsChanged',\n Init: 'settings:init',\n Closed: 'settings:closed',\n Changed: 'settings:changed',\n} as const\n", "import { ipcRenderer } from 'electron'\n\nexport function sendToHost(channel: string, data: unknown): void {\n ipcRenderer.sendToHost(channel, data)\n}\n\nexport function safeSerialize(val: unknown): unknown {\n if (val === null || val === undefined) return val\n if (typeof val === 'function') return `[Function: ${(val as { name?: string }).name || 'anonymous'}]`\n if (typeof val !== 'object') return val\n if (val instanceof Error) return { __isError: true, message: val.message, stack: val.stack }\n try {\n return structuredClone(val)\n } catch {\n // expected: some objects (e.g. DOM nodes, proxies) cannot be structuredCloned\n }\n try {\n return JSON.parse(JSON.stringify(val))\n } catch {\n // expected: circular references or non-serializable values\n }\n return String(val)\n}\n", "import { SimulatorChannel } from '../../shared/ipc-channels.js'\nimport { sendToHost, safeSerialize } from '../runtime/host.js'\n\ntype ConsoleLevel = 'log' | 'warn' | 'error' | 'info' | 'debug'\n\nexport function installConsoleInstrumentation(): () => void {\n const consoleRef = console as unknown as Record<string, (...args: unknown[]) => void>\n const originals = new Map<ConsoleLevel, (...args: unknown[]) => void>()\n const levels: ConsoleLevel[] = ['log', 'warn', 'error', 'info', 'debug']\n\n for (const level of levels) {\n const original = consoleRef[level]?.bind(console)\n if (!original) continue\n originals.set(level, original)\n consoleRef[level] = (...args: unknown[]) => {\n original(...args)\n sendToHost(SimulatorChannel.Console, {\n source: 'container',\n level,\n args: args.map(safeSerialize),\n ts: Date.now(),\n })\n }\n }\n\n const handleError = (event: ErrorEvent) => {\n sendToHost(SimulatorChannel.Console, {\n source: 'container',\n level: 'error',\n args: [{\n message: event.message,\n source: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n stack: event.error?.stack,\n }],\n ts: Date.now(),\n })\n }\n\n const handleRejection = (event: PromiseRejectionEvent) => {\n sendToHost(SimulatorChannel.Console, {\n source: 'container',\n level: 'error',\n args: [{ message: 'Unhandled Promise Rejection', reason: String(event.reason) }],\n ts: Date.now(),\n })\n }\n\n window.addEventListener('error', handleError)\n window.addEventListener('unhandledrejection', handleRejection)\n\n return () => {\n for (const [level, original] of originals) {\n consoleRef[level] = original\n }\n window.removeEventListener('error', handleError)\n window.removeEventListener('unhandledrejection', handleRejection)\n }\n}\n", "/** A cleanup function that releases a resource. */\nexport type Disposable = () => void\n\n/**\n * Creates a set of disposable cleanup functions that can be disposed together.\n * Useful for aggregating timer, observer, and event listener cleanup.\n */\nexport function createDisposableSet(): {\n add: (fn: Disposable) => void\n disposeAll: () => void\n} {\n const disposables: Disposable[] = []\n return {\n add: (fn) => disposables.push(fn),\n disposeAll: () => {\n disposables.forEach((fn) => fn())\n disposables.length = 0\n },\n }\n}\n", "import { SimulatorChannel, BridgeChannel } from '../../shared/ipc-channels.js'\nimport { sendToHost } from '../runtime/host.js'\nimport {\n simulatorBridge,\n clearAppDataSnapshot,\n setAppDataSnapshot,\n} from '../runtime/bridge.js'\nimport { createDisposableSet } from './disposable.js'\n\n// Window augmentation is in ../types.ts\n\ntype AppDataBody = {\n bridgeId?: string\n moduleId?: string\n data?: unknown\n}\n\nconst appDataCache = new Map<string, unknown>()\n\nfunction publishSnapshot(): void {\n const data: Record<string, unknown> = {}\n for (const [key, value] of appDataCache) {\n data[key] = value\n }\n setAppDataSnapshot(data)\n}\n\nfunction decodeWorkerMessage(message: unknown): AppDataBody | null {\n let payload = message\n if (typeof payload === 'string') {\n try {\n payload = JSON.parse(payload)\n } catch {\n return null\n }\n }\n\n const record = payload as { type?: string; body?: AppDataBody } | null\n if (record?.type !== 'u' || !record.body) return null\n return record.body\n}\n\nfunction createInstrumentedWorker(OriginalWorker: typeof Worker): typeof Worker {\n function InstrumentedWorker(\n this: unknown,\n scriptURL: string | URL,\n options?: WorkerOptions\n ): Worker {\n const resolvedScriptURL = scriptURL instanceof URL\n ? scriptURL\n : new URL(scriptURL, window.location.href)\n const worker = Reflect.construct(\n OriginalWorker,\n [resolvedScriptURL, options],\n new.target ?? InstrumentedWorker\n ) as Worker\n\n worker.addEventListener('message', (event: MessageEvent) => {\n const body = decodeWorkerMessage(event.data)\n if (!body) return\n window.__simulatorHook?.appData({\n bridgeId: body.bridgeId,\n moduleId: body.moduleId,\n data: body.data,\n })\n })\n\n return worker\n }\n\n Object.setPrototypeOf(InstrumentedWorker, OriginalWorker)\n Object.defineProperty(InstrumentedWorker, 'prototype', {\n value: OriginalWorker.prototype,\n })\n\n return InstrumentedWorker as unknown as typeof Worker\n}\n\nexport function installAppDataInstrumentation(): () => void {\n const disposables = createDisposableSet()\n const originalHook = window.__simulatorHook\n const originalDescriptor = Object.getOwnPropertyDescriptor(window, 'Worker')\n const OriginalWorker = window.Worker\n\n window.__simulatorHook = {\n appData: (body: unknown) => {\n const record = body as AppDataBody | null\n if (record?.bridgeId && record?.moduleId) {\n const key = `${record.bridgeId}/${record.moduleId}`\n appDataCache.set(key, record.data)\n publishSnapshot()\n }\n sendToHost(SimulatorChannel.AppData, body)\n },\n }\n\n Object.defineProperty(window, 'Worker', {\n configurable: true,\n writable: true,\n value: createInstrumentedWorker(OriginalWorker),\n })\n\n publishSnapshot()\n\n disposables.add(() => {\n if (originalDescriptor) {\n Object.defineProperty(window, 'Worker', originalDescriptor)\n } else {\n window.Worker = OriginalWorker\n }\n })\n\n disposables.add(() => {\n if (originalHook) {\n window.__simulatorHook = originalHook\n } else {\n delete window.__simulatorHook\n }\n })\n\n disposables.add(() => {\n appDataCache.clear()\n clearAppDataSnapshot()\n publishSnapshot()\n })\n\n return () => {\n disposables.disposeAll()\n }\n}\n\nexport function sendAllAppData(): void {\n publishSnapshot()\n sendToHost(BridgeChannel.AppDataGetAllResponse, simulatorBridge.appdata.data)\n}\n", "/** Preload-only timing constants for instrumentation. */\n\n/** Debounce delay for WXML MutationObserver callbacks. */\nexport const WXML_DEBOUNCE_MS = 300\n\n/** Interval between WXML attachment retries. */\nexport const WXML_RETRY_INTERVAL_MS = 500\n\n/** Maximum time to keep retrying WXML attachment. */\nexport const WXML_RETRY_TIMEOUT_MS = 10_000\n\n/** Interval for polling Vue app readiness during navigation. */\nexport const NAVIGATION_POLL_INTERVAL_MS = 200\n\n/** Maximum time to wait for Vue app during navigation. */\nexport const NAVIGATION_TIMEOUT_MS = 10_000\n\n/** Maximum number of retries for simulator webview attachment. */\nexport const MAX_ATTACH_RETRIES = 50\n\n/** Interval between simulator attachment retries. */\nexport const ATTACH_RETRY_INTERVAL_MS = 200\n", "import { type WxmlNode } from '../runtime/bridge.js'\n\nexport interface ComponentInstance extends Record<string, unknown> {\n type?: Record<string, unknown>\n props?: Record<string, unknown>\n attrs?: Record<string, unknown>\n parent?: Record<string, unknown>\n appContext?: Record<string, unknown>\n subTree?: Record<string, unknown>\n}\n\nconst INTERNAL_CLASSES = new Set([\n 'dd-swiper-wrapper', 'dd-swiper-slides', 'dd-swiper-slide-frame', 'dd-swiper-dots',\n 'dd-picker-overlay', 'dd-picker-container', 'dd-picker-header', 'dd-picker-body',\n])\n\nconst FRAMEWORK_TEMPLATE_RE = /^(taro_tmpl|tmpl_\\d+)/\n\nfunction resolveTemplateNameFromParent(instance: ComponentInstance): string | null {\n const parent = instance.parent as Record<string, unknown> | undefined\n if (!parent) return null\n const parentType = parent.type as Record<string, unknown> | undefined\n const components = parentType?.components as Record<string, unknown> | undefined\n if (components) {\n for (const [regName, comp] of Object.entries(components)) {\n if (comp === instance.type) return regName.startsWith('dd-') ? regName.slice(3) : regName\n }\n }\n const appComponents = instance.appContext?.components as Record<string, unknown> | undefined\n if (!appComponents) return null\n for (const [regName, comp] of Object.entries(appComponents)) {\n if (comp === instance.type) return regName.startsWith('dd-') ? regName.slice(3) : regName\n }\n return null\n}\n\nfunction resolveTagName(instance: ComponentInstance): string {\n const type = instance.type\n if (!type) return 'unknown'\n if (typeof type.__tagName === 'string') return type.__tagName\n const name = (type.__name || type.name) as string | undefined\n if (!name) {\n if (type.__scopeId && type.components) return 'page'\n if (type.__scopeId) return resolveTemplateNameFromParent(instance) || 'template'\n return 'unknown'\n }\n if (name === 'dd-page') return 'page'\n if (name.startsWith('dd-')) return name.slice(3)\n if (name.startsWith('Dd') && name.length > 2) return name.slice(2).toLowerCase()\n return name\n}\n\nfunction extractProps(instance: ComponentInstance): Record<string, string> {\n const out: Record<string, string> = {}\n for (const raw of [instance.props, instance.attrs]) {\n if (!raw) continue\n for (const [k, v] of Object.entries(raw)) {\n if (typeof v === 'function' || v === undefined) continue\n if (k === 'data' || k.startsWith('__')) continue\n if (typeof v === 'boolean' && !v) continue\n if (k === 'class' && typeof v === 'string') {\n const cleaned = v.split(/\\s+/).filter((c) => !c.startsWith('dd-')).join(' ')\n if (cleaned) out[k] = cleaned\n continue\n }\n out[k] = typeof v === 'object' ? JSON.stringify(v) : String(v)\n }\n }\n return out\n}\n\nfunction isInternalElement(vnode: Record<string, unknown>): boolean {\n const props = vnode.props as Record<string, unknown> | null\n if (!props) return false\n const cls = String(props.class || '')\n return cls.split(/\\s+/).some((c) => INTERNAL_CLASSES.has(c))\n}\n\nfunction getElementSid(instance: ComponentInstance): string | undefined {\n const subTree = instance.subTree as Record<string, unknown> | undefined\n const el = subTree?.el as HTMLElement | undefined\n return el?.getAttribute ? el.getAttribute('data-sid') ?? undefined : undefined\n}\n\nfunction isTransparentComponent(instance: ComponentInstance, tagName: string): boolean {\n if (tagName === 'unknown') return true\n if (tagName === 'template') {\n const props = instance.props as Record<string, unknown> | undefined\n const is = props?.is as string | undefined\n if (is && FRAMEWORK_TEMPLATE_RE.test(is)) return true\n if (!is) {\n const type = instance.type as Record<string, unknown> | undefined\n if (type?.__scopeId && !type.components) return true\n }\n }\n return false\n}\n\nfunction extractChildrenFromVNode(vnode: Record<string, unknown> | null | undefined, depth: number): WxmlNode[] {\n if (!vnode || depth > 50) return []\n if (vnode.component) {\n const result = walkInstance(vnode.component as ComponentInstance, depth + 1)\n return result ? (Array.isArray(result) ? result : [result]) : []\n }\n if (vnode.suspense) {\n const suspense = vnode.suspense as Record<string, unknown>\n const activeBranch = suspense.activeBranch as Record<string, unknown> | null\n return activeBranch ? extractChildrenFromVNode(activeBranch, depth + 1) : []\n }\n if (typeof vnode.children === 'string' && vnode.children.trim()) {\n const vnodeType = vnode.type\n if (typeof vnodeType === 'symbol' || typeof vnodeType === 'string') {\n return [{ tagName: '#text', attrs: {}, children: [], text: vnode.children.trim() }]\n }\n }\n const kids = vnode.children\n if (!Array.isArray(kids)) return []\n const result: WxmlNode[] = []\n for (const child of kids) {\n if (!child) continue\n if (typeof child === 'string') {\n const trimmed = child.trim()\n if (trimmed) result.push({ tagName: '#text', attrs: {}, children: [], text: trimmed })\n continue\n }\n if (typeof child !== 'object') continue\n const c = child as Record<string, unknown>\n if (c.component) {\n const walked = walkInstance(c.component as ComponentInstance, depth + 1)\n if (walked) result.push(...(Array.isArray(walked) ? walked : [walked]))\n continue\n }\n if (typeof c.type === 'symbol') {\n result.push(...extractChildrenFromVNode(c, depth + 1))\n continue\n }\n if (typeof c.type === 'string') {\n if (isInternalElement(c)) {\n result.push(...extractChildrenFromVNode(c, depth + 1))\n } else if (typeof c.children === 'string' && c.children.trim()) {\n result.push({ tagName: '#text', attrs: {}, children: [], text: c.children.trim() })\n } else {\n result.push(...extractChildrenFromVNode(c, depth + 1))\n }\n continue\n }\n result.push(...extractChildrenFromVNode(c, depth + 1))\n }\n return result\n}\n\nexport function walkInstance(instance: ComponentInstance, depth: number): WxmlNode | WxmlNode[] | null {\n if (depth > 50) return null\n const tagName = resolveTagName(instance)\n const children = extractChildrenFromVNode(instance.subTree as Record<string, unknown>, depth)\n if (isTransparentComponent(instance, tagName)) return children.length > 0 ? children : null\n const node: WxmlNode = { tagName, attrs: extractProps(instance), children }\n const sid = getElementSid(instance)\n if (sid) node.sid = sid\n return node\n}\n", "import { SimulatorChannel } from '../../shared/ipc-channels.js'\nimport { sendToHost } from '../runtime/host.js'\nimport {\n clearWxmlSnapshot,\n setWxmlSnapshot,\n type WxmlNode,\n unhighlightElement,\n} from '../runtime/bridge.js'\nimport {\n WXML_DEBOUNCE_MS,\n WXML_RETRY_INTERVAL_MS,\n WXML_RETRY_TIMEOUT_MS,\n NAVIGATION_POLL_INTERVAL_MS,\n NAVIGATION_TIMEOUT_MS,\n} from '../shared/constants.js'\nimport { createDisposableSet } from './disposable.js'\nimport { walkInstance, type ComponentInstance } from './wxml-extract.js'\n\nfunction findActivePageIframe(): HTMLIFrameElement | null {\n const iframes = document.querySelectorAll<HTMLIFrameElement>('.dimina-native-webview__window')\n return iframes.length > 0 ? iframes[iframes.length - 1]! : null\n}\n\nfunction getVueAppFromIframe(iframe: HTMLIFrameElement): ComponentInstance | null {\n try {\n const doc = iframe.contentDocument\n if (!doc?.body) return null\n const body = doc.body as unknown as Record<string, unknown>\n const app = body.__vue_app__ as Record<string, unknown> | undefined\n if (!app) return null\n if (app._instance) return app._instance as ComponentInstance\n const container = app._container as Record<string, unknown> | undefined\n const vnode = container?._vnode as Record<string, unknown> | undefined\n return vnode?.component as ComponentInstance | null ?? null\n } catch {\n return null\n }\n}\n\nlet wxmlTimer: ReturnType<typeof setTimeout> | undefined\nlet currentObserver: MutationObserver | null = null\nlet currentIframe: HTMLIFrameElement | null = null\nlet topObserver: MutationObserver | null = null\nlet retryTimer: ReturnType<typeof setInterval> | undefined\nlet retryTimeout: ReturnType<typeof setTimeout> | undefined\nlet navigationWaitTimer: ReturnType<typeof setInterval> | undefined\nlet navigationWaitTimeout: ReturnType<typeof setTimeout> | undefined\n\nconst disposables = createDisposableSet()\n\nfunction clearTimers(): void {\n if (wxmlTimer) clearTimeout(wxmlTimer)\n if (retryTimer) clearInterval(retryTimer)\n if (retryTimeout) clearTimeout(retryTimeout)\n if (navigationWaitTimer) clearInterval(navigationWaitTimer)\n if (navigationWaitTimeout) clearTimeout(navigationWaitTimeout)\n wxmlTimer = undefined\n retryTimer = undefined\n retryTimeout = undefined\n navigationWaitTimer = undefined\n navigationWaitTimeout = undefined\n}\n\nfunction publishTree(tree: WxmlNode | WxmlNode[] | null): void {\n if (tree) {\n const normalized: WxmlNode = Array.isArray(tree)\n ? { tagName: '#fragment', attrs: {}, children: tree }\n : tree\n setWxmlSnapshot(normalized, true)\n sendToHost(SimulatorChannel.Wxml, normalized)\n return\n }\n clearWxmlSnapshot()\n unhighlightElement()\n}\n\nfunction sendWxmlTree(): void {\n const iframe = findActivePageIframe()\n if (!iframe) {\n publishTree(null)\n return\n }\n const instance = getVueAppFromIframe(iframe)\n if (!instance) {\n publishTree(null)\n return\n }\n const tree = walkInstance(instance, 0)\n if (!tree) {\n publishTree(null)\n return\n }\n publishTree(tree)\n}\n\nfunction observeIframe(iframe: HTMLIFrameElement): void {\n if (iframe === currentIframe) return\n if (currentObserver) {\n currentObserver.disconnect()\n currentObserver = null\n }\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n if (navigationWaitTimeout) {\n clearTimeout(navigationWaitTimeout)\n navigationWaitTimeout = undefined\n }\n currentIframe = iframe\n\n const doc = iframe.contentDocument\n if (!doc?.body) {\n publishTree(null)\n return\n }\n\n sendWxmlTree()\n currentObserver = new MutationObserver(() => {\n clearTimeout(wxmlTimer)\n wxmlTimer = setTimeout(sendWxmlTree, WXML_DEBOUNCE_MS)\n })\n currentObserver.observe(doc.body, { childList: true, subtree: true })\n}\n\nfunction tryAttach(): boolean {\n const iframe = findActivePageIframe()\n if (!iframe) return false\n const instance = getVueAppFromIframe(iframe)\n if (!instance) return false\n observeIframe(iframe)\n return true\n}\n\nfunction scheduleAttach(): void {\n if (retryTimer) clearInterval(retryTimer)\n if (retryTimeout) clearTimeout(retryTimeout)\n retryTimer = setInterval(() => {\n if (tryAttach() && retryTimer) {\n clearInterval(retryTimer)\n retryTimer = undefined\n }\n }, WXML_RETRY_INTERVAL_MS)\n retryTimeout = setTimeout(() => {\n if (retryTimer) clearInterval(retryTimer)\n retryTimer = undefined\n }, WXML_RETRY_TIMEOUT_MS)\n}\n\nfunction observeTopLevel(): void {\n if (topObserver) return\n topObserver = new MutationObserver(() => {\n const iframe = findActivePageIframe()\n if (!iframe) {\n publishTree(null)\n return\n }\n if (iframe !== currentIframe) {\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n if (navigationWaitTimeout) {\n clearTimeout(navigationWaitTimeout)\n navigationWaitTimeout = undefined\n }\n navigationWaitTimer = setInterval(() => {\n if (getVueAppFromIframe(iframe)) {\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n if (navigationWaitTimeout) {\n clearTimeout(navigationWaitTimeout)\n navigationWaitTimeout = undefined\n }\n observeIframe(iframe)\n }\n }, NAVIGATION_POLL_INTERVAL_MS)\n navigationWaitTimeout = setTimeout(() => {\n if (navigationWaitTimer) {\n clearInterval(navigationWaitTimer)\n navigationWaitTimer = undefined\n }\n navigationWaitTimeout = undefined\n }, NAVIGATION_TIMEOUT_MS)\n }\n })\n\n if (document.body) {\n topObserver.observe(document.body, { childList: true, subtree: true })\n } else {\n document.addEventListener('DOMContentLoaded', () => {\n if (document.body && topObserver) {\n topObserver.observe(document.body, { childList: true, subtree: true })\n }\n }, { once: true })\n }\n}\n\nexport function installWxmlInstrumentation(): () => void {\n if (!tryAttach()) {\n scheduleAttach()\n }\n observeTopLevel()\n\n disposables.add(() => {\n if (currentObserver) {\n currentObserver.disconnect()\n currentObserver = null\n }\n })\n disposables.add(() => {\n if (topObserver) {\n topObserver.disconnect()\n topObserver = null\n }\n })\n disposables.add(() => {\n currentIframe = null\n clearTimers()\n })\n disposables.add(() => {\n clearWxmlSnapshot()\n unhighlightElement()\n })\n\n return () => {\n disposables.disposeAll()\n }\n}\n\nexport const setupWxmlObserver = installWxmlInstrumentation\nexport { sendWxmlTree }\n", "type Callback<T = unknown> = ((payload: T) => void) | undefined\n\nfunction call<T>(fn: Callback<T>, payload: T): void {\n try {\n fn?.(payload)\n } catch {\n // Ignore callback errors in compat shims.\n }\n}\n\nfunction buildWindowInfo() {\n const width = window.innerWidth || document.documentElement.clientWidth || 375\n const height = window.innerHeight || document.documentElement.clientHeight || 812\n const pixelRatio = window.devicePixelRatio || 2\n const statusBarHeight = 0\n return {\n pixelRatio,\n screenWidth: width,\n screenHeight: height,\n windowWidth: width,\n windowHeight: height,\n statusBarHeight,\n safeArea: {\n width,\n height,\n top: statusBarHeight,\n bottom: height,\n left: 0,\n right: width,\n },\n }\n}\n\nfunction makeStorageKey(key: string): string {\n return `dimina:${key}`\n}\n\nfunction ensureWxApi(wx: Record<string, unknown>): void {\n if (typeof wx.canIUse !== 'function') {\n wx.canIUse = (_schema: unknown) => true\n }\n\n if (typeof wx.getWindowInfo !== 'function') {\n wx.getWindowInfo = (opts: { success?: Callback<unknown>; complete?: Callback<void> } = {}) => {\n const info = buildWindowInfo()\n call(opts.success, info)\n call(opts.complete, undefined)\n return info\n }\n }\n\n if (typeof wx.getSystemSetting !== 'function') {\n wx.getSystemSetting = (opts: { success?: Callback<unknown>; complete?: Callback<void> } = {}) => {\n const info = {\n bluetoothEnabled: false,\n locationEnabled: true,\n wifiEnabled: true,\n deviceOrientation: 'portrait',\n }\n call(opts.success, info)\n call(opts.complete, undefined)\n return info\n }\n }\n\n if (typeof wx.getSystemInfoSync !== 'function') {\n wx.getSystemInfoSync = () => ({\n brand: 'simulator',\n model: 'web',\n platform: 'simulator',\n system: 'web',\n language: 'zh_CN',\n SDKVersion: '3.0.0',\n ...buildWindowInfo(),\n })\n }\n\n if (typeof wx.setStorageSync !== 'function') {\n wx.setStorageSync = (key: string, data: unknown) => {\n const value = typeof data === 'string' ? data : JSON.stringify(data)\n localStorage.setItem(makeStorageKey(String(key)), value)\n }\n }\n\n if (typeof wx.getStorageSync !== 'function') {\n wx.getStorageSync = (key: string) => {\n const raw = localStorage.getItem(makeStorageKey(String(key)))\n if (raw == null) return ''\n try {\n return JSON.parse(raw)\n } catch {\n return raw\n }\n }\n }\n\n if (typeof wx.removeStorageSync !== 'function') {\n wx.removeStorageSync = (key: string) => {\n localStorage.removeItem(makeStorageKey(String(key)))\n }\n }\n\n if (typeof wx.clearStorageSync !== 'function') {\n wx.clearStorageSync = () => {\n const prefix = 'dimina:'\n const keys: string[] = []\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i)\n if (key?.startsWith(prefix)) keys.push(key)\n }\n keys.forEach((key) => localStorage.removeItem(key))\n }\n }\n\n if (typeof wx.getStorageInfoSync !== 'function') {\n wx.getStorageInfoSync = () => {\n const prefix = 'dimina:'\n const keys: string[] = []\n let currentSize = 0\n for (let i = 0; i < localStorage.length; i++) {\n const fullKey = localStorage.key(i)\n if (!fullKey?.startsWith(prefix)) continue\n keys.push(fullKey.slice(prefix.length))\n currentSize += (localStorage.getItem(fullKey) || '').length * 2\n }\n return { keys, currentSize, limitSize: 10 * 1024 * 1024 }\n }\n }\n\n if (typeof wx.request !== 'function') {\n wx.request = (opts: {\n url: string\n data?: unknown\n header?: Record<string, string>\n timeout?: number\n method?: string\n dataType?: 'json' | 'text' | 'arraybuffer'\n success?: Callback<unknown>\n fail?: Callback<unknown>\n complete?: Callback<void>\n }) => {\n const controller = new AbortController()\n const method = (opts.method || 'GET').toUpperCase()\n let requestUrl = opts.url\n const init: RequestInit = {\n method,\n headers: { 'Content-Type': 'application/json', ...(opts.header || {}) },\n signal: controller.signal,\n }\n\n if (method === 'GET' && opts.data && typeof opts.data === 'object') {\n const url = new URL(requestUrl, window.location.href)\n Object.entries(opts.data as Record<string, unknown>).forEach(([key, value]) => {\n url.searchParams.append(key, String(value))\n })\n requestUrl = url.toString()\n } else if (opts.data != null) {\n init.body = typeof opts.data === 'string' ? opts.data : JSON.stringify(opts.data)\n }\n\n const timeoutId = Number(opts.timeout) > 0\n ? window.setTimeout(() => controller.abort(), Number(opts.timeout))\n : null\n\n fetch(requestUrl, init)\n .then(async (response) => {\n const headers = Object.fromEntries(response.headers.entries())\n let data: unknown\n if (opts.dataType === 'arraybuffer') data = await response.arrayBuffer()\n else {\n const text = await response.text()\n if (opts.dataType === 'text') data = text\n else {\n try {\n data = JSON.parse(text)\n } catch {\n data = text\n }\n }\n }\n call(opts.success, { data, statusCode: response.status, header: headers, errMsg: 'request:ok' })\n })\n .catch((error) => {\n call(opts.fail, { errMsg: `request:fail ${error instanceof Error ? error.message : String(error)}` })\n })\n .finally(() => {\n if (timeoutId != null) window.clearTimeout(timeoutId)\n call(opts.complete, undefined)\n })\n\n return {\n abort: () => controller.abort(),\n }\n }\n }\n}\n\nexport function setupApiCompatHook(): void {\n const apply = () => {\n const target = window as unknown as { wx?: Record<string, unknown> }\n if (!target.wx || typeof target.wx !== 'object') {\n target.wx = {}\n }\n const wx = target.wx\n ensureWxApi(wx)\n return true\n }\n\n if (apply()) return\n\n const timer = window.setInterval(() => {\n if (apply()) window.clearInterval(timer)\n }, 200)\n}\n", "// Default preload script for the simulator <webview>.\n// Composes all built-in instrumentation. For custom preloads, import individual\n// functions from '@dimina-kit/devtools/preload' and assemble your own.\n//\n// This file is bundled into a single JS file via build:preload (esbuild)\n// because webview sandbox cannot resolve require() for separate modules.\nimport { installSimulatorBridge } from '../runtime/bridge.js'\nimport { installConsoleInstrumentation } from '../instrumentation/console.js'\nimport { installAppDataInstrumentation } from '../instrumentation/app-data.js'\nimport { installWxmlInstrumentation } from '../instrumentation/wxml.js'\nimport { setupApiCompatHook } from '../shared/api-compat.js'\n\n// Note: storage panel data is sourced from the main process via the CDP\n// DOMStorage domain (src/main/services/simulator-storage). No preload-side\n// localStorage hook is required.\n\nsetupApiCompatHook()\ninstallSimulatorBridge()\ninstallConsoleInstrumentation()\ninstallAppDataInstrumentation()\ninstallWxmlInstrumentation()\n"],
5
- "mappings": "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",
6
- "names": ["import_electron", "disposables", "disposables", "result"]
7
- }