@dimina-kit/devtools 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,16 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createCompileModeManager, openCompileModeStoreAfterCompile } from './workspace-compile-modes.js';
|
|
2
|
+
import { rejectInvalidAppId, validateProjectDirSafe } from './open-project-guards.js';
|
|
2
3
|
import * as repo from '../projects/project-repository.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
4
|
+
import { reportRebuildStatus } from './rebuild-status.js';
|
|
5
|
+
import { applyRefererForSession, clearRefererForSession } from './workspace-referer.js';
|
|
5
6
|
import { loadWorkbenchSettings } from '../settings/index.js';
|
|
6
7
|
import { createOpLock } from './op-lock.js';
|
|
7
|
-
|
|
8
|
-
* Runtime guard for the adapter-return boundary: `session.appInfo` must carry a
|
|
9
|
-
* NON-EMPTY string `appId` (the renderer scopes IPC by it; the bridge's
|
|
10
|
-
* handleSpawn also rejects empty appIds, so accepting `''` would desync layers).
|
|
11
|
-
* Loose: extra fields pass through — only the contract-critical `appId` is enforced.
|
|
12
|
-
*/
|
|
13
|
-
const SessionAppInfoSchema = z.looseObject({ appId: z.string().min(1) });
|
|
8
|
+
import { createThumbnailOps } from './workspace-thumbnails.js';
|
|
14
9
|
/** Build a workspace service bound to the given workbench context. */
|
|
15
10
|
export function createWorkspaceService(ctx) {
|
|
16
11
|
let currentSession = null;
|
|
@@ -75,7 +70,7 @@ export function createWorkspaceService(ctx) {
|
|
|
75
70
|
try {
|
|
76
71
|
if (!opLock.isOwner(mySeq))
|
|
77
72
|
return true;
|
|
78
|
-
|
|
73
|
+
clearRefererForSession(currentSession, currentProjectPath);
|
|
79
74
|
// Switching projects tears down the embedded workbench editor (mirrors one
|
|
80
75
|
// project's disk; saves would else hit the wrong project) AND the native
|
|
81
76
|
// simulator (its 'destroyed' hook owns the bridge session). Back-to-list
|
|
@@ -87,6 +82,8 @@ export function createWorkspaceService(ctx) {
|
|
|
87
82
|
// Invalidate the outgoing onLog generation before teardown so the dying
|
|
88
83
|
// worker's buffered lines can't pollute the incoming compile timeline.
|
|
89
84
|
logGeneration++;
|
|
85
|
+
// Dies with the outgoing session — no-op when none is open.
|
|
86
|
+
compileModes.disposeCurrent();
|
|
90
87
|
await disposeSession();
|
|
91
88
|
currentProjectPath = '';
|
|
92
89
|
lastClosedProjectPath = '';
|
|
@@ -97,17 +94,22 @@ export function createWorkspaceService(ctx) {
|
|
|
97
94
|
}
|
|
98
95
|
}
|
|
99
96
|
/**
|
|
100
|
-
* openProject critical section 2 — commit the new session
|
|
101
|
-
*
|
|
102
|
-
*
|
|
97
|
+
* openProject critical section 2 — commit the new session (and its
|
|
98
|
+
* compile-mode store handle) under the lock, only if still the latest
|
|
99
|
+
* request. Returns false when superseded (caller discards the
|
|
100
|
+
* freshly-opened session and store instead of clobbering the newer
|
|
101
|
+
* request's). `compileModes.adopt` must only run here, alongside
|
|
102
|
+
* `currentSession`/`currentProjectPath`, so the "current store" and
|
|
103
|
+
* "current session" always switch together.
|
|
103
104
|
*/
|
|
104
|
-
async function runOpenCommit(mySeq, session, projectPath) {
|
|
105
|
+
async function runOpenCommit(mySeq, session, projectPath, store) {
|
|
105
106
|
const release = await opLock.acquire();
|
|
106
107
|
try {
|
|
107
108
|
if (!opLock.isOwner(mySeq))
|
|
108
109
|
return false;
|
|
109
110
|
currentSession = session;
|
|
110
111
|
currentProjectPath = projectPath;
|
|
112
|
+
compileModes.adopt(store);
|
|
111
113
|
return true;
|
|
112
114
|
}
|
|
113
115
|
finally {
|
|
@@ -120,21 +122,16 @@ export function createWorkspaceService(ctx) {
|
|
|
120
122
|
* a superseded session's buffered lines.
|
|
121
123
|
*/
|
|
122
124
|
async function runCompile(projectPath, sessionGeneration) {
|
|
123
|
-
const { compile } = loadWorkbenchSettings();
|
|
125
|
+
const { compile, preview } = loadWorkbenchSettings();
|
|
124
126
|
try {
|
|
125
127
|
const session = await ctx.adapter.openProject({
|
|
126
128
|
projectPath,
|
|
127
129
|
sourcemap: true,
|
|
128
130
|
fileTypes: ctx.fileTypes,
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
// app.json names ≥1 page) and is withheld so the renderer keeps its
|
|
134
|
-
// previous dropdown instead of blanking; the push is never blocked.
|
|
135
|
-
const { pages } = repo.getProjectPages(projectPath);
|
|
136
|
-
sendStatus('ready', '编译完成,已重启', true, pages.length ? pages : undefined);
|
|
137
|
-
},
|
|
131
|
+
// Two independent gates: autoBuild = recompile on save; autoReload = reflect the rebuild in the simulator afterwards (off ⇒ page/form state survives). A style-only rebuild takes the in-place stylesheet hot-swap path (see reportRebuildStatus); any other change does a full reload.
|
|
132
|
+
watch: compile.autoBuild,
|
|
133
|
+
autoReload: preview.autoReload,
|
|
134
|
+
onRebuild: info => reportRebuildStatus(info, { projectPath, repo, autoReload: preview.autoReload, refreshSimulatorStyles: ctx.views.refreshSimulatorStyles, sendStatus }),
|
|
138
135
|
onBuildError: (err) => sendStatus('error', String(err)),
|
|
139
136
|
// Watcher died mid-session (EMFILE, permission loss, …): non-fatal, so 'ready' stays but `watcher: 'dead'` flags that saves no longer auto-rebuild.
|
|
140
137
|
onWatcherError: () => sendStatus('ready', '文件监听已停止,保存不再触发自动编译', false, undefined, true),
|
|
@@ -147,46 +144,46 @@ export function createWorkspaceService(ctx) {
|
|
|
147
144
|
return { session };
|
|
148
145
|
}
|
|
149
146
|
catch (err) {
|
|
150
|
-
|
|
147
|
+
// No appId resolved for this attempt; the outgoing project's own entry
|
|
148
|
+
// was already cleared by runOpenTeardown, so there is nothing to clear.
|
|
151
149
|
return { error: String(err) };
|
|
152
150
|
}
|
|
153
151
|
}
|
|
154
|
-
/**
|
|
155
|
-
* Adapter-return boundary: a session without a string appId can't be driven by
|
|
156
|
-
* the renderer, so it must never become active. Close the live resources the
|
|
157
|
-
* adapter already spun up (best-effort) and return the error message; null when
|
|
158
|
-
* valid.
|
|
159
|
-
*/
|
|
160
|
-
async function rejectInvalidAppId(session) {
|
|
161
|
-
if (SessionAppInfoSchema.safeParse(session.appInfo).success)
|
|
162
|
-
return null;
|
|
163
|
-
try {
|
|
164
|
-
await session.close();
|
|
165
|
-
}
|
|
166
|
-
catch (closeErr) {
|
|
167
|
-
console.warn('[workspace] closing appId-less adapter session failed (non-fatal):', closeErr);
|
|
168
|
-
}
|
|
169
|
-
return 'adapter returned session.appInfo without a string appId — '
|
|
170
|
-
+ 'the CompilationAdapter must supply appInfo.appId';
|
|
171
|
-
}
|
|
172
|
-
function applyRefererFromSession(session) {
|
|
173
|
-
const appInfo = session.appInfo;
|
|
174
|
-
if (appInfo && typeof appInfo.appId === 'string' && appInfo.appId.length > 0) {
|
|
175
|
-
setSimulatorServicewechatReferer(appInfo.appId, typeof appInfo.version === 'string' ? appInfo.version : undefined);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
152
|
// Delegate to the host-injected (or default LocalProjectsProvider)
|
|
179
153
|
// ProjectsProvider on the context. When the host omits an optional method,
|
|
180
154
|
// we apply a safe documented default — never silently fall back to
|
|
181
155
|
// `repo.*`, because a remote provider's project paths are not on the local
|
|
182
156
|
// filesystem.
|
|
183
157
|
const provider = ctx.projectsProvider;
|
|
158
|
+
// Owner of whichever project's compile modes are currently open; disposed/
|
|
159
|
+
// replaced alongside the session (teardown, openProject failures, close).
|
|
160
|
+
const compileModes = createCompileModeManager(provider, (change) => ctx.notify.compileModesChanged(change));
|
|
161
|
+
const thumbnails = createThumbnailOps({
|
|
162
|
+
ctx,
|
|
163
|
+
provider,
|
|
164
|
+
getSession: () => currentSession,
|
|
165
|
+
getProjectPath: () => currentProjectPath,
|
|
166
|
+
});
|
|
184
167
|
return {
|
|
185
168
|
listProjects: async () => provider.listProjects(),
|
|
186
169
|
addProject: async (dirPath) => provider.addProject(dirPath),
|
|
187
170
|
removeProject: async (dirPath) => {
|
|
188
171
|
await provider.removeProject(dirPath);
|
|
189
172
|
},
|
|
173
|
+
updateProject: async (dirPath, patch) => {
|
|
174
|
+
const projects = await provider.listProjects();
|
|
175
|
+
const existing = projects.find((p) => p.path === dirPath);
|
|
176
|
+
if (!existing)
|
|
177
|
+
throw new Error(`No such project: ${dirPath}`);
|
|
178
|
+
// A provider without `updateProject` cannot persist the edit. Returning
|
|
179
|
+
// the record unchanged would look like a successful save to the
|
|
180
|
+
// renderer (dialog closes, list reloads) while silently discarding the
|
|
181
|
+
// user's input, so this must fail loudly instead.
|
|
182
|
+
if (!provider.updateProject) {
|
|
183
|
+
throw new Error('当前宿主不支持编辑项目');
|
|
184
|
+
}
|
|
185
|
+
return provider.updateProject(dirPath, patch);
|
|
186
|
+
},
|
|
190
187
|
hasProject: async (dirPath) => {
|
|
191
188
|
const projects = await provider.listProjects();
|
|
192
189
|
return projects.some((p) => p.path === dirPath);
|
|
@@ -215,7 +212,14 @@ export function createWorkspaceService(ctx) {
|
|
|
215
212
|
// in-flight one; ownerSeq only grows, so a late-resolving earlier request
|
|
216
213
|
// can't clobber a later one that already took over).
|
|
217
214
|
opLock.takeOwnership(mySeq);
|
|
215
|
+
// Defer the workbench editor's heavy attach while this open's
|
|
216
|
+
// boot-critical window (old-session teardown + first compile) runs.
|
|
217
|
+
// The release is idempotent and bound to this hold, so every exit path
|
|
218
|
+
// below releases unconditionally; the gate's own cap timer backstops
|
|
219
|
+
// any future path that forgets to.
|
|
220
|
+
const releaseWorkbenchHold = ctx.views.holdWorkbenchAttach();
|
|
218
221
|
if (await runOpenTeardown(mySeq)) {
|
|
222
|
+
releaseWorkbenchHold();
|
|
219
223
|
return { success: false, error: 'superseded by a newer project open/close' };
|
|
220
224
|
}
|
|
221
225
|
// Reject obviously broken projects up front so we never spin up a
|
|
@@ -225,10 +229,9 @@ export function createWorkspaceService(ctx) {
|
|
|
225
229
|
// `fetch(…).then(r=>r.text()).then(JSON.parse)` pipeline dies on the
|
|
226
230
|
// dev server's HTML SPA fallback with
|
|
227
231
|
// `SyntaxError: Unexpected token '<', "<!doctype "…`.
|
|
228
|
-
const dirError = provider
|
|
229
|
-
? await provider.validateProjectDir(projectPath)
|
|
230
|
-
: null;
|
|
232
|
+
const dirError = await validateProjectDirSafe(provider, projectPath);
|
|
231
233
|
if (dirError) {
|
|
234
|
+
releaseWorkbenchHold();
|
|
232
235
|
sendStatus('error', dirError);
|
|
233
236
|
return { success: false, error: dirError };
|
|
234
237
|
}
|
|
@@ -237,20 +240,35 @@ export function createWorkspaceService(ctx) {
|
|
|
237
240
|
// generation — runCompile's onLog closure checks it per line.
|
|
238
241
|
const sessionGeneration = ++logGeneration;
|
|
239
242
|
const compiled = await runCompile(projectPath, sessionGeneration);
|
|
243
|
+
// The compile settling — success OR failure — ends the boot-critical
|
|
244
|
+
// window (a failed compile is when the user needs the editor most).
|
|
245
|
+
releaseWorkbenchHold();
|
|
240
246
|
if ('error' in compiled) {
|
|
241
247
|
sendStatus('error', compiled.error);
|
|
242
248
|
return { success: false, error: compiled.error };
|
|
243
249
|
}
|
|
244
250
|
const session = compiled.session;
|
|
251
|
+
// Opened right after compile as a standalone handle — not yet current;
|
|
252
|
+
// every failure branch below disposes THIS handle, never the current
|
|
253
|
+
// store, since this open may no longer own "current" by the time it
|
|
254
|
+
// gets here.
|
|
255
|
+
const opened = await openCompileModeStoreAfterCompile(compileModes, projectPath, session);
|
|
256
|
+
if ('error' in opened) {
|
|
257
|
+
sendStatus('error', opened.error);
|
|
258
|
+
return { success: false, error: opened.error };
|
|
259
|
+
}
|
|
260
|
+
const store = opened.store;
|
|
245
261
|
const appIdError = await rejectInvalidAppId(session);
|
|
246
262
|
if (appIdError) {
|
|
263
|
+
store.dispose();
|
|
247
264
|
sendStatus('error', appIdError);
|
|
248
265
|
return { success: false, error: appIdError };
|
|
249
266
|
}
|
|
250
|
-
if (!(await runOpenCommit(mySeq, session, projectPath))) {
|
|
251
|
-
// Superseded
|
|
252
|
-
//
|
|
253
|
-
//
|
|
267
|
+
if (!(await runOpenCommit(mySeq, session, projectPath, store))) {
|
|
268
|
+
// Superseded — discard the freshly-opened session and its own store
|
|
269
|
+
// handle rather than clobber the newer request's (already-adopted)
|
|
270
|
+
// current store.
|
|
271
|
+
store.dispose();
|
|
254
272
|
try {
|
|
255
273
|
await session.close();
|
|
256
274
|
}
|
|
@@ -264,7 +282,7 @@ export function createWorkspaceService(ctx) {
|
|
|
264
282
|
provider.updateLastOpened(projectPath);
|
|
265
283
|
});
|
|
266
284
|
bestEffort('sendStatus', () => sendStatus('ready', '编译完成'));
|
|
267
|
-
bestEffort('applyReferer', () =>
|
|
285
|
+
bestEffort('applyReferer', () => applyRefererForSession(session, projectPath));
|
|
268
286
|
return {
|
|
269
287
|
success: true,
|
|
270
288
|
port: session.port,
|
|
@@ -273,9 +291,9 @@ export function createWorkspaceService(ctx) {
|
|
|
273
291
|
},
|
|
274
292
|
async closeProject() {
|
|
275
293
|
// Claim a request seq and take ownership immediately (close has no veto),
|
|
276
|
-
// then serialize against a concurrent openProject:
|
|
277
|
-
// run while an open is mid-teardown/commit (it would tear down
|
|
278
|
-
// the open is building).
|
|
294
|
+
// then serialize against a concurrent openProject: disposeProjectViews()
|
|
295
|
+
// must not run while an open is mid-teardown/commit (it would tear down
|
|
296
|
+
// the views the open is building).
|
|
279
297
|
const mySeq = opLock.nextSeq();
|
|
280
298
|
opLock.takeOwnership(mySeq);
|
|
281
299
|
const release = await opLock.acquire();
|
|
@@ -286,6 +304,11 @@ export function createWorkspaceService(ctx) {
|
|
|
286
304
|
// we meant to close.
|
|
287
305
|
if (!opLock.isOwner(mySeq))
|
|
288
306
|
return;
|
|
307
|
+
// Void any in-flight open's workbench attach hold BEFORE the teardown
|
|
308
|
+
// awaits below: the superseded open's compile can settle mid-close, and
|
|
309
|
+
// its release (or the gate's cap) must not rebuild the editor view for
|
|
310
|
+
// a project that is being closed.
|
|
311
|
+
ctx.views.cancelWorkbenchAttachHold();
|
|
289
312
|
// Mark the close in progress BEFORE disposeSession nulls currentSession,
|
|
290
313
|
// so bridge getters refuse to resolve the dying session during the
|
|
291
314
|
// session.close() await (cleared in the finally once views are gone).
|
|
@@ -293,14 +316,18 @@ export function createWorkspaceService(ctx) {
|
|
|
293
316
|
// Invalidate the active session's onLog BEFORE teardown starts — lines
|
|
294
317
|
// flushed by the dying compile worker must not reach the panel.
|
|
295
318
|
logGeneration++;
|
|
296
|
-
|
|
319
|
+
compileModes.disposeCurrent(); // dies with the session
|
|
320
|
+
clearRefererForSession(currentSession, currentProjectPath);
|
|
297
321
|
await disposeSession();
|
|
298
322
|
// Record the root being torn down BEFORE clearing it, so a teardown/
|
|
299
323
|
// debounced write already in flight can still be accepted against it.
|
|
300
324
|
if (currentProjectPath !== '')
|
|
301
325
|
lastClosedProjectPath = currentProjectPath;
|
|
302
326
|
currentProjectPath = '';
|
|
303
|
-
|
|
327
|
+
// Project-scoped views only. The host toolbar is HOST-scoped and must
|
|
328
|
+
// survive closing a project — its full teardown (disposeAll) runs from
|
|
329
|
+
// the context registry at app teardown instead.
|
|
330
|
+
ctx.views.disposeProjectViews();
|
|
304
331
|
}
|
|
305
332
|
finally {
|
|
306
333
|
closing = false;
|
|
@@ -312,85 +339,19 @@ export function createWorkspaceService(ctx) {
|
|
|
312
339
|
getLastClosedProjectPath: () => lastClosedProjectPath,
|
|
313
340
|
hasActiveSession: () => currentSession !== null,
|
|
314
341
|
isClosing: () => closing,
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
return null;
|
|
318
|
-
const simulatorWc = ctx.views.getSimulatorWebContents();
|
|
319
|
-
if (!simulatorWc)
|
|
320
|
-
return null;
|
|
321
|
-
if (ctx.views.getSimulatorProjectPath() !== projectPath)
|
|
322
|
-
return null;
|
|
323
|
-
const session = currentSession;
|
|
324
|
-
// Capture the active render-host guest (the mini-program content); the
|
|
325
|
-
// simulator WCV only holds the device-shell chrome. In native-host with no
|
|
326
|
-
// active guest (not mounted / mid page-switch / destroyed) return null
|
|
327
|
-
// rather than persist a device-shell frame as the page — that wrong-content
|
|
328
|
-
// frame is the bug this path exists to avoid. Non-native-host: the sim WCV.
|
|
329
|
-
const bridge = ctx.bridge;
|
|
330
|
-
const nativeHost = bridge?.isNativeHost() ?? false;
|
|
331
|
-
const renderGuest = nativeHost ? (bridge?.getActiveRenderWc() ?? null) : null;
|
|
332
|
-
if (nativeHost && !renderGuest)
|
|
333
|
-
return null;
|
|
334
|
-
const captureTarget = renderGuest ?? simulatorWc;
|
|
335
|
-
// A destroyed target means teardown is in flight (no valid frame) — return
|
|
336
|
-
// null rather than let capturePage() throw indistinguishably into the catch.
|
|
337
|
-
if (captureTarget.isDestroyed())
|
|
338
|
-
return null;
|
|
339
|
-
try {
|
|
340
|
-
const image = await captureTarget.capturePage();
|
|
341
|
-
if (currentSession !== session
|
|
342
|
-
|| currentProjectPath !== projectPath
|
|
343
|
-
|| ctx.views.getSimulatorWebContents() !== simulatorWc
|
|
344
|
-
|| ctx.views.getSimulatorProjectPath() !== projectPath
|
|
345
|
-
// Captured target must still be the live one: a guest that navigated
|
|
346
|
-
// mid-capture would otherwise persist a frame from the wrong page.
|
|
347
|
-
|| (nativeHost ? (bridge?.getActiveRenderWc() ?? null) : simulatorWc) !== captureTarget) {
|
|
348
|
-
return null;
|
|
349
|
-
}
|
|
350
|
-
const dataUrl = `data:image/png;base64,${image.toPNG().toString('base64')}`;
|
|
351
|
-
if (provider.saveThumbnail) {
|
|
352
|
-
await provider.saveThumbnail(projectPath, dataUrl);
|
|
353
|
-
}
|
|
354
|
-
// Always hand the renderer back the freshly-captured frame so the
|
|
355
|
-
// UI updates immediately even if the host's saveThumbnail is
|
|
356
|
-
// async or stores out-of-band.
|
|
357
|
-
return dataUrl;
|
|
358
|
-
}
|
|
359
|
-
catch {
|
|
360
|
-
return null;
|
|
361
|
-
}
|
|
362
|
-
},
|
|
363
|
-
async getThumbnail(projectPath) {
|
|
364
|
-
if (provider.getThumbnail) {
|
|
365
|
-
return (await provider.getThumbnail(projectPath)) ?? null;
|
|
366
|
-
}
|
|
367
|
-
return null;
|
|
368
|
-
},
|
|
342
|
+
captureThumbnail: thumbnails.captureThumbnail,
|
|
343
|
+
getThumbnail: thumbnails.getThumbnail,
|
|
369
344
|
// `getProjectPages` reads the project's own `app.json` from disk and is
|
|
370
345
|
// independent of the project registry — it stays on the repo helper.
|
|
371
346
|
getProjectPages: (projectPath) => repo.getProjectPages(projectPath),
|
|
372
|
-
getCompileConfig:
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
if (provider.saveCompileConfig) {
|
|
377
|
-
await provider.saveCompileConfig(projectPath, config);
|
|
378
|
-
}
|
|
379
|
-
// No persistence when the host opts out; the renderer's edits then
|
|
380
|
-
// do not survive a reload, matching the documented contract.
|
|
381
|
-
},
|
|
347
|
+
getCompileConfig: (projectPath) => compileModes.getCompileConfig(projectPath),
|
|
348
|
+
saveCompileConfig: (projectPath, config) => compileModes.saveCompileConfig(projectPath, config),
|
|
349
|
+
getCompileModeState: (projectPath) => compileModes.getCompileModeState(projectPath),
|
|
350
|
+
applyCompileModeCommand: (command) => compileModes.applyCompileModeCommand(command),
|
|
382
351
|
// Per-project settings (uploadWithSourceMap etc.) live in the project's
|
|
383
352
|
// own `project.config.json`, not the registry — keep direct repo calls.
|
|
384
353
|
getProjectSettings: (projectPath) => repo.getProjectSettings(projectPath),
|
|
385
354
|
updateProjectSettings: (projectPath, patch) => repo.updateProjectSettings(projectPath, patch),
|
|
386
|
-
getLaunchConfigs: async (p) => (provider.getLaunchConfigs ? await provider.getLaunchConfigs(p) : []),
|
|
387
|
-
saveLaunchConfigs: async (p, c) => { if (provider.saveLaunchConfigs)
|
|
388
|
-
await provider.saveLaunchConfigs(p, c); },
|
|
389
|
-
getActiveLaunchConfigId: async (p) => provider.getActiveLaunchConfigId ? await provider.getActiveLaunchConfigId(p) : null,
|
|
390
|
-
saveActiveLaunchConfigId: async (p, id) => {
|
|
391
|
-
if (provider.saveActiveLaunchConfigId)
|
|
392
|
-
await provider.saveActiveLaunchConfigId(p, id);
|
|
393
|
-
},
|
|
394
355
|
};
|
|
395
356
|
}
|
|
396
357
|
//# sourceMappingURL=workspace-service.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ProjectSession } from '../../../shared/types.js';
|
|
2
|
+
import type { BridgeRouterHandle } from '../../ipc/bridge-router.js';
|
|
3
|
+
import type { ViewManager } from '../views/view-manager.js';
|
|
4
|
+
import type { ProjectsProvider } from '../projects/types.js';
|
|
5
|
+
import type { WorkspaceService } from './workspace-service.js';
|
|
6
|
+
/**
|
|
7
|
+
* `captureThumbnail`/`getThumbnail` split out of WorkspaceService purely to keep
|
|
8
|
+
* workspace-service.ts under the repo's file-length gate — the semantics (session/
|
|
9
|
+
* project-path ownership, provider round-trip) still belong entirely to that service.
|
|
10
|
+
* Takes a narrow slice of WorkbenchContext (views + bridge) rather than the whole
|
|
11
|
+
* grab-bag type, so this split doesn't grow the WorkbenchContext-import ratchet.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createThumbnailOps(input: {
|
|
14
|
+
ctx: {
|
|
15
|
+
views: Pick<ViewManager, 'getSimulatorWebContents' | 'getSimulatorProjectPath'>;
|
|
16
|
+
bridge?: BridgeRouterHandle;
|
|
17
|
+
};
|
|
18
|
+
provider: ProjectsProvider;
|
|
19
|
+
getSession(): ProjectSession | null;
|
|
20
|
+
getProjectPath(): string;
|
|
21
|
+
}): Pick<WorkspaceService, 'captureThumbnail' | 'getThumbnail'>;
|
|
22
|
+
//# sourceMappingURL=workspace-thumbnails.d.ts.map
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `captureThumbnail`/`getThumbnail` split out of WorkspaceService purely to keep
|
|
3
|
+
* workspace-service.ts under the repo's file-length gate — the semantics (session/
|
|
4
|
+
* project-path ownership, provider round-trip) still belong entirely to that service.
|
|
5
|
+
* Takes a narrow slice of WorkbenchContext (views + bridge) rather than the whole
|
|
6
|
+
* grab-bag type, so this split doesn't grow the WorkbenchContext-import ratchet.
|
|
7
|
+
*/
|
|
8
|
+
export function createThumbnailOps(input) {
|
|
9
|
+
const { ctx, provider, getSession, getProjectPath } = input;
|
|
10
|
+
return {
|
|
11
|
+
async captureThumbnail(projectPath) {
|
|
12
|
+
if (!getSession() || projectPath !== getProjectPath())
|
|
13
|
+
return null;
|
|
14
|
+
const simulatorWc = ctx.views.getSimulatorWebContents();
|
|
15
|
+
if (!simulatorWc)
|
|
16
|
+
return null;
|
|
17
|
+
if (ctx.views.getSimulatorProjectPath() !== projectPath)
|
|
18
|
+
return null;
|
|
19
|
+
const session = getSession();
|
|
20
|
+
// Capture the active render-host guest (the mini-program content); the
|
|
21
|
+
// simulator WCV only holds the device-shell chrome. In native-host with no
|
|
22
|
+
// active guest (not mounted / mid page-switch / destroyed) return null
|
|
23
|
+
// rather than persist a device-shell frame as the page — that wrong-content
|
|
24
|
+
// frame is the bug this path exists to avoid. Non-native-host: the sim WCV.
|
|
25
|
+
const bridge = ctx.bridge;
|
|
26
|
+
const nativeHost = bridge?.isNativeHost() ?? false;
|
|
27
|
+
const renderGuest = nativeHost ? (bridge?.getActiveRenderWc() ?? null) : null;
|
|
28
|
+
if (nativeHost && !renderGuest)
|
|
29
|
+
return null;
|
|
30
|
+
const captureTarget = renderGuest ?? simulatorWc;
|
|
31
|
+
// A destroyed target means teardown is in flight (no valid frame) — return
|
|
32
|
+
// null rather than let capturePage() throw indistinguishably into the catch.
|
|
33
|
+
if (captureTarget.isDestroyed())
|
|
34
|
+
return null;
|
|
35
|
+
try {
|
|
36
|
+
const image = await captureTarget.capturePage();
|
|
37
|
+
if (getSession() !== session
|
|
38
|
+
|| getProjectPath() !== projectPath
|
|
39
|
+
|| ctx.views.getSimulatorWebContents() !== simulatorWc
|
|
40
|
+
|| ctx.views.getSimulatorProjectPath() !== projectPath
|
|
41
|
+
// Captured target must still be the live one: a guest that navigated
|
|
42
|
+
// mid-capture would otherwise persist a frame from the wrong page.
|
|
43
|
+
|| (nativeHost ? (bridge?.getActiveRenderWc() ?? null) : simulatorWc) !== captureTarget) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const dataUrl = `data:image/png;base64,${image.toPNG().toString('base64')}`;
|
|
47
|
+
if (provider.saveThumbnail) {
|
|
48
|
+
await provider.saveThumbnail(projectPath, dataUrl);
|
|
49
|
+
}
|
|
50
|
+
// Always hand the renderer back the freshly-captured frame so the
|
|
51
|
+
// UI updates immediately even if the host's saveThumbnail is
|
|
52
|
+
// async or stores out-of-band.
|
|
53
|
+
return dataUrl;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
async getThumbnail(projectPath) {
|
|
60
|
+
if (provider.getThumbnail) {
|
|
61
|
+
return (await provider.getThumbnail(projectPath)) ?? null;
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=workspace-thumbnails.js.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { WebContents } from 'electron';
|
|
2
|
+
import type { SenderPolicy } from './ipc-registry.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves which window context owns an incoming IPC sender.
|
|
5
|
+
*
|
|
6
|
+
* `register*Ipc` takes one of these instead of a bare context so a single
|
|
7
|
+
* handler body serves both shapes: one window (every accepted sender maps to
|
|
8
|
+
* that window's context) and several windows (each message is answered by the
|
|
9
|
+
* context of the window it actually came from).
|
|
10
|
+
*/
|
|
11
|
+
export interface IpcContextSource<T> {
|
|
12
|
+
/**
|
|
13
|
+
* Set only by the adapter over a context that carries no `senderPolicy` —
|
|
14
|
+
* narrow test contexts. It keeps {@link IpcRegistry} in its policy-less mode
|
|
15
|
+
* (accept every sender, skip the main-frame check), so wrapping such a
|
|
16
|
+
* context in a source is not itself a trust change.
|
|
17
|
+
*/
|
|
18
|
+
readonly ungated?: boolean;
|
|
19
|
+
/** The context owning `sender`, or null when no context claims it. */
|
|
20
|
+
resolve(sender: WebContents): T | null;
|
|
21
|
+
/** Every context this source can hand out. */
|
|
22
|
+
list(): T[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* What every `register*Ipc` accepts: a router covering all live windows, or a
|
|
26
|
+
* single context standing in for itself.
|
|
27
|
+
*/
|
|
28
|
+
export type IpcInput<T> = T | IpcContextSource<T>;
|
|
29
|
+
/** Structural test: a source exposes both members, a context exposes neither. */
|
|
30
|
+
export declare function isIpcContextSource<T>(value: unknown): value is IpcContextSource<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Accept either a source or a single context. A single context gates on its
|
|
33
|
+
* own `senderPolicy` — the same predicate a policy-only registry applies — and
|
|
34
|
+
* owns every sender that predicate accepts. A context without a policy stays
|
|
35
|
+
* ungated so narrow test contexts keep the behaviour a bare registry gave them.
|
|
36
|
+
*/
|
|
37
|
+
export declare function toIpcContextSource<T extends {
|
|
38
|
+
senderPolicy?: SenderPolicy;
|
|
39
|
+
}>(input: T | IpcContextSource<T>): IpcContextSource<T>;
|
|
40
|
+
//# sourceMappingURL=ipc-context-source.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Structural test: a source exposes both members, a context exposes neither. */
|
|
2
|
+
export function isIpcContextSource(value) {
|
|
3
|
+
if (value == null || typeof value !== 'object')
|
|
4
|
+
return false;
|
|
5
|
+
const candidate = value;
|
|
6
|
+
return typeof candidate.resolve === 'function' && typeof candidate.list === 'function';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Accept either a source or a single context. A single context gates on its
|
|
10
|
+
* own `senderPolicy` — the same predicate a policy-only registry applies — and
|
|
11
|
+
* owns every sender that predicate accepts. A context without a policy stays
|
|
12
|
+
* ungated so narrow test contexts keep the behaviour a bare registry gave them.
|
|
13
|
+
*/
|
|
14
|
+
export function toIpcContextSource(input) {
|
|
15
|
+
if (isIpcContextSource(input))
|
|
16
|
+
return input;
|
|
17
|
+
const ctx = input;
|
|
18
|
+
const policy = ctx.senderPolicy;
|
|
19
|
+
if (!policy)
|
|
20
|
+
return { ungated: true, resolve: () => ctx, list: () => [ctx] };
|
|
21
|
+
return { resolve: (sender) => (policy(sender) ? ctx : null), list: () => [ctx] };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ipc-context-source.js.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { IpcMainEvent,
|
|
1
|
+
import type { IpcMainEvent, IpcMainInvokeEvent } from 'electron';
|
|
2
2
|
import { ipcMain } from 'electron';
|
|
3
|
-
import { type Disposable } from '@dimina-kit/electron-deck/main';
|
|
3
|
+
import { type Disposable, type IpcSenderPolicy } from '@dimina-kit/electron-deck/main';
|
|
4
|
+
import type { IpcContextSource } from './ipc-context-source.js';
|
|
4
5
|
type HandleFn = Parameters<typeof ipcMain.handle>[1];
|
|
5
6
|
type ListenerFn = Parameters<typeof ipcMain.on>[1];
|
|
6
7
|
/**
|
|
@@ -9,39 +10,63 @@ type ListenerFn = Parameters<typeof ipcMain.on>[1];
|
|
|
9
10
|
* Returns true when the calling WebContents is allowed to invoke / emit on
|
|
10
11
|
* the channel, false otherwise.
|
|
11
12
|
*/
|
|
12
|
-
export type SenderPolicy =
|
|
13
|
+
export type SenderPolicy = IpcSenderPolicy;
|
|
13
14
|
/**
|
|
14
15
|
* Tiny fluent helper that wraps every `ipcMain.handle` / `ipcMain.on` with a
|
|
15
16
|
* matching removeHandler/removeListener registered into an internal registry.
|
|
16
17
|
*
|
|
17
|
-
* Each `register*Ipc(
|
|
18
|
+
* Each `register*Ipc(...)` returns one of these as a Disposable so the
|
|
18
19
|
* workbench-level registry can dispose all built-in handlers in one shot.
|
|
19
20
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
21
|
+
* The constructor takes either a {@link SenderPolicy} (trust only: is this
|
|
22
|
+
* sender allowed?) or an {@link IpcContextSource} (trust plus ownership: which
|
|
23
|
+
* window context does this sender belong to?). With either, every incoming
|
|
24
|
+
* invocation is gated:
|
|
25
|
+
* - `handle` / `handleRouted`: rejected senders cause the invoke promise to
|
|
26
|
+
* reject with `Error('IPC sender rejected for channel <channel>')`.
|
|
27
|
+
* - `on` / `onRouted`: rejected senders are silently dropped (the original
|
|
28
|
+
* listener is never called).
|
|
29
|
+
* - `handleSync` / `handleSyncRouted`: rejected senders get a structured
|
|
30
|
+
* `{ ok: false, code: 'EREJECTED', … }` returnValue, because sendSync blocks
|
|
31
|
+
* the renderer until one is set.
|
|
32
|
+
* In every case a single `console.warn` is emitted with the channel name and a
|
|
33
|
+
* short sender summary. With no policy — or a source that declares itself
|
|
34
|
+
* `ungated` — the wrapper is a pass-through, preserving backwards
|
|
35
|
+
* compatibility for unit tests and callers that opted out.
|
|
36
|
+
*
|
|
37
|
+
* The `*Routed` variants hand the owning context to the handler as its first
|
|
38
|
+
* argument. `TCtx` is `never` unless the registry was built from a source, so
|
|
39
|
+
* they are unusable (and unreachable) on a policy-only registry.
|
|
29
40
|
*/
|
|
30
|
-
export declare class IpcRegistry implements Disposable {
|
|
31
|
-
private
|
|
32
|
-
private
|
|
33
|
-
|
|
41
|
+
export declare class IpcRegistry<TCtx = never> implements Disposable {
|
|
42
|
+
private cleanups;
|
|
43
|
+
private _disposed;
|
|
44
|
+
private readonly policy;
|
|
45
|
+
private readonly source;
|
|
46
|
+
/** False reproduces the policy-less pass-through exactly: no main-frame
|
|
47
|
+
* check, and a synchronous handler keeps its synchronous return value. */
|
|
48
|
+
private readonly gated;
|
|
49
|
+
constructor(policyOrSource?: SenderPolicy | IpcContextSource<TCtx>);
|
|
50
|
+
/** Trust gate and owner resolution for one incoming message. */
|
|
51
|
+
private admit;
|
|
52
|
+
private warnRejected;
|
|
53
|
+
private addInvokeHandler;
|
|
34
54
|
handle(channel: string, fn: HandleFn): this;
|
|
55
|
+
/** {@link handle} answered by the context that owns the calling sender. */
|
|
56
|
+
handleRouted(channel: string, fn: (ctx: TCtx, event: IpcMainInvokeEvent, ...args: unknown[]) => unknown): this;
|
|
57
|
+
private addSyncHandler;
|
|
35
58
|
/**
|
|
36
59
|
* Register a SYNCHRONOUS `ipcRenderer.sendSync` handler. Unlike {@link on}
|
|
37
60
|
* (fire-and-forget), the renderer is blocked until we set `event.returnValue`,
|
|
38
|
-
* so `fn` MUST be synchronous and return the value to hand back.
|
|
39
|
-
* policy gates it like {@link handle}; a rejected sender or a thrown error
|
|
40
|
-
* yields a structured `{ ok: false, code, message }` returnValue instead of
|
|
41
|
-
* the silent drop `on` uses, so the blocked renderer always gets an answer.
|
|
61
|
+
* so `fn` MUST be synchronous and return the value to hand back.
|
|
42
62
|
*/
|
|
43
63
|
handleSync(channel: string, fn: (event: IpcMainEvent, ...args: unknown[]) => unknown): this;
|
|
64
|
+
/** {@link handleSync} answered by the context that owns the calling sender. */
|
|
65
|
+
handleSyncRouted(channel: string, fn: (ctx: TCtx, event: IpcMainEvent, ...args: unknown[]) => unknown): this;
|
|
66
|
+
private addListener;
|
|
44
67
|
on(channel: string, fn: ListenerFn): this;
|
|
68
|
+
/** {@link on} answered by the context that owns the calling sender. */
|
|
69
|
+
onRouted(channel: string, fn: (ctx: TCtx, event: IpcMainEvent, ...args: unknown[]) => unknown): this;
|
|
45
70
|
dispose(): Promise<void>;
|
|
46
71
|
}
|
|
47
72
|
export {};
|