@kevisual/api 0.0.14 → 0.0.15
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/package.json +1 -1
- package/query/query-proxy/index.ts +55 -3
package/package.json
CHANGED
|
@@ -3,7 +3,9 @@ import { QueryRouterServer, Route } from '@kevisual/router/src/route.ts';
|
|
|
3
3
|
import { filter } from '@kevisual/js-filter'
|
|
4
4
|
import { EventEmitter } from 'eventemitter3';
|
|
5
5
|
|
|
6
|
-
export
|
|
6
|
+
export const RouteTypeList = ['api', 'context', 'worker', 'page'] as const;
|
|
7
|
+
export type RouterViewItem = RouterViewApi | RouterViewContext | RouterViewWorker | RouteViewPage;
|
|
8
|
+
|
|
7
9
|
type RouteViewBase = {
|
|
8
10
|
id: string;
|
|
9
11
|
title: string;
|
|
@@ -44,6 +46,16 @@ export type RouterViewWorker = {
|
|
|
44
46
|
}
|
|
45
47
|
} & RouteViewBase;
|
|
46
48
|
|
|
49
|
+
/**
|
|
50
|
+
* 注入 js 的url地址,使用importScripts加载
|
|
51
|
+
*/
|
|
52
|
+
export type RouteViewPage = {
|
|
53
|
+
type: 'page',
|
|
54
|
+
page: {
|
|
55
|
+
url: string,
|
|
56
|
+
}
|
|
57
|
+
} & RouteViewBase;
|
|
58
|
+
|
|
47
59
|
export type RouterViewQuery = {
|
|
48
60
|
id: string,
|
|
49
61
|
query: string,
|
|
@@ -138,21 +150,44 @@ export class QueryProxy {
|
|
|
138
150
|
async init() {
|
|
139
151
|
const routerViewItems = this.routerViewItems || [];
|
|
140
152
|
if (routerViewItems.length === 0) {
|
|
153
|
+
// 默认初始化api类型路由
|
|
141
154
|
await this.initApi();
|
|
142
155
|
return;
|
|
143
156
|
}
|
|
144
157
|
for (const item of routerViewItems) {
|
|
145
158
|
switch (item.type) {
|
|
146
159
|
case 'api':
|
|
147
|
-
this.initApi(item);
|
|
160
|
+
await this.initApi(item);
|
|
148
161
|
break;
|
|
149
162
|
case 'context':
|
|
163
|
+
await this.initContext(item);
|
|
150
164
|
break;
|
|
151
165
|
case 'worker':
|
|
152
|
-
this.initWorker(item);
|
|
166
|
+
await this.initWorker(item);
|
|
167
|
+
break;
|
|
168
|
+
case 'page':
|
|
169
|
+
await this.initPage(item);
|
|
153
170
|
break;
|
|
154
171
|
}
|
|
155
172
|
}
|
|
173
|
+
this.emitter.emit('initComplete');
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* 监听初始化完成
|
|
177
|
+
* @returns
|
|
178
|
+
*/
|
|
179
|
+
async listenInitComplete(): Promise<boolean> {
|
|
180
|
+
return new Promise((resolve) => {
|
|
181
|
+
const timer = setTimeout(() => {
|
|
182
|
+
this.emitter.removeAllListeners('initComplete');
|
|
183
|
+
resolve(false);
|
|
184
|
+
}, 3 * 60000); // 3分钟超时
|
|
185
|
+
const func = () => {
|
|
186
|
+
clearTimeout(timer);
|
|
187
|
+
resolve(true);
|
|
188
|
+
}
|
|
189
|
+
this.emitter.once('initComplete', func);
|
|
190
|
+
});
|
|
156
191
|
}
|
|
157
192
|
async initApi(item?: RouterViewApi) {
|
|
158
193
|
const that = this;
|
|
@@ -304,6 +339,23 @@ export class QueryProxy {
|
|
|
304
339
|
}
|
|
305
340
|
}
|
|
306
341
|
}
|
|
342
|
+
async initPage(item?: RouteViewPage) {
|
|
343
|
+
if (!item?.page?.url) {
|
|
344
|
+
console.warn('Page地址未提供');
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
const url = item.page.url;
|
|
348
|
+
try {
|
|
349
|
+
if (typeof window !== 'undefined') {
|
|
350
|
+
await import(url).then((module) => { }).catch((err) => {
|
|
351
|
+
console.error('引入Page脚本失败:', url, err);
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
} catch (e) {
|
|
355
|
+
console.warn('引入Page脚本失败:', url, e);
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
307
359
|
/**
|
|
308
360
|
* 列出路由
|
|
309
361
|
* @param filter
|