This commit is contained in:
2025-12-29 19:49:38 +08:00
parent e5c15bd70a
commit e8bb129abc
3 changed files with 56 additions and 16 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "@kevisual/api",
"version": "0.0.8",
"version": "0.0.9",
"description": "",
"main": "mod.ts",
"scripts": {
@@ -32,6 +32,7 @@
"fast-glob": "^3.3.3"
},
"dependencies": {
"@kevisual/js-filter": "^0.0.1",
"@kevisual/load": "^0.0.6",
"es-toolkit": "^1.43.0",
"nanoid": "^5.1.6"

26
pnpm-lock.yaml generated
View File

@@ -8,6 +8,9 @@ importers:
.:
dependencies:
'@kevisual/js-filter':
specifier: ^0.0.1
version: 0.0.1
'@kevisual/load':
specifier: ^0.0.6
version: 0.0.6
@@ -25,8 +28,8 @@ importers:
specifier: ^0.0.33
version: 0.0.33
'@kevisual/router':
specifier: ^0.0.41
version: 0.0.41
specifier: ^0.0.51
version: 0.0.51
'@kevisual/types':
specifier: ^0.0.10
version: 0.0.10
@@ -71,6 +74,9 @@ packages:
'@kevisual/cache@0.0.4':
resolution: {integrity: sha512-NlyriJ9fC27TgQhWYbEH9hG84R2k0lIofOxo/+nVHN6a6LJSLnVbpDIysRcnH8MI52n/XHfWwLSjeDDL3D1/cQ==}
'@kevisual/js-filter@0.0.1':
resolution: {integrity: sha512-wACP0Hphhel/ZkH9moSAIABofs/Zz7EUmUKdHv+jTaXRSkdJEs4pCpzg0MUc9PMqs/7C5yXrJaM50O4TXWKIoQ==}
'@kevisual/load@0.0.6':
resolution: {integrity: sha512-+3YTFehRcZ1haGel5DKYMUwmi5i6f2psyaPZlfkKU/cOXgkpwoG9/BEqPCnPjicKqqnksEpixVRkyHJ+5bjLVA==}
@@ -83,8 +89,8 @@ packages:
'@kevisual/router@0.0.20':
resolution: {integrity: sha512-uSwDYWh+kvAu6i0m0SJVgcLR/CYz7WvIWGz0nSF8Vg6smJuAgI+laHR4ESO8Fbz+Xn8bPHuSwmM//HHLMLx2FA==}
'@kevisual/router@0.0.41':
resolution: {integrity: sha512-OKtTLOnTVew+uAx9R4VOdgCpf7KjOL7wMB2bZEJUun9SnqvTBQ+/dJkJ2VlihYPBuSEB5EkxZrOoaDRj7CMRJw==}
'@kevisual/router@0.0.51':
resolution: {integrity: sha512-i9qYBeS/um78oC912oWJD3iElB+5NTKyTrz1Hzf4DckiUFnjLL81UPwjIh5I2l9+ul0IZ/Pxx+sFSF99fJkzKg==}
'@kevisual/types@0.0.10':
resolution: {integrity: sha512-Q73uzzjk9UidumnmCvOpgzqDDvQxsblz22bIFuoiioUFJWwaparx8bpd8ArRyFojicYL1YJoFDzDZ9j9NN8grA==}
@@ -460,8 +466,8 @@ packages:
resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
engines: {node: '>=10'}
selfsigned@5.2.0:
resolution: {integrity: sha512-QKF6fsJgdKn5Cy1SekTuwUQ6LOLUdnO4gVne1+TGSAyL/CD1aznNCmBna+bQB9xyon7DiYbDtTR1cLaxDXuaVA==}
selfsigned@5.4.0:
resolution: {integrity: sha512-Yn8qZOOJv+NhcGY19iC+ngW6hlUCNpvWEkrKllXNhmkLgR9fcErm8EqZ/wev7/tiwjKC9qj17Fa/PtBNzb6q8g==}
engines: {node: '>=15.6.0'}
send@1.2.1:
@@ -523,6 +529,8 @@ snapshots:
lru-cache: 11.2.4
nanoid: 5.1.6
'@kevisual/js-filter@0.0.1': {}
'@kevisual/load@0.0.6':
dependencies:
eventemitter3: 5.0.1
@@ -542,10 +550,10 @@ snapshots:
path-to-regexp: 8.2.0
selfsigned: 2.4.1
'@kevisual/router@0.0.41':
'@kevisual/router@0.0.51':
dependencies:
path-to-regexp: 8.3.0
selfsigned: 5.2.0
selfsigned: 5.4.0
send: 1.2.1
transitivePeerDependencies:
- supports-color
@@ -947,7 +955,7 @@ snapshots:
'@types/node-forge': 1.3.11
node-forge: 1.3.1
selfsigned@5.2.0:
selfsigned@5.4.0:
dependencies:
'@peculiar/x509': 1.14.2
pkijs: 3.3.3

View File

@@ -1,5 +1,21 @@
import { Query } from '@kevisual/query/query';
import { QueryRouterServer, Route } from '@kevisual/router/src/route.ts';
import { filter } from '@kevisual/js-filter'
export type ProxyItem = {
title?: string;
type?: 'api' | 'context' | 'page';
description?: string;
api?: {
url: string;
},
context?: {
key: string;
},
page?: {},
where?: string;
whereList?: Array<{ title: string; where: string }>;
}
export class QueryProxy {
query: Query;
router: QueryRouterServer;
@@ -7,7 +23,16 @@ export class QueryProxy {
constructor(opts?: { query: Query, router?: QueryRouterServer, token?: string }) {
this.query = opts?.query || new Query();
this.router = opts?.router || new QueryRouterServer();
this.token = opts?.token;
this.token = opts?.token || this.getDefulatToken();
}
getDefulatToken() {
try {
if (localStorage) {
return localStorage.getItem('token') || undefined;
}
} catch (e) {
return undefined;
}
}
/**
* 初始化路由
@@ -22,11 +47,12 @@ export class QueryProxy {
}
const _list = res.data?.list || []
for (const item of _list) {
if (item.path && item.key) {
console.log(`Register route: [${item.path}] ${item.key}`);
if (item.path || item.id) {
console.log(`Register route: [${item.path}] ${item?.key}`);
this.router.route({
path: item.path,
key: item.key,
key: item.key || '',
id: item.id,
description: item.description,
metadata: item.metadata,
}).define(async (ctx) => {
@@ -43,10 +69,15 @@ export class QueryProxy {
/**
* 列出路由
* @param filter
* @param query WHERE metadata.tags CONTAINS 'premium'
* @returns
*/
async listRoutes(filter?: (item: Route) => boolean) {
return this.router.routes.filter(filter || (() => true));
async listRoutes(filterFn?: (item: Route) => boolean, query?: string) {
const routes = this.router.routes.filter(filterFn || (() => true));
if (query) {
return filter(routes, query);
}
return routes;
}
/**
* 运行路由