translime-sdk 1.0.1 → 1.0.2
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/LICENSE +21 -0
- package/README.md +222 -153
- package/dist/index.cjs +231 -64
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +127 -93
- package/dist/index.d.ts +127 -93
- package/dist/index.js +231 -81
- package/dist/index.js.map +1 -1
- package/dist/preview/settings.scss +86 -86
- package/dist/preview-mock.cjs +261 -219
- package/dist/preview-mock.cjs.map +1 -1
- package/dist/preview-mock.js +262 -231
- package/dist/preview-mock.js.map +1 -1
- package/dist/preview-template.html +13 -13
- package/dist/preview.cjs +3106 -3387
- package/dist/preview.cjs.map +1 -1
- package/dist/preview.js +3077 -3370
- package/dist/preview.js.map +1 -1
- package/dist/translime-sdk.css +31 -31
- package/dist/vite-plugin.cjs +142 -174
- package/dist/vite-plugin.cjs.map +1 -1
- package/dist/vite-plugin.d.cts +22 -22
- package/dist/vite-plugin.d.ts +22 -22
- package/dist/vite-plugin.js +134 -172
- package/dist/vite-plugin.js.map +1 -1
- package/package.json +8 -10
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021-2025 slime7 contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,153 +1,222 @@
|
|
|
1
|
-
# Translime SDK
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## 安装
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
pnpm add translime-sdk
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
在插件的 `vite.config.
|
|
14
|
-
|
|
15
|
-
```javascript
|
|
16
|
-
import { defineConfig } from 'vite';
|
|
17
|
-
import { translimeSdk } from 'translime-sdk/vite';
|
|
18
|
-
|
|
19
|
-
export default defineConfig({
|
|
20
|
-
plugins: [
|
|
21
|
-
translimeSdk(),
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- `
|
|
52
|
-
- `
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
1
|
+
# Translime SDK
|
|
2
|
+
|
|
3
|
+
Translime 官方插件 SDK,提供插件开发常用的运行时 API、类型提示和 Vite 集成能力。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add translime-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Vite 集成
|
|
12
|
+
|
|
13
|
+
在插件的 `vite.config.mjs` 中使用 `translimeSdk()`,可以自动处理 `electron` 等依赖的外部化,并支持 preview 模式。
|
|
14
|
+
|
|
15
|
+
```javascript
|
|
16
|
+
import { defineConfig } from 'vite';
|
|
17
|
+
import { translimeSdk } from 'translime-sdk/vite';
|
|
18
|
+
|
|
19
|
+
export default defineConfig({
|
|
20
|
+
plugins: [
|
|
21
|
+
translimeSdk(),
|
|
22
|
+
],
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 代码示例
|
|
27
|
+
|
|
28
|
+
### 主进程
|
|
29
|
+
|
|
30
|
+
```javascript
|
|
31
|
+
import { usePluginConfig } from 'translime-sdk';
|
|
32
|
+
|
|
33
|
+
const config = usePluginConfig('my-plugin-id');
|
|
34
|
+
const myValue = config.get('settingsKey', 'default');
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 插件 UI
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
import { useIpc, useVuetifyComponents } from 'translime-sdk';
|
|
41
|
+
|
|
42
|
+
const ipc = useIpc();
|
|
43
|
+
const { VBtn, VCard } = useVuetifyComponents();
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 核心 API
|
|
47
|
+
|
|
48
|
+
### 主进程 (Main Process)
|
|
49
|
+
|
|
50
|
+
- `getMainStore()`: 获取主程序全局 Store。
|
|
51
|
+
- `usePluginConfig(pluginId)`: 获取当前插件配置读写工具。
|
|
52
|
+
- `usePluginInterop()`: 获取插件间通信工具。
|
|
53
|
+
|
|
54
|
+
#### 插件间通信
|
|
55
|
+
|
|
56
|
+
`usePluginInterop()` 用于在一个插件的主进程代码中访问另一个插件导出的公共 API。
|
|
57
|
+
|
|
58
|
+
```javascript
|
|
59
|
+
import { usePluginInterop } from 'translime-sdk';
|
|
60
|
+
|
|
61
|
+
const doSomething = async () => {
|
|
62
|
+
const interop = usePluginInterop();
|
|
63
|
+
if (!interop) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const targetApi = interop.getExports('target-plugin-id');
|
|
68
|
+
if (targetApi) {
|
|
69
|
+
targetApi.someMethod();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
const api = await interop.waitForPlugin('target-plugin-id', 5000);
|
|
74
|
+
api.someMethod();
|
|
75
|
+
} catch (error) {
|
|
76
|
+
console.error('目标插件未就绪', error);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 渲染进程 (Renderer Process)
|
|
82
|
+
|
|
83
|
+
- `useIpc()`: 获取 IPC 工具。
|
|
84
|
+
- `useVuetify()`: 获取 Vuetify 实例。
|
|
85
|
+
- `useVuetifyComponents()`: 获取所有 Vuetify 组件。
|
|
86
|
+
- `useVuetifyDirectives()`: 获取所有 Vuetify 指令。
|
|
87
|
+
- `useDialog()`: 获取 Electron 对话框 API。
|
|
88
|
+
- `useShell()`: 获取 Shell API。
|
|
89
|
+
- `getPluginSetting(...args)`: 获取插件设置。
|
|
90
|
+
- `setPluginSetting(...args)`: 设置插件设置。
|
|
91
|
+
- `useWindowControl()`: 获取窗口控制工具。
|
|
92
|
+
- `useClipboard()`: 获取剪贴板工具。
|
|
93
|
+
- `openLink(...args)`: 在浏览器中打开链接。
|
|
94
|
+
- `isPreviewMode()`: 检查当前是否为 preview 模式。
|
|
95
|
+
- `electronNetAdapter(config)`: 基于 `window.ts.net` 的 axios adapter。
|
|
96
|
+
|
|
97
|
+
### 通用 (Common)
|
|
98
|
+
|
|
99
|
+
- `useLogger()`: 获取标准日志工具,支持 `log`, `info`, `warn`, `error`, `debug`。
|
|
100
|
+
|
|
101
|
+
## 网络请求 Adapter
|
|
102
|
+
|
|
103
|
+
如果插件需要在 UI 渲染层直接发起 HTTP 请求,并复用主程序通过 `window.ts.net` 暴露的网络层,可以使用 SDK 导出的 `electronNetAdapter`。
|
|
104
|
+
|
|
105
|
+
适用场景:
|
|
106
|
+
|
|
107
|
+
- 需要在插件 UI 中直接请求远程接口。
|
|
108
|
+
- 需要绕过浏览器环境下的跨域限制。
|
|
109
|
+
- 需要配合 axios 的 `signal` / `AbortController` 取消请求。
|
|
110
|
+
|
|
111
|
+
最小示例:
|
|
112
|
+
|
|
113
|
+
```javascript
|
|
114
|
+
import axios from 'axios';
|
|
115
|
+
import { electronNetAdapter } from 'translime-sdk';
|
|
116
|
+
|
|
117
|
+
const response = await axios({
|
|
118
|
+
url: 'https://example.com/api/data',
|
|
119
|
+
method: 'GET',
|
|
120
|
+
adapter: electronNetAdapter,
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
console.log(response.data);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
也可以在 axios 实例中统一配置:
|
|
127
|
+
|
|
128
|
+
```javascript
|
|
129
|
+
import axios from 'axios';
|
|
130
|
+
import { electronNetAdapter } from 'translime-sdk';
|
|
131
|
+
|
|
132
|
+
const request = axios.create({
|
|
133
|
+
adapter: electronNetAdapter,
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
注意事项:
|
|
138
|
+
|
|
139
|
+
- 该 adapter 仅适用于插件 UI / Renderer,不适用于插件主进程。
|
|
140
|
+
- 真实 Electron 环境下会调用 `window.ts.net.request()` 和 `window.ts.net.abort()`。
|
|
141
|
+
- Preview 模式下会自动回退到 SDK 提供的 mock `window.ts.net` 实现,适合基础联调。
|
|
142
|
+
- 如果请求逻辑包含敏感凭据、签名或更复杂的业务编排,仍建议放在插件主进程,再通过插件自己的 IPC 暴露给 UI。
|
|
143
|
+
|
|
144
|
+
## 宿主优先的开发流程
|
|
145
|
+
|
|
146
|
+
开发插件时,应把真实的 Translime 宿主作为主要运行环境。推荐顺序如下:
|
|
147
|
+
|
|
148
|
+
1. 在你自己的插件仓库中开发并重新构建插件。
|
|
149
|
+
2. 通过 `pnpm link` 将插件包链接到 Translime 的 `plugins_dev/node_modules` 目录。
|
|
150
|
+
3. 直接在 Translime 中打开插件,验证真实的宿主布局、设置、IPC 和窗口行为。
|
|
151
|
+
|
|
152
|
+
`preview:ui` 仍然可用,但只建议作为独立 UI 调试的辅助工具。对于依赖 Translime 上下文的页面,不应以 preview 结果替代宿主内验证。
|
|
153
|
+
|
|
154
|
+
## Preview 模式
|
|
155
|
+
|
|
156
|
+
Preview 模式允许你在普通浏览器中预览和调试插件 UI,无需依赖 Electron 环境。
|
|
157
|
+
|
|
158
|
+
### 特性
|
|
159
|
+
|
|
160
|
+
- 零配置:SDK 会自动检测 preview 模式并注入 mock 实现。
|
|
161
|
+
- 完整的 Vuetify 支持:Preview Shell 自动提供 Vuetify 组件和主题。
|
|
162
|
+
- API Mock:IPC、Dialog、Shell、插件设置等接口都有对应 mock。
|
|
163
|
+
- 设置持久化:插件设置使用 `localStorage` 存储。
|
|
164
|
+
|
|
165
|
+
### 快速开始
|
|
166
|
+
|
|
167
|
+
1. 在插件的 `package.json` 中添加脚本:
|
|
168
|
+
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"scripts": {
|
|
172
|
+
"preview:ui": "vite -c ui.vite.config.mjs --mode preview"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
2. 运行:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
pnpm preview:ui
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
3. 在浏览器中打开 Vite 输出的本地地址,通常是 `http://localhost:5173`。
|
|
184
|
+
|
|
185
|
+
### Vite 插件配置
|
|
186
|
+
|
|
187
|
+
```javascript
|
|
188
|
+
import { defineConfig } from 'vite';
|
|
189
|
+
import { translimeSdk } from 'translime-sdk/vite';
|
|
190
|
+
|
|
191
|
+
export default defineConfig(() => ({
|
|
192
|
+
plugins: [
|
|
193
|
+
translimeSdk({
|
|
194
|
+
previewComponent: './src/ui/ui.vue',
|
|
195
|
+
}),
|
|
196
|
+
],
|
|
197
|
+
}));
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Mock API 行为
|
|
201
|
+
|
|
202
|
+
| API | Mock 行为 |
|
|
203
|
+
|-----|----------|
|
|
204
|
+
| `useIpc().invoke()` | 打印调用日志,返回 `null` |
|
|
205
|
+
| `getPluginSetting()` | 从 `localStorage` 读取 |
|
|
206
|
+
| `setPluginSetting()` | 保存到 `localStorage` |
|
|
207
|
+
| `useClipboard()` | 使用浏览器 Clipboard API |
|
|
208
|
+
| `openLink()` | 使用 `window.open()` 打开新窗口 |
|
|
209
|
+
| `electronNetAdapter()` | 通过 mock `window.ts.net` 发起基础请求 |
|
|
210
|
+
|
|
211
|
+
### 条件代码
|
|
212
|
+
|
|
213
|
+
```javascript
|
|
214
|
+
import { isPreviewMode, useIpc } from 'translime-sdk';
|
|
215
|
+
|
|
216
|
+
if (isPreviewMode()) {
|
|
217
|
+
console.log('当前运行在 Preview 模式');
|
|
218
|
+
} else {
|
|
219
|
+
const ipc = useIpc();
|
|
220
|
+
await ipc.invoke('some-api@plugin-id');
|
|
221
|
+
}
|
|
222
|
+
```
|