@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 CHANGED
@@ -1,5 +1,13 @@
1
1
  ## 发布日志
2
2
 
3
+ #### 0.5.0
4
+
5
+ - 支持CCWeb(qiankun)
6
+
7
+ #### 0.4.0
8
+
9
+ - 从js迁移到ts,SDK支持类型系统
10
+
3
11
  #### 0.3.0
4
12
 
5
13
  - 兼容 CC 方法调用中需要监听异步回调事件,才能在回调事件中返回返回值
package/README.md CHANGED
@@ -4,26 +4,34 @@ ECSHub Panel 存在与多个宿主环境交互的场景,因此抽离出桥接
4
4
 
5
5
  已支持:
6
6
 
7
- - [x] SketchUp
7
+ - [] SketchUp
8
8
  - [ ] QT
9
- - [x] Web(for test)
9
+ - [ ] Web(for test)
10
10
  - [ ] Rhino
11
- - [-] Concetto
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
- ```js
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: 'sketchup', logger: window.console }; // options 可选
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
- ```js
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, options) {
51
- return this.client.execCommand(method, args, options);
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(new ECS({...}));
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 { }