chore: 更新依赖版本,提升 @kevisual/query 和 @kevisual/context 的版本

feat: 在应用管理路由中添加元数据,增强版本检测和发布功能
This commit is contained in:
2026-02-19 03:59:29 +08:00
parent 7088d025c9
commit 0d73941127
4 changed files with 64 additions and 33 deletions

View File

@@ -8,7 +8,7 @@
"@kevisual/ai": "^0.0.24", "@kevisual/ai": "^0.0.24",
"@kevisual/auth": "^2.0.3", "@kevisual/auth": "^2.0.3",
"@kevisual/js-filter": "^0.0.5", "@kevisual/js-filter": "^0.0.5",
"@kevisual/query": "^0.0.48", "@kevisual/query": "^0.0.49",
"@types/busboy": "^1.5.4", "@types/busboy": "^1.5.4",
"@types/send": "^1.2.1", "@types/send": "^1.2.1",
"@types/ws": "^8.18.1", "@types/ws": "^8.18.1",
@@ -25,7 +25,7 @@
"devDependencies": { "devDependencies": {
"@aws-sdk/client-s3": "^3.992.0", "@aws-sdk/client-s3": "^3.992.0",
"@kevisual/api": "^0.0.52", "@kevisual/api": "^0.0.52",
"@kevisual/context": "^0.0.6", "@kevisual/context": "^0.0.8",
"@kevisual/local-app-manager": "0.1.32", "@kevisual/local-app-manager": "0.1.32",
"@kevisual/logger": "^0.0.4", "@kevisual/logger": "^0.0.4",
"@kevisual/oss": "0.0.19", "@kevisual/oss": "0.0.19",
@@ -228,7 +228,7 @@
"@kevisual/auth": ["@kevisual/auth@2.0.3", "", {}, "sha512-4xpijaIhlCTr/DlJaV/gmkCQeg45EO1yxWpRvUX+1jCdVbuxSR0wZrF0SD9oybnjmKWMKDNPLsXyduFjMGcItA=="], "@kevisual/auth": ["@kevisual/auth@2.0.3", "", {}, "sha512-4xpijaIhlCTr/DlJaV/gmkCQeg45EO1yxWpRvUX+1jCdVbuxSR0wZrF0SD9oybnjmKWMKDNPLsXyduFjMGcItA=="],
"@kevisual/context": ["@kevisual/context@0.0.6", "", {}, "sha512-w7HBOuO3JH37n6xT6W3FD7ykqHTwtyxOQzTzfEcKDCbsvGB1wVreSxFm2bvoFnnFLuxT/5QMpKlnPrwvmcTGnw=="], "@kevisual/context": ["@kevisual/context@0.0.8", "", {}, "sha512-DTJpyHI34NE76B7g6f+QlIqiCCyqI2qkBMQE736dzeRDGxOjnbe2iQY9W+Rt2PE6kmymM3qyOmSfNovyWyWrkA=="],
"@kevisual/js-filter": ["@kevisual/js-filter@0.0.5", "", {}, "sha512-+S+Sf3K/aP6XtZI2s7TgKOr35UuvUvtpJ9YDW30a+mY0/N8gRuzyKhieBzQN7Ykayzz70uoMavBXut2rUlLgzw=="], "@kevisual/js-filter": ["@kevisual/js-filter@0.0.5", "", {}, "sha512-+S+Sf3K/aP6XtZI2s7TgKOr35UuvUvtpJ9YDW30a+mY0/N8gRuzyKhieBzQN7Ykayzz70uoMavBXut2rUlLgzw=="],
@@ -242,7 +242,7 @@
"@kevisual/permission": ["@kevisual/permission@0.0.4", "", {}, "sha512-zwBYPnT/z21W4q2wkklJrxvoYBYWG/+a3iXFDKqXQAnDOcxm/SU1f1N6FQb9KxGKl36/fclVlhxlxqszvKCenQ=="], "@kevisual/permission": ["@kevisual/permission@0.0.4", "", {}, "sha512-zwBYPnT/z21W4q2wkklJrxvoYBYWG/+a3iXFDKqXQAnDOcxm/SU1f1N6FQb9KxGKl36/fclVlhxlxqszvKCenQ=="],
"@kevisual/query": ["@kevisual/query@0.0.48", "", {}, "sha512-2zaWaqVNZO4DOZz2hhTjF41PS79he0kNlyctkAXchVUQ2IaiAl2kF/CSRvVor1RpeTU8Nr3xZyEZ+XOodazMVA=="], "@kevisual/query": ["@kevisual/query@0.0.49", "", {}, "sha512-GrWW+QlBO5lkiqvb7PjOstNtpTQVSR74EHHWjm7YoL9UdT1wuPQXGUApZHmMBSh3NIWCf0AL2G1hPWZMC7YeOQ=="],
"@kevisual/router": ["@kevisual/router@0.0.80", "", { "dependencies": { "es-toolkit": "^1.44.0" } }, "sha512-rVwi6Yf411bnNm2x94lMm+s4Csw0Yb7u/aj+VJJ59iouAYhjLuL7Rs1EcARhnQf47cegBJi6zozfGHgLsLHN2w=="], "@kevisual/router": ["@kevisual/router@0.0.80", "", { "dependencies": { "es-toolkit": "^1.44.0" } }, "sha512-rVwi6Yf411bnNm2x94lMm+s4Csw0Yb7u/aj+VJJ59iouAYhjLuL7Rs1EcARhnQf47cegBJi6zozfGHgLsLHN2w=="],
@@ -1010,6 +1010,8 @@
"@kevisual/ai/@kevisual/query": ["@kevisual/query@0.0.38", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-bfvbSodsZyMfwY+1T2SvDeOCKsT/AaIxlVe0+B1R/fNhlg2MDq2CP0L9HKiFkEm+OXrvXcYDMKPUituVUM5J6Q=="], "@kevisual/ai/@kevisual/query": ["@kevisual/query@0.0.38", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-bfvbSodsZyMfwY+1T2SvDeOCKsT/AaIxlVe0+B1R/fNhlg2MDq2CP0L9HKiFkEm+OXrvXcYDMKPUituVUM5J6Q=="],
"@kevisual/api/@kevisual/context": ["@kevisual/context@0.0.6", "", {}, "sha512-w7HBOuO3JH37n6xT6W3FD7ykqHTwtyxOQzTzfEcKDCbsvGB1wVreSxFm2bvoFnnFLuxT/5QMpKlnPrwvmcTGnw=="],
"@kevisual/wxmsg/@kevisual/context": ["@kevisual/context@0.0.4", "", {}, "sha512-HJeLeZQLU+7tCluSfOyvkgKLs0HjCZrdJlZgEgKRSa8XTwZfMAUt6J7qZTbrZAHBlPtX68EPu/PI8JMCeu3WAQ=="], "@kevisual/wxmsg/@kevisual/context": ["@kevisual/context@0.0.4", "", {}, "sha512-HJeLeZQLU+7tCluSfOyvkgKLs0HjCZrdJlZgEgKRSa8XTwZfMAUt6J7qZTbrZAHBlPtX68EPu/PI8JMCeu3WAQ=="],
"@kevisual/wxmsg/@kevisual/query": ["@kevisual/query@0.0.39", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-3UEPBIvtdykNkrby3hvrgrHdgd17Uq+Pnr4zs+JBzATkU2eKaOqtTUJqdyIEwuySCwzGTxrnlUzWP4tziDQDLQ=="], "@kevisual/wxmsg/@kevisual/query": ["@kevisual/query@0.0.39", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-3UEPBIvtdykNkrby3hvrgrHdgd17Uq+Pnr4zs+JBzATkU2eKaOqtTUJqdyIEwuySCwzGTxrnlUzWP4tziDQDLQ=="],

View File

@@ -49,7 +49,7 @@
"@kevisual/ai": "^0.0.24", "@kevisual/ai": "^0.0.24",
"@kevisual/auth": "^2.0.3", "@kevisual/auth": "^2.0.3",
"@kevisual/js-filter": "^0.0.5", "@kevisual/js-filter": "^0.0.5",
"@kevisual/query": "^0.0.48", "@kevisual/query": "^0.0.49",
"@types/busboy": "^1.5.4", "@types/busboy": "^1.5.4",
"@types/send": "^1.2.1", "@types/send": "^1.2.1",
"@types/ws": "^8.18.1", "@types/ws": "^8.18.1",
@@ -66,7 +66,7 @@
"devDependencies": { "devDependencies": {
"@aws-sdk/client-s3": "^3.992.0", "@aws-sdk/client-s3": "^3.992.0",
"@kevisual/api": "^0.0.52", "@kevisual/api": "^0.0.52",
"@kevisual/context": "^0.0.6", "@kevisual/context": "^0.0.8",
"@kevisual/local-app-manager": "0.1.32", "@kevisual/local-app-manager": "0.1.32",
"@kevisual/logger": "^0.0.4", "@kevisual/logger": "^0.0.4",
"@kevisual/oss": "0.0.19", "@kevisual/oss": "0.0.19",

51
pnpm-lock.yaml generated
View File

@@ -22,8 +22,8 @@ importers:
specifier: ^0.0.5 specifier: ^0.0.5
version: 0.0.5 version: 0.0.5
'@kevisual/query': '@kevisual/query':
specifier: ^0.0.46 specifier: ^0.0.49
version: 0.0.46 version: 0.0.49
'@types/busboy': '@types/busboy':
specifier: ^1.5.4 specifier: ^1.5.4
version: 1.5.4 version: 1.5.4
@@ -51,12 +51,6 @@ importers:
eventemitter3: eventemitter3:
specifier: ^5.0.4 specifier: ^5.0.4
version: 5.0.4 version: 5.0.4
pg:
specifier: ^8.18.0
version: 8.18.0
pm2:
specifier: ^6.0.14
version: 6.0.14
send: send:
specifier: ^1.2.1 specifier: ^1.2.1
version: 1.2.1 version: 1.2.1
@@ -71,11 +65,11 @@ importers:
specifier: ^3.992.0 specifier: ^3.992.0
version: 3.992.0 version: 3.992.0
'@kevisual/api': '@kevisual/api':
specifier: ^0.0.51 specifier: ^0.0.52
version: 0.0.51(react-dom@19.2.4(react@19.2.4))(react@19.2.4) version: 0.0.52(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@kevisual/context': '@kevisual/context':
specifier: ^0.0.6 specifier: ^0.0.8
version: 0.0.6 version: 0.0.8
'@kevisual/local-app-manager': '@kevisual/local-app-manager':
specifier: 0.1.32 specifier: 0.1.32
version: 0.1.32 version: 0.1.32
@@ -89,8 +83,8 @@ importers:
specifier: ^0.0.4 specifier: ^0.0.4
version: 0.0.4 version: 0.0.4
'@kevisual/router': '@kevisual/router':
specifier: 0.0.75 specifier: 0.0.80
version: 0.0.75 version: 0.0.80
'@kevisual/types': '@kevisual/types':
specifier: ^0.0.12 specifier: ^0.0.12
version: 0.0.12 version: 0.0.12
@@ -148,6 +142,12 @@ importers:
p-queue: p-queue:
specifier: ^9.1.0 specifier: ^9.1.0
version: 9.1.0 version: 9.1.0
pg:
specifier: ^8.18.0
version: 8.18.0
pm2:
specifier: ^6.0.14
version: 6.0.14
semver: semver:
specifier: ^7.7.4 specifier: ^7.7.4
version: 7.7.4 version: 7.7.4
@@ -661,8 +661,8 @@ packages:
'@kevisual/ai@0.0.24': '@kevisual/ai@0.0.24':
resolution: {integrity: sha512-7jvZk1/L//VIClK7usuNgN4ZA9Etgbooka1Sj5quE/0UywR+NNnwqXVZ89Y1fBhI1TkhauDsdJBAtcQ7r/vbVw==} resolution: {integrity: sha512-7jvZk1/L//VIClK7usuNgN4ZA9Etgbooka1Sj5quE/0UywR+NNnwqXVZ89Y1fBhI1TkhauDsdJBAtcQ7r/vbVw==}
'@kevisual/api@0.0.51': '@kevisual/api@0.0.52':
resolution: {integrity: sha512-uQzAhcJlJqIjBZ5wHBnDPsKf0/JYRKP7p3eS6TGn/Um4bvJ/AI0mP5QtJson/VcdJOFFwORiF3CJQ1ifm/Cadw==} resolution: {integrity: sha512-xWajr5lPqBpAwyWseXqE25tNiD/GUZcFdcQJB/oRtObjRa3rog1/U/otV098WZUZVYPGGeAMriKSd3MFdPFcjQ==}
'@kevisual/auth@2.0.3': '@kevisual/auth@2.0.3':
resolution: {integrity: sha512-4xpijaIhlCTr/DlJaV/gmkCQeg45EO1yxWpRvUX+1jCdVbuxSR0wZrF0SD9oybnjmKWMKDNPLsXyduFjMGcItA==} resolution: {integrity: sha512-4xpijaIhlCTr/DlJaV/gmkCQeg45EO1yxWpRvUX+1jCdVbuxSR0wZrF0SD9oybnjmKWMKDNPLsXyduFjMGcItA==}
@@ -673,6 +673,9 @@ packages:
'@kevisual/context@0.0.6': '@kevisual/context@0.0.6':
resolution: {integrity: sha512-w7HBOuO3JH37n6xT6W3FD7ykqHTwtyxOQzTzfEcKDCbsvGB1wVreSxFm2bvoFnnFLuxT/5QMpKlnPrwvmcTGnw==} resolution: {integrity: sha512-w7HBOuO3JH37n6xT6W3FD7ykqHTwtyxOQzTzfEcKDCbsvGB1wVreSxFm2bvoFnnFLuxT/5QMpKlnPrwvmcTGnw==}
'@kevisual/context@0.0.8':
resolution: {integrity: sha512-DTJpyHI34NE76B7g6f+QlIqiCCyqI2qkBMQE736dzeRDGxOjnbe2iQY9W+Rt2PE6kmymM3qyOmSfNovyWyWrkA==}
'@kevisual/js-filter@0.0.5': '@kevisual/js-filter@0.0.5':
resolution: {integrity: sha512-+S+Sf3K/aP6XtZI2s7TgKOr35UuvUvtpJ9YDW30a+mY0/N8gRuzyKhieBzQN7Ykayzz70uoMavBXut2rUlLgzw==} resolution: {integrity: sha512-+S+Sf3K/aP6XtZI2s7TgKOr35UuvUvtpJ9YDW30a+mY0/N8gRuzyKhieBzQN7Ykayzz70uoMavBXut2rUlLgzw==}
@@ -700,14 +703,14 @@ packages:
'@kevisual/query@0.0.39': '@kevisual/query@0.0.39':
resolution: {integrity: sha512-3UEPBIvtdykNkrby3hvrgrHdgd17Uq+Pnr4zs+JBzATkU2eKaOqtTUJqdyIEwuySCwzGTxrnlUzWP4tziDQDLQ==} resolution: {integrity: sha512-3UEPBIvtdykNkrby3hvrgrHdgd17Uq+Pnr4zs+JBzATkU2eKaOqtTUJqdyIEwuySCwzGTxrnlUzWP4tziDQDLQ==}
'@kevisual/query@0.0.46': '@kevisual/query@0.0.49':
resolution: {integrity: sha512-JwHV16ehk8JWM5wiWW5kz9yTg4HrOmmnci5QvwQYdhXYXDzGpUrOxeoz3wloMs4kX3bkowz97iLLW6uQdgUoTw==} resolution: {integrity: sha512-GrWW+QlBO5lkiqvb7PjOstNtpTQVSR74EHHWjm7YoL9UdT1wuPQXGUApZHmMBSh3NIWCf0AL2G1hPWZMC7YeOQ==}
'@kevisual/router@0.0.70': '@kevisual/router@0.0.70':
resolution: {integrity: sha512-vXlIj9jRufhcIfeuPWemjSI+dxdzSmIBq5eRxQzqEfAJ7k+mBPhoI4KxH8vHnwyL30bqm8EdODL/p6Wg8uBw3g==} resolution: {integrity: sha512-vXlIj9jRufhcIfeuPWemjSI+dxdzSmIBq5eRxQzqEfAJ7k+mBPhoI4KxH8vHnwyL30bqm8EdODL/p6Wg8uBw3g==}
'@kevisual/router@0.0.75': '@kevisual/router@0.0.80':
resolution: {integrity: sha512-WBDRKMjNYTP7ymkUUtiQwWYIcqnc+TGo3rFuRze8ovYV2UN5cQxIkIfsDbgWOdV1/v9b57gtiJvJRqWjCBWKRg==} resolution: {integrity: sha512-rVwi6Yf411bnNm2x94lMm+s4Csw0Yb7u/aj+VJJ59iouAYhjLuL7Rs1EcARhnQf47cegBJi6zozfGHgLsLHN2w==}
'@kevisual/types@0.0.12': '@kevisual/types@0.0.12':
resolution: {integrity: sha512-zJXH2dosir3jVrQ6QG4i0+iLQeT9gJ3H+cKXs8ReWboxBSYzUZO78XssVeVrFPsJ33iaAqo4q3DWbSS1dWGn7Q==} resolution: {integrity: sha512-zJXH2dosir3jVrQ6QG4i0+iLQeT9gJ3H+cKXs8ReWboxBSYzUZO78XssVeVrFPsJ33iaAqo4q3DWbSS1dWGn7Q==}
@@ -3004,7 +3007,7 @@ snapshots:
'@kevisual/permission': 0.0.3 '@kevisual/permission': 0.0.3
'@kevisual/query': 0.0.38 '@kevisual/query': 0.0.38
'@kevisual/api@0.0.51(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': '@kevisual/api@0.0.52(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies: dependencies:
'@kevisual/context': 0.0.6 '@kevisual/context': 0.0.6
'@kevisual/js-filter': 0.0.5 '@kevisual/js-filter': 0.0.5
@@ -3031,6 +3034,8 @@ snapshots:
'@kevisual/context@0.0.6': {} '@kevisual/context@0.0.6': {}
'@kevisual/context@0.0.8': {}
'@kevisual/js-filter@0.0.5': {} '@kevisual/js-filter@0.0.5': {}
'@kevisual/load@0.0.6': '@kevisual/load@0.0.6':
@@ -3061,13 +3066,13 @@ snapshots:
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
'@kevisual/query@0.0.46': {} '@kevisual/query@0.0.49': {}
'@kevisual/router@0.0.70': '@kevisual/router@0.0.70':
dependencies: dependencies:
es-toolkit: 1.44.0 es-toolkit: 1.44.0
'@kevisual/router@0.0.75': '@kevisual/router@0.0.80':
dependencies: dependencies:
es-toolkit: 1.44.0 es-toolkit: 1.44.0

View File

@@ -8,6 +8,7 @@ import { User } from '@/models/user.ts';
import { callDetectAppVersion } from './export.ts'; import { callDetectAppVersion } from './export.ts';
import { eq, and, desc } from 'drizzle-orm'; import { eq, and, desc } from 'drizzle-orm';
import { z } from 'zod'; import { z } from 'zod';
import { logger } from '@/modules/logger.ts';
app app
.route({ .route({
path: 'app', path: 'app',
@@ -105,7 +106,7 @@ app
if (!appListModel) { if (!appListModel) {
ctx.throw('app not found'); ctx.throw('app not found');
} }
console.log('get app', appListModel.id, appListModel.key, appListModel.version); logger.debug('get app', appListModel.id, appListModel.key, appListModel.version);
ctx.body = prefixFix(appListModel, tokenUser.username); ctx.body = prefixFix(appListModel, tokenUser.username);
}) })
.addTo(app); .addTo(app);
@@ -289,6 +290,17 @@ app
key: 'publish', key: 'publish',
middleware: ['auth'], middleware: ['auth'],
description: '发布应用,将某个版本的应用设置为当前应用的版本', description: '发布应用,将某个版本的应用设置为当前应用的版本',
metadata: {
args: {
data: z.object({
id: z.string().optional().describe('应用版本记录id'),
username: z.string().optional().describe('用户名,默认为当前用户'),
appKey: z.string().optional().describe('应用的唯一标识'),
version: z.string().describe('应用版本'),
detect: z.boolean().optional().describe('是否自动检测版本列表默认false'),
})
}
}
}) })
.define(async (ctx) => { .define(async (ctx) => {
const tokenUser = ctx.state.tokenUser; const tokenUser = ctx.state.tokenUser;
@@ -346,8 +358,9 @@ app
if (!am) { if (!am) {
ctx.throw('app 未发现'); ctx.throw('app 未发现');
} }
if (!isDetect) { const amData = am.data as AppData;
const amData = am.data as AppData; if (version !== am.version) {
// 发布版本和当前版本不一致
await db.update(schema.kvApp) await db.update(schema.kvApp)
.set({ data: { ...amData, files }, version: appList.version, updatedAt: new Date().toISOString() }) .set({ data: { ...amData, files }, version: appList.version, updatedAt: new Date().toISOString() })
.where(eq(schema.kvApp.id, am.id)); .where(eq(schema.kvApp.id, am.id));
@@ -413,8 +426,17 @@ app
.route({ .route({
path: 'app', path: 'app',
key: 'detectVersionList', key: 'detectVersionList',
description: '检测版本列表minio中的数据自己上传后根据版本信息进行替换', description: '检测版本列表, 对存储内容的网关暴露对应的的模块',
middleware: ['auth'], middleware: ['auth'],
metadata: {
args: {
data: z.object({
appKey: z.string().describe('应用的唯一标识'),
version: z.string().describe('应用版本'),
username: z.string().optional().describe('用户名,默认为当前用户'),
})
}
}
}) })
.define(async (ctx) => { .define(async (ctx) => {
const tokenUser = ctx.state.tokenUser; const tokenUser = ctx.state.tokenUser;
@@ -469,6 +491,7 @@ app
)).limit(1); )).limit(1);
let am = ams[0]; let am = ams[0];
if (!am) { if (!am) {
// 如果应用不存在则创建应用记录版本为0.0.1
const newAms = await db.insert(schema.kvApp).values({ const newAms = await db.insert(schema.kvApp).values({
title: appKey, title: appKey,
key: appKey, key: appKey,
@@ -480,6 +503,7 @@ app
}).returning(); }).returning();
am = newAms[0]; am = newAms[0];
} else { } else {
// 如果应用存在,并且版本相同,则更新应用记录的文件列表
const appModels = await db.select().from(schema.kvApp).where(and( const appModels = await db.select().from(schema.kvApp).where(and(
eq(schema.kvApp.key, appKey), eq(schema.kvApp.key, appKey),
eq(schema.kvApp.version, version), eq(schema.kvApp.version, version),