@dimina-kit/devtools 0.4.0-dev.20260828161241 → 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 (277) 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/render-host/pageFrame.html +1 -1
  173. package/dist/render-host/preload.cjs +16 -4
  174. package/dist/renderer/assets/button-CB2MWjHY.js +2 -0
  175. package/dist/renderer/assets/constants-CkoGPQTS.js +2 -0
  176. package/dist/renderer/assets/constants-zQZ2-y21.js +2 -0
  177. package/dist/renderer/assets/{createLucideIcon-Bqi8hpdi.js → createLucideIcon-cZ9FlZZw.js} +2 -2
  178. package/dist/renderer/assets/devicePicker-H2eIO4e1.js +2 -0
  179. package/dist/renderer/assets/dialog-pHzEA8Vx.js +46 -0
  180. package/dist/renderer/assets/dist-B5HADirS.js +2 -0
  181. package/dist/renderer/assets/{dist-DKWdE1TK.js → dist-DIFlRMKe.js} +2 -2
  182. package/dist/renderer/assets/hostSidebarDefault-DRWh6OCt.js +2 -0
  183. package/dist/renderer/assets/index-CEL_XFge.js +2 -0
  184. package/dist/renderer/assets/{input-Ct3alvkq.js → input-CAObw95L.js} +2 -2
  185. package/dist/renderer/assets/ipc-channels-overlays-gIPUFnqc.js +2 -0
  186. package/dist/renderer/assets/jsx-runtime-DICEQH_0.css +1 -0
  187. package/dist/renderer/assets/{jsx-runtime-DGLHmmOq.js → jsx-runtime-DIw5wnYl.js} +1 -1
  188. package/dist/renderer/assets/plus-BQ9u5EbL.js +2 -0
  189. package/dist/renderer/assets/popover-Cw7G2Ctp.js +2 -0
  190. package/dist/renderer/assets/presets-DMZOb9ay.js +2 -0
  191. package/dist/renderer/assets/project-api-YTOr_Yvo.js +2 -0
  192. package/dist/renderer/assets/{projectCreateDialog-Bbjz75bP.js → projectCreateDialog-BmLqiYxn.js} +2 -2
  193. package/dist/renderer/assets/search-BMvuYF48.js +2 -0
  194. package/dist/renderer/assets/select-nFP95TxM.js +2 -0
  195. package/dist/renderer/assets/settings-CnpVfSWt.js +2 -0
  196. package/dist/renderer/assets/settings-api-Ccsf-Nsj.js +2 -0
  197. package/dist/renderer/assets/settings-tab-bar-CAzrv32m.js +2 -0
  198. package/dist/renderer/assets/smartphone-Bb2GdIKy.js +2 -0
  199. package/dist/renderer/assets/tabs-CPKN3Mmq.js +2 -0
  200. package/dist/renderer/assets/{tooltip-B_-_YVbw.js → tooltip-D6AxXRk5.js} +2 -2
  201. package/dist/renderer/assets/types-Bh0hA7El.js +2 -0
  202. package/dist/renderer/assets/updateDialog-CwndJ0Bl.js +2 -0
  203. package/dist/renderer/assets/{utils-kfQov6Pa.js → utils-sEB5OZEQ.js} +2 -2
  204. package/dist/renderer/assets/view-api-B-2zPBR5.js +2 -0
  205. package/dist/renderer/assets/view-ids-BfaDVV5P.js +2 -0
  206. package/dist/renderer/assets/workbench-BLJ0wKsg.js +5 -0
  207. package/dist/renderer/assets/{workbenchSettings-CV4LVA9b.js → workbenchSettings-YD0Ctbm_.js} +3 -3
  208. package/dist/renderer/entries/device-picker/index.html +28 -0
  209. package/dist/renderer/entries/host-sidebar-default/index.html +6 -5
  210. package/dist/renderer/entries/main/index.html +16 -17
  211. package/dist/renderer/entries/popover/index.html +16 -10
  212. package/dist/renderer/entries/project-create-dialog/index.html +12 -12
  213. package/dist/renderer/entries/settings/index.html +10 -10
  214. package/dist/renderer/entries/tooltip/index.html +5 -5
  215. package/dist/renderer/entries/update-dialog/index.html +10 -10
  216. package/dist/renderer/entries/workbench/index.html +49 -0
  217. package/dist/renderer/entries/workbench-settings/index.html +12 -11
  218. package/dist/service-host/host-env-update.cjs +23 -0
  219. package/dist/service-host/preload.cjs +24 -49
  220. package/dist/service-host/service-message-queue.cjs +71 -0
  221. package/dist/service-host/sync-impls/system-info.js +31 -9
  222. package/dist/shared/compile-mode-state.d.ts +73 -0
  223. package/dist/shared/compile-mode-state.js +100 -0
  224. package/dist/shared/compile-modes.d.ts +152 -0
  225. package/dist/shared/compile-modes.js +237 -0
  226. package/dist/shared/ipc-channels-overlays.d.ts +8 -2
  227. package/dist/shared/ipc-channels-overlays.js +19 -2
  228. package/dist/shared/ipc-channels.d.ts +5 -10
  229. package/dist/shared/ipc-channels.js +17 -14
  230. package/dist/shared/ipc-schemas.d.ts +76 -24
  231. package/dist/shared/ipc-schemas.js +55 -10
  232. package/dist/shared/project-window-types.d.ts +42 -0
  233. package/dist/shared/project-window-types.js +2 -0
  234. package/dist/shared/types.d.ts +43 -17
  235. package/dist/shared/view-ids.d.ts +1 -0
  236. package/dist/shared/view-ids.js +3 -1
  237. package/dist/simulator/assets/bridge-channels-B3JAmRfl.js +2 -0
  238. package/dist/simulator/assets/device-shell-ATEhHV2_.css +1 -0
  239. package/dist/simulator/assets/device-shell-pxnZZp10.js +431 -0
  240. package/dist/simulator/assets/simulator-Dwp7lnvu.js +10 -0
  241. package/dist/simulator/assets/simulator-mini-app-DFo7fhi5.js +2 -0
  242. package/dist/simulator/assets/simulator-ui-B2ddJB1R.js +2 -0
  243. package/dist/simulator/simulator.html +3 -3
  244. package/dist/simulator/temp-files.d.ts +6 -0
  245. package/dist/simulator/temp-files.js +46 -4
  246. package/dist/simulator/types.d.ts +7 -0
  247. package/dist/vscode-workbench/assets/__vite-browser-external-JIkWewFf.js +1 -0
  248. package/dist/vscode-workbench/assets/{dist-CMfmHflW.js → dist-CXG-u1VB.js} +3 -3
  249. package/dist/vscode-workbench/assets/{iconv-lite-umd-Bx8CgaZq.js → iconv-lite-umd-Dxx9Qyb4.js} +1 -1
  250. package/dist/vscode-workbench/assets/{index-CdG6YWhW.js → index-6VJMsaWj.js} +460 -460
  251. package/dist/vscode-workbench/assets/{jschardet-M0qgd2lN.js → jschardet-Ba3D16vt.js} +1 -1
  252. package/dist/vscode-workbench/index.html +1 -1
  253. package/package.json +11 -8
  254. package/dist/renderer/assets/button-D5Q2wkXq.js +0 -2
  255. package/dist/renderer/assets/constants-D7DfVqMp.js +0 -2
  256. package/dist/renderer/assets/constants-D8zsejFq.js +0 -2
  257. package/dist/renderer/assets/dialog-e1TecTOY.js +0 -46
  258. package/dist/renderer/assets/hostSidebarDefault-B3yLfy8j.js +0 -2
  259. package/dist/renderer/assets/index-CsPD68N_.js +0 -5
  260. package/dist/renderer/assets/ipc-channels-overlays-LsDzGAtV.js +0 -2
  261. package/dist/renderer/assets/jsx-runtime-2vXHouwr.css +0 -1
  262. package/dist/renderer/assets/popover-Dix5cm_b.js +0 -2
  263. package/dist/renderer/assets/project-api-k7Oq9iaq.js +0 -2
  264. package/dist/renderer/assets/select-acGb0AmJ.js +0 -2
  265. package/dist/renderer/assets/settings-CQrTMr43.js +0 -2
  266. package/dist/renderer/assets/settings-api-CrUQ9rYV.js +0 -2
  267. package/dist/renderer/assets/settings-tab-bar-Cw1kVIf2.js +0 -2
  268. package/dist/renderer/assets/types-CsEKtFyr.js +0 -2
  269. package/dist/renderer/assets/updateDialog-NsF8223A.js +0 -2
  270. package/dist/renderer/assets/view-api-CLn3rcQE.js +0 -2
  271. package/dist/simulator/assets/bridge-channels-zhsumfky.js +0 -2
  272. package/dist/simulator/assets/device-shell-CmtM1QxP.js +0 -2
  273. package/dist/simulator/assets/device-shell-iFZo1igL.css +0 -1
  274. package/dist/simulator/assets/simulator-CIobn3Mh.js +0 -10
  275. package/dist/simulator/assets/simulator-mini-app-CRe6n9br.js +0 -2
  276. package/dist/simulator/assets/simulator-ui-C_cP602X.js +0 -2
  277. package/dist/vscode-workbench/assets/__vite-browser-external-Bc1vizTf.js +0 -1
@@ -3124,6 +3124,37 @@ var main_exports = {};
3124
3124
  module.exports = __toCommonJS(main_exports);
3125
3125
  var import_electron = require("electron");
3126
3126
 
3127
+ // ../dimina-electron-runtime/dist/shared/host-env.js
3128
+ function deviceInfoToHostEnv(d) {
3129
+ const insets = d.safeAreaInsets;
3130
+ const windowHeight = Math.max(0, d.screenHeight - insets.top - insets.bottom);
3131
+ const left = insets.left;
3132
+ const right = d.screenWidth - insets.right;
3133
+ return {
3134
+ brand: d.brand,
3135
+ model: d.model,
3136
+ system: d.system,
3137
+ platform: d.platform,
3138
+ pixelRatio: d.pixelRatio,
3139
+ screenWidth: d.screenWidth,
3140
+ screenHeight: d.screenHeight,
3141
+ windowWidth: d.screenWidth,
3142
+ windowHeight,
3143
+ statusBarHeight: d.statusBarHeight,
3144
+ safeAreaInsets: insets,
3145
+ deviceOrientation: d.orientation,
3146
+ safeArea: {
3147
+ left,
3148
+ top: insets.top,
3149
+ right,
3150
+ bottom: d.screenHeight - insets.bottom,
3151
+ width: Math.max(0, right - left),
3152
+ height: windowHeight
3153
+ },
3154
+ screenTop: d.statusBarHeight
3155
+ };
3156
+ }
3157
+
3127
3158
  // ../dimina-electron-runtime/dist/shared/bridge-channels.js
3128
3159
  var BRIDGE_CHANNELS = {
3129
3160
  SPAWN: "dmb:spawn",
@@ -3574,19 +3605,46 @@ function resolveVPath(url) {
3574
3605
  }
3575
3606
 
3576
3607
  // src/simulator/temp-files.ts
3608
+ var MAX_TEMP_FILE_ENTRIES = 200;
3577
3609
  var tempFiles = /* @__PURE__ */ new Map();
3578
3610
  var activeSink = null;
3611
+ function rememberTempFile(path2, blob) {
3612
+ tempFiles.set(path2, blob);
3613
+ while (tempFiles.size > MAX_TEMP_FILE_ENTRIES) {
3614
+ const oldest = tempFiles.keys().next();
3615
+ if (oldest.done) break;
3616
+ tempFiles.delete(oldest.value);
3617
+ }
3618
+ }
3579
3619
  function cryptoRandomId() {
3580
3620
  const c = globalThis.crypto;
3581
3621
  if (c && typeof c.randomUUID === "function") return c.randomUUID();
3582
3622
  return `${Date.now()}-${Math.random().toString(36).slice(2)}`;
3583
3623
  }
3584
- function createTempFilePath(blob) {
3624
+ function allocateTempFilePath(blob) {
3585
3625
  const path2 = `difile://_tmp/${cryptoRandomId()}`;
3586
- tempFiles.set(path2, blob);
3626
+ rememberTempFile(path2, blob);
3627
+ return path2;
3628
+ }
3629
+ function createTempFilePath(blob) {
3630
+ const path2 = allocateTempFilePath(blob);
3587
3631
  activeSink?.write(path2, blob);
3588
3632
  return path2;
3589
3633
  }
3634
+ async function createTempFilePathAsync(blob) {
3635
+ const path2 = allocateTempFilePath(blob);
3636
+ try {
3637
+ if (activeSink?.writeAndWait) {
3638
+ await activeSink.writeAndWait(path2, blob);
3639
+ } else {
3640
+ activeSink?.write(path2, blob);
3641
+ }
3642
+ } catch (error) {
3643
+ tempFiles.delete(path2);
3644
+ throw error;
3645
+ }
3646
+ return path2;
3647
+ }
3590
3648
  async function resolveTempFilePath(path2) {
3591
3649
  const cached = tempFiles.get(path2);
3592
3650
  if (cached) return cached;
@@ -3595,7 +3653,7 @@ async function resolveTempFilePath(path2) {
3595
3653
  throw new Error(`\u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6 ${path2}`);
3596
3654
  }
3597
3655
  const blob = await response.blob();
3598
- tempFiles.set(path2, blob);
3656
+ rememberTempFile(path2, blob);
3599
3657
  return blob;
3600
3658
  }
3601
3659
  function getTempFileName(path2, blob, fallback = "file") {
@@ -4299,6 +4357,112 @@ function compressImage({ src, quality = 80, success, fail, complete }) {
4299
4357
  };
4300
4358
  img.src = src;
4301
4359
  }
4360
+ var MAX_CANVAS_IMAGE_BYTES = 32 * 1024 * 1024;
4361
+ var MAX_CANVAS_BASE64_CHARS = Math.floor(MAX_CANVAS_IMAGE_BYTES * 4 / 3) + 8;
4362
+ var PNG_SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10];
4363
+ function matchesImageType(bytes, fileType) {
4364
+ if (fileType === "png") {
4365
+ return bytes.length >= PNG_SIGNATURE.length && PNG_SIGNATURE.every((byte, i) => bytes[i] === byte);
4366
+ }
4367
+ return bytes.length >= 3 && bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255;
4368
+ }
4369
+ var CANVAS_DATA_URL_PREFIX = /^data:image\/(png|jpeg|jpg);base64,/;
4370
+ var STRICT_BASE64 = /^[A-Za-z0-9+/]*={0,2}$/;
4371
+ var SAFE_CANVAS_APP_ID = /^[A-Za-z0-9._-]+$/;
4372
+ function isValidCanvasAppId(appId) {
4373
+ return typeof appId === "string" && SAFE_CANVAS_APP_ID.test(appId) && appId !== "." && appId !== "..";
4374
+ }
4375
+ function readCanvasDataURL(dataURL, fileType, appId) {
4376
+ if (!dataURL || typeof dataURL !== "string") return { reason: "dataURL is required" };
4377
+ if (fileType !== "png" && fileType !== "jpg") return { reason: "invalid file type" };
4378
+ if (!isValidCanvasAppId(appId)) return { reason: "invalid appId" };
4379
+ const prefix = CANVAS_DATA_URL_PREFIX.exec(dataURL);
4380
+ if (dataURL.startsWith("data:") && !prefix) return { reason: "invalid dataURL" };
4381
+ const declaredType = prefix?.[1];
4382
+ if (declaredType && declaredType !== fileType && !(declaredType === "jpeg" && fileType === "jpg")) {
4383
+ return { reason: "file type mismatch" };
4384
+ }
4385
+ return { base64Data: prefix ? dataURL.slice(prefix[0].length) : dataURL, fileType };
4386
+ }
4387
+ function isStrictBase64(base64Data) {
4388
+ return !!base64Data && base64Data.length % 4 === 0 && STRICT_BASE64.test(base64Data);
4389
+ }
4390
+ var MAX_IN_FLIGHT_CANVAS_EXPORTS = 2;
4391
+ var MAX_PENDING_CANVAS_BASE64_CHARS = MAX_IN_FLIGHT_CANVAS_EXPORTS * MAX_CANVAS_BASE64_CHARS;
4392
+ var pendingCanvasExports = /* @__PURE__ */ new Map();
4393
+ function reserveCanvasExport(appId, chars) {
4394
+ const state = pendingCanvasExports.get(appId) ?? { count: 0, chars: 0 };
4395
+ if (state.count >= MAX_IN_FLIGHT_CANVAS_EXPORTS) return false;
4396
+ if (state.chars + chars > MAX_PENDING_CANVAS_BASE64_CHARS) return false;
4397
+ state.count += 1;
4398
+ state.chars += chars;
4399
+ pendingCanvasExports.set(appId, state);
4400
+ return true;
4401
+ }
4402
+ function releaseCanvasExport(appId, chars) {
4403
+ const state = pendingCanvasExports.get(appId);
4404
+ if (!state) return;
4405
+ state.count -= 1;
4406
+ state.chars -= chars;
4407
+ if (state.count <= 0) pendingCanvasExports.delete(appId);
4408
+ }
4409
+ function decodeCanvasBytes(base64Data, fileType) {
4410
+ let bytes;
4411
+ try {
4412
+ const byteChars = atob(base64Data);
4413
+ bytes = new Uint8Array(byteChars.length);
4414
+ for (let i = 0; i < byteChars.length; i++) {
4415
+ bytes[i] = byteChars.charCodeAt(i);
4416
+ }
4417
+ } catch {
4418
+ return { reason: "base64 decode failed" };
4419
+ }
4420
+ if (bytes.length > MAX_CANVAS_IMAGE_BYTES) return { reason: "data too large" };
4421
+ if (!matchesImageType(bytes, fileType)) return { reason: "invalid image data" };
4422
+ return { blob: new Blob([bytes], { type: fileType === "jpg" ? "image/jpeg" : "image/png" }) };
4423
+ }
4424
+ async function saveCanvasTempFile({ dataURL, fileType = "png", success, fail, complete }) {
4425
+ const { onSuccess, onFail, onComplete } = bindCallbacks(this, { success, fail, complete });
4426
+ const failWith = (reason) => {
4427
+ const result = { errMsg: `canvasToTempFilePath:fail ${reason}` };
4428
+ onFail?.(result);
4429
+ onComplete?.(result);
4430
+ };
4431
+ const head = readCanvasDataURL(dataURL, fileType, this.appId);
4432
+ if ("reason" in head) {
4433
+ failWith(head.reason);
4434
+ return;
4435
+ }
4436
+ const { base64Data, fileType: imageType } = head;
4437
+ if (base64Data.length > MAX_CANVAS_BASE64_CHARS) {
4438
+ failWith("data too large");
4439
+ return;
4440
+ }
4441
+ if (!isStrictBase64(base64Data)) {
4442
+ failWith("base64 decode failed");
4443
+ return;
4444
+ }
4445
+ if (!reserveCanvasExport(this.appId, base64Data.length)) {
4446
+ failWith("too many pending exports");
4447
+ return;
4448
+ }
4449
+ try {
4450
+ const decoded = decodeCanvasBytes(base64Data, imageType);
4451
+ if ("reason" in decoded) {
4452
+ failWith(decoded.reason);
4453
+ return;
4454
+ }
4455
+ const tempFilePath = await createTempFilePathAsync(decoded.blob);
4456
+ const result = { tempFilePath, errMsg: "canvasToTempFilePath:ok" };
4457
+ onSuccess?.(result);
4458
+ onComplete?.(result);
4459
+ } catch (error) {
4460
+ console.warn("[simulator] canvas temp file write failed", error);
4461
+ failWith("write failed");
4462
+ } finally {
4463
+ releaseCanvasExport(this.appId, base64Data.length);
4464
+ }
4465
+ }
4302
4466
  function saveImageToPhotosAlbum({ filePath, success, fail, complete }) {
4303
4467
  const { onSuccess, onFail, onComplete } = bindCallbacks(this, { success, fail, complete });
4304
4468
  const triggerDownload = (href) => {
@@ -5160,11 +5324,12 @@ function getWindowInfo({ success, complete } = {}) {
5160
5324
  }
5161
5325
  function getSystemSetting({ success, complete } = {}) {
5162
5326
  const { onSuccess, onComplete } = bindCallbacks(this, { success, complete });
5327
+ const device = this.getCurrentDevice?.();
5163
5328
  const info = {
5164
5329
  bluetoothEnabled: false,
5165
5330
  locationEnabled: true,
5166
5331
  wifiEnabled: true,
5167
- deviceOrientation: "portrait"
5332
+ deviceOrientation: device && deviceInfoToHostEnv(device).deviceOrientation || "portrait"
5168
5333
  };
5169
5334
  onSuccess?.(info);
5170
5335
  onComplete?.();
@@ -5186,6 +5351,17 @@ function readWindowMetrics(miniApp) {
5186
5351
  };
5187
5352
  }
5188
5353
  function buildSystemInfo(miniApp) {
5354
+ const device = miniApp.getCurrentDevice?.();
5355
+ if (device) {
5356
+ return {
5357
+ ...deviceInfoToHostEnv(device),
5358
+ language: "zh_CN",
5359
+ version: "8.0.5",
5360
+ SDKVersion: "3.0.0",
5361
+ fontSizeSetting: 16,
5362
+ theme: window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light"
5363
+ };
5364
+ }
5189
5365
  const { wb, di, dev, pixelRatio, screenWidth, screenHeight, windowWidth, windowHeight } = readWindowMetrics(miniApp);
5190
5366
  const statusBarHeight = di["statusBarHeight"] ?? dev?.statusBarHeight ?? 0;
5191
5367
  const bottomInset = di["safeAreaInsets"]?.bottom ?? dev?.safeAreaInsets?.bottom ?? 0;
@@ -5286,6 +5462,7 @@ var simulatorApis = {
5286
5462
  previewImage,
5287
5463
  compressImage,
5288
5464
  saveImageToPhotosAlbum,
5465
+ saveCanvasTempFile,
5289
5466
  getImageInfo,
5290
5467
  // Media: Video
5291
5468
  chooseMedia,