@linkdesk/plugin-sdk 0.1.2 → 0.1.6
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/dev-host/dev-main.tsx +47 -0
- package/dev-host/index.html +50 -0
- package/dev-host/linkdesk-mock.generated.ts +363 -0
- package/dev-host/mock.ts +72 -0
- package/dist/bin.js +45 -3
- package/dist/bin.js.map +1 -1
- package/dist/dev-real.d.ts +24 -0
- package/dist/dev-real.d.ts.map +1 -0
- package/dist/dev-real.js +286 -0
- package/dist/dev-real.js.map +1 -0
- package/dist/dev-server.d.ts +10 -0
- package/dist/dev-server.d.ts.map +1 -0
- package/dist/dev-server.js +136 -0
- package/dist/dev-server.js.map +1 -0
- package/dist/github-http.d.ts +30 -0
- package/dist/github-http.d.ts.map +1 -0
- package/dist/github-http.js +85 -0
- package/dist/github-http.js.map +1 -0
- package/dist/publish.d.ts +92 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +462 -0
- package/dist/publish.js.map +1 -0
- package/dist/vite-config.d.ts +2 -0
- package/dist/vite-config.d.ts.map +1 -1
- package/dist/vite-config.js +66 -30
- package/dist/vite-config.js.map +1 -1
- package/package.json +8 -3
- package/schemas/plugin.schema.json +4 -4
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dev 宿主入口(E6#23.5/#24b)——纯浏览器最小壳:顶部 dev 条 + React root 渲染正在开发的插件。
|
|
3
|
+
*
|
|
4
|
+
* 接线(均由 `linkdesk-plugin-sdk dev` 的 vite 配置注入,见 src/dev-server.ts):
|
|
5
|
+
* - `__linkdesk_dev_entry__`:resolve.alias 虚拟 id → 插件根 plugin.json 的 entry 绝对路径。
|
|
6
|
+
* 静态 import → 入口是模块图常规成员 → vite 标准 HMR 全链(改码即热更)。
|
|
7
|
+
* - `__LINKDESK_DEV_I18N__`:define 字面量 = { 语言码: { translation: {…} } }(现读插件
|
|
8
|
+
* contributes.i18n 声明的各语言 JSON)。
|
|
9
|
+
* - `__LINKDESK_DEV_PLUGIN_ID__`:define 字面量 = pluginId(顶部 dev 条展示)。
|
|
10
|
+
*
|
|
11
|
+
* 契约:宿主把插件当「激活标签」渲染({ isActive: true })——对标壳渲染视图插件的语义;
|
|
12
|
+
* keep-alive / tabId / sourceId 在纯浏览器 dev 无对应物(那是壳标签页系统的概念)。
|
|
13
|
+
* i18n:lng = 插件第一个声明的语言(通常 en);key 缺失时 i18next 返回 key 本身——中文 key 即中文兜底。
|
|
14
|
+
*/
|
|
15
|
+
import { createRoot } from "react-dom/client";
|
|
16
|
+
import i18n from "i18next";
|
|
17
|
+
import { initReactI18next, I18nextProvider } from "react-i18next";
|
|
18
|
+
import { injectDevMockApi } from "./mock.js";
|
|
19
|
+
import PluginView from "__linkdesk_dev_entry__";
|
|
20
|
+
|
|
21
|
+
declare const __LINKDESK_DEV_I18N__: Record<string, { translation: Record<string, unknown> }>;
|
|
22
|
+
declare const __LINKDESK_DEV_PLUGIN_ID__: string;
|
|
23
|
+
|
|
24
|
+
const resources = __LINKDESK_DEV_I18N__;
|
|
25
|
+
const lng = Object.keys(resources)[0] ?? "en";
|
|
26
|
+
|
|
27
|
+
void i18n.use(initReactI18next).init({
|
|
28
|
+
resources,
|
|
29
|
+
lng,
|
|
30
|
+
fallbackLng: false,
|
|
31
|
+
interpolation: { escapeValue: false },
|
|
32
|
+
react: { useSuspense: false },
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
injectDevMockApi();
|
|
36
|
+
|
|
37
|
+
const pluginIdEl = document.getElementById("ld-plugin-id");
|
|
38
|
+
if (pluginIdEl) pluginIdEl.textContent = __LINKDESK_DEV_PLUGIN_ID__;
|
|
39
|
+
|
|
40
|
+
const rootEl = document.getElementById("ld-root");
|
|
41
|
+
if (rootEl) {
|
|
42
|
+
createRoot(rootEl).render(
|
|
43
|
+
<I18nextProvider i18n={i18n}>
|
|
44
|
+
<PluginView isActive />
|
|
45
|
+
</I18nextProvider>,
|
|
46
|
+
);
|
|
47
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>LinkDesk dev 宿主</title>
|
|
7
|
+
<style>
|
|
8
|
+
/* dev 宿主页 = SDK 工具 UI(非壳/非产品),中性配色 + 兜底主题变量让插件 var(--xxx) 不至全黑。
|
|
9
|
+
固定值允许——不违反壳硬约束 16(那约束壳 UI;此页不属于壳渲染树)。 */
|
|
10
|
+
:root {
|
|
11
|
+
--text: #e8e8ea;
|
|
12
|
+
--text-muted: #9a9aa2;
|
|
13
|
+
--border: #2c2c33;
|
|
14
|
+
--bg: #16161a;
|
|
15
|
+
--bg-alt: #1f1f25;
|
|
16
|
+
--accent: #4cc38a;
|
|
17
|
+
}
|
|
18
|
+
* { box-sizing: border-box; }
|
|
19
|
+
html, body { margin: 0; height: 100%; }
|
|
20
|
+
body {
|
|
21
|
+
background: var(--bg);
|
|
22
|
+
color: var(--text);
|
|
23
|
+
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;
|
|
24
|
+
}
|
|
25
|
+
#ld-topbar {
|
|
26
|
+
position: sticky; top: 0; z-index: 10;
|
|
27
|
+
display: flex; align-items: center; gap: 8px;
|
|
28
|
+
padding: 5px 12px; font-size: 12px;
|
|
29
|
+
background: var(--bg-alt); border-bottom: 1px solid var(--border);
|
|
30
|
+
user-select: none;
|
|
31
|
+
}
|
|
32
|
+
#ld-topbar .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }
|
|
33
|
+
#ld-topbar .sep { opacity: 0.4; }
|
|
34
|
+
#ld-topbar code { color: #9fd0ff; font-family: ui-monospace, "Cascadia Code", Consolas, monospace; }
|
|
35
|
+
#ld-topbar .hint { color: var(--text-muted); margin-left: auto; }
|
|
36
|
+
#ld-root { padding: 0; }
|
|
37
|
+
</style>
|
|
38
|
+
</head>
|
|
39
|
+
<body>
|
|
40
|
+
<div id="ld-topbar">
|
|
41
|
+
<span class="dot"></span>
|
|
42
|
+
<span>LinkDesk dev 宿主</span>
|
|
43
|
+
<span class="sep">·</span>
|
|
44
|
+
<code id="ld-plugin-id"></code>
|
|
45
|
+
<span class="hint">本地预览 · 无 Electron/IPC · 改码 HMR</span>
|
|
46
|
+
</div>
|
|
47
|
+
<div id="ld-root"></div>
|
|
48
|
+
<script type="module" src="/dev-main.tsx"></script>
|
|
49
|
+
</body>
|
|
50
|
+
</html>
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🔥 linkdesk-mock.generated.ts——dev 宿主 window.linkdesk mock 树(自动生成,勿手改)
|
|
3
|
+
*
|
|
4
|
+
* 生成源:src/core/api/linkdesk-api.ts + linkdesk-api/(LinkDeskAPI 交集——与 linkdesk.d.ts 同一标注源)
|
|
5
|
+
* 生成器:scripts/generate-contract.mjs(E6#27 第三产物,杜绝 mock/preload 双份漂移)
|
|
6
|
+
* 改契约源 → 跑 `node scripts/generate-contract.mjs`(npm run check 里 contracts:check 三产物逐字节强制)
|
|
7
|
+
*
|
|
8
|
+
* 消费方:packages/plugin-sdk/dev-host/mock.ts——injectDevMockApi() 用 Proxy 包本树:
|
|
9
|
+
* 树内方法 = 类型驱动中性默认 + 调用即打 [linkdesk-mock] 日志(mock vs 真 IPC 可感知);
|
|
10
|
+
* 树外路径(契约里不存在的方法名) = Proxy 抛「不在 linkdesk API 契约」。
|
|
11
|
+
* 默认值策略("不崩 + 可感知",详见 02-本地预览环境.md §10.2):
|
|
12
|
+
* Promise<void/…数据对象> → async 返 undefined;Promise<数组> → [];Promise<string/boolean> → ""/false;
|
|
13
|
+
* void → noop(registerCommand 等每插件必调,绝不抛);返回退订句柄(onChange 等)→ noop 函数;
|
|
14
|
+
* 其余同步 → ""/undefined。真数据/真行为走真实 IPC / linkdesk-plugin-sdk dev --real(E6#28.5)。
|
|
15
|
+
*/
|
|
16
|
+
export const linkdeskMock: Record<string, unknown> = {
|
|
17
|
+
commands: {
|
|
18
|
+
execute: async (..._args: unknown[]) => { console.info("[linkdesk-mock] commands.execute", ..._args); },
|
|
19
|
+
executeCommand: async (..._args: unknown[]) => { console.info("[linkdesk-mock] commands.executeCommand", ..._args); },
|
|
20
|
+
registerCommand: (..._args: unknown[]) => { console.info("[linkdesk-mock] commands.registerCommand", ..._args); },
|
|
21
|
+
unregisterCommands: (..._args: unknown[]) => { console.info("[linkdesk-mock] commands.unregisterCommands", ..._args); },
|
|
22
|
+
getCommands: async (..._args: unknown[]) => { console.info("[linkdesk-mock] commands.getCommands", ..._args); return []; },
|
|
23
|
+
_executeShellLocal: async (..._args: unknown[]) => { console.info("[linkdesk-mock] commands._executeShellLocal", ..._args); },
|
|
24
|
+
},
|
|
25
|
+
configuration: {
|
|
26
|
+
get: async (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.get", ..._args); },
|
|
27
|
+
set: async (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.set", ..._args); },
|
|
28
|
+
getSchema: async (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.getSchema", ..._args); },
|
|
29
|
+
onChange: (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.onChange", ..._args); return () => {}; },
|
|
30
|
+
getConfigurationContributions: async (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.getConfigurationContributions", ..._args); return []; },
|
|
31
|
+
inspectConfiguration: async (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.inspectConfiguration", ..._args); },
|
|
32
|
+
getUserSettings: async (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.getUserSettings", ..._args); },
|
|
33
|
+
onDidChangeConfiguration: (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.onDidChangeConfiguration", ..._args); return () => {}; },
|
|
34
|
+
onPluginLifecycleChange: (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.onPluginLifecycleChange", ..._args); return () => {}; },
|
|
35
|
+
consumeSettingsGroup: async (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.consumeSettingsGroup", ..._args); },
|
|
36
|
+
onRequestSettingsGroup: (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.onRequestSettingsGroup", ..._args); return () => {}; },
|
|
37
|
+
consumeScrollToSetting: async (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.consumeScrollToSetting", ..._args); },
|
|
38
|
+
onRequestScrollToSetting: (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.onRequestScrollToSetting", ..._args); return () => {}; },
|
|
39
|
+
consumeOpenKeybindings: async (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.consumeOpenKeybindings", ..._args); },
|
|
40
|
+
onRequestOpenKeybindings: (..._args: unknown[]) => { console.info("[linkdesk-mock] configuration.onRequestOpenKeybindings", ..._args); return () => {}; },
|
|
41
|
+
},
|
|
42
|
+
config: {
|
|
43
|
+
get: async (..._args: unknown[]) => { console.info("[linkdesk-mock] config.get", ..._args); },
|
|
44
|
+
set: async (..._args: unknown[]) => { console.info("[linkdesk-mock] config.set", ..._args); },
|
|
45
|
+
getSchema: async (..._args: unknown[]) => { console.info("[linkdesk-mock] config.getSchema", ..._args); },
|
|
46
|
+
onChange: (..._args: unknown[]) => { console.info("[linkdesk-mock] config.onChange", ..._args); return () => {}; },
|
|
47
|
+
getConfigurationContributions: async (..._args: unknown[]) => { console.info("[linkdesk-mock] config.getConfigurationContributions", ..._args); return []; },
|
|
48
|
+
inspectConfiguration: async (..._args: unknown[]) => { console.info("[linkdesk-mock] config.inspectConfiguration", ..._args); },
|
|
49
|
+
getUserSettings: async (..._args: unknown[]) => { console.info("[linkdesk-mock] config.getUserSettings", ..._args); },
|
|
50
|
+
onDidChangeConfiguration: (..._args: unknown[]) => { console.info("[linkdesk-mock] config.onDidChangeConfiguration", ..._args); return () => {}; },
|
|
51
|
+
onPluginLifecycleChange: (..._args: unknown[]) => { console.info("[linkdesk-mock] config.onPluginLifecycleChange", ..._args); return () => {}; },
|
|
52
|
+
consumeSettingsGroup: async (..._args: unknown[]) => { console.info("[linkdesk-mock] config.consumeSettingsGroup", ..._args); },
|
|
53
|
+
onRequestSettingsGroup: (..._args: unknown[]) => { console.info("[linkdesk-mock] config.onRequestSettingsGroup", ..._args); return () => {}; },
|
|
54
|
+
consumeScrollToSetting: async (..._args: unknown[]) => { console.info("[linkdesk-mock] config.consumeScrollToSetting", ..._args); },
|
|
55
|
+
onRequestScrollToSetting: (..._args: unknown[]) => { console.info("[linkdesk-mock] config.onRequestScrollToSetting", ..._args); return () => {}; },
|
|
56
|
+
consumeOpenKeybindings: async (..._args: unknown[]) => { console.info("[linkdesk-mock] config.consumeOpenKeybindings", ..._args); },
|
|
57
|
+
onRequestOpenKeybindings: (..._args: unknown[]) => { console.info("[linkdesk-mock] config.onRequestOpenKeybindings", ..._args); return () => {}; },
|
|
58
|
+
},
|
|
59
|
+
theme: {
|
|
60
|
+
getCurrent: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.getCurrent", ..._args); return ""; },
|
|
61
|
+
getAvailable: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.getAvailable", ..._args); return []; },
|
|
62
|
+
apply: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.apply", ..._args); },
|
|
63
|
+
listRecipes: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.listRecipes", ..._args); return []; },
|
|
64
|
+
getActive: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.getActive", ..._args); },
|
|
65
|
+
getEffectiveTokens: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.getEffectiveTokens", ..._args); },
|
|
66
|
+
setRecipe: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.setRecipe", ..._args); },
|
|
67
|
+
setColorway: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.setColorway", ..._args); },
|
|
68
|
+
resetAppearance: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.resetAppearance", ..._args); },
|
|
69
|
+
resetMix: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.resetMix", ..._args); },
|
|
70
|
+
getBaselineSeeds: async (..._args: unknown[]) => { console.info("[linkdesk-mock] theme.getBaselineSeeds", ..._args); },
|
|
71
|
+
},
|
|
72
|
+
language: {
|
|
73
|
+
getCurrent: async (..._args: unknown[]) => { console.info("[linkdesk-mock] language.getCurrent", ..._args); return ""; },
|
|
74
|
+
getAvailable: async (..._args: unknown[]) => { console.info("[linkdesk-mock] language.getAvailable", ..._args); return []; },
|
|
75
|
+
set: async (..._args: unknown[]) => { console.info("[linkdesk-mock] language.set", ..._args); },
|
|
76
|
+
getInitial: (..._args: unknown[]) => { console.info("[linkdesk-mock] language.getInitial", ..._args); },
|
|
77
|
+
onChange: (..._args: unknown[]) => { console.info("[linkdesk-mock] language.onChange", ..._args); return () => {}; },
|
|
78
|
+
},
|
|
79
|
+
appearance: {
|
|
80
|
+
importImage: async (..._args: unknown[]) => { console.info("[linkdesk-mock] appearance.importImage", ..._args); return ""; },
|
|
81
|
+
revealStorage: async (..._args: unknown[]) => { console.info("[linkdesk-mock] appearance.revealStorage", ..._args); },
|
|
82
|
+
},
|
|
83
|
+
tabs: {
|
|
84
|
+
create: async (..._args: unknown[]) => { console.info("[linkdesk-mock] tabs.create", ..._args); },
|
|
85
|
+
openOrFocus: async (..._args: unknown[]) => { console.info("[linkdesk-mock] tabs.openOrFocus", ..._args); },
|
|
86
|
+
focus: async (..._args: unknown[]) => { console.info("[linkdesk-mock] tabs.focus", ..._args); },
|
|
87
|
+
close: async (..._args: unknown[]) => { console.info("[linkdesk-mock] tabs.close", ..._args); },
|
|
88
|
+
focusBySourceId: async (..._args: unknown[]) => { console.info("[linkdesk-mock] tabs.focusBySourceId", ..._args); },
|
|
89
|
+
updateLabelBySourceId: async (..._args: unknown[]) => { console.info("[linkdesk-mock] tabs.updateLabelBySourceId", ..._args); },
|
|
90
|
+
closeBySourceId: async (..._args: unknown[]) => { console.info("[linkdesk-mock] tabs.closeBySourceId", ..._args); },
|
|
91
|
+
onDidChangeActiveTab: (..._args: unknown[]) => { console.info("[linkdesk-mock] tabs.onDidChangeActiveTab", ..._args); return () => {}; },
|
|
92
|
+
},
|
|
93
|
+
keybindings: {
|
|
94
|
+
getKeybindings: async (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.getKeybindings", ..._args); return []; },
|
|
95
|
+
getConflicts: async (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.getConflicts", ..._args); },
|
|
96
|
+
registerKeybinding: async (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.registerKeybinding", ..._args); },
|
|
97
|
+
saveUserKeybindings: async (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.saveUserKeybindings", ..._args); },
|
|
98
|
+
removeKeybindingForCommand: async (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.removeKeybindingForCommand", ..._args); },
|
|
99
|
+
resetKeybindingToDefault: async (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.resetKeybindingToDefault", ..._args); },
|
|
100
|
+
findKeybindingForCommand: async (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.findKeybindingForCommand", ..._args); },
|
|
101
|
+
setKeybindingCaptureActive: async (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.setKeybindingCaptureActive", ..._args); },
|
|
102
|
+
keyboardEventToKeyString: (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.keyboardEventToKeyString", ..._args); return ""; },
|
|
103
|
+
onChange: (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.onChange", ..._args); return () => {}; },
|
|
104
|
+
syncToMainProcess: async (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.syncToMainProcess", ..._args); },
|
|
105
|
+
onForwardedEvent: (..._args: unknown[]) => { console.info("[linkdesk-mock] keybindings.onForwardedEvent", ..._args); return () => {}; },
|
|
106
|
+
},
|
|
107
|
+
notifications: {
|
|
108
|
+
show: async (..._args: unknown[]) => { console.info("[linkdesk-mock] notifications.show", ..._args); },
|
|
109
|
+
},
|
|
110
|
+
menu: {
|
|
111
|
+
registerItems: async (..._args: unknown[]) => { console.info("[linkdesk-mock] menu.registerItems", ..._args); },
|
|
112
|
+
getItems: async (..._args: unknown[]) => { console.info("[linkdesk-mock] menu.getItems", ..._args); return []; },
|
|
113
|
+
},
|
|
114
|
+
contextKey: {
|
|
115
|
+
set: async (..._args: unknown[]) => { console.info("[linkdesk-mock] contextKey.set", ..._args); },
|
|
116
|
+
_getValue: (..._args: unknown[]) => { console.info("[linkdesk-mock] contextKey._getValue", ..._args); },
|
|
117
|
+
},
|
|
118
|
+
dialog: {
|
|
119
|
+
confirm: async (..._args: unknown[]) => { console.info("[linkdesk-mock] dialog.confirm", ..._args); return false; },
|
|
120
|
+
alert: async (..._args: unknown[]) => { console.info("[linkdesk-mock] dialog.alert", ..._args); },
|
|
121
|
+
open: async (..._args: unknown[]) => { console.info("[linkdesk-mock] dialog.open", ..._args); },
|
|
122
|
+
openFile: async (..._args: unknown[]) => { console.info("[linkdesk-mock] dialog.openFile", ..._args); },
|
|
123
|
+
},
|
|
124
|
+
quickPick: {
|
|
125
|
+
show: async (..._args: unknown[]) => { console.info("[linkdesk-mock] quickPick.show", ..._args); },
|
|
126
|
+
},
|
|
127
|
+
quickPickHost: {
|
|
128
|
+
registerHost: (..._args: unknown[]) => { console.info("[linkdesk-mock] quickPickHost.registerHost", ..._args); return () => {}; },
|
|
129
|
+
onShow: (..._args: unknown[]) => { console.info("[linkdesk-mock] quickPickHost.onShow", ..._args); return () => {}; },
|
|
130
|
+
select: (..._args: unknown[]) => { console.info("[linkdesk-mock] quickPickHost.select", ..._args); },
|
|
131
|
+
highlight: (..._args: unknown[]) => { console.info("[linkdesk-mock] quickPickHost.highlight", ..._args); },
|
|
132
|
+
close: (..._args: unknown[]) => { console.info("[linkdesk-mock] quickPickHost.close", ..._args); },
|
|
133
|
+
itemAction: (..._args: unknown[]) => { console.info("[linkdesk-mock] quickPickHost.itemAction", ..._args); },
|
|
134
|
+
},
|
|
135
|
+
toast: {
|
|
136
|
+
onShow: (..._args: unknown[]) => { console.info("[linkdesk-mock] toast.onShow", ..._args); return () => {}; },
|
|
137
|
+
dismiss: (..._args: unknown[]) => { console.info("[linkdesk-mock] toast.dismiss", ..._args); },
|
|
138
|
+
action: (..._args: unknown[]) => { console.info("[linkdesk-mock] toast.action", ..._args); },
|
|
139
|
+
},
|
|
140
|
+
dialogHost: {
|
|
141
|
+
onShow: (..._args: unknown[]) => { console.info("[linkdesk-mock] dialogHost.onShow", ..._args); return () => {}; },
|
|
142
|
+
confirm: (..._args: unknown[]) => { console.info("[linkdesk-mock] dialogHost.confirm", ..._args); },
|
|
143
|
+
cancel: (..._args: unknown[]) => { console.info("[linkdesk-mock] dialogHost.cancel", ..._args); },
|
|
144
|
+
},
|
|
145
|
+
floatingPanelHost: {
|
|
146
|
+
onShow: (..._args: unknown[]) => { console.info("[linkdesk-mock] floatingPanelHost.onShow", ..._args); return () => {}; },
|
|
147
|
+
action: (..._args: unknown[]) => { console.info("[linkdesk-mock] floatingPanelHost.action", ..._args); },
|
|
148
|
+
},
|
|
149
|
+
serial: {
|
|
150
|
+
listPorts: async (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.listPorts", ..._args); return []; },
|
|
151
|
+
getStatus: async (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.getStatus", ..._args); return []; },
|
|
152
|
+
openPort: async (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.openPort", ..._args); },
|
|
153
|
+
closePort: async (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.closePort", ..._args); },
|
|
154
|
+
sendData: async (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.sendData", ..._args); },
|
|
155
|
+
sendText: async (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.sendText", ..._args); },
|
|
156
|
+
setDtr: async (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.setDtr", ..._args); },
|
|
157
|
+
setRts: async (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.setRts", ..._args); },
|
|
158
|
+
onData: (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.onData", ..._args); return () => {}; },
|
|
159
|
+
onStats: (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.onStats", ..._args); return () => {}; },
|
|
160
|
+
onSystem: (..._args: unknown[]) => { console.info("[linkdesk-mock] serial.onSystem", ..._args); return () => {}; },
|
|
161
|
+
},
|
|
162
|
+
clipboard: {
|
|
163
|
+
readText: async (..._args: unknown[]) => { console.info("[linkdesk-mock] clipboard.readText", ..._args); return ""; },
|
|
164
|
+
writeText: async (..._args: unknown[]) => { console.info("[linkdesk-mock] clipboard.writeText", ..._args); },
|
|
165
|
+
writeFileList: async (..._args: unknown[]) => { console.info("[linkdesk-mock] clipboard.writeFileList", ..._args); },
|
|
166
|
+
},
|
|
167
|
+
p2p: {
|
|
168
|
+
send: (..._args: unknown[]) => { console.info("[linkdesk-mock] p2p.send", ..._args); },
|
|
169
|
+
on: (..._args: unknown[]) => { console.info("[linkdesk-mock] p2p.on", ..._args); return () => {}; },
|
|
170
|
+
},
|
|
171
|
+
events: {
|
|
172
|
+
on: (..._args: unknown[]) => { console.info("[linkdesk-mock] events.on", ..._args); return () => {}; },
|
|
173
|
+
emit: (..._args: unknown[]) => { console.info("[linkdesk-mock] events.emit", ..._args); },
|
|
174
|
+
heartbeat: (..._args: unknown[]) => { console.info("[linkdesk-mock] events.heartbeat", ..._args); },
|
|
175
|
+
notifyTheme: (..._args: unknown[]) => { console.info("[linkdesk-mock] events.notifyTheme", ..._args); },
|
|
176
|
+
},
|
|
177
|
+
pluginState: {
|
|
178
|
+
get: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginState.get", ..._args); },
|
|
179
|
+
set: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginState.set", ..._args); },
|
|
180
|
+
onChange: (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginState.onChange", ..._args); return () => {}; },
|
|
181
|
+
},
|
|
182
|
+
workspace: {
|
|
183
|
+
getFolders: async (..._args: unknown[]) => { console.info("[linkdesk-mock] workspace.getFolders", ..._args); return []; },
|
|
184
|
+
getActive: async (..._args: unknown[]) => { console.info("[linkdesk-mock] workspace.getActive", ..._args); },
|
|
185
|
+
setActive: async (..._args: unknown[]) => { console.info("[linkdesk-mock] workspace.setActive", ..._args); },
|
|
186
|
+
openFolder: async (..._args: unknown[]) => { console.info("[linkdesk-mock] workspace.openFolder", ..._args); },
|
|
187
|
+
addFolder: async (..._args: unknown[]) => { console.info("[linkdesk-mock] workspace.addFolder", ..._args); },
|
|
188
|
+
removeFolder: async (..._args: unknown[]) => { console.info("[linkdesk-mock] workspace.removeFolder", ..._args); },
|
|
189
|
+
onDidChangeFolders: (..._args: unknown[]) => { console.info("[linkdesk-mock] workspace.onDidChangeFolders", ..._args); return () => {}; },
|
|
190
|
+
onDidChangeActiveWorkspace: (..._args: unknown[]) => { console.info("[linkdesk-mock] workspace.onDidChangeActiveWorkspace", ..._args); return () => {}; },
|
|
191
|
+
},
|
|
192
|
+
filesystem: {
|
|
193
|
+
readTextFile: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.readTextFile", ..._args); return ""; },
|
|
194
|
+
writeTextFile: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.writeTextFile", ..._args); },
|
|
195
|
+
exists: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.exists", ..._args); return false; },
|
|
196
|
+
createDir: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.createDir", ..._args); },
|
|
197
|
+
copy: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.copy", ..._args); },
|
|
198
|
+
rename: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.rename", ..._args); },
|
|
199
|
+
remove: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.remove", ..._args); },
|
|
200
|
+
listDir: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.listDir", ..._args); return []; },
|
|
201
|
+
readBinaryFile: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.readBinaryFile", ..._args); },
|
|
202
|
+
writeBinaryFile: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.writeBinaryFile", ..._args); },
|
|
203
|
+
watch: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.watch", ..._args); },
|
|
204
|
+
readdir: async (..._args: unknown[]) => { console.info("[linkdesk-mock] filesystem.readdir", ..._args); return []; },
|
|
205
|
+
},
|
|
206
|
+
path: {
|
|
207
|
+
appDataDir: async (..._args: unknown[]) => { console.info("[linkdesk-mock] path.appDataDir", ..._args); return ""; },
|
|
208
|
+
normalize: (..._args: unknown[]) => { console.info("[linkdesk-mock] path.normalize", ..._args); return ""; },
|
|
209
|
+
join: (..._args: unknown[]) => { console.info("[linkdesk-mock] path.join", ..._args); return ""; },
|
|
210
|
+
basename: (..._args: unknown[]) => { console.info("[linkdesk-mock] path.basename", ..._args); return ""; },
|
|
211
|
+
dirname: (..._args: unknown[]) => { console.info("[linkdesk-mock] path.dirname", ..._args); return ""; },
|
|
212
|
+
extname: (..._args: unknown[]) => { console.info("[linkdesk-mock] path.extname", ..._args); return ""; },
|
|
213
|
+
},
|
|
214
|
+
env: {
|
|
215
|
+
get: async (..._args: unknown[]) => { console.info("[linkdesk-mock] env.get", ..._args); },
|
|
216
|
+
},
|
|
217
|
+
search: {
|
|
218
|
+
searchFiles: async (..._args: unknown[]) => { console.info("[linkdesk-mock] search.searchFiles", ..._args); return []; },
|
|
219
|
+
},
|
|
220
|
+
encoding: {
|
|
221
|
+
detect: async (..._args: unknown[]) => { console.info("[linkdesk-mock] encoding.detect", ..._args); return ""; },
|
|
222
|
+
decode: async (..._args: unknown[]) => { console.info("[linkdesk-mock] encoding.decode", ..._args); return ""; },
|
|
223
|
+
encode: async (..._args: unknown[]) => { console.info("[linkdesk-mock] encoding.encode", ..._args); },
|
|
224
|
+
},
|
|
225
|
+
decorations: {
|
|
226
|
+
registerProvider: (..._args: unknown[]) => { console.info("[linkdesk-mock] decorations.registerProvider", ..._args); },
|
|
227
|
+
unregisterProvider: (..._args: unknown[]) => { console.info("[linkdesk-mock] decorations.unregisterProvider", ..._args); },
|
|
228
|
+
getDecoration: async (..._args: unknown[]) => { console.info("[linkdesk-mock] decorations.getDecoration", ..._args); },
|
|
229
|
+
onDidChange: (..._args: unknown[]) => { console.info("[linkdesk-mock] decorations.onDidChange", ..._args); return () => {}; },
|
|
230
|
+
},
|
|
231
|
+
fileAssociation: {
|
|
232
|
+
getPluginFor: async (..._args: unknown[]) => { console.info("[linkdesk-mock] fileAssociation.getPluginFor", ..._args); },
|
|
233
|
+
},
|
|
234
|
+
langDef: {
|
|
235
|
+
get: async (..._args: unknown[]) => { console.info("[linkdesk-mock] langDef.get", ..._args); },
|
|
236
|
+
},
|
|
237
|
+
lsp: {
|
|
238
|
+
spawn: async (..._args: unknown[]) => { console.info("[linkdesk-mock] lsp.spawn", ..._args); return ""; },
|
|
239
|
+
write: (..._args: unknown[]) => { console.info("[linkdesk-mock] lsp.write", ..._args); },
|
|
240
|
+
dispose: async (..._args: unknown[]) => { console.info("[linkdesk-mock] lsp.dispose", ..._args); },
|
|
241
|
+
onData: (..._args: unknown[]) => { console.info("[linkdesk-mock] lsp.onData", ..._args); return () => {}; },
|
|
242
|
+
},
|
|
243
|
+
protocol: {
|
|
244
|
+
listProtocols: async (..._args: unknown[]) => { console.info("[linkdesk-mock] protocol.listProtocols", ..._args); return []; },
|
|
245
|
+
getActiveProtocolId: async (..._args: unknown[]) => { console.info("[linkdesk-mock] protocol.getActiveProtocolId", ..._args); return ""; },
|
|
246
|
+
setActiveProtocolId: async (..._args: unknown[]) => { console.info("[linkdesk-mock] protocol.setActiveProtocolId", ..._args); },
|
|
247
|
+
},
|
|
248
|
+
viewContainer: {
|
|
249
|
+
getViewContainer: async (..._args: unknown[]) => { console.info("[linkdesk-mock] viewContainer.getViewContainer", ..._args); },
|
|
250
|
+
getViews: async (..._args: unknown[]) => { console.info("[linkdesk-mock] viewContainer.getViews", ..._args); return []; },
|
|
251
|
+
getView: async (..._args: unknown[]) => { console.info("[linkdesk-mock] viewContainer.getView", ..._args); },
|
|
252
|
+
registerView: async (..._args: unknown[]) => { console.info("[linkdesk-mock] viewContainer.registerView", ..._args); },
|
|
253
|
+
},
|
|
254
|
+
plugins: {
|
|
255
|
+
resolvePath: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.resolvePath", ..._args); return ""; },
|
|
256
|
+
resolveEntry: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.resolveEntry", ..._args); },
|
|
257
|
+
listDirs: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.listDirs", ..._args); return []; },
|
|
258
|
+
listAll: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.listAll", ..._args); return []; },
|
|
259
|
+
listDisabledDirs: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.listDisabledDirs", ..._args); return []; },
|
|
260
|
+
readManifest: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.readManifest", ..._args); return ""; },
|
|
261
|
+
readAllManifests: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.readAllManifests", ..._args); },
|
|
262
|
+
packageDownload: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.packageDownload", ..._args); },
|
|
263
|
+
packageExtract: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.packageExtract", ..._args); },
|
|
264
|
+
packageUpdateCheck: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.packageUpdateCheck", ..._args); },
|
|
265
|
+
packageStageUpdate: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.packageStageUpdate", ..._args); },
|
|
266
|
+
packageCommitUpdate: async (..._args: unknown[]) => { console.info("[linkdesk-mock] plugins.packageCommitUpdate", ..._args); },
|
|
267
|
+
},
|
|
268
|
+
pluginManager: {
|
|
269
|
+
list: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.list", ..._args); return []; },
|
|
270
|
+
enable: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.enable", ..._args); },
|
|
271
|
+
disable: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.disable", ..._args); },
|
|
272
|
+
uninstall: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.uninstall", ..._args); },
|
|
273
|
+
install: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.install", ..._args); },
|
|
274
|
+
installWithProgress: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.installWithProgress", ..._args); },
|
|
275
|
+
reinstall: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.reinstall", ..._args); },
|
|
276
|
+
getDisabled: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.getDisabled", ..._args); return []; },
|
|
277
|
+
getUninstalled: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.getUninstalled", ..._args); return []; },
|
|
278
|
+
isDisabled: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.isDisabled", ..._args); return false; },
|
|
279
|
+
update: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.update", ..._args); },
|
|
280
|
+
checkUpdates: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.checkUpdates", ..._args); },
|
|
281
|
+
notifyManifestChanged: (..._args: unknown[]) => { console.info("[linkdesk-mock] pluginManager.notifyManifestChanged", ..._args); },
|
|
282
|
+
},
|
|
283
|
+
bridge: {
|
|
284
|
+
onRequest: (..._args: unknown[]) => { console.info("[linkdesk-mock] bridge.onRequest", ..._args); return () => {}; },
|
|
285
|
+
respond: (..._args: unknown[]) => { console.info("[linkdesk-mock] bridge.respond", ..._args); },
|
|
286
|
+
broadcast: (..._args: unknown[]) => { console.info("[linkdesk-mock] bridge.broadcast", ..._args); },
|
|
287
|
+
notifyConfigChanged: (..._args: unknown[]) => { console.info("[linkdesk-mock] bridge.notifyConfigChanged", ..._args); },
|
|
288
|
+
},
|
|
289
|
+
pool: {
|
|
290
|
+
pushLayout: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.pushLayout", ..._args); },
|
|
291
|
+
onReady: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onReady", ..._args); return () => {}; },
|
|
292
|
+
toggleDevTools: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.toggleDevTools", ..._args); },
|
|
293
|
+
onSidebarAction: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onSidebarAction", ..._args); return () => {}; },
|
|
294
|
+
onTabAction: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onTabAction", ..._args); return () => {}; },
|
|
295
|
+
onTabBarRects: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onTabBarRects", ..._args); return () => {}; },
|
|
296
|
+
onDragPosition: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onDragPosition", ..._args); return () => {}; },
|
|
297
|
+
pushAdsorbHint: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.pushAdsorbHint", ..._args); },
|
|
298
|
+
onAdsorbIndex: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onAdsorbIndex", ..._args); return () => {}; },
|
|
299
|
+
pushQuickPick: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.pushQuickPick", ..._args); },
|
|
300
|
+
onQuickPickAction: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onQuickPickAction", ..._args); return () => {}; },
|
|
301
|
+
pushToast: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.pushToast", ..._args); },
|
|
302
|
+
onToastAction: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onToastAction", ..._args); return () => {}; },
|
|
303
|
+
pushDialog: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.pushDialog", ..._args); },
|
|
304
|
+
onDialogAction: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onDialogAction", ..._args); return () => {}; },
|
|
305
|
+
pushFloatingPanel: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.pushFloatingPanel", ..._args); },
|
|
306
|
+
onFloatingPanelAction: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onFloatingPanelAction", ..._args); return () => {}; },
|
|
307
|
+
onMemoryPressure: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onMemoryPressure", ..._args); return () => {}; },
|
|
308
|
+
createWindow: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.createWindow", ..._args); },
|
|
309
|
+
closeWindow: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.closeWindow", ..._args); },
|
|
310
|
+
onWindowClosed: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onWindowClosed", ..._args); return () => {}; },
|
|
311
|
+
onWindowBoundsChanged: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onWindowBoundsChanged", ..._args); return () => {}; },
|
|
312
|
+
onLayout: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onLayout", ..._args); return () => {}; },
|
|
313
|
+
ready: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.ready", ..._args); },
|
|
314
|
+
sidebarAction: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.sidebarAction", ..._args); },
|
|
315
|
+
tabAction: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.tabAction", ..._args); },
|
|
316
|
+
tabBarRects: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.tabBarRects", ..._args); },
|
|
317
|
+
dragPosition: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.dragPosition", ..._args); },
|
|
318
|
+
onAdsorbHint: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.onAdsorbHint", ..._args); return () => {}; },
|
|
319
|
+
adsorbIndex: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.adsorbIndex", ..._args); },
|
|
320
|
+
registerBeforeClose: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.registerBeforeClose", ..._args); },
|
|
321
|
+
unregisterBeforeClose: (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.unregisterBeforeClose", ..._args); },
|
|
322
|
+
beforeClose: async (..._args: unknown[]) => { console.info("[linkdesk-mock] pool.beforeClose", ..._args); return false; },
|
|
323
|
+
},
|
|
324
|
+
window: {
|
|
325
|
+
minimize: (..._args: unknown[]) => { console.info("[linkdesk-mock] window.minimize", ..._args); },
|
|
326
|
+
maximize: (..._args: unknown[]) => { console.info("[linkdesk-mock] window.maximize", ..._args); },
|
|
327
|
+
unmaximize: (..._args: unknown[]) => { console.info("[linkdesk-mock] window.unmaximize", ..._args); },
|
|
328
|
+
close: (..._args: unknown[]) => { console.info("[linkdesk-mock] window.close", ..._args); },
|
|
329
|
+
setZoom: (..._args: unknown[]) => { console.info("[linkdesk-mock] window.setZoom", ..._args); },
|
|
330
|
+
toggleDevTools: async (..._args: unknown[]) => { console.info("[linkdesk-mock] window.toggleDevTools", ..._args); },
|
|
331
|
+
isMaximized: async (..._args: unknown[]) => { console.info("[linkdesk-mock] window.isMaximized", ..._args); return false; },
|
|
332
|
+
onMaximizeChange: (..._args: unknown[]) => { console.info("[linkdesk-mock] window.onMaximizeChange", ..._args); return () => {}; },
|
|
333
|
+
setAlwaysOnTop: (..._args: unknown[]) => { console.info("[linkdesk-mock] window.setAlwaysOnTop", ..._args); },
|
|
334
|
+
isAlwaysOnTop: async (..._args: unknown[]) => { console.info("[linkdesk-mock] window.isAlwaysOnTop", ..._args); return false; },
|
|
335
|
+
onAlwaysOnTopChange: (..._args: unknown[]) => { console.info("[linkdesk-mock] window.onAlwaysOnTopChange", ..._args); return () => {}; },
|
|
336
|
+
},
|
|
337
|
+
shell: {
|
|
338
|
+
showItemInFolder: async (..._args: unknown[]) => { console.info("[linkdesk-mock] shell.showItemInFolder", ..._args); },
|
|
339
|
+
openInTerminal: async (..._args: unknown[]) => { console.info("[linkdesk-mock] shell.openInTerminal", ..._args); },
|
|
340
|
+
startDrag: (..._args: unknown[]) => { console.info("[linkdesk-mock] shell.startDrag", ..._args); },
|
|
341
|
+
},
|
|
342
|
+
hotExit: {
|
|
343
|
+
save: async (..._args: unknown[]) => { console.info("[linkdesk-mock] hotExit.save", ..._args); },
|
|
344
|
+
load: async (..._args: unknown[]) => { console.info("[linkdesk-mock] hotExit.load", ..._args); },
|
|
345
|
+
clear: async (..._args: unknown[]) => { console.info("[linkdesk-mock] hotExit.clear", ..._args); },
|
|
346
|
+
},
|
|
347
|
+
getFilePath: (..._args: unknown[]) => { console.info("[linkdesk-mock] getFilePath", ..._args); return ""; },
|
|
348
|
+
panel: {
|
|
349
|
+
reveal: async (..._args: unknown[]) => { console.info("[linkdesk-mock] panel.reveal", ..._args); },
|
|
350
|
+
revealFloating: async (..._args: unknown[]) => { console.info("[linkdesk-mock] panel.revealFloating", ..._args); },
|
|
351
|
+
},
|
|
352
|
+
settings: {
|
|
353
|
+
list: async (..._args: unknown[]) => { console.info("[linkdesk-mock] settings.list", ..._args); return []; },
|
|
354
|
+
getActive: async (..._args: unknown[]) => { console.info("[linkdesk-mock] settings.getActive", ..._args); },
|
|
355
|
+
setActive: async (..._args: unknown[]) => { console.info("[linkdesk-mock] settings.setActive", ..._args); },
|
|
356
|
+
},
|
|
357
|
+
factorySlots: {
|
|
358
|
+
listRoles: async (..._args: unknown[]) => { console.info("[linkdesk-mock] factorySlots.listRoles", ..._args); return []; },
|
|
359
|
+
list: async (..._args: unknown[]) => { console.info("[linkdesk-mock] factorySlots.list", ..._args); return []; },
|
|
360
|
+
getActive: async (..._args: unknown[]) => { console.info("[linkdesk-mock] factorySlots.getActive", ..._args); },
|
|
361
|
+
setActive: async (..._args: unknown[]) => { console.info("[linkdesk-mock] factorySlots.setActive", ..._args); },
|
|
362
|
+
},
|
|
363
|
+
};
|
package/dev-host/mock.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dev 宿主 mock 注入锚点(E6#23.5c 位置定案)。`injectDevMockApi()` 签名与调用点不变。
|
|
3
|
+
*
|
|
4
|
+
* 注入体(E6#27 落地替换,2026-09-07):
|
|
5
|
+
* - 方法树 = 自动生成 [linkdesk-mock.generated.ts](./linkdesk-mock.generated.ts)——与 linkdesk.d.ts
|
|
6
|
+
* 同一标注源 `src/core/api/linkdesk-api.ts`(杜绝 mock/preload 双份漂移)。每个方法 = 类型驱动
|
|
7
|
+
* 中性默认 + 调用即打 `[linkdesk-mock] <path>` 日志(mock vs 真 IPC 可感知,不静默假成功)。
|
|
8
|
+
* - #27b 兜底层 = 递归 Proxy:树内路径(契约里真实方法/命名空间)返回真子树/方法;**树外路径**
|
|
9
|
+
* (契约里不存在的方法名,如拼写错)**调用时抛错**「不在 linkdesk API 契约」而非静默 undefined /
|
|
10
|
+
* `undefined is not a function`——单源同构下,mock 缺 = 生产也缺,早抛早纠正。
|
|
11
|
+
*
|
|
12
|
+
* 真数据/真行为(串口/文件系统/IPC)不属于浏览器 mock——走真实 preload(装进 LinkDesk)或
|
|
13
|
+
* `linkdesk-plugin-sdk dev --real` 真机环(E6#28.5)。
|
|
14
|
+
*/
|
|
15
|
+
import { linkdeskMock } from "./linkdesk-mock.generated.js";
|
|
16
|
+
|
|
17
|
+
/** 常见 introspection 键——不当作 linkdesk API 路径,返回 undefined(防 console/JSON/运行时探测误触 throw-stub) */
|
|
18
|
+
const SKIP_INTRINSIC = new Set([
|
|
19
|
+
"then",
|
|
20
|
+
"toJSON",
|
|
21
|
+
"toString",
|
|
22
|
+
"valueOf",
|
|
23
|
+
"constructor",
|
|
24
|
+
"__proto__",
|
|
25
|
+
"hasOwnProperty",
|
|
26
|
+
"isPrototypeOf",
|
|
27
|
+
"propertyIsEnumerable",
|
|
28
|
+
]);
|
|
29
|
+
|
|
30
|
+
/** 树外路径 call-stub——访问不抛(feature-detect 可安全探测),调用才抛(#27b)。
|
|
31
|
+
* 自身是 Proxy:继续取属性返回更深 stub(`linkdesk.foo.bar()` 整链报完整 dotted path,
|
|
32
|
+
* 而非裸 TypeError「not a function」);symbol/intrinsic 键返回 undefined 防运行时探测误触。 */
|
|
33
|
+
function missingApiStub(dotted: string): () => never {
|
|
34
|
+
const stub = () => {
|
|
35
|
+
throw new Error(
|
|
36
|
+
`[dev] window.linkdesk.${dotted} 不是 linkdesk API 方法——dev mock 与 src/core/api/linkdesk-api.ts` +
|
|
37
|
+
` 同源自动生成(方法集与生产一致),契约里没有它 = 生产环境调用同样报错。请核对方法名/拼写。` +
|
|
38
|
+
`确需真实 IPC 行为 → linkdesk-plugin-sdk dev --real(E6#28.5 真机环)。`,
|
|
39
|
+
);
|
|
40
|
+
};
|
|
41
|
+
return new Proxy(stub, {
|
|
42
|
+
get(_t, prop) {
|
|
43
|
+
if (typeof prop === "symbol" || SKIP_INTRINSIC.has(String(prop))) return undefined;
|
|
44
|
+
return missingApiStub(`${dotted}.${String(prop)}`);
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** 递归 Proxy:树内路径返回真子树(命名空间再包一层 / 方法叶子直返),树外路径调用抛错 */
|
|
50
|
+
function wrapNode(node: Record<string, unknown>, path: string[]): Record<string, unknown> {
|
|
51
|
+
return new Proxy(node, {
|
|
52
|
+
get(t, prop) {
|
|
53
|
+
if (typeof prop === "symbol") return undefined;
|
|
54
|
+
const key = String(prop);
|
|
55
|
+
if (SKIP_INTRINSIC.has(key)) return undefined;
|
|
56
|
+
if (key in t) {
|
|
57
|
+
const v = t[key];
|
|
58
|
+
if (typeof v === "function") return v; // 方法叶子(自打 [linkdesk-mock] 调用日志)
|
|
59
|
+
if (v !== null && typeof v === "object") return wrapNode(v as Record<string, unknown>, [...path, key]);
|
|
60
|
+
return v;
|
|
61
|
+
}
|
|
62
|
+
return missingApiStub([...path, key].join("."));
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function injectDevMockApi(): void {
|
|
68
|
+
if (typeof window === "undefined") return;
|
|
69
|
+
if ((window as unknown as Record<string, unknown>).linkdesk) return;
|
|
70
|
+
|
|
71
|
+
(window as unknown as Record<string, unknown>).linkdesk = wrapNode(linkdeskMock, []);
|
|
72
|
+
}
|
package/dist/bin.js
CHANGED
|
@@ -13,6 +13,9 @@ import { join } from "node:path";
|
|
|
13
13
|
import { build } from "vite";
|
|
14
14
|
import { validatePluginJson } from "./validate.js";
|
|
15
15
|
import { defineLinkdeskPluginConfig } from "./vite-config.js";
|
|
16
|
+
import { runPluginDev } from "./dev-server.js";
|
|
17
|
+
import { runPluginDevReal } from "./dev-real.js";
|
|
18
|
+
import { runPluginPublish } from "./publish.js";
|
|
16
19
|
import { runPluginLint, renderPluginLintReport } from "./eslint/lint.js";
|
|
17
20
|
const VITE_CONFIG_FILES = [
|
|
18
21
|
"vite.config.ts",
|
|
@@ -25,7 +28,16 @@ const VITE_CONFIG_FILES = [
|
|
|
25
28
|
const USAGE = `linkdesk-plugin-sdk <command>
|
|
26
29
|
|
|
27
30
|
命令:
|
|
31
|
+
dev 在插件工程根起 dev 宿主(E6#24)——读 plugin.json → Vite dev server(端口 1421)
|
|
32
|
+
→ 浏览器打开纯前端预览 + HMR。只支持带 entry 的视图插件(脚手架 tab 形态)
|
|
33
|
+
dev --real E6#28.5 真机环——watch 作者源码 → 隔离单插件 build → 直写 {userData}/plugins/<id>
|
|
34
|
+
→ CDP reload「LinkDesk Pool」(LinkDesk 须以 --remote-debugging-port=9222 启动)。
|
|
35
|
+
真 IPC/串口/LSP 类插件的秒级真机调试(壳零新代码;LINKDESK_USER_PLUGINS_DIR /
|
|
36
|
+
LINKDESK_CDP_PORT 可覆盖)
|
|
28
37
|
build 在插件工程根构建 .linkdesk-plugin(读 plugin.json → Vite build → zip)
|
|
38
|
+
publish 一键发布(E6#26)——自动链路:建 GitHub Release → 上传 .linkdesk-plugin → 更新工程
|
|
39
|
+
origin 仓库根 marketplace.json(多市场源模型)。发前预览确认;--yes 跳过(CI);
|
|
40
|
+
--dry-run 只预览不碰网络。token:env LINKDESK_GITHUB_TOKEN,或首跑交互输入存入本机
|
|
29
41
|
validate 校验 plugin.json(参数 = 路径,默认 ./plugin.json)
|
|
30
42
|
lint E6#54d 门禁(eslint 12 规则 + 三 check 双轨,全 WARN 永不 fail;知情绕行 =
|
|
31
43
|
eslint-disable 注释)。参数 = 工程根,默认 process.cwd()
|
|
@@ -59,17 +71,47 @@ function cmdValidate(target) {
|
|
|
59
71
|
return 0;
|
|
60
72
|
}
|
|
61
73
|
async function main() {
|
|
62
|
-
const [, , command
|
|
74
|
+
const [, , command] = process.argv;
|
|
75
|
+
const rest = process.argv.slice(3); // 参数:dev --real / validate <path> / lint <root>
|
|
63
76
|
let code;
|
|
64
77
|
switch (command) {
|
|
78
|
+
case "dev": {
|
|
79
|
+
// dev [--real]——真机环(E6#28.5):build→直写 userData/plugins→CDP reload;挂起直到 Ctrl+C
|
|
80
|
+
if (rest.includes("--real")) {
|
|
81
|
+
await runPluginDevReal(process.cwd());
|
|
82
|
+
}
|
|
83
|
+
else if (rest.some((a) => a.startsWith("-") && a !== "--real")) {
|
|
84
|
+
console.error(USAGE);
|
|
85
|
+
code = 1;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// 挂起直到 Ctrl+C(server.close 后 resolve)——dev 无退出码语义,正常退出 = 0
|
|
90
|
+
await runPluginDev(process.cwd());
|
|
91
|
+
}
|
|
92
|
+
code = 0;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
65
95
|
case "build":
|
|
66
96
|
code = await cmdBuild();
|
|
67
97
|
break;
|
|
98
|
+
case "publish": {
|
|
99
|
+
// publish [--yes|--dry-run]——E6#26 自动发布链路(发前预览确认)
|
|
100
|
+
const flags = rest.filter((a) => a.startsWith("-"));
|
|
101
|
+
const unknown = flags.filter((a) => a !== "--yes" && a !== "--dry-run");
|
|
102
|
+
if (unknown.length > 0 || rest.some((a) => !a.startsWith("-"))) {
|
|
103
|
+
console.error(USAGE);
|
|
104
|
+
code = 1;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
code = await runPluginPublish(process.cwd(), { yes: rest.includes("--yes"), dryRun: rest.includes("--dry-run") });
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
68
110
|
case "validate":
|
|
69
|
-
code = cmdValidate(
|
|
111
|
+
code = cmdValidate(rest[0] ?? "plugin.json");
|
|
70
112
|
break;
|
|
71
113
|
case "lint":
|
|
72
|
-
code = await cmdLint(
|
|
114
|
+
code = await cmdLint(rest[0] ?? process.cwd());
|
|
73
115
|
break;
|
|
74
116
|
default:
|
|
75
117
|
console.error(USAGE);
|