@dimina-kit/devtools 0.3.2-dev.20260525152421 → 0.3.2-dev.20260610082053
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 +43 -40
- package/dist/main/api.d.ts +0 -1
- package/dist/main/api.js +5 -1
- package/dist/main/app/app.d.ts +15 -5
- package/dist/main/app/app.js +247 -110
- package/dist/main/app/bootstrap.d.ts +16 -0
- package/dist/main/app/bootstrap.js +20 -0
- package/dist/main/app/launch.d.ts +8 -4
- package/dist/main/app/launch.js +9 -4
- package/dist/main/index.bundle.js +6607 -2102
- package/dist/main/index.js +9 -1
- package/dist/main/ipc/app.d.ts +1 -1
- package/dist/main/ipc/bridge-router.d.ts +61 -0
- package/dist/main/ipc/bridge-router.js +1300 -0
- package/dist/main/ipc/panels.d.ts +1 -1
- package/dist/main/ipc/panels.js +6 -2
- package/dist/main/ipc/popover.d.ts +1 -1
- package/dist/main/ipc/project-fs.d.ts +57 -0
- package/dist/main/ipc/project-fs.js +448 -0
- package/dist/main/ipc/projects.d.ts +1 -1
- package/dist/main/ipc/session.d.ts +1 -1
- package/dist/main/ipc/settings.d.ts +1 -1
- package/dist/main/ipc/simulator-module.d.ts +6 -0
- package/dist/main/ipc/simulator-module.js +11 -1
- package/dist/main/ipc/simulator.d.ts +2 -2
- package/dist/main/ipc/simulator.js +49 -5
- package/dist/main/ipc/toolbar.d.ts +1 -1
- package/dist/main/ipc/views.d.ts +19 -0
- package/dist/main/ipc/views.js +65 -0
- package/dist/main/runtime/devtools-backend.d.ts +17 -0
- package/dist/main/runtime/devtools-backend.js +49 -0
- package/dist/main/runtime/miniapp-runtime.d.ts +39 -0
- package/dist/main/runtime/miniapp-runtime.js +17 -0
- package/dist/main/services/automation/exec.d.ts +27 -2
- package/dist/main/services/automation/exec.js +37 -3
- package/dist/main/services/automation/handlers/app.js +127 -11
- package/dist/main/services/automation/handlers/page.js +36 -19
- package/dist/main/services/automation/index.js +40 -13
- package/dist/main/services/automation/wait-active-page.d.ts +56 -0
- package/dist/main/services/automation/wait-active-page.js +71 -0
- package/dist/main/services/console-forward/index.d.ts +36 -0
- package/dist/main/services/console-forward/index.js +81 -0
- package/dist/main/services/dimina-resource-server.d.ts +7 -0
- package/dist/main/services/dimina-resource-server.js +99 -0
- package/dist/main/services/elements-forward/index.d.ts +66 -0
- package/dist/main/services/elements-forward/index.js +583 -0
- package/dist/main/services/layout/index.d.ts +23 -1
- package/dist/main/services/layout/index.js +28 -3
- package/dist/main/services/mcp/index.d.ts +1 -0
- package/dist/main/services/mcp/index.js +3 -0
- package/dist/main/services/mcp/server.d.ts +1 -1
- package/dist/main/services/mcp/server.js +1 -1
- package/dist/main/services/mcp/target-manager.d.ts +35 -0
- package/dist/main/services/mcp/target-manager.js +63 -1
- package/dist/main/services/mcp/tools/context-tools.js +15 -1
- package/dist/main/services/module.d.ts +1 -1
- package/dist/main/services/network-forward/index.d.ts +190 -0
- package/dist/main/services/network-forward/index.js +765 -0
- package/dist/main/services/notifications/renderer-notifier.d.ts +11 -0
- package/dist/main/services/notifications/renderer-notifier.js +7 -1
- package/dist/main/services/render-inspect/index.d.ts +41 -0
- package/dist/main/services/render-inspect/index.js +88 -0
- package/dist/main/services/safe-area/index.d.ts +17 -0
- package/dist/main/services/safe-area/index.js +59 -0
- package/dist/main/services/service-host-pool/pool.d.ts +197 -0
- package/dist/main/services/service-host-pool/pool.js +364 -0
- package/dist/main/services/simulator/custom-apis.d.ts +34 -0
- package/dist/main/services/simulator/custom-apis.js +22 -0
- package/dist/main/services/simulator-appdata/index.d.ts +35 -0
- package/dist/main/services/simulator-appdata/index.js +71 -0
- package/dist/main/services/simulator-current-page/index.d.ts +24 -0
- package/dist/main/services/simulator-current-page/index.js +19 -0
- package/dist/main/services/simulator-storage/index.d.ts +37 -2
- package/dist/main/services/simulator-storage/index.js +209 -32
- package/dist/main/services/simulator-storage/service-storage-ops.d.ts +40 -0
- package/dist/main/services/simulator-storage/service-storage-ops.js +67 -0
- package/dist/main/services/simulator-temp-files/fs-channels.js +1 -1
- package/dist/main/services/simulator-temp-files/index.d.ts +1 -1
- package/dist/main/services/simulator-temp-files/index.js +1 -1
- package/dist/main/services/simulator-temp-files/request-handler.js +1 -1
- package/dist/main/services/simulator-wxml/index.d.ts +29 -0
- package/dist/main/services/simulator-wxml/index.js +28 -0
- package/dist/main/services/update/update-manager.d.ts +10 -0
- package/dist/main/services/update/update-manager.js +16 -3
- package/dist/main/services/views/devtools-tabs.d.ts +47 -0
- package/dist/main/services/views/devtools-tabs.js +95 -0
- package/dist/main/services/views/view-manager.d.ts +142 -4
- package/dist/main/services/views/view-manager.js +909 -17
- package/dist/main/services/workbench-context.d.ts +66 -1
- package/dist/main/services/workbench-context.js +6 -1
- package/dist/main/services/workspace/workspace-service.d.ts +8 -0
- package/dist/main/services/workspace/workspace-service.js +12 -0
- package/dist/main/utils/ipc-registry.d.ts +11 -2
- package/dist/main/utils/ipc-registry.js +63 -3
- package/dist/main/utils/paths.d.ts +15 -0
- package/dist/main/utils/paths.js +19 -0
- package/dist/main/utils/sender-policy.d.ts +9 -3
- package/dist/main/utils/sender-policy.js +18 -4
- package/dist/main/utils/theme.d.ts +1 -1
- package/dist/main/utils/theme.js +1 -1
- package/dist/main/windows/main-window/create.d.ts +0 -6
- package/dist/main/windows/main-window/create.js +11 -59
- package/dist/main/windows/main-window/events.d.ts +1 -1
- package/dist/main/windows/main-window/events.js +1 -1
- package/dist/main/windows/service-host-window/create.d.ts +52 -0
- package/dist/main/windows/service-host-window/create.js +112 -0
- package/dist/native-host/common/common.js +368 -0
- package/dist/native-host/container/pageFrame.css +1 -0
- package/dist/native-host/render/render.js +9334 -0
- package/dist/native-host/service/service.js +6 -0
- package/dist/preload/index.d.ts +2 -0
- package/dist/preload/index.js +6 -0
- package/dist/preload/instrumentation/app-data.d.ts +18 -20
- package/dist/preload/instrumentation/app-data.js +23 -160
- package/dist/preload/instrumentation/wxml-extract.d.ts +1 -1
- package/dist/preload/instrumentation/wxml-extract.js +1 -1
- package/dist/preload/runtime/bridge.d.ts +3 -8
- package/dist/preload/runtime/bridge.js +2 -32
- package/dist/preload/runtime/custom-apis.js +20 -17
- package/dist/preload/runtime/host-toolbar-advertiser.d.ts +27 -0
- package/dist/preload/runtime/host-toolbar-advertiser.js +55 -0
- package/dist/preload/runtime/main-api-runner.d.ts +9 -0
- package/dist/preload/runtime/main-api-runner.js +85 -0
- package/dist/preload/runtime/native-host.d.ts +43 -0
- package/dist/preload/runtime/native-host.js +83 -0
- package/dist/preload/shared/expose.d.ts +10 -5
- package/dist/preload/shared/expose.js +29 -11
- package/dist/preload/shared/sid-registry.d.ts +11 -0
- package/dist/preload/shared/sid-registry.js +38 -0
- package/dist/preload/windows/host-toolbar.cjs +161 -0
- package/dist/preload/windows/host-toolbar.cjs.map +7 -0
- package/dist/preload/windows/host-toolbar.d.ts +2 -0
- package/dist/preload/windows/host-toolbar.js +12 -0
- package/dist/preload/windows/main.cjs +1939 -0
- package/dist/preload/windows/main.cjs.map +4 -4
- package/dist/preload/windows/simulator.cjs +925 -0
- package/dist/preload/windows/simulator.cjs.map +7 -0
- package/dist/preload/windows/simulator.js +243 -573
- package/dist/render-host/pageFrame.html +29 -0
- package/dist/render-host/preload.cjs +154 -0
- package/dist/render-host/render-inspect.js +295 -0
- package/dist/renderer/assets/abap-DiwvWnMr.js +2 -0
- package/dist/renderer/assets/apex-CmtZjKlf.js +2 -0
- package/dist/renderer/assets/azcli-DL2My_i-.js +2 -0
- package/dist/renderer/assets/bat-B-nC98wG.js +2 -0
- package/dist/renderer/assets/bicep-Ju5MwOgh.js +3 -0
- package/dist/renderer/assets/cameligo-8Eu1TyBr.js +2 -0
- package/dist/renderer/assets/chunk-DPI0Y_ll.js +1 -0
- package/dist/renderer/assets/clojure-u-RpMkH3.js +2 -0
- package/dist/renderer/assets/codicon-ngg6Pgfi.ttf +0 -0
- package/dist/renderer/assets/coffee-CdA7bbTe.js +2 -0
- package/dist/renderer/assets/constants-CLAQX6VZ.js +2 -0
- package/dist/renderer/assets/cpp-CzNFP8ks.js +2 -0
- package/dist/renderer/assets/csharp-j1LThmcE.js +2 -0
- package/dist/renderer/assets/csp-CLRC61y6.js +2 -0
- package/dist/renderer/assets/css-r6rC_7P2.js +4 -0
- package/dist/renderer/assets/css.worker-DyDu5ynT.js +90 -0
- package/dist/renderer/assets/cssMode-BCBgxrnA.js +2 -0
- package/dist/renderer/assets/cypher-CW08XVUh.js +2 -0
- package/dist/renderer/assets/dart-Cs9aL5T_.js +2 -0
- package/dist/renderer/assets/dockerfile-BWM0M184.js +2 -0
- package/dist/renderer/assets/ecl-MJJuer5P.js +2 -0
- package/dist/renderer/assets/editor-CWI9TnMM.css +1 -0
- package/dist/renderer/assets/editor.api2-BTaYmRq7.js +873 -0
- package/dist/renderer/assets/editor.worker-Dpt_xPrs.js +27 -0
- package/dist/renderer/assets/elixir-D2AIuXqn.js +2 -0
- package/dist/renderer/assets/flow9-B2H24giC.js +2 -0
- package/dist/renderer/assets/freemarker2-DGDGzimW.js +4 -0
- package/dist/renderer/assets/fsharp-CMk2OIJN.js +2 -0
- package/dist/renderer/assets/go-BrMkuJg0.js +2 -0
- package/dist/renderer/assets/graphql-PSR1UKGv.js +2 -0
- package/dist/renderer/assets/handlebars-bOHhw3EG.js +2 -0
- package/dist/renderer/assets/hcl-DAQrbDOW.js +2 -0
- package/dist/renderer/assets/html-BMyuX0_c.js +2 -0
- package/dist/renderer/assets/html.worker-IWNXhnIC.js +503 -0
- package/dist/renderer/assets/htmlMode-DR4kXJ7l.js +2 -0
- package/dist/renderer/assets/index-CcJKzatF.js +50 -0
- package/dist/renderer/assets/ini-0TG5BxW0.js +2 -0
- package/dist/renderer/assets/input-QGx6FFX1.js +2 -0
- package/dist/renderer/assets/ipc-transport-BT4QYQqu.css +1 -0
- package/dist/renderer/assets/{ipc-transport-BzPzxPwf.js → ipc-transport-DvZvwK-Z.js} +5 -5
- package/dist/renderer/assets/java-rgorz17v.js +2 -0
- package/dist/renderer/assets/javascript-Bu-tl1P7.js +2 -0
- package/dist/renderer/assets/json.worker-c4h5s80L.js +59 -0
- package/dist/renderer/assets/jsonMode-MQV_ffLR.js +8 -0
- package/dist/renderer/assets/julia-C8VMdHm8.js +2 -0
- package/dist/renderer/assets/kotlin-AhhC4Qhm.js +2 -0
- package/dist/renderer/assets/less-Cgca25AP.js +3 -0
- package/dist/renderer/assets/lexon-D0GHdBaw.js +2 -0
- package/dist/renderer/assets/liquid-ClkfOvhB.js +2 -0
- package/dist/renderer/assets/lspLanguageFeatures-Bke_4Ie9.js +5 -0
- package/dist/renderer/assets/lua-DmRsNG-P.js +2 -0
- package/dist/renderer/assets/m3-BgL5dNKT.js +2 -0
- package/dist/renderer/assets/markdown-BuJfycGS.js +2 -0
- package/dist/renderer/assets/mdx-RZdUskPu.js +2 -0
- package/dist/renderer/assets/mips-C9m_93PR.js +2 -0
- package/dist/renderer/assets/monaco.contribution-B7rUMaEv.js +3 -0
- package/dist/renderer/assets/msdax-CpFHC9OI.js +2 -0
- package/dist/renderer/assets/mysql-qFvltsqN.js +2 -0
- package/dist/renderer/assets/objective-c-Bnmr858J.js +2 -0
- package/dist/renderer/assets/pascal-WP0_D5AO.js +2 -0
- package/dist/renderer/assets/pascaligo-Blom4Rij.js +2 -0
- package/dist/renderer/assets/perl-B-vk8g64.js +2 -0
- package/dist/renderer/assets/pgsql-Cgvz6v67.js +2 -0
- package/dist/renderer/assets/php-8a3Lrw9m.js +2 -0
- package/dist/renderer/assets/pla-DuFqEZ8V.js +2 -0
- package/dist/renderer/assets/popover-BOH1If1J.js +2 -0
- package/dist/renderer/assets/postiats-DkLtSgkp.js +2 -0
- package/dist/renderer/assets/powerquery-BJ1aNepW.js +2 -0
- package/dist/renderer/assets/powershell-rE98k687.js +2 -0
- package/dist/renderer/assets/protobuf-CUheFacr.js +3 -0
- package/dist/renderer/assets/pug-LDcAMD8w.js +2 -0
- package/dist/renderer/assets/python-Cobrm_-8.js +2 -0
- package/dist/renderer/assets/qsharp-DUKSQoR1.js +2 -0
- package/dist/renderer/assets/r-D-QApv87.js +2 -0
- package/dist/renderer/assets/razor-BEUIQFNJ.js +2 -0
- package/dist/renderer/assets/redis-SXdDyWR9.js +2 -0
- package/dist/renderer/assets/redshift-Y6lsCryn.js +2 -0
- package/dist/renderer/assets/restructuredtext-edObr9a8.js +2 -0
- package/dist/renderer/assets/ruby-CNnUfF-8.js +2 -0
- package/dist/renderer/assets/rust-IHUZWzBr.js +2 -0
- package/dist/renderer/assets/sb-DrUvY44N.js +2 -0
- package/dist/renderer/assets/scala-B4hbXGLM.js +2 -0
- package/dist/renderer/assets/scheme-BGrd12j3.js +2 -0
- package/dist/renderer/assets/scss-x5G1ES4U.js +4 -0
- package/dist/renderer/assets/select-C7JQ8G5N.js +2 -0
- package/dist/renderer/assets/settings-DpAbTJyF.js +2 -0
- package/dist/renderer/assets/{settings-api-BXCw9vOZ.js → settings-api-RD2IZF53.js} +2 -2
- package/dist/renderer/assets/shell-DOehe2Y8.js +2 -0
- package/dist/renderer/assets/solidity-BeRvcwWV.js +2 -0
- package/dist/renderer/assets/sophia-DZbkUNjy.js +2 -0
- package/dist/renderer/assets/sparql-B7_oi5-h.js +2 -0
- package/dist/renderer/assets/sql-CTlsFWVE.js +2 -0
- package/dist/renderer/assets/st-DJVEJdPE.js +2 -0
- package/dist/renderer/assets/swift-CwhT3fYa.js +2 -0
- package/dist/renderer/assets/systemverilog-BQN63pkN.js +2 -0
- package/dist/renderer/assets/tcl-DqwfpskA.js +2 -0
- package/dist/renderer/assets/ts.worker-BwM5Ha3L.js +67720 -0
- package/dist/renderer/assets/tsMode-BHa7dl9v.js +12 -0
- package/dist/renderer/assets/twig-BiyenUgc.js +2 -0
- package/dist/renderer/assets/typescript-15aT0Yj8.js +2 -0
- package/dist/renderer/assets/typespec-CWOJribt.js +2 -0
- package/dist/renderer/assets/vb-Cq5F87m3.js +2 -0
- package/dist/renderer/assets/wgsl-BAvW2lVr.js +299 -0
- package/dist/renderer/assets/workbenchSettings-CNJX4Qna.js +8 -0
- package/dist/renderer/assets/workers-CRBS0W-v.js +2 -0
- package/dist/renderer/assets/xml-bR2Zh-HV.js +2 -0
- package/dist/renderer/assets/yaml-Bdk54Qrb.js +2 -0
- package/dist/renderer/entries/main/index.html +29 -6
- package/dist/renderer/entries/popover/index.html +7 -6
- package/dist/renderer/entries/settings/index.html +6 -5
- package/dist/renderer/entries/workbench-settings/index.html +6 -5
- package/dist/service-host/preload.cjs +254 -0
- package/dist/service-host/service.html +10 -0
- package/dist/service-host/sourcemap-rewrite.cjs +58 -0
- package/dist/service-host/sync-api-patch.js +20 -0
- package/dist/service-host/sync-impls/menu-button.js +16 -0
- package/dist/service-host/sync-impls/storage.js +50 -0
- package/dist/service-host/sync-impls/system-info.js +54 -0
- package/dist/shared/appdata-accumulator.d.ts +95 -0
- package/dist/shared/appdata-accumulator.js +213 -0
- package/dist/shared/bridge-channels.d.ts +364 -0
- package/dist/shared/bridge-channels.js +54 -0
- package/dist/shared/constants.d.ts +0 -4
- package/dist/shared/constants.js +0 -4
- package/dist/shared/ipc-channels.d.ts +108 -1
- package/dist/shared/ipc-channels.js +127 -10
- package/dist/shared/ipc-schemas.d.ts +65 -2
- package/dist/shared/ipc-schemas.js +79 -3
- package/dist/shared/open-in-editor.d.ts +71 -0
- package/dist/shared/open-in-editor.js +138 -0
- package/dist/shared/simulator-api-metadata.d.ts +21 -0
- package/dist/shared/simulator-api-metadata.js +23 -0
- package/dist/shared/types.d.ts +2 -2
- package/dist/shared/vpath.d.ts +42 -0
- package/dist/shared/vpath.js +105 -0
- package/dist/simulator/assets/device-shell-DsdcNEkt.css +1 -0
- package/dist/simulator/assets/device-shell-vwYSOVrh.js +2 -0
- package/dist/simulator/assets/jsx-runtime-P6ZegaOf.js +2 -0
- package/dist/simulator/assets/simulator-DddliUL5.js +10 -0
- package/dist/simulator/assets/simulator-mini-app-BDNu5n26.js +2 -0
- package/dist/simulator/device-shell/menu-button-geometry.js +8 -0
- package/dist/simulator/simulator.html +2 -112
- package/package.json +9 -9
- package/dist/main/utils/disposable.d.ts +0 -18
- package/dist/main/utils/disposable.js +0 -67
- package/dist/renderer/assets/constants-DI382mTP.js +0 -2
- package/dist/renderer/assets/index-4lkyF644.js +0 -46
- package/dist/renderer/assets/input-D4byFOLS.js +0 -2
- package/dist/renderer/assets/ipc-transport-DqbRdZNO.css +0 -1
- package/dist/renderer/assets/popover-cxKrg_os.js +0 -2
- package/dist/renderer/assets/select-BgSkkdHW.js +0 -2
- package/dist/renderer/assets/settings-oD2K1jdT.js +0 -2
- package/dist/renderer/assets/workbenchSettings-CTNBpTft.js +0 -8
- package/dist/simulator/assets/simulator-CVOFTpSj.js +0 -9
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Customize the embedded Chrome DevTools front-end's panel tab bar.
|
|
3
|
+
*
|
|
4
|
+
* The right-panel DevTools (a WebContents rendering `devtools://`, attached to the
|
|
5
|
+
* service-host via `setDevToolsWebContents` + `openDevTools`) shows ALL its panels
|
|
6
|
+
* by default. For the mini-app workflow only Elements / Console / Network are
|
|
7
|
+
* meaningful in the default tab bar — but we do NOT want to delete the rest: they
|
|
8
|
+
* stay reachable on demand via the command menu (Cmd+Shift+P → "Show Sources" …).
|
|
9
|
+
*
|
|
10
|
+
* ── How (registry, not DOM) ─────────────────────────────────────────────────
|
|
11
|
+
* The modern ESM DevTools front-end does NOT expose `UI.ViewManager` on
|
|
12
|
+
* `globalThis`, so the tab bar can't be driven through the view manager. Panels
|
|
13
|
+
* register themselves via `registerViewExtension({id, location:'panel', persistence})`
|
|
14
|
+
* into a module-level registry; the official mutators are `registerViewExtension`,
|
|
15
|
+
* `getRegisteredViewExtensions` and `maybeRemoveViewExtension`. We:
|
|
16
|
+
* 1. `import('./ui/legacy/legacy.js')` to reach those functions (the real export
|
|
17
|
+
* path on Electron 41 / Chromium ~138, verified at runtime);
|
|
18
|
+
* 2. whitelist-patch `registerViewExtension` so any future non-kept panel comes
|
|
19
|
+
* in with `persistence:'transient'` (hidden from the default bar);
|
|
20
|
+
* 3. for the already-registered non-kept panels, `maybeRemoveViewExtension(id)`
|
|
21
|
+
* then re-register a copy with `persistence:'transient'`.
|
|
22
|
+
* Transient views are not shown in the default tab bar but stay in the command
|
|
23
|
+
* menu — and because this is DevTools' own panel path, there is NO `>>` overflow
|
|
24
|
+
* or `×` close-button residue (which a DOM `display:none` hack leaves behind).
|
|
25
|
+
*
|
|
26
|
+
* ── Locale infobar ──────────────────────────────────────────────────────────
|
|
27
|
+
* The "DevTools is now available in 中文" banner is suppressed via the official
|
|
28
|
+
* host preference `disable-locale-info-bar` (a GLOBAL setting that lives in host
|
|
29
|
+
* preferences, NOT page localStorage), set through `InspectorFrontendHost.setPreference`.
|
|
30
|
+
*
|
|
31
|
+
* ── Degradation ─────────────────────────────────────────────────────────────
|
|
32
|
+
* If the ESM module can't be resolved, a bounded DOM `display:none` fallback hides
|
|
33
|
+
* the non-kept tabs (by visible name) so the bar still looks right. Everything is
|
|
34
|
+
* wrapped in try/catch in the injected realm and silently no-ops on any failure.
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* Canonical DevTools panel view ids kept in the DEFAULT tab bar (stable front-end
|
|
38
|
+
* ids, unchanged for many Chromium releases): `elements`, `console`, `network`.
|
|
39
|
+
*/
|
|
40
|
+
export const DEVTOOLS_KEPT_VIEW_IDS = ['elements', 'console', 'network'];
|
|
41
|
+
/**
|
|
42
|
+
* Build the `executeJavaScript` source injected into the DevTools front-end
|
|
43
|
+
* WebContents. The kept ids + display names are carried as JSON data literals
|
|
44
|
+
* (never interpolated as bare code), same discipline as the other injectors.
|
|
45
|
+
*/
|
|
46
|
+
export function buildCustomizeTabsScript(keptIds = DEVTOOLS_KEPT_VIEW_IDS) {
|
|
47
|
+
// Kept panels are matched by view id (registry path) and by visible NAME (DOM
|
|
48
|
+
// fallback path); the DevTools UI may be EN or ZH, so include both.
|
|
49
|
+
const NAME_MAP = {
|
|
50
|
+
elements: ['Elements', '元素'], console: ['Console', '控制台'], network: ['Network', '网络'],
|
|
51
|
+
};
|
|
52
|
+
const keepNames = keptIds.flatMap((id) => NAME_MAP[id] ?? [id]);
|
|
53
|
+
const keepIdsJson = JSON.stringify(JSON.stringify([...keptIds]));
|
|
54
|
+
const keepNamesJson = JSON.stringify(JSON.stringify(keepNames));
|
|
55
|
+
return `(function(){try{
|
|
56
|
+
var KEEPID = new Set(JSON.parse(${keepIdsJson}));
|
|
57
|
+
var KEEPNAME = new Set(JSON.parse(${keepNamesJson}));
|
|
58
|
+
// (1) Locale infobar — official host-preference suppression (NOT localStorage).
|
|
59
|
+
try { var IFH=globalThis.InspectorFrontendHost; if(IFH&&typeof IFH.setPreference==='function'){ IFH.setPreference('disable-locale-info-bar','true'); } }catch(_){}
|
|
60
|
+
function deepCollect(sel,cap){ var out=[],seen=0,stack=[document]; while(stack.length&&seen<(cap||40000)){ var root=stack.pop(); try{var m=root.querySelectorAll?root.querySelectorAll(sel):[];for(var i=0;i<m.length;i++)out.push(m[i]);}catch(_){} try{var all=root.querySelectorAll?root.querySelectorAll('*'):[];for(var j=0;j<all.length;j++){seen++;if(all[j].shadowRoot)stack.push(all[j].shadowRoot);}}catch(_){} } return out; }
|
|
61
|
+
function txt(el){ return ((el&&el.textContent)||'').replace(/\\s+/g,' ').trim(); }
|
|
62
|
+
var PATHS=['./ui/legacy/legacy.js','./ui/legacy/ViewManager.js','devtools://devtools/bundled/ui/legacy/legacy.js'];
|
|
63
|
+
(async function(){
|
|
64
|
+
var VM=null,maybeRemove=null,origReg=null,reg=null,getReg=null;
|
|
65
|
+
for(var i=0;i<PATHS.length;i++){ try{ var m=await import(PATHS[i]); if(!m)continue; var v=m.ViewManager||m;
|
|
66
|
+
var mr=(v&&typeof v.maybeRemoveViewExtension==='function')?v.maybeRemoveViewExtension.bind(v):(typeof m.maybeRemoveViewExtension==='function'?m.maybeRemoveViewExtension:null);
|
|
67
|
+
if(mr){ VM=v;maybeRemove=mr;
|
|
68
|
+
origReg=(v&&typeof v.registerViewExtension==='function')?v.registerViewExtension:m.registerViewExtension; reg=origReg;
|
|
69
|
+
getReg=(v&&typeof v.getRegisteredViewExtensions==='function')?v.getRegisteredViewExtensions.bind(v):(typeof m.getRegisteredViewExtensions==='function'?m.getRegisteredViewExtensions:null);
|
|
70
|
+
break; } }catch(_){} }
|
|
71
|
+
if(maybeRemove){
|
|
72
|
+
// (2) future non-kept panels register as transient
|
|
73
|
+
try{ if(origReg&&VM){ VM.registerViewExtension=function(r){ try{ if(r&&String(r.location)==='panel'&&!KEEPID.has(r.id)){ r.persistence='transient'; } }catch(_){} return origReg.apply(this,arguments); }; reg=VM.registerViewExtension; } }catch(_){}
|
|
74
|
+
// (3) already-registered non-kept panels -> remove + re-register transient
|
|
75
|
+
var exts=[]; try{ if(getReg) exts=getReg()||[]; }catch(_){}
|
|
76
|
+
var handled=false;
|
|
77
|
+
for(var e=0;e<exts.length;e++){ try{ var ex=exts[e]; var eid=ex&&ex.id; if(!eid||KEEPID.has(eid)) continue; if(String(ex.location)!=='panel') continue;
|
|
78
|
+
maybeRemove(eid);
|
|
79
|
+
var nr={}; try{ nr=Object.assign({},ex); }catch(_){ for(var k in ex){ try{nr[k]=ex[k];}catch(__){} } }
|
|
80
|
+
nr.persistence='transient';
|
|
81
|
+
try{ reg(nr); }catch(_){ try{ origReg(nr); }catch(__){} }
|
|
82
|
+
handled=true;
|
|
83
|
+
}catch(_){} }
|
|
84
|
+
// fallback: registrations not enumerable -> at least clear the bar by id
|
|
85
|
+
if(!handled){ var FALL=['timeline','resources','heap-profiler','sources','security','lighthouse','chrome-recorder','coverage','linear-memory-inspector','sensors','rendering','animations','autofill-view','medias','issues-pane']; for(var fr=0;fr<FALL.length;fr++){ try{ if(!KEEPID.has(FALL[fr])) maybeRemove(FALL[fr]); }catch(_){} } }
|
|
86
|
+
} else { domFallback(); }
|
|
87
|
+
})();
|
|
88
|
+
// DOM fallback: only if the ESM module couldn't be resolved at all.
|
|
89
|
+
function domFallback(){ var cachedBar=null;
|
|
90
|
+
function findBar(){ if(cachedBar&&cachedBar.isConnected)return cachedBar; cachedBar=null; var tabs=deepCollect('[role="tab"]'); var a=null; for(var i=0;i<tabs.length;i++){if(KEEPNAME.has(txt(tabs[i]))){a=tabs[i];break;}} if(!a)return null; var p=a.parentElement; while(p){try{if(p.querySelectorAll('[role="tab"]').length>1){cachedBar=p;return p;}}catch(_){} p=p.parentElement;} cachedBar=a.parentElement; return cachedBar; }
|
|
91
|
+
function apply(){ try{ var bar=findBar(); if(bar){ var bts=bar.querySelectorAll('[role="tab"]'); for(var b=0;b<bts.length;b++){var bt=bts[b]; if(KEEPNAME.has(txt(bt)))continue; try{if(bt.style)bt.style.display='none';}catch(_){}} try{var more=bar.querySelector('[aria-label*="More tabs"],.tabbed-pane-header-tabs-drop-down-container'); if(more&&more.style)more.style.display='none';}catch(_){} } }catch(_){} }
|
|
92
|
+
var tr=0,t=setInterval(function(){tr++;try{apply();}catch(_){}if(tr>120)clearInterval(t);},60); try{apply();}catch(_){} }
|
|
93
|
+
}catch(_){}})()`;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=devtools-tabs.js.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { WebContents } from 'electron';
|
|
2
|
+
import type { NativeDeviceInfo } from '../../../shared/ipc-channels.js';
|
|
2
3
|
import { type WorkbenchContext } from '../workbench-context.js';
|
|
3
4
|
/**
|
|
4
5
|
* Context surface used by the ViewManager. We only need a small slice of the
|
|
@@ -7,8 +8,41 @@ import { type WorkbenchContext } from '../workbench-context.js';
|
|
|
7
8
|
export interface ViewManagerContext {
|
|
8
9
|
windows: WorkbenchContext['windows'];
|
|
9
10
|
rendererDir: string;
|
|
11
|
+
/**
|
|
12
|
+
* Per-webContents connection registry (foundation.md §4). The native-host
|
|
13
|
+
* simulator WebContentsView is acquired here so the registry tracks that
|
|
14
|
+
* trusted webContents and tears its per-wc resources (the custom-api bridge
|
|
15
|
+
* `ipcMain.on`) down deterministically on destroy — see P1 DoD #3. Required:
|
|
16
|
+
* `createWorkbenchContext` always supplies it.
|
|
17
|
+
*/
|
|
18
|
+
connections: WorkbenchContext['connections'];
|
|
19
|
+
/**
|
|
20
|
+
* Absolute path to the simulator preload bundle. Only consumed by the
|
|
21
|
+
* native-host simulator WebContentsView (`attachNativeSimulator`); the
|
|
22
|
+
* default `<webview>` path gets its preload from the session-registered
|
|
23
|
+
* frame preload instead. Optional so partial test contexts compile.
|
|
24
|
+
*/
|
|
25
|
+
preloadPath?: string;
|
|
10
26
|
panels: string[];
|
|
11
27
|
notify: WorkbenchContext['notify'];
|
|
28
|
+
bridge?: WorkbenchContext['bridge'];
|
|
29
|
+
/**
|
|
30
|
+
* Native-host network forwarder. `attachNativeSimulator` hands it the freshly
|
|
31
|
+
* created simulator WebContentsView (`attachSimulator`) so it can attach the
|
|
32
|
+
* CDP debugger, and the DevTools front-end host wc (`setDevtoolsHost`) so it can
|
|
33
|
+
* inject that WCV's Network.* events into the native Network tab (service-host
|
|
34
|
+
* console line is the fallback). Optional so partial test contexts compile.
|
|
35
|
+
*/
|
|
36
|
+
networkForward?: WorkbenchContext['networkForward'];
|
|
37
|
+
/**
|
|
38
|
+
* Per-context registry of host-registered simulator custom APIs. The
|
|
39
|
+
* native-host simulator is a top-level WebContentsView with no embedder
|
|
40
|
+
* renderer, so `attachNativeSimulator` dispatches the simulator-side
|
|
41
|
+
* `__diminaCustomApis` bridge straight to this registry (the default
|
|
42
|
+
* `<webview>` path proxies through the trusted main renderer instead).
|
|
43
|
+
* Optional so partial test contexts compile.
|
|
44
|
+
*/
|
|
45
|
+
simulatorApis?: WorkbenchContext['simulatorApis'];
|
|
12
46
|
/**
|
|
13
47
|
* Header bar height in px, used to position overlay views below the header.
|
|
14
48
|
* Optional here so partial test contexts compile; `createWorkbenchContext`
|
|
@@ -20,13 +54,14 @@ export interface ViewManagerContext {
|
|
|
20
54
|
* Unified lifecycle manager for Electron WebContentsView overlays.
|
|
21
55
|
*
|
|
22
56
|
* Owns creation / attachment / detachment / positioning / destruction of
|
|
23
|
-
* every overlay view hung off the main window's contentView (simulator
|
|
24
|
-
* settings, popover). All `new WebContentsView`, `addChildView`,
|
|
57
|
+
* every overlay view hung off the main window's contentView (simulator
|
|
58
|
+
* DevTools, settings, popover). All `new WebContentsView`, `addChildView`,
|
|
25
59
|
* `removeChildView`, `webContents.destroy()` and overlay `setBounds` calls
|
|
26
60
|
* should live here — IPC handlers just call into the manager.
|
|
27
61
|
*
|
|
28
|
-
* The
|
|
29
|
-
*
|
|
62
|
+
* The code editor is NOT an overlay: it renders as an in-renderer
|
|
63
|
+
* `<MonacoEditor/>` React component inside the main window. The main
|
|
64
|
+
* window's own renderer is the content root and is not managed here.
|
|
30
65
|
*/
|
|
31
66
|
export interface ViewManager {
|
|
32
67
|
/**
|
|
@@ -35,6 +70,19 @@ export interface ViewManager {
|
|
|
35
70
|
* tab; otherwise the view is created but not added yet).
|
|
36
71
|
*/
|
|
37
72
|
attachSimulator(simWcId: number, simWidth: number): void;
|
|
73
|
+
/**
|
|
74
|
+
* NATIVE-HOST ONLY. Create the simulator itself as a top-level
|
|
75
|
+
* WebContentsView (not a renderer `<webview>` guest) loading `simulatorUrl`,
|
|
76
|
+
* position it in the simulator panel region, and treat its webContents as
|
|
77
|
+
* THE simulator webContents (so `getSimulatorWebContents` resolves it and the
|
|
78
|
+
* spawn/SIMULATOR_EVENTS pipeline flows through it). This is required because
|
|
79
|
+
* Electron force-disables the `<webview>` tag inside a webview guest, so the
|
|
80
|
+
* default `<webview>`-in-`<webview>` topology can never host DeviceShell's
|
|
81
|
+
* per-page render-host `<webview>`s. A top-level WebContentsView's webContents
|
|
82
|
+
* is NOT a guest and CAN host them. Then wires the DevTools/console view on
|
|
83
|
+
* top of it via `attachSimulator`. No-op (logs) when `preloadPath` is unset.
|
|
84
|
+
*/
|
|
85
|
+
attachNativeSimulator(simulatorUrl: string, simWidth: number): void;
|
|
38
86
|
/**
|
|
39
87
|
* Destroy and null out the simulator view (e.g. on simulator detach).
|
|
40
88
|
* Also destroys the cached settings view and hides the popover —
|
|
@@ -74,10 +122,100 @@ export interface ViewManager {
|
|
|
74
122
|
getSettingsWebContentsId(): number | null;
|
|
75
123
|
/** Return the webContents ID of the popover overlay if alive, else null. */
|
|
76
124
|
getPopoverWebContentsId(): number | null;
|
|
125
|
+
/**
|
|
126
|
+
* Return the webContents ID of the host-toolbar overlay if alive, else null.
|
|
127
|
+
* The host-toolbar WCV is the one overlay whose OWN renderer drives an IPC
|
|
128
|
+
* channel back to main (the reverse size-advertiser), so the sender policy
|
|
129
|
+
* must trust its id — see `createWorkbenchSenderPolicy`.
|
|
130
|
+
*/
|
|
131
|
+
getHostToolbarWebContentsId(): number | null;
|
|
132
|
+
/**
|
|
133
|
+
* NATIVE-HOST ONLY. Position the simulator content WebContentsView over the
|
|
134
|
+
* renderer-measured simulator panel REGION rect (the flex:1 placeholder slot,
|
|
135
|
+
* CSS px from the main window content top-left, which maps 1:1 to overlay
|
|
136
|
+
* setBounds DIP) and apply the device zoom. The WCV fills the region as a
|
|
137
|
+
* plain rectangle; DeviceShell draws + scrolls the phone inside. No-op in the
|
|
138
|
+
* default `<webview>` path (`nativeSimulatorView` is null). See
|
|
139
|
+
* `computeNativeSimulatorViewParams`.
|
|
140
|
+
*/
|
|
141
|
+
setNativeSimulatorViewBounds(params: {
|
|
142
|
+
x: number;
|
|
143
|
+
y: number;
|
|
144
|
+
width: number;
|
|
145
|
+
height: number;
|
|
146
|
+
zoom: number;
|
|
147
|
+
}): void;
|
|
148
|
+
/**
|
|
149
|
+
* NATIVE-HOST ONLY. Re-push the selected device's CSS `env(safe-area-inset-*)`
|
|
150
|
+
* override to every attached render-host guest (on device change). New guests
|
|
151
|
+
* pick it up automatically when they attach (`did-attach-webview`).
|
|
152
|
+
*/
|
|
153
|
+
reapplySafeArea(device: NativeDeviceInfo | null): void;
|
|
77
154
|
/** Update lastSimWidth; reposition simulator + settings if they are added. */
|
|
78
155
|
resize(simWidth: number): void;
|
|
79
156
|
/** Show or hide the simulator overlay based on visibility flag. */
|
|
80
157
|
setVisible(visible: boolean, simWidth: number): void;
|
|
158
|
+
/**
|
|
159
|
+
* Apply a renderer-measured rectangle to the simulator's Chromium
|
|
160
|
+
* DevTools overlay view. `{ width: 0, height: 0 }` is treated as "hide" —
|
|
161
|
+
* the view is removed from the contentView but its WebContents is kept
|
|
162
|
+
* alive so re-showing it doesn't re-pay the DevTools bootstrap.
|
|
163
|
+
*/
|
|
164
|
+
setSimulatorDevtoolsBounds(bounds: {
|
|
165
|
+
x: number;
|
|
166
|
+
y: number;
|
|
167
|
+
width: number;
|
|
168
|
+
height: number;
|
|
169
|
+
}): void;
|
|
170
|
+
/**
|
|
171
|
+
* Apply a renderer-measured rectangle to the host-controllable toolbar
|
|
172
|
+
* WebContentsView (the strip above the devtools header). Forward anchor,
|
|
173
|
+
* mirroring `setSimulatorDevtoolsBounds`. `{ width: 0, height: 0 }` is
|
|
174
|
+
* treated as "hide" — the view is removed from the contentView but its
|
|
175
|
+
* WebContents (and the host's loaded content) stays alive. Lazily creates
|
|
176
|
+
* the view on the first non-empty rect.
|
|
177
|
+
*/
|
|
178
|
+
setHostToolbarBounds(bounds: {
|
|
179
|
+
x: number;
|
|
180
|
+
y: number;
|
|
181
|
+
width: number;
|
|
182
|
+
height: number;
|
|
183
|
+
}): void;
|
|
184
|
+
/**
|
|
185
|
+
* Reverse size-advertiser sink: the toolbar WCV's own renderer advertises
|
|
186
|
+
* its intrinsic content height (block-axis extent); we store it and push it
|
|
187
|
+
* to the main-window renderer so the placeholder div resizes (closing the
|
|
188
|
+
* dynamic-height loop).
|
|
189
|
+
*/
|
|
190
|
+
setHostToolbarHeight(extent: number): void;
|
|
191
|
+
/**
|
|
192
|
+
* Host-facing control surface for the toolbar WebContentsView. The downstream
|
|
193
|
+
* host loads its own content into it (`loadURL` / `loadFile`) and fully drives
|
|
194
|
+
* it. Lazily creates the underlying view on the first load call.
|
|
195
|
+
*/
|
|
196
|
+
readonly hostToolbar: HostToolbarControl;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* The control object the downstream host uses to own the toolbar
|
|
200
|
+
* WebContentsView. Lazily backed by the view-manager's `hostToolbarView`.
|
|
201
|
+
*/
|
|
202
|
+
export interface HostToolbarControl {
|
|
203
|
+
/** Load a URL into the toolbar view (lazy-creates the view). */
|
|
204
|
+
loadURL(url: string): Promise<void>;
|
|
205
|
+
/** Load a local file into the toolbar view (lazy-creates the view). */
|
|
206
|
+
loadFile(path: string): Promise<void>;
|
|
207
|
+
/** The toolbar view's live WebContents, or null if not yet created/destroyed. */
|
|
208
|
+
readonly webContents: WebContents | null;
|
|
209
|
+
/** Remove the toolbar view from the contentView and reset it (kept alive). */
|
|
210
|
+
hide(): void;
|
|
211
|
+
/**
|
|
212
|
+
* Override the preload used when the toolbar view is first created. The
|
|
213
|
+
* host-shell (`launch(config)`) passes the host-controlled
|
|
214
|
+
* `toolbar.preloadPath` here; the host owns the bridge (it calls
|
|
215
|
+
* `exposeWorkbenchBridge()` itself). Must be set before the first
|
|
216
|
+
* `loadURL`/`loadFile`; `null` restores the built-in size-advertiser preload.
|
|
217
|
+
*/
|
|
218
|
+
setPreloadPath(path: string | null): void;
|
|
81
219
|
}
|
|
82
220
|
/**
|
|
83
221
|
* Build a ViewManager bound to the given context. The returned object is the
|