Răsfoiți Sursa

✨ feat(shared-utils): 新增错误模式导出路径并重构错误处理模块

- 在package.json中为共享工具包添加新的导出路径"./schema/error"
- 创建新的错误模式定义文件src/schema/error.schema.ts
- 将错误模式定义从errorHandler.ts迁移到独立的schema文件
- 重构errorHandler.ts以导入并重新导出错误模式,保持向后兼容性
- 【重构】提升代码组织性和模块化程度,便于维护和重用
yourname 3 săptămâni în urmă
părinte
comite
c0fbd016ef

+ 5 - 0
packages/shared-utils/package.json

@@ -10,6 +10,11 @@
       "types": "./src/index.ts",
       "import": "./src/index.ts",
       "require": "./src/index.ts"
+    },
+    "./schema/error": {
+      "types": "./src/schema/error.schema.ts",
+      "import": "./src/schema/error.schema.ts",
+      "require": "./src/schema/error.schema.ts"
     }
   },
   "scripts": {

+ 88 - 0
packages/shared-utils/src/schema/error.schema.ts

@@ -0,0 +1,88 @@
+import { z } from '@hono/zod-openapi'
+
+export const ErrorSchema = z.object({
+  code: z.number().openapi({
+    example: 400,
+  }),
+  message: z.string().openapi({
+    example: 'Bad Request',
+  }),
+})
+
+// Zod错误详情schema - 类型安全版本
+export const ZodIssueSchema = z.object({
+  code: z.string().openapi({
+    example: 'invalid_type',
+  }),
+  expected: z.string().optional().openapi({
+    example: 'number',
+  }),
+  received: z.string().optional().openapi({
+    example: 'string',
+  }),
+  path: z.array(z.union([z.string(), z.number(), z.null()])).openapi({
+    example: ['basicSalary'],
+  }),
+  message: z.string().openapi({
+    example: '基本工资必须大于0',
+  }),
+  origin: z.string().optional().openapi({
+    example: 'value',
+  }),
+  minimum: z.number().optional().openapi({
+    example: 0,
+  }),
+  maximum: z.number().optional().openapi({
+    example: 100,
+  }),
+  inclusive: z.boolean().optional().openapi({
+    example: false,
+  }),
+  // 添加更多可能的字段
+  input: z.any().optional().openapi({
+    description: '原始输入数据(当reportInput为true时)',
+  }),
+  fatal: z.boolean().optional().openapi({
+    example: false,
+  }),
+  type: z.string().optional().openapi({
+    example: 'string',
+  }),
+  exact: z.boolean().optional().openapi({
+    example: false,
+  }),
+  validation: z.string().optional().openapi({
+    example: 'email',
+  }),
+  keys: z.array(z.string()).optional().openapi({
+    example: ['extraField'],
+  }),
+  options: z.array(z.union([z.string(), z.number()])).optional().openapi({
+    example: ['option1', 'option2'],
+  }),
+  multipleOf: z.number().optional().openapi({
+    example: 5,
+  }),
+  unionErrors: z.array(z.any()).optional().openapi({
+    description: '联合类型错误详情',
+  }),
+  argumentsError: z.any().optional().openapi({
+    description: '参数错误详情',
+  }),
+  returnTypeError: z.any().optional().openapi({
+    description: '返回类型错误详情',
+  }),
+})
+
+// Zod错误响应schema
+export const ZodErrorSchema = z.object({
+  code: z.number().openapi({
+    example: 400,
+  }),
+  message: z.string().openapi({
+    example: '参数错误',
+  }),
+  errors: z.array(ZodIssueSchema).openapi({
+    description: 'Zod验证错误详情',
+  }),
+})

+ 2 - 86
packages/shared-utils/src/utils/errorHandler.ts

@@ -1,92 +1,8 @@
 import { Context } from 'hono'
 import { z } from '@hono/zod-openapi'
+import { ErrorSchema, ZodIssueSchema, ZodErrorSchema } from '../schema/error.schema'
 
-export const ErrorSchema = z.object({
-  code: z.number().openapi({
-    example: 400,
-  }),
-  message: z.string().openapi({
-    example: 'Bad Request',
-  }),
-})
-
-// Zod错误详情schema - 类型安全版本
-export const ZodIssueSchema = z.object({
-  code: z.string().openapi({
-    example: 'invalid_type',
-  }),
-  expected: z.string().optional().openapi({
-    example: 'number',
-  }),
-  received: z.string().optional().openapi({
-    example: 'string',
-  }),
-  path: z.array(z.union([z.string(), z.number(), z.null()])).openapi({
-    example: ['basicSalary'],
-  }),
-  message: z.string().openapi({
-    example: '基本工资必须大于0',
-  }),
-  origin: z.string().optional().openapi({
-    example: 'value',
-  }),
-  minimum: z.number().optional().openapi({
-    example: 0,
-  }),
-  maximum: z.number().optional().openapi({
-    example: 100,
-  }),
-  inclusive: z.boolean().optional().openapi({
-    example: false,
-  }),
-  // 添加更多可能的字段
-  input: z.any().optional().openapi({
-    description: '原始输入数据(当reportInput为true时)',
-  }),
-  fatal: z.boolean().optional().openapi({
-    example: false,
-  }),
-  type: z.string().optional().openapi({
-    example: 'string',
-  }),
-  exact: z.boolean().optional().openapi({
-    example: false,
-  }),
-  validation: z.string().optional().openapi({
-    example: 'email',
-  }),
-  keys: z.array(z.string()).optional().openapi({
-    example: ['extraField'],
-  }),
-  options: z.array(z.union([z.string(), z.number()])).optional().openapi({
-    example: ['option1', 'option2'],
-  }),
-  multipleOf: z.number().optional().openapi({
-    example: 5,
-  }),
-  unionErrors: z.array(z.any()).optional().openapi({
-    description: '联合类型错误详情',
-  }),
-  argumentsError: z.any().optional().openapi({
-    description: '参数错误详情',
-  }),
-  returnTypeError: z.any().optional().openapi({
-    description: '返回类型错误详情',
-  }),
-})
-
-// Zod错误响应schema
-export const ZodErrorSchema = z.object({
-  code: z.number().openapi({
-    example: 400,
-  }),
-  message: z.string().openapi({
-    example: '参数错误',
-  }),
-  errors: z.array(ZodIssueSchema).openapi({
-    description: 'Zod验证错误详情',
-  }),
-})
+export { ErrorSchema, ZodIssueSchema, ZodErrorSchema }
 
 // 类型安全的Zod错误处理函数
 export function handleZodError(error: z.ZodError): z.infer<typeof ZodErrorSchema> {