@wener/common 2.0.3 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/lib/ai/qwen3vl/index.js +1 -1
  2. package/lib/ai/qwen3vl/utils.js +15 -15
  3. package/lib/ai/qwen3vl/utils.js.map +1 -1
  4. package/lib/ai/vision/DocLayoutElementTypeSchema.js +22 -22
  5. package/lib/ai/vision/ImageAnnotationSchema.js +63 -47
  6. package/lib/ai/vision/index.js +2 -2
  7. package/lib/ai/vision/resolveImageAnnotation.js +81 -95
  8. package/lib/cn/ChineseResidentIdNo.js +55 -41
  9. package/lib/cn/ChineseResidentIdNo.js.map +1 -1
  10. package/lib/cn/ChineseResidentIdNo.mod.js +6 -1
  11. package/lib/cn/ChineseResidentIdNo.test.js +22 -21
  12. package/lib/cn/DivisionCode.js +220 -235
  13. package/lib/cn/DivisionCode.mod.js +6 -1
  14. package/lib/cn/DivisionCode.test.js +92 -121
  15. package/lib/cn/Mod11.js +18 -37
  16. package/lib/cn/Mod11.js.map +1 -1
  17. package/lib/cn/Mod31.js +23 -41
  18. package/lib/cn/UnifiedSocialCreditCode.js +143 -137
  19. package/lib/cn/UnifiedSocialCreditCode.mod.js +6 -1
  20. package/lib/cn/UnifiedSocialCreditCode.test.js +21 -15
  21. package/lib/cn/formatChineseAmount.js +46 -71
  22. package/lib/cn/index.js +6 -6
  23. package/lib/cn/mod.js +5 -3
  24. package/lib/cn/parseChineseNumber.js +81 -85
  25. package/lib/cn/parseChineseNumber.test.js +183 -261
  26. package/lib/cn/pinyin/cartesianProduct.js +19 -19
  27. package/lib/cn/pinyin/cartesianProduct.test.js +78 -178
  28. package/lib/cn/pinyin/loader.js +13 -11
  29. package/lib/cn/pinyin/preload.js +2 -1
  30. package/lib/cn/pinyin/toPinyin.test.js +149 -161
  31. package/lib/cn/pinyin/toPinyinPure.js +28 -23
  32. package/lib/cn/pinyin/transform.js +11 -11
  33. package/lib/cn/types.d.js +2 -2
  34. package/lib/consola/createStandardConsolaReporter.js +14 -15
  35. package/lib/consola/formatLogObject.js +149 -133
  36. package/lib/consola/formatLogObject.js.map +1 -1
  37. package/lib/consola/formatLogObject.test.js +167 -178
  38. package/lib/consola/index.js +2 -2
  39. package/lib/data/formatSort.js +14 -12
  40. package/lib/data/formatSort.test.js +33 -33
  41. package/lib/data/index.js +3 -3
  42. package/lib/data/maybeNumber.js +23 -23
  43. package/lib/data/maybeNumber.js.map +1 -1
  44. package/lib/data/parseSort.js +75 -68
  45. package/lib/data/parseSort.test.js +196 -187
  46. package/lib/data/resolvePagination.js +38 -39
  47. package/lib/data/resolvePagination.test.js +228 -218
  48. package/lib/data/types.d.js +2 -2
  49. package/lib/data/types.d.js.map +1 -1
  50. package/lib/dayjs/dayjs.js +20 -20
  51. package/lib/dayjs/formatDuration.js +56 -56
  52. package/lib/dayjs/formatDuration.js.map +1 -1
  53. package/lib/dayjs/formatDuration.test.js +63 -77
  54. package/lib/dayjs/index.js +4 -4
  55. package/lib/dayjs/parseDuration.js +21 -26
  56. package/lib/dayjs/parseRelativeTime.js +65 -66
  57. package/lib/dayjs/parseRelativeTime.test.js +227 -243
  58. package/lib/dayjs/resolveRelativeTime.js +74 -144
  59. package/lib/dayjs/resolveRelativeTime.js.map +1 -1
  60. package/lib/dayjs/resolveRelativeTime.test.js +296 -307
  61. package/lib/decimal/index.js +1 -1
  62. package/lib/decimal/parseDecimal.js +12 -12
  63. package/lib/drain3/Drain.js +321 -0
  64. package/lib/drain3/Drain.js.map +1 -0
  65. package/lib/drain3/LogCluster.js +38 -0
  66. package/lib/drain3/LogCluster.js.map +1 -0
  67. package/lib/drain3/Node.js +39 -0
  68. package/lib/drain3/Node.js.map +1 -0
  69. package/lib/drain3/TemplateMiner.js +205 -0
  70. package/lib/drain3/TemplateMiner.js.map +1 -0
  71. package/lib/drain3/index.js +31 -0
  72. package/lib/drain3/index.js.map +1 -0
  73. package/lib/drain3/persistence/FilePersistence.js +24 -0
  74. package/lib/drain3/persistence/FilePersistence.js.map +1 -0
  75. package/lib/drain3/persistence/MemoryPersistence.js +18 -0
  76. package/lib/drain3/persistence/MemoryPersistence.js.map +1 -0
  77. package/lib/drain3/persistence/PersistenceHandler.js +5 -0
  78. package/lib/drain3/persistence/PersistenceHandler.js.map +1 -0
  79. package/lib/drain3/types.js +7 -0
  80. package/lib/drain3/types.js.map +1 -0
  81. package/lib/emittery/emitter.js +7 -7
  82. package/lib/emittery/index.js +1 -1
  83. package/lib/foundation/schema/SexType.js +15 -12
  84. package/lib/foundation/schema/index.js +1 -1
  85. package/lib/foundation/schema/parseSexType.js +15 -16
  86. package/lib/foundation/schema/types.js +8 -6
  87. package/lib/fs/FileSystemError.js +18 -18
  88. package/lib/fs/IFileSystem.d.js +2 -2
  89. package/lib/fs/IFileSystem.d.js.map +1 -1
  90. package/lib/fs/MemoryFileSystem.test.js +172 -181
  91. package/lib/fs/createBrowserFileSystem.js +222 -233
  92. package/lib/fs/createBrowserFileSystem.js.map +1 -1
  93. package/lib/fs/createMemoryFileSystem.js +473 -510
  94. package/lib/fs/createMemoryFileSystem.js.map +1 -1
  95. package/lib/fs/createSandboxFileSystem.js +102 -101
  96. package/lib/fs/createSandboxFileSystem.js.map +1 -1
  97. package/lib/fs/createWebDavFileSystem.js +162 -132
  98. package/lib/fs/createWebDavFileSystem.js.map +1 -1
  99. package/lib/fs/createWebFileSystem.js +202 -0
  100. package/lib/fs/createWebFileSystem.js.map +1 -0
  101. package/lib/fs/findMimeType.js +14 -14
  102. package/lib/fs/findMimeType.js.map +1 -1
  103. package/lib/fs/index.js +7 -7
  104. package/lib/fs/index.js.map +1 -1
  105. package/lib/fs/minio/createMinioFileSystem.js +977 -0
  106. package/lib/fs/minio/createMinioFileSystem.js.map +1 -0
  107. package/lib/fs/minio/index.js +2 -0
  108. package/lib/fs/minio/index.js.map +1 -0
  109. package/lib/fs/orpc/FileSystemContract.js +57 -57
  110. package/lib/fs/orpc/createContractClientFileSystem.js +88 -88
  111. package/lib/fs/orpc/createContractClientFileSystem.js.map +1 -1
  112. package/lib/fs/orpc/index.js +2 -2
  113. package/lib/fs/orpc/server/createFileSystemContractImpl.js +62 -60
  114. package/lib/fs/orpc/server/createFileSystemContractImpl.js.map +1 -1
  115. package/lib/fs/orpc/server/index.js +1 -1
  116. package/lib/fs/s3/createS3MiniFileSystem.js +756 -689
  117. package/lib/fs/s3/createS3MiniFileSystem.js.map +1 -1
  118. package/lib/fs/s3/index.js +1 -1
  119. package/lib/fs/s3/s3mini.test.js +524 -553
  120. package/lib/fs/scandir.js +56 -56
  121. package/lib/fs/server/createDatabaseFileSystem.js +834 -741
  122. package/lib/fs/server/createDatabaseFileSystem.js.map +1 -1
  123. package/lib/fs/server/createNodeFileSystem.js +407 -380
  124. package/lib/fs/server/createNodeFileSystem.js.map +1 -1
  125. package/lib/fs/server/dbfs.test.js +201 -214
  126. package/lib/fs/server/index.js +1 -1
  127. package/lib/fs/server/loadTestDatabase.js +40 -43
  128. package/lib/fs/tests/runFileSystemTest.js +352 -315
  129. package/lib/fs/tests/runFileSystemTest.js.map +1 -1
  130. package/lib/fs/types.js +17 -20
  131. package/lib/fs/utils/getFileUrl.js +24 -30
  132. package/lib/fs/utils.js +17 -17
  133. package/lib/fs/utils.js.map +1 -1
  134. package/lib/fs/webdav/index.js +2 -0
  135. package/lib/fs/webdav/index.js.map +1 -0
  136. package/lib/index.js +2 -2
  137. package/lib/jsonschema/JsonSchema.js +216 -155
  138. package/lib/jsonschema/JsonSchema.js.map +1 -1
  139. package/lib/jsonschema/JsonSchema.test.js +123 -124
  140. package/lib/jsonschema/forEachJsonSchema.js +41 -41
  141. package/lib/jsonschema/forEachJsonSchema.js.map +1 -1
  142. package/lib/jsonschema/index.js +2 -2
  143. package/lib/jsonschema/types.d.js +2 -2
  144. package/lib/jsonschema/types.d.js.map +1 -1
  145. package/lib/meta/defineFileType.js +32 -38
  146. package/lib/meta/defineInit.js +39 -35
  147. package/lib/meta/defineMetadata.js +37 -34
  148. package/lib/meta/defineMetadata.js.map +1 -1
  149. package/lib/meta/defineMetadata.test.js +13 -12
  150. package/lib/meta/index.js +3 -3
  151. package/lib/orpc/createOpenApiContractClient.js +26 -24
  152. package/lib/orpc/createOpenApiContractClient.js.map +1 -1
  153. package/lib/orpc/createRpcContractClient.js +37 -31
  154. package/lib/orpc/index.js +2 -2
  155. package/lib/orpc/resolveLinkPlugins.js +25 -25
  156. package/lib/password/PHC.js +187 -189
  157. package/lib/password/PHC.js.map +1 -1
  158. package/lib/password/PHC.test.js +517 -535
  159. package/lib/password/Password.js +85 -80
  160. package/lib/password/Password.test.js +330 -364
  161. package/lib/password/createArgon2PasswordAlgorithm.js +50 -51
  162. package/lib/password/createArgon2PasswordAlgorithm.js.map +1 -1
  163. package/lib/password/createBase64PasswordAlgorithm.js +11 -11
  164. package/lib/password/createBase64PasswordAlgorithm.js.map +1 -1
  165. package/lib/password/createBcryptPasswordAlgorithm.js +20 -18
  166. package/lib/password/createBcryptPasswordAlgorithm.js.map +1 -1
  167. package/lib/password/createPBKDF2PasswordAlgorithm.js +65 -52
  168. package/lib/password/createPBKDF2PasswordAlgorithm.js.map +1 -1
  169. package/lib/password/createScryptPasswordAlgorithm.js +74 -63
  170. package/lib/password/createScryptPasswordAlgorithm.js.map +1 -1
  171. package/lib/password/index.js +5 -5
  172. package/lib/password/server/index.js +1 -1
  173. package/lib/resource/Identifiable.js +2 -2
  174. package/lib/resource/ListQuery.js +42 -42
  175. package/lib/resource/ListQuery.js.map +1 -1
  176. package/lib/resource/getTitleOfResource.js +5 -5
  177. package/lib/resource/index.js +2 -2
  178. package/lib/resource/index.js.map +1 -1
  179. package/lib/resource/schema/AnyResourceSchema.js +91 -89
  180. package/lib/resource/schema/BaseResourceSchema.js +26 -26
  181. package/lib/resource/schema/ResourceActionType.js +117 -115
  182. package/lib/resource/schema/ResourceStatus.js +94 -92
  183. package/lib/resource/schema/ResourceType.js +25 -23
  184. package/lib/resource/schema/index.js +5 -5
  185. package/lib/resource/schema/types.js +86 -55
  186. package/lib/resource/schema/types.test.js +16 -13
  187. package/lib/s3/formatS3Url.js +60 -60
  188. package/lib/s3/formatS3Url.js.map +1 -1
  189. package/lib/s3/formatS3Url.test.js +238 -261
  190. package/lib/s3/index.js +2 -2
  191. package/lib/s3/parseS3Url.js +61 -60
  192. package/lib/s3/parseS3Url.js.map +1 -1
  193. package/lib/s3/parseS3Url.test.js +270 -269
  194. package/lib/schema/SchemaRegistry.js +41 -42
  195. package/lib/schema/SchemaRegistry.js.map +1 -1
  196. package/lib/schema/SchemaRegistry.mod.js +1 -1
  197. package/lib/schema/TypeSchema.d.js +2 -2
  198. package/lib/schema/TypeSchema.d.js.map +1 -1
  199. package/lib/schema/createSchemaData.js +113 -67
  200. package/lib/schema/createSchemaData.js.map +1 -1
  201. package/lib/schema/findJsonSchemaByPath.js +28 -23
  202. package/lib/schema/findJsonSchemaByPath.js.map +1 -1
  203. package/lib/schema/formatZodError.js +113 -134
  204. package/lib/schema/formatZodError.js.map +1 -1
  205. package/lib/schema/formatZodError.test.js +192 -195
  206. package/lib/schema/getSchemaCache.js +7 -7
  207. package/lib/schema/getSchemaOptions.js +17 -16
  208. package/lib/schema/index.js +6 -6
  209. package/lib/schema/toJsonSchema.js +196 -190
  210. package/lib/schema/toJsonSchema.js.map +1 -1
  211. package/lib/schema/toJsonSchema.test.js +34 -26
  212. package/lib/schema/validate.js +106 -97
  213. package/lib/schema/validate.js.map +1 -1
  214. package/lib/tools/generateSchema.js +40 -40
  215. package/lib/tools/renderJsonSchemaToMarkdownDoc.js +74 -74
  216. package/lib/utils/buildBaseUrl.js +8 -8
  217. package/lib/utils/buildRedactorFormSchema.js +55 -54
  218. package/lib/utils/buildRedactorFormSchema.js.map +1 -1
  219. package/lib/utils/getEstimateProcessTime.js +24 -19
  220. package/lib/utils/index.js +3 -3
  221. package/lib/utils/resolveFeatureOptions.js +9 -9
  222. package/package.json +37 -18
  223. package/src/ai/qwen3vl/utils.ts +1 -1
  224. package/src/ai/vision/index.ts +2 -2
  225. package/src/cn/ChineseResidentIdNo.ts +1 -1
  226. package/src/cn/Mod11.ts +1 -1
  227. package/src/cn/__snapshots__/ChineseResidentIdNo.test.ts.snap +1 -1
  228. package/src/cn/__snapshots__/UnifiedSocialCreditCode.test.ts.snap +0 -23
  229. package/src/cn/index.ts +1 -2
  230. package/src/cn/parseChineseNumber.test.ts +4 -4
  231. package/src/consola/formatLogObject.ts +6 -6
  232. package/src/consola/index.ts +1 -1
  233. package/src/data/index.ts +3 -4
  234. package/src/data/maybeNumber.ts +1 -1
  235. package/src/data/parseSort.test.ts +0 -1
  236. package/src/data/resolvePagination.ts +2 -2
  237. package/src/data/types.d.ts +2 -2
  238. package/src/dayjs/formatDuration.ts +10 -11
  239. package/src/dayjs/index.ts +1 -1
  240. package/src/dayjs/parseRelativeTime.ts +1 -1
  241. package/src/dayjs/resolveRelativeTime.ts +11 -14
  242. package/src/drain3/Drain.test.ts +378 -0
  243. package/src/drain3/Drain.ts +394 -0
  244. package/src/drain3/LogCluster.ts +46 -0
  245. package/src/drain3/Node.ts +53 -0
  246. package/src/drain3/TemplateMiner.ts +246 -0
  247. package/src/drain3/index.ts +34 -0
  248. package/src/drain3/persistence/FilePersistence.ts +24 -0
  249. package/src/drain3/persistence/MemoryPersistence.ts +23 -0
  250. package/src/drain3/persistence/PersistenceHandler.ts +19 -0
  251. package/src/drain3/types.ts +75 -0
  252. package/src/fs/IFileSystem.d.ts +1 -2
  253. package/src/fs/createBrowserFileSystem.ts +7 -5
  254. package/src/fs/createMemoryFileSystem.ts +9 -13
  255. package/src/fs/createSandboxFileSystem.ts +1 -1
  256. package/src/fs/createWebDavFileSystem.ts +30 -17
  257. package/src/fs/createWebFileSystem.ts +242 -0
  258. package/src/fs/findMimeType.ts +1 -4
  259. package/src/fs/index.ts +5 -5
  260. package/src/fs/minio/createMinioFileSystem.ts +1148 -0
  261. package/src/fs/minio/index.ts +1 -0
  262. package/src/fs/orpc/createContractClientFileSystem.ts +5 -5
  263. package/src/fs/orpc/server/createFileSystemContractImpl.ts +1 -1
  264. package/src/fs/s3/createS3MiniFileSystem.ts +120 -79
  265. package/src/fs/s3/s3fs.test.ts +441 -0
  266. package/src/fs/s3/s3mini.test.ts +2 -2
  267. package/src/fs/server/createDatabaseFileSystem.ts +78 -114
  268. package/src/fs/server/createNodeFileSystem.ts +32 -13
  269. package/src/fs/server/dbfs.test.ts +13 -8
  270. package/src/fs/server/index.ts +1 -0
  271. package/src/fs/server/loadTestDatabase.ts +8 -119
  272. package/src/fs/tests/runFileSystemTest.ts +29 -28
  273. package/src/fs/utils.ts +1 -1
  274. package/src/fs/webdav/index.ts +1 -0
  275. package/src/jsonschema/JsonSchema.ts +5 -5
  276. package/src/jsonschema/forEachJsonSchema.ts +1 -1
  277. package/src/jsonschema/index.ts +1 -1
  278. package/src/jsonschema/types.d.ts +1 -1
  279. package/src/meta/defineMetadata.ts +1 -1
  280. package/src/meta/index.ts +2 -3
  281. package/src/orm/createSqliteDialect.ts +17 -0
  282. package/src/orm/index.ts +1 -0
  283. package/src/orpc/createOpenApiContractClient.ts +3 -3
  284. package/src/orpc/index.ts +1 -1
  285. package/src/password/PHC.ts +3 -3
  286. package/src/password/createArgon2PasswordAlgorithm.ts +2 -2
  287. package/src/password/createBase64PasswordAlgorithm.ts +2 -2
  288. package/src/password/createBcryptPasswordAlgorithm.ts +4 -2
  289. package/src/password/createPBKDF2PasswordAlgorithm.ts +2 -2
  290. package/src/password/createScryptPasswordAlgorithm.ts +4 -4
  291. package/src/password/index.ts +2 -2
  292. package/src/resource/ListQuery.ts +4 -1
  293. package/src/resource/index.ts +3 -3
  294. package/src/resource/schema/index.ts +4 -4
  295. package/src/s3/formatS3Url.test.ts +1 -1
  296. package/src/s3/formatS3Url.ts +2 -2
  297. package/src/s3/index.ts +1 -1
  298. package/src/s3/parseS3Url.ts +1 -1
  299. package/src/schema/SchemaRegistry.ts +2 -2
  300. package/src/schema/TypeSchema.d.ts +6 -6
  301. package/src/schema/createSchemaData.ts +5 -5
  302. package/src/schema/findJsonSchemaByPath.ts +5 -5
  303. package/src/schema/formatZodError.test.ts +2 -1
  304. package/src/schema/formatZodError.ts +50 -62
  305. package/src/schema/index.ts +5 -5
  306. package/src/schema/toJsonSchema.ts +6 -6
  307. package/src/schema/validate.ts +2 -2
  308. package/src/utils/buildRedactorFormSchema.ts +4 -4
  309. package/src/utils/formatNumber.ts +18 -0
  310. package/src/utils/formatPercent.ts +17 -0
  311. package/src/utils/index.ts +3 -3
  312. package/src/utils/resolveFeatureOptions.ts +1 -1
@@ -1,140 +1,119 @@
1
- import { findJsonSchemaByPath } from "./findJsonSchemaByPath.js";
1
+ import { findJsonSchemaByPath } from './findJsonSchemaByPath.js';
2
2
  export function formatZodError(error, schema) {
3
- if (!error.issues || error.issues.length === 0) {
4
- return error.message || "\u9A8C\u8BC1\u5931\u8D25";
5
- }
6
- const messages = [];
7
- // Iterate through issues and format each one
8
- // We use manual iteration instead of error.format() to have better control
9
- // over field name formatting with schema descriptions
10
- for (const issue of error.issues) {
11
- const formatted = formatIssueMessage(issue, schema);
12
- if (formatted) {
13
- const path = issue.path.map((p) => typeof p === "symbol" ? String(p) : p);
14
- let fieldName = formatPath(path);
15
- // Try to get field description from schema
16
- if (schema && path.length > 0) {
17
- const fieldPath = path.map(String).join(".");
18
- const fieldSchema = findJsonSchemaByPath(schema, fieldPath);
19
- if (fieldSchema?.description) {
20
- fieldName = fieldSchema.description;
21
- }
22
- }
23
- messages.push(`${fieldName}: ${formatted}`);
24
- }
25
- }
26
- return messages.join("\uFF1B");
3
+ if (!error.issues || error.issues.length === 0) {
4
+ return error.message || '\u9A8C\u8BC1\u5931\u8D25';
5
+ }
6
+ const messages = [];
7
+ // Iterate through issues and format each one
8
+ // We use manual iteration instead of error.format() to have better control
9
+ // over field name formatting with schema descriptions
10
+ for (const issue of error.issues) {
11
+ const formatted = formatIssueMessage(issue, schema);
12
+ if (formatted) {
13
+ const path = issue.path.map((p) => (typeof p === 'symbol' ? String(p) : p));
14
+ let fieldName = formatPath(path);
15
+ // Try to get field description from schema
16
+ if (schema && path.length > 0) {
17
+ const fieldPath = path.map(String).join('.');
18
+ const fieldSchema = findJsonSchemaByPath(schema, fieldPath);
19
+ if (fieldSchema?.description) {
20
+ fieldName = fieldSchema.description;
21
+ }
22
+ }
23
+ messages.push(`${fieldName}: ${formatted}`);
24
+ }
25
+ }
26
+ return messages.join('\uFF1B');
27
27
  }
28
- function formatIssueMessage(issue, schema) {
29
- let message = issue.message;
30
- // 处理常见的错误类型,生成更友好的消息
31
- // Use string comparison to avoid TypeScript narrowing issues with Zod v4
32
- const code = issue.code;
33
- switch (code) {
34
- case "invalid_type":
35
- {
36
- const invalidTypeIssue = issue;
37
- if (invalidTypeIssue.received === "undefined") {
38
- message = "\u5FC5\u586B";
39
- }
40
- else if (invalidTypeIssue.received === "null") {
41
- message = "\u4E0D\u80FD\u4E3A\u7A7A";
42
- }
43
- else {
44
- message = issue.message || `期望类型 ${invalidTypeIssue.expected},但收到 ${invalidTypeIssue.received}`;
45
- }
46
- break;
47
- }
48
- case "invalid_string":
49
- {
50
- const invalidStringIssue = issue;
51
- if (invalidStringIssue.validation === "email") {
52
- message = "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u90AE\u7BB1\u5730\u5740";
53
- }
54
- else if (invalidStringIssue.validation === "url") {
55
- message = "\u8BF7\u8F93\u5165\u6709\u6548\u7684 URL";
56
- }
57
- else if (invalidStringIssue.validation === "uuid") {
58
- message = "\u8BF7\u8F93\u5165\u6709\u6548\u7684 UUID";
59
- }
60
- else if (invalidStringIssue.validation === "date") {
61
- message = "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u65E5\u671F";
62
- }
63
- break;
64
- }
65
- case "too_small":
66
- {
67
- const tooSmallIssue = issue;
68
- if (tooSmallIssue.type === "string" && tooSmallIssue.minimum === 1) {
69
- message = "\u4E0D\u80FD\u4E3A\u7A7A";
70
- }
71
- else if (tooSmallIssue.type === "number") {
72
- message = `至少需要 ${tooSmallIssue.minimum}`;
73
- }
74
- else if (tooSmallIssue.type === "array") {
75
- message = `至少需要 ${tooSmallIssue.minimum} 项`;
76
- }
77
- break;
78
- }
79
- case "too_big":
80
- {
81
- const tooBigIssue = issue;
82
- if (tooBigIssue.type === "string") {
83
- message = `最多 ${tooBigIssue.maximum} 个字符`;
84
- }
85
- else if (tooBigIssue.type === "number") {
86
- message = `最多 ${tooBigIssue.maximum}`;
87
- }
88
- else if (tooBigIssue.type === "array") {
89
- message = `最多 ${tooBigIssue.maximum} 项`;
90
- }
91
- break;
92
- }
93
- case "invalid_enum_value":
94
- {
95
- const enumIssue = issue;
96
- message = `必须是以下值之一: ${enumIssue.options?.map(String).join(", ") || "\u672A\u77E5\u9009\u9879"}`;
97
- break;
98
- }
99
- case "unrecognized_keys":
100
- {
101
- const unrecognizedIssue = issue;
102
- message = `不支持的字段: ${unrecognizedIssue.keys?.join(", ") || "\u672A\u77E5\u5B57\u6BB5"}`;
103
- break;
104
- }
105
- case "invalid_union":
106
- {
107
- message = "\u4E0D\u7B26\u5408\u4EFB\u4F55\u5141\u8BB8\u7684\u7C7B\u578B";
108
- break;
109
- }
110
- case "invalid_union_discriminator":
111
- {
112
- const discriminatorIssue = issue;
113
- message = `必须是以下值之一: ${discriminatorIssue.options?.map(String).join(", ") || "\u672A\u77E5\u9009\u9879"}`;
114
- break;
115
- }
116
- case "invalid_literal":
117
- {
118
- const literalIssue = issue;
119
- message = `必须是 ${String(literalIssue.expected)}`;
120
- break;
121
- }
122
- case "custom":
123
- {
124
- // 保留自定义错误消息
125
- message = issue.message;
126
- break;
127
- }
128
- default:
129
- // 保留原始消息
130
- message = issue.message;
131
- }
132
- return message;
28
+ function formatIssueMessage(issue, _schema) {
29
+ let message = issue.message;
30
+ // 处理常见的错误类型,生成更友好的消息
31
+ switch (issue.code) {
32
+ case 'invalid_type': {
33
+ const i = issue;
34
+ // Zod v4 doesn't have 'received' field directly, extract from message
35
+ const match = issue.message.match(/received (\w+)/);
36
+ const received = match?.[1];
37
+ if (received === 'undefined') {
38
+ message = '\u5FC5\u586B';
39
+ } else if (received === 'null') {
40
+ message = '\u4E0D\u80FD\u4E3A\u7A7A';
41
+ } else {
42
+ message = issue.message || `期望类型 ${i.expected},但收到 ${received}`;
43
+ }
44
+ break;
45
+ }
46
+ case 'invalid_format': {
47
+ const i = issue;
48
+ if (i.format === 'email') {
49
+ message = '\u8BF7\u8F93\u5165\u6709\u6548\u7684\u90AE\u7BB1\u5730\u5740';
50
+ } else if (i.format === 'url') {
51
+ message = '\u8BF7\u8F93\u5165\u6709\u6548\u7684 URL';
52
+ } else if (i.format === 'uuid') {
53
+ message = '\u8BF7\u8F93\u5165\u6709\u6548\u7684 UUID';
54
+ } else if (i.format === 'date') {
55
+ message = '\u8BF7\u8F93\u5165\u6709\u6548\u7684\u65E5\u671F';
56
+ }
57
+ break;
58
+ }
59
+ case 'too_small': {
60
+ const i = issue;
61
+ if (i.origin === 'string' && i.minimum === 1) {
62
+ message = '\u4E0D\u80FD\u4E3A\u7A7A';
63
+ } else if (i.origin === 'string') {
64
+ message = `至少需要 ${i.minimum} 个字符`;
65
+ } else if (i.origin === 'number' || i.origin === 'int') {
66
+ message = `至少需要 ${i.minimum}`;
67
+ } else if (i.origin === 'array') {
68
+ message = `至少需要 ${i.minimum} 项`;
69
+ }
70
+ break;
71
+ }
72
+ case 'too_big': {
73
+ const i = issue;
74
+ if (i.origin === 'string') {
75
+ message = `最多 ${i.maximum} 个字符`;
76
+ } else if (i.origin === 'number' || i.origin === 'int') {
77
+ message = `最多 ${i.maximum}`;
78
+ } else if (i.origin === 'array') {
79
+ message = `最多 ${i.maximum} 项`;
80
+ }
81
+ break;
82
+ }
83
+ case 'invalid_value': {
84
+ const i = issue;
85
+ if (i.values.length === 1) {
86
+ // Single value means it's a literal check
87
+ message = `必须是 ${String(i.values[0])}`;
88
+ } else {
89
+ message = `必须是以下值之一: ${i.values.map(String).join(', ')}`;
90
+ }
91
+ break;
92
+ }
93
+ case 'unrecognized_keys': {
94
+ const i = issue;
95
+ message = `不支持的字段: ${i.keys.join(', ')}`;
96
+ break;
97
+ }
98
+ case 'invalid_union': {
99
+ message = '\u4E0D\u7B26\u5408\u4EFB\u4F55\u5141\u8BB8\u7684\u7C7B\u578B';
100
+ break;
101
+ }
102
+ case 'custom': {
103
+ // 保留自定义错误消息
104
+ message = issue.message;
105
+ break;
106
+ }
107
+ default:
108
+ // 保留原始消息
109
+ message = issue.message;
110
+ }
111
+ return message;
133
112
  }
134
113
  function formatPath(path) {
135
- if (path.length === 0) {
136
- return "\u8868\u5355";
137
- }
138
- return path.map(String).join(".");
114
+ if (path.length === 0) {
115
+ return '\u8868\u5355';
116
+ }
117
+ return path.map(String).join('.');
139
118
  }
140
119
  //# sourceMappingURL=formatZodError.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schema/formatZodError.ts"],"sourcesContent":["import { ZodError } from 'zod/v4';\nimport { findJsonSchemaByPath } from './findJsonSchemaByPath';\nimport type { TypeSchema } from './TypeSchema';\n\nexport function formatZodError(error: ZodError, schema?: TypeSchema): string {\n\tif (!error.issues || error.issues.length === 0) {\n\t\treturn error.message || '验证失败';\n\t}\n\n\tconst messages: string[] = [];\n\n\t// Iterate through issues and format each one\n\t// We use manual iteration instead of error.format() to have better control\n\t// over field name formatting with schema descriptions\n\tfor (const issue of error.issues) {\n\t\tconst formatted = formatIssueMessage(issue, schema);\n\t\tif (formatted) {\n\t\t\tconst path = issue.path.map((p) => (typeof p === 'symbol' ? String(p) : p)) as (string | number)[];\n\t\t\tlet fieldName = formatPath(path);\n\n\t\t\t// Try to get field description from schema\n\t\t\tif (schema && path.length > 0) {\n\t\t\t\tconst fieldPath = path.map(String).join('.');\n\t\t\t\tconst fieldSchema = findJsonSchemaByPath(schema, fieldPath);\n\t\t\t\tif (fieldSchema?.description) {\n\t\t\t\t\tfieldName = fieldSchema.description;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmessages.push(`${fieldName}: ${formatted}`);\n\t\t}\n\t}\n\n\treturn messages.join(';');\n}\n\nfunction formatIssueMessage(issue: ZodError['issues'][number], schema?: TypeSchema): string {\n\tlet message = issue.message;\n\n\t// 处理常见的错误类型,生成更友好的消息\n\t// Use string comparison to avoid TypeScript narrowing issues with Zod v4\n\tconst code = issue.code as string;\n\tswitch (code) {\n\t\tcase 'invalid_type': {\n\t\t\tconst invalidTypeIssue = issue as typeof issue & {\n\t\t\t\texpected: string;\n\t\t\t\treceived: string;\n\t\t\t};\n\t\t\tif (invalidTypeIssue.received === 'undefined') {\n\t\t\t\tmessage = '必填';\n\t\t\t} else if (invalidTypeIssue.received === 'null') {\n\t\t\t\tmessage = '不能为空';\n\t\t\t} else {\n\t\t\t\tmessage = issue.message || `期望类型 ${invalidTypeIssue.expected},但收到 ${invalidTypeIssue.received}`;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'invalid_string': {\n\t\t\tconst invalidStringIssue = issue as typeof issue & {\n\t\t\t\tvalidation?: string;\n\t\t\t};\n\t\t\tif (invalidStringIssue.validation === 'email') {\n\t\t\t\tmessage = '请输入有效的邮箱地址';\n\t\t\t} else if (invalidStringIssue.validation === 'url') {\n\t\t\t\tmessage = '请输入有效的 URL';\n\t\t\t} else if (invalidStringIssue.validation === 'uuid') {\n\t\t\t\tmessage = '请输入有效的 UUID';\n\t\t\t} else if (invalidStringIssue.validation === 'date') {\n\t\t\t\tmessage = '请输入有效的日期';\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'too_small': {\n\t\t\tconst tooSmallIssue = issue as typeof issue & {\n\t\t\t\ttype: string;\n\t\t\t\tminimum: number;\n\t\t\t};\n\t\t\tif (tooSmallIssue.type === 'string' && tooSmallIssue.minimum === 1) {\n\t\t\t\tmessage = '不能为空';\n\t\t\t} else if (tooSmallIssue.type === 'number') {\n\t\t\t\tmessage = `至少需要 ${tooSmallIssue.minimum}`;\n\t\t\t} else if (tooSmallIssue.type === 'array') {\n\t\t\t\tmessage = `至少需要 ${tooSmallIssue.minimum} 项`;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'too_big': {\n\t\t\tconst tooBigIssue = issue as typeof issue & {\n\t\t\t\ttype: string;\n\t\t\t\tmaximum: number;\n\t\t\t};\n\t\t\tif (tooBigIssue.type === 'string') {\n\t\t\t\tmessage = `最多 ${tooBigIssue.maximum} 个字符`;\n\t\t\t} else if (tooBigIssue.type === 'number') {\n\t\t\t\tmessage = `最多 ${tooBigIssue.maximum}`;\n\t\t\t} else if (tooBigIssue.type === 'array') {\n\t\t\t\tmessage = `最多 ${tooBigIssue.maximum} 项`;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'invalid_enum_value': {\n\t\t\tconst enumIssue = issue as typeof issue & {\n\t\t\t\toptions: readonly unknown[];\n\t\t\t};\n\t\t\tmessage = `必须是以下值之一: ${enumIssue.options?.map(String).join(', ') || '未知选项'}`;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'unrecognized_keys': {\n\t\t\tconst unrecognizedIssue = issue as typeof issue & {\n\t\t\t\tkeys: readonly string[];\n\t\t\t};\n\t\t\tmessage = `不支持的字段: ${unrecognizedIssue.keys?.join(', ') || '未知字段'}`;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'invalid_union': {\n\t\t\tmessage = '不符合任何允许的类型';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'invalid_union_discriminator': {\n\t\t\tconst discriminatorIssue = issue as typeof issue & {\n\t\t\t\toptions: readonly unknown[];\n\t\t\t};\n\t\t\tmessage = `必须是以下值之一: ${discriminatorIssue.options?.map(String).join(', ') || '未知选项'}`;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'invalid_literal': {\n\t\t\tconst literalIssue = issue as typeof issue & {\n\t\t\t\texpected: unknown;\n\t\t\t};\n\t\t\tmessage = `必须是 ${String(literalIssue.expected)}`;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'custom': {\n\t\t\t// 保留自定义错误消息\n\t\t\tmessage = issue.message;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\t// 保留原始消息\n\t\t\tmessage = issue.message;\n\t}\n\n\treturn message;\n}\n\nfunction formatPath(path: (string | number)[]): string {\n\tif (path.length === 0) {\n\t\treturn '表单';\n\t}\n\treturn path.map(String).join('.');\n}\n"],"names":["findJsonSchemaByPath","formatZodError","error","schema","issues","length","message","messages","issue","formatted","formatIssueMessage","path","map","p","String","fieldName","formatPath","fieldPath","join","fieldSchema","description","push","code","invalidTypeIssue","received","expected","invalidStringIssue","validation","tooSmallIssue","type","minimum","tooBigIssue","maximum","enumIssue","options","unrecognizedIssue","keys","discriminatorIssue","literalIssue"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/schema/formatZodError.ts"],"sourcesContent":["import type { core, ZodError } from 'zod/v4';\nimport { findJsonSchemaByPath } from './findJsonSchemaByPath';\nimport type { TypeSchema } from './TypeSchema';\n\n// Zod 4 issue types with proper typing\ntype ZodIssue = core.$ZodIssue;\ntype ZodIssueInvalidType = core.$ZodIssueInvalidType;\ntype ZodIssueTooSmall = core.$ZodIssueTooSmall;\ntype ZodIssueTooBig = core.$ZodIssueTooBig;\ntype ZodIssueInvalidStringFormat = core.$ZodIssueInvalidStringFormat;\ntype ZodIssueInvalidValue = core.$ZodIssueInvalidValue;\ntype ZodIssueUnrecognizedKeys = core.$ZodIssueUnrecognizedKeys;\n\nexport function formatZodError(error: ZodError, schema?: TypeSchema): string {\n\tif (!error.issues || error.issues.length === 0) {\n\t\treturn error.message || '验证失败';\n\t}\n\n\tconst messages: string[] = [];\n\n\t// Iterate through issues and format each one\n\t// We use manual iteration instead of error.format() to have better control\n\t// over field name formatting with schema descriptions\n\tfor (const issue of error.issues) {\n\t\tconst formatted = formatIssueMessage(issue, schema);\n\t\tif (formatted) {\n\t\t\tconst path = issue.path.map((p) => (typeof p === 'symbol' ? String(p) : p)) as (string | number)[];\n\t\t\tlet fieldName = formatPath(path);\n\n\t\t\t// Try to get field description from schema\n\t\t\tif (schema && path.length > 0) {\n\t\t\t\tconst fieldPath = path.map(String).join('.');\n\t\t\t\tconst fieldSchema = findJsonSchemaByPath(schema, fieldPath);\n\t\t\t\tif (fieldSchema?.description) {\n\t\t\t\t\tfieldName = fieldSchema.description;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmessages.push(`${fieldName}: ${formatted}`);\n\t\t}\n\t}\n\n\treturn messages.join(';');\n}\n\nfunction formatIssueMessage(issue: ZodIssue, _schema?: TypeSchema): string {\n\tlet message = issue.message;\n\n\t// 处理常见的错误类型,生成更友好的消息\n\tswitch (issue.code) {\n\t\tcase 'invalid_type': {\n\t\t\tconst i = issue as ZodIssueInvalidType;\n\t\t\t// Zod v4 doesn't have 'received' field directly, extract from message\n\t\t\tconst match = issue.message.match(/received (\\w+)/);\n\t\t\tconst received = match?.[1];\n\t\t\tif (received === 'undefined') {\n\t\t\t\tmessage = '必填';\n\t\t\t} else if (received === 'null') {\n\t\t\t\tmessage = '不能为空';\n\t\t\t} else {\n\t\t\t\tmessage = issue.message || `期望类型 ${i.expected},但收到 ${received}`;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'invalid_format': {\n\t\t\tconst i = issue as ZodIssueInvalidStringFormat;\n\t\t\tif (i.format === 'email') {\n\t\t\t\tmessage = '请输入有效的邮箱地址';\n\t\t\t} else if (i.format === 'url') {\n\t\t\t\tmessage = '请输入有效的 URL';\n\t\t\t} else if (i.format === 'uuid') {\n\t\t\t\tmessage = '请输入有效的 UUID';\n\t\t\t} else if (i.format === 'date') {\n\t\t\t\tmessage = '请输入有效的日期';\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'too_small': {\n\t\t\tconst i = issue as ZodIssueTooSmall;\n\t\t\tif (i.origin === 'string' && i.minimum === 1) {\n\t\t\t\tmessage = '不能为空';\n\t\t\t} else if (i.origin === 'string') {\n\t\t\t\tmessage = `至少需要 ${i.minimum} 个字符`;\n\t\t\t} else if (i.origin === 'number' || i.origin === 'int') {\n\t\t\t\tmessage = `至少需要 ${i.minimum}`;\n\t\t\t} else if (i.origin === 'array') {\n\t\t\t\tmessage = `至少需要 ${i.minimum} 项`;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'too_big': {\n\t\t\tconst i = issue as ZodIssueTooBig;\n\t\t\tif (i.origin === 'string') {\n\t\t\t\tmessage = `最多 ${i.maximum} 个字符`;\n\t\t\t} else if (i.origin === 'number' || i.origin === 'int') {\n\t\t\t\tmessage = `最多 ${i.maximum}`;\n\t\t\t} else if (i.origin === 'array') {\n\t\t\t\tmessage = `最多 ${i.maximum} 项`;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'invalid_value': {\n\t\t\tconst i = issue as ZodIssueInvalidValue;\n\t\t\tif (i.values.length === 1) {\n\t\t\t\t// Single value means it's a literal check\n\t\t\t\tmessage = `必须是 ${String(i.values[0])}`;\n\t\t\t} else {\n\t\t\t\tmessage = `必须是以下值之一: ${i.values.map(String).join(', ')}`;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 'unrecognized_keys': {\n\t\t\tconst i = issue as ZodIssueUnrecognizedKeys;\n\t\t\tmessage = `不支持的字段: ${i.keys.join(', ')}`;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'invalid_union': {\n\t\t\tmessage = '不符合任何允许的类型';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'custom': {\n\t\t\t// 保留自定义错误消息\n\t\t\tmessage = issue.message;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\t// 保留原始消息\n\t\t\tmessage = issue.message;\n\t}\n\n\treturn message;\n}\n\nfunction formatPath(path: (string | number)[]): string {\n\tif (path.length === 0) {\n\t\treturn '表单';\n\t}\n\treturn path.map(String).join('.');\n}\n"],"names":["findJsonSchemaByPath","formatZodError","error","schema","issues","length","message","messages","issue","formatted","formatIssueMessage","path","map","p","String","fieldName","formatPath","fieldPath","join","fieldSchema","description","push","_schema","code","i","match","received","expected","format","origin","minimum","maximum","values","keys"],"mappings":"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"}