@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.
- package/README.md +51 -660
- package/dist/main/api.d.ts +2 -1
- package/dist/main/app/app.d.ts +41 -12
- package/dist/main/app/app.js +299 -514
- package/dist/main/app/bootstrap.d.ts +8 -5
- package/dist/main/app/bootstrap.js +15 -15
- package/dist/main/app/editor-view.d.ts +21 -0
- package/dist/main/app/editor-view.js +71 -0
- package/dist/main/app/global-mirrors.d.ts +23 -0
- package/dist/main/app/global-mirrors.js +37 -0
- package/dist/main/app/host-sidebar-default.d.ts +19 -0
- package/dist/main/app/host-sidebar-default.js +44 -0
- package/dist/main/app/lifecycle.d.ts +12 -1
- package/dist/main/app/lifecycle.js +27 -1
- package/dist/main/app/menu-setup.d.ts +13 -0
- package/dist/main/app/menu-setup.js +49 -0
- package/dist/main/app/native-overview.d.ts +1 -1
- package/dist/main/app/open-project-ipc.d.ts +13 -0
- package/dist/main/app/open-project-ipc.js +21 -0
- package/dist/main/app/project-list-surface.d.ts +31 -0
- package/dist/main/app/project-list-surface.js +20 -0
- package/dist/main/app/project-window.d.ts +36 -0
- package/dist/main/app/project-window.js +93 -0
- package/dist/main/app/servers.d.ts +17 -0
- package/dist/main/app/servers.js +60 -0
- package/dist/main/app/ui-extension-targets.d.ts +42 -0
- package/dist/main/app/ui-extension-targets.js +101 -0
- package/dist/main/app/window-close-reveal.harness.d.ts +34 -0
- package/dist/main/app/window-close-reveal.harness.js +65 -0
- package/dist/main/app/window-events.d.ts +15 -0
- package/dist/main/app/window-events.js +45 -0
- package/dist/main/app/window-runtime-services.d.ts +41 -0
- package/dist/main/app/window-runtime-services.js +197 -0
- package/dist/main/app/workbench-modules.d.ts +24 -0
- package/dist/main/app/workbench-modules.js +51 -0
- package/dist/main/app/workbench-window.d.ts +85 -0
- package/dist/main/app/workbench-window.js +310 -0
- package/dist/main/index.bundle.js +11712 -9986
- package/dist/main/index.js +49 -1
- package/dist/main/ipc/app-lifecycle.d.ts +1 -31
- package/dist/main/ipc/app-lifecycle.js +1 -53
- package/dist/main/ipc/app.d.ts +4 -1
- package/dist/main/ipc/app.js +4 -3
- package/dist/main/ipc/bridge-router.d.ts +19 -116
- package/dist/main/ipc/bridge-router.js +28 -2128
- package/dist/main/ipc/device-picker.d.ts +16 -0
- package/dist/main/ipc/device-picker.js +27 -0
- package/dist/main/ipc/index.d.ts +5 -0
- package/dist/main/ipc/index.js +5 -0
- package/dist/main/ipc/internal-devtools.d.ts +16 -0
- package/dist/main/ipc/internal-devtools.js +10 -0
- package/dist/main/ipc/page-scroll.d.ts +1 -13
- package/dist/main/ipc/page-scroll.js +1 -16
- package/dist/main/ipc/popover.d.ts +4 -1
- package/dist/main/ipc/popover.js +26 -19
- package/dist/main/ipc/project-create.d.ts +16 -0
- package/dist/main/ipc/project-create.js +27 -0
- package/dist/main/ipc/project-fs.d.ts +38 -3
- package/dist/main/ipc/project-fs.js +53 -22
- package/dist/main/ipc/projects.d.ts +3 -3
- package/dist/main/ipc/projects.js +47 -11
- package/dist/main/ipc/session-listener-bag.d.ts +1 -40
- package/dist/main/ipc/session-listener-bag.js +1 -39
- package/dist/main/ipc/session.d.ts +4 -1
- package/dist/main/ipc/session.js +26 -26
- package/dist/main/ipc/settings.d.ts +4 -1
- package/dist/main/ipc/settings.js +17 -19
- package/dist/main/ipc/simulator-module.d.ts +9 -3
- package/dist/main/ipc/simulator-module.js +13 -10
- package/dist/main/ipc/simulator.d.ts +4 -1
- package/dist/main/ipc/simulator.js +12 -18
- package/dist/main/ipc/tooltip.d.ts +14 -0
- package/dist/main/ipc/tooltip.js +29 -0
- package/dist/main/ipc/views.d.ts +19 -2
- package/dist/main/ipc/views.js +76 -8
- package/dist/main/runtime/devtools-backend-before-quit.harness.d.ts +43 -0
- package/dist/main/runtime/devtools-backend-before-quit.harness.js +87 -0
- package/dist/main/runtime/devtools-backend.js +60 -4
- package/dist/main/runtime/devtools-runtime-mock.harness.d.ts +21 -0
- package/dist/main/runtime/devtools-runtime-mock.harness.js +313 -0
- package/dist/main/runtime/miniapp-runtime.d.ts +91 -22
- package/dist/main/services/app-services.d.ts +62 -0
- package/dist/main/services/app-services.js +64 -0
- package/dist/main/services/automation/connection-target.d.ts +36 -0
- package/dist/main/services/automation/connection-target.js +29 -0
- package/dist/main/services/automation/console-bridge.d.ts +28 -0
- package/dist/main/services/automation/console-bridge.js +91 -0
- package/dist/main/services/automation/handlers/app.js +4 -4
- package/dist/main/services/automation/handlers/element.js +55 -21
- package/dist/main/services/automation/index.d.ts +12 -1
- package/dist/main/services/automation/index.js +54 -133
- package/dist/main/services/cdp-session/index.d.ts +87 -0
- package/dist/main/services/cdp-session/index.js +173 -0
- package/dist/main/services/compile-standby.js +4 -0
- package/dist/main/services/console-forward/cdp-inject.d.ts +18 -0
- package/dist/main/services/console-forward/cdp-inject.js +30 -0
- package/dist/main/services/console-forward/global-console-mirror.d.ts +33 -0
- package/dist/main/services/console-forward/global-console-mirror.js +71 -0
- package/dist/main/services/console-forward/global-diagnostics-mirror.d.ts +33 -0
- package/dist/main/services/console-forward/global-diagnostics-mirror.js +73 -0
- package/dist/main/services/console-forward/index.d.ts +1 -46
- package/dist/main/services/console-forward/index.js +1 -185
- package/dist/main/services/console-forward/internal-log.d.ts +2 -0
- package/dist/main/services/console-forward/internal-log.js +2 -0
- package/dist/main/services/console-forward/open-gated-relay.d.ts +67 -0
- package/dist/main/services/console-forward/open-gated-relay.js +55 -0
- package/dist/main/services/default-adapter.js +1 -1
- package/dist/main/services/diagnostics/index.d.ts +1 -48
- package/dist/main/services/diagnostics/index.js +1 -60
- package/dist/main/services/dimina-resource-server.d.ts +1 -6
- package/dist/main/services/dimina-resource-server.js +1 -98
- package/dist/main/services/elements-forward/index.d.ts +132 -15
- package/dist/main/services/elements-forward/index.js +155 -304
- package/dist/main/services/fs-bridge-protocol.d.ts +61 -0
- package/dist/main/services/fs-bridge-protocol.js +34 -0
- package/dist/main/services/fs-watch-sse.d.ts +40 -0
- package/dist/main/services/fs-watch-sse.js +113 -0
- package/dist/main/services/http-json.d.ts +9 -0
- package/dist/main/services/http-json.js +6 -0
- package/dist/main/services/layout/index.d.ts +11 -0
- package/dist/main/services/layout/index.js +23 -0
- package/dist/main/services/mcp/connection-owner.d.ts +38 -0
- package/dist/main/services/mcp/connection-owner.js +79 -0
- package/dist/main/services/mcp/index.d.ts +3 -1
- package/dist/main/services/mcp/index.js +4 -3
- package/dist/main/services/mcp/opened-project.d.ts +88 -0
- package/dist/main/services/mcp/opened-project.js +60 -0
- package/dist/main/services/mcp/server.d.ts +2 -1
- package/dist/main/services/mcp/server.js +29 -4
- package/dist/main/services/mcp/target-manager.d.ts +71 -23
- package/dist/main/services/mcp/target-manager.js +269 -138
- package/dist/main/services/mcp/target-selection.d.ts +47 -0
- package/dist/main/services/mcp/target-selection.js +71 -0
- package/dist/main/services/mcp/tools/context-tools.js +20 -5
- package/dist/main/services/mcp/tools/project-tools.d.ts +72 -0
- package/dist/main/services/mcp/tools/project-tools.js +133 -0
- package/dist/main/services/module.d.ts +13 -5
- package/dist/main/services/network-forward/body-cache.d.ts +72 -0
- package/dist/main/services/network-forward/body-cache.js +179 -0
- package/dist/main/services/network-forward/frontend-dispatch.d.ts +91 -0
- package/dist/main/services/network-forward/frontend-dispatch.js +148 -0
- package/dist/main/services/network-forward/global-body-gate.d.ts +46 -0
- package/dist/main/services/network-forward/global-body-gate.js +93 -0
- package/dist/main/services/network-forward/global-mirror-test-fixtures.d.ts +48 -0
- package/dist/main/services/network-forward/global-mirror-test-fixtures.js +96 -0
- package/dist/main/services/network-forward/http.d.ts +47 -0
- package/dist/main/services/network-forward/http.js +162 -0
- package/dist/main/services/network-forward/index.d.ts +135 -15
- package/dist/main/services/network-forward/index.js +854 -224
- package/dist/main/services/network-forward/request-ids.d.ts +5 -0
- package/dist/main/services/network-forward/request-ids.js +5 -0
- package/dist/main/services/network-forward/user-facing.d.ts +21 -0
- package/dist/main/services/network-forward/user-facing.js +50 -0
- package/dist/main/services/network-forward/websocket.d.ts +36 -0
- package/dist/main/services/network-forward/websocket.js +120 -0
- package/dist/main/services/notifications/renderer-notifier.d.ts +71 -9
- package/dist/main/services/notifications/renderer-notifier.js +45 -8
- package/dist/main/services/projects/create-project-service.js +19 -5
- package/dist/main/services/projects/local-provider.js +8 -4
- package/dist/main/services/projects/project-repository.d.ts +59 -7
- package/dist/main/services/projects/project-repository.js +285 -51
- package/dist/main/services/projects/types.d.ts +44 -34
- package/dist/main/services/render-inspect/index.d.ts +12 -2
- package/dist/main/services/render-inspect/index.js +21 -102
- package/dist/main/services/safe-area/index.d.ts +21 -6
- package/dist/main/services/safe-area/index.js +92 -46
- package/dist/main/services/service-host-pool/pool.d.ts +1 -196
- package/dist/main/services/service-host-pool/pool.js +1 -363
- package/dist/main/services/settings/index.d.ts +7 -1
- package/dist/main/services/settings/index.js +22 -2
- package/dist/main/services/simulator/custom-apis.d.ts +1 -42
- package/dist/main/services/simulator/custom-apis.js +1 -46
- package/dist/main/services/simulator/referer.d.ts +1 -9
- package/dist/main/services/simulator/referer.js +1 -19
- package/dist/main/services/simulator/ui-extensions.d.ts +21 -0
- package/dist/main/services/simulator/ui-extensions.js +176 -0
- package/dist/main/services/simulator-appdata/index.d.ts +6 -0
- package/dist/main/services/simulator-appdata/index.js +21 -2
- package/dist/main/services/simulator-current-page/index.d.ts +5 -3
- package/dist/main/services/simulator-current-page/index.js +8 -1
- package/dist/main/services/simulator-storage/index.d.ts +34 -5
- package/dist/main/services/simulator-storage/index.js +73 -71
- package/dist/main/services/simulator-storage/service-storage-ops.d.ts +1 -39
- package/dist/main/services/simulator-storage/service-storage-ops.js +1 -66
- package/dist/main/services/simulator-storage/window-scope.d.ts +20 -0
- package/dist/main/services/simulator-storage/window-scope.js +20 -0
- package/dist/main/services/simulator-temp-files/disk.d.ts +1 -54
- package/dist/main/services/simulator-temp-files/disk.js +1 -237
- package/dist/main/services/simulator-temp-files/fs-channels.d.ts +1 -68
- package/dist/main/services/simulator-temp-files/fs-channels.js +1 -107
- package/dist/main/services/simulator-temp-files/index.d.ts +1 -32
- package/dist/main/services/simulator-temp-files/index.js +1 -181
- package/dist/main/services/simulator-temp-files/request-handler.d.ts +1 -29
- package/dist/main/services/simulator-temp-files/request-handler.js +1 -177
- package/dist/main/services/simulator-temp-files/resolver.d.ts +1 -21
- package/dist/main/services/simulator-temp-files/resolver.js +1 -21
- package/dist/main/services/simulator-temp-files/store.d.ts +1 -13
- package/dist/main/services/simulator-temp-files/store.js +1 -23
- package/dist/main/services/update/github-release-checker.js +22 -3
- package/dist/main/services/update/update-manager.d.ts +21 -4
- package/dist/main/services/update/update-manager.js +55 -11
- package/dist/main/services/views/clear-console-filter.d.ts +44 -0
- package/dist/main/services/views/clear-console-filter.js +86 -0
- package/dist/main/services/views/console-filter-test-fixtures.d.ts +94 -0
- package/dist/main/services/views/console-filter-test-fixtures.js +82 -0
- package/dist/main/services/views/console-filter.d.ts +94 -0
- package/dist/main/services/views/console-filter.js +190 -0
- package/dist/main/services/views/devtools-tabs.d.ts +24 -4
- package/dist/main/services/views/devtools-tabs.js +40 -21
- package/dist/main/services/views/frontend-bootstrap-gate.d.ts +59 -0
- package/dist/main/services/views/frontend-bootstrap-gate.js +117 -0
- package/dist/main/services/views/host-dialog-port-channel.d.ts +18 -0
- package/dist/main/services/views/host-dialog-port-channel.js +15 -0
- package/dist/main/services/views/host-dialog-session-runtime.d.ts +10 -0
- package/dist/main/services/views/host-dialog-session-runtime.js +17 -0
- package/dist/main/services/views/host-dialog-view.d.ts +95 -0
- package/dist/main/services/views/host-dialog-view.js +147 -0
- package/dist/main/services/views/host-sidebar-port-channel.d.ts +18 -0
- package/dist/main/services/views/host-sidebar-port-channel.js +15 -0
- package/dist/main/services/views/host-sidebar-session-runtime.d.ts +10 -0
- package/dist/main/services/views/host-sidebar-session-runtime.js +17 -0
- package/dist/main/services/views/host-sidebar-view.d.ts +59 -0
- package/dist/main/services/views/host-sidebar-view.js +44 -0
- package/dist/main/services/views/host-slot-port-channel.d.ts +124 -0
- package/dist/main/services/views/host-slot-port-channel.js +289 -0
- package/dist/main/services/views/host-slot-session-runtime.d.ts +40 -0
- package/dist/main/services/views/host-slot-session-runtime.js +50 -0
- package/dist/main/services/views/host-slot-view.d.ts +109 -0
- package/dist/main/services/views/host-slot-view.js +147 -0
- package/dist/main/services/views/host-toolbar-port-channel.d.ts +6 -91
- package/dist/main/services/views/host-toolbar-port-channel.js +10 -243
- package/dist/main/services/views/host-toolbar-session-runtime.d.ts +5 -30
- package/dist/main/services/views/host-toolbar-session-runtime.js +9 -47
- package/dist/main/services/views/host-toolbar-view.d.ts +34 -7
- package/dist/main/services/views/host-toolbar-view.js +30 -237
- package/dist/main/services/views/managed-web-contents-view.d.ts +48 -0
- package/dist/main/services/views/managed-web-contents-view.js +143 -0
- package/dist/main/services/views/miniapp-partition.d.ts +1 -89
- package/dist/main/services/views/miniapp-partition.js +1 -158
- package/dist/main/services/views/native-simulator-devtools-host.js +206 -68
- package/dist/main/services/views/native-simulator-view.d.ts +6 -0
- package/dist/main/services/views/native-simulator-view.js +47 -40
- package/dist/main/services/views/native-view-tree.d.ts +25 -0
- package/dist/main/services/views/native-view-tree.js +69 -0
- package/dist/main/services/views/overlay-panels-view.d.ts +63 -4
- package/dist/main/services/views/overlay-panels-view.js +257 -108
- package/dist/main/services/views/placement-reconciler.d.ts +18 -18
- package/dist/main/services/views/placement-reconciler.js +91 -29
- package/dist/main/services/views/placement-test-driver.d.ts +27 -0
- package/dist/main/services/views/placement-test-driver.js +29 -0
- package/dist/main/services/views/refresh-styles.d.ts +10 -0
- package/dist/main/services/views/refresh-styles.js +57 -0
- package/dist/main/services/views/simulator-session-policy.d.ts +1 -27
- package/dist/main/services/views/simulator-session-policy.js +1 -98
- package/dist/main/services/views/view-manager-devtools-host-test-fixtures.d.ts +76 -0
- package/dist/main/services/views/view-manager-devtools-host-test-fixtures.js +184 -0
- package/dist/main/services/views/view-manager.d.ts +69 -88
- package/dist/main/services/views/view-manager.js +62 -7
- package/dist/main/services/views/workbench-view.d.ts +2 -0
- package/dist/main/services/views/workbench-view.js +104 -17
- package/dist/main/services/window-contexts/context-router.d.ts +36 -0
- package/dist/main/services/window-contexts/context-router.js +55 -0
- package/dist/main/services/workbench-coi-host.d.ts +52 -0
- package/dist/main/services/workbench-coi-host.js +227 -0
- package/dist/main/services/workbench-coi-server.d.ts +11 -0
- package/dist/main/services/workbench-coi-server.js +126 -126
- package/dist/main/services/workbench-coi-shutdown.d.ts +40 -0
- package/dist/main/services/workbench-coi-shutdown.js +69 -0
- package/dist/main/services/workbench-coi-static.d.ts +23 -0
- package/dist/main/services/workbench-coi-static.js +87 -0
- package/dist/main/services/workbench-context.d.ts +88 -8
- package/dist/main/services/workbench-context.js +54 -6
- package/dist/main/services/workspace/compile-log-buffer.d.ts +40 -0
- package/dist/main/services/workspace/compile-log-buffer.js +41 -0
- package/dist/main/services/workspace/compile-mode-adapter.d.ts +18 -0
- package/dist/main/services/workspace/compile-mode-adapter.js +57 -0
- package/dist/main/services/workspace/compile-mode-store.d.ts +25 -0
- package/dist/main/services/workspace/compile-mode-store.js +71 -0
- package/dist/main/services/workspace/open-project-guards.d.ts +16 -0
- package/dist/main/services/workspace/open-project-guards.js +42 -0
- package/dist/main/services/workspace/rebuild-status.d.ts +37 -0
- package/dist/main/services/workspace/rebuild-status.js +36 -0
- package/dist/main/services/workspace/session-status-store.d.ts +47 -0
- package/dist/main/services/workspace/session-status-store.js +73 -0
- package/dist/main/services/workspace/status-tap.d.ts +20 -0
- package/dist/main/services/workspace/status-tap.js +32 -0
- package/dist/main/services/workspace/workspace-compile-modes.d.ts +59 -0
- package/dist/main/services/workspace/workspace-compile-modes.js +93 -0
- package/dist/main/services/workspace/workspace-lifecycle-race.testutil.d.ts +22 -0
- package/dist/main/services/workspace/workspace-lifecycle-race.testutil.js +62 -0
- package/dist/main/services/workspace/workspace-referer.d.ts +17 -0
- package/dist/main/services/workspace/workspace-referer.js +26 -0
- package/dist/main/services/workspace/workspace-service.d.ts +7 -5
- package/dist/main/services/workspace/workspace-service.js +96 -135
- package/dist/main/services/workspace/workspace-thumbnails.d.ts +22 -0
- package/dist/main/services/workspace/workspace-thumbnails.js +67 -0
- package/dist/main/utils/ipc-context-source.d.ts +40 -0
- package/dist/main/utils/ipc-context-source.js +23 -0
- package/dist/main/utils/ipc-registry.d.ts +46 -21
- package/dist/main/utils/ipc-registry.js +166 -76
- package/dist/main/utils/paths.d.ts +18 -0
- package/dist/main/utils/paths.js +18 -0
- package/dist/main/utils/sender-policy.d.ts +10 -1
- package/dist/main/utils/sender-policy.js +42 -4
- package/dist/main/utils/theme.d.ts +18 -8
- package/dist/main/utils/theme.js +19 -9
- package/dist/main/windows/internal-devtools-window/index.d.ts +66 -0
- package/dist/main/windows/internal-devtools-window/index.js +160 -0
- package/dist/main/windows/main-window/create.d.ts +16 -0
- package/dist/main/windows/main-window/create.js +19 -11
- package/dist/main/windows/main-window/events.d.ts +1 -1
- package/dist/main/windows/main-window/events.js +26 -13
- package/dist/main/windows/main-window/index.d.ts +1 -1
- package/dist/main/windows/main-window/index.js +1 -1
- package/dist/main/windows/service-host-window/create.d.ts +1 -92
- package/dist/main/windows/service-host-window/create.js +1 -154
- package/dist/native-host/common/common.js +173 -53
- package/dist/native-host/container/pageFrame.css +1 -1
- package/dist/native-host/render/render.js +8278 -3659
- package/dist/native-host/service/service.js +2 -2
- package/dist/preload/index.d.ts +2 -0
- package/dist/preload/index.js +1 -0
- package/dist/preload/instrumentation/app-data.d.ts +2 -2
- package/dist/preload/instrumentation/app-data.js +1 -1
- package/dist/preload/instrumentation/wxml.js +1 -1
- package/dist/preload/runtime/bridge.d.ts +3 -3
- package/dist/preload/runtime/bridge.js +2 -2
- package/dist/preload/runtime/clipboard.d.ts +6 -0
- package/dist/preload/runtime/clipboard.js +12 -0
- package/dist/preload/runtime/host-dialog-advertiser.d.ts +22 -0
- package/dist/preload/runtime/host-dialog-advertiser.js +37 -0
- package/dist/preload/runtime/host-dialog-port.d.ts +44 -0
- package/dist/preload/runtime/host-dialog-port.js +53 -0
- package/dist/preload/runtime/host-dialog-runtime.d.ts +28 -0
- package/dist/preload/runtime/host-dialog-runtime.js +36 -0
- package/dist/preload/runtime/host-sidebar-advertiser.d.ts +19 -0
- package/dist/preload/runtime/host-sidebar-advertiser.js +35 -0
- package/dist/preload/runtime/host-sidebar-port.d.ts +44 -0
- package/dist/preload/runtime/host-sidebar-port.js +53 -0
- package/dist/preload/runtime/host-sidebar-runtime.d.ts +28 -0
- package/dist/preload/runtime/host-sidebar-runtime.js +36 -0
- package/dist/preload/runtime/host-slot-port-bridge.d.ts +18 -0
- package/dist/preload/runtime/host-slot-port-bridge.js +112 -0
- package/dist/preload/runtime/host-toolbar-advertiser.d.ts +5 -13
- package/dist/preload/runtime/host-toolbar-advertiser.js +18 -38
- package/dist/preload/runtime/host-toolbar-port.d.ts +9 -0
- package/dist/preload/runtime/host-toolbar-port.js +11 -95
- package/dist/preload/runtime/native-host.d.ts +14 -0
- package/dist/preload/runtime/native-host.js +5 -8
- package/dist/preload/runtime/node-bindings.d.ts +18 -0
- package/dist/preload/runtime/node-bindings.js +44 -0
- package/dist/preload/runtime/temp-files.js +9 -2
- package/dist/preload/runtime/wait-for-slot-root.d.ts +23 -0
- package/dist/preload/runtime/wait-for-slot-root.js +80 -0
- package/dist/preload/shared/api-compat.js +63 -41
- package/dist/preload/windows/host-dialog-runtime.cjs +360 -0
- package/dist/preload/windows/host-dialog-runtime.cjs.map +7 -0
- package/dist/preload/windows/host-dialog-runtime.d.ts +2 -0
- package/dist/preload/windows/host-dialog-runtime.js +13 -0
- package/dist/preload/windows/host-sidebar-runtime.cjs +361 -0
- package/dist/preload/windows/host-sidebar-runtime.cjs.map +7 -0
- package/dist/preload/windows/host-sidebar-runtime.d.ts +2 -0
- package/dist/preload/windows/host-sidebar-runtime.js +13 -0
- package/dist/preload/windows/host-toolbar-runtime.cjs +142 -52
- package/dist/preload/windows/host-toolbar-runtime.cjs.map +3 -3
- package/dist/preload/windows/main.cjs +4922 -1246
- package/dist/preload/windows/main.cjs.map +4 -4
- package/dist/preload/windows/main.css +428 -0
- package/dist/preload/windows/main.css.map +7 -0
- package/dist/preload/windows/simulator.cjs +376 -322
- package/dist/preload/windows/simulator.cjs.map +4 -4
- package/dist/preload/windows/simulator.js +376 -322
- package/dist/render-host/pageFrame.html +4 -4
- package/dist/render-host/preload.cjs +30 -0
- package/dist/render-host/render-inspect.js +184 -115
- package/dist/renderer/assets/button-CB2MWjHY.js +2 -0
- package/dist/renderer/assets/constants-CkoGPQTS.js +2 -0
- package/dist/renderer/assets/constants-zQZ2-y21.js +2 -0
- package/dist/renderer/assets/createLucideIcon-cZ9FlZZw.js +2 -0
- package/dist/renderer/assets/devicePicker-H2eIO4e1.js +2 -0
- package/dist/renderer/assets/dialog-pHzEA8Vx.js +46 -0
- package/dist/renderer/assets/dist-B5HADirS.js +2 -0
- package/dist/renderer/assets/dist-DIFlRMKe.js +2 -0
- package/dist/renderer/assets/hostSidebarDefault-DRWh6OCt.js +2 -0
- package/dist/renderer/assets/index-CEL_XFge.js +2 -0
- package/dist/renderer/assets/input-CAObw95L.js +2 -0
- package/dist/renderer/assets/ipc-channels-overlays-gIPUFnqc.js +2 -0
- package/dist/renderer/assets/jsx-runtime-DICEQH_0.css +1 -0
- package/dist/renderer/assets/jsx-runtime-DIw5wnYl.js +9 -0
- package/dist/renderer/assets/plus-BQ9u5EbL.js +2 -0
- package/dist/renderer/assets/popover-Cw7G2Ctp.js +2 -0
- package/dist/renderer/assets/presets-DMZOb9ay.js +2 -0
- package/dist/renderer/assets/project-api-YTOr_Yvo.js +2 -0
- package/dist/renderer/assets/projectCreateDialog-BmLqiYxn.js +2 -0
- package/dist/renderer/assets/search-BMvuYF48.js +2 -0
- package/dist/renderer/assets/select-nFP95TxM.js +2 -0
- package/dist/renderer/assets/settings-CnpVfSWt.js +2 -0
- package/dist/renderer/assets/settings-api-Ccsf-Nsj.js +2 -0
- package/dist/renderer/assets/settings-tab-bar-CAzrv32m.js +2 -0
- package/dist/renderer/assets/smartphone-Bb2GdIKy.js +2 -0
- package/dist/renderer/assets/tabs-CPKN3Mmq.js +2 -0
- package/dist/renderer/assets/tooltip-D6AxXRk5.js +2 -0
- package/dist/renderer/assets/types-Bh0hA7El.js +2 -0
- package/dist/renderer/assets/updateDialog-CwndJ0Bl.js +2 -0
- package/dist/renderer/assets/utils-sEB5OZEQ.js +2 -0
- package/dist/renderer/assets/view-api-B-2zPBR5.js +2 -0
- package/dist/renderer/assets/view-ids-BfaDVV5P.js +2 -0
- package/dist/renderer/assets/workbench-C0Jkdlps.js +5 -0
- package/dist/renderer/assets/workbenchSettings-YD0Ctbm_.js +8 -0
- package/dist/renderer/entries/device-picker/index.html +28 -0
- package/dist/renderer/entries/host-sidebar-default/index.html +22 -0
- package/dist/renderer/entries/main/index.html +16 -7
- package/dist/renderer/entries/popover/index.html +16 -6
- package/dist/renderer/entries/project-create-dialog/index.html +27 -0
- package/dist/renderer/entries/settings/index.html +10 -5
- package/dist/renderer/entries/tooltip/index.html +21 -0
- package/dist/renderer/entries/update-dialog/index.html +25 -0
- package/dist/renderer/entries/workbench/index.html +49 -0
- package/dist/renderer/entries/workbench-settings/index.html +12 -5
- package/dist/service-host/appdata-set-data.cjs +39 -0
- package/dist/service-host/host-env-update.cjs +23 -0
- package/dist/service-host/preload.cjs +54 -48
- package/dist/service-host/service-message-queue.cjs +71 -0
- package/dist/service-host/sync-impls/menu-button-geometry.js +16 -5
- package/dist/service-host/sync-impls/menu-button.js +5 -3
- package/dist/service-host/sync-impls/system-info.js +31 -9
- package/dist/shared/bridge-channels.d.ts +1 -416
- package/dist/shared/bridge-channels.js +1 -89
- package/dist/shared/compile-mode-state.d.ts +73 -0
- package/dist/shared/compile-mode-state.js +100 -0
- package/dist/shared/compile-modes.d.ts +152 -0
- package/dist/shared/compile-modes.js +237 -0
- package/dist/shared/constants.d.ts +22 -0
- package/dist/shared/constants.js +22 -0
- package/dist/shared/dmb-resource-url.d.ts +2 -0
- package/dist/shared/dmb-resource-url.js +2 -0
- package/dist/shared/ipc-channels-overlays.d.ts +162 -0
- package/dist/shared/ipc-channels-overlays.js +203 -0
- package/dist/shared/ipc-channels.d.ts +24 -154
- package/dist/shared/ipc-channels.js +48 -96
- package/dist/shared/ipc-schemas.d.ts +143 -54
- package/dist/shared/ipc-schemas.js +137 -45
- package/dist/shared/node-bindings.d.ts +2 -0
- package/dist/shared/node-bindings.js +2 -0
- package/dist/shared/project-window-types.d.ts +42 -0
- package/dist/shared/project-window-types.js +2 -0
- package/dist/shared/simulator-route.d.ts +8 -0
- package/dist/shared/simulator-route.js +15 -0
- package/dist/shared/simulator-ui.d.ts +61 -0
- package/dist/shared/simulator-ui.js +12 -0
- package/dist/shared/types.d.ts +126 -41
- package/dist/shared/view-ids.d.ts +10 -0
- package/dist/shared/view-ids.js +23 -0
- package/dist/simulator/assets/bridge-channels-B3JAmRfl.js +2 -0
- package/dist/simulator/assets/device-shell-ATEhHV2_.css +1 -0
- package/dist/simulator/assets/device-shell-DucLepkm.js +431 -0
- package/dist/simulator/assets/simulator-B4rbcOVt.js +10 -0
- package/dist/simulator/assets/simulator-mini-app-DFo7fhi5.js +2 -0
- package/dist/simulator/assets/simulator-ui-BupATgKo.css +1 -0
- package/dist/simulator/assets/simulator-ui-i3GCc7YJ.js +2 -0
- package/dist/simulator/simulator.html +4 -3
- package/dist/simulator/temp-files.d.ts +35 -0
- package/dist/simulator/temp-files.js +121 -0
- package/dist/simulator/types.d.ts +50 -0
- package/dist/simulator/types.js +2 -0
- package/dist/vscode-workbench/assets/__vite-browser-external-JIkWewFf.js +1 -0
- package/dist/vscode-workbench/assets/{dist-TpGpmMGi.js → dist-CXG-u1VB.js} +3 -3
- package/dist/vscode-workbench/assets/fs-core-worker-urls-DZ1nod84.js +1 -0
- package/dist/vscode-workbench/assets/fs-core.worker-Bnmpp6fo.js +1 -0
- package/dist/vscode-workbench/assets/fs-query.worker-cZ-7Fjch.js +2 -0
- package/dist/vscode-workbench/assets/{iconv-lite-umd-C9tiCAJa.js → iconv-lite-umd-Dxx9Qyb4.js} +1 -1
- package/dist/vscode-workbench/assets/{index-DJ1HyMZ7.js → index-6VJMsaWj.js} +475 -475
- package/dist/vscode-workbench/assets/{jschardet-DE1jV513.js → jschardet-Ba3D16vt.js} +1 -1
- package/dist/vscode-workbench/index.html +21 -1
- package/package.json +23 -13
- package/dist/main/services/views/destroy-child-view.d.ts +0 -9
- package/dist/main/services/views/destroy-child-view.js +0 -23
- package/dist/preload/instrumentation/wxml-extract.d.ts +0 -11
- package/dist/preload/instrumentation/wxml-extract.js +0 -382
- package/dist/preload/shared/sid-registry.d.ts +0 -11
- package/dist/preload/shared/sid-registry.js +0 -38
- package/dist/renderer/assets/constants-EAMiwL9_.js +0 -2
- package/dist/renderer/assets/index-BMqyDx71.js +0 -49
- package/dist/renderer/assets/input-CDAEwpBO.js +0 -2
- package/dist/renderer/assets/ipc-transport-B7eFOR68.css +0 -1
- package/dist/renderer/assets/ipc-transport-_G1k5V1p.js +0 -9
- package/dist/renderer/assets/popover-DEdjK14m.js +0 -2
- package/dist/renderer/assets/select-DpKPCh3y.js +0 -2
- package/dist/renderer/assets/settings-M5q2elUr.js +0 -2
- package/dist/renderer/assets/settings-api-CDlZoHiO.js +0 -2
- package/dist/renderer/assets/workbenchSettings-CT_H1WhV.js +0 -8
- package/dist/shared/appdata-accumulator.d.ts +0 -95
- package/dist/shared/appdata-accumulator.js +0 -218
- package/dist/shared/request-core.d.ts +0 -84
- package/dist/shared/request-core.js +0 -168
- package/dist/shared/simulator-api-metadata.d.ts +0 -26
- package/dist/shared/simulator-api-metadata.js +0 -59
- package/dist/shared/vpath.d.ts +0 -42
- package/dist/shared/vpath.js +0 -105
- package/dist/simulator/assets/bridge-channels-zhsumfky.js +0 -2
- package/dist/simulator/assets/device-shell-C-wcFq3Z.js +0 -2
- package/dist/simulator/assets/device-shell-CS1rqAQz.css +0 -1
- package/dist/simulator/assets/jsx-runtime-BDTY6fEq.js +0 -2
- package/dist/simulator/assets/simulator-DU3-fS3v.js +0 -10
- package/dist/simulator/assets/simulator-mini-app-DzfMfnVM.js +0 -2
- package/dist/simulator/device-shell/menu-button-geometry.js +0 -8
- package/dist/vscode-workbench/assets/__vite-browser-external-CXi6Kz9W.js +0 -1
|
@@ -1,249 +1,42 @@
|
|
|
1
|
-
import { WebContentsView } from 'electron';
|
|
2
|
-
import { handleWindowOpenExternal } from '../../windows/navigation-hardening.js';
|
|
3
1
|
import { HOST_TOOLBAR_RUNTIME_MARKER } from '../../../shared/constants.js';
|
|
4
2
|
import { VIEW_ID, VIEW_LAYER } from '../../../shared/view-ids.js';
|
|
5
3
|
import { acquireHostToolbarSessionRuntime, releaseHostToolbarSessionRuntime, } from './host-toolbar-session-runtime.js';
|
|
6
4
|
import { createHostToolbarPortChannel } from './host-toolbar-port-channel.js';
|
|
7
|
-
import {
|
|
5
|
+
import { createHostSlotView, deriveSlotControl } from './host-slot-view.js';
|
|
6
|
+
/**
|
|
7
|
+
* Toolbar-specific instantiation of `createHostSlotView` (see that module for
|
|
8
|
+
* the full lazy-create / port-channel / extent-mode contract). Kept as its own
|
|
9
|
+
* named wrapper — not inlined into `view-manager.ts` — to freeze the existing
|
|
10
|
+
* `HostToolbarControl`/`HostToolbarHeightMode` public surface independently of
|
|
11
|
+
* the generic slot's neutral naming.
|
|
12
|
+
*/
|
|
8
13
|
export function createHostToolbarView(ctx, reconciler, deps) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
let hostToolbarViewAdded = false;
|
|
12
|
-
// Whether THIS manager holds a reference on the shared defaultSession
|
|
13
|
-
// registration of the toolbar-runtime preload (see
|
|
14
|
-
// host-toolbar-session-runtime.ts). Acquired on first toolbar need,
|
|
15
|
-
// released exactly once in dispose — a manager that never used the
|
|
16
|
-
// toolbar must not decrement a ref it never took.
|
|
17
|
-
let hostToolbarRuntimeAcquired = false;
|
|
18
|
-
// Placeholder height authority: 'auto' = advertiser reports forward to the
|
|
19
|
-
// renderer; { fixed } = host-pinned, advertiser reports are dropped.
|
|
20
|
-
let hostToolbarHeightMode = 'auto';
|
|
21
|
-
// Last toolbar height NOTIFIED to the main-window renderer — the replay
|
|
22
|
-
// source behind `getHostToolbarHeight()`. Updated ONLY inside
|
|
23
|
-
// `notifyHostToolbarHeight` so the retained value can never diverge from
|
|
24
|
-
// what the renderer was told (an advertiser report dropped by a `{ fixed }`
|
|
25
|
-
// pin must not pollute it, and a setHeightMode validation reject leaves it
|
|
26
|
-
// untouched).
|
|
27
|
-
let hostToolbarLastHeight = 0;
|
|
28
|
-
// Gated narrow channel to the toolbar PAGE (per-load MessagePort handshake;
|
|
29
|
-
// see host-toolbar-port-channel.ts). Control-level registry — created with
|
|
30
|
-
// the manager so onMessage() works before any toolbar view exists.
|
|
31
|
-
const hostToolbarPort = createHostToolbarPortChannel({
|
|
32
|
-
isCurrent: (wc) => liveHostToolbarWebContents() === wc,
|
|
14
|
+
const port = createHostToolbarPortChannel({
|
|
15
|
+
isCurrent: (wc) => slot.getWebContentsId() === wc.id,
|
|
33
16
|
});
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (hostToolbarView && liveHostToolbarWebContents()) {
|
|
51
|
-
return hostToolbarView;
|
|
52
|
-
}
|
|
53
|
-
// Rebuilding after the host destroyed the underlying webContents: detach the
|
|
54
|
-
// dead view from the contentView and reset the added-flag so the new view
|
|
55
|
-
// gets re-mounted (otherwise the `hostToolbarViewAdded` guard would skip the
|
|
56
|
-
// addChildView and the toolbar would silently disappear).
|
|
57
|
-
if (hostToolbarView && hostToolbarViewAdded) {
|
|
58
|
-
try {
|
|
59
|
-
ctx.windows.mainWindow.contentView.removeChildView(hostToolbarView);
|
|
60
|
-
}
|
|
61
|
-
catch { /* already removed */ }
|
|
62
|
-
hostToolbarViewAdded = false;
|
|
63
|
-
}
|
|
64
|
-
// The instance is being replaced — forget its reconciled mount state so the
|
|
65
|
-
// rebuilt view is treated as a fresh attach (not skipped as already-attached).
|
|
66
|
-
reconciler.forgetActual(VIEW_ID.hostToolbar);
|
|
67
|
-
// The framework's height-advertiser runtime is SESSION-resident: register
|
|
68
|
-
// it on session.defaultSession (ref-counted across coexisting managers)
|
|
69
|
-
// BEFORE the view exists, so the very first load already runs it. The
|
|
70
|
-
// toolbar WCV stays on the defaultSession (no partition/session override)
|
|
71
|
-
// — moving it onto its own partition would silently detach it from this
|
|
72
|
-
// registration and height advertising would die with no error.
|
|
73
|
-
if (!hostToolbarRuntimeAcquired) {
|
|
74
|
-
acquireHostToolbarSessionRuntime();
|
|
75
|
-
hostToolbarRuntimeAcquired = true;
|
|
76
|
-
}
|
|
77
|
-
// `webPreferences.preload` is the HOST's alone (setPreloadPath); the
|
|
78
|
-
// built-in advertiser no longer rides it (it would execute twice — the
|
|
79
|
-
// session copy + the webPreferences copy). The additionalArguments marker
|
|
80
|
-
// is what the session runtime's guard keys on to activate here and stay a
|
|
81
|
-
// zero-footprint no-op in every other defaultSession renderer.
|
|
82
|
-
const webPreferences = {
|
|
83
|
-
nodeIntegration: false,
|
|
84
|
-
contextIsolation: true,
|
|
85
|
-
sandbox: false,
|
|
86
|
-
additionalArguments: [HOST_TOOLBAR_RUNTIME_MARKER],
|
|
87
|
-
};
|
|
88
|
-
if (hostToolbarPreloadOverride !== null) {
|
|
89
|
-
webPreferences.preload = hostToolbarPreloadOverride;
|
|
90
|
-
}
|
|
91
|
-
const view = new WebContentsView({ webPreferences });
|
|
92
|
-
hostToolbarView = view;
|
|
93
|
-
// Hook the per-load MessagePort handshake (did-finish-load) + dead-port
|
|
94
|
-
// cleanup (destroyed) on the fresh wc. AFTER the assignment above so the
|
|
95
|
-
// channel's isCurrent guard sees this wc as the live one.
|
|
96
|
-
hostToolbarPort.attach(view.webContents);
|
|
97
|
-
// Paint the surface a neutral color so growing the reserved strip never
|
|
98
|
-
// flashes white before the host content paints (mirrors the native
|
|
99
|
-
// simulator's setBackgroundColor anti-flash).
|
|
100
|
-
try {
|
|
101
|
-
view.setBackgroundColor('#121212');
|
|
102
|
-
}
|
|
103
|
-
catch { /* stub may lack it */ }
|
|
104
|
-
// The host may load arbitrary URLs; route popups + cross-origin in-place
|
|
105
|
-
// navigation to the OS browser (mirror the native simulator hardening).
|
|
106
|
-
try {
|
|
107
|
-
view.webContents.setWindowOpenHandler(({ url }) => handleWindowOpenExternal(url));
|
|
108
|
-
}
|
|
109
|
-
catch { /* stub may lack it */ }
|
|
110
|
-
return view;
|
|
111
|
-
}
|
|
112
|
-
// Single funnel for the height notify: retain-then-push, so the retained
|
|
113
|
-
// value is exactly the last value the renderer was told. Every height
|
|
114
|
-
// notify site MUST go through here — the renderer pulls the retained value
|
|
115
|
-
// on project-view mount to replay a push it missed (the toolbar's
|
|
116
|
-
// size-advertiser deduplicates and never re-reports).
|
|
117
|
-
function notifyHostToolbarHeight(height) {
|
|
118
|
-
hostToolbarLastHeight = height;
|
|
119
|
-
ctx.notify.hostToolbarHeightChanged(height);
|
|
120
|
-
deps.reapplyPresentOverlays();
|
|
121
|
-
}
|
|
122
|
-
function setHostToolbarHeight(extent) {
|
|
123
|
-
// While the host pins a fixed height, drop advertiser reports entirely —
|
|
124
|
-
// the session-resident advertiser is always installed, so forwarding its
|
|
125
|
-
// reports would make the strip oscillate between the pinned and measured
|
|
126
|
-
// heights on every content resize. Dropped reports must not touch the
|
|
127
|
-
// retained value either: retention records what was NOTIFIED, not what
|
|
128
|
-
// was reported.
|
|
129
|
-
if (hostToolbarHeightMode !== 'auto')
|
|
130
|
-
return;
|
|
131
|
-
// Push the reserved height back to the main-window renderer so its
|
|
132
|
-
// placeholder div resizes (closing the dynamic-height loop). The notified
|
|
133
|
-
// height IS retained in main (`getHostToolbarHeight`) so a renderer that
|
|
134
|
-
// mounts later can pull/replay it; the renderer placeholder remains the
|
|
135
|
-
// geometry authority — the forward anchor re-reports bounds from it.
|
|
136
|
-
notifyHostToolbarHeight(extent);
|
|
137
|
-
}
|
|
138
|
-
function hideHostToolbar() {
|
|
139
|
-
reconciler.setBaseDesired(VIEW_ID.hostToolbar, {
|
|
140
|
-
viewId: VIEW_ID.hostToolbar,
|
|
141
|
-
placement: { visible: false },
|
|
142
|
-
layer: VIEW_LAYER.hostToolbar,
|
|
143
|
-
});
|
|
144
|
-
reconciler.reconcileNow();
|
|
145
|
-
// Collapse the renderer placeholder to 0 too. Otherwise its anchor keeps a
|
|
146
|
-
// non-zero reserved height and re-publishes bounds on the next window
|
|
147
|
-
// resize, silently re-adding the view we just hid (unstable hide). Zeroing
|
|
148
|
-
// the height flips the anchor to `present:false` so it stops re-publishing.
|
|
149
|
-
// Through the funnel so the retained value follows to 0 — a renderer
|
|
150
|
-
// mounting after the hide must replay 0, not the stale pre-hide height.
|
|
151
|
-
notifyHostToolbarHeight(0);
|
|
152
|
-
}
|
|
153
|
-
const control = {
|
|
154
|
-
async loadURL(url) {
|
|
155
|
-
const view = ensureHostToolbarView();
|
|
156
|
-
// Invalidate SYNCHRONOUSLY at initiation, before the load is issued:
|
|
157
|
-
// the current document is about to be replaced, so a same-tick send()
|
|
158
|
-
// must report false instead of confirming delivery into it. The channel
|
|
159
|
-
// recovers on the new document's did-finish-load handshake. (Cannot
|
|
160
|
-
// rely on did-start-navigation here — that only covers page-initiated
|
|
161
|
-
// navigations once the load is actually under way.)
|
|
162
|
-
hostToolbarPort.invalidate();
|
|
163
|
-
await view.webContents.loadURL(url);
|
|
164
|
-
},
|
|
165
|
-
async loadFile(filePath) {
|
|
166
|
-
const view = ensureHostToolbarView();
|
|
167
|
-
// Same initiation-invalidates contract as loadURL above.
|
|
168
|
-
hostToolbarPort.invalidate();
|
|
169
|
-
await view.webContents.loadFile(filePath);
|
|
170
|
-
},
|
|
171
|
-
get webContents() {
|
|
172
|
-
return liveHostToolbarWebContents();
|
|
173
|
-
},
|
|
174
|
-
hide() {
|
|
175
|
-
hideHostToolbar();
|
|
176
|
-
},
|
|
177
|
-
setPreloadPath(path) {
|
|
178
|
-
// The HOST's own webPreferences.preload, applied when the view is next
|
|
179
|
-
// (re)created. `null` = no host preload. The framework advertiser is
|
|
180
|
-
// session-resident and unaffected either way (see ensureHostToolbarView).
|
|
181
|
-
hostToolbarPreloadOverride = path;
|
|
182
|
-
},
|
|
183
|
-
setHeightMode(mode) {
|
|
184
|
-
// Validate BEFORE touching any state: a poisoned `{ fixed }` (NaN /
|
|
185
|
-
// ±Infinity / negative) must neither reach the renderer placeholder
|
|
186
|
-
// (`height: NaNpx` corrupts the strip with no error anywhere) nor
|
|
187
|
-
// clobber the standing mode — fail-closed, not fail-corrupt.
|
|
188
|
-
if (mode !== 'auto' && !(Number.isFinite(mode.fixed) && mode.fixed >= 0)) {
|
|
189
|
-
throw new TypeError(`hostToolbar.setHeightMode: fixed height must be a finite, non-negative number (got ${mode.fixed})`);
|
|
190
|
-
}
|
|
191
|
-
hostToolbarHeightMode = mode;
|
|
192
|
-
if (mode !== 'auto') {
|
|
193
|
-
// Pin immediately: a preload-less/static toolbar never advertises, so
|
|
194
|
-
// waiting for the next report would leave the strip at height 0.
|
|
195
|
-
notifyHostToolbarHeight(mode.fixed);
|
|
196
|
-
}
|
|
197
|
-
// Switching back to 'auto' deliberately does NOT synthesize a notify —
|
|
198
|
-
// replaying a stale cached height would flash the old size; the NEXT
|
|
199
|
-
// advertiser report drives the placeholder again. The RETAINED value
|
|
200
|
-
// survives the switch though: a freshly-mounting renderer still needs
|
|
201
|
-
// the pinned height until that next report lands.
|
|
202
|
-
},
|
|
203
|
-
onMessage(channel, handler) {
|
|
204
|
-
return hostToolbarPort.onMessage(channel, handler);
|
|
205
|
-
},
|
|
206
|
-
onReady(handler) {
|
|
207
|
-
return hostToolbarPort.onReady(handler);
|
|
208
|
-
},
|
|
209
|
-
send(channel, payload) {
|
|
210
|
-
return hostToolbarPort.send(channel, payload);
|
|
211
|
-
},
|
|
212
|
-
};
|
|
213
|
-
reconciler.registerView(VIEW_ID.hostToolbar, {
|
|
214
|
-
getView: () => hostToolbarView,
|
|
215
|
-
ensureView: () => ensureHostToolbarView(),
|
|
216
|
-
setAdded: (added) => { hostToolbarViewAdded = added; },
|
|
217
|
-
ensureLazy: (desired) => {
|
|
218
|
-
if (desired?.placement.visible && !liveHostToolbarWebContents())
|
|
219
|
-
ensureHostToolbarView();
|
|
220
|
-
},
|
|
17
|
+
const slot = createHostSlotView(reconciler, {
|
|
18
|
+
viewId: VIEW_ID.hostToolbar,
|
|
19
|
+
layer: VIEW_LAYER.hostToolbar,
|
|
20
|
+
marker: HOST_TOOLBAR_RUNTIME_MARKER,
|
|
21
|
+
sessionRuntime: {
|
|
22
|
+
acquire: acquireHostToolbarSessionRuntime,
|
|
23
|
+
release: releaseHostToolbarSessionRuntime,
|
|
24
|
+
},
|
|
25
|
+
portChannel: port,
|
|
26
|
+
setExtentModeErrorLabel: 'hostToolbar.setHeightMode',
|
|
27
|
+
}, {
|
|
28
|
+
onExtentChanged: (height) => ctx.notify.hostToolbarHeightChanged(height),
|
|
29
|
+
reapplyPresentOverlays: () => deps.reapplyPresentOverlays(),
|
|
30
|
+
});
|
|
31
|
+
const control = deriveSlotControl(slot.control, {
|
|
32
|
+
setHeightMode: (mode) => slot.control.setExtentMode(mode),
|
|
221
33
|
});
|
|
222
|
-
function dispose() {
|
|
223
|
-
// Narrow channel first: close the live MessagePort + sweep the onMessage
|
|
224
|
-
// registry, so a send() racing teardown reports false instead of posting
|
|
225
|
-
// into a wc that is about to be closed.
|
|
226
|
-
hostToolbarPort.dispose();
|
|
227
|
-
// Host-controllable toolbar view: removed from the contentView + its
|
|
228
|
-
// WebContents closed (the host's loaded content is torn down on app exit).
|
|
229
|
-
destroyChildView(ctx.windows.mainWindow, hostToolbarView);
|
|
230
|
-
hostToolbarView = null;
|
|
231
|
-
hostToolbarViewAdded = false;
|
|
232
|
-
// Release this manager's reference on the shared defaultSession
|
|
233
|
-
// toolbar-runtime registration (only if it ever acquired one — a manager
|
|
234
|
-
// that never used the toolbar must not drive the shared count to zero).
|
|
235
|
-
// The LAST release unregisters; other coexisting managers keep theirs.
|
|
236
|
-
if (hostToolbarRuntimeAcquired) {
|
|
237
|
-
releaseHostToolbarSessionRuntime();
|
|
238
|
-
hostToolbarRuntimeAcquired = false;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
34
|
return {
|
|
242
35
|
control,
|
|
243
|
-
setHostToolbarHeight,
|
|
244
|
-
getHostToolbarHeight: () =>
|
|
245
|
-
getHostToolbarWebContentsId: () =>
|
|
246
|
-
dispose,
|
|
36
|
+
setHostToolbarHeight: (extent) => slot.setExtent(extent),
|
|
37
|
+
getHostToolbarHeight: () => slot.getExtent(),
|
|
38
|
+
getHostToolbarWebContentsId: () => slot.getWebContentsId(),
|
|
39
|
+
dispose: () => slot.dispose(),
|
|
247
40
|
};
|
|
248
41
|
}
|
|
249
42
|
//# sourceMappingURL=host-toolbar-view.js.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { WebContents } from 'electron';
|
|
2
|
+
import { WebContentsView } from 'electron';
|
|
3
|
+
import type { PlacementReconciler } from './placement-reconciler.js';
|
|
4
|
+
import type { HostSlotPortChannel } from './host-slot-port-channel.js';
|
|
5
|
+
export interface ManagedWebContentsViewOptions {
|
|
6
|
+
reconciler: PlacementReconciler;
|
|
7
|
+
viewId: string;
|
|
8
|
+
/** `--dimina-host-*` marker passed as `additionalArguments`, self-guards the session-resident advertiser preload. */
|
|
9
|
+
marker: string;
|
|
10
|
+
sessionRuntime: {
|
|
11
|
+
acquire(): void;
|
|
12
|
+
release(): void;
|
|
13
|
+
};
|
|
14
|
+
/** The per-load handshake channel; shares this view's lazy-create/liveness/dispose lifecycle. */
|
|
15
|
+
port: HostSlotPortChannel;
|
|
16
|
+
/**
|
|
17
|
+
* Fires after a crashed/failed view has been torn down (see `ensureView`'s
|
|
18
|
+
* `render-process-gone`/`did-fail-load` handling below). The base slots
|
|
19
|
+
* (host-toolbar/host-sidebar) don't need this — their `ensureLazy` already
|
|
20
|
+
* rebuilds a fresh view on the next reconcile pass once `liveWebContents()`
|
|
21
|
+
* correctly reports the crash. host-dialog does: its on-demand placement
|
|
22
|
+
* (`visible` flag, `overlayDesired`) isn't reconciler-driven the same way,
|
|
23
|
+
* so without this a stale `visible: true` would resurrect a blank,
|
|
24
|
+
* content-less modal on the next reposition (e.g. a window resize).
|
|
25
|
+
*/
|
|
26
|
+
onBroken?(): void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Shared lazy-create / liveness / load / teardown lifecycle for the
|
|
30
|
+
* host-controllable WebContentsViews (host-toolbar, host-sidebar,
|
|
31
|
+
* host-dialog): a single `WebContentsView` recreated on demand when the
|
|
32
|
+
* previous one dies, backed by a ref-counted session-runtime registration and
|
|
33
|
+
* the per-load port-channel attach. Placement (persistent strip vs by-demand
|
|
34
|
+
* centered overlay) is layered on top by the caller — this module only owns
|
|
35
|
+
* "is there a live view, and (re)create/load/tear it down when needed."
|
|
36
|
+
*/
|
|
37
|
+
export interface ManagedWebContentsView {
|
|
38
|
+
loadURL(url: string): Promise<void>;
|
|
39
|
+
loadFile(filePath: string): Promise<void>;
|
|
40
|
+
liveWebContents(): WebContents | null;
|
|
41
|
+
/** Raw view accessor for `reconciler.registerView`'s `getView` slot (may be non-null with a destroyed webContents). */
|
|
42
|
+
getView(): WebContentsView | null;
|
|
43
|
+
setPreloadPath(path: string | null): void;
|
|
44
|
+
ensureView(): WebContentsView;
|
|
45
|
+
dispose(): void;
|
|
46
|
+
}
|
|
47
|
+
export declare function createManagedWebContentsView(opts: ManagedWebContentsViewOptions): ManagedWebContentsView;
|
|
48
|
+
//# sourceMappingURL=managed-web-contents-view.d.ts.map
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { WebContentsView } from 'electron';
|
|
2
|
+
import { handleWindowOpenExternal } from '../../windows/navigation-hardening.js';
|
|
3
|
+
export function createManagedWebContentsView(opts) {
|
|
4
|
+
let view = null;
|
|
5
|
+
let preloadOverride = null;
|
|
6
|
+
let runtimeAcquired = false;
|
|
7
|
+
/** The channel attachment for the CURRENT wc; released when that wc is replaced or destroyed. */
|
|
8
|
+
let attachment = null;
|
|
9
|
+
/**
|
|
10
|
+
* Hand the channel back the wc this manager is done with. This manager owns
|
|
11
|
+
* the wc's whole life, so it is the only thing that knows the wc is gone;
|
|
12
|
+
* without this the channel would keep listeners on a webContents nobody can
|
|
13
|
+
* reach any more.
|
|
14
|
+
*/
|
|
15
|
+
function releaseAttachment() {
|
|
16
|
+
attachment?.dispose();
|
|
17
|
+
attachment = null;
|
|
18
|
+
}
|
|
19
|
+
function liveWebContents() {
|
|
20
|
+
const wc = view?.webContents;
|
|
21
|
+
if (!wc || wc.isDestroyed())
|
|
22
|
+
return null;
|
|
23
|
+
return wc;
|
|
24
|
+
}
|
|
25
|
+
// `liveWebContents()`'s `!wc.isDestroyed()` alone cannot tell "alive" from
|
|
26
|
+
// "alive but broken" — a crashed renderer process or a failed main-frame
|
|
27
|
+
// load leaves `webContents` non-destroyed but blank/unresponsive, so
|
|
28
|
+
// without this the same dead view (still fielding clicks if it's an
|
|
29
|
+
// on-screen slot) would be handed back to every future `ensureView()`
|
|
30
|
+
// forever, and the host's own `webContents` getter would keep reporting it
|
|
31
|
+
// as live. Guarded by `view !== current` so a listener from an already-
|
|
32
|
+
// superseded instance can't tear down the CURRENT one.
|
|
33
|
+
function teardown(current, detail) {
|
|
34
|
+
if (view !== current)
|
|
35
|
+
return;
|
|
36
|
+
console.error(`[${opts.viewId}] ${detail} — destroying so the next ensureView() rebuilds`);
|
|
37
|
+
releaseAttachment();
|
|
38
|
+
view = null;
|
|
39
|
+
opts.reconciler.destroyView(opts.viewId, current);
|
|
40
|
+
opts.onBroken?.();
|
|
41
|
+
}
|
|
42
|
+
function ensureView() {
|
|
43
|
+
if (view && liveWebContents()) {
|
|
44
|
+
return view;
|
|
45
|
+
}
|
|
46
|
+
// The outgoing wc (if any) is about to be destroyed, so its attachment
|
|
47
|
+
// goes first — a wc this manager no longer owns must not keep the channel
|
|
48
|
+
// wired to it.
|
|
49
|
+
releaseAttachment();
|
|
50
|
+
if (view) {
|
|
51
|
+
opts.reconciler.destroyView(opts.viewId, view);
|
|
52
|
+
}
|
|
53
|
+
if (!runtimeAcquired) {
|
|
54
|
+
opts.sessionRuntime.acquire();
|
|
55
|
+
runtimeAcquired = true;
|
|
56
|
+
}
|
|
57
|
+
const webPreferences = {
|
|
58
|
+
nodeIntegration: false,
|
|
59
|
+
contextIsolation: true,
|
|
60
|
+
sandbox: false,
|
|
61
|
+
additionalArguments: [opts.marker],
|
|
62
|
+
};
|
|
63
|
+
if (preloadOverride !== null) {
|
|
64
|
+
webPreferences.preload = preloadOverride;
|
|
65
|
+
}
|
|
66
|
+
const next = new WebContentsView({ webPreferences });
|
|
67
|
+
view = next;
|
|
68
|
+
attachment = opts.port.attach(next.webContents);
|
|
69
|
+
try {
|
|
70
|
+
next.setBackgroundColor('#121212');
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
/* stub may lack it */
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
next.webContents.setWindowOpenHandler(({ url }) => handleWindowOpenExternal(url));
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
/* stub may lack it */
|
|
80
|
+
}
|
|
81
|
+
next.webContents.on('did-fail-load', (_event, errorCode, _errorDescription, _validatedURL, isMainFrame) => {
|
|
82
|
+
// -3 is ERR_ABORTED, which fires on every routine superseded navigation
|
|
83
|
+
// (e.g. a fresh loadURL/loadFile cancelling this one) — not a real failure.
|
|
84
|
+
if (!isMainFrame || errorCode === -3)
|
|
85
|
+
return;
|
|
86
|
+
teardown(next, `did-fail-load (code ${errorCode})`);
|
|
87
|
+
});
|
|
88
|
+
next.webContents.on('render-process-gone', (_event, details) => {
|
|
89
|
+
teardown(next, `render-process-gone (${details.reason})`);
|
|
90
|
+
});
|
|
91
|
+
return next;
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
async loadURL(url) {
|
|
95
|
+
const v = ensureView();
|
|
96
|
+
// Invalidate SYNCHRONOUSLY at initiation, before the load is issued:
|
|
97
|
+
// the current document is about to be replaced, so a same-tick send()
|
|
98
|
+
// must report false instead of confirming delivery into it. The channel
|
|
99
|
+
// recovers on the new document's did-finish-load handshake. (Cannot
|
|
100
|
+
// rely on did-start-navigation here — that only covers page-initiated
|
|
101
|
+
// navigations once the load is actually under way.)
|
|
102
|
+
opts.port.invalidate();
|
|
103
|
+
await v.webContents.loadURL(url);
|
|
104
|
+
},
|
|
105
|
+
async loadFile(filePath) {
|
|
106
|
+
const v = ensureView();
|
|
107
|
+
// Same initiation-invalidates contract as loadURL above.
|
|
108
|
+
opts.port.invalidate();
|
|
109
|
+
await v.webContents.loadFile(filePath);
|
|
110
|
+
},
|
|
111
|
+
liveWebContents,
|
|
112
|
+
getView: () => view,
|
|
113
|
+
setPreloadPath(path) {
|
|
114
|
+
// The HOST's own webPreferences.preload, applied when the view is next
|
|
115
|
+
// (re)created. `null` = no host preload. The framework advertiser is
|
|
116
|
+
// session-resident and unaffected either way (see ensureView).
|
|
117
|
+
preloadOverride = path;
|
|
118
|
+
},
|
|
119
|
+
ensureView,
|
|
120
|
+
dispose() {
|
|
121
|
+
// Narrow channel first: close the live MessagePort + sweep the onMessage
|
|
122
|
+
// registry, so a send() racing teardown reports false instead of posting
|
|
123
|
+
// into a wc that is about to be closed.
|
|
124
|
+
opts.port.dispose();
|
|
125
|
+
// Then hand back the wc itself, so no listener rests on a webContents
|
|
126
|
+
// this manager is about to close.
|
|
127
|
+
releaseAttachment();
|
|
128
|
+
// Host-controllable slot view: removed from the contentView + its
|
|
129
|
+
// WebContents closed (the host's loaded content is torn down on app exit).
|
|
130
|
+
opts.reconciler.destroyView(opts.viewId, view);
|
|
131
|
+
view = null;
|
|
132
|
+
// Release this manager's reference on the shared defaultSession
|
|
133
|
+
// slot-runtime registration (only if it ever acquired one — a manager
|
|
134
|
+
// that never used the slot must not drive the shared count to zero).
|
|
135
|
+
// The LAST release unregisters; other coexisting managers keep theirs.
|
|
136
|
+
if (runtimeAcquired) {
|
|
137
|
+
opts.sessionRuntime.release();
|
|
138
|
+
runtimeAcquired = false;
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=managed-web-contents-view.js.map
|
|
@@ -1,90 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Per-project session partition for the native-host miniapp runtime (P0 debt).
|
|
3
|
-
*
|
|
4
|
-
* Historically every project's miniapp webContents — the simulator content
|
|
5
|
-
* WebContentsView, its nested render-host `<webview>` guests, AND the
|
|
6
|
-
* service-host window — shared ONE hard-coded `persist:simulator` Electron
|
|
7
|
-
* session. Cookies / localStorage / cache / IndexedDB written by project A were
|
|
8
|
-
* visible to (and clobbered by) project B; two projects open at once cross-
|
|
9
|
-
* contaminate and "clear storage" on one nukes the other.
|
|
10
|
-
*
|
|
11
|
-
* The fix derives a STABLE per-project partition from the project identity:
|
|
12
|
-
* the miniapp `appId` (which flows in via the simulator URL `?appId=` and the
|
|
13
|
-
* spawn path's `appId`) PLUS the project path. appId alone is insufficient —
|
|
14
|
-
* it comes from the project manifest, so two DIFFERENT project paths can declare
|
|
15
|
-
* the SAME appId and would otherwise share a partition; folding the path in
|
|
16
|
-
* isolates them. Same project (same appId + path) → same partition (storage
|
|
17
|
-
* survives a relaunch); different projects → different partitions (no cross-
|
|
18
|
-
* contamination). The shape mirrors the IDE state of the art (WeChat's static
|
|
19
|
-
* partition, ByteDance's `persist:miniapp-<id>` dynamic partition).
|
|
20
|
-
*
|
|
21
|
-
* The protocol handlers (`difile://`, `dmb-resource`) and webRequest policies
|
|
22
|
-
* (referer / CORS) that the simulator runtime needs were installed once on the
|
|
23
|
-
* single `persist:simulator` session. With per-project partitions those have to
|
|
24
|
-
* be (re)applied to EACH project session the first time it is used. The setup
|
|
25
|
-
* sites register a partition-agnostic configurator here; `configureMiniappSession`
|
|
26
|
-
* runs every registered configurator exactly once per partition.
|
|
27
|
-
*
|
|
28
|
-
* Partition CLEANUP (reclaiming on-disk `persist:` data) is intentionally NOT
|
|
29
|
-
* done here — leaving the data on disk is the whole point of a `persist:`
|
|
30
|
-
* partition (cache/storage survives a relaunch). That is a separate concern.
|
|
31
|
-
*
|
|
32
|
-
* MIGRATION (intentional one-time reset): folding the project path into the key
|
|
33
|
-
* means a project that previously ran on the appId-only `persist:miniapp-<appId>`
|
|
34
|
-
* now runs on `persist:miniapp-<appId>-p<hash>` and starts with empty
|
|
35
|
-
* cookies/localStorage/cache. Old data is NOT migrated — a best-effort copy
|
|
36
|
-
* could carry already-cross-contaminated state into the newly isolated space,
|
|
37
|
-
* which defeats the isolation. The reset is accepted as a one-time cost.
|
|
38
|
-
*/
|
|
39
|
-
import type { Session } from 'electron';
|
|
40
|
-
/** The legacy single-session partition. Still used by the pre-warm pool (which
|
|
41
|
-
* is intentionally NOT isolation-aware — see `serviceHostSpec`) and as the
|
|
42
|
-
* fallback when a project key cannot be derived. */
|
|
43
|
-
export declare const SHARED_MINIAPP_PARTITION = "persist:simulator";
|
|
44
|
-
/**
|
|
45
|
-
* Derive a stable, filesystem-safe partition key from a project `appId`.
|
|
46
|
-
*
|
|
47
|
-
* `appId` is the project identity (e.g. a `wxapp…` id). We pass through the
|
|
48
|
-
* characters Electron is happy to put in a session partition / on-disk folder
|
|
49
|
-
* name (`[A-Za-z0-9_-]`) verbatim so the common case is human-legible, and fold
|
|
50
|
-
* anything else into a short deterministic hash suffix so two appIds that differ
|
|
51
|
-
* only in stripped characters never collide. The same `appId` always yields the
|
|
52
|
-
* same key (so storage survives a relaunch); different `appId`s yield different
|
|
53
|
-
* keys.
|
|
54
|
-
*/
|
|
55
|
-
export declare function miniappPartitionKey(appId: string, projectPath?: string | null): string;
|
|
56
|
-
/**
|
|
57
|
-
* The Electron session partition for a project. Returns the SHARED partition
|
|
58
|
-
* when `appId` is empty/unknown (so the runtime still has a session to load on,
|
|
59
|
-
* matching the legacy behavior) and a `persist:miniapp-<key>` partition
|
|
60
|
-
* otherwise.
|
|
61
|
-
*/
|
|
62
|
-
export declare function miniappPartition(appId: string | null | undefined, projectPath?: string | null): string;
|
|
63
|
-
type SessionConfigurator = (sess: Session, partition: string) => void;
|
|
64
|
-
/**
|
|
65
|
-
* Register a configurator that runs against every miniapp partition session.
|
|
66
|
-
* Already-configured partitions are (re)configured immediately so registration
|
|
67
|
-
* order does not matter. Returns a disposer that unregisters the configurator
|
|
68
|
-
* (it does not undo work already applied to live sessions).
|
|
69
|
-
*/
|
|
70
|
-
export declare function registerMiniappSessionConfigurator(fn: SessionConfigurator): () => void;
|
|
71
|
-
/**
|
|
72
|
-
* Ensure a partition's session has every registered configurator applied. Safe
|
|
73
|
-
* to call repeatedly per partition (idempotent — each partition is configured
|
|
74
|
-
* once). Call this before loading project content on `partition`.
|
|
75
|
-
*
|
|
76
|
-
* Returns `null` when there is nothing to configure (no configurator registered)
|
|
77
|
-
* so the partition derivation stays independent of any live Electron session —
|
|
78
|
-
* the partition is a constructor-time fact, not a side effect of touching the
|
|
79
|
-
* session API. Setup sites register configurators at app boot; in unit tests
|
|
80
|
-
* that mock `electron` without a `session` export this short-circuits cleanly.
|
|
81
|
-
*/
|
|
82
|
-
export declare function configureMiniappSession(partition: string): Session | null;
|
|
83
|
-
/**
|
|
84
|
-
* Test-only: drop the configurator + configured-partition bookkeeping so each
|
|
85
|
-
* test starts from a clean slate. (Module-level state otherwise leaks across
|
|
86
|
-
* unit tests that mock `electron`.)
|
|
87
|
-
*/
|
|
88
|
-
export declare function __resetMiniappSessionConfigForTests(): void;
|
|
89
|
-
export {};
|
|
1
|
+
export * from '@dimina-kit/electron-runtime/main/miniapp-partition';
|
|
90
2
|
//# sourceMappingURL=miniapp-partition.d.ts.map
|