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