diff --git a/package.json b/package.json index c5448fe..14d81a2 100644 --- a/package.json +++ b/package.json @@ -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" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d776efd..0131a59 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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 diff --git a/query/query-proxy/index.ts b/query/query-proxy/index.ts index b12d596..70dbc36 100644 --- a/query/query-proxy/index.ts +++ b/query/query-proxy/index.ts @@ -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; } /** * 运行路由