@wener/common 2.0.1 → 2.0.3

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 (405) hide show
  1. package/lib/ai/qwen3vl/index.js +2 -0
  2. package/lib/ai/qwen3vl/index.js.map +1 -0
  3. package/lib/ai/qwen3vl/utils.js +31 -0
  4. package/lib/ai/qwen3vl/utils.js.map +1 -0
  5. package/lib/ai/vision/DocLayoutElementTypeSchema.js +28 -0
  6. package/lib/ai/vision/DocLayoutElementTypeSchema.js.map +1 -0
  7. package/lib/ai/vision/ImageAnnotationSchema.js +50 -0
  8. package/lib/ai/vision/ImageAnnotationSchema.js.map +1 -0
  9. package/lib/ai/vision/index.js +3 -0
  10. package/lib/ai/vision/index.js.map +1 -0
  11. package/lib/ai/vision/resolveImageAnnotation.js +105 -0
  12. package/lib/ai/vision/resolveImageAnnotation.js.map +1 -0
  13. package/lib/cn/ChineseResidentIdNo.js +48 -0
  14. package/lib/cn/ChineseResidentIdNo.js.map +1 -0
  15. package/lib/cn/ChineseResidentIdNo.mod.js +1 -0
  16. package/lib/cn/{ResidentIdentityCardNumber.test.js → ChineseResidentIdNo.test.js} +7 -6
  17. package/lib/cn/DivisionCode.js +217 -301
  18. package/lib/cn/DivisionCode.js.map +1 -0
  19. package/lib/cn/DivisionCode.mod.js +1 -0
  20. package/lib/cn/DivisionCode.test.js +9 -15
  21. package/lib/cn/Mod11.js +43 -0
  22. package/lib/cn/Mod11.js.map +1 -0
  23. package/lib/cn/Mod31.js +49 -0
  24. package/lib/cn/Mod31.js.map +1 -0
  25. package/lib/cn/UnifiedSocialCreditCode.js +137 -113
  26. package/lib/cn/UnifiedSocialCreditCode.js.map +1 -0
  27. package/lib/cn/UnifiedSocialCreditCode.mod.js +1 -0
  28. package/lib/cn/UnifiedSocialCreditCode.test.js +1 -1
  29. package/lib/cn/formatChineseAmount.js +77 -0
  30. package/lib/cn/formatChineseAmount.js.map +1 -0
  31. package/lib/cn/index.js +6 -2
  32. package/lib/cn/index.js.map +1 -0
  33. package/lib/cn/mod.js +6 -0
  34. package/lib/cn/parseChineseNumber.js +94 -0
  35. package/lib/cn/parseChineseNumber.js.map +1 -0
  36. package/lib/cn/parseChineseNumber.test.js +278 -0
  37. package/lib/cn/pinyin/cartesianProduct.js +22 -0
  38. package/lib/cn/pinyin/cartesianProduct.js.map +1 -0
  39. package/lib/cn/pinyin/cartesianProduct.test.js +179 -0
  40. package/lib/cn/pinyin/data.json +23573 -0
  41. package/lib/cn/pinyin/loader.js +14 -0
  42. package/lib/cn/pinyin/loader.js.map +1 -0
  43. package/lib/cn/pinyin/preload.js +3 -0
  44. package/lib/cn/pinyin/preload.js.map +1 -0
  45. package/lib/cn/pinyin/toPinyin.test.js +167 -0
  46. package/lib/cn/pinyin/toPinyinPure.js +33 -0
  47. package/lib/cn/pinyin/toPinyinPure.js.map +1 -0
  48. package/lib/cn/pinyin/transform.js +14 -0
  49. package/lib/cn/pinyin/transform.js.map +1 -0
  50. package/lib/cn/types.d.js +2 -0
  51. package/lib/cn/types.d.js.map +1 -0
  52. package/lib/consola/createStandardConsolaReporter.js +6 -6
  53. package/lib/consola/createStandardConsolaReporter.js.map +1 -0
  54. package/lib/consola/formatLogObject.js +67 -135
  55. package/lib/consola/formatLogObject.js.map +1 -0
  56. package/lib/consola/formatLogObject.test.js +184 -0
  57. package/lib/consola/index.js +1 -0
  58. package/lib/consola/index.js.map +1 -0
  59. package/lib/data/formatSort.js +6 -5
  60. package/lib/data/formatSort.js.map +1 -0
  61. package/lib/data/index.js +1 -0
  62. package/lib/data/index.js.map +1 -0
  63. package/lib/data/maybeNumber.js +5 -7
  64. package/lib/data/maybeNumber.js.map +1 -0
  65. package/lib/data/parseSort.js +22 -28
  66. package/lib/data/parseSort.js.map +1 -0
  67. package/lib/data/resolvePagination.js +13 -17
  68. package/lib/data/resolvePagination.js.map +1 -0
  69. package/lib/data/types.d.js +2 -0
  70. package/lib/data/types.d.js.map +1 -0
  71. package/lib/dayjs/dayjs.js +40 -0
  72. package/lib/dayjs/dayjs.js.map +1 -0
  73. package/lib/dayjs/formatDuration.js +59 -0
  74. package/lib/dayjs/formatDuration.js.map +1 -0
  75. package/lib/dayjs/formatDuration.test.js +90 -0
  76. package/lib/dayjs/index.js +5 -0
  77. package/lib/dayjs/index.js.map +1 -0
  78. package/lib/dayjs/parseDuration.js +29 -0
  79. package/lib/dayjs/parseDuration.js.map +1 -0
  80. package/lib/dayjs/parseRelativeTime.js +90 -0
  81. package/lib/dayjs/parseRelativeTime.js.map +1 -0
  82. package/lib/dayjs/parseRelativeTime.test.js +247 -0
  83. package/lib/dayjs/resolveRelativeTime.js +158 -0
  84. package/lib/dayjs/resolveRelativeTime.js.map +1 -0
  85. package/lib/dayjs/resolveRelativeTime.test.js +310 -0
  86. package/lib/decimal/index.js +2 -0
  87. package/lib/decimal/index.js.map +1 -0
  88. package/lib/decimal/parseDecimal.js +15 -0
  89. package/lib/decimal/parseDecimal.js.map +1 -0
  90. package/lib/emittery/emitter.js +10 -0
  91. package/lib/emittery/emitter.js.map +1 -0
  92. package/lib/emittery/index.js +2 -0
  93. package/lib/emittery/index.js.map +1 -0
  94. package/lib/foundation/schema/SexType.js +16 -0
  95. package/lib/foundation/schema/SexType.js.map +1 -0
  96. package/lib/foundation/schema/index.js +2 -0
  97. package/lib/foundation/schema/index.js.map +1 -0
  98. package/lib/foundation/schema/parseSexType.js +19 -0
  99. package/lib/foundation/schema/parseSexType.js.map +1 -0
  100. package/lib/foundation/schema/types.js +7 -0
  101. package/lib/foundation/schema/types.js.map +1 -0
  102. package/lib/fs/FileSystemError.js +23 -0
  103. package/lib/fs/FileSystemError.js.map +1 -0
  104. package/lib/fs/IFileSystem.d.js +3 -0
  105. package/lib/fs/IFileSystem.d.js.map +1 -0
  106. package/lib/fs/MemoryFileSystem.test.js +188 -0
  107. package/lib/fs/createBrowserFileSystem.js +248 -0
  108. package/lib/fs/createBrowserFileSystem.js.map +1 -0
  109. package/lib/fs/createMemoryFileSystem.js +516 -0
  110. package/lib/fs/createMemoryFileSystem.js.map +1 -0
  111. package/lib/fs/createSandboxFileSystem.js +108 -0
  112. package/lib/fs/createSandboxFileSystem.js.map +1 -0
  113. package/lib/fs/createWebDavFileSystem.js +137 -0
  114. package/lib/fs/createWebDavFileSystem.js.map +1 -0
  115. package/lib/fs/findMimeType.js +17 -0
  116. package/lib/fs/findMimeType.js.map +1 -0
  117. package/lib/fs/index.js +8 -0
  118. package/lib/fs/index.js.map +1 -0
  119. package/lib/fs/orpc/FileSystemContract.js +93 -0
  120. package/lib/fs/orpc/FileSystemContract.js.map +1 -0
  121. package/lib/fs/orpc/createContractClientFileSystem.js +93 -0
  122. package/lib/fs/orpc/createContractClientFileSystem.js.map +1 -0
  123. package/lib/fs/orpc/index.js +3 -0
  124. package/lib/fs/orpc/index.js.map +1 -0
  125. package/lib/fs/orpc/server/createFileSystemContractImpl.js +63 -0
  126. package/lib/fs/orpc/server/createFileSystemContractImpl.js.map +1 -0
  127. package/lib/fs/orpc/server/index.js +2 -0
  128. package/lib/fs/orpc/server/index.js.map +1 -0
  129. package/lib/fs/s3/createS3MiniFileSystem.js +705 -0
  130. package/lib/fs/s3/createS3MiniFileSystem.js.map +1 -0
  131. package/lib/fs/s3/index.js +2 -0
  132. package/lib/fs/s3/index.js.map +1 -0
  133. package/lib/fs/s3/s3mini.test.js +584 -0
  134. package/lib/fs/scandir.js +59 -0
  135. package/lib/fs/scandir.js.map +1 -0
  136. package/lib/fs/server/createDatabaseFileSystem.js +750 -0
  137. package/lib/fs/server/createDatabaseFileSystem.js.map +1 -0
  138. package/lib/fs/server/createNodeFileSystem.js +401 -0
  139. package/lib/fs/server/createNodeFileSystem.js.map +1 -0
  140. package/lib/fs/server/dbfs.test.js +221 -0
  141. package/lib/fs/server/index.js +2 -0
  142. package/lib/fs/server/index.js.map +1 -0
  143. package/lib/fs/server/loadTestDatabase.js +127 -0
  144. package/lib/fs/server/loadTestDatabase.js.map +1 -0
  145. package/lib/fs/tests/runFileSystemTest.js +318 -0
  146. package/lib/fs/tests/runFileSystemTest.js.map +1 -0
  147. package/lib/fs/types.js +27 -0
  148. package/lib/fs/types.js.map +1 -0
  149. package/lib/fs/utils/getFileUrl.js +35 -0
  150. package/lib/fs/utils/getFileUrl.js.map +1 -0
  151. package/lib/fs/utils.js +22 -0
  152. package/lib/fs/utils.js.map +1 -0
  153. package/lib/index.js +1 -0
  154. package/lib/index.js.map +1 -0
  155. package/lib/jsonschema/JsonSchema.js +146 -172
  156. package/lib/jsonschema/JsonSchema.js.map +1 -0
  157. package/lib/jsonschema/forEachJsonSchema.js +44 -0
  158. package/lib/jsonschema/forEachJsonSchema.js.map +1 -0
  159. package/lib/jsonschema/index.js +2 -0
  160. package/lib/jsonschema/index.js.map +1 -0
  161. package/lib/jsonschema/types.d.js +2 -0
  162. package/lib/jsonschema/types.d.js.map +1 -0
  163. package/lib/meta/defineFileType.js +20 -103
  164. package/lib/meta/defineFileType.js.map +1 -0
  165. package/lib/meta/defineInit.js +31 -250
  166. package/lib/meta/defineInit.js.map +1 -0
  167. package/lib/meta/defineMetadata.js +24 -140
  168. package/lib/meta/defineMetadata.js.map +1 -0
  169. package/lib/meta/index.js +1 -0
  170. package/lib/meta/index.js.map +1 -0
  171. package/lib/orpc/createOpenApiContractClient.js +27 -0
  172. package/lib/orpc/createOpenApiContractClient.js.map +1 -0
  173. package/lib/orpc/createRpcContractClient.js +34 -0
  174. package/lib/orpc/createRpcContractClient.js.map +1 -0
  175. package/lib/orpc/index.js +3 -0
  176. package/lib/orpc/index.js.map +1 -0
  177. package/lib/orpc/resolveLinkPlugins.js +28 -0
  178. package/lib/orpc/resolveLinkPlugins.js.map +1 -0
  179. package/lib/password/PHC.js +63 -87
  180. package/lib/password/PHC.js.map +1 -0
  181. package/lib/password/PHC.test.js +11 -3
  182. package/lib/password/Password.js +30 -292
  183. package/lib/password/Password.js.map +1 -0
  184. package/lib/password/Password.test.js +35 -22
  185. package/lib/password/createArgon2PasswordAlgorithm.js +35 -191
  186. package/lib/password/createArgon2PasswordAlgorithm.js.map +1 -0
  187. package/lib/password/createBase64PasswordAlgorithm.js +8 -141
  188. package/lib/password/createBase64PasswordAlgorithm.js.map +1 -0
  189. package/lib/password/createBcryptPasswordAlgorithm.js +13 -168
  190. package/lib/password/createBcryptPasswordAlgorithm.js.map +1 -0
  191. package/lib/password/createPBKDF2PasswordAlgorithm.js +46 -228
  192. package/lib/password/createPBKDF2PasswordAlgorithm.js.map +1 -0
  193. package/lib/password/createScryptPasswordAlgorithm.js +55 -211
  194. package/lib/password/createScryptPasswordAlgorithm.js.map +1 -0
  195. package/lib/password/index.js +1 -0
  196. package/lib/password/index.js.map +1 -0
  197. package/lib/password/server/index.js +1 -0
  198. package/lib/password/server/index.js.map +1 -0
  199. package/lib/resource/Identifiable.js +2 -0
  200. package/lib/resource/Identifiable.js.map +1 -0
  201. package/lib/resource/ListQuery.js +47 -0
  202. package/lib/resource/ListQuery.js.map +1 -0
  203. package/lib/resource/getTitleOfResource.js +3 -5
  204. package/lib/resource/getTitleOfResource.js.map +1 -0
  205. package/lib/resource/index.js +2 -0
  206. package/lib/resource/index.js.map +1 -0
  207. package/lib/resource/schema/AnyResourceSchema.js +3 -2
  208. package/lib/resource/schema/AnyResourceSchema.js.map +1 -0
  209. package/lib/resource/schema/BaseResourceSchema.js +2 -1
  210. package/lib/resource/schema/BaseResourceSchema.js.map +1 -0
  211. package/lib/resource/schema/ResourceActionType.js +6 -4
  212. package/lib/resource/schema/ResourceActionType.js.map +1 -0
  213. package/lib/resource/schema/ResourceStatus.js +5 -3
  214. package/lib/resource/schema/ResourceStatus.js.map +1 -0
  215. package/lib/resource/schema/ResourceType.js +5 -3
  216. package/lib/resource/schema/ResourceType.js.map +1 -0
  217. package/lib/resource/schema/index.js +6 -0
  218. package/lib/resource/schema/index.js.map +1 -0
  219. package/lib/resource/schema/types.js +16 -20
  220. package/lib/resource/schema/types.js.map +1 -0
  221. package/lib/s3/formatS3Url.js +65 -0
  222. package/lib/s3/formatS3Url.js.map +1 -0
  223. package/lib/s3/formatS3Url.test.js +262 -0
  224. package/lib/s3/index.js +3 -0
  225. package/lib/s3/index.js.map +1 -0
  226. package/lib/s3/parseS3Url.js +65 -0
  227. package/lib/s3/parseS3Url.js.map +1 -0
  228. package/lib/s3/parseS3Url.test.js +270 -0
  229. package/lib/schema/SchemaRegistry.js +45 -0
  230. package/lib/schema/SchemaRegistry.js.map +1 -0
  231. package/lib/schema/SchemaRegistry.mod.js +2 -0
  232. package/lib/schema/TypeSchema.d.js +2 -0
  233. package/lib/schema/TypeSchema.d.js.map +1 -0
  234. package/lib/schema/createSchemaData.js +26 -125
  235. package/lib/schema/createSchemaData.js.map +1 -0
  236. package/lib/schema/findJsonSchemaByPath.js +13 -36
  237. package/lib/schema/findJsonSchemaByPath.js.map +1 -0
  238. package/lib/schema/formatZodError.js +140 -0
  239. package/lib/schema/formatZodError.js.map +1 -0
  240. package/lib/schema/formatZodError.test.js +196 -0
  241. package/lib/schema/getSchemaCache.js +5 -5
  242. package/lib/schema/getSchemaCache.js.map +1 -0
  243. package/lib/schema/getSchemaOptions.js +8 -11
  244. package/lib/schema/getSchemaOptions.js.map +1 -0
  245. package/lib/schema/index.js +2 -0
  246. package/lib/schema/index.js.map +1 -0
  247. package/lib/schema/toJsonSchema.js +47 -290
  248. package/lib/schema/toJsonSchema.js.map +1 -0
  249. package/lib/schema/validate.js +33 -45
  250. package/lib/schema/validate.js.map +1 -0
  251. package/lib/tools/generateSchema.js +39 -197
  252. package/lib/tools/generateSchema.js.map +1 -0
  253. package/lib/tools/renderJsonSchemaToMarkdownDoc.js +55 -143
  254. package/lib/tools/renderJsonSchemaToMarkdownDoc.js.map +1 -0
  255. package/lib/utils/buildBaseUrl.js +13 -0
  256. package/lib/utils/buildBaseUrl.js.map +1 -0
  257. package/lib/utils/buildRedactorFormSchema.js +59 -0
  258. package/lib/utils/buildRedactorFormSchema.js.map +1 -0
  259. package/lib/utils/getEstimateProcessTime.js +21 -0
  260. package/lib/utils/getEstimateProcessTime.js.map +1 -0
  261. package/lib/utils/index.js +4 -0
  262. package/lib/utils/index.js.map +1 -0
  263. package/lib/utils/resolveFeatureOptions.js +12 -0
  264. package/lib/utils/resolveFeatureOptions.js.map +1 -0
  265. package/package.json +77 -20
  266. package/src/ai/qwen3vl/index.ts +1 -0
  267. package/src/ai/qwen3vl/utils.ts +36 -0
  268. package/src/ai/vision/DocLayoutElementTypeSchema.ts +30 -0
  269. package/src/ai/vision/ImageAnnotationSchema.ts +60 -0
  270. package/src/ai/vision/index.ts +2 -0
  271. package/src/ai/vision/resolveImageAnnotation.ts +135 -0
  272. package/src/cn/ChineseResidentIdNo.test.ts +18 -0
  273. package/src/cn/ChineseResidentIdNo.ts +74 -0
  274. package/src/cn/DivisionCode.test.ts +3 -13
  275. package/src/cn/DivisionCode.ts +138 -193
  276. package/src/cn/{Mod11Checksum.ts → Mod11.ts} +3 -1
  277. package/src/cn/{Mod31Checksum.ts → Mod31.ts} +2 -0
  278. package/src/cn/UnifiedSocialCreditCode.test.ts +2 -2
  279. package/src/cn/UnifiedSocialCreditCode.ts +119 -124
  280. package/src/cn/__snapshots__/ChineseResidentIdNo.test.ts.snap +14 -0
  281. package/src/cn/__snapshots__/UnifiedSocialCreditCode.test.ts.snap +41 -12
  282. package/src/cn/formatChineseAmount.ts +61 -0
  283. package/src/cn/index.ts +6 -2
  284. package/src/cn/parseChineseNumber.test.ts +159 -0
  285. package/src/cn/parseChineseNumber.ts +97 -0
  286. package/src/cn/pinyin/cartesianProduct.test.ts +64 -0
  287. package/src/cn/pinyin/cartesianProduct.ts +24 -0
  288. package/src/cn/pinyin/data.json +23573 -0
  289. package/src/cn/pinyin/loader.ts +12 -0
  290. package/src/cn/pinyin/preload.ts +3 -0
  291. package/src/cn/pinyin/toPinyin.test.ts +12 -0
  292. package/src/cn/pinyin/toPinyinPure.ts +43 -0
  293. package/src/cn/pinyin/transform.ts +12 -0
  294. package/src/consola/formatLogObject.test.ts +27 -0
  295. package/src/consola/formatLogObject.ts +46 -10
  296. package/src/dayjs/dayjs.ts +40 -0
  297. package/src/dayjs/formatDuration.test.ts +14 -0
  298. package/src/dayjs/formatDuration.ts +86 -0
  299. package/src/dayjs/index.ts +5 -0
  300. package/src/dayjs/parseDuration.ts +40 -0
  301. package/src/dayjs/parseRelativeTime.test.ts +185 -0
  302. package/src/dayjs/parseRelativeTime.ts +115 -0
  303. package/src/dayjs/resolveRelativeTime.test.ts +357 -0
  304. package/src/dayjs/resolveRelativeTime.ts +167 -0
  305. package/src/decimal/index.ts +1 -0
  306. package/src/decimal/parseDecimal.ts +16 -0
  307. package/src/emittery/emitter.ts +9 -0
  308. package/src/emittery/index.ts +1 -0
  309. package/src/foundation/schema/SexType.ts +21 -0
  310. package/src/foundation/schema/index.ts +1 -0
  311. package/src/foundation/schema/parseSexType.ts +19 -0
  312. package/src/foundation/schema/types.ts +8 -0
  313. package/src/fs/FileSystemError.ts +26 -0
  314. package/src/fs/IFileSystem.d.ts +102 -0
  315. package/src/fs/MemoryFileSystem.test.ts +37 -0
  316. package/src/fs/createBrowserFileSystem.ts +291 -0
  317. package/src/fs/createMemoryFileSystem.ts +604 -0
  318. package/src/fs/createSandboxFileSystem.ts +136 -0
  319. package/src/fs/createWebDavFileSystem.ts +172 -0
  320. package/src/fs/findMimeType.ts +23 -0
  321. package/src/fs/index.ts +8 -0
  322. package/src/fs/orpc/FileSystemContract.ts +92 -0
  323. package/src/fs/orpc/createContractClientFileSystem.ts +115 -0
  324. package/src/fs/orpc/index.ts +2 -0
  325. package/src/fs/orpc/server/createFileSystemContractImpl.ts +64 -0
  326. package/src/fs/orpc/server/index.ts +1 -0
  327. package/src/fs/s3/createS3MiniFileSystem.ts +830 -0
  328. package/src/fs/s3/index.ts +1 -0
  329. package/src/fs/s3/s3mini.test.ts +264 -0
  330. package/src/fs/scandir.ts +75 -0
  331. package/src/fs/server/createDatabaseFileSystem.ts +668 -0
  332. package/src/fs/server/createNodeFileSystem.ts +499 -0
  333. package/src/fs/server/dbfs.test.ts +47 -0
  334. package/src/fs/server/index.ts +1 -0
  335. package/src/fs/server/loadTestDatabase.ts +131 -0
  336. package/src/fs/tests/runFileSystemTest.ts +288 -0
  337. package/src/fs/types.ts +29 -0
  338. package/src/fs/utils/getFileUrl.ts +44 -0
  339. package/src/fs/utils.ts +23 -0
  340. package/src/jsonschema/JsonSchema.ts +118 -110
  341. package/src/jsonschema/forEachJsonSchema.ts +50 -0
  342. package/src/jsonschema/index.ts +1 -0
  343. package/src/orpc/createOpenApiContractClient.ts +52 -0
  344. package/src/orpc/createRpcContractClient.ts +50 -0
  345. package/src/orpc/index.ts +2 -0
  346. package/src/orpc/resolveLinkPlugins.ts +29 -0
  347. package/src/password/PHC.ts +3 -3
  348. package/src/password/Password.test.ts +1 -1
  349. package/src/password/Password.ts +2 -2
  350. package/src/password/createPBKDF2PasswordAlgorithm.ts +2 -2
  351. package/src/resource/ListQuery.ts +53 -0
  352. package/src/resource/index.ts +1 -0
  353. package/src/resource/schema/AnyResourceSchema.ts +17 -3
  354. package/src/resource/schema/index.ts +5 -0
  355. package/src/s3/formatS3Url.test.ts +254 -0
  356. package/src/s3/formatS3Url.ts +84 -0
  357. package/src/s3/index.ts +2 -0
  358. package/src/s3/parseS3Url.test.ts +258 -0
  359. package/src/s3/parseS3Url.ts +88 -0
  360. package/src/schema/SchemaRegistry.ts +48 -0
  361. package/src/schema/createSchemaData.ts +1 -1
  362. package/src/schema/formatZodError.test.ts +196 -0
  363. package/src/schema/formatZodError.ts +151 -0
  364. package/src/schema/getSchemaOptions.ts +3 -3
  365. package/src/schema/index.ts +1 -0
  366. package/src/utils/buildBaseUrl.ts +12 -0
  367. package/src/utils/buildRedactorFormSchema.ts +85 -0
  368. package/src/utils/getEstimateProcessTime.ts +36 -0
  369. package/src/utils/index.ts +5 -0
  370. package/src/utils/resolveFeatureOptions.ts +14 -0
  371. package/lib/cn/Mod11Checksum.js +0 -85
  372. package/lib/cn/Mod31Checksum.js +0 -97
  373. package/lib/cn/ResidentIdentityCardNumber.js +0 -50
  374. package/lib/cn/formatDate.js +0 -13
  375. package/lib/cn/parseSex.js +0 -20
  376. package/lib/resource/schema/SchemaRegistry.js +0 -38
  377. package/lib/resource/schema/SexType.js +0 -10
  378. package/lib/search/AdvanceSearch.js +0 -9
  379. package/lib/search/AdvanceSearch.test.js +0 -435
  380. package/lib/search/formatAdvanceSearch.js +0 -78
  381. package/lib/search/index.js +0 -1
  382. package/lib/search/optimizeAdvanceSearch.js +0 -143
  383. package/lib/search/parseAdvanceSearch.js +0 -20
  384. package/lib/search/parser.d.js +0 -1
  385. package/lib/search/parser.js +0 -3088
  386. package/lib/search/types.d.js +0 -1
  387. package/src/cn/ResidentIdentityCardNumber.test.ts +0 -17
  388. package/src/cn/ResidentIdentityCardNumber.ts +0 -96
  389. package/src/cn/__snapshots__/ResidentIdentityCardNumber.test.ts.snap +0 -15
  390. package/src/cn/formatDate.ts +0 -12
  391. package/src/cn/parseSex.ts +0 -13
  392. package/src/resource/schema/SchemaRegistry.ts +0 -42
  393. package/src/resource/schema/SexType.ts +0 -13
  394. package/src/search/AdvanceSearch.test.ts +0 -149
  395. package/src/search/AdvanceSearch.ts +0 -14
  396. package/src/search/Makefile +0 -2
  397. package/src/search/__snapshots__/AdvanceSearch.test.ts.snap +0 -675
  398. package/src/search/formatAdvanceSearch.ts +0 -52
  399. package/src/search/index.ts +0 -1
  400. package/src/search/optimizeAdvanceSearch.ts +0 -77
  401. package/src/search/parseAdvanceSearch.ts +0 -23
  402. package/src/search/parser.d.ts +0 -8
  403. package/src/search/parser.js +0 -2794
  404. package/src/search/parser.peggy +0 -237
  405. package/src/search/types.d.ts +0 -45
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/schema/TypeSchema.d.ts"],"sourcesContent":["import type {\n\tTSchema,\n\tStaticDecode as TypeBoxStaticDecode,\n\tStaticEncode as TypeBoxStaticEncode,\n} from '@sinclair/typebox';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { z } from 'zod/v4';\nimport type { JsonSchemaDef } from '../jsonschema';\n\nexport type TypeSchema<I = unknown, O = I> = TSchema | z.ZodSchema<O, I> | JsonSchemaDef | StandardSchemaV1<I, O>;\n\nexport type SchemaOutput<S extends TypeSchema> =\n\tS extends StandardSchemaV1<infer I, infer O>\n\t\t? O\n\t\t: S extends z.ZodSchema<infer O, infer I>\n\t\t\t? O\n\t\t\t: S extends TSchema\n\t\t\t\t? TypeBoxStaticEncode<S>\n\t\t\t\t: S extends JsonSchemaDef<infer I, infer O>\n\t\t\t\t\t? O\n\t\t\t\t\t: never;\n\nexport type SchemaInput<S extends TypeSchema> =\n\tS extends StandardSchemaV1<infer I, infer O>\n\t\t? I\n\t\t: S extends z.ZodSchema<infer O, infer I>\n\t\t\t? I\n\t\t\t: S extends TSchema\n\t\t\t\t? TypeBoxStaticDecode<S>\n\t\t\t\t: S extends JsonSchemaDef<infer I, infer O>\n\t\t\t\t\t? I\n\t\t\t\t\t: never;\n"],"names":[],"mappings":"AAsBA,WASa"}
@@ -1,91 +1,25 @@
1
- function _array_like_to_array(arr, len) {
2
- if (len == null || len > arr.length)
3
- len = arr.length;
4
- for (var i = 0, arr2 = new Array(len); i < len; i++)
5
- arr2[i] = arr[i];
6
- return arr2;
7
- }
8
- function _array_with_holes(arr) {
9
- if (Array.isArray(arr))
10
- return arr;
11
- }
12
- function _iterable_to_array_limit(arr, i) {
13
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
14
- if (_i == null)
15
- return;
16
- var _arr = [];
17
- var _n = true;
18
- var _d = false;
19
- var _s, _e;
20
- try {
21
- for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
22
- _arr.push(_s.value);
23
- if (i && _arr.length === i)
24
- break;
25
- }
26
- }
27
- catch (err) {
28
- _d = true;
29
- _e = err;
30
- }
31
- finally {
32
- try {
33
- if (!_n && _i["return"] != null)
34
- _i["return"]();
35
- }
36
- finally {
37
- if (_d)
38
- throw _e;
39
- }
40
- }
41
- return _arr;
42
- }
43
- function _non_iterable_rest() {
44
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
45
- }
46
- function _sliced_to_array(arr, i) {
47
- return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
48
- }
49
- function _unsupported_iterable_to_array(o, minLen) {
50
- if (!o)
51
- return;
52
- if (typeof o === "string")
53
- return _array_like_to_array(o, minLen);
54
- var n = Object.prototype.toString.call(o).slice(8, -1);
55
- if (n === "Object" && o.constructor)
56
- n = o.constructor.name;
57
- if (n === "Map" || n === "Set")
58
- return Array.from(n);
59
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
60
- return _array_like_to_array(o, minLen);
61
- }
62
1
  import { match, P } from "ts-pattern";
63
2
  import { toJsonSchema } from "./toJsonSchema.js";
64
- export function createSchemaData(ts) {
65
- var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
66
- var schema = toJsonSchema(ts);
3
+ export function createSchemaData(ts, options = {}) {
4
+ const schema = toJsonSchema(ts);
67
5
  return createJsonSchemaData(schema, options);
68
6
  }
69
7
  function createJsonSchemaData(schema, options) {
70
- var skip = function (s, ctx) {
71
- return Boolean(!ctx.required && s.nullable);
72
- };
8
+ let skip = (s, ctx) => Boolean(!ctx.required && s.nullable);
73
9
  if (options.all) {
74
- skip = function () {
75
- return false;
76
- };
10
+ skip = () => false;
77
11
  }
78
12
  if (options.skip) {
79
13
  skip = options.skip;
80
14
  }
81
15
  return _create(schema, {
82
- skip: skip
16
+ skip
83
17
  }, {
84
18
  required: false
85
19
  });
86
20
  }
87
21
  function _create(schema, options, ctx) {
88
- var skip = options.skip;
22
+ const { skip } = options;
89
23
  if (skip(schema, ctx)) {
90
24
  return schema.default;
91
25
  }
@@ -94,80 +28,47 @@ function _create(schema, options, ctx) {
94
28
  }
95
29
  return match(schema).returnType().with({
96
30
  default: P.select()
97
- }, function (v) {
98
- return v;
99
- }).with({
31
+ }, (v) => v).with({
100
32
  const: P.nonNullable
101
- }, function (v) {
102
- return v.const;
103
- }).with({
33
+ }, (v) => v.const).with({
104
34
  anyOf: P.nonNullable
105
- }, function (schema) {
35
+ }, (schema) => {
106
36
  return _create(schema.anyOf[0], options, {
107
37
  required: false
108
38
  });
109
39
  }).with({
110
40
  oneOf: P.nonNullable
111
- }, function (schema) {
41
+ }, (schema) => {
112
42
  return _create(schema.oneOf[0], options, {
113
43
  required: false
114
44
  });
115
45
  }).with({
116
46
  type: "string"
117
- }, function (schema) {
118
- return "";
119
- }).with({
47
+ }, (schema) => "").with({
120
48
  type: P.union("number", "integer")
121
- }, function (schema) {
122
- return 0;
123
- }).with({
49
+ }, (schema) => 0).with({
124
50
  type: "object"
125
- }, function () {
126
- var out = {};
127
- var required = schema.required || [];
128
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
129
- try {
130
- for (var _iterator = Object.entries(schema.properties || {})[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
131
- var _step_value = _sliced_to_array(_step.value, 2), k = _step_value[0], v = _step_value[1];
132
- var value = _create(v, options, {
133
- required: required.includes(k)
134
- });
135
- if (value === undefined) {
136
- continue;
137
- }
138
- out[k] = value;
139
- }
140
- }
141
- catch (err) {
142
- _didIteratorError = true;
143
- _iteratorError = err;
144
- }
145
- finally {
146
- try {
147
- if (!_iteratorNormalCompletion && _iterator.return != null) {
148
- _iterator.return();
149
- }
150
- }
151
- finally {
152
- if (_didIteratorError) {
153
- throw _iteratorError;
154
- }
51
+ }, () => {
52
+ const out = {};
53
+ let required = Array.isArray(schema.required) ? schema.required : [];
54
+ for (const [k, v] of Object.entries(schema.properties || {})) {
55
+ const value = _create(v, options, {
56
+ required: required.includes(k)
57
+ });
58
+ if (value === undefined) {
59
+ continue;
155
60
  }
61
+ out[k] = value;
156
62
  }
157
63
  return out;
158
64
  }).with({
159
65
  type: "null"
160
- }, function () {
161
- return null;
162
- }).with({
66
+ }, () => null).with({
163
67
  type: "boolean"
164
- }, function (schema) {
165
- return false;
166
- }).with({
68
+ }, (schema) => false).with({
167
69
  type: "array"
168
- }, function (schema) {
169
- return [];
170
- }).otherwise(function () {
70
+ }, (schema) => []).otherwise(() => {
171
71
  return undefined;
172
72
  });
173
73
  }
74
+ //# sourceMappingURL=createSchemaData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/schema/createSchemaData.ts"],"sourcesContent":["import { match, P } from 'ts-pattern';\nimport type { JsonSchemaDef } from '../jsonschema';\nimport { toJsonSchema } from './toJsonSchema';\nimport type { SchemaOutput, TypeSchema } from './TypeSchema';\n\nexport function createSchemaData<S extends TypeSchema>(\n\tts: S,\n\toptions: CreateSchemaDataOptions = {},\n): Partial<SchemaOutput<S>> {\n\tconst schema = toJsonSchema(ts);\n\treturn createJsonSchemaData(schema, options);\n}\n\ntype CreateSchemaDataOptions = Partial<CreateOptions> & {\n\tall?: boolean;\n};\n\nfunction createJsonSchemaData(schema: JsonSchemaDef, options: CreateSchemaDataOptions): any {\n\tlet skip: CreateOptions['skip'] = (s, ctx) => Boolean(!ctx.required && s.nullable);\n\tif (options.all) {\n\t\tskip = () => false;\n\t}\n\tif (options.skip) {\n\t\tskip = options.skip;\n\t}\n\treturn _create(\n\t\tschema,\n\t\t{\n\t\t\tskip,\n\t\t},\n\t\t{ required: false },\n\t);\n}\n\ntype CreateOptions = {\n\tskip: (schema: JsonSchemaDef, ctx: { required: boolean }) => boolean;\n};\n\nfunction _create(schema: JsonSchemaDef, options: CreateOptions, ctx: { required: boolean }): any {\n\tconst { skip } = options;\n\tif (skip(schema, ctx)) {\n\t\treturn schema.default;\n\t}\n\tif (schema.default !== undefined) {\n\t\treturn schema.default;\n\t}\n\treturn match(schema as JsonSchemaDef)\n\t\t.returnType<any>()\n\t\t.with({ default: P.select() }, (v) => v)\n\t\t.with({ const: P.nonNullable }, (v) => v.const)\n\t\t.with({ anyOf: P.nonNullable }, (schema) => {\n\t\t\treturn _create(schema.anyOf[0], options, { required: false });\n\t\t})\n\t\t.with({ oneOf: P.nonNullable }, (schema) => {\n\t\t\treturn _create(schema.oneOf[0], options, { required: false });\n\t\t})\n\t\t.with({ type: 'string' }, (schema) => '')\n\t\t.with({ type: P.union('number', 'integer') }, (schema) => 0)\n\t\t.with({ type: 'object' }, () => {\n\t\t\tconst out: Record<string, any> = {};\n\n\t\t\tlet required = Array.isArray(schema.required) ? schema.required : [];\n\t\t\tfor (const [k, v] of Object.entries(schema.properties || {}) as [string, JsonSchemaDef][]) {\n\t\t\t\tconst value = _create(v, options, {\n\t\t\t\t\trequired: required.includes(k),\n\t\t\t\t});\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tout[k] = value;\n\t\t\t}\n\n\t\t\treturn out;\n\t\t})\n\t\t.with({ type: 'null' }, () => null)\n\t\t.with({ type: 'boolean' }, (schema) => false)\n\t\t.with({ type: 'array' }, (schema) => [])\n\t\t.otherwise(() => {\n\t\t\treturn undefined;\n\t\t});\n}\n"],"names":["match","P","toJsonSchema","createSchemaData","ts","options","schema","createJsonSchemaData","skip","s","ctx","Boolean","required","nullable","all","_create","default","undefined","returnType","with","select","v","const","nonNullable","anyOf","oneOf","type","union","out","Array","isArray","k","Object","entries","properties","value","includes","otherwise"],"mappings":"AAAA,SAASA,KAAK,EAAEC,CAAC,QAAQ,aAAa;AAEtC,SAASC,YAAY,QAAQ,iBAAiB;AAG9C,OAAO,SAASC,iBACfC,EAAK,EACLC,UAAmC,CAAC,CAAC;IAErC,MAAMC,SAASJ,aAAaE;IAC5B,OAAOG,qBAAqBD,QAAQD;AACrC;AAMA,SAASE,qBAAqBD,MAAqB,EAAED,OAAgC;IACpF,IAAIG,OAA8B,CAACC,GAAGC,MAAQC,QAAQ,CAACD,IAAIE,QAAQ,IAAIH,EAAEI,QAAQ;IACjF,IAAIR,QAAQS,GAAG,EAAE;QAChBN,OAAO,IAAM;IACd;IACA,IAAIH,QAAQG,IAAI,EAAE;QACjBA,OAAOH,QAAQG,IAAI;IACpB;IACA,OAAOO,QACNT,QACA;QACCE;IACD,GACA;QAAEI,UAAU;IAAM;AAEpB;AAMA,SAASG,QAAQT,MAAqB,EAAED,OAAsB,EAAEK,GAA0B;IACzF,MAAM,EAAEF,IAAI,EAAE,GAAGH;IACjB,IAAIG,KAAKF,QAAQI,MAAM;QACtB,OAAOJ,OAAOU,OAAO;IACtB;IACA,IAAIV,OAAOU,OAAO,KAAKC,WAAW;QACjC,OAAOX,OAAOU,OAAO;IACtB;IACA,OAAOhB,MAAMM,QACXY,UAAU,GACVC,IAAI,CAAC;QAAEH,SAASf,EAAEmB,MAAM;IAAG,GAAG,CAACC,IAAMA,GACrCF,IAAI,CAAC;QAAEG,OAAOrB,EAAEsB,WAAW;IAAC,GAAG,CAACF,IAAMA,EAAEC,KAAK,EAC7CH,IAAI,CAAC;QAAEK,OAAOvB,EAAEsB,WAAW;IAAC,GAAG,CAACjB;QAChC,OAAOS,QAAQT,OAAOkB,KAAK,CAAC,EAAE,EAAEnB,SAAS;YAAEO,UAAU;QAAM;IAC5D,GACCO,IAAI,CAAC;QAAEM,OAAOxB,EAAEsB,WAAW;IAAC,GAAG,CAACjB;QAChC,OAAOS,QAAQT,OAAOmB,KAAK,CAAC,EAAE,EAAEpB,SAAS;YAAEO,UAAU;QAAM;IAC5D,GACCO,IAAI,CAAC;QAAEO,MAAM;IAAS,GAAG,CAACpB,SAAW,IACrCa,IAAI,CAAC;QAAEO,MAAMzB,EAAE0B,KAAK,CAAC,UAAU;IAAW,GAAG,CAACrB,SAAW,GACzDa,IAAI,CAAC;QAAEO,MAAM;IAAS,GAAG;QACzB,MAAME,MAA2B,CAAC;QAElC,IAAIhB,WAAWiB,MAAMC,OAAO,CAACxB,OAAOM,QAAQ,IAAIN,OAAOM,QAAQ,GAAG,EAAE;QACpE,KAAK,MAAM,CAACmB,GAAGV,EAAE,IAAIW,OAAOC,OAAO,CAAC3B,OAAO4B,UAAU,IAAI,CAAC,GAAiC;YAC1F,MAAMC,QAAQpB,QAAQM,GAAGhB,SAAS;gBACjCO,UAAUA,SAASwB,QAAQ,CAACL;YAC7B;YACA,IAAII,UAAUlB,WAAW;gBACxB;YACD;YACAW,GAAG,CAACG,EAAE,GAAGI;QACV;QAEA,OAAOP;IACR,GACCT,IAAI,CAAC;QAAEO,MAAM;IAAO,GAAG,IAAM,MAC7BP,IAAI,CAAC;QAAEO,MAAM;IAAU,GAAG,CAACpB,SAAW,OACtCa,IAAI,CAAC;QAAEO,MAAM;IAAQ,GAAG,CAACpB,SAAW,EAAE,EACtC+B,SAAS,CAAC;QACV,OAAOpB;IACR;AACF"}
@@ -1,7 +1,3 @@
1
- function _type_of(obj) {
2
- "@swc/helpers - typeof";
3
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
4
- }
5
1
  import { firstOfMaybeArray } from "@wener/utils";
6
2
  import { toJsonSchema } from "./toJsonSchema.js";
7
3
  export function findJsonSchemaByPath(schema, objectPath) {
@@ -9,41 +5,22 @@ export function findJsonSchemaByPath(schema, objectPath) {
9
5
  if (!objectPath || !schema) {
10
6
  return undefined;
11
7
  }
12
- var segments = objectPath.split(".");
13
- var currentSchema = schema;
14
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
15
- try {
16
- for (var _iterator = segments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
17
- var segment = _step.value;
18
- // 检查当前 schema 是否是对象类型且有 properties
19
- if (currentSchema && (typeof currentSchema === "undefined" ? "undefined" : _type_of(currentSchema)) === "object" && currentSchema.properties && currentSchema.properties[segment]) {
20
- currentSchema = currentSchema.properties[segment];
21
- continue;
22
- }
23
- if (/^\d$/.test(segment) || segment === "[]") {
24
- if (currentSchema.items) {
25
- currentSchema = firstOfMaybeArray(currentSchema.items);
26
- continue;
27
- }
28
- }
29
- return undefined;
30
- }
31
- }
32
- catch (err) {
33
- _didIteratorError = true;
34
- _iteratorError = err;
35
- }
36
- finally {
37
- try {
38
- if (!_iteratorNormalCompletion && _iterator.return != null) {
39
- _iterator.return();
40
- }
8
+ const segments = objectPath.split(".");
9
+ let currentSchema = schema;
10
+ for (const segment of segments) {
11
+ // 检查当前 schema 是否是对象类型且有 properties
12
+ if (currentSchema && typeof currentSchema === "object" && currentSchema.properties && currentSchema.properties[segment]) {
13
+ currentSchema = currentSchema.properties[segment];
14
+ continue;
41
15
  }
42
- finally {
43
- if (_didIteratorError) {
44
- throw _iteratorError;
16
+ if (/^\d$/.test(segment) || segment === "[]") {
17
+ if (currentSchema.items) {
18
+ currentSchema = firstOfMaybeArray(currentSchema.items);
19
+ continue;
45
20
  }
46
21
  }
22
+ return undefined;
47
23
  }
48
24
  return currentSchema;
49
25
  }
26
+ //# sourceMappingURL=findJsonSchemaByPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/schema/findJsonSchemaByPath.ts"],"sourcesContent":["import { firstOfMaybeArray } from '@wener/utils';\nimport { toJsonSchema } from './toJsonSchema';\nimport type { TypeSchema } from './TypeSchema';\n\nexport function findJsonSchemaByPath(schema: TypeSchema, objectPath: string) {\n\tschema = toJsonSchema(schema);\n\tif (!objectPath || !schema) {\n\t\treturn undefined;\n\t}\n\n\tconst segments = objectPath.split('.');\n\tlet currentSchema = schema;\n\n\tfor (const segment of segments) {\n\t\t// 检查当前 schema 是否是对象类型且有 properties\n\t\tif (\n\t\t\tcurrentSchema\n\t\t\t&& typeof currentSchema === 'object'\n\t\t\t&& currentSchema.properties\n\t\t\t&& currentSchema.properties[segment]\n\t\t) {\n\t\t\tcurrentSchema = currentSchema.properties[segment];\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (/^\\d$/.test(segment) || segment === '[]') {\n\t\t\tif (currentSchema.items) {\n\t\t\t\tcurrentSchema = firstOfMaybeArray(currentSchema.items);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\treturn currentSchema;\n}\n"],"names":["firstOfMaybeArray","toJsonSchema","findJsonSchemaByPath","schema","objectPath","undefined","segments","split","currentSchema","segment","properties","test","items"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,eAAe;AACjD,SAASC,YAAY,QAAQ,iBAAiB;AAG9C,OAAO,SAASC,qBAAqBC,MAAkB,EAAEC,UAAkB;IAC1ED,SAASF,aAAaE;IACtB,IAAI,CAACC,cAAc,CAACD,QAAQ;QAC3B,OAAOE;IACR;IAEA,MAAMC,WAAWF,WAAWG,KAAK,CAAC;IAClC,IAAIC,gBAAgBL;IAEpB,KAAK,MAAMM,WAAWH,SAAU;QAC/B,mCAAmC;QACnC,IACCE,iBACG,OAAOA,kBAAkB,YACzBA,cAAcE,UAAU,IACxBF,cAAcE,UAAU,CAACD,QAAQ,EACnC;YACDD,gBAAgBA,cAAcE,UAAU,CAACD,QAAQ;YACjD;QACD;QAEA,IAAI,OAAOE,IAAI,CAACF,YAAYA,YAAY,MAAM;YAC7C,IAAID,cAAcI,KAAK,EAAE;gBACxBJ,gBAAgBR,kBAAkBQ,cAAcI,KAAK;gBACrD;YACD;QACD;QAEA,OAAOP;IACR;IAEA,OAAOG;AACR"}
@@ -0,0 +1,140 @@
1
+ import { findJsonSchemaByPath } from "./findJsonSchemaByPath.js";
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");
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;
133
+ }
134
+ function formatPath(path) {
135
+ if (path.length === 0) {
136
+ return "\u8868\u5355";
137
+ }
138
+ return path.map(String).join(".");
139
+ }
140
+ //# sourceMappingURL=formatZodError.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,196 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { z } from "zod/v4";
3
+ import { formatZodError } from "./formatZodError.js";
4
+ describe("formatZodError", function () {
5
+ it("should format invalid_type error", function () {
6
+ var schema = z.object({
7
+ name: z.string(),
8
+ age: z.number()
9
+ });
10
+ var result = schema.safeParse({
11
+ name: 123,
12
+ age: "not-a-number"
13
+ });
14
+ expect(result.success).toBe(false);
15
+ if (!result.success) {
16
+ var formatted = formatZodError(result.error);
17
+ expect(formatted).toContain("name");
18
+ expect(formatted).toContain("age");
19
+ }
20
+ });
21
+ it("should format required field error", function () {
22
+ var schema = z.object({
23
+ name: z.string(),
24
+ email: z.string().email()
25
+ });
26
+ var result = schema.safeParse({});
27
+ expect(result.success).toBe(false);
28
+ if (!result.success) {
29
+ var formatted = formatZodError(result.error);
30
+ expect(formatted).toContain("\u5FC5\u586B");
31
+ }
32
+ });
33
+ it("should format email validation error", function () {
34
+ var schema = z.object({
35
+ email: z.string().email()
36
+ });
37
+ var result = schema.safeParse({
38
+ email: "invalid-email"
39
+ });
40
+ expect(result.success).toBe(false);
41
+ if (!result.success) {
42
+ var formatted = formatZodError(result.error);
43
+ expect(formatted).toContain("\u8BF7\u8F93\u5165\u6709\u6548\u7684\u90AE\u7BB1\u5730\u5740");
44
+ }
45
+ });
46
+ it("should format URL validation error", function () {
47
+ var schema = z.object({
48
+ url: z.string().url()
49
+ });
50
+ var result = schema.safeParse({
51
+ url: "not-a-url"
52
+ });
53
+ expect(result.success).toBe(false);
54
+ if (!result.success) {
55
+ var formatted = formatZodError(result.error);
56
+ expect(formatted).toContain("\u8BF7\u8F93\u5165\u6709\u6548\u7684 URL");
57
+ }
58
+ });
59
+ it("should format too_small error for string", function () {
60
+ var schema = z.object({
61
+ name: z.string().min(5)
62
+ });
63
+ var result = schema.safeParse({
64
+ name: "abc"
65
+ });
66
+ expect(result.success).toBe(false);
67
+ if (!result.success) {
68
+ var formatted = formatZodError(result.error);
69
+ expect(formatted).toContain("\u81F3\u5C11\u9700\u8981");
70
+ }
71
+ });
72
+ it("should format too_small error for number", function () {
73
+ var schema = z.object({
74
+ age: z.number().min(18)
75
+ });
76
+ var result = schema.safeParse({
77
+ age: 16
78
+ });
79
+ expect(result.success).toBe(false);
80
+ if (!result.success) {
81
+ var formatted = formatZodError(result.error);
82
+ expect(formatted).toContain("\u81F3\u5C11\u9700\u8981 18");
83
+ }
84
+ });
85
+ it("should format too_big error for string", function () {
86
+ var schema = z.object({
87
+ name: z.string().max(10)
88
+ });
89
+ var result = schema.safeParse({
90
+ name: "this is too long"
91
+ });
92
+ expect(result.success).toBe(false);
93
+ if (!result.success) {
94
+ var formatted = formatZodError(result.error);
95
+ expect(formatted).toContain("\u6700\u591A 10 \u4E2A\u5B57\u7B26");
96
+ }
97
+ });
98
+ it("should format invalid_enum_value error", function () {
99
+ var schema = z.object({
100
+ status: z.enum([
101
+ "active",
102
+ "inactive",
103
+ "pending"
104
+ ])
105
+ });
106
+ var result = schema.safeParse({
107
+ status: "invalid"
108
+ });
109
+ expect(result.success).toBe(false);
110
+ if (!result.success) {
111
+ var formatted = formatZodError(result.error);
112
+ expect(formatted).toContain("\u5FC5\u987B\u662F\u4EE5\u4E0B\u503C\u4E4B\u4E00");
113
+ }
114
+ });
115
+ it("should format invalid_literal error", function () {
116
+ var schema = z.object({
117
+ type: z.literal("user")
118
+ });
119
+ var result = schema.safeParse({
120
+ type: "admin"
121
+ });
122
+ expect(result.success).toBe(false);
123
+ if (!result.success) {
124
+ var formatted = formatZodError(result.error);
125
+ expect(formatted).toContain("\u5FC5\u987B\u662F user");
126
+ }
127
+ });
128
+ it("should format nested object errors", function () {
129
+ var schema = z.object({
130
+ user: z.object({
131
+ name: z.string(),
132
+ email: z.string().email()
133
+ })
134
+ });
135
+ var result = schema.safeParse({
136
+ user: {
137
+ name: "",
138
+ email: "invalid"
139
+ }
140
+ });
141
+ expect(result.success).toBe(false);
142
+ if (!result.success) {
143
+ var formatted = formatZodError(result.error);
144
+ expect(formatted).toContain("user");
145
+ expect(formatted).toContain("email");
146
+ }
147
+ });
148
+ it("should format array errors", function () {
149
+ var schema = z.object({
150
+ tags: z.array(z.string()).min(1)
151
+ });
152
+ var result = schema.safeParse({
153
+ tags: []
154
+ });
155
+ expect(result.success).toBe(false);
156
+ if (!result.success) {
157
+ var formatted = formatZodError(result.error);
158
+ expect(formatted).toContain("\u81F3\u5C11\u9700\u8981 1 \u9879");
159
+ }
160
+ });
161
+ it("should format multiple errors", function () {
162
+ var schema = z.object({
163
+ name: z.string().min(1),
164
+ email: z.string().email(),
165
+ age: z.number().min(18)
166
+ });
167
+ var result = schema.safeParse({
168
+ name: "",
169
+ email: "invalid",
170
+ age: 15
171
+ });
172
+ expect(result.success).toBe(false);
173
+ if (!result.success) {
174
+ var formatted = formatZodError(result.error);
175
+ // Should contain multiple error messages separated by ';'
176
+ var parts = formatted.split("\uFF1B");
177
+ expect(parts.length).toBeGreaterThan(1);
178
+ }
179
+ });
180
+ it("should use schema description when available", function () {
181
+ var schema = z.object({
182
+ name: z.string().describe("\u59D3\u540D"),
183
+ email: z.string().email().describe("\u90AE\u7BB1\u5730\u5740")
184
+ });
185
+ var result = schema.safeParse({
186
+ name: "",
187
+ email: "invalid"
188
+ });
189
+ expect(result.success).toBe(false);
190
+ if (!result.success) {
191
+ var formatted = formatZodError(result.error, schema);
192
+ expect(formatted).toContain("\u59D3\u540D");
193
+ expect(formatted).toContain("\u90AE\u7BB1\u5730\u5740");
194
+ }
195
+ });
196
+ });
@@ -1,11 +1,11 @@
1
- var _cache = new WeakMap();
1
+ const _cache = new WeakMap();
2
2
  export function getSchemaCache(obj, key, compute) {
3
- var _c, _key;
4
- var c = _cache.get(obj);
3
+ let c = _cache.get(obj);
5
4
  if (!c) {
6
5
  c = {};
7
6
  _cache.set(obj, c);
8
7
  }
9
- var _;
10
- return (_ = (_c = c)[_key = key]) !== null && _ !== void 0 ? _ : _c[_key] = compute();
8
+ return c[key] ??= compute();
11
9
  }
10
+
11
+ //# sourceMappingURL=getSchemaCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/schema/getSchemaCache.ts"],"sourcesContent":["import type { JsonSchemaDef } from '../jsonschema';\nimport type { TypeSchema } from './TypeSchema';\n\ntype SchemaCache = {\n\tjsonschema?: JsonSchemaDef;\n\toptions?: Array<{ value: string; label: string }>;\n};\nconst _cache = new WeakMap<any, SchemaCache>();\n\nexport function getSchemaCache<K extends keyof SchemaCache>(\n\tobj: TypeSchema,\n\tkey: K,\n\tcompute: () => NonNullable<SchemaCache[K]>,\n): NonNullable<SchemaCache[K]> {\n\tlet c = _cache.get(obj);\n\tif (!c) {\n\t\tc = {};\n\t\t_cache.set(obj, c);\n\t}\n\treturn (c[key] ??= compute());\n}\n"],"names":["_cache","WeakMap","getSchemaCache","obj","key","compute","c","get","set"],"mappings":"AAOA,MAAMA,SAAS,IAAIC;AAEnB,OAAO,SAASC,eACfC,GAAe,EACfC,GAAM,EACNC,OAA0C;IAE1C,IAAIC,IAAIN,OAAOO,GAAG,CAACJ;IACnB,IAAI,CAACG,GAAG;QACPA,IAAI,CAAC;QACLN,OAAOQ,GAAG,CAACL,KAAKG;IACjB;IACA,OAAQA,CAAC,CAACF,IAAI,KAAKC;AACpB"}