@glodon-ecs/web-bridge-sdk 0.3.0 → 0.5.0
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/CHANGELOG.md +8 -0
- package/README.md +42 -14
- package/lib/index.d.ts +137 -0
- package/lib/index.es.js +1970 -2087
- package/lib/index.umd.js +3 -1
- package/package.json +12 -2
- package/.prettierrc +0 -8
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -4,26 +4,34 @@ ECSHub Panel 存在与多个宿主环境交互的场景,因此抽离出桥接
|
|
|
4
4
|
|
|
5
5
|
已支持:
|
|
6
6
|
|
|
7
|
-
- [
|
|
7
|
+
- [√] SketchUp
|
|
8
8
|
- [ ] QT
|
|
9
|
-
- [
|
|
9
|
+
- [ ] Web(for test)
|
|
10
10
|
- [ ] Rhino
|
|
11
|
-
- [
|
|
11
|
+
- [√] Concetto
|
|
12
|
+
- [√] ConcettoWeb
|
|
12
13
|
|
|
13
14
|
### 前置项
|
|
14
15
|
|
|
15
16
|
- node >= 16
|
|
16
17
|
|
|
18
|
+
### 安装
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install @glodon-ecs/web-bridge-sdk
|
|
22
|
+
```
|
|
23
|
+
|
|
17
24
|
### 使用示例
|
|
18
25
|
|
|
19
|
-
```
|
|
20
|
-
import ECSHubBridge from '@glodon-ecs/web-bridge-sdk';
|
|
26
|
+
```ts
|
|
27
|
+
import ECSHubBridge, { BridgeEnv } from '@glodon-ecs/web-bridge-sdk';
|
|
28
|
+
// 或使用命名导入:import { ECSHubBridge, BridgeEnv } from "@glodon-ecs/web-bridge-sdk";
|
|
21
29
|
|
|
22
30
|
// 使用示例
|
|
23
31
|
async function main() {
|
|
24
32
|
// initialize 方法需要先被调用
|
|
25
33
|
// await ECSHubBridge.initialize(); // 自动检测初始化,QT、SU、Web环境
|
|
26
|
-
const options = { env:
|
|
34
|
+
const options = { env: BridgeEnv.sketchup, logger: window.console }; // options 可选
|
|
27
35
|
await ECSHubBridge.initialize(options);
|
|
28
36
|
const bridge = ECSHubBridge.getInstance();
|
|
29
37
|
|
|
@@ -32,27 +40,33 @@ async function main() {
|
|
|
32
40
|
|
|
33
41
|
// 订阅
|
|
34
42
|
const unsubscribe = bridge.subscribe('modelChanged', (data) => {});
|
|
43
|
+
|
|
44
|
+
// 取消订阅
|
|
45
|
+
unsubscribe();
|
|
35
46
|
}
|
|
36
47
|
```
|
|
37
48
|
|
|
38
49
|
#### 扩展适配器
|
|
39
50
|
|
|
40
|
-
>
|
|
51
|
+
> 继承 `BaseAdapter` 并实现三个抽象方法
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
import { BaseAdapter } from '@glodon-ecs/web-bridge-sdk';
|
|
55
|
+
import type { LoggerType } from '@glodon-ecs/web-bridge-sdk';
|
|
41
56
|
|
|
42
|
-
|
|
43
|
-
class CADAdapter {
|
|
57
|
+
class CADAdapter extends BaseAdapter {
|
|
44
58
|
// 初始方法
|
|
45
59
|
async init() {
|
|
46
60
|
this.client = window.CADPlugin; // 假设第三方CAD插件
|
|
47
61
|
}
|
|
48
62
|
|
|
49
63
|
// 调用内部函数
|
|
50
|
-
call(method, args
|
|
51
|
-
return this.client.execCommand(method, args
|
|
64
|
+
async call(method: string, args: unknown[]) {
|
|
65
|
+
return this.client.execCommand(method, ...args);
|
|
52
66
|
}
|
|
53
67
|
|
|
54
68
|
// 注册事件监听
|
|
55
|
-
onEvent(event, callback) {
|
|
69
|
+
onEvent(event: string, callback: (...args: unknown[]) => void) {
|
|
56
70
|
this.client.on(event, callback);
|
|
57
71
|
return () => this.client.off(event, callback);
|
|
58
72
|
}
|
|
@@ -62,7 +76,21 @@ class CADAdapter {
|
|
|
62
76
|
await ECSHubBridge.initialize();
|
|
63
77
|
ECSHubBridge.setAdapter(new CADAdapter(), 'cad');
|
|
64
78
|
|
|
65
|
-
// 设置自定义适配器的client交互对象,如 ecsClient
|
|
79
|
+
// 设置自定义适配器的 client 交互对象,如 ecsClient
|
|
66
80
|
await ECSHubBridge.initialize();
|
|
67
|
-
ECSHubBridge.setAdapterClient(
|
|
81
|
+
ECSHubBridge.setAdapterClient(client);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 导出列表
|
|
85
|
+
|
|
86
|
+
| 导出 | 类型 | 说明 |
|
|
87
|
+
| --------------- | --------------- | ---------------------------------------------------------- |
|
|
88
|
+
| `ECSHubBridge` | class (default) | 桥接器主类 |
|
|
89
|
+
| `BridgeEnv` | enum | 环境枚举:`qt` / `web` / `sketchup` / `concetto` / `rhino` |
|
|
90
|
+
| `BaseAdapter` | abstract class | 适配器基类,扩展适配器时继承 |
|
|
91
|
+
| `BridgeOptions` | interface | 初始化配置项类型 |
|
|
92
|
+
| `LoggerType` | type | 日志对象类型 |
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
|
|
68
96
|
```
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
export declare abstract class BaseAdapter {
|
|
2
|
+
protected logger: LoggerType;
|
|
3
|
+
protected client: Client;
|
|
4
|
+
constructor(logger: LoggerType);
|
|
5
|
+
/**
|
|
6
|
+
* 初始化适配器
|
|
7
|
+
* @abstract
|
|
8
|
+
*/
|
|
9
|
+
abstract init(): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* 调用宿主环境方法
|
|
12
|
+
* @abstract
|
|
13
|
+
* @param {string} methodName - 方法名称
|
|
14
|
+
* @param {Array} args - 参数数组
|
|
15
|
+
* @options
|
|
16
|
+
*/
|
|
17
|
+
abstract call(methodName: string, args?: unknown, options?: {
|
|
18
|
+
eventName?: string;
|
|
19
|
+
} & Record<string, unknown>): Promise<unknown>;
|
|
20
|
+
/**
|
|
21
|
+
* 订阅事件
|
|
22
|
+
* @abstract
|
|
23
|
+
* @param {string} eventName - 事件名称
|
|
24
|
+
* @param {Function} callback - 回调函数
|
|
25
|
+
* @returns {Function} 取消订阅函数
|
|
26
|
+
*/
|
|
27
|
+
abstract onEvent(eventName: string, callback: (args: unknown) => void): () => void;
|
|
28
|
+
setClient(client: Client): void;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export declare enum BridgeEnv {
|
|
32
|
+
qt = "qt",
|
|
33
|
+
web = "web",
|
|
34
|
+
sketchup = "sketchup",
|
|
35
|
+
concetto = "concetto",
|
|
36
|
+
rhino = "rhino",
|
|
37
|
+
qiankun = "qiankun"
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export declare interface BridgeOptions {
|
|
41
|
+
env?: BridgeEnv;
|
|
42
|
+
logger?: LoggerType;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
declare type Client = Record<string, unknown> | null;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* ECSHub多环境桥接器
|
|
49
|
+
*/
|
|
50
|
+
declare class ECSHubBridge {
|
|
51
|
+
private static _instance;
|
|
52
|
+
protected _subscriptions: Map<(...args: unknown[]) => void, () => void>;
|
|
53
|
+
protected _isInitialized: boolean;
|
|
54
|
+
protected _logger: LoggerType;
|
|
55
|
+
protected _env: string;
|
|
56
|
+
protected _adapter: BaseAdapter;
|
|
57
|
+
/**
|
|
58
|
+
* @param {BridgeOptions} [options={}] 配置选项
|
|
59
|
+
* @param {BridgeEnv} [options.env] 强制指定环境
|
|
60
|
+
* @param {LoggerType} [options.logger] 日志输出对象
|
|
61
|
+
*/
|
|
62
|
+
constructor(options?: BridgeOptions);
|
|
63
|
+
_isQiankun(): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* 环境检测
|
|
66
|
+
* @private
|
|
67
|
+
*/
|
|
68
|
+
_detectEnv(forceEnv?: BridgeEnv): string;
|
|
69
|
+
/**
|
|
70
|
+
* 创建适配器实例
|
|
71
|
+
* @private
|
|
72
|
+
*/
|
|
73
|
+
_createAdapter(env: string, logger: LoggerType): BaseAdapter;
|
|
74
|
+
/**
|
|
75
|
+
* 初始化桥接器
|
|
76
|
+
* @async
|
|
77
|
+
*/
|
|
78
|
+
static initialize(options?: BridgeOptions): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* 调用宿主环境方法
|
|
81
|
+
* @async
|
|
82
|
+
* @param {string} methodName 方法名称
|
|
83
|
+
* @param {...unknown} args 参数列表
|
|
84
|
+
* options 可选参数
|
|
85
|
+
*/
|
|
86
|
+
callMethod(methodName: string, args?: unknown, options?: {
|
|
87
|
+
eventName?: string;
|
|
88
|
+
} & Record<string, unknown>): Promise<unknown>;
|
|
89
|
+
/**
|
|
90
|
+
* 订阅事件
|
|
91
|
+
* @param {string} eventName 事件名称
|
|
92
|
+
* @param {Function} callback 回调函数
|
|
93
|
+
* @returns {Function} 取消订阅函数
|
|
94
|
+
*/
|
|
95
|
+
subscribe(eventName: string, callback: (args: unknown) => void): () => void;
|
|
96
|
+
/**
|
|
97
|
+
* 取消订阅
|
|
98
|
+
* @param {Function} callback 要取消的回调函数
|
|
99
|
+
*/
|
|
100
|
+
unsubscribe(callback: (args: unknown) => void): void;
|
|
101
|
+
/**
|
|
102
|
+
* 获取当前环境
|
|
103
|
+
* @static
|
|
104
|
+
*/
|
|
105
|
+
static getCurrentEnv(): string;
|
|
106
|
+
/**
|
|
107
|
+
* 获取桥接器实例
|
|
108
|
+
* @static
|
|
109
|
+
*/
|
|
110
|
+
static getInstance(): ECSHubBridge;
|
|
111
|
+
/**
|
|
112
|
+
* 设置自定义适配器
|
|
113
|
+
* @static
|
|
114
|
+
* @param {BaseAdapter} adapter 适配器实例
|
|
115
|
+
* @param {string} [env='custom'] 环境标识
|
|
116
|
+
*/
|
|
117
|
+
static setAdapter(adapter: BaseAdapter, env?: string): void;
|
|
118
|
+
/**
|
|
119
|
+
* 设置ECS交互client对象
|
|
120
|
+
* @static
|
|
121
|
+
* @param {Record<string, unknown>} client 实例
|
|
122
|
+
*/
|
|
123
|
+
static setAdapterClient(client: Record<string, unknown> | null): void;
|
|
124
|
+
}
|
|
125
|
+
export { ECSHubBridge }
|
|
126
|
+
export default ECSHubBridge;
|
|
127
|
+
|
|
128
|
+
export declare type LoggerType = {
|
|
129
|
+
enable: boolean;
|
|
130
|
+
level: number;
|
|
131
|
+
log: (...args: unknown[]) => void;
|
|
132
|
+
info: (...args: unknown[]) => void;
|
|
133
|
+
warn: (...args: unknown[]) => void;
|
|
134
|
+
error: (...args: unknown[]) => void;
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export { }
|