@dimina-kit/devtools 0.4.0-dev.20260831134112 → 0.4.0-dev.20260907055341

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 (275) hide show
  1. package/README.md +52 -729
  2. package/dist/main/app/app.d.ts +27 -7
  3. package/dist/main/app/app.js +285 -681
  4. package/dist/main/app/editor-view.d.ts +21 -0
  5. package/dist/main/app/editor-view.js +71 -0
  6. package/dist/main/app/global-mirrors.d.ts +23 -0
  7. package/dist/main/app/global-mirrors.js +37 -0
  8. package/dist/main/app/host-sidebar-default.d.ts +19 -0
  9. package/dist/main/app/host-sidebar-default.js +44 -0
  10. package/dist/main/app/menu-setup.d.ts +13 -0
  11. package/dist/main/app/menu-setup.js +49 -0
  12. package/dist/main/app/open-project-ipc.d.ts +13 -0
  13. package/dist/main/app/open-project-ipc.js +21 -0
  14. package/dist/main/app/project-list-surface.d.ts +31 -0
  15. package/dist/main/app/project-list-surface.js +20 -0
  16. package/dist/main/app/project-window.d.ts +36 -0
  17. package/dist/main/app/project-window.js +93 -0
  18. package/dist/main/app/servers.d.ts +17 -0
  19. package/dist/main/app/servers.js +60 -0
  20. package/dist/main/app/ui-extension-targets.d.ts +42 -0
  21. package/dist/main/app/ui-extension-targets.js +101 -0
  22. package/dist/main/app/window-close-reveal.harness.d.ts +34 -0
  23. package/dist/main/app/window-close-reveal.harness.js +65 -0
  24. package/dist/main/app/window-events.d.ts +15 -0
  25. package/dist/main/app/window-events.js +45 -0
  26. package/dist/main/app/window-runtime-services.d.ts +41 -0
  27. package/dist/main/app/window-runtime-services.js +178 -0
  28. package/dist/main/app/workbench-modules.d.ts +24 -0
  29. package/dist/main/app/workbench-modules.js +51 -0
  30. package/dist/main/app/workbench-window.d.ts +85 -0
  31. package/dist/main/app/workbench-window.js +310 -0
  32. package/dist/main/index.bundle.js +10669 -9096
  33. package/dist/main/ipc/app.d.ts +4 -1
  34. package/dist/main/ipc/app.js +4 -3
  35. package/dist/main/ipc/device-picker.d.ts +16 -0
  36. package/dist/main/ipc/device-picker.js +27 -0
  37. package/dist/main/ipc/index.d.ts +1 -0
  38. package/dist/main/ipc/index.js +1 -0
  39. package/dist/main/ipc/internal-devtools.d.ts +2 -1
  40. package/dist/main/ipc/internal-devtools.js +4 -3
  41. package/dist/main/ipc/popover.d.ts +4 -1
  42. package/dist/main/ipc/popover.js +25 -9
  43. package/dist/main/ipc/project-create.d.ts +2 -1
  44. package/dist/main/ipc/project-create.js +6 -5
  45. package/dist/main/ipc/project-fs.d.ts +3 -1
  46. package/dist/main/ipc/project-fs.js +17 -17
  47. package/dist/main/ipc/projects.d.ts +3 -3
  48. package/dist/main/ipc/projects.js +13 -12
  49. package/dist/main/ipc/session.d.ts +4 -1
  50. package/dist/main/ipc/session.js +16 -11
  51. package/dist/main/ipc/settings.d.ts +4 -1
  52. package/dist/main/ipc/settings.js +12 -19
  53. package/dist/main/ipc/simulator-module.d.ts +5 -0
  54. package/dist/main/ipc/simulator-module.js +9 -5
  55. package/dist/main/ipc/simulator.d.ts +4 -1
  56. package/dist/main/ipc/simulator.js +12 -18
  57. package/dist/main/ipc/tooltip.d.ts +2 -1
  58. package/dist/main/ipc/tooltip.js +8 -7
  59. package/dist/main/ipc/views.d.ts +4 -1
  60. package/dist/main/ipc/views.js +20 -9
  61. package/dist/main/runtime/devtools-backend-before-quit.harness.d.ts +2 -20
  62. package/dist/main/runtime/devtools-backend-before-quit.harness.js +14 -283
  63. package/dist/main/runtime/devtools-backend.js +14 -3
  64. package/dist/main/runtime/devtools-runtime-mock.harness.d.ts +21 -0
  65. package/dist/main/runtime/devtools-runtime-mock.harness.js +313 -0
  66. package/dist/main/services/app-services.d.ts +62 -0
  67. package/dist/main/services/app-services.js +64 -0
  68. package/dist/main/services/automation/connection-target.d.ts +36 -0
  69. package/dist/main/services/automation/connection-target.js +29 -0
  70. package/dist/main/services/automation/console-bridge.d.ts +28 -0
  71. package/dist/main/services/automation/console-bridge.js +91 -0
  72. package/dist/main/services/automation/handlers/app.js +4 -4
  73. package/dist/main/services/automation/handlers/element.js +55 -21
  74. package/dist/main/services/automation/index.d.ts +12 -1
  75. package/dist/main/services/automation/index.js +54 -133
  76. package/dist/main/services/default-adapter.js +1 -1
  77. package/dist/main/services/fs-bridge-protocol.d.ts +61 -0
  78. package/dist/main/services/fs-bridge-protocol.js +34 -0
  79. package/dist/main/services/fs-watch-sse.d.ts +8 -1
  80. package/dist/main/services/fs-watch-sse.js +19 -5
  81. package/dist/main/services/mcp/connection-owner.d.ts +38 -0
  82. package/dist/main/services/mcp/connection-owner.js +79 -0
  83. package/dist/main/services/mcp/index.d.ts +3 -1
  84. package/dist/main/services/mcp/index.js +4 -3
  85. package/dist/main/services/mcp/opened-project.d.ts +88 -0
  86. package/dist/main/services/mcp/opened-project.js +60 -0
  87. package/dist/main/services/mcp/target-manager.d.ts +71 -23
  88. package/dist/main/services/mcp/target-manager.js +269 -142
  89. package/dist/main/services/mcp/target-selection.d.ts +47 -0
  90. package/dist/main/services/mcp/target-selection.js +71 -0
  91. package/dist/main/services/mcp/tools/context-tools.js +20 -5
  92. package/dist/main/services/mcp/tools/project-tools.d.ts +29 -6
  93. package/dist/main/services/mcp/tools/project-tools.js +37 -25
  94. package/dist/main/services/module.d.ts +13 -5
  95. package/dist/main/services/notifications/renderer-notifier.d.ts +28 -4
  96. package/dist/main/services/notifications/renderer-notifier.js +15 -3
  97. package/dist/main/services/projects/local-provider.js +2 -0
  98. package/dist/main/services/projects/project-repository.d.ts +31 -1
  99. package/dist/main/services/projects/project-repository.js +144 -20
  100. package/dist/main/services/projects/types.d.ts +31 -8
  101. package/dist/main/services/safe-area/index.d.ts +19 -5
  102. package/dist/main/services/safe-area/index.js +38 -13
  103. package/dist/main/services/simulator/ui-extensions.d.ts +8 -0
  104. package/dist/main/services/simulator/ui-extensions.js +16 -6
  105. package/dist/main/services/simulator-storage/index.d.ts +12 -1
  106. package/dist/main/services/simulator-storage/index.js +22 -7
  107. package/dist/main/services/simulator-storage/window-scope.d.ts +20 -0
  108. package/dist/main/services/simulator-storage/window-scope.js +20 -0
  109. package/dist/main/services/views/host-slot-port-channel.d.ts +20 -3
  110. package/dist/main/services/views/host-slot-port-channel.js +33 -5
  111. package/dist/main/services/views/managed-web-contents-view.js +21 -1
  112. package/dist/main/services/views/native-simulator-view.js +13 -16
  113. package/dist/main/services/views/overlay-panels-view.d.ts +13 -0
  114. package/dist/main/services/views/overlay-panels-view.js +31 -0
  115. package/dist/main/services/views/view-manager.d.ts +1 -1
  116. package/dist/main/services/views/view-manager.js +3 -0
  117. package/dist/main/services/window-contexts/context-router.d.ts +36 -0
  118. package/dist/main/services/window-contexts/context-router.js +55 -0
  119. package/dist/main/services/workbench-coi-host.d.ts +52 -0
  120. package/dist/main/services/workbench-coi-host.js +227 -0
  121. package/dist/main/services/workbench-coi-server.js +75 -133
  122. package/dist/main/services/workbench-coi-shutdown.d.ts +40 -0
  123. package/dist/main/services/workbench-coi-shutdown.js +69 -0
  124. package/dist/main/services/workbench-coi-static.d.ts +23 -0
  125. package/dist/main/services/workbench-coi-static.js +87 -0
  126. package/dist/main/services/workbench-context.d.ts +27 -3
  127. package/dist/main/services/workbench-context.js +10 -5
  128. package/dist/main/services/workspace/compile-mode-adapter.d.ts +18 -0
  129. package/dist/main/services/workspace/compile-mode-adapter.js +57 -0
  130. package/dist/main/services/workspace/compile-mode-store.d.ts +25 -0
  131. package/dist/main/services/workspace/compile-mode-store.js +71 -0
  132. package/dist/main/services/workspace/workspace-compile-modes.d.ts +59 -0
  133. package/dist/main/services/workspace/workspace-compile-modes.js +93 -0
  134. package/dist/main/services/workspace/workspace-referer.d.ts +17 -0
  135. package/dist/main/services/workspace/workspace-referer.js +26 -0
  136. package/dist/main/services/workspace/workspace-service.d.ts +4 -0
  137. package/dist/main/services/workspace/workspace-service.js +51 -84
  138. package/dist/main/services/workspace/workspace-thumbnails.d.ts +22 -0
  139. package/dist/main/services/workspace/workspace-thumbnails.js +67 -0
  140. package/dist/main/utils/ipc-context-source.d.ts +40 -0
  141. package/dist/main/utils/ipc-context-source.js +23 -0
  142. package/dist/main/utils/ipc-registry.d.ts +42 -36
  143. package/dist/main/utils/ipc-registry.js +117 -50
  144. package/dist/main/utils/sender-policy.d.ts +9 -0
  145. package/dist/main/utils/sender-policy.js +26 -3
  146. package/dist/main/utils/theme.d.ts +3 -2
  147. package/dist/main/utils/theme.js +3 -2
  148. package/dist/main/windows/main-window/create.d.ts +16 -0
  149. package/dist/main/windows/main-window/create.js +19 -11
  150. package/dist/main/windows/main-window/events.d.ts +1 -1
  151. package/dist/main/windows/main-window/events.js +26 -13
  152. package/dist/main/windows/main-window/index.d.ts +1 -1
  153. package/dist/main/windows/main-window/index.js +1 -1
  154. package/dist/native-host/common/common.js +94 -73
  155. package/dist/native-host/render/render.js +4079 -3171
  156. package/dist/native-host/service/service.js +2 -2
  157. package/dist/preload/runtime/native-host.d.ts +4 -0
  158. package/dist/preload/runtime/temp-files.js +9 -2
  159. package/dist/preload/runtime/wait-for-slot-root.d.ts +7 -4
  160. package/dist/preload/runtime/wait-for-slot-root.js +36 -8
  161. package/dist/preload/windows/host-dialog-runtime.cjs +10 -3
  162. package/dist/preload/windows/host-dialog-runtime.cjs.map +2 -2
  163. package/dist/preload/windows/host-sidebar-runtime.cjs +10 -3
  164. package/dist/preload/windows/host-sidebar-runtime.cjs.map +2 -2
  165. package/dist/preload/windows/host-toolbar-runtime.cjs +10 -3
  166. package/dist/preload/windows/host-toolbar-runtime.cjs.map +2 -2
  167. package/dist/preload/windows/main.cjs +181 -4
  168. package/dist/preload/windows/main.cjs.map +4 -4
  169. package/dist/preload/windows/simulator.cjs +10 -0
  170. package/dist/preload/windows/simulator.cjs.map +2 -2
  171. package/dist/preload/windows/simulator.js +10 -0
  172. package/dist/renderer/assets/button-CB2MWjHY.js +2 -0
  173. package/dist/renderer/assets/constants-CkoGPQTS.js +2 -0
  174. package/dist/renderer/assets/constants-zQZ2-y21.js +2 -0
  175. package/dist/renderer/assets/{createLucideIcon-Bqi8hpdi.js → createLucideIcon-cZ9FlZZw.js} +2 -2
  176. package/dist/renderer/assets/devicePicker-H2eIO4e1.js +2 -0
  177. package/dist/renderer/assets/dialog-pHzEA8Vx.js +46 -0
  178. package/dist/renderer/assets/dist-B5HADirS.js +2 -0
  179. package/dist/renderer/assets/{dist-DKWdE1TK.js → dist-DIFlRMKe.js} +2 -2
  180. package/dist/renderer/assets/hostSidebarDefault-DRWh6OCt.js +2 -0
  181. package/dist/renderer/assets/index-CEL_XFge.js +2 -0
  182. package/dist/renderer/assets/{input-Ct3alvkq.js → input-CAObw95L.js} +2 -2
  183. package/dist/renderer/assets/ipc-channels-overlays-gIPUFnqc.js +2 -0
  184. package/dist/renderer/assets/jsx-runtime-DICEQH_0.css +1 -0
  185. package/dist/renderer/assets/{jsx-runtime-DGLHmmOq.js → jsx-runtime-DIw5wnYl.js} +1 -1
  186. package/dist/renderer/assets/plus-BQ9u5EbL.js +2 -0
  187. package/dist/renderer/assets/popover-Cw7G2Ctp.js +2 -0
  188. package/dist/renderer/assets/presets-DMZOb9ay.js +2 -0
  189. package/dist/renderer/assets/project-api-YTOr_Yvo.js +2 -0
  190. package/dist/renderer/assets/{projectCreateDialog-Bbjz75bP.js → projectCreateDialog-BmLqiYxn.js} +2 -2
  191. package/dist/renderer/assets/search-BMvuYF48.js +2 -0
  192. package/dist/renderer/assets/select-nFP95TxM.js +2 -0
  193. package/dist/renderer/assets/settings-CnpVfSWt.js +2 -0
  194. package/dist/renderer/assets/settings-api-Ccsf-Nsj.js +2 -0
  195. package/dist/renderer/assets/settings-tab-bar-CAzrv32m.js +2 -0
  196. package/dist/renderer/assets/smartphone-Bb2GdIKy.js +2 -0
  197. package/dist/renderer/assets/tabs-CPKN3Mmq.js +2 -0
  198. package/dist/renderer/assets/{tooltip-B_-_YVbw.js → tooltip-D6AxXRk5.js} +2 -2
  199. package/dist/renderer/assets/types-Bh0hA7El.js +2 -0
  200. package/dist/renderer/assets/updateDialog-CwndJ0Bl.js +2 -0
  201. package/dist/renderer/assets/{utils-kfQov6Pa.js → utils-sEB5OZEQ.js} +2 -2
  202. package/dist/renderer/assets/view-api-B-2zPBR5.js +2 -0
  203. package/dist/renderer/assets/view-ids-BfaDVV5P.js +2 -0
  204. package/dist/renderer/assets/workbench-BLJ0wKsg.js +5 -0
  205. package/dist/renderer/assets/{workbenchSettings-CV4LVA9b.js → workbenchSettings-YD0Ctbm_.js} +3 -3
  206. package/dist/renderer/entries/device-picker/index.html +28 -0
  207. package/dist/renderer/entries/host-sidebar-default/index.html +6 -5
  208. package/dist/renderer/entries/main/index.html +16 -17
  209. package/dist/renderer/entries/popover/index.html +16 -10
  210. package/dist/renderer/entries/project-create-dialog/index.html +12 -12
  211. package/dist/renderer/entries/settings/index.html +10 -10
  212. package/dist/renderer/entries/tooltip/index.html +5 -5
  213. package/dist/renderer/entries/update-dialog/index.html +10 -10
  214. package/dist/renderer/entries/workbench/index.html +49 -0
  215. package/dist/renderer/entries/workbench-settings/index.html +12 -11
  216. package/dist/service-host/host-env-update.cjs +23 -0
  217. package/dist/service-host/preload.cjs +24 -49
  218. package/dist/service-host/service-message-queue.cjs +71 -0
  219. package/dist/service-host/sync-impls/system-info.js +31 -9
  220. package/dist/shared/compile-mode-state.d.ts +73 -0
  221. package/dist/shared/compile-mode-state.js +100 -0
  222. package/dist/shared/compile-modes.d.ts +152 -0
  223. package/dist/shared/compile-modes.js +237 -0
  224. package/dist/shared/ipc-channels-overlays.d.ts +8 -2
  225. package/dist/shared/ipc-channels-overlays.js +19 -2
  226. package/dist/shared/ipc-channels.d.ts +5 -10
  227. package/dist/shared/ipc-channels.js +17 -14
  228. package/dist/shared/ipc-schemas.d.ts +76 -24
  229. package/dist/shared/ipc-schemas.js +55 -10
  230. package/dist/shared/project-window-types.d.ts +42 -0
  231. package/dist/shared/project-window-types.js +2 -0
  232. package/dist/shared/types.d.ts +43 -17
  233. package/dist/shared/view-ids.d.ts +1 -0
  234. package/dist/shared/view-ids.js +3 -1
  235. package/dist/simulator/assets/bridge-channels-B3JAmRfl.js +2 -0
  236. package/dist/simulator/assets/device-shell-ATEhHV2_.css +1 -0
  237. package/dist/simulator/assets/device-shell-pxnZZp10.js +431 -0
  238. package/dist/simulator/assets/simulator-Dwp7lnvu.js +10 -0
  239. package/dist/simulator/assets/simulator-mini-app-DFo7fhi5.js +2 -0
  240. package/dist/simulator/assets/simulator-ui-B2ddJB1R.js +2 -0
  241. package/dist/simulator/simulator.html +3 -3
  242. package/dist/simulator/temp-files.d.ts +6 -0
  243. package/dist/simulator/temp-files.js +46 -4
  244. package/dist/simulator/types.d.ts +7 -0
  245. package/dist/vscode-workbench/assets/__vite-browser-external-JIkWewFf.js +1 -0
  246. package/dist/vscode-workbench/assets/{dist-CMfmHflW.js → dist-CXG-u1VB.js} +3 -3
  247. package/dist/vscode-workbench/assets/{iconv-lite-umd-Bx8CgaZq.js → iconv-lite-umd-Dxx9Qyb4.js} +1 -1
  248. package/dist/vscode-workbench/assets/{index-CdG6YWhW.js → index-6VJMsaWj.js} +460 -460
  249. package/dist/vscode-workbench/assets/{jschardet-M0qgd2lN.js → jschardet-Ba3D16vt.js} +1 -1
  250. package/dist/vscode-workbench/index.html +1 -1
  251. package/package.json +11 -8
  252. package/dist/renderer/assets/button-D5Q2wkXq.js +0 -2
  253. package/dist/renderer/assets/constants-D7DfVqMp.js +0 -2
  254. package/dist/renderer/assets/constants-D8zsejFq.js +0 -2
  255. package/dist/renderer/assets/dialog-e1TecTOY.js +0 -46
  256. package/dist/renderer/assets/hostSidebarDefault-B3yLfy8j.js +0 -2
  257. package/dist/renderer/assets/index-CsPD68N_.js +0 -5
  258. package/dist/renderer/assets/ipc-channels-overlays-LsDzGAtV.js +0 -2
  259. package/dist/renderer/assets/jsx-runtime-2vXHouwr.css +0 -1
  260. package/dist/renderer/assets/popover-Dix5cm_b.js +0 -2
  261. package/dist/renderer/assets/project-api-k7Oq9iaq.js +0 -2
  262. package/dist/renderer/assets/select-acGb0AmJ.js +0 -2
  263. package/dist/renderer/assets/settings-CQrTMr43.js +0 -2
  264. package/dist/renderer/assets/settings-api-CrUQ9rYV.js +0 -2
  265. package/dist/renderer/assets/settings-tab-bar-Cw1kVIf2.js +0 -2
  266. package/dist/renderer/assets/types-CsEKtFyr.js +0 -2
  267. package/dist/renderer/assets/updateDialog-NsF8223A.js +0 -2
  268. package/dist/renderer/assets/view-api-CLn3rcQE.js +0 -2
  269. package/dist/simulator/assets/bridge-channels-zhsumfky.js +0 -2
  270. package/dist/simulator/assets/device-shell-CmtM1QxP.js +0 -2
  271. package/dist/simulator/assets/device-shell-iFZo1igL.css +0 -1
  272. package/dist/simulator/assets/simulator-CIobn3Mh.js +0 -10
  273. package/dist/simulator/assets/simulator-mini-app-CRe6n9br.js +0 -2
  274. package/dist/simulator/assets/simulator-ui-C_cP602X.js +0 -2
  275. package/dist/vscode-workbench/assets/__vite-browser-external-Bc1vizTf.js +0 -1
@@ -26,23 +26,22 @@
26
26
  overflow: hidden;
27
27
  }
28
28
  </style>
29
- <script type="module" crossorigin src="../../assets/index-CsPD68N_.js"></script>
30
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
31
- <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
32
- <link rel="modulepreload" crossorigin href="../../assets/button-D5Q2wkXq.js">
33
- <link rel="modulepreload" crossorigin href="../../assets/dist-DKWdE1TK.js">
34
- <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-Bqi8hpdi.js">
35
- <link rel="modulepreload" crossorigin href="../../assets/dialog-e1TecTOY.js">
36
- <link rel="modulepreload" crossorigin href="../../assets/types-CsEKtFyr.js">
37
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
38
- <link rel="modulepreload" crossorigin href="../../assets/project-api-k7Oq9iaq.js">
39
- <link rel="modulepreload" crossorigin href="../../assets/settings-api-CrUQ9rYV.js">
40
- <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
41
- <link rel="modulepreload" crossorigin href="../../assets/input-Ct3alvkq.js">
42
- <link rel="modulepreload" crossorigin href="../../assets/select-acGb0AmJ.js">
43
- <link rel="modulepreload" crossorigin href="../../assets/constants-D8zsejFq.js">
44
- <link rel="modulepreload" crossorigin href="../../assets/constants-D7DfVqMp.js">
45
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
29
+ <script type="module" crossorigin src="../../assets/index-CEL_XFge.js"></script>
30
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DIw5wnYl.js">
31
+ <link rel="modulepreload" crossorigin href="../../assets/utils-sEB5OZEQ.js">
32
+ <link rel="modulepreload" crossorigin href="../../assets/button-CB2MWjHY.js">
33
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DIFlRMKe.js">
34
+ <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-cZ9FlZZw.js">
35
+ <link rel="modulepreload" crossorigin href="../../assets/dialog-pHzEA8Vx.js">
36
+ <link rel="modulepreload" crossorigin href="../../assets/plus-BQ9u5EbL.js">
37
+ <link rel="modulepreload" crossorigin href="../../assets/search-BMvuYF48.js">
38
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-gIPUFnqc.js">
39
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-B-2zPBR5.js">
40
+ <link rel="modulepreload" crossorigin href="../../assets/view-ids-BfaDVV5P.js">
41
+ <link rel="modulepreload" crossorigin href="../../assets/project-api-YTOr_Yvo.js">
42
+ <link rel="modulepreload" crossorigin href="../../assets/input-CAObw95L.js">
43
+ <link rel="modulepreload" crossorigin href="../../assets/types-Bh0hA7El.js">
44
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-DICEQH_0.css">
46
45
  </head>
47
46
  <body>
48
47
  <div id="root"></div>
@@ -8,16 +8,22 @@
8
8
  <style>
9
9
  html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: transparent !important; }
10
10
  </style>
11
- <script type="module" crossorigin src="../../assets/popover-Dix5cm_b.js"></script>
12
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
13
- <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
14
- <link rel="modulepreload" crossorigin href="../../assets/button-D5Q2wkXq.js">
15
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
16
- <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
17
- <link rel="modulepreload" crossorigin href="../../assets/input-Ct3alvkq.js">
18
- <link rel="modulepreload" crossorigin href="../../assets/select-acGb0AmJ.js">
19
- <link rel="modulepreload" crossorigin href="../../assets/constants-D7DfVqMp.js">
20
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
11
+ <script type="module" crossorigin src="../../assets/popover-Cw7G2Ctp.js"></script>
12
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DIw5wnYl.js">
13
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DIFlRMKe.js">
14
+ <link rel="modulepreload" crossorigin href="../../assets/utils-sEB5OZEQ.js">
15
+ <link rel="modulepreload" crossorigin href="../../assets/tabs-CPKN3Mmq.js">
16
+ <link rel="modulepreload" crossorigin href="../../assets/button-CB2MWjHY.js">
17
+ <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-cZ9FlZZw.js">
18
+ <link rel="modulepreload" crossorigin href="../../assets/dialog-pHzEA8Vx.js">
19
+ <link rel="modulepreload" crossorigin href="../../assets/dist-B5HADirS.js">
20
+ <link rel="modulepreload" crossorigin href="../../assets/plus-BQ9u5EbL.js">
21
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-gIPUFnqc.js">
22
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-B-2zPBR5.js">
23
+ <link rel="modulepreload" crossorigin href="../../assets/input-CAObw95L.js">
24
+ <link rel="modulepreload" crossorigin href="../../assets/constants-CkoGPQTS.js">
25
+ <link rel="modulepreload" crossorigin href="../../assets/select-nFP95TxM.js">
26
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-DICEQH_0.css">
21
27
  </head>
22
28
  <body>
23
29
  <div id="root"></div>
@@ -8,18 +8,18 @@
8
8
  <style>
9
9
  html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: transparent !important; }
10
10
  </style>
11
- <script type="module" crossorigin src="../../assets/projectCreateDialog-Bbjz75bP.js"></script>
12
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
13
- <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
14
- <link rel="modulepreload" crossorigin href="../../assets/button-D5Q2wkXq.js">
15
- <link rel="modulepreload" crossorigin href="../../assets/dist-DKWdE1TK.js">
16
- <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-Bqi8hpdi.js">
17
- <link rel="modulepreload" crossorigin href="../../assets/dialog-e1TecTOY.js">
18
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
19
- <link rel="modulepreload" crossorigin href="../../assets/project-api-k7Oq9iaq.js">
20
- <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
21
- <link rel="modulepreload" crossorigin href="../../assets/input-Ct3alvkq.js">
22
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
11
+ <script type="module" crossorigin src="../../assets/projectCreateDialog-BmLqiYxn.js"></script>
12
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DIw5wnYl.js">
13
+ <link rel="modulepreload" crossorigin href="../../assets/utils-sEB5OZEQ.js">
14
+ <link rel="modulepreload" crossorigin href="../../assets/button-CB2MWjHY.js">
15
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DIFlRMKe.js">
16
+ <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-cZ9FlZZw.js">
17
+ <link rel="modulepreload" crossorigin href="../../assets/dialog-pHzEA8Vx.js">
18
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-gIPUFnqc.js">
19
+ <link rel="modulepreload" crossorigin href="../../assets/project-api-YTOr_Yvo.js">
20
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-B-2zPBR5.js">
21
+ <link rel="modulepreload" crossorigin href="../../assets/input-CAObw95L.js">
22
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-DICEQH_0.css">
23
23
  </head>
24
24
  <body>
25
25
  <div id="root"></div>
@@ -11,16 +11,16 @@
11
11
  closes the overlay — mirrors the popover entry. */
12
12
  html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: transparent !important; }
13
13
  </style>
14
- <script type="module" crossorigin src="../../assets/settings-CQrTMr43.js"></script>
15
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
16
- <link rel="modulepreload" crossorigin href="../../assets/dist-DKWdE1TK.js">
17
- <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
18
- <link rel="modulepreload" crossorigin href="../../assets/settings-tab-bar-Cw1kVIf2.js">
19
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
20
- <link rel="modulepreload" crossorigin href="../../assets/settings-api-CrUQ9rYV.js">
21
- <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
22
- <link rel="modulepreload" crossorigin href="../../assets/input-Ct3alvkq.js">
23
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
14
+ <script type="module" crossorigin src="../../assets/settings-CnpVfSWt.js"></script>
15
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DIw5wnYl.js">
16
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DIFlRMKe.js">
17
+ <link rel="modulepreload" crossorigin href="../../assets/utils-sEB5OZEQ.js">
18
+ <link rel="modulepreload" crossorigin href="../../assets/tabs-CPKN3Mmq.js">
19
+ <link rel="modulepreload" crossorigin href="../../assets/settings-tab-bar-CAzrv32m.js">
20
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-gIPUFnqc.js">
21
+ <link rel="modulepreload" crossorigin href="../../assets/settings-api-Ccsf-Nsj.js">
22
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-B-2zPBR5.js">
23
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-DICEQH_0.css">
24
24
  </head>
25
25
  <body>
26
26
  <div id="root"></div>
@@ -9,11 +9,11 @@
9
9
  html, body { margin: 0; padding: 0; width: -moz-max-content; width: max-content; height: -moz-max-content; height: max-content; overflow: hidden; background: transparent !important; }
10
10
  #root { width: -moz-max-content; width: max-content; height: -moz-max-content; height: max-content; display: block; overflow: visible; }
11
11
  </style>
12
- <script type="module" crossorigin src="../../assets/tooltip-B_-_YVbw.js"></script>
13
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
14
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
15
- <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
16
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
12
+ <script type="module" crossorigin src="../../assets/tooltip-D6AxXRk5.js"></script>
13
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DIw5wnYl.js">
14
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-gIPUFnqc.js">
15
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-B-2zPBR5.js">
16
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-DICEQH_0.css">
17
17
  </head>
18
18
  <body>
19
19
  <div id="root"></div>
@@ -8,16 +8,16 @@
8
8
  <style>
9
9
  html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: transparent !important; }
10
10
  </style>
11
- <script type="module" crossorigin src="../../assets/updateDialog-NsF8223A.js"></script>
12
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
13
- <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
14
- <link rel="modulepreload" crossorigin href="../../assets/button-D5Q2wkXq.js">
15
- <link rel="modulepreload" crossorigin href="../../assets/dist-DKWdE1TK.js">
16
- <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-Bqi8hpdi.js">
17
- <link rel="modulepreload" crossorigin href="../../assets/dialog-e1TecTOY.js">
18
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
19
- <link rel="modulepreload" crossorigin href="../../assets/view-api-CLn3rcQE.js">
20
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
11
+ <script type="module" crossorigin src="../../assets/updateDialog-CwndJ0Bl.js"></script>
12
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DIw5wnYl.js">
13
+ <link rel="modulepreload" crossorigin href="../../assets/utils-sEB5OZEQ.js">
14
+ <link rel="modulepreload" crossorigin href="../../assets/button-CB2MWjHY.js">
15
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DIFlRMKe.js">
16
+ <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-cZ9FlZZw.js">
17
+ <link rel="modulepreload" crossorigin href="../../assets/dialog-pHzEA8Vx.js">
18
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-gIPUFnqc.js">
19
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-B-2zPBR5.js">
20
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-DICEQH_0.css">
21
21
  </head>
22
22
  <body>
23
23
  <div id="root"></div>
@@ -0,0 +1,49 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <!--
6
+ CSP: deliberately permissive (B5 phase). Inline JS/CSS + eval are kept for
7
+ dev tooling / nodeIntegration:true; connect-src spans http/ws because
8
+ automation, MCP, and the simulator dev server all open sockets. Tighten in
9
+ C-phase once the preload bridge removes the need for `unsafe-*`.
10
+ -->
11
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: http: https:; font-src 'self' data:; media-src 'self' blob: http: https:; connect-src 'self' http: https: ws: wss:;" />
12
+ <title>Dimina DevTools</title>
13
+ <style>
14
+ /*
15
+ * The React tree always occupies the full window. Main-process overlays
16
+ * (the simulator's Chromium DevTools WebContentsView, the console, and the
17
+ * workbench editor WebContentsView) are positioned to match measured
18
+ * placeholder rects inside the React tree (see useViewAnchor /
19
+ * createPlacementAnchor in project-runtime.tsx).
20
+ */
21
+ html, body, #root { margin: 0; padding: 0; }
22
+ html, body { width: 100vw; height: 100vh; overflow: hidden; }
23
+ #root {
24
+ position: fixed;
25
+ inset: 0;
26
+ overflow: hidden;
27
+ }
28
+ </style>
29
+ <script type="module" crossorigin src="../../assets/workbench-BLJ0wKsg.js"></script>
30
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DIw5wnYl.js">
31
+ <link rel="modulepreload" crossorigin href="../../assets/presets-DMZOb9ay.js">
32
+ <link rel="modulepreload" crossorigin href="../../assets/utils-sEB5OZEQ.js">
33
+ <link rel="modulepreload" crossorigin href="../../assets/button-CB2MWjHY.js">
34
+ <link rel="modulepreload" crossorigin href="../../assets/createLucideIcon-cZ9FlZZw.js">
35
+ <link rel="modulepreload" crossorigin href="../../assets/smartphone-Bb2GdIKy.js">
36
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-gIPUFnqc.js">
37
+ <link rel="modulepreload" crossorigin href="../../assets/view-api-B-2zPBR5.js">
38
+ <link rel="modulepreload" crossorigin href="../../assets/view-ids-BfaDVV5P.js">
39
+ <link rel="modulepreload" crossorigin href="../../assets/project-api-YTOr_Yvo.js">
40
+ <link rel="modulepreload" crossorigin href="../../assets/settings-api-Ccsf-Nsj.js">
41
+ <link rel="modulepreload" crossorigin href="../../assets/constants-CkoGPQTS.js">
42
+ <link rel="modulepreload" crossorigin href="../../assets/select-nFP95TxM.js">
43
+ <link rel="modulepreload" crossorigin href="../../assets/constants-zQZ2-y21.js">
44
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-DICEQH_0.css">
45
+ </head>
46
+ <body>
47
+ <div id="root"></div>
48
+ </body>
49
+ </html>
@@ -6,17 +6,18 @@
6
6
  <!-- See entries/main/index.html for CSP rationale. -->
7
7
  <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: http: https:; font-src 'self' data:; media-src 'self' blob: http: https:; connect-src 'self' http: https: ws: wss:;" />
8
8
  <title>开发工具设置</title>
9
- <script type="module" crossorigin src="../../assets/workbenchSettings-CV4LVA9b.js"></script>
10
- <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DGLHmmOq.js">
11
- <link rel="modulepreload" crossorigin href="../../assets/dist-DKWdE1TK.js">
12
- <link rel="modulepreload" crossorigin href="../../assets/utils-kfQov6Pa.js">
13
- <link rel="modulepreload" crossorigin href="../../assets/settings-tab-bar-Cw1kVIf2.js">
14
- <link rel="modulepreload" crossorigin href="../../assets/button-D5Q2wkXq.js">
15
- <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-LsDzGAtV.js">
16
- <link rel="modulepreload" crossorigin href="../../assets/settings-api-CrUQ9rYV.js">
17
- <link rel="modulepreload" crossorigin href="../../assets/input-Ct3alvkq.js">
18
- <link rel="modulepreload" crossorigin href="../../assets/constants-D7DfVqMp.js">
19
- <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-2vXHouwr.css">
9
+ <script type="module" crossorigin src="../../assets/workbenchSettings-YD0Ctbm_.js"></script>
10
+ <link rel="modulepreload" crossorigin href="../../assets/jsx-runtime-DIw5wnYl.js">
11
+ <link rel="modulepreload" crossorigin href="../../assets/utils-sEB5OZEQ.js">
12
+ <link rel="modulepreload" crossorigin href="../../assets/button-CB2MWjHY.js">
13
+ <link rel="modulepreload" crossorigin href="../../assets/dist-DIFlRMKe.js">
14
+ <link rel="modulepreload" crossorigin href="../../assets/tabs-CPKN3Mmq.js">
15
+ <link rel="modulepreload" crossorigin href="../../assets/settings-tab-bar-CAzrv32m.js">
16
+ <link rel="modulepreload" crossorigin href="../../assets/ipc-channels-overlays-gIPUFnqc.js">
17
+ <link rel="modulepreload" crossorigin href="../../assets/settings-api-Ccsf-Nsj.js">
18
+ <link rel="modulepreload" crossorigin href="../../assets/input-CAObw95L.js">
19
+ <link rel="modulepreload" crossorigin href="../../assets/constants-CkoGPQTS.js">
20
+ <link rel="stylesheet" crossorigin href="../../assets/jsx-runtime-DICEQH_0.css">
20
21
  </head>
21
22
  <body>
22
23
  <div id="root"></div>
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `hostEnvUpdate` is the ONE message that carries a device change into a
3
+ * running service host (bridge-router's `setDevice` → `applyDeviceToSession`).
4
+ * service.js consumes it for the async `wx.getSystemInfo` path; the sync
5
+ * `wx.getSystemInfoSync()` patch instead reads `__diminaSpawnContext
6
+ * .hostEnvSnapshot` on every call, so the preload merges the same message into
7
+ * that snapshot BEFORE handing it to service.js. Doing it on the same delivery
8
+ * keeps ordering: the `pageResize` that follows in the same batch already sees
9
+ * the new metrics from inside `Page.onResize`.
10
+ *
11
+ * Returns true when the message was a well-formed hostEnvUpdate and the
12
+ * snapshot was replaced; false leaves `ctx` untouched.
13
+ */
14
+ function applyHostEnvUpdate(ctx, msg) {
15
+ if (!ctx || typeof ctx !== 'object') return false
16
+ if (!msg || typeof msg !== 'object' || msg.type !== 'hostEnvUpdate') return false
17
+ const systemInfo = msg.body && msg.body.systemInfo
18
+ if (!systemInfo || typeof systemInfo !== 'object') return false
19
+ ctx.hostEnvSnapshot = { ...(ctx.hostEnvSnapshot || {}), ...systemInfo }
20
+ return true
21
+ }
22
+
23
+ module.exports = { applyHostEnvUpdate }
@@ -4,10 +4,6 @@ const CHANNELS = {
4
4
  SERVICE_INVOKE: 'dmb:service:invoke',
5
5
  SERVICE_PUBLISH: 'dmb:service:publish',
6
6
  TO_SERVICE: 'dmb:to-service',
7
- // main → this window: live-update the host-env snapshot on a device change so
8
- // wx.getSystemInfoSync() reflects the newly-selected device without a
9
- // relaunch. Mirrors ServiceHostChannel.HostEnvUpdate in shared/ipc-channels.ts.
10
- HOST_ENV_UPDATE: 'service-host:host-env:update',
11
7
  // main → this window: AppData-panel edit write-back. Mirrors
12
8
  // ServiceHostChannel.AppDataSetData in shared/ipc-channels.ts.
13
9
  APPDATA_SET_DATA: 'service-host:appdata:set-data',
@@ -15,9 +11,8 @@ const CHANNELS = {
15
11
 
16
12
  const params = new URLSearchParams(globalThis.location && globalThis.location.search || '')
17
13
  const bridgeId = params.get('bridgeId')
18
- const pendingMessages = []
19
- let onMessageFn = null
20
- let drainScheduled = false
14
+ const { createDeliveryQueue } = require('./service-message-queue.cjs')
15
+ const { applyHostEnvUpdate } = require('./host-env-update.cjs')
21
16
 
22
17
  if (!bridgeId) {
23
18
  // Warming idle: a pre-warm pool loads this preload against about:blank (no
@@ -73,69 +68,46 @@ globalThis.__diminaRegisteredApis = registeredApisRaw
73
68
  ? registeredApisRaw.split(',').map((name) => name.trim()).filter(Boolean)
74
69
  : []
75
70
 
76
- // Live host-env updates (native-host device dropdown). The binding above is
77
- // non-configurable, but the inner object's properties are writable — merge the
78
- // pushed metrics into `hostEnvSnapshot` in place. `sync-impls/system-info.ts`
79
- // reads `this.hostEnvSnapshot` fresh on every `getSystemInfoSync()`, so the
80
- // next call (and the mini-app code that invokes it) sees the new device.
81
- ipcRenderer.on(CHANNELS.HOST_ENV_UPDATE, (_event, snapshot) => {
82
- if (!snapshot || typeof snapshot !== 'object') return
83
- const ctx = globalThis.__diminaSpawnContext
84
- if (!ctx) return
85
- ctx.hostEnvSnapshot = { ...(ctx.hostEnvSnapshot || {}), ...snapshot }
86
- })
87
-
88
71
  function reportError(stage, error) {
89
72
  const message = error && error.stack ? error.stack : String(error)
90
73
  console.error(`[service-host] ${stage}`, error)
91
74
  ipcRenderer.send(CHANNELS.SERVICE_INVOKE, {
92
- bridgeId,
93
75
  msg: {
94
76
  type: 'serviceHostError',
95
77
  target: 'container',
96
- body: { stage, message },
78
+ // The spawn page goes in the body, where main reads page ids from
79
+ // (`readBridgeId`) — an error raised while it is still up is attributed
80
+ // to it, and one raised after it is gone falls back to the active page.
81
+ body: { stage, message, bridgeId },
97
82
  },
98
83
  })
99
84
  }
100
85
 
101
- function deliver(msg) {
102
- if (!onMessageFn) {
103
- pendingMessages.push(msg)
104
- return
105
- }
106
- try {
107
- onMessageFn(msg)
108
- } catch (error) {
109
- reportError('onMessage', error)
110
- }
111
- }
112
-
113
- function scheduleDrain() {
114
- if (drainScheduled) return
115
- drainScheduled = true
116
- queueMicrotask(() => {
117
- drainScheduled = false
118
- while (onMessageFn && pendingMessages.length > 0) {
119
- deliver(pendingMessages.shift())
120
- }
121
- })
122
- }
86
+ const queue = createDeliveryQueue({
87
+ // hostEnvUpdate patches the spawn snapshot right before the service reads the same
88
+ // message, so a queued pageResize sees the geometry that was current when it was sent.
89
+ beforeDispatch: (msg) => applyHostEnvUpdate(globalThis.__diminaSpawnContext, msg),
90
+ onError: reportError,
91
+ })
123
92
 
124
93
  Object.defineProperty(globalThis, 'DiminaServiceBridge', {
125
94
  value: {
126
95
  get onMessage() {
127
- return onMessageFn
96
+ return queue.getHandler()
128
97
  },
129
98
  set onMessage(handler) {
130
- onMessageFn = typeof handler === 'function' ? handler : null
131
- scheduleDrain()
99
+ queue.setHandler(handler)
132
100
  },
101
+ // Neither send stamps this window's spawn bridgeId: it names the page this
102
+ // service host was STARTED for, which a reLaunch/redirectTo can close while
103
+ // the host keeps serving the session. Main routes by the sending
104
+ // webContents plus the page id the message itself carries.
133
105
  invoke(msg) {
134
- ipcRenderer.send(CHANNELS.SERVICE_INVOKE, { bridgeId, msg })
106
+ ipcRenderer.send(CHANNELS.SERVICE_INVOKE, { msg })
135
107
  return undefined
136
108
  },
137
109
  publish(targetBridgeId, msg) {
138
- ipcRenderer.send(CHANNELS.SERVICE_PUBLISH, { bridgeId, targetBridgeId, msg })
110
+ ipcRenderer.send(CHANNELS.SERVICE_PUBLISH, { targetBridgeId, msg })
139
111
  },
140
112
  },
141
113
  writable: false,
@@ -212,8 +184,11 @@ if (typeof globalThis.importScripts !== 'function') {
212
184
  }
213
185
  }
214
186
 
187
+ // Device changes ride the ordinary service channel as `hostEnvUpdate`; the queue's
188
+ // beforeDispatch merges them into `__diminaSpawnContext.hostEnvSnapshot` (the object is
189
+ // writable even though the binding is not) in stream order.
215
190
  ipcRenderer.on(CHANNELS.TO_SERVICE, (_event, payload) => {
216
- deliver(payload && payload.msg)
191
+ queue.deliver(payload && payload.msg)
217
192
  })
218
193
 
219
194
  // AppData-panel edit write-back. The service runtime evaluates in THIS window's
@@ -0,0 +1,71 @@
1
+ 'use strict'
2
+
3
+ /**
4
+ * Orders every message from main to the service exactly as it arrived, even when the
5
+ * service registers its onMessage handler late or a handler re-enters `deliver`.
6
+ * Every message goes through one FIFO; only the drain loop dispatches, so a message
7
+ * delivered while a drain is pending or running always lands behind what is already
8
+ * queued. Without a handler the backlog waits; `setHandler` drains it on a microtask,
9
+ * and with nothing queued a delivery dispatches synchronously.
10
+ *
11
+ * `beforeDispatch` runs right before the handler sees each message — never at enqueue
12
+ * time — so side effects it carries (like a hostEnvUpdate patching the spawn context)
13
+ * become visible in the same order the service observes the message stream. A throw in
14
+ * either step is reported through `onError` and never drops the message or stops the
15
+ * stream.
16
+ */
17
+ function createDeliveryQueue({ beforeDispatch, onError } = {}) {
18
+ const pending = []
19
+ let handler = null
20
+ let drainScheduled = false
21
+ let draining = false
22
+
23
+ function report(stage, error) {
24
+ if (onError) onError(stage, error)
25
+ }
26
+
27
+ function dispatch(msg) {
28
+ if (beforeDispatch) {
29
+ try {
30
+ beforeDispatch(msg)
31
+ } catch (error) {
32
+ report('beforeDispatch', error)
33
+ }
34
+ }
35
+ try {
36
+ handler(msg)
37
+ } catch (error) {
38
+ report('onMessage', error)
39
+ }
40
+ }
41
+
42
+ function drain() {
43
+ if (draining) return
44
+ draining = true
45
+ try {
46
+ while (handler && pending.length > 0) dispatch(pending.shift())
47
+ } finally {
48
+ draining = false
49
+ }
50
+ }
51
+
52
+ function deliver(msg) {
53
+ pending.push(msg)
54
+ if (handler && !drainScheduled) drain()
55
+ }
56
+
57
+ function setHandler(fn) {
58
+ handler = typeof fn === 'function' ? fn : null
59
+ // An empty backlog needs no deferred drain, so the next deliver dispatches at once.
60
+ if (!handler || drainScheduled || pending.length === 0) return
61
+ drainScheduled = true
62
+ queueMicrotask(() => {
63
+ drainScheduled = false
64
+ drain()
65
+ })
66
+ }
67
+
68
+ return { deliver, setHandler, getHandler: () => handler }
69
+ }
70
+
71
+ module.exports = { createDeliveryQueue }
@@ -6,6 +6,34 @@ export function getSystemInfoSync() {
6
6
  const windowHeight = numberOr(snapshot.windowHeight, globalThis.innerHeight, screenHeight);
7
7
  const statusBarHeight = numberOr(snapshot.statusBarHeight, 0);
8
8
  const safeAreaBottom = windowHeight;
9
+ const deviceOrientation = snapshot.deviceOrientation ?? 'portrait';
10
+ // A snapshot minted by the runtime's `deviceInfoToHostEnv` already carries
11
+ // the resolved rect — it is the single source of truth for these numbers, so
12
+ // carry it through rather than re-deriving and risking a different answer
13
+ // from the async and per-spawn paths.
14
+ const resolved = snapshot.safeArea;
15
+ // Older snapshots carry only the measured per-edge insets (safeAreaInsets):
16
+ // right/bottom are distances from the far edge, so they convert to the
17
+ // left/top-origin safeArea rect by subtracting from the window size. Neither
18
+ // present (no device selected yet) falls back to top=statusBarHeight only.
19
+ const insets = snapshot.safeAreaInsets;
20
+ const safeArea = resolved ?? (insets
21
+ ? {
22
+ left: insets.left,
23
+ top: insets.top,
24
+ right: windowWidth - insets.right,
25
+ bottom: windowHeight - insets.bottom,
26
+ width: windowWidth - insets.right - insets.left,
27
+ height: windowHeight - insets.bottom - insets.top,
28
+ }
29
+ : {
30
+ width: windowWidth,
31
+ height: windowHeight - statusBarHeight,
32
+ top: statusBarHeight,
33
+ bottom: safeAreaBottom,
34
+ left: 0,
35
+ right: windowWidth,
36
+ });
9
37
  return {
10
38
  brand: stringOr(snapshot.brand, 'devtools'),
11
39
  model: stringOr(snapshot.model, 'devtools'),
@@ -21,16 +49,10 @@ export function getSystemInfoSync() {
21
49
  platform: stringOr(snapshot.platform, navigator.platform || 'ios'),
22
50
  fontSizeSetting: 16,
23
51
  SDKVersion: stringOr(snapshot.SDKVersion, '3.0.0'),
24
- deviceOrientation: 'portrait',
52
+ deviceOrientation,
25
53
  theme: stringOr(snapshot.theme, globalThis.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'),
26
- safeArea: {
27
- width: windowWidth,
28
- height: windowHeight - statusBarHeight,
29
- top: statusBarHeight,
30
- bottom: safeAreaBottom,
31
- left: 0,
32
- right: windowWidth,
33
- },
54
+ safeArea,
55
+ screenTop: numberOr(snapshot.screenTop, statusBarHeight),
34
56
  };
35
57
  }
36
58
  export function getAccountInfoSync() {
@@ -0,0 +1,73 @@
1
+ /**
2
+ * In-memory compile-mode model: selection tracks a minted id, not an index
3
+ * into a list. Storage (`CompileModes`, WeChat's `condition.miniprogram`
4
+ * shape) stays index-based so `project.config.json` keeps round-tripping —
5
+ * `stateFromStored`/`storedFromState` are the only two places index
6
+ * arithmetic happens at all. Everywhere else (in particular
7
+ * `applyCompileModeCommand`) only ever compares/reassigns ids, so deleting or
8
+ * reordering entries can never select the wrong mode by shifting a stale
9
+ * index onto it.
10
+ */
11
+ import { type CompileMode, type CompileModes } from './compile-modes.js';
12
+ export type CompileModeId = string;
13
+ export interface CompileModeEntry {
14
+ id: CompileModeId;
15
+ mode: CompileMode;
16
+ }
17
+ export interface CompileModeState {
18
+ /** `null` selects 普通编译. */
19
+ selectedId: CompileModeId | null;
20
+ entries: CompileModeEntry[];
21
+ }
22
+ export type MintId = () => CompileModeId;
23
+ /** An empty model — no custom modes, 普通编译 selected. */
24
+ export declare function emptyCompileModeState(): CompileModeState;
25
+ /**
26
+ * Build the in-memory state from whatever is on disk, minting a fresh id for
27
+ * each surviving entry in list order. Selection is carried across as the
28
+ * entry's identity (the freshly minted id), not the raw numeric `current` —
29
+ * `normalizeCompileModes` may have already remapped `current` when dropping
30
+ * a malformed earlier entry, so the id assigned here already points at the
31
+ * same data the stored `current` named.
32
+ */
33
+ export declare function stateFromStored(raw: unknown, mintId: MintId): CompileModeState;
34
+ /** Project the in-memory state back into the on-disk index-based shape. */
35
+ export declare function storedFromState(state: CompileModeState): CompileModes;
36
+ /** The selected entry's mode, or `null` for 普通编译 (including a ghost id). */
37
+ export declare function selectedMode(state: CompileModeState): CompileMode | null;
38
+ export type CompileModeCommand = {
39
+ type: 'select';
40
+ id: CompileModeId | null;
41
+ } | {
42
+ type: 'add';
43
+ mode: CompileMode;
44
+ } | {
45
+ type: 'update';
46
+ id: CompileModeId;
47
+ mode: CompileMode;
48
+ } | {
49
+ type: 'remove';
50
+ id: CompileModeId;
51
+ };
52
+ export interface CompileModeApplyResult {
53
+ state: CompileModeState;
54
+ relaunch: boolean;
55
+ }
56
+ /** A `CompileModeStore`'s current contents, tagged with a monotonic revision so a stale fetch racing a push can be told apart from a fresher one. */
57
+ export interface CompileModeSnapshot {
58
+ revision: number;
59
+ state: CompileModeState;
60
+ }
61
+ /** A snapshot plus whether the change affects what's currently running, for `RendererNotifier.compileModesChanged` pushes. */
62
+ export interface CompileModeChange extends CompileModeSnapshot {
63
+ relaunch: boolean;
64
+ }
65
+ /**
66
+ * Interpret one command against the current state. `relaunch` reports
67
+ * whether the running configuration changed, so a caller only restarts the
68
+ * simulator when the selected mode itself moved. A command that names an id
69
+ * nothing matches is a no-op and returns the SAME state reference (not a
70
+ * copy) so a caller can cheaply tell "nothing changed" from "changed".
71
+ */
72
+ export declare function applyCompileModeCommand(state: CompileModeState, command: CompileModeCommand, mintId: MintId): CompileModeApplyResult;
73
+ //# sourceMappingURL=compile-mode-state.d.ts.map