@dimina-kit/devtools 0.3.2-dev.20260611060732 → 0.3.2-dev.20260611135124
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -25
- package/dist/main/api.d.ts +4 -2
- package/dist/main/api.js +5 -1
- package/dist/main/app/app.d.ts +1 -5
- package/dist/main/app/app.js +4 -16
- package/dist/main/index.bundle.js +233 -366
- package/dist/main/ipc/app.d.ts +1 -1
- package/dist/main/ipc/app.js +0 -7
- package/dist/main/ipc/index.d.ts +0 -2
- package/dist/main/ipc/index.js +0 -2
- package/dist/main/ipc/settings.d.ts +1 -1
- package/dist/main/ipc/settings.js +1 -13
- package/dist/main/ipc/simulator-module.d.ts +3 -3
- package/dist/main/ipc/simulator-module.js +3 -7
- package/dist/main/ipc/simulator.js +1 -12
- package/dist/main/runtime/miniapp-runtime.d.ts +138 -28
- package/dist/main/runtime/miniapp-runtime.js +6 -11
- package/dist/main/services/layout/index.d.ts +0 -11
- package/dist/main/services/layout/index.js +0 -23
- package/dist/main/services/notifications/renderer-notifier.d.ts +0 -6
- package/dist/main/services/notifications/renderer-notifier.js +1 -10
- package/dist/main/services/service-host-pool/pool.d.ts +5 -4
- package/dist/main/services/views/host-toolbar-port-channel.d.ts +93 -0
- package/dist/main/services/views/host-toolbar-port-channel.js +169 -0
- package/dist/main/services/views/host-toolbar-session-runtime.d.ts +35 -0
- package/dist/main/services/views/host-toolbar-session-runtime.js +55 -0
- package/dist/main/services/views/view-manager.d.ts +68 -39
- package/dist/main/services/views/view-manager.js +143 -182
- package/dist/main/services/workbench-context.d.ts +5 -20
- package/dist/main/services/workbench-context.js +0 -14
- package/dist/main/utils/paths.d.ts +11 -2
- package/dist/main/utils/paths.js +11 -2
- package/dist/preload/index.d.ts +15 -0
- package/dist/preload/index.js +15 -0
- package/dist/preload/runtime/host-toolbar-port.d.ts +44 -0
- package/dist/preload/runtime/host-toolbar-port.js +127 -0
- package/dist/preload/runtime/host-toolbar-runtime.d.ts +41 -0
- package/dist/preload/runtime/host-toolbar-runtime.js +49 -0
- package/dist/preload/windows/{host-toolbar.cjs → host-toolbar-runtime.cjs} +94 -3
- package/dist/preload/windows/host-toolbar-runtime.cjs.map +7 -0
- package/dist/preload/windows/host-toolbar-runtime.d.ts +2 -0
- package/dist/preload/windows/host-toolbar-runtime.js +13 -0
- package/dist/preload/windows/simulator.cjs +0 -2
- package/dist/preload/windows/simulator.cjs.map +2 -2
- package/dist/preload/windows/simulator.js +0 -2
- package/dist/renderer/assets/constants-DI382mTP.js +2 -0
- package/dist/renderer/assets/index-DLzjz1wv.js +50 -0
- package/dist/renderer/assets/{input-QGx6FFX1.js → input-6fpCXV-n.js} +2 -2
- package/dist/renderer/assets/ipc-transport-Bs8Sf1B2.css +1 -0
- package/dist/renderer/assets/{ipc-transport-DvZvwK-Z.js → ipc-transport-D22e4dv7.js} +6 -6
- package/dist/renderer/assets/popover-CdGdKkkc.js +2 -0
- package/dist/renderer/assets/select-X0sbjwdP.js +2 -0
- package/dist/renderer/assets/{settings-DpAbTJyF.js → settings-CS4jYaCw.js} +2 -2
- package/dist/renderer/assets/settings-api-CCWTAao_.js +2 -0
- package/dist/renderer/assets/workbenchSettings-Bpzaj3bm.js +8 -0
- package/dist/renderer/entries/main/index.html +7 -6
- package/dist/renderer/entries/popover/index.html +6 -6
- package/dist/renderer/entries/settings/index.html +5 -5
- package/dist/renderer/entries/workbench-settings/index.html +5 -5
- package/dist/shared/constants.d.ts +18 -0
- package/dist/shared/constants.js +18 -0
- package/dist/shared/ipc-channels.d.ts +10 -23
- package/dist/shared/ipc-channels.js +13 -34
- package/dist/shared/ipc-schemas.d.ts +0 -12
- package/dist/shared/ipc-schemas.js +0 -12
- package/dist/shared/types.d.ts +14 -30
- package/package.json +8 -8
- package/dist/main/ipc/panels.d.ts +0 -4
- package/dist/main/ipc/panels.js +0 -46
- package/dist/main/ipc/toolbar.d.ts +0 -4
- package/dist/main/ipc/toolbar.js +0 -21
- package/dist/main/services/toolbar/toolbar-store.d.ts +0 -23
- package/dist/main/services/toolbar/toolbar-store.js +0 -23
- package/dist/preload/windows/host-toolbar.cjs.map +0 -7
- package/dist/preload/windows/host-toolbar.d.ts +0 -2
- package/dist/preload/windows/host-toolbar.js +0 -12
- package/dist/renderer/assets/constants-CLAQX6VZ.js +0 -2
- package/dist/renderer/assets/index-CcJKzatF.js +0 -50
- package/dist/renderer/assets/ipc-transport-BT4QYQqu.css +0 -1
- package/dist/renderer/assets/popover-BOH1If1J.js +0 -2
- package/dist/renderer/assets/select-C7JQ8G5N.js +0 -2
- package/dist/renderer/assets/settings-api-RD2IZF53.js +0 -2
- package/dist/renderer/assets/workbenchSettings-CNJX4Qna.js +0 -8
package/README.md
CHANGED
|
@@ -41,7 +41,6 @@ launch({
|
|
|
41
41
|
preloadPath: '/path/to/my-preload.js',
|
|
42
42
|
rendererDir,
|
|
43
43
|
apiNamespaces: ['my'],
|
|
44
|
-
headerHeight: 72,
|
|
45
44
|
brandingProvider: () => ({ appName: '我的开发工具' }),
|
|
46
45
|
icon: '/path/to/icon.png',
|
|
47
46
|
menuBuilder: (mainWindow, menuCtx) => {
|
|
@@ -54,13 +53,6 @@ launch({
|
|
|
54
53
|
// simulator 自定义 API:per-context
|
|
55
54
|
instance.registerSimulatorApi('login', (params) => myLogin(params))
|
|
56
55
|
|
|
57
|
-
// 工具栏:整表替换,随 host 状态(如登录态)重算时再 set 一次
|
|
58
|
-
const refreshToolbar = () => instance.toolbar.set([
|
|
59
|
-
{ id: 'deploy', label: '发布', handler: () => deploy() },
|
|
60
|
-
{ id: 'preview', label: '预览', handler: () => preview() },
|
|
61
|
-
])
|
|
62
|
-
refreshToolbar()
|
|
63
|
-
|
|
64
56
|
// 自定义 IPC:经 gated 的 IpcRegistry,不再裸 ipcMain.handle
|
|
65
57
|
instance.ipc.handle('my:action', () => collectStats())
|
|
66
58
|
|
|
@@ -95,9 +87,7 @@ src/
|
|
|
95
87
|
lifecycle.ts # Electron app 生命周期注册
|
|
96
88
|
ipc/ # 只做 handler 注册,不写业务
|
|
97
89
|
index.ts # 聚合 register 函数导出
|
|
98
|
-
simulator.ts # simulator attach/detach
|
|
99
|
-
panels.ts # panel:list / panel:eval / selectSimulator
|
|
100
|
-
toolbar.ts # 品牌 / 工具栏配置
|
|
90
|
+
simulator.ts # simulator attach/detach/设备信息/custom-api invoke
|
|
101
91
|
popover.ts # 编译配置弹窗
|
|
102
92
|
settings.ts # 项目设置 + workbench 设置
|
|
103
93
|
projects.ts # 项目列表管理
|
|
@@ -187,11 +177,11 @@ src/
|
|
|
187
177
|
| ------------------ | -------------------- | ------------------- | ---------------------------------- |
|
|
188
178
|
| `appName` | `string` | `'Dimina DevTools'` | 窗口标题 |
|
|
189
179
|
| `adapter` | `CompilationAdapter` | 内置 | 项目编译适配器 |
|
|
190
|
-
| `panels` | `BuiltinPanelId[]` |
|
|
180
|
+
| `panels` | `BuiltinPanelId[]` | — | **已废弃,运行时忽略**:界面恒显示全部四个内置面板;保留字段仅为兼容仍传它的 host |
|
|
191
181
|
| `preloadPath` | `string` | 内置 | 统一的 host 级 preload 入口;native-host simulator(WCV)自动跑其 `.cjs` sibling(`cjsSiblingPreloadPath`) |
|
|
192
182
|
| `apiNamespaces` | `string[]` | `[]` | 自定义 API 命名空间(如 `['qd']`) |
|
|
193
183
|
| `brandingProvider` | `() => { appName }` | — | 品牌信息 provider |
|
|
194
|
-
| `headerHeight` | `number` |
|
|
184
|
+
| `headerHeight` | `number` | — | **已废弃,运行时忽略**:头部栏恒为 40px(`HEADER_H`);需要自定义工具栏请用 host toolbar WCV |
|
|
195
185
|
|
|
196
186
|
### WorkbenchAppConfig(扩展 WorkbenchConfig)
|
|
197
187
|
|
|
@@ -216,7 +206,6 @@ src/
|
|
|
216
206
|
| 方法 | 说明 |
|
|
217
207
|
| --- | --- |
|
|
218
208
|
| `instance.registerSimulatorApi(name, handler)` | 注册 simulator 自定义 API,小程序里 `wx.<name>()` 调用(详见下方"Simulator 自定义 API")。返回 `Disposable` |
|
|
219
|
-
| `instance.toolbar.set(actions)` | 原子整表替换工具栏;`actions` 为 `ToolbarActionInput[]`(`{ id, label, handler }`),`id` 重复抛错。host 状态变化(如登录态)时构造新表再 `set` 一次 |
|
|
220
209
|
| `instance.ipc` | `IpcRegistry` 实例,`instance.ipc.handle(channel, fn)` 注册自定义 IPC;已绑定 `senderPolicy` 网关 |
|
|
221
210
|
| `instance.registerTrustedWindow(win)` | 把 host 自有弹窗 `BrowserWindow` 加入受信 sender 集,否则其发起的 `instance.ipc` 调用会被网关拒绝。窗口关闭即移除 |
|
|
222
211
|
|
|
@@ -492,6 +481,33 @@ launch({
|
|
|
492
481
|
|
|
493
482
|
---
|
|
494
483
|
|
|
484
|
+
## Host Toolbar(宿主自定义工具栏)
|
|
485
|
+
|
|
486
|
+
下游通过 `instance.context.views.hostToolbar` 拥有 devtools 头部下方的工具栏条(一个 WebContentsView):`loadURL` / `loadFile` 加载自己的内容,`setPreloadPath` 注入自己的 preload,`setHeightMode` 钉死或自动跟随内容高度(自动模式要求内容自带 shrink-to-fit 的 `[data-host-toolbar-root]` 包裹元素)。
|
|
487
|
+
|
|
488
|
+
### 双向消息:onMessage / send
|
|
489
|
+
|
|
490
|
+
主进程与工具栏页面之间有一条门控窄通道(按 load 握手的 MessagePort,信封 `{ channel, payload }`):
|
|
491
|
+
|
|
492
|
+
- `hostToolbar.onMessage(channel, handler): { dispose() }` — 接收页面消息。控制面级注册:可在 view 创建前调用,且跨页面 reload 自动续接,无需重新注册。空串/非 string channel 抛错。
|
|
493
|
+
- `hostToolbar.send(channel, payload): boolean` — 发消息给页面。门控不排队:没有活的工具栏 webContents、本次 load 的握手未完成、或正处于换文档导航窗口期(`loadURL`/`loadFile` 发起后、以及页面自发的主框架跨文档导航开始后,直到新文档握手完成)时返回 `false`(不投递、不建 view);返回 `true` 即已发出。返回值本身就是就绪信号,下游不再需要拿 `getHostToolbarWebContentsId()` 手工判断工具栏是否就绪(该 API 保留)。
|
|
494
|
+
|
|
495
|
+
页面侧由框架自动注入 `window.diminaHostToolbar`(仅 `{ send, onMessage }` 两个函数;握手前的 `send` 进队列、握手后按序送达。队列上限 128 条:超限丢弃最新一条、首次超限 console.warn 一次,不抛错):
|
|
496
|
+
|
|
497
|
+
```js
|
|
498
|
+
// 工具栏页面内
|
|
499
|
+
window.diminaHostToolbar.onMessage('host:cmd', (payload) => { /* ... */ })
|
|
500
|
+
window.diminaHostToolbar.send('page:event', { clicked: 'compile' })
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
```ts
|
|
504
|
+
// 主进程(onSetup 内)
|
|
505
|
+
const sub = instance.context.views.hostToolbar.onMessage('page:event', (payload) => { /* ... */ })
|
|
506
|
+
instance.context.views.hostToolbar.send('host:cmd', { theme: 'dark' }) // false = 未送达
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
---
|
|
510
|
+
|
|
495
511
|
## 模块导出一览
|
|
496
512
|
|
|
497
513
|
`@dimina-kit/devtools` 的公共入口。`api.ts`(根入口)聚合了所有公共 API,优先从根入口导入。
|
|
@@ -499,14 +515,14 @@ launch({
|
|
|
499
515
|
```
|
|
500
516
|
@dimina-kit/devtools launch, buildDefaultMenu,
|
|
501
517
|
openSettingsWindow, suppressEpipe, setupCdpPort,
|
|
518
|
+
asMiniappRuntime, MiniappRuntime(type),
|
|
502
519
|
createWorkbenchContext, createMainWindow,
|
|
503
520
|
createViewManager, IpcRegistry,
|
|
504
521
|
UpdateManager, createGitHubReleaseChecker, ...
|
|
505
522
|
@dimina-kit/devtools/launch launch(config?), buildDefaultMenu, openSettingsWindow
|
|
506
523
|
@dimina-kit/devtools/types TypeScript 类型定义
|
|
507
524
|
@dimina-kit/devtools/bootstrap suppressEpipe(), setupCdpPort()
|
|
508
|
-
@dimina-kit/devtools/context createWorkbenchContext(opts)
|
|
509
|
-
hasBuiltinPanel(ctx, panelId), getDefaultTab(ctx)
|
|
525
|
+
@dimina-kit/devtools/context createWorkbenchContext(opts)
|
|
510
526
|
@dimina-kit/devtools/create-window createMainWindow(opts)
|
|
511
527
|
@dimina-kit/devtools/paths rendererDir, defaultPreloadPath, simulatorDir,
|
|
512
528
|
getRendererDir, getPreloadDir, getRendererHtml
|
|
@@ -527,19 +543,32 @@ launch({
|
|
|
527
543
|
|
|
528
544
|
---
|
|
529
545
|
|
|
546
|
+
## MiniappRuntime(宿主集成推荐契约)
|
|
547
|
+
|
|
548
|
+
下游宿主(如 qdmp)集成时,推荐依赖手写的稳定契约 `MiniappRuntime`,而不是整个 `WorkbenchContext`——后者携带全部内部 service 类型,内部重构会直接破坏下游编译。`asMiniappRuntime(ctx)` 恒等返回(typed view,非拷贝),宿主对 `runtime.workspace.openProject` 的 monkey-patch 会落在真实对象上:
|
|
549
|
+
|
|
550
|
+
```typescript
|
|
551
|
+
import { asMiniappRuntime, type MiniappRuntime } from '@dimina-kit/devtools'
|
|
552
|
+
|
|
553
|
+
const runtime: MiniappRuntime = asMiniappRuntime(instance.context)
|
|
554
|
+
runtime.workspace.openProject = gated(runtime.workspace.openProject) // 权限闸(契约保证可写)
|
|
555
|
+
runtime.views.hostToolbar.send('host:cmd', { theme: 'dark' })
|
|
556
|
+
runtime.notify.projectStatus({ status: 'ready', message: '编译完成' })
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
契约面:`rendererDir` / `views.hostToolbar`(6 成员,无 `webContents`)/ `workspace`(7 方法)/ `notify.projectStatus` / `registry.add` / `windows`(不透明句柄)。零 Electron 类型。
|
|
560
|
+
|
|
530
561
|
## WorkbenchContext
|
|
531
562
|
|
|
532
|
-
`WorkbenchContext` 是所有扩展点的唯一容器。配置字段直接暴露,运行时状态通过 service 访问。host hook 拿到的 `instance.context` 即此类型;`menuBuilder` 拿到的是收窄后的 `MenuContext`(剔除 `registry` / `senderPolicy` / `trustedWindowSenderIds` / `simulatorApis`
|
|
563
|
+
`WorkbenchContext` 是所有扩展点的唯一容器。配置字段直接暴露,运行时状态通过 service 访问。host hook 拿到的 `instance.context` 即此类型;`menuBuilder` 拿到的是收窄后的 `MenuContext`(剔除 `registry` / `senderPolicy` / `trustedWindowSenderIds` / `simulatorApis` 等内部管线)。
|
|
533
564
|
|
|
534
565
|
```typescript
|
|
535
566
|
interface WorkbenchContext {
|
|
536
567
|
adapter: CompilationAdapter
|
|
537
568
|
preloadPath: string
|
|
538
569
|
rendererDir: string
|
|
539
|
-
panels: string[]
|
|
540
570
|
apiNamespaces: string[]
|
|
541
571
|
appName: string
|
|
542
|
-
headerHeight: number
|
|
543
572
|
brandingProvider?: () => Promise<{ appName: string }> | { appName: string }
|
|
544
573
|
|
|
545
574
|
// ── Services(运行时状态封装在内部,通过方法访问)──
|
|
@@ -550,7 +579,6 @@ interface WorkbenchContext {
|
|
|
550
579
|
|
|
551
580
|
// ── 扩展容器(host 通过 instance 上的方法写入,不直接操作)──
|
|
552
581
|
simulatorApis: SimulatorApiRegistry // instance.registerSimulatorApi 写入
|
|
553
|
-
toolbar: ToolbarStore // instance.toolbar.set 写入
|
|
554
582
|
trustedWindowSenderIds: Map<number, number> // instance.registerTrustedWindow 写入(webContents.id → 引用计数)
|
|
555
583
|
|
|
556
584
|
// ── Internal lifecycle / security (host 不直接消费) ──
|
|
@@ -562,7 +590,7 @@ interface WorkbenchContext {
|
|
|
562
590
|
会话和视图状态封装在对应 service 的私有闭包中,通过方法访问,例如:
|
|
563
591
|
|
|
564
592
|
- `ctx.workspace.getProjectPath()` / `ctx.workspace.getSession()` / `ctx.workspace.hasActiveSession()`
|
|
565
|
-
- `ctx.views.getSimulatorWebContentsId()` / `ctx.views.
|
|
593
|
+
- `ctx.views.getSimulatorWebContentsId()` / `ctx.views.getSimulatorWebContents()`
|
|
566
594
|
- `ctx.windows.mainWindow` / `ctx.windows.settingsWindow`
|
|
567
595
|
|
|
568
596
|
---
|
|
@@ -604,13 +632,11 @@ flowchart TB
|
|
|
604
632
|
| Storage | 拉取 + 推送 | renderer `ipcInvoke(SimulatorStorageChannel.GetSnapshot)` → 主进程 CDP `DOMStorage` 域;变更事件由主进程通过 `SimulatorStorageChannel.Event` 推回 renderer |
|
|
605
633
|
| 元素选区 / `Page.getData` / MCP overview | 拉取 | 主进程 `webContents.executeJavaScript(...)` 或 `Runtime.evaluate(...)` 读 `window.__simulatorData.*`(由 `installSimulatorBridge` 暴露) |
|
|
606
634
|
|
|
607
|
-
> `src/main/ipc/panels.ts` 暴露 `panel:eval` handler 供外部 host 自定义面板复用,内置 renderer 不消费它。
|
|
608
|
-
|
|
609
635
|
---
|
|
610
636
|
|
|
611
637
|
## IPC 通信总览
|
|
612
638
|
|
|
613
|
-
IPC 频道名常量集中定义在 `src/shared/ipc-channels.ts`,按域分组(`SimulatorChannel` / `ProjectChannel` / `
|
|
639
|
+
IPC 频道名常量集中定义在 `src/shared/ipc-channels.ts`,按域分组(`SimulatorChannel` / `ProjectChannel` / `WorkbenchSettingsChannel` 等)。该文件是频道清单的唯一真相源;此处不再维护手抄表,以免与代码漂移。
|
|
614
640
|
|
|
615
641
|
---
|
|
616
642
|
|
|
@@ -620,7 +646,7 @@ Electron 对 `chrome.devtools.panels.create()` 的支持**长期不稳定**。
|
|
|
620
646
|
|
|
621
647
|
**影响范围**:从 Electron 7 到 39 均有报告([#23662](https://github.com/electron/electron/issues/23662)、[#41613](https://github.com/electron/electron/issues/41613)、[#48705](https://github.com/electron/electron/issues/48705)),非特定版本 bug,而是系统性实现缺陷。官方文档声称完全支持,但实际因竞态条件和实现不完整导致面板无法可靠渲染。Electron 团队无修复计划。
|
|
622
648
|
|
|
623
|
-
**当前方案**:内置面板(WXML / AppData / Storage)直接在主窗口 React 中渲染,数据由主进程服务直接供给——WXML / AppData 走 `SimulatorWxmlChannel` / `SimulatorAppDataChannel`(main → renderer 的 seed `GetSnapshot` + push `Event`),Storage 走 CDP `DOMStorage` 域(详见上方「数据流」);Chrome DevTools 仍作为独立 `WebContentsView` 通过 `setDevToolsWebContents()` 挂载。面板切换由 renderer toolbar 的 tab 栏控制,主进程负责 nativeSimulator/settings/popover View 的创建、定位和显隐。详见 `src/main/ipc/
|
|
649
|
+
**当前方案**:内置面板(WXML / AppData / Storage)直接在主窗口 React 中渲染,数据由主进程服务直接供给——WXML / AppData 走 `SimulatorWxmlChannel` / `SimulatorAppDataChannel`(main → renderer 的 seed `GetSnapshot` + push `Event`),Storage 走 CDP `DOMStorage` 域(详见上方「数据流」);Chrome DevTools 仍作为独立 `WebContentsView` 通过 `setDevToolsWebContents()` 挂载。面板切换由 renderer toolbar 的 tab 栏控制,主进程负责 nativeSimulator/settings/popover View 的创建、定位和显隐。详见 `src/main/ipc/simulator.ts`。
|
|
624
650
|
|
|
625
651
|
---
|
|
626
652
|
|
package/dist/main/api.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { launch, buildDefaultMenu, openSettingsWindow } from './app/launch.js';
|
|
2
2
|
export type { WorkbenchAppInstance } from './app/app.js';
|
|
3
3
|
export { suppressEpipe, setupCdpPort } from './app/bootstrap.js';
|
|
4
|
-
export {
|
|
4
|
+
export { asMiniappRuntime } from './runtime/miniapp-runtime.js';
|
|
5
|
+
export type { MiniappRuntime } from './runtime/miniapp-runtime.js';
|
|
6
|
+
export { createWorkbenchContext } from './services/workbench-context.js';
|
|
5
7
|
export type { WorkbenchContext, CreateContextOptions } from './services/workbench-context.js';
|
|
6
8
|
export { createMainWindow } from './windows/main-window/index.js';
|
|
7
9
|
export { createViewManager } from './services/views/view-manager.js';
|
|
@@ -14,5 +16,5 @@ export { IpcRegistry } from './utils/ipc-registry.js';
|
|
|
14
16
|
export type { SenderPolicy } from './utils/ipc-registry.js';
|
|
15
17
|
export { UpdateManager, createGitHubReleaseChecker } from './services/update/index.js';
|
|
16
18
|
export type { UpdateManagerOptions, GitHubReleaseCheckerOptions, PickAssetContext, VersionScheme, } from './services/update/index.js';
|
|
17
|
-
export type { WorkbenchConfig, WorkbenchAppConfig, CompilationAdapter, ProjectSession,
|
|
19
|
+
export type { WorkbenchConfig, WorkbenchAppConfig, CompilationAdapter, ProjectSession, BuiltinPanelId, BuiltinModuleId, UpdateChecker, UpdateInfo, } from '../shared/types.js';
|
|
18
20
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/main/api.js
CHANGED
|
@@ -7,8 +7,12 @@
|
|
|
7
7
|
export { launch, buildDefaultMenu, openSettingsWindow } from './app/launch.js';
|
|
8
8
|
// ── Bootstrap utilities ──────────────────────────────────────────────────
|
|
9
9
|
export { suppressEpipe, setupCdpPort } from './app/bootstrap.js';
|
|
10
|
+
// ── Miniapp runtime contract (host-facing, stable) ───────────────────────
|
|
11
|
+
// The hand-written kernel surface a downstream host consumes; prefer this
|
|
12
|
+
// over depending on the full `WorkbenchContext`.
|
|
13
|
+
export { asMiniappRuntime } from './runtime/miniapp-runtime.js';
|
|
10
14
|
// ── Context & views (for module-assembly consumers) ──────────────────────
|
|
11
|
-
export { createWorkbenchContext
|
|
15
|
+
export { createWorkbenchContext } from './services/workbench-context.js';
|
|
12
16
|
export { createMainWindow } from './windows/main-window/index.js';
|
|
13
17
|
export { createViewManager } from './services/views/view-manager.js';
|
|
14
18
|
// ── Paths ────────────────────────────────────────────────────────────────
|
package/dist/main/app/app.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BrowserWindow } from 'electron';
|
|
2
|
-
import type {
|
|
2
|
+
import type { WorkbenchAppConfig } from '../../shared/types.js';
|
|
3
3
|
import type { SimulatorApiHandler } from '../services/simulator/custom-apis.js';
|
|
4
4
|
import { type WorkbenchContext } from '../services/workbench-context.js';
|
|
5
5
|
import { type AutomationServer } from '../services/automation/index.js';
|
|
@@ -15,10 +15,6 @@ export interface WorkbenchAppInstance {
|
|
|
15
15
|
registerTrustedWindow: (win: BrowserWindow) => Disposable;
|
|
16
16
|
/** Registers a simulator custom API into this context's registry. */
|
|
17
17
|
registerSimulatorApi: (name: string, handler: SimulatorApiHandler) => Disposable;
|
|
18
|
-
/** Per-context toolbar surface — `set()` atomically replaces the table. */
|
|
19
|
-
readonly toolbar: {
|
|
20
|
-
set(actions: ToolbarActionInput[]): void;
|
|
21
|
-
};
|
|
22
18
|
automationServer?: AutomationServer;
|
|
23
19
|
updateManager?: UpdateManager;
|
|
24
20
|
dispose: () => Promise<void>;
|
package/dist/main/app/app.js
CHANGED
|
@@ -145,10 +145,8 @@ function createContext(config, mainWindow, rendererDir) {
|
|
|
145
145
|
adapter: config.adapter,
|
|
146
146
|
preloadPath: config.preloadPath ?? defaultPreloadPath,
|
|
147
147
|
rendererDir,
|
|
148
|
-
panels: config.panels,
|
|
149
148
|
appName: config.appName,
|
|
150
149
|
apiNamespaces: config.apiNamespaces,
|
|
151
|
-
headerHeight: config.headerHeight,
|
|
152
150
|
brandingProvider: config.brandingProvider,
|
|
153
151
|
// The host-supplied ProjectsProvider / template types in `shared/types`
|
|
154
152
|
// are structurally compatible with the main-process equivalents —
|
|
@@ -169,7 +167,7 @@ function registerBuiltinModules(config, context) {
|
|
|
169
167
|
}
|
|
170
168
|
/**
|
|
171
169
|
* Strip the internal-plumbing fields a host menu builder must not reach
|
|
172
|
-
* (registry / senderPolicy / trustedWindowSenderIds / simulatorApis
|
|
170
|
+
* (registry / senderPolicy / trustedWindowSenderIds / simulatorApis)
|
|
173
171
|
* so `menuBuilder` receives the narrowed `MenuContext` its contract promises —
|
|
174
172
|
* at runtime, not just at the type level.
|
|
175
173
|
*/
|
|
@@ -181,7 +179,6 @@ function toMenuContext(context) {
|
|
|
181
179
|
delete menuContext.senderPolicy;
|
|
182
180
|
delete menuContext.trustedWindowSenderIds;
|
|
183
181
|
delete menuContext.simulatorApis;
|
|
184
|
-
delete menuContext.toolbar;
|
|
185
182
|
return menuContext;
|
|
186
183
|
}
|
|
187
184
|
function installMenu(config, mainWindow, context) {
|
|
@@ -345,15 +342,6 @@ export async function createDevtoolsRuntime(config = {}) {
|
|
|
345
342
|
// teardown, so a single dispose leaves no dead entry behind.
|
|
346
343
|
registerTrustedWindow: (win) => context.registry.add(registerTrustedWindow(context, win)),
|
|
347
344
|
registerSimulatorApi: (name, handler) => context.registry.add(toDisposable(context.simulatorApis.register(name, handler))),
|
|
348
|
-
toolbar: {
|
|
349
|
-
set: (actions) => {
|
|
350
|
-
// `context.toolbar.set` validates id-uniqueness and throws on a
|
|
351
|
-
// duplicate BEFORE mutating, so a rejected batch never reaches
|
|
352
|
-
// the notify below — no phantom ActionsChanged.
|
|
353
|
-
context.toolbar.set(actions);
|
|
354
|
-
context.notify.toolbarActionsChanged();
|
|
355
|
-
},
|
|
356
|
-
},
|
|
357
345
|
dispose: () => disposeContext(context),
|
|
358
346
|
};
|
|
359
347
|
if (config.onSetup) {
|
|
@@ -470,9 +458,9 @@ export async function createDevtoolsRuntime(config = {}) {
|
|
|
470
458
|
// upload run there, not in the service host) in the embedded DevTools by
|
|
471
459
|
// injecting its raw Network.* CDP events into the DevTools front-end so the
|
|
472
460
|
// native Network tab renders them (service-host console line is the
|
|
473
|
-
// fallback). The ViewManager calls attachSimulator +
|
|
474
|
-
// attachNativeSimulator once the simulator WCV +
|
|
475
|
-
// getServiceWc here is the fallback sink target.
|
|
461
|
+
// fallback). The ViewManager calls the forwarder's attachSimulator +
|
|
462
|
+
// setDevtoolsHost from attachNativeSimulator once the simulator WCV +
|
|
463
|
+
// DevTools host exist; getServiceWc here is the fallback sink target.
|
|
476
464
|
const networkForward = createNetworkForwarder({
|
|
477
465
|
getServiceWc: (appId) => context.bridge?.getServiceWc(appId) ?? null,
|
|
478
466
|
connections: context.connections,
|