@dimina-kit/devtools 0.4.0 → 0.5.0-dev.20260908120530

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 (507) hide show
  1. package/README.md +51 -660
  2. package/dist/main/api.d.ts +2 -1
  3. package/dist/main/app/app.d.ts +41 -12
  4. package/dist/main/app/app.js +299 -514
  5. package/dist/main/app/bootstrap.d.ts +8 -5
  6. package/dist/main/app/bootstrap.js +15 -15
  7. package/dist/main/app/editor-view.d.ts +21 -0
  8. package/dist/main/app/editor-view.js +71 -0
  9. package/dist/main/app/global-mirrors.d.ts +23 -0
  10. package/dist/main/app/global-mirrors.js +37 -0
  11. package/dist/main/app/host-sidebar-default.d.ts +19 -0
  12. package/dist/main/app/host-sidebar-default.js +44 -0
  13. package/dist/main/app/lifecycle.d.ts +12 -1
  14. package/dist/main/app/lifecycle.js +27 -1
  15. package/dist/main/app/menu-setup.d.ts +13 -0
  16. package/dist/main/app/menu-setup.js +49 -0
  17. package/dist/main/app/native-overview.d.ts +1 -1
  18. package/dist/main/app/open-project-ipc.d.ts +13 -0
  19. package/dist/main/app/open-project-ipc.js +21 -0
  20. package/dist/main/app/project-list-surface.d.ts +31 -0
  21. package/dist/main/app/project-list-surface.js +20 -0
  22. package/dist/main/app/project-window.d.ts +36 -0
  23. package/dist/main/app/project-window.js +93 -0
  24. package/dist/main/app/servers.d.ts +17 -0
  25. package/dist/main/app/servers.js +60 -0
  26. package/dist/main/app/ui-extension-targets.d.ts +42 -0
  27. package/dist/main/app/ui-extension-targets.js +101 -0
  28. package/dist/main/app/window-close-reveal.harness.d.ts +34 -0
  29. package/dist/main/app/window-close-reveal.harness.js +65 -0
  30. package/dist/main/app/window-events.d.ts +15 -0
  31. package/dist/main/app/window-events.js +45 -0
  32. package/dist/main/app/window-runtime-services.d.ts +41 -0
  33. package/dist/main/app/window-runtime-services.js +197 -0
  34. package/dist/main/app/workbench-modules.d.ts +24 -0
  35. package/dist/main/app/workbench-modules.js +51 -0
  36. package/dist/main/app/workbench-window.d.ts +85 -0
  37. package/dist/main/app/workbench-window.js +310 -0
  38. package/dist/main/index.bundle.js +11712 -9986
  39. package/dist/main/index.js +49 -1
  40. package/dist/main/ipc/app-lifecycle.d.ts +1 -31
  41. package/dist/main/ipc/app-lifecycle.js +1 -53
  42. package/dist/main/ipc/app.d.ts +4 -1
  43. package/dist/main/ipc/app.js +4 -3
  44. package/dist/main/ipc/bridge-router.d.ts +19 -116
  45. package/dist/main/ipc/bridge-router.js +28 -2128
  46. package/dist/main/ipc/device-picker.d.ts +16 -0
  47. package/dist/main/ipc/device-picker.js +27 -0
  48. package/dist/main/ipc/index.d.ts +5 -0
  49. package/dist/main/ipc/index.js +5 -0
  50. package/dist/main/ipc/internal-devtools.d.ts +16 -0
  51. package/dist/main/ipc/internal-devtools.js +10 -0
  52. package/dist/main/ipc/page-scroll.d.ts +1 -13
  53. package/dist/main/ipc/page-scroll.js +1 -16
  54. package/dist/main/ipc/popover.d.ts +4 -1
  55. package/dist/main/ipc/popover.js +26 -19
  56. package/dist/main/ipc/project-create.d.ts +16 -0
  57. package/dist/main/ipc/project-create.js +27 -0
  58. package/dist/main/ipc/project-fs.d.ts +38 -3
  59. package/dist/main/ipc/project-fs.js +53 -22
  60. package/dist/main/ipc/projects.d.ts +3 -3
  61. package/dist/main/ipc/projects.js +47 -11
  62. package/dist/main/ipc/session-listener-bag.d.ts +1 -40
  63. package/dist/main/ipc/session-listener-bag.js +1 -39
  64. package/dist/main/ipc/session.d.ts +4 -1
  65. package/dist/main/ipc/session.js +26 -26
  66. package/dist/main/ipc/settings.d.ts +4 -1
  67. package/dist/main/ipc/settings.js +17 -19
  68. package/dist/main/ipc/simulator-module.d.ts +9 -3
  69. package/dist/main/ipc/simulator-module.js +13 -10
  70. package/dist/main/ipc/simulator.d.ts +4 -1
  71. package/dist/main/ipc/simulator.js +12 -18
  72. package/dist/main/ipc/tooltip.d.ts +14 -0
  73. package/dist/main/ipc/tooltip.js +29 -0
  74. package/dist/main/ipc/views.d.ts +19 -2
  75. package/dist/main/ipc/views.js +76 -8
  76. package/dist/main/runtime/devtools-backend-before-quit.harness.d.ts +43 -0
  77. package/dist/main/runtime/devtools-backend-before-quit.harness.js +87 -0
  78. package/dist/main/runtime/devtools-backend.js +60 -4
  79. package/dist/main/runtime/devtools-runtime-mock.harness.d.ts +21 -0
  80. package/dist/main/runtime/devtools-runtime-mock.harness.js +313 -0
  81. package/dist/main/runtime/miniapp-runtime.d.ts +91 -22
  82. package/dist/main/services/app-services.d.ts +62 -0
  83. package/dist/main/services/app-services.js +64 -0
  84. package/dist/main/services/automation/connection-target.d.ts +36 -0
  85. package/dist/main/services/automation/connection-target.js +29 -0
  86. package/dist/main/services/automation/console-bridge.d.ts +28 -0
  87. package/dist/main/services/automation/console-bridge.js +91 -0
  88. package/dist/main/services/automation/handlers/app.js +4 -4
  89. package/dist/main/services/automation/handlers/element.js +55 -21
  90. package/dist/main/services/automation/index.d.ts +12 -1
  91. package/dist/main/services/automation/index.js +54 -133
  92. package/dist/main/services/cdp-session/index.d.ts +87 -0
  93. package/dist/main/services/cdp-session/index.js +173 -0
  94. package/dist/main/services/compile-standby.js +4 -0
  95. package/dist/main/services/console-forward/cdp-inject.d.ts +18 -0
  96. package/dist/main/services/console-forward/cdp-inject.js +30 -0
  97. package/dist/main/services/console-forward/global-console-mirror.d.ts +33 -0
  98. package/dist/main/services/console-forward/global-console-mirror.js +71 -0
  99. package/dist/main/services/console-forward/global-diagnostics-mirror.d.ts +33 -0
  100. package/dist/main/services/console-forward/global-diagnostics-mirror.js +73 -0
  101. package/dist/main/services/console-forward/index.d.ts +1 -46
  102. package/dist/main/services/console-forward/index.js +1 -185
  103. package/dist/main/services/console-forward/internal-log.d.ts +2 -0
  104. package/dist/main/services/console-forward/internal-log.js +2 -0
  105. package/dist/main/services/console-forward/open-gated-relay.d.ts +67 -0
  106. package/dist/main/services/console-forward/open-gated-relay.js +55 -0
  107. package/dist/main/services/default-adapter.js +1 -1
  108. package/dist/main/services/diagnostics/index.d.ts +1 -48
  109. package/dist/main/services/diagnostics/index.js +1 -60
  110. package/dist/main/services/dimina-resource-server.d.ts +1 -6
  111. package/dist/main/services/dimina-resource-server.js +1 -98
  112. package/dist/main/services/elements-forward/index.d.ts +132 -15
  113. package/dist/main/services/elements-forward/index.js +155 -304
  114. package/dist/main/services/fs-bridge-protocol.d.ts +61 -0
  115. package/dist/main/services/fs-bridge-protocol.js +34 -0
  116. package/dist/main/services/fs-watch-sse.d.ts +40 -0
  117. package/dist/main/services/fs-watch-sse.js +113 -0
  118. package/dist/main/services/http-json.d.ts +9 -0
  119. package/dist/main/services/http-json.js +6 -0
  120. package/dist/main/services/layout/index.d.ts +11 -0
  121. package/dist/main/services/layout/index.js +23 -0
  122. package/dist/main/services/mcp/connection-owner.d.ts +38 -0
  123. package/dist/main/services/mcp/connection-owner.js +79 -0
  124. package/dist/main/services/mcp/index.d.ts +3 -1
  125. package/dist/main/services/mcp/index.js +4 -3
  126. package/dist/main/services/mcp/opened-project.d.ts +88 -0
  127. package/dist/main/services/mcp/opened-project.js +60 -0
  128. package/dist/main/services/mcp/server.d.ts +2 -1
  129. package/dist/main/services/mcp/server.js +29 -4
  130. package/dist/main/services/mcp/target-manager.d.ts +71 -23
  131. package/dist/main/services/mcp/target-manager.js +269 -138
  132. package/dist/main/services/mcp/target-selection.d.ts +47 -0
  133. package/dist/main/services/mcp/target-selection.js +71 -0
  134. package/dist/main/services/mcp/tools/context-tools.js +20 -5
  135. package/dist/main/services/mcp/tools/project-tools.d.ts +72 -0
  136. package/dist/main/services/mcp/tools/project-tools.js +133 -0
  137. package/dist/main/services/module.d.ts +13 -5
  138. package/dist/main/services/network-forward/body-cache.d.ts +72 -0
  139. package/dist/main/services/network-forward/body-cache.js +179 -0
  140. package/dist/main/services/network-forward/frontend-dispatch.d.ts +91 -0
  141. package/dist/main/services/network-forward/frontend-dispatch.js +148 -0
  142. package/dist/main/services/network-forward/global-body-gate.d.ts +46 -0
  143. package/dist/main/services/network-forward/global-body-gate.js +93 -0
  144. package/dist/main/services/network-forward/global-mirror-test-fixtures.d.ts +48 -0
  145. package/dist/main/services/network-forward/global-mirror-test-fixtures.js +96 -0
  146. package/dist/main/services/network-forward/http.d.ts +47 -0
  147. package/dist/main/services/network-forward/http.js +162 -0
  148. package/dist/main/services/network-forward/index.d.ts +135 -15
  149. package/dist/main/services/network-forward/index.js +854 -224
  150. package/dist/main/services/network-forward/request-ids.d.ts +5 -0
  151. package/dist/main/services/network-forward/request-ids.js +5 -0
  152. package/dist/main/services/network-forward/user-facing.d.ts +21 -0
  153. package/dist/main/services/network-forward/user-facing.js +50 -0
  154. package/dist/main/services/network-forward/websocket.d.ts +36 -0
  155. package/dist/main/services/network-forward/websocket.js +120 -0
  156. package/dist/main/services/notifications/renderer-notifier.d.ts +71 -9
  157. package/dist/main/services/notifications/renderer-notifier.js +45 -8
  158. package/dist/main/services/projects/create-project-service.js +19 -5
  159. package/dist/main/services/projects/local-provider.js +8 -4
  160. package/dist/main/services/projects/project-repository.d.ts +59 -7
  161. package/dist/main/services/projects/project-repository.js +285 -51
  162. package/dist/main/services/projects/types.d.ts +44 -34
  163. package/dist/main/services/render-inspect/index.d.ts +12 -2
  164. package/dist/main/services/render-inspect/index.js +21 -102
  165. package/dist/main/services/safe-area/index.d.ts +21 -6
  166. package/dist/main/services/safe-area/index.js +92 -46
  167. package/dist/main/services/service-host-pool/pool.d.ts +1 -196
  168. package/dist/main/services/service-host-pool/pool.js +1 -363
  169. package/dist/main/services/settings/index.d.ts +7 -1
  170. package/dist/main/services/settings/index.js +22 -2
  171. package/dist/main/services/simulator/custom-apis.d.ts +1 -42
  172. package/dist/main/services/simulator/custom-apis.js +1 -46
  173. package/dist/main/services/simulator/referer.d.ts +1 -9
  174. package/dist/main/services/simulator/referer.js +1 -19
  175. package/dist/main/services/simulator/ui-extensions.d.ts +21 -0
  176. package/dist/main/services/simulator/ui-extensions.js +176 -0
  177. package/dist/main/services/simulator-appdata/index.d.ts +6 -0
  178. package/dist/main/services/simulator-appdata/index.js +21 -2
  179. package/dist/main/services/simulator-current-page/index.d.ts +5 -3
  180. package/dist/main/services/simulator-current-page/index.js +8 -1
  181. package/dist/main/services/simulator-storage/index.d.ts +34 -5
  182. package/dist/main/services/simulator-storage/index.js +73 -71
  183. package/dist/main/services/simulator-storage/service-storage-ops.d.ts +1 -39
  184. package/dist/main/services/simulator-storage/service-storage-ops.js +1 -66
  185. package/dist/main/services/simulator-storage/window-scope.d.ts +20 -0
  186. package/dist/main/services/simulator-storage/window-scope.js +20 -0
  187. package/dist/main/services/simulator-temp-files/disk.d.ts +1 -54
  188. package/dist/main/services/simulator-temp-files/disk.js +1 -237
  189. package/dist/main/services/simulator-temp-files/fs-channels.d.ts +1 -68
  190. package/dist/main/services/simulator-temp-files/fs-channels.js +1 -107
  191. package/dist/main/services/simulator-temp-files/index.d.ts +1 -32
  192. package/dist/main/services/simulator-temp-files/index.js +1 -181
  193. package/dist/main/services/simulator-temp-files/request-handler.d.ts +1 -29
  194. package/dist/main/services/simulator-temp-files/request-handler.js +1 -177
  195. package/dist/main/services/simulator-temp-files/resolver.d.ts +1 -21
  196. package/dist/main/services/simulator-temp-files/resolver.js +1 -21
  197. package/dist/main/services/simulator-temp-files/store.d.ts +1 -13
  198. package/dist/main/services/simulator-temp-files/store.js +1 -23
  199. package/dist/main/services/update/github-release-checker.js +22 -3
  200. package/dist/main/services/update/update-manager.d.ts +21 -4
  201. package/dist/main/services/update/update-manager.js +55 -11
  202. package/dist/main/services/views/clear-console-filter.d.ts +44 -0
  203. package/dist/main/services/views/clear-console-filter.js +86 -0
  204. package/dist/main/services/views/console-filter-test-fixtures.d.ts +94 -0
  205. package/dist/main/services/views/console-filter-test-fixtures.js +82 -0
  206. package/dist/main/services/views/console-filter.d.ts +94 -0
  207. package/dist/main/services/views/console-filter.js +190 -0
  208. package/dist/main/services/views/devtools-tabs.d.ts +24 -4
  209. package/dist/main/services/views/devtools-tabs.js +40 -21
  210. package/dist/main/services/views/frontend-bootstrap-gate.d.ts +59 -0
  211. package/dist/main/services/views/frontend-bootstrap-gate.js +117 -0
  212. package/dist/main/services/views/host-dialog-port-channel.d.ts +18 -0
  213. package/dist/main/services/views/host-dialog-port-channel.js +15 -0
  214. package/dist/main/services/views/host-dialog-session-runtime.d.ts +10 -0
  215. package/dist/main/services/views/host-dialog-session-runtime.js +17 -0
  216. package/dist/main/services/views/host-dialog-view.d.ts +95 -0
  217. package/dist/main/services/views/host-dialog-view.js +147 -0
  218. package/dist/main/services/views/host-sidebar-port-channel.d.ts +18 -0
  219. package/dist/main/services/views/host-sidebar-port-channel.js +15 -0
  220. package/dist/main/services/views/host-sidebar-session-runtime.d.ts +10 -0
  221. package/dist/main/services/views/host-sidebar-session-runtime.js +17 -0
  222. package/dist/main/services/views/host-sidebar-view.d.ts +59 -0
  223. package/dist/main/services/views/host-sidebar-view.js +44 -0
  224. package/dist/main/services/views/host-slot-port-channel.d.ts +124 -0
  225. package/dist/main/services/views/host-slot-port-channel.js +289 -0
  226. package/dist/main/services/views/host-slot-session-runtime.d.ts +40 -0
  227. package/dist/main/services/views/host-slot-session-runtime.js +50 -0
  228. package/dist/main/services/views/host-slot-view.d.ts +109 -0
  229. package/dist/main/services/views/host-slot-view.js +147 -0
  230. package/dist/main/services/views/host-toolbar-port-channel.d.ts +6 -91
  231. package/dist/main/services/views/host-toolbar-port-channel.js +10 -243
  232. package/dist/main/services/views/host-toolbar-session-runtime.d.ts +5 -30
  233. package/dist/main/services/views/host-toolbar-session-runtime.js +9 -47
  234. package/dist/main/services/views/host-toolbar-view.d.ts +34 -7
  235. package/dist/main/services/views/host-toolbar-view.js +30 -237
  236. package/dist/main/services/views/managed-web-contents-view.d.ts +48 -0
  237. package/dist/main/services/views/managed-web-contents-view.js +143 -0
  238. package/dist/main/services/views/miniapp-partition.d.ts +1 -89
  239. package/dist/main/services/views/miniapp-partition.js +1 -158
  240. package/dist/main/services/views/native-simulator-devtools-host.js +206 -68
  241. package/dist/main/services/views/native-simulator-view.d.ts +6 -0
  242. package/dist/main/services/views/native-simulator-view.js +47 -40
  243. package/dist/main/services/views/native-view-tree.d.ts +25 -0
  244. package/dist/main/services/views/native-view-tree.js +69 -0
  245. package/dist/main/services/views/overlay-panels-view.d.ts +63 -4
  246. package/dist/main/services/views/overlay-panels-view.js +257 -108
  247. package/dist/main/services/views/placement-reconciler.d.ts +18 -18
  248. package/dist/main/services/views/placement-reconciler.js +91 -29
  249. package/dist/main/services/views/placement-test-driver.d.ts +27 -0
  250. package/dist/main/services/views/placement-test-driver.js +29 -0
  251. package/dist/main/services/views/refresh-styles.d.ts +10 -0
  252. package/dist/main/services/views/refresh-styles.js +57 -0
  253. package/dist/main/services/views/simulator-session-policy.d.ts +1 -27
  254. package/dist/main/services/views/simulator-session-policy.js +1 -98
  255. package/dist/main/services/views/view-manager-devtools-host-test-fixtures.d.ts +76 -0
  256. package/dist/main/services/views/view-manager-devtools-host-test-fixtures.js +184 -0
  257. package/dist/main/services/views/view-manager.d.ts +69 -88
  258. package/dist/main/services/views/view-manager.js +62 -7
  259. package/dist/main/services/views/workbench-view.d.ts +2 -0
  260. package/dist/main/services/views/workbench-view.js +104 -17
  261. package/dist/main/services/window-contexts/context-router.d.ts +36 -0
  262. package/dist/main/services/window-contexts/context-router.js +55 -0
  263. package/dist/main/services/workbench-coi-host.d.ts +52 -0
  264. package/dist/main/services/workbench-coi-host.js +227 -0
  265. package/dist/main/services/workbench-coi-server.d.ts +11 -0
  266. package/dist/main/services/workbench-coi-server.js +126 -126
  267. package/dist/main/services/workbench-coi-shutdown.d.ts +40 -0
  268. package/dist/main/services/workbench-coi-shutdown.js +69 -0
  269. package/dist/main/services/workbench-coi-static.d.ts +23 -0
  270. package/dist/main/services/workbench-coi-static.js +87 -0
  271. package/dist/main/services/workbench-context.d.ts +88 -8
  272. package/dist/main/services/workbench-context.js +54 -6
  273. package/dist/main/services/workspace/compile-log-buffer.d.ts +40 -0
  274. package/dist/main/services/workspace/compile-log-buffer.js +41 -0
  275. package/dist/main/services/workspace/compile-mode-adapter.d.ts +18 -0
  276. package/dist/main/services/workspace/compile-mode-adapter.js +57 -0
  277. package/dist/main/services/workspace/compile-mode-store.d.ts +25 -0
  278. package/dist/main/services/workspace/compile-mode-store.js +71 -0
  279. package/dist/main/services/workspace/open-project-guards.d.ts +16 -0
  280. package/dist/main/services/workspace/open-project-guards.js +42 -0
  281. package/dist/main/services/workspace/rebuild-status.d.ts +37 -0
  282. package/dist/main/services/workspace/rebuild-status.js +36 -0
  283. package/dist/main/services/workspace/session-status-store.d.ts +47 -0
  284. package/dist/main/services/workspace/session-status-store.js +73 -0
  285. package/dist/main/services/workspace/status-tap.d.ts +20 -0
  286. package/dist/main/services/workspace/status-tap.js +32 -0
  287. package/dist/main/services/workspace/workspace-compile-modes.d.ts +59 -0
  288. package/dist/main/services/workspace/workspace-compile-modes.js +93 -0
  289. package/dist/main/services/workspace/workspace-lifecycle-race.testutil.d.ts +22 -0
  290. package/dist/main/services/workspace/workspace-lifecycle-race.testutil.js +62 -0
  291. package/dist/main/services/workspace/workspace-referer.d.ts +17 -0
  292. package/dist/main/services/workspace/workspace-referer.js +26 -0
  293. package/dist/main/services/workspace/workspace-service.d.ts +7 -5
  294. package/dist/main/services/workspace/workspace-service.js +96 -135
  295. package/dist/main/services/workspace/workspace-thumbnails.d.ts +22 -0
  296. package/dist/main/services/workspace/workspace-thumbnails.js +67 -0
  297. package/dist/main/utils/ipc-context-source.d.ts +40 -0
  298. package/dist/main/utils/ipc-context-source.js +23 -0
  299. package/dist/main/utils/ipc-registry.d.ts +46 -21
  300. package/dist/main/utils/ipc-registry.js +166 -76
  301. package/dist/main/utils/paths.d.ts +18 -0
  302. package/dist/main/utils/paths.js +18 -0
  303. package/dist/main/utils/sender-policy.d.ts +10 -1
  304. package/dist/main/utils/sender-policy.js +42 -4
  305. package/dist/main/utils/theme.d.ts +18 -8
  306. package/dist/main/utils/theme.js +19 -9
  307. package/dist/main/windows/internal-devtools-window/index.d.ts +66 -0
  308. package/dist/main/windows/internal-devtools-window/index.js +160 -0
  309. package/dist/main/windows/main-window/create.d.ts +16 -0
  310. package/dist/main/windows/main-window/create.js +19 -11
  311. package/dist/main/windows/main-window/events.d.ts +1 -1
  312. package/dist/main/windows/main-window/events.js +26 -13
  313. package/dist/main/windows/main-window/index.d.ts +1 -1
  314. package/dist/main/windows/main-window/index.js +1 -1
  315. package/dist/main/windows/service-host-window/create.d.ts +1 -92
  316. package/dist/main/windows/service-host-window/create.js +1 -154
  317. package/dist/native-host/common/common.js +173 -53
  318. package/dist/native-host/container/pageFrame.css +1 -1
  319. package/dist/native-host/render/render.js +8278 -3659
  320. package/dist/native-host/service/service.js +2 -2
  321. package/dist/preload/index.d.ts +2 -0
  322. package/dist/preload/index.js +1 -0
  323. package/dist/preload/instrumentation/app-data.d.ts +2 -2
  324. package/dist/preload/instrumentation/app-data.js +1 -1
  325. package/dist/preload/instrumentation/wxml.js +1 -1
  326. package/dist/preload/runtime/bridge.d.ts +3 -3
  327. package/dist/preload/runtime/bridge.js +2 -2
  328. package/dist/preload/runtime/clipboard.d.ts +6 -0
  329. package/dist/preload/runtime/clipboard.js +12 -0
  330. package/dist/preload/runtime/host-dialog-advertiser.d.ts +22 -0
  331. package/dist/preload/runtime/host-dialog-advertiser.js +37 -0
  332. package/dist/preload/runtime/host-dialog-port.d.ts +44 -0
  333. package/dist/preload/runtime/host-dialog-port.js +53 -0
  334. package/dist/preload/runtime/host-dialog-runtime.d.ts +28 -0
  335. package/dist/preload/runtime/host-dialog-runtime.js +36 -0
  336. package/dist/preload/runtime/host-sidebar-advertiser.d.ts +19 -0
  337. package/dist/preload/runtime/host-sidebar-advertiser.js +35 -0
  338. package/dist/preload/runtime/host-sidebar-port.d.ts +44 -0
  339. package/dist/preload/runtime/host-sidebar-port.js +53 -0
  340. package/dist/preload/runtime/host-sidebar-runtime.d.ts +28 -0
  341. package/dist/preload/runtime/host-sidebar-runtime.js +36 -0
  342. package/dist/preload/runtime/host-slot-port-bridge.d.ts +18 -0
  343. package/dist/preload/runtime/host-slot-port-bridge.js +112 -0
  344. package/dist/preload/runtime/host-toolbar-advertiser.d.ts +5 -13
  345. package/dist/preload/runtime/host-toolbar-advertiser.js +18 -38
  346. package/dist/preload/runtime/host-toolbar-port.d.ts +9 -0
  347. package/dist/preload/runtime/host-toolbar-port.js +11 -95
  348. package/dist/preload/runtime/native-host.d.ts +14 -0
  349. package/dist/preload/runtime/native-host.js +5 -8
  350. package/dist/preload/runtime/node-bindings.d.ts +18 -0
  351. package/dist/preload/runtime/node-bindings.js +44 -0
  352. package/dist/preload/runtime/temp-files.js +9 -2
  353. package/dist/preload/runtime/wait-for-slot-root.d.ts +23 -0
  354. package/dist/preload/runtime/wait-for-slot-root.js +80 -0
  355. package/dist/preload/shared/api-compat.js +63 -41
  356. package/dist/preload/windows/host-dialog-runtime.cjs +360 -0
  357. package/dist/preload/windows/host-dialog-runtime.cjs.map +7 -0
  358. package/dist/preload/windows/host-dialog-runtime.d.ts +2 -0
  359. package/dist/preload/windows/host-dialog-runtime.js +13 -0
  360. package/dist/preload/windows/host-sidebar-runtime.cjs +361 -0
  361. package/dist/preload/windows/host-sidebar-runtime.cjs.map +7 -0
  362. package/dist/preload/windows/host-sidebar-runtime.d.ts +2 -0
  363. package/dist/preload/windows/host-sidebar-runtime.js +13 -0
  364. package/dist/preload/windows/host-toolbar-runtime.cjs +142 -52
  365. package/dist/preload/windows/host-toolbar-runtime.cjs.map +3 -3
  366. package/dist/preload/windows/main.cjs +4922 -1246
  367. package/dist/preload/windows/main.cjs.map +4 -4
  368. package/dist/preload/windows/main.css +428 -0
  369. package/dist/preload/windows/main.css.map +7 -0
  370. package/dist/preload/windows/simulator.cjs +376 -322
  371. package/dist/preload/windows/simulator.cjs.map +4 -4
  372. package/dist/preload/windows/simulator.js +376 -322
  373. package/dist/render-host/pageFrame.html +4 -4
  374. package/dist/render-host/preload.cjs +30 -0
  375. package/dist/render-host/render-inspect.js +184 -115
  376. package/dist/renderer/assets/button-CB2MWjHY.js +2 -0
  377. package/dist/renderer/assets/constants-CkoGPQTS.js +2 -0
  378. package/dist/renderer/assets/constants-zQZ2-y21.js +2 -0
  379. package/dist/renderer/assets/createLucideIcon-cZ9FlZZw.js +2 -0
  380. package/dist/renderer/assets/devicePicker-H2eIO4e1.js +2 -0
  381. package/dist/renderer/assets/dialog-pHzEA8Vx.js +46 -0
  382. package/dist/renderer/assets/dist-B5HADirS.js +2 -0
  383. package/dist/renderer/assets/dist-DIFlRMKe.js +2 -0
  384. package/dist/renderer/assets/hostSidebarDefault-DRWh6OCt.js +2 -0
  385. package/dist/renderer/assets/index-CEL_XFge.js +2 -0
  386. package/dist/renderer/assets/input-CAObw95L.js +2 -0
  387. package/dist/renderer/assets/ipc-channels-overlays-gIPUFnqc.js +2 -0
  388. package/dist/renderer/assets/jsx-runtime-DICEQH_0.css +1 -0
  389. package/dist/renderer/assets/jsx-runtime-DIw5wnYl.js +9 -0
  390. package/dist/renderer/assets/plus-BQ9u5EbL.js +2 -0
  391. package/dist/renderer/assets/popover-Cw7G2Ctp.js +2 -0
  392. package/dist/renderer/assets/presets-DMZOb9ay.js +2 -0
  393. package/dist/renderer/assets/project-api-YTOr_Yvo.js +2 -0
  394. package/dist/renderer/assets/projectCreateDialog-BmLqiYxn.js +2 -0
  395. package/dist/renderer/assets/search-BMvuYF48.js +2 -0
  396. package/dist/renderer/assets/select-nFP95TxM.js +2 -0
  397. package/dist/renderer/assets/settings-CnpVfSWt.js +2 -0
  398. package/dist/renderer/assets/settings-api-Ccsf-Nsj.js +2 -0
  399. package/dist/renderer/assets/settings-tab-bar-CAzrv32m.js +2 -0
  400. package/dist/renderer/assets/smartphone-Bb2GdIKy.js +2 -0
  401. package/dist/renderer/assets/tabs-CPKN3Mmq.js +2 -0
  402. package/dist/renderer/assets/tooltip-D6AxXRk5.js +2 -0
  403. package/dist/renderer/assets/types-Bh0hA7El.js +2 -0
  404. package/dist/renderer/assets/updateDialog-CwndJ0Bl.js +2 -0
  405. package/dist/renderer/assets/utils-sEB5OZEQ.js +2 -0
  406. package/dist/renderer/assets/view-api-B-2zPBR5.js +2 -0
  407. package/dist/renderer/assets/view-ids-BfaDVV5P.js +2 -0
  408. package/dist/renderer/assets/workbench-C0Jkdlps.js +5 -0
  409. package/dist/renderer/assets/workbenchSettings-YD0Ctbm_.js +8 -0
  410. package/dist/renderer/entries/device-picker/index.html +28 -0
  411. package/dist/renderer/entries/host-sidebar-default/index.html +22 -0
  412. package/dist/renderer/entries/main/index.html +16 -7
  413. package/dist/renderer/entries/popover/index.html +16 -6
  414. package/dist/renderer/entries/project-create-dialog/index.html +27 -0
  415. package/dist/renderer/entries/settings/index.html +10 -5
  416. package/dist/renderer/entries/tooltip/index.html +21 -0
  417. package/dist/renderer/entries/update-dialog/index.html +25 -0
  418. package/dist/renderer/entries/workbench/index.html +49 -0
  419. package/dist/renderer/entries/workbench-settings/index.html +12 -5
  420. package/dist/service-host/appdata-set-data.cjs +39 -0
  421. package/dist/service-host/host-env-update.cjs +23 -0
  422. package/dist/service-host/preload.cjs +54 -48
  423. package/dist/service-host/service-message-queue.cjs +71 -0
  424. package/dist/service-host/sync-impls/menu-button-geometry.js +16 -5
  425. package/dist/service-host/sync-impls/menu-button.js +5 -3
  426. package/dist/service-host/sync-impls/system-info.js +31 -9
  427. package/dist/shared/bridge-channels.d.ts +1 -416
  428. package/dist/shared/bridge-channels.js +1 -89
  429. package/dist/shared/compile-mode-state.d.ts +73 -0
  430. package/dist/shared/compile-mode-state.js +100 -0
  431. package/dist/shared/compile-modes.d.ts +152 -0
  432. package/dist/shared/compile-modes.js +237 -0
  433. package/dist/shared/constants.d.ts +22 -0
  434. package/dist/shared/constants.js +22 -0
  435. package/dist/shared/dmb-resource-url.d.ts +2 -0
  436. package/dist/shared/dmb-resource-url.js +2 -0
  437. package/dist/shared/ipc-channels-overlays.d.ts +162 -0
  438. package/dist/shared/ipc-channels-overlays.js +203 -0
  439. package/dist/shared/ipc-channels.d.ts +24 -154
  440. package/dist/shared/ipc-channels.js +48 -96
  441. package/dist/shared/ipc-schemas.d.ts +143 -54
  442. package/dist/shared/ipc-schemas.js +137 -45
  443. package/dist/shared/node-bindings.d.ts +2 -0
  444. package/dist/shared/node-bindings.js +2 -0
  445. package/dist/shared/project-window-types.d.ts +42 -0
  446. package/dist/shared/project-window-types.js +2 -0
  447. package/dist/shared/simulator-route.d.ts +8 -0
  448. package/dist/shared/simulator-route.js +15 -0
  449. package/dist/shared/simulator-ui.d.ts +61 -0
  450. package/dist/shared/simulator-ui.js +12 -0
  451. package/dist/shared/types.d.ts +126 -41
  452. package/dist/shared/view-ids.d.ts +10 -0
  453. package/dist/shared/view-ids.js +23 -0
  454. package/dist/simulator/assets/bridge-channels-B3JAmRfl.js +2 -0
  455. package/dist/simulator/assets/device-shell-ATEhHV2_.css +1 -0
  456. package/dist/simulator/assets/device-shell-DucLepkm.js +431 -0
  457. package/dist/simulator/assets/simulator-B4rbcOVt.js +10 -0
  458. package/dist/simulator/assets/simulator-mini-app-DFo7fhi5.js +2 -0
  459. package/dist/simulator/assets/simulator-ui-BupATgKo.css +1 -0
  460. package/dist/simulator/assets/simulator-ui-i3GCc7YJ.js +2 -0
  461. package/dist/simulator/simulator.html +4 -3
  462. package/dist/simulator/temp-files.d.ts +35 -0
  463. package/dist/simulator/temp-files.js +121 -0
  464. package/dist/simulator/types.d.ts +50 -0
  465. package/dist/simulator/types.js +2 -0
  466. package/dist/vscode-workbench/assets/__vite-browser-external-JIkWewFf.js +1 -0
  467. package/dist/vscode-workbench/assets/{dist-TpGpmMGi.js → dist-CXG-u1VB.js} +3 -3
  468. package/dist/vscode-workbench/assets/fs-core-worker-urls-DZ1nod84.js +1 -0
  469. package/dist/vscode-workbench/assets/fs-core.worker-Bnmpp6fo.js +1 -0
  470. package/dist/vscode-workbench/assets/fs-query.worker-cZ-7Fjch.js +2 -0
  471. package/dist/vscode-workbench/assets/{iconv-lite-umd-C9tiCAJa.js → iconv-lite-umd-Dxx9Qyb4.js} +1 -1
  472. package/dist/vscode-workbench/assets/{index-DJ1HyMZ7.js → index-6VJMsaWj.js} +475 -475
  473. package/dist/vscode-workbench/assets/{jschardet-DE1jV513.js → jschardet-Ba3D16vt.js} +1 -1
  474. package/dist/vscode-workbench/index.html +21 -1
  475. package/package.json +23 -13
  476. package/dist/main/services/views/destroy-child-view.d.ts +0 -9
  477. package/dist/main/services/views/destroy-child-view.js +0 -23
  478. package/dist/preload/instrumentation/wxml-extract.d.ts +0 -11
  479. package/dist/preload/instrumentation/wxml-extract.js +0 -382
  480. package/dist/preload/shared/sid-registry.d.ts +0 -11
  481. package/dist/preload/shared/sid-registry.js +0 -38
  482. package/dist/renderer/assets/constants-EAMiwL9_.js +0 -2
  483. package/dist/renderer/assets/index-BMqyDx71.js +0 -49
  484. package/dist/renderer/assets/input-CDAEwpBO.js +0 -2
  485. package/dist/renderer/assets/ipc-transport-B7eFOR68.css +0 -1
  486. package/dist/renderer/assets/ipc-transport-_G1k5V1p.js +0 -9
  487. package/dist/renderer/assets/popover-DEdjK14m.js +0 -2
  488. package/dist/renderer/assets/select-DpKPCh3y.js +0 -2
  489. package/dist/renderer/assets/settings-M5q2elUr.js +0 -2
  490. package/dist/renderer/assets/settings-api-CDlZoHiO.js +0 -2
  491. package/dist/renderer/assets/workbenchSettings-CT_H1WhV.js +0 -8
  492. package/dist/shared/appdata-accumulator.d.ts +0 -95
  493. package/dist/shared/appdata-accumulator.js +0 -218
  494. package/dist/shared/request-core.d.ts +0 -84
  495. package/dist/shared/request-core.js +0 -168
  496. package/dist/shared/simulator-api-metadata.d.ts +0 -26
  497. package/dist/shared/simulator-api-metadata.js +0 -59
  498. package/dist/shared/vpath.d.ts +0 -42
  499. package/dist/shared/vpath.js +0 -105
  500. package/dist/simulator/assets/bridge-channels-zhsumfky.js +0 -2
  501. package/dist/simulator/assets/device-shell-C-wcFq3Z.js +0 -2
  502. package/dist/simulator/assets/device-shell-CS1rqAQz.css +0 -1
  503. package/dist/simulator/assets/jsx-runtime-BDTY6fEq.js +0 -2
  504. package/dist/simulator/assets/simulator-DU3-fS3v.js +0 -10
  505. package/dist/simulator/assets/simulator-mini-app-DzfMfnVM.js +0 -2
  506. package/dist/simulator/device-shell/menu-button-geometry.js +0 -8
  507. package/dist/vscode-workbench/assets/__vite-browser-external-CXi6Kz9W.js +0 -1
@@ -1,67 +1,2 @@
1
- /** Encode a wx storage value to its localStorage string form. Matches sync-impls/storage.ts. */
2
- export function encodeStorageValue(data) {
3
- return typeof data === 'object' ? JSON.stringify(data) : String(data);
4
- }
5
- /** Decode a localStorage string back to a value (JSON.parse, falling back to the raw string). */
6
- export function decodeStorageValue(raw) {
7
- try {
8
- return JSON.parse(raw);
9
- }
10
- catch {
11
- return raw;
12
- }
13
- }
14
- /** localStorage ops executed inside `wc` (the service-host window) via executeJavaScript. */
15
- export function serviceStorage(wc) {
16
- return {
17
- async readAll(prefix) {
18
- const code = `(() => {
19
- const out = []
20
- const p = ${JSON.stringify(prefix)}
21
- for (let i = 0; i < localStorage.length; i++) {
22
- const k = localStorage.key(i)
23
- if (k && k.startsWith(p)) out.push([k, localStorage.getItem(k)])
24
- }
25
- return out
26
- })()`;
27
- try {
28
- const result = await wc.executeJavaScript(code);
29
- return Array.isArray(result) ? result : [];
30
- }
31
- catch {
32
- return [];
33
- }
34
- },
35
- async readOne(fullKey) {
36
- try {
37
- const result = await wc.executeJavaScript(`localStorage.getItem(${JSON.stringify(fullKey)})`);
38
- return result === null || result === undefined ? null : String(result);
39
- }
40
- catch {
41
- return null;
42
- }
43
- },
44
- async writeOne(fullKey, value) {
45
- await wc.executeJavaScript(`localStorage.setItem(${JSON.stringify(fullKey)}, ${JSON.stringify(value)})`);
46
- },
47
- async removeOne(fullKey) {
48
- await wc.executeJavaScript(`localStorage.removeItem(${JSON.stringify(fullKey)})`);
49
- },
50
- async clearPrefix(prefix) {
51
- const code = `(() => {
52
- const p = ${JSON.stringify(prefix)}
53
- const doomed = []
54
- for (let i = 0; i < localStorage.length; i++) {
55
- const k = localStorage.key(i)
56
- if (k && k.startsWith(p)) doomed.push(k)
57
- }
58
- doomed.forEach((k) => localStorage.removeItem(k))
59
- })()`;
60
- await wc.executeJavaScript(code);
61
- },
62
- async clearAll() {
63
- await wc.executeJavaScript('localStorage.clear()');
64
- },
65
- };
66
- }
1
+ export * from '@dimina-kit/electron-runtime/main/service-storage-ops';
67
2
  //# sourceMappingURL=service-storage-ops.js.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Window-ownership judgment for simulator webContents discovery.
3
+ *
4
+ * The workbench runs one `setupSimulatorStorage` instance per project
5
+ * window, but Electron's `webContents`/`app.on('web-contents-created')`
6
+ * APIs are process-global — every instance sees every window's webviews.
7
+ * Without this filter, whichever instance's scan/callback fires first wins
8
+ * the simulator it finds, so opening a second project window can steal the
9
+ * first window's already-attached simulator (its Storage panel then reads
10
+ * and writes the second project's partition).
11
+ *
12
+ * The ownership rule itself (does a webContents sit inside a window's own
13
+ * renderer, its `contentView` tree, or a `<webview>` guest embedded in
14
+ * either) is shared with dimina-electron-runtime's bridge router, which
15
+ * faces the identical process-global-vs-per-window problem for its IPC
16
+ * routing — so it's owned by @dimina-kit/electron-deck/main and re-exported
17
+ * here under the name this package's callers expect.
18
+ */
19
+ export { windowHostsWebContents } from '@dimina-kit/electron-deck/main';
20
+ //# sourceMappingURL=window-scope.d.ts.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Window-ownership judgment for simulator webContents discovery.
3
+ *
4
+ * The workbench runs one `setupSimulatorStorage` instance per project
5
+ * window, but Electron's `webContents`/`app.on('web-contents-created')`
6
+ * APIs are process-global — every instance sees every window's webviews.
7
+ * Without this filter, whichever instance's scan/callback fires first wins
8
+ * the simulator it finds, so opening a second project window can steal the
9
+ * first window's already-attached simulator (its Storage panel then reads
10
+ * and writes the second project's partition).
11
+ *
12
+ * The ownership rule itself (does a webContents sit inside a window's own
13
+ * renderer, its `contentView` tree, or a `<webview>` guest embedded in
14
+ * either) is shared with dimina-electron-runtime's bridge router, which
15
+ * faces the identical process-global-vs-per-window problem for its IPC
16
+ * routing — so it's owned by @dimina-kit/electron-deck/main and re-exported
17
+ * here under the name this package's callers expect.
18
+ */
19
+ export { windowHostsWebContents } from '@dimina-kit/electron-deck/main';
20
+ //# sourceMappingURL=window-scope.js.map
@@ -1,55 +1,2 @@
1
- /**
2
- * Main-process disk reader/writer backing `difile://_store/*` and
3
- * `difile://<usr-rel>` URLs.
4
- *
5
- * Spec: `packages/devtools/docs/file-system.md` §6 P1-1 / P1-3.
6
- *
7
- * - `readDiskFile(realPath, opts?)`: read a (possibly ranged) slice of a
8
- * file inside the USER_DATA_PATH sandbox. Returns `bytes` plus the
9
- * content metadata callers need to assemble an HTTP response without a
10
- * second `fs.stat` round-trip (`mime`, `etag`, `totalSize`).
11
- * - `writeDiskFile(realPath, bytes)`: write bytes into the sandbox,
12
- * creating parent directories on demand. Accepts both `Buffer` and
13
- * `ArrayBuffer`.
14
- * - `readDiskDir(realPath)`: list immediate children, no '.' / '..'.
15
- * - `statDiskFile(realPath)`: minimal stat surface (size/mtime/mode/flags).
16
- *
17
- * The caller is responsible for canonicalizing `realPath` through
18
- * `resolveVPath` *before* invoking these helpers — disk.ts assumes the
19
- * argument is already known to be inside the sandbox base.
20
- *
21
- * MIME resolution prefers magic-byte sniffing (first ~12 bytes) over file
22
- * extension, falling back to `application/octet-stream` for both unknown
23
- * extensions and unknown magic.
24
- *
25
- * ETag shape is `W/"<mtime-ms>-<size>"` — weak validator, both axes folded
26
- * into one token so byte-equal rewrites at the same timestamp still match.
27
- */
28
- export interface DiskReadResult {
29
- bytes: Buffer;
30
- mime: string;
31
- /** Weak ETag of the form `W/"<mtime>-<size>"`. */
32
- etag: string;
33
- /** Full file size in bytes, regardless of whether a Range slice was returned. */
34
- totalSize: number;
35
- }
36
- export interface DiskReadOptions {
37
- /** Inclusive byte range `[start, end]`. Omit to read the whole file. */
38
- range?: {
39
- start: number;
40
- end: number;
41
- };
42
- }
43
- export interface DiskStat {
44
- size: number;
45
- /** Unix milliseconds. */
46
- mtime: number;
47
- mode: number;
48
- isFile: boolean;
49
- isDirectory: boolean;
50
- }
51
- export declare function readDiskFile(realPath: string, opts?: DiskReadOptions): Promise<DiskReadResult>;
52
- export declare function writeDiskFile(realPath: string, bytes: Buffer | ArrayBuffer): Promise<void>;
53
- export declare function readDiskDir(realPath: string): Promise<string[]>;
54
- export declare function statDiskFile(realPath: string): Promise<DiskStat>;
1
+ export * from '@dimina-kit/electron-runtime/main/temp-files/disk';
55
2
  //# sourceMappingURL=disk.d.ts.map
@@ -1,238 +1,2 @@
1
- /**
2
- * Main-process disk reader/writer backing `difile://_store/*` and
3
- * `difile://<usr-rel>` URLs.
4
- *
5
- * Spec: `packages/devtools/docs/file-system.md` §6 P1-1 / P1-3.
6
- *
7
- * - `readDiskFile(realPath, opts?)`: read a (possibly ranged) slice of a
8
- * file inside the USER_DATA_PATH sandbox. Returns `bytes` plus the
9
- * content metadata callers need to assemble an HTTP response without a
10
- * second `fs.stat` round-trip (`mime`, `etag`, `totalSize`).
11
- * - `writeDiskFile(realPath, bytes)`: write bytes into the sandbox,
12
- * creating parent directories on demand. Accepts both `Buffer` and
13
- * `ArrayBuffer`.
14
- * - `readDiskDir(realPath)`: list immediate children, no '.' / '..'.
15
- * - `statDiskFile(realPath)`: minimal stat surface (size/mtime/mode/flags).
16
- *
17
- * The caller is responsible for canonicalizing `realPath` through
18
- * `resolveVPath` *before* invoking these helpers — disk.ts assumes the
19
- * argument is already known to be inside the sandbox base.
20
- *
21
- * MIME resolution prefers magic-byte sniffing (first ~12 bytes) over file
22
- * extension, falling back to `application/octet-stream` for both unknown
23
- * extensions and unknown magic.
24
- *
25
- * ETag shape is `W/"<mtime-ms>-<size>"` — weak validator, both axes folded
26
- * into one token so byte-equal rewrites at the same timestamp still match.
27
- */
28
- import fs from 'node:fs/promises';
29
- import path from 'node:path';
30
- // -- MIME detection ---------------------------------------------------------
31
- /**
32
- * Extension-based MIME fallback. Kept deliberately small — anything more
33
- * exotic should land in the magic-byte sniffer above. Lowercase keys only.
34
- */
35
- const EXT_MIME = {
36
- '.txt': 'text/plain',
37
- '.log': 'text/plain',
38
- '.md': 'text/markdown',
39
- '.html': 'text/html',
40
- '.htm': 'text/html',
41
- '.css': 'text/css',
42
- '.csv': 'text/csv',
43
- '.json': 'application/json',
44
- '.xml': 'application/xml',
45
- '.js': 'application/javascript',
46
- '.mjs': 'application/javascript',
47
- '.svg': 'image/svg+xml',
48
- '.png': 'image/png',
49
- '.jpg': 'image/jpeg',
50
- '.jpeg': 'image/jpeg',
51
- '.gif': 'image/gif',
52
- '.webp': 'image/webp',
53
- '.bmp': 'image/bmp',
54
- '.ico': 'image/x-icon',
55
- '.mp4': 'video/mp4',
56
- '.m4v': 'video/mp4',
57
- '.webm': 'video/webm',
58
- '.mov': 'video/quicktime',
59
- '.mp3': 'audio/mpeg',
60
- '.wav': 'audio/wav',
61
- '.ogg': 'audio/ogg',
62
- '.pdf': 'application/pdf',
63
- '.zip': 'application/zip',
64
- };
65
- function isPng(head) {
66
- return head.length >= 8
67
- && head[0] === 0x89 && head[1] === 0x50 && head[2] === 0x4e && head[3] === 0x47
68
- && head[4] === 0x0d && head[5] === 0x0a && head[6] === 0x1a && head[7] === 0x0a;
69
- }
70
- function isJpeg(head) {
71
- return head.length >= 3 && head[0] === 0xff && head[1] === 0xd8 && head[2] === 0xff;
72
- }
73
- function isGif(head) {
74
- return head.length >= 6
75
- && head[0] === 0x47 && head[1] === 0x49 && head[2] === 0x46
76
- && head[3] === 0x38 && (head[4] === 0x37 || head[4] === 0x39) && head[5] === 0x61;
77
- }
78
- function isWebp(head) {
79
- return head.length >= 12
80
- && head[0] === 0x52 && head[1] === 0x49 && head[2] === 0x46 && head[3] === 0x46
81
- && head[8] === 0x57 && head[9] === 0x45 && head[10] === 0x42 && head[11] === 0x50;
82
- }
83
- /** MP4 ftyp box: brand bytes vary, treat all as video/mp4 for now. */
84
- function isMp4(head) {
85
- return head.length >= 12
86
- && head[4] === 0x66 && head[5] === 0x74 && head[6] === 0x79 && head[7] === 0x70;
87
- }
88
- function isPdf(head) {
89
- return head.length >= 4
90
- && head[0] === 0x25 && head[1] === 0x50 && head[2] === 0x44 && head[3] === 0x46;
91
- }
92
- function isBmp(head) {
93
- return head.length >= 2 && head[0] === 0x42 && head[1] === 0x4d;
94
- }
95
- function isZip(head) {
96
- return head.length >= 4
97
- && head[0] === 0x50 && head[1] === 0x4b && head[2] === 0x03 && head[3] === 0x04;
98
- }
99
- /** ID3-tagged MP3. */
100
- function isId3Mp3(head) {
101
- return head.length >= 3 && head[0] === 0x49 && head[1] === 0x44 && head[2] === 0x33;
102
- }
103
- function isOgg(head) {
104
- return head.length >= 4 && head[0] === 0x4f && head[1] === 0x67 && head[2] === 0x67 && head[3] === 0x53;
105
- }
106
- /** Magic-byte sniffers in priority order — first match wins. */
107
- const MAGIC_SNIFFERS = [
108
- { mime: 'image/png', match: isPng },
109
- { mime: 'image/jpeg', match: isJpeg },
110
- { mime: 'image/gif', match: isGif },
111
- { mime: 'image/webp', match: isWebp },
112
- { mime: 'video/mp4', match: isMp4 },
113
- { mime: 'application/pdf', match: isPdf },
114
- { mime: 'image/bmp', match: isBmp },
115
- { mime: 'application/zip', match: isZip },
116
- { mime: 'audio/mpeg', match: isId3Mp3 },
117
- { mime: 'audio/ogg', match: isOgg },
118
- ];
119
- function sniffMime(head) {
120
- const hit = MAGIC_SNIFFERS.find((sniffer) => sniffer.match(head));
121
- return hit ? hit.mime : null;
122
- }
123
- function extMime(realPath) {
124
- const ext = path.extname(realPath).toLowerCase();
125
- if (!ext)
126
- return null;
127
- return EXT_MIME[ext] ?? null;
128
- }
129
- function detectMime(realPath, head) {
130
- const sniffed = sniffMime(head);
131
- if (sniffed)
132
- return sniffed;
133
- const byExt = extMime(realPath);
134
- if (byExt)
135
- return byExt;
136
- return 'application/octet-stream';
137
- }
138
- // -- ETag -------------------------------------------------------------------
139
- function etagOf(mtimeMs, size) {
140
- return `W/"${Math.floor(mtimeMs)}-${size}"`;
141
- }
142
- // -- read -------------------------------------------------------------------
143
- /** Validate `range` against `totalSize` and resolve it to a byte slice, or throws. */
144
- function resolveRange(range, totalSize) {
145
- const { start, end } = range;
146
- if (!Number.isFinite(start) || !Number.isFinite(end)) {
147
- throw new RangeError(`invalid range: ${start}-${end}`);
148
- }
149
- if (start < 0)
150
- throw new RangeError(`range start out of bounds: ${start}`);
151
- if (start > end)
152
- throw new RangeError(`range start > end: ${start} > ${end}`);
153
- if (start >= totalSize) {
154
- throw new RangeError(`range start beyond file size: ${start} >= ${totalSize}`);
155
- }
156
- const clampedEnd = Math.min(end, totalSize - 1);
157
- return { sliceStart: start, sliceLen: clampedEnd - start + 1 };
158
- }
159
- /**
160
- * Read at most the first 12 bytes for magic sniffing, regardless of whether
161
- * the caller asked for a range. The head bytes from position 0 are needed to
162
- * label Content-Type correctly even on a tail Range request.
163
- */
164
- async function readHeadBytes(handle, totalSize) {
165
- const head = Buffer.alloc(Math.min(12, totalSize));
166
- if (head.length > 0) {
167
- await handle.read(head, 0, head.length, 0);
168
- }
169
- return head;
170
- }
171
- /** Full-file body, re-using `head` (already read) instead of a second read for the leading bytes. */
172
- async function readFullBody(handle, head, totalSize) {
173
- const bytes = Buffer.alloc(totalSize);
174
- if (totalSize === 0)
175
- return bytes;
176
- if (totalSize <= head.length) {
177
- head.copy(bytes, 0, 0, totalSize);
178
- return bytes;
179
- }
180
- head.copy(bytes, 0, 0, head.length);
181
- await handle.read(bytes, head.length, totalSize - head.length, head.length);
182
- return bytes;
183
- }
184
- async function readRangeBody(handle, sliceStart, sliceLen) {
185
- const bytes = Buffer.alloc(sliceLen);
186
- if (sliceLen > 0) {
187
- await handle.read(bytes, 0, sliceLen, sliceStart);
188
- }
189
- return bytes;
190
- }
191
- export async function readDiskFile(realPath, opts) {
192
- const handle = await fs.open(realPath, 'r');
193
- try {
194
- const st = await handle.stat();
195
- const totalSize = st.size;
196
- const mtimeMs = st.mtimeMs;
197
- const range = opts?.range;
198
- const { sliceStart, sliceLen } = range
199
- ? resolveRange(range, totalSize)
200
- : { sliceStart: 0, sliceLen: totalSize };
201
- const head = await readHeadBytes(handle, totalSize);
202
- const bytes = range
203
- ? await readRangeBody(handle, sliceStart, sliceLen)
204
- : await readFullBody(handle, head, totalSize);
205
- return {
206
- bytes,
207
- mime: detectMime(realPath, head),
208
- etag: etagOf(mtimeMs, totalSize),
209
- totalSize,
210
- };
211
- }
212
- finally {
213
- await handle.close();
214
- }
215
- }
216
- // -- write ------------------------------------------------------------------
217
- export async function writeDiskFile(realPath, bytes) {
218
- const buf = Buffer.isBuffer(bytes) ? bytes : Buffer.from(new Uint8Array(bytes));
219
- await fs.mkdir(path.dirname(realPath), { recursive: true });
220
- await fs.writeFile(realPath, buf);
221
- }
222
- // -- dir --------------------------------------------------------------------
223
- export async function readDiskDir(realPath) {
224
- const entries = await fs.readdir(realPath);
225
- return entries;
226
- }
227
- // -- stat -------------------------------------------------------------------
228
- export async function statDiskFile(realPath) {
229
- const st = await fs.stat(realPath);
230
- return {
231
- size: st.size,
232
- mtime: Math.floor(st.mtimeMs),
233
- mode: st.mode,
234
- isFile: st.isFile(),
235
- isDirectory: st.isDirectory(),
236
- };
237
- }
1
+ export * from '@dimina-kit/electron-runtime/main/temp-files/disk';
238
2
  //# sourceMappingURL=disk.js.map
@@ -1,69 +1,2 @@
1
- /**
2
- * Main-process `simulator:fs:*` IPC channel handlers.
3
- *
4
- * Spec: `packages/devtools/docs/file-system.md` §4.4, §6 P1-7.
5
- *
6
- * Each handler is the pure function that backs one IPC channel:
7
- *
8
- * simulator:fs:read → handleFsRead
9
- * simulator:fs:write → handleFsWrite
10
- * simulator:fs:stat → handleFsStat
11
- * simulator:fs:readdir → handleFsReaddir
12
- * simulator:fs:unlink → handleFsUnlink
13
- * simulator:fs:mkdir → handleFsMkdir
14
- *
15
- * Every handler MUST defensively re-assert that `realPath` lies inside the
16
- * USER_DATA_PATH sandbox base (`DIMINA_HOME`-aware). The IPC boundary cannot
17
- * trust the caller — a hostile preload or fuzzed payload could send a path
18
- * that points outside the base. The renderer-side `resolveVPath` is one
19
- * layer; this is the second.
20
- *
21
- * MIME / ETag / Range semantics mirror `disk.ts`; see `disk.test.ts` for
22
- * the full contract on those axes.
23
- */
24
- import { type DiskStat } from './disk.js';
25
- export interface FsReadRequest {
26
- realPath: string;
27
- range?: {
28
- start: number;
29
- end: number;
30
- };
31
- }
32
- export interface FsReadResult {
33
- bytes: Buffer | ArrayBuffer;
34
- mime: string;
35
- /** Weak ETag of the form `W/"<mtime>-<size>"`. */
36
- etag: string;
37
- /** Full file size in bytes, regardless of whether a Range slice was returned. */
38
- totalSize: number;
39
- }
40
- export interface FsWriteRequest {
41
- realPath: string;
42
- bytes: Buffer | ArrayBuffer;
43
- }
44
- export interface FsStatRequest {
45
- realPath: string;
46
- }
47
- export interface FsReaddirRequest {
48
- realPath: string;
49
- }
50
- export interface FsUnlinkRequest {
51
- realPath: string;
52
- }
53
- export interface FsMkdirRequest {
54
- realPath: string;
55
- recursive?: boolean;
56
- }
57
- export declare function handleFsRead(req: FsReadRequest): Promise<FsReadResult>;
58
- export declare function handleFsWrite(req: FsWriteRequest): Promise<{
59
- ok: true;
60
- }>;
61
- export declare function handleFsStat(req: FsStatRequest): Promise<DiskStat>;
62
- export declare function handleFsReaddir(req: FsReaddirRequest): Promise<string[]>;
63
- export declare function handleFsUnlink(req: FsUnlinkRequest): Promise<{
64
- ok: true;
65
- }>;
66
- export declare function handleFsMkdir(req: FsMkdirRequest): Promise<{
67
- ok: true;
68
- }>;
1
+ export * from '@dimina-kit/electron-runtime/main/temp-files/fs-channels';
69
2
  //# sourceMappingURL=fs-channels.d.ts.map
@@ -1,108 +1,2 @@
1
- /**
2
- * Main-process `simulator:fs:*` IPC channel handlers.
3
- *
4
- * Spec: `packages/devtools/docs/file-system.md` §4.4, §6 P1-7.
5
- *
6
- * Each handler is the pure function that backs one IPC channel:
7
- *
8
- * simulator:fs:read → handleFsRead
9
- * simulator:fs:write → handleFsWrite
10
- * simulator:fs:stat → handleFsStat
11
- * simulator:fs:readdir → handleFsReaddir
12
- * simulator:fs:unlink → handleFsUnlink
13
- * simulator:fs:mkdir → handleFsMkdir
14
- *
15
- * Every handler MUST defensively re-assert that `realPath` lies inside the
16
- * USER_DATA_PATH sandbox base (`DIMINA_HOME`-aware). The IPC boundary cannot
17
- * trust the caller — a hostile preload or fuzzed payload could send a path
18
- * that points outside the base. The renderer-side `resolveVPath` is one
19
- * layer; this is the second.
20
- *
21
- * MIME / ETag / Range semantics mirror `disk.ts`; see `disk.test.ts` for
22
- * the full contract on those axes.
23
- */
24
- import fs from 'node:fs/promises';
25
- import path from 'node:path';
26
- import { sandboxBase } from '../../../shared/vpath.js';
27
- import { readDiskDir, readDiskFile, statDiskFile, writeDiskFile, } from './disk.js';
28
- /**
29
- * Defense-in-depth: a hostile preload could synthesize a `realPath` that
30
- * resolveVPath would never produce. Re-canonicalize and re-anchor under the
31
- * sandbox base every time, throwing if the result escapes.
32
- *
33
- * Two-layer check:
34
- * 1. Lexical: `path.normalize` then `startsWith(base + sep)`.
35
- * 2. Filesystem: `fs.realpath` to follow symlinks and re-assert containment.
36
- *
37
- * The symlink check is best-effort — if the path does not yet exist (e.g. a
38
- * write/mkdir target), `fs.realpath` throws ENOENT and we fall back to
39
- * checking the deepest existing ancestor instead. A symlinked ancestor that
40
- * points outside the sandbox still gets caught that way.
41
- */
42
- async function enforceSandbox(realPath) {
43
- if (typeof realPath !== 'string' || realPath.length === 0) {
44
- throw new Error('sandbox: realPath must be a non-empty string');
45
- }
46
- const base = sandboxBase();
47
- const baseReal = await fs.realpath(base).catch(() => base);
48
- const normalized = path.normalize(realPath);
49
- if (normalized !== base && !normalized.startsWith(base + path.sep)) {
50
- throw new Error('sandbox: realPath escapes the user-data base');
51
- }
52
- // Walk up until we find an existing path, realpath it, and assert the
53
- // resolved ancestor stays under the sandbox base. This catches symlinks
54
- // anywhere along the chain — both the leaf (read/stat) and the parent
55
- // (write/mkdir creating a new file under a symlinked dir).
56
- let probe = normalized;
57
- while (probe !== path.parse(probe).root) {
58
- try {
59
- const resolved = await fs.realpath(probe);
60
- if (resolved !== baseReal && !resolved.startsWith(baseReal + path.sep)) {
61
- throw new Error('sandbox: realPath escapes the user-data base via symlink');
62
- }
63
- break;
64
- }
65
- catch (err) {
66
- if (err.code === 'ENOENT') {
67
- probe = path.dirname(probe);
68
- continue;
69
- }
70
- throw err;
71
- }
72
- }
73
- return normalized;
74
- }
75
- export async function handleFsRead(req) {
76
- const safe = await enforceSandbox(req.realPath);
77
- const result = await readDiskFile(safe, req.range ? { range: req.range } : undefined);
78
- return {
79
- bytes: result.bytes,
80
- mime: result.mime,
81
- etag: result.etag,
82
- totalSize: result.totalSize,
83
- };
84
- }
85
- export async function handleFsWrite(req) {
86
- const safe = await enforceSandbox(req.realPath);
87
- await writeDiskFile(safe, req.bytes);
88
- return { ok: true };
89
- }
90
- export async function handleFsStat(req) {
91
- const safe = await enforceSandbox(req.realPath);
92
- return statDiskFile(safe);
93
- }
94
- export async function handleFsReaddir(req) {
95
- const safe = await enforceSandbox(req.realPath);
96
- return readDiskDir(safe);
97
- }
98
- export async function handleFsUnlink(req) {
99
- const safe = await enforceSandbox(req.realPath);
100
- await fs.unlink(safe);
101
- return { ok: true };
102
- }
103
- export async function handleFsMkdir(req) {
104
- const safe = await enforceSandbox(req.realPath);
105
- await fs.mkdir(safe, { recursive: !!req.recursive });
106
- return { ok: true };
107
- }
1
+ export * from '@dimina-kit/electron-runtime/main/temp-files/fs-channels';
108
2
  //# sourceMappingURL=fs-channels.js.map
@@ -1,33 +1,2 @@
1
- /**
2
- * Wires the `difile://_tmp/*` protocol handler on the simulator session
3
- * and bridges renderer-side `setTempFileSink` callbacks to the main-process
4
- * byte store. Returned disposable clears the store, unregisters the protocol
5
- * handler, and tears down its private IPC channels.
6
- *
7
- * SENDER POLICY: The default workbench sender-policy intentionally rejects
8
- * the simulator `<webview>` (see `utils/sender-policy.ts`). The simulator
9
- * is the only legitimate writer for these channels, so this module installs
10
- * its own narrow policy that accepts a sender only when its WebContents
11
- * belongs to the simulator `Session` we were handed. This bypasses the
12
- * default policy without widening trust to any other source.
13
- *
14
- * WRITE-vs-RENDER RACE: `createTempFilePath` is synchronous on the renderer,
15
- * but the bytes travel here through `blob.arrayBuffer().then(ipcRenderer.send)`
16
- * — async. The simulator can race ahead: in `chooseMedia` the renderer
17
- * assigns `img.src = tempFilePath` (via `readImageMetadata`) immediately
18
- * after `createTempFilePath` returns, which fires a `difile://` GET before
19
- * our IPC write arrives. The protocol handler therefore parks a request on
20
- * a per-url waiter for up to PENDING_TIMEOUT_MS; the IPC `write` handler
21
- * drains the waiter on arrival.
22
- *
23
- * QUOTA: A single in-memory store backs all simulator sessions for the
24
- * lifetime of the WorkbenchApp instance. We cap it at MAX_STORE_ENTRIES
25
- * (FIFO eviction). Project switches do NOT clear the store on their own —
26
- * stale entries from a previous project simply age out as new ones land.
27
- * This is the same eviction shape WeChat uses for tmp files (LRU under a
28
- * size cap), simplified for a dev-tools session scope.
29
- */
30
- import type { Session } from 'electron';
31
- import { type Disposable } from '@dimina-kit/electron-deck/main';
32
- export declare function setupSimulatorTempFiles(simSession: Session): Disposable;
1
+ export * from '@dimina-kit/electron-runtime/main/temp-files';
33
2
  //# sourceMappingURL=index.d.ts.map