@dimina-kit/devtools 0.3.1 → 0.3.2-dev.20260522085907
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 +297 -133
- package/dist/main/api.d.ts +6 -2
- package/dist/main/api.js +5 -2
- package/dist/main/app/app.d.ts +1 -1
- package/dist/main/app/app.js +84 -36
- package/dist/main/app/bootstrap.js +2 -1
- package/dist/main/app/launch.d.ts +2 -2
- package/dist/main/app/launch.js +10 -8
- package/dist/main/index.bundle.js +1567 -477
- package/dist/main/ipc/app.d.ts +2 -1
- package/dist/main/ipc/app.js +5 -4
- package/dist/main/ipc/index.d.ts +5 -4
- package/dist/main/ipc/index.js +5 -4
- package/dist/main/ipc/panels.d.ts +2 -1
- package/dist/main/ipc/panels.js +16 -13
- package/dist/main/ipc/popover.d.ts +4 -1
- package/dist/main/ipc/popover.js +15 -5
- package/dist/main/ipc/projects.d.ts +6 -1
- package/dist/main/ipc/projects.js +127 -6
- package/dist/main/ipc/session.d.ts +4 -1
- package/dist/main/ipc/session.js +34 -6
- package/dist/main/ipc/settings.d.ts +4 -1
- package/dist/main/ipc/settings.js +51 -23
- package/dist/main/ipc/simulator-module.d.ts +8 -0
- package/dist/main/ipc/simulator-module.js +19 -0
- package/dist/main/ipc/simulator.d.ts +2 -1
- package/dist/main/ipc/simulator.js +23 -18
- package/dist/main/ipc/toolbar.d.ts +2 -1
- package/dist/main/ipc/toolbar.js +3 -2
- package/dist/main/menu/index.js +11 -0
- package/dist/main/services/automation/exec.d.ts +2 -0
- package/dist/main/services/automation/exec.js +7 -9
- package/dist/main/services/automation/handlers/app.js +37 -51
- package/dist/main/services/automation/handlers/element.js +27 -41
- package/dist/main/services/automation/index.js +88 -13
- package/dist/main/services/default-adapter.js +3 -3
- package/dist/main/services/mcp/index.d.ts +1 -0
- package/dist/main/services/mcp/index.js +1 -0
- package/dist/main/services/mcp/server.d.ts +2 -1
- package/dist/main/services/mcp/server.js +10 -0
- package/dist/main/services/mcp/status.d.ts +10 -0
- package/dist/main/services/mcp/status.js +14 -0
- package/dist/main/services/mcp/target-manager.js +2 -1
- package/dist/main/services/module.d.ts +18 -0
- package/dist/main/services/module.js +2 -0
- package/dist/main/services/notifications/renderer-notifier.d.ts +5 -3
- package/dist/main/services/notifications/renderer-notifier.js +3 -6
- package/dist/main/services/projects/builtin-templates.d.ts +3 -0
- package/dist/main/services/projects/builtin-templates.js +24 -0
- package/dist/main/services/projects/create-project-service.d.ts +7 -0
- package/dist/main/services/projects/create-project-service.js +84 -0
- package/dist/main/services/projects/index.d.ts +7 -0
- package/dist/main/services/projects/index.js +9 -0
- package/dist/main/services/projects/local-provider.d.ts +3 -0
- package/dist/main/services/projects/local-provider.js +25 -0
- package/dist/main/services/projects/project-repository.d.ts +1 -1
- package/dist/main/services/projects/project-repository.js +3 -0
- package/dist/main/services/projects/templates.d.ts +21 -0
- package/dist/main/services/projects/templates.js +39 -0
- package/dist/main/services/projects/thumbnail.d.ts +8 -0
- package/dist/main/services/projects/thumbnail.js +37 -0
- package/dist/main/services/projects/types.d.ts +118 -0
- package/dist/main/services/projects/types.js +19 -0
- package/dist/main/services/settings/index.d.ts +11 -0
- package/dist/main/services/settings/index.js +18 -2
- package/dist/main/services/simulator/custom-apis.d.ts +10 -0
- package/dist/main/services/simulator/custom-apis.js +26 -0
- package/dist/main/services/simulator-storage/index.d.ts +22 -1
- package/dist/main/services/simulator-storage/index.js +334 -97
- package/dist/main/services/update/update-manager.d.ts +16 -1
- package/dist/main/services/update/update-manager.js +18 -15
- package/dist/main/services/views/view-manager.d.ts +7 -7
- package/dist/main/services/views/view-manager.js +53 -29
- package/dist/main/services/window-service.d.ts +24 -0
- package/dist/main/services/window-service.js +26 -0
- package/dist/main/services/workbench-context.d.ts +49 -2
- package/dist/main/services/workbench-context.js +15 -2
- package/dist/main/services/workspace/workspace-service.d.ts +9 -6
- package/dist/main/services/workspace/workspace-service.js +71 -11
- package/dist/main/simulator-apis.d.ts +23 -0
- package/dist/main/simulator-apis.js +24 -0
- package/dist/main/utils/disposable.d.ts +13 -0
- package/dist/main/utils/disposable.js +60 -0
- package/dist/main/utils/ipc-registry.d.ts +39 -0
- package/dist/main/utils/ipc-registry.js +109 -0
- package/dist/main/utils/ipc-schema.d.ts +28 -0
- package/dist/main/utils/ipc-schema.js +38 -0
- package/dist/main/utils/paths.d.ts +6 -0
- package/dist/main/utils/paths.js +6 -0
- package/dist/main/utils/sender-policy.d.ts +25 -0
- package/dist/main/utils/sender-policy.js +44 -0
- package/dist/main/utils/theme.d.ts +24 -0
- package/dist/main/utils/theme.js +38 -1
- package/dist/main/windows/main-window/create.d.ts +6 -0
- package/dist/main/windows/main-window/create.js +66 -10
- package/dist/main/windows/main-window/events.d.ts +2 -1
- package/dist/main/windows/main-window/events.js +25 -2
- package/dist/main/windows/navigation-hardening.d.ts +24 -0
- package/dist/main/windows/navigation-hardening.js +55 -0
- package/dist/main/windows/settings-window/create.js +11 -1
- package/dist/preload/index.d.ts +22 -0
- package/dist/preload/index.js +19 -0
- package/dist/preload/instrumentation/app-data.d.ts +32 -2
- package/dist/preload/instrumentation/app-data.js +253 -79
- package/dist/preload/instrumentation/index.d.ts +2 -2
- package/dist/preload/instrumentation/index.js +2 -2
- package/dist/preload/instrumentation/wxml.d.ts +16 -4
- package/dist/preload/instrumentation/wxml.js +188 -178
- package/dist/preload/miniapp-snapshot/host.d.ts +12 -0
- package/dist/preload/miniapp-snapshot/host.js +117 -0
- package/dist/preload/miniapp-snapshot/types.d.ts +62 -0
- package/dist/preload/miniapp-snapshot/types.js +15 -0
- package/dist/preload/runtime/bridge.js +5 -24
- package/dist/preload/runtime/custom-apis.d.ts +6 -0
- package/dist/preload/runtime/custom-apis.js +43 -0
- package/dist/preload/runtime/host.d.ts +1 -0
- package/dist/preload/runtime/host.js +13 -0
- package/dist/preload/shared/expose.d.ts +15 -0
- package/dist/preload/shared/expose.js +33 -0
- package/dist/preload/shared/page-iframe.d.ts +3 -0
- package/dist/preload/shared/page-iframe.js +6 -0
- package/dist/preload/shared/types.d.ts +2 -0
- package/dist/preload/windows/main.cjs +47 -0
- package/dist/preload/windows/main.cjs.map +7 -0
- package/dist/preload/windows/simulator.js +501 -272
- package/dist/renderer/assets/constants-DI382mTP.js +2 -0
- package/dist/renderer/assets/index-D8VFYBh-.js +46 -0
- package/dist/renderer/assets/{input-DxfYnzX_.js → input-CoWcfa8u.js} +2 -2
- package/dist/renderer/assets/ipc-transport-Cd2xPrsa.js +9 -0
- package/dist/renderer/assets/ipc-transport-DqbRdZNO.css +1 -0
- package/dist/renderer/assets/popover-Nq5gT9DO.js +2 -0
- package/dist/renderer/assets/select-By5KH-UG.js +2 -0
- package/dist/renderer/assets/{settings-DteGraEU.js → settings-Dj_N70qR.js} +2 -2
- package/dist/renderer/assets/settings-api-Do0_Smq1.js +2 -0
- package/dist/renderer/assets/workbenchSettings-CazSLGYt.js +8 -0
- package/dist/renderer/entries/main/index.html +13 -5
- package/dist/renderer/entries/popover/index.html +8 -5
- package/dist/renderer/entries/settings/index.html +7 -5
- package/dist/renderer/entries/workbench-settings/index.html +7 -4
- package/dist/shared/ipc-channels.d.ts +46 -13
- package/dist/shared/ipc-channels.js +60 -14
- package/dist/shared/ipc-schemas.d.ts +118 -0
- package/dist/shared/ipc-schemas.js +133 -0
- package/dist/shared/simulator-route.d.ts +72 -0
- package/dist/shared/simulator-route.js +169 -0
- package/dist/shared/types.d.ts +82 -8
- package/dist/simulator/assets/simulator-DJCozrU5.js +9 -0
- package/dist/simulator/simulator.html +6 -43
- package/package.json +18 -29
- package/templates/blank/app.js +6 -0
- package/templates/blank/app.json +11 -0
- package/templates/blank/app.wxss +5 -0
- package/templates/blank/pages/index/index.js +6 -0
- package/templates/blank/pages/index/index.json +3 -0
- package/templates/blank/pages/index/index.wxml +3 -0
- package/templates/blank/pages/index/index.wxss +11 -0
- package/templates/blank/project.config.json +13 -0
- package/templates/blank/sitemap.json +9 -0
- package/templates/taro-todo/app.js +1 -0
- package/templates/taro-todo/app.json +1 -0
- package/templates/taro-todo/app.wxss +1 -0
- package/templates/taro-todo/base.wxml +851 -0
- package/templates/taro-todo/common.js +1 -0
- package/templates/taro-todo/comp.js +1 -0
- package/templates/taro-todo/comp.json +1 -0
- package/templates/taro-todo/comp.wxml +2 -0
- package/templates/taro-todo/custom-wrapper.js +1 -0
- package/templates/taro-todo/custom-wrapper.json +1 -0
- package/templates/taro-todo/custom-wrapper.wxml +4 -0
- package/templates/taro-todo/pages/index/index.js +2 -0
- package/templates/taro-todo/pages/index/index.json +1 -0
- package/templates/taro-todo/pages/index/index.wxml +2 -0
- package/templates/taro-todo/pages/index/index.wxss +1 -0
- package/templates/taro-todo/project.config.json +44 -0
- package/templates/taro-todo/runtime.js +1 -0
- package/templates/taro-todo/taro.js +2 -0
- package/templates/taro-todo/utils.wxs +39 -0
- package/templates/taro-todo/vendors.js +2 -0
- package/dist/preload/instrumentation/disposable.d.ts +0 -11
- package/dist/preload/instrumentation/disposable.js +0 -15
- package/dist/preload/windows/main.d.ts +0 -6
- package/dist/preload/windows/main.js +0 -6
- package/dist/renderer/assets/index-D1p6crtf.js +0 -46
- package/dist/renderer/assets/ipc-transport-ClIvDcYY.js +0 -9
- package/dist/renderer/assets/ipc-transport-EiWxu_hG.css +0 -1
- package/dist/renderer/assets/popover-CtXcBJtM.js +0 -2
- package/dist/renderer/assets/select-DMfp49f1.js +0 -2
- package/dist/renderer/assets/settings-api-CY84UMpN.js +0 -2
- package/dist/renderer/assets/workbenchSettings-DjELLnSJ.js +0 -8
- package/dist/simulator/assets/simulator-C1eHXnuq.js +0 -9
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ipcRenderer } from 'electron';
|
|
2
|
+
import { SimulatorCustomApiBridgeChannel } from '../../shared/ipc-channels.js';
|
|
3
|
+
import { exposeOnMainWorld } from '../shared/expose.js';
|
|
4
|
+
// The simulator <webview> is intentionally kept off the workbench sender-policy
|
|
5
|
+
// white-list, so it cannot reach `ipcMain.handle` directly. Instead the bridge
|
|
6
|
+
// asks the trusted main-window renderer to proxy the call: webview sends via
|
|
7
|
+
// `ipcRenderer.sendToHost`, host does the `ipcInvoke`, and posts the result
|
|
8
|
+
// back through `<webview>.send`. Requests and responses are correlated by id
|
|
9
|
+
// so concurrent invokes do not tangle.
|
|
10
|
+
function buildBridge() {
|
|
11
|
+
let nextId = 1;
|
|
12
|
+
const pending = new Map();
|
|
13
|
+
ipcRenderer.on(SimulatorCustomApiBridgeChannel.Response, (_event, payload) => {
|
|
14
|
+
const entry = pending.get(payload.id);
|
|
15
|
+
if (!entry)
|
|
16
|
+
return;
|
|
17
|
+
pending.delete(payload.id);
|
|
18
|
+
if ('error' in payload) {
|
|
19
|
+
entry.reject(new Error(payload.error));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
entry.resolve(payload.result);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
const send = (req) => {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
pending.set(req.id, {
|
|
28
|
+
resolve: (value) => resolve(value),
|
|
29
|
+
reject,
|
|
30
|
+
});
|
|
31
|
+
ipcRenderer.sendToHost(SimulatorCustomApiBridgeChannel.Request, req);
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
list: () => send({ id: nextId++, op: 'list' }),
|
|
36
|
+
invoke: (name, params) => send({ id: nextId++, op: 'invoke', name, params }),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function installCustomApisBridge() {
|
|
40
|
+
const bridge = buildBridge();
|
|
41
|
+
return exposeOnMainWorld('__diminaCustomApis', bridge);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=custom-apis.js.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare function sendToHost(channel: string, data: unknown): void;
|
|
2
|
+
export declare function onHostMessage(channel: string, handler: (...args: unknown[]) => void): () => void;
|
|
2
3
|
export declare function safeSerialize(val: unknown): unknown;
|
|
3
4
|
//# sourceMappingURL=host.d.ts.map
|
|
@@ -2,6 +2,19 @@ import { ipcRenderer } from 'electron';
|
|
|
2
2
|
export function sendToHost(channel, data) {
|
|
3
3
|
ipcRenderer.sendToHost(channel, data);
|
|
4
4
|
}
|
|
5
|
+
export function onHostMessage(channel, handler) {
|
|
6
|
+
let active = true;
|
|
7
|
+
const wrapped = (_event, ...args) => {
|
|
8
|
+
if (!active)
|
|
9
|
+
return;
|
|
10
|
+
handler(...args);
|
|
11
|
+
};
|
|
12
|
+
ipcRenderer.on(channel, wrapped);
|
|
13
|
+
return () => {
|
|
14
|
+
active = false;
|
|
15
|
+
ipcRenderer.removeListener(channel, wrapped);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
5
18
|
export function safeSerialize(val) {
|
|
6
19
|
if (val === null || val === undefined)
|
|
7
20
|
return val;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expose `value` on the renderer's main world under `key`.
|
|
3
|
+
*
|
|
4
|
+
* Prefers Electron's `contextBridge` (the path that works with
|
|
5
|
+
* `contextIsolation: true`). When `contextBridge` is unavailable — e.g. a
|
|
6
|
+
* webview running without context isolation — it falls back to assigning
|
|
7
|
+
* `value` directly onto the preload realm's `window`.
|
|
8
|
+
*
|
|
9
|
+
* Returns a disposer. It can only undo the fallback assignment (a
|
|
10
|
+
* `contextBridge` binding cannot be un-exposed); on the contextBridge path
|
|
11
|
+
* the disposer is a no-op. The disposer never clobbers a `window[key]` that
|
|
12
|
+
* something else has since reassigned.
|
|
13
|
+
*/
|
|
14
|
+
export declare function exposeOnMainWorld(key: string, value: unknown): () => void;
|
|
15
|
+
//# sourceMappingURL=expose.d.ts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { contextBridge } from 'electron';
|
|
2
|
+
/**
|
|
3
|
+
* Expose `value` on the renderer's main world under `key`.
|
|
4
|
+
*
|
|
5
|
+
* Prefers Electron's `contextBridge` (the path that works with
|
|
6
|
+
* `contextIsolation: true`). When `contextBridge` is unavailable — e.g. a
|
|
7
|
+
* webview running without context isolation — it falls back to assigning
|
|
8
|
+
* `value` directly onto the preload realm's `window`.
|
|
9
|
+
*
|
|
10
|
+
* Returns a disposer. It can only undo the fallback assignment (a
|
|
11
|
+
* `contextBridge` binding cannot be un-exposed); on the contextBridge path
|
|
12
|
+
* the disposer is a no-op. The disposer never clobbers a `window[key]` that
|
|
13
|
+
* something else has since reassigned.
|
|
14
|
+
*/
|
|
15
|
+
export function exposeOnMainWorld(key, value) {
|
|
16
|
+
let fellBack = false;
|
|
17
|
+
try {
|
|
18
|
+
contextBridge.exposeInMainWorld(key, value);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
;
|
|
22
|
+
window[key] = value;
|
|
23
|
+
fellBack = true;
|
|
24
|
+
}
|
|
25
|
+
return () => {
|
|
26
|
+
if (!fellBack)
|
|
27
|
+
return;
|
|
28
|
+
const w = window;
|
|
29
|
+
if (w[key] === value)
|
|
30
|
+
delete w[key];
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=expose.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Locate the active page's webview iframe — the last one in the simulator stack. */
|
|
2
|
+
export function getActivePageIframe() {
|
|
3
|
+
const iframes = document.querySelectorAll('.dimina-native-webview__window');
|
|
4
|
+
return iframes.length > 0 ? iframes[iframes.length - 1] : null;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=page-iframe.js.map
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { Snapshot, StorageSnapshot, WxmlNode } from '../runtime/bridge.js';
|
|
8
8
|
import type { ElementInspection } from '../../shared/ipc-channels.js';
|
|
9
|
+
import type { MiniappSnapshotApi } from '../miniapp-snapshot/types.js';
|
|
9
10
|
/** The simulator data bridge exposed via contextBridge. */
|
|
10
11
|
export interface SimulatorDataBridge {
|
|
11
12
|
getAppdata: () => Record<string, unknown>;
|
|
@@ -30,6 +31,7 @@ declare global {
|
|
|
30
31
|
__simulatorData?: SimulatorDataBridge;
|
|
31
32
|
__deviceInfo?: unknown;
|
|
32
33
|
__simulatorHook?: SimulatorHook;
|
|
34
|
+
__miniappSnapshot?: MiniappSnapshotApi;
|
|
33
35
|
}
|
|
34
36
|
}
|
|
35
37
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
|
|
16
|
+
// src/preload/windows/main.ts
|
|
17
|
+
var main_exports = {};
|
|
18
|
+
module.exports = __toCommonJS(main_exports);
|
|
19
|
+
var import_electron = require("electron");
|
|
20
|
+
var api = {
|
|
21
|
+
ipc: {
|
|
22
|
+
invoke: (channel, ...args) => import_electron.ipcRenderer.invoke(channel, ...args),
|
|
23
|
+
send: (channel, ...args) => {
|
|
24
|
+
import_electron.ipcRenderer.send(channel, ...args);
|
|
25
|
+
},
|
|
26
|
+
on: (channel, listener) => {
|
|
27
|
+
import_electron.ipcRenderer.on(channel, listener);
|
|
28
|
+
return () => import_electron.ipcRenderer.removeListener(channel, listener);
|
|
29
|
+
},
|
|
30
|
+
once: (channel, listener) => {
|
|
31
|
+
import_electron.ipcRenderer.once(channel, listener);
|
|
32
|
+
},
|
|
33
|
+
removeListener: (channel, listener) => {
|
|
34
|
+
import_electron.ipcRenderer.removeListener(channel, listener);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
import_electron.contextBridge.exposeInMainWorld("devtools", api);
|
|
39
|
+
if (process.env.NODE_ENV === "test") {
|
|
40
|
+
import_electron.contextBridge.exposeInMainWorld("__testIpc", {
|
|
41
|
+
emit: (channel, ...args) => {
|
|
42
|
+
;
|
|
43
|
+
import_electron.ipcRenderer.emit(channel, ...args);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=main.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/preload/windows/main.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Preload bridge for the main window, settings window, settings overlay\n * view, and popover overlay view. Exposes a minimal, typed `window.devtools`\n * surface so the renderer never has to call `window.require('electron')`.\n *\n * This file is bundled by esbuild to CJS at `dist/preload/windows/main.js`\n * (see package.json `build:preload`). It must remain a leaf module \u2014 do\n * NOT import other preload files via `.js` ESM specifiers; everything goes\n * through the Electron `contextBridge` / `ipcRenderer` runtime.\n *\n * Channel governance lives in the main process: `sender-policy.ts` plus the\n * per-handler zod schemas decide what's accepted. The preload layer is a\n * thin pass-through \u2014 a renderer inventing channel names will just hit a\n * main-side rejection, so duplicating an allowlist here added no real\n * defense for a devtool that loads user-trusted mini-programs.\n */\nimport { contextBridge, ipcRenderer, type IpcRendererEvent } from 'electron'\n\nconst api = {\n ipc: {\n invoke: (channel: string, ...args: unknown[]) => ipcRenderer.invoke(channel, ...args),\n send: (channel: string, ...args: unknown[]) => {\n ipcRenderer.send(channel, ...args)\n },\n on: (\n channel: string,\n listener: (event: IpcRendererEvent, ...args: unknown[]) => void,\n ) => {\n ipcRenderer.on(channel, listener)\n return () => ipcRenderer.removeListener(channel, listener)\n },\n once: (\n channel: string,\n listener: (event: IpcRendererEvent, ...args: unknown[]) => void,\n ) => {\n ipcRenderer.once(channel, listener)\n },\n removeListener: (\n channel: string,\n listener: (...args: unknown[]) => void,\n ) => {\n ipcRenderer.removeListener(channel, listener)\n },\n },\n}\n\n// All host windows that load this preload run with `contextIsolation: true`\n// (main / settings / view-manager), so `contextBridge` is the path that\n// reaches the renderer's `window`. The simulator <webview> uses a separate\n// preload (`simulator.ts`).\ncontextBridge.exposeInMainWorld('devtools', api)\n\n// Test-only hatch: e2e helpers emit synthetic IPC events on the renderer's\n// ipcRenderer instance to trigger handlers registered via `devtools.ipc.on`\n// without round-tripping through the main process. Gated on NODE_ENV so\n// production builds never expose it.\nif (process.env.NODE_ENV === 'test') {\n contextBridge.exposeInMainWorld('__testIpc', {\n emit: (channel: string, ...args: unknown[]) => {\n ;(ipcRenderer as unknown as { emit: (c: string, ...a: unknown[]) => void }).emit(channel, ...args)\n },\n })\n}\n\nexport type DevtoolsApi = typeof api\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAgBA,sBAAkE;AAElE,IAAM,MAAM;AAAA,EACV,KAAK;AAAA,IACH,QAAQ,CAAC,YAAoB,SAAoB,4BAAY,OAAO,SAAS,GAAG,IAAI;AAAA,IACpF,MAAM,CAAC,YAAoB,SAAoB;AAC7C,kCAAY,KAAK,SAAS,GAAG,IAAI;AAAA,IACnC;AAAA,IACA,IAAI,CACF,SACA,aACG;AACH,kCAAY,GAAG,SAAS,QAAQ;AAChC,aAAO,MAAM,4BAAY,eAAe,SAAS,QAAQ;AAAA,IAC3D;AAAA,IACA,MAAM,CACJ,SACA,aACG;AACH,kCAAY,KAAK,SAAS,QAAQ;AAAA,IACpC;AAAA,IACA,gBAAgB,CACd,SACA,aACG;AACH,kCAAY,eAAe,SAAS,QAAQ;AAAA,IAC9C;AAAA,EACF;AACF;AAMA,8BAAc,kBAAkB,YAAY,GAAG;AAM/C,IAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,gCAAc,kBAAkB,aAAa;AAAA,IAC3C,MAAM,CAAC,YAAoB,SAAoB;AAC7C;AAAC,MAAC,4BAA0E,KAAK,SAAS,GAAG,IAAI;AAAA,IACnG;AAAA,EACF,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|