diff --git a/package-lock.json b/package-lock.json index 7c82b6a..c052929 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,14 @@ { "name": "shrimp-server", - "version": "0.7.2", + "version": "0.7.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "shrimp-server", - "version": "0.7.2", + "version": "0.7.3", "dependencies": { - "shrimp-server": "git+http://git.zeromvc.com/wc24/shrimp-server.git#v0.7.2" + "shrimp-server": "git+http://git.zeromvc.com/wc24/shrimp-server.git#v0.7.3" }, "devDependencies": { "@types/bcrypt": "^5.0.0", @@ -3374,8 +3374,11 @@ } }, "node_modules/shrimp-server": { - "version": "0.7.2", - "resolved": "git+http://git.zeromvc.com/wc24/shrimp-server.git#6383aade980b848871390eacaf52bb53c11387cb", + "version": "0.7.3", + "resolved": "git+http://git.zeromvc.com/wc24/shrimp-server.git#24afc42de98f3fc5cebd178cd83707b7cde4da47", + "dependencies": { + "shrimp-server": "git+http://git.zeromvc.com/wc24/shrimp-server.git#v0.7.2" + }, "peerDependencies": { "bcrypt": "^5 || ^6", "express": "^4 || ^5", diff --git a/package.json b/package.json index badfc58..c1e9cf9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "shrimp-server", - "version": "0.7.3", + "version": "0.7.4", "description": "Shrimp 框架后端 — 声明式字段驱动的 Node.js 管理后台框架(Express + Mongoose + JWT)", "main": "dist/main/index.js", "types": "dist/main/index.d.ts", @@ -57,6 +57,6 @@ "vitest": "^1.4.0" }, "dependencies": { - "shrimp-server": "git+http://git.zeromvc.com/wc24/shrimp-server.git#v0.7.2" + "shrimp-server": "git+http://git.zeromvc.com/wc24/shrimp-server.git#v0.7.3" } } diff --git a/src/Shrimp/ShrimpTableModule.ts b/src/Shrimp/ShrimpTableModule.ts index 213b989..a8e8d6f 100644 --- a/src/Shrimp/ShrimpTableModule.ts +++ b/src/Shrimp/ShrimpTableModule.ts @@ -193,7 +193,9 @@ export class ShrimpTableModule = ITableCrudProto /** 递归校验:本节点 validateField,出错即抛(带 path);再下钻复合(tab/object/array)子节点。第一版 fail-fast */ private async validateNode(field: IFieldConfig, value: any, path: (string | number)[], rootItem: Record): Promise { const err = await this.validateField(field, value, rootItem) - if (err) throw new ShrimpError(this.errWithPath(err, path)) + // 出错只发字段名(label) + i18n key 的 message,不把开发用的 path 拼进可见文案。 + // path 仍递归往下传(供将来 inline 标红按结构化方式携带,不在这里塞进 message)。 + if (err) throw new ShrimpError(err) for (const child of this.childrenOf(field, value)) { await this.validateNode(child.field, child.value, [...path, child.key], rootItem) } @@ -215,14 +217,6 @@ export class ShrimpTableModule = ITableCrudProto return [] } - /** 嵌套字段出错时把 path 缀进 message(顶层不缀,已有字段名),让用户知道是哪个嵌套位置 */ - private errWithPath(err: ILabel, path: (string | number)[]): ILabel { - if (path.length <= 1 || typeof err !== "object" || err === null) return err - const e = err as any - const tag = `[${path.join(".")}]` - return { ...e, params: { ...e.params, field: e.params?.field != null ? `${e.params.field} ${tag}` : tag } } - } - private async processResItem(item: Record): Promise> { const result = { ...item } for (const field of this.fields) {