更新 @kevisual/api 版本至 0.0.15,并在 RouterViewItem 中添加 RouteViewPage 类型,重构 QueryProxy 类以支持页面路由初始化
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@kevisual/api",
|
"name": "@kevisual/api",
|
||||||
"version": "0.0.14",
|
"version": "0.0.15",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "mod.ts",
|
"main": "mod.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ import { QueryRouterServer, Route } from '@kevisual/router/src/route.ts';
|
|||||||
import { filter } from '@kevisual/js-filter'
|
import { filter } from '@kevisual/js-filter'
|
||||||
import { EventEmitter } from 'eventemitter3';
|
import { EventEmitter } from 'eventemitter3';
|
||||||
|
|
||||||
export type RouterViewItem = RouterViewApi | RouterViewContext | RouterViewWorker;
|
export const RouteTypeList = ['api', 'context', 'worker', 'page'] as const;
|
||||||
|
export type RouterViewItem = RouterViewApi | RouterViewContext | RouterViewWorker | RouteViewPage;
|
||||||
|
|
||||||
type RouteViewBase = {
|
type RouteViewBase = {
|
||||||
id: string;
|
id: string;
|
||||||
title: string;
|
title: string;
|
||||||
@@ -44,6 +46,16 @@ export type RouterViewWorker = {
|
|||||||
}
|
}
|
||||||
} & RouteViewBase;
|
} & RouteViewBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注入 js 的url地址,使用importScripts加载
|
||||||
|
*/
|
||||||
|
export type RouteViewPage = {
|
||||||
|
type: 'page',
|
||||||
|
page: {
|
||||||
|
url: string,
|
||||||
|
}
|
||||||
|
} & RouteViewBase;
|
||||||
|
|
||||||
export type RouterViewQuery = {
|
export type RouterViewQuery = {
|
||||||
id: string,
|
id: string,
|
||||||
query: string,
|
query: string,
|
||||||
@@ -138,21 +150,44 @@ export class QueryProxy {
|
|||||||
async init() {
|
async init() {
|
||||||
const routerViewItems = this.routerViewItems || [];
|
const routerViewItems = this.routerViewItems || [];
|
||||||
if (routerViewItems.length === 0) {
|
if (routerViewItems.length === 0) {
|
||||||
|
// 默认初始化api类型路由
|
||||||
await this.initApi();
|
await this.initApi();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (const item of routerViewItems) {
|
for (const item of routerViewItems) {
|
||||||
switch (item.type) {
|
switch (item.type) {
|
||||||
case 'api':
|
case 'api':
|
||||||
this.initApi(item);
|
await this.initApi(item);
|
||||||
break;
|
break;
|
||||||
case 'context':
|
case 'context':
|
||||||
|
await this.initContext(item);
|
||||||
break;
|
break;
|
||||||
case 'worker':
|
case 'worker':
|
||||||
this.initWorker(item);
|
await this.initWorker(item);
|
||||||
|
break;
|
||||||
|
case 'page':
|
||||||
|
await this.initPage(item);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.emitter.emit('initComplete');
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 监听初始化完成
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async listenInitComplete(): Promise<boolean> {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const timer = setTimeout(() => {
|
||||||
|
this.emitter.removeAllListeners('initComplete');
|
||||||
|
resolve(false);
|
||||||
|
}, 3 * 60000); // 3分钟超时
|
||||||
|
const func = () => {
|
||||||
|
clearTimeout(timer);
|
||||||
|
resolve(true);
|
||||||
|
}
|
||||||
|
this.emitter.once('initComplete', func);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
async initApi(item?: RouterViewApi) {
|
async initApi(item?: RouterViewApi) {
|
||||||
const that = this;
|
const that = this;
|
||||||
@@ -304,6 +339,23 @@ export class QueryProxy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async initPage(item?: RouteViewPage) {
|
||||||
|
if (!item?.page?.url) {
|
||||||
|
console.warn('Page地址未提供');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const url = item.page.url;
|
||||||
|
try {
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
await import(url).then((module) => { }).catch((err) => {
|
||||||
|
console.error('引入Page脚本失败:', url, err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.warn('引入Page脚本失败:', url, e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 列出路由
|
* 列出路由
|
||||||
* @param filter
|
* @param filter
|
||||||
|
|||||||
Reference in New Issue
Block a user