@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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BrowserWindow, WebContents, WebContentsView } from 'electron';
|
|
2
2
|
import type { CompileConfig } from '../../../shared/types.js';
|
|
3
|
+
import { type EditorOpenFilePayload } from '../../../shared/ipc-channels.js';
|
|
3
4
|
import type { WorkbenchSettings } from '../settings/index.js';
|
|
4
5
|
import type { ProjectSettings } from '../projects/project-repository.js';
|
|
5
6
|
/**
|
|
@@ -54,6 +55,16 @@ export interface RendererNotifier {
|
|
|
54
55
|
popoverRelaunch(config: CompileConfig): void;
|
|
55
56
|
/** Tell the main renderer the toolbar actions list has changed. */
|
|
56
57
|
toolbarActionsChanged(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Push the reserved host-toolbar height to the main renderer so its toolbar
|
|
60
|
+
* placeholder div resizes (closes the host-toolbar dynamic-height loop).
|
|
61
|
+
*/
|
|
62
|
+
hostToolbarHeightChanged(height: number): void;
|
|
63
|
+
/**
|
|
64
|
+
* Ask the main renderer's Monaco editor to open a project file at a position.
|
|
65
|
+
* Drives the "click a console file link → open in editor" pipeline.
|
|
66
|
+
*/
|
|
67
|
+
editorOpenFile(payload: EditorOpenFilePayload): void;
|
|
57
68
|
/** Initialise the currently shown compile popover overlay. */
|
|
58
69
|
popoverInit(popoverView: WebContentsView, payload: unknown): void;
|
|
59
70
|
/** Initialise the currently shown settings overlay (no-op if hidden). */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ProjectChannel, WindowChannel, SettingsChannel, PopoverChannel, ToolbarChannel, WorkbenchSettingsChannel, } from '../../../shared/ipc-channels.js';
|
|
1
|
+
import { ProjectChannel, WindowChannel, SettingsChannel, PopoverChannel, ToolbarChannel, WorkbenchSettingsChannel, EditorChannel, ViewChannel, } from '../../../shared/ipc-channels.js';
|
|
2
2
|
/** Safely resolve a WebContents, skipping destroyed / missing targets. */
|
|
3
3
|
function liveWebContents(wc) {
|
|
4
4
|
if (!wc)
|
|
@@ -42,6 +42,12 @@ export function createRendererNotifier(ctx) {
|
|
|
42
42
|
toolbarActionsChanged() {
|
|
43
43
|
sendToMain(ToolbarChannel.ActionsChanged);
|
|
44
44
|
},
|
|
45
|
+
hostToolbarHeightChanged(height) {
|
|
46
|
+
sendToMain(ViewChannel.HostToolbarHeightChanged, height);
|
|
47
|
+
},
|
|
48
|
+
editorOpenFile(payload) {
|
|
49
|
+
sendToMain(EditorChannel.OpenFile, payload);
|
|
50
|
+
},
|
|
45
51
|
popoverInit(popoverView, payload) {
|
|
46
52
|
const wc = liveWebContents(popoverView.webContents);
|
|
47
53
|
if (!wc)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RenderInspector — native-host element/WXML access into a render-host
|
|
3
|
+
* <webview> guest.
|
|
4
|
+
*
|
|
5
|
+
* Injects the bundled `render-inspect` IIFE (dist/render-host/render-inspect.js,
|
|
6
|
+
* exposing `window.__diminaRenderInspect`) into the guest's MAIN world via
|
|
7
|
+
* `executeJavaScript`, then drives it to read the WXML tree and
|
|
8
|
+
* highlight/unhighlight elements by sid. Injection is idempotent per
|
|
9
|
+
* WebContents id (the guest IIFE also self-guards); the injected-set entry is
|
|
10
|
+
* cleared when the wc is destroyed so a recycled id re-injects.
|
|
11
|
+
*
|
|
12
|
+
* The page's Vue tree + geometry live in the guest main world, and
|
|
13
|
+
* executeJavaScript (no worldId) runs there too — so the inspector, the DOM it
|
|
14
|
+
* reads, and the sid registry all share one realm. See render-inspect.ts.
|
|
15
|
+
*/
|
|
16
|
+
import type { WebContents } from 'electron';
|
|
17
|
+
import type { ConnectionRegistry } from '@dimina-kit/electron-deck/main';
|
|
18
|
+
import type { ElementInspection } from '../../../shared/ipc-channels.js';
|
|
19
|
+
import type { WxmlNode } from '../../../preload/shared/sid-registry.js';
|
|
20
|
+
export interface RenderInspector {
|
|
21
|
+
/** Inject (once per wc) the inspector IIFE, then read the WXML tree. */
|
|
22
|
+
getWxml(wc: WebContents): Promise<WxmlNode | null>;
|
|
23
|
+
/** Inject (once per wc), then highlight the element with `sid`. */
|
|
24
|
+
highlight(wc: WebContents, sid: string): Promise<ElementInspection | null>;
|
|
25
|
+
/** Clear any highlight overlay in the guest. */
|
|
26
|
+
unhighlight(wc: WebContents): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export interface RenderInspectorOptions {
|
|
29
|
+
/** Override the injected IIFE source (default: read the built bundle). Test seam. */
|
|
30
|
+
loadSource?: () => string;
|
|
31
|
+
/**
|
|
32
|
+
* Connection registry (foundation.md §4 / P2). When provided, the per-wc
|
|
33
|
+
* `injected` bookkeeping is torn down via the wc's connection (deterministic
|
|
34
|
+
* with the rest of that webContents's resources) instead of a bespoke
|
|
35
|
+
* `once('destroyed')`. Optional so focused unit tests can omit it (they fall
|
|
36
|
+
* back to the direct `once('destroyed')`).
|
|
37
|
+
*/
|
|
38
|
+
connections?: ConnectionRegistry;
|
|
39
|
+
}
|
|
40
|
+
export declare function createRenderInspector(options?: RenderInspectorOptions): RenderInspector;
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { devtoolsPackageRoot } from '../../utils/paths.js';
|
|
4
|
+
const DEFAULT_SOURCE_PATH = 'dist/render-host/render-inspect.js';
|
|
5
|
+
export function createRenderInspector(options = {}) {
|
|
6
|
+
const loadSource = options.loadSource ??
|
|
7
|
+
(() => readFileSync(path.join(devtoolsPackageRoot, DEFAULT_SOURCE_PATH), 'utf8'));
|
|
8
|
+
let cachedSource = null;
|
|
9
|
+
const injected = new Set();
|
|
10
|
+
function source() {
|
|
11
|
+
if (cachedSource === null)
|
|
12
|
+
cachedSource = loadSource();
|
|
13
|
+
return cachedSource;
|
|
14
|
+
}
|
|
15
|
+
/** Inject the IIFE once per live wc. Returns false if the guest is unusable. */
|
|
16
|
+
async function ensureInjected(wc) {
|
|
17
|
+
if (wc.isDestroyed())
|
|
18
|
+
return false;
|
|
19
|
+
if (injected.has(wc.id))
|
|
20
|
+
return true;
|
|
21
|
+
let src;
|
|
22
|
+
try {
|
|
23
|
+
src = source();
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
console.warn('[render-inspect] failed to load inspector source:', e.message);
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
await wc.executeJavaScript(src);
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
console.warn('[render-inspect] inject failed:', e.message);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
injected.add(wc.id);
|
|
37
|
+
// Consolidate the per-wc bookkeeping teardown onto the connection layer
|
|
38
|
+
// (foundation.md §4 / P2) when a registry is available; fall back to the
|
|
39
|
+
// bespoke `once('destroyed')` only when omitted (focused unit tests).
|
|
40
|
+
if (options.connections) {
|
|
41
|
+
options.connections.acquire(wc).own(() => injected.delete(wc.id));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
wc.once('destroyed', () => injected.delete(wc.id));
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
async function getWxml(wc) {
|
|
49
|
+
if (wc.isDestroyed())
|
|
50
|
+
return null;
|
|
51
|
+
if (!(await ensureInjected(wc)))
|
|
52
|
+
return null;
|
|
53
|
+
try {
|
|
54
|
+
const result = await wc.executeJavaScript('window.__diminaRenderInspect ? window.__diminaRenderInspect.getWxml() : null');
|
|
55
|
+
return result ?? null;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function highlight(wc, sid) {
|
|
62
|
+
if (wc.isDestroyed())
|
|
63
|
+
return null;
|
|
64
|
+
if (!(await ensureInjected(wc)))
|
|
65
|
+
return null;
|
|
66
|
+
try {
|
|
67
|
+
const result = await wc.executeJavaScript(`window.__diminaRenderInspect ? window.__diminaRenderInspect.highlightElement(${JSON.stringify(sid)}) : null`);
|
|
68
|
+
return result ?? null;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function unhighlight(wc) {
|
|
75
|
+
if (wc.isDestroyed())
|
|
76
|
+
return;
|
|
77
|
+
if (!(await ensureInjected(wc)))
|
|
78
|
+
return;
|
|
79
|
+
try {
|
|
80
|
+
await wc.executeJavaScript('window.__diminaRenderInspect && window.__diminaRenderInspect.unhighlightElement && window.__diminaRenderInspect.unhighlightElement()');
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// best-effort
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return { getWxml, highlight, unhighlight };
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { WebContents } from 'electron';
|
|
2
|
+
import type { ConnectionRegistry } from '@dimina-kit/electron-deck/main';
|
|
3
|
+
import type { NativeDeviceInfo } from '../../../shared/ipc-channels.js';
|
|
4
|
+
export interface SafeAreaController {
|
|
5
|
+
/** Attach the debugger to a freshly-attached render-host guest and push the
|
|
6
|
+
* current device's insets. No-op (warn) if the guest is already claimed by an
|
|
7
|
+
* external CDP client — env then stays 0 rather than throwing. */
|
|
8
|
+
applyToGuest(guestWc: WebContents, device: NativeDeviceInfo | null): void;
|
|
9
|
+
/** Re-push insets to every still-attached guest after a device change. */
|
|
10
|
+
reapplyAll(device: NativeDeviceInfo | null): void;
|
|
11
|
+
/** Detach from all guests (teardown). */
|
|
12
|
+
dispose(): void;
|
|
13
|
+
}
|
|
14
|
+
export declare function createSafeAreaController(options?: {
|
|
15
|
+
connections?: ConnectionRegistry;
|
|
16
|
+
}): SafeAreaController;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
function guestInsets(device) {
|
|
2
|
+
const top = device?.safeAreaInsets.top ?? 0;
|
|
3
|
+
return { top, topMax: top, right: 0, rightMax: 0, bottom: 0, bottomMax: 0, left: 0, leftMax: 0 };
|
|
4
|
+
}
|
|
5
|
+
export function createSafeAreaController(options = {}) {
|
|
6
|
+
// Guests we successfully attached `wc.debugger` to (so we don't re-attach,
|
|
7
|
+
// which throws). Pruned on guest destroy.
|
|
8
|
+
const attached = new Set();
|
|
9
|
+
function override(wc, device) {
|
|
10
|
+
if (wc.isDestroyed())
|
|
11
|
+
return;
|
|
12
|
+
void wc.debugger
|
|
13
|
+
.sendCommand('Emulation.setSafeAreaInsetsOverride', { insets: guestInsets(device) })
|
|
14
|
+
.catch((err) => {
|
|
15
|
+
console.warn('[safe-area] setSafeAreaInsetsOverride failed:', err instanceof Error ? err.message : err);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
applyToGuest: (wc, device) => {
|
|
20
|
+
if (!wc || wc.isDestroyed() || attached.has(wc)) {
|
|
21
|
+
if (wc && !wc.isDestroyed() && attached.has(wc))
|
|
22
|
+
override(wc, device);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
wc.debugger.attach('1.3');
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
// Already attached by an external --remote-debugging-port client (or
|
|
30
|
+
// DevTools). Degrade: leave env at 0 rather than fail the page.
|
|
31
|
+
console.warn('[safe-area] debugger.attach failed; env(safe-area-inset-*) stays 0:', err instanceof Error ? err.message : err);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
attached.add(wc);
|
|
35
|
+
if (options.connections) {
|
|
36
|
+
options.connections.acquire(wc).own(() => attached.delete(wc));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
wc.once('destroyed', () => attached.delete(wc));
|
|
40
|
+
}
|
|
41
|
+
override(wc, device);
|
|
42
|
+
},
|
|
43
|
+
reapplyAll: (device) => {
|
|
44
|
+
for (const wc of attached)
|
|
45
|
+
override(wc, device);
|
|
46
|
+
},
|
|
47
|
+
dispose: () => {
|
|
48
|
+
for (const wc of attached) {
|
|
49
|
+
try {
|
|
50
|
+
if (!wc.isDestroyed())
|
|
51
|
+
wc.debugger.detach();
|
|
52
|
+
}
|
|
53
|
+
catch { /* already detached / destroyed */ }
|
|
54
|
+
}
|
|
55
|
+
attached.clear();
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { BrowserWindow } from 'electron';
|
|
2
|
+
/**
|
|
3
|
+
* ServiceHostPool — main-process pre-warm pool for simulator host windows.
|
|
4
|
+
*
|
|
5
|
+
* Design source: `packages/devtools/docs/prewarm-webview.md`. WIRED into
|
|
6
|
+
* native-host via `bridge-router.handleSpawn` (acquire) + `disposeAppSession`
|
|
7
|
+
* (release / releaseDestroyed), opt-in behind `DIMINA_PREWARM_POOL_SIZE`
|
|
8
|
+
* (default OFF). Default-arch (`view-manager.attachSimulator`) is NOT pooled —
|
|
9
|
+
* its simulator is a `<webview>` tag, which Electron can't reparent a pre-warmed
|
|
10
|
+
* WebContents into (doc §5 Phase 4, blocked by that hard limit, not by missing
|
|
11
|
+
* work here).
|
|
12
|
+
*
|
|
13
|
+
* Lifecycle of a pool entry:
|
|
14
|
+
* warming — BrowserWindow constructed, page loading
|
|
15
|
+
* ready — load settled; can be handed to a caller immediately
|
|
16
|
+
* in-use — acquired by a caller (caller owns the window until release)
|
|
17
|
+
* resetting — released; navigated back to a blank page, then storage cleared
|
|
18
|
+
* disposing — being torn down; removed from the pool
|
|
19
|
+
*
|
|
20
|
+
* ── Phase-3 blockers, both RESOLVED in the wiring (kept here for context) ──
|
|
21
|
+
* 1. Shared-session storage wipe — the service host shares the
|
|
22
|
+
* `persist:simulator` partition with live projects, so clearing it on reset
|
|
23
|
+
* would wipe other projects. Resolved by `ServiceHostSpec.clearStorageOnReset`:
|
|
24
|
+
* `serviceHostSpec()` sets it `false`, so reset only navigates the
|
|
25
|
+
* window to blank (resetting the JS realm) and never clears the shared
|
|
26
|
+
* session; cross-spawn isolation rides on appId-namespacing + fresh nav,
|
|
27
|
+
* matching the already-shared simulator `<webview>` behavior.
|
|
28
|
+
* 2. Warming vs preload contract — warming loads `about:blank` (no bridgeId).
|
|
29
|
+
* `src/service-host/preload.cjs` now idles (early `return`) when `bridgeId`
|
|
30
|
+
* is absent instead of throwing, so a warmed window survives until the real
|
|
31
|
+
* spawn navigation re-runs the preload with a bridgeId.
|
|
32
|
+
*
|
|
33
|
+
* ── Window-death observation ───────────────────────────────────────────────
|
|
34
|
+
* A pooled/in-use window can die three ways: a render crash
|
|
35
|
+
* (`render-process-gone`), a graceful close (`'closed'`), or the owner closing
|
|
36
|
+
* an acquired window (reported via `releaseDestroyed`). All three funnel through
|
|
37
|
+
* `reclaim()`: a POOLED death frees a spare → refill toward target; an IN-USE
|
|
38
|
+
* death is the owner's window → drop the bookkeeping WITHOUT destroying it from
|
|
39
|
+
* under them, and do not refill (the spare count is unaffected).
|
|
40
|
+
*/
|
|
41
|
+
/** Entry state machine (see class doc). */
|
|
42
|
+
export type EntryState = 'warming' | 'ready' | 'in-use' | 'resetting' | 'disposing';
|
|
43
|
+
/**
|
|
44
|
+
* A spec fully determines whether a warm window can serve a caller. Reuse is
|
|
45
|
+
* keyed on `preloadPath`: a different preload means a different runtime surface,
|
|
46
|
+
* so the pool will not hand a mismatched entry to a caller.
|
|
47
|
+
*
|
|
48
|
+
* The process-model flags (`contextIsolation` / `sandbox` / `nodeIntegration`)
|
|
49
|
+
* default to the simulator service-host contract (all `false`, mirroring
|
|
50
|
+
* `createServiceHostWindow`) so a warmed window is a faithful stand-in for the
|
|
51
|
+
* window the caller will actually use. They are part of the spec — not
|
|
52
|
+
* hardcoded — so a caller with a different runtime can override them.
|
|
53
|
+
*/
|
|
54
|
+
export interface ServiceHostSpec {
|
|
55
|
+
/** Session partition for the window. Opaque to the pool (see KNOWN BLOCKER 1). */
|
|
56
|
+
partition: string;
|
|
57
|
+
/** Absolute path to the preload bundle. The reuse key. */
|
|
58
|
+
preloadPath: string;
|
|
59
|
+
/** Initial window size (affects first layout). */
|
|
60
|
+
size?: {
|
|
61
|
+
width: number;
|
|
62
|
+
height: number;
|
|
63
|
+
};
|
|
64
|
+
/** Open DevTools on the window (dev only). */
|
|
65
|
+
devTools?: boolean;
|
|
66
|
+
/** webPreferences.contextIsolation. Default false (service-host contract). */
|
|
67
|
+
contextIsolation?: boolean;
|
|
68
|
+
/** webPreferences.sandbox. Default false (service-host contract). */
|
|
69
|
+
sandbox?: boolean;
|
|
70
|
+
/** webPreferences.nodeIntegration. Default false (service-host contract). */
|
|
71
|
+
nodeIntegration?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Whether `release` clears this window's session storage. Default `true`.
|
|
74
|
+
* Set `false` when the window shares a session with live consumers (e.g. the
|
|
75
|
+
* service host on the shared `persist:simulator` partition) — clearing there
|
|
76
|
+
* would wipe other projects' storage. With `false`, reset still navigates the
|
|
77
|
+
* window to a blank page (tearing down the old JS realm); cross-spawn state is
|
|
78
|
+
* handled by appId-namespacing + the fresh navigation, matching the
|
|
79
|
+
* already-shared, never-cleared simulator `<webview>` behavior.
|
|
80
|
+
*/
|
|
81
|
+
clearStorageOnReset?: boolean;
|
|
82
|
+
}
|
|
83
|
+
/** Snapshot of pool occupancy, for dev panels / IPC `prewarm:status`. */
|
|
84
|
+
export interface ServiceHostPoolStats {
|
|
85
|
+
total: number;
|
|
86
|
+
ready: number;
|
|
87
|
+
inUse: number;
|
|
88
|
+
warming: number;
|
|
89
|
+
resetting: number;
|
|
90
|
+
spec: ServiceHostSpec | null;
|
|
91
|
+
}
|
|
92
|
+
export interface ServiceHostPoolInitOptions {
|
|
93
|
+
/** Number of entries to keep warm. Default target after init. */
|
|
94
|
+
defaultPoolSize: number;
|
|
95
|
+
/** Spec used to warm the initial entries. */
|
|
96
|
+
defaultSpec: ServiceHostSpec;
|
|
97
|
+
/** Hard ceiling on pooled entries. Clamped to ≤ 4 (doc §3.3). Default 3. */
|
|
98
|
+
maxPoolSize?: number;
|
|
99
|
+
}
|
|
100
|
+
export declare class ServiceHostPool {
|
|
101
|
+
private readonly entries;
|
|
102
|
+
private currentSpec;
|
|
103
|
+
private targetSize;
|
|
104
|
+
private maxPoolSize;
|
|
105
|
+
private nextId;
|
|
106
|
+
private disposed;
|
|
107
|
+
/**
|
|
108
|
+
* Warm `defaultPoolSize` entries with `defaultSpec`. Normally resolves once the
|
|
109
|
+
* pool has reached `defaultPoolSize` ready entries — even if a warming window
|
|
110
|
+
* crashes mid-init and is refilled. NOTE: `warmUpToTarget` caps its refill loop
|
|
111
|
+
* with a bounded guard, so under SUSTAINED warm crashes `init` resolves
|
|
112
|
+
* best-effort (possibly under-filled) rather than spinning forever — treat
|
|
113
|
+
* `getStats().ready` as advisory after init, not a hard invariant.
|
|
114
|
+
*/
|
|
115
|
+
init(opts: ServiceHostPoolInitOptions): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Hand a ready window matching `spec` to the caller. If none is ready, fall
|
|
118
|
+
* back to synchronously constructing a fresh window — never blocking on warm
|
|
119
|
+
* (doc §3.1 "绝不阻塞 acquire"). Fallback windows carry `entryId === null` and
|
|
120
|
+
* are destroyed (not pooled) on release.
|
|
121
|
+
*
|
|
122
|
+
* A spec change (different `preloadPath`) tears down all *pooled* entries and
|
|
123
|
+
* re-targets the pool to the new spec; in-use entries are left to their owners
|
|
124
|
+
* and disposed when returned (see `release`).
|
|
125
|
+
*/
|
|
126
|
+
acquire(spec: ServiceHostSpec): Promise<{
|
|
127
|
+
win: BrowserWindow;
|
|
128
|
+
entryId: string | null;
|
|
129
|
+
}>;
|
|
130
|
+
/**
|
|
131
|
+
* Return a window. Fallback windows (`entryId === null`) and entries whose
|
|
132
|
+
* spec no longer matches the current pool spec are torn down. Otherwise the
|
|
133
|
+
* window is reset (navigated to blank, then storage cleared) and re-pooled as
|
|
134
|
+
* `ready`, unless that would exceed `maxPoolSize`.
|
|
135
|
+
*/
|
|
136
|
+
release(entryId: string | null, win: BrowserWindow): Promise<void>;
|
|
137
|
+
/**
|
|
138
|
+
* The owner of an acquired window reports it died externally (graceful close /
|
|
139
|
+
* crash) — reclaim its in-use slot so it isn't leaked in `entries` forever
|
|
140
|
+
* (bridge-router calls this on the `serviceAlreadyClosed` teardown path, where
|
|
141
|
+
* `release` is intentionally skipped). No-op for an unknown id; idempotent;
|
|
142
|
+
* never touches the (already-gone) window.
|
|
143
|
+
*/
|
|
144
|
+
releaseDestroyed(entryId: string | null): void;
|
|
145
|
+
/**
|
|
146
|
+
* Re-target the pool. `target` is clamped to `[0, maxPoolSize]`. Pooled
|
|
147
|
+
* entries beyond the target are disposed OLDEST-FIRST (doc §3.3/§3.6); in-use
|
|
148
|
+
* entries are untouched. Does not warm new entries up (use `init` / refill).
|
|
149
|
+
*/
|
|
150
|
+
resize(target: number): void;
|
|
151
|
+
/** Occupancy snapshot. */
|
|
152
|
+
getStats(): ServiceHostPoolStats;
|
|
153
|
+
/** Tear down every entry and stop accepting work. */
|
|
154
|
+
dispose(): Promise<void>;
|
|
155
|
+
private matches;
|
|
156
|
+
/** ready + warming + resetting entries are "pooled" (owned by the pool). */
|
|
157
|
+
private isWarm;
|
|
158
|
+
private warmCount;
|
|
159
|
+
private readyCount;
|
|
160
|
+
/**
|
|
161
|
+
* Drive the pool to `targetSize` ready entries and resolve only then. Loops so
|
|
162
|
+
* a crash that drops a warming entry mid-init (which refills asynchronously
|
|
163
|
+
* via `onGone`) is awaited too, instead of resolving on a stale snapshot. A
|
|
164
|
+
* generous iteration guard prevents an unbounded spin if windows keep dying.
|
|
165
|
+
*/
|
|
166
|
+
private warmUpToTarget;
|
|
167
|
+
private createWindow;
|
|
168
|
+
private loadBlank;
|
|
169
|
+
/** Construct + load a fresh pooled entry, registering crash recovery. */
|
|
170
|
+
private warmOne;
|
|
171
|
+
/**
|
|
172
|
+
* Reset a released window back to a clean, blank state. Order matters
|
|
173
|
+
* (doc §3.5.3 / §3.4「等待时序」): navigate to blank FIRST so the old document
|
|
174
|
+
* stops running and in-flight requests are aborted, THEN clear storage — so a
|
|
175
|
+
* still-live old page cannot re-populate storage after the clear.
|
|
176
|
+
*/
|
|
177
|
+
private reset;
|
|
178
|
+
/** A spec change tears down pooled entries and re-targets the pool. */
|
|
179
|
+
private onSpecChange;
|
|
180
|
+
/**
|
|
181
|
+
* Reclaim an entry whose window died externally (render crash, graceful close,
|
|
182
|
+
* or an owner-reported destruction). A POOLED death frees a spare → refill
|
|
183
|
+
* toward target; an IN-USE death is the caller's window → drop the bookkeeping
|
|
184
|
+
* WITHOUT destroying it from under them, and do not refill (the spare count is
|
|
185
|
+
* unaffected). `destroyIfPooled` destroys the husk for a pooled render crash
|
|
186
|
+
* (the BrowserWindow object can outlive a dead render process); skip it for a
|
|
187
|
+
* `'closed'`/owner-reported window that is already gone. No-op if the entry was
|
|
188
|
+
* already disposed by us (disposeEntry deletes before its own destroy fires
|
|
189
|
+
* `'closed'`, so this finds nothing).
|
|
190
|
+
*/
|
|
191
|
+
private reclaim;
|
|
192
|
+
/** A pooled window's render process died — reclaim + refill (destroy the husk). */
|
|
193
|
+
private onGone;
|
|
194
|
+
private disposeEntry;
|
|
195
|
+
private destroyWindow;
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=pool.d.ts.map
|