@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/utils/resolveFeatureOptions.ts"],"sourcesContent":["import { maybeFunction, type MaybeFunction } from '@wener/utils';\n\nexport function resolveFeatureOptions<T>(\n\tvalue: boolean | T | undefined | null,\n\tdefaultValue: MaybeFunction<T>,\n): T | undefined {\n\tif (value === false) {\n\t\treturn undefined;\n\t}\n\tif (value === true || value === undefined || value === null) {\n\t\treturn maybeFunction(defaultValue);\n\t}\n\treturn value;\n}\n"],"names":["maybeFunction","resolveFeatureOptions","value","defaultValue","undefined"],"mappings":"AAAA,SAASA,aAAa,QAA4B,eAAe;AAEjE,OAAO,SAASC,sBACfC,KAAqC,EACrCC,YAA8B;IAE9B,IAAID,UAAU,OAAO;QACpB,OAAOE;IACR;IACA,IAAIF,UAAU,QAAQA,UAAUE,aAAaF,UAAU,MAAM;QAC5D,OAAOF,cAAcG;IACtB;IACA,OAAOD;AACR"}
package/package.json CHANGED
@@ -1,9 +1,15 @@
1
1
  {
2
2
  "name": "@wener/common",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "type": "module",
5
- "description": "",
6
- "author": "",
5
+ "description": "Common utils for console & server",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/wenerme/wener.git",
9
+ "directory": "packages/wener-common"
10
+ },
11
+ "homepage": "https://github.com/wenerme/wener/tree/main/packages/wener-common",
12
+ "author": "wener",
7
13
  "license": "MIT",
8
14
  "exports": {
9
15
  ".": {
@@ -22,6 +28,34 @@
22
28
  "types": "./src/data/index.ts",
23
29
  "default": "./lib/data/index.js"
24
30
  },
31
+ "./dayjs": {
32
+ "types": "./src/dayjs/index.ts",
33
+ "default": "./lib/dayjs/index.js"
34
+ },
35
+ "./decimal": {
36
+ "types": "./src/decimal/index.ts",
37
+ "default": "./lib/decimal/index.js"
38
+ },
39
+ "./fs": {
40
+ "types": "./src/fs/index.ts",
41
+ "default": "./lib/fs/index.js"
42
+ },
43
+ "./fs/orpc": {
44
+ "types": "./src/fs/orpc/index.ts",
45
+ "default": "./lib/fs/orpc/index.js"
46
+ },
47
+ "./fs/orpc/server": {
48
+ "types": "./src/fs/orpc/server/index.ts",
49
+ "default": "./lib/fs/orpc/server/index.js"
50
+ },
51
+ "./fs/s3": {
52
+ "types": "./src/fs/s3/index.ts",
53
+ "default": "./lib/fs/s3/index.js"
54
+ },
55
+ "./fs/server": {
56
+ "types": "./src/fs/server/index.ts",
57
+ "default": "./lib/fs/server/index.js"
58
+ },
25
59
  "./jsonschema": {
26
60
  "types": "./src/jsonschema/index.ts",
27
61
  "default": "./lib/jsonschema/index.js"
@@ -30,6 +64,10 @@
30
64
  "types": "./src/meta/index.ts",
31
65
  "default": "./lib/meta/index.js"
32
66
  },
67
+ "./orpc": {
68
+ "types": "./src/orpc/index.ts",
69
+ "default": "./lib/orpc/index.js"
70
+ },
33
71
  "./password": {
34
72
  "types": "./src/password/index.ts",
35
73
  "default": "./lib/password/index.js"
@@ -38,13 +76,21 @@
38
76
  "types": "./src/resource/index.ts",
39
77
  "default": "./lib/resource/index.js"
40
78
  },
79
+ "./resource/schema": {
80
+ "types": "./src/resource/schema/index.ts",
81
+ "default": "./lib/resource/schema/index.js"
82
+ },
83
+ "./s3": {
84
+ "types": "./src/s3/index.ts",
85
+ "default": "./lib/s3/index.js"
86
+ },
41
87
  "./schema": {
42
88
  "types": "./src/schema/index.ts",
43
89
  "default": "./lib/schema/index.js"
44
90
  },
45
- "./search": {
46
- "types": "./src/search/index.ts",
47
- "default": "./lib/search/index.js"
91
+ "./utils": {
92
+ "types": "./src/utils/index.ts",
93
+ "default": "./lib/utils/index.js"
48
94
  },
49
95
  "./package.json": "./package.json"
50
96
  },
@@ -56,33 +102,44 @@
56
102
  ],
57
103
  "keywords": [],
58
104
  "peerDependencies": {
105
+ "ajv": "*",
59
106
  "zod": "*"
60
107
  },
61
108
  "dependencies": {
62
- "@standard-schema/spec": "^1.0.0",
63
- "@wener/utils": "^1.1.51",
109
+ "@standard-schema/spec": "^1.1.0",
110
+ "@wener/utils": "^1.1.58",
64
111
  "date-fns": "^4.1.0",
65
- "es-toolkit": "^1.37.2",
66
- "std-env": "^3.9.0",
67
- "ts-pattern": "^5.7.0"
112
+ "es-toolkit": "^1.43.0",
113
+ "std-env": "^3.10.0",
114
+ "ts-pattern": "^5.9.0"
68
115
  },
69
116
  "devDependencies": {
70
- "@sinclair/typebox": "^0.34.33",
117
+ "@orpc/client": "^1.13.4",
118
+ "@orpc/contract": "^1.13.4",
119
+ "@orpc/openapi-client": "^1.13.4",
120
+ "@sinclair/typebox": "^0.34.47",
71
121
  "@sinclair/typebox-codegen": "^0.11.1",
72
122
  "@types/argon2-browser": "^1.18.4",
73
- "@types/bcrypt": "^5.0.2",
74
- "ajv": "^8.17.1",
123
+ "@types/bcrypt": "^6.0.0",
124
+ "@types/micromatch": "^4.0.10",
125
+ "@types/mime-types": "^3.0.1",
75
126
  "ajv-formats": "^3.0.1",
76
127
  "ajv-i18n": "^4.2.0",
77
128
  "ajv-keywords": "^5.1.0",
78
- "argon2": "^0.43.0",
129
+ "argon2": "^0.44.0",
79
130
  "argon2-browser": "^1.18.0",
80
- "bcrypt": "^5.1.1",
81
- "bcryptjs": "^3.0.2",
82
- "chalk": "^5.4.1",
131
+ "bcrypt": "^6.0.0",
132
+ "bcryptjs": "^3.0.3",
133
+ "chalk": "^5.6.2",
83
134
  "consola": "^3.4.2",
84
- "dayjs": "^1.11.13",
85
- "zod": "^3.25.63"
135
+ "dayjs": "^1.11.19",
136
+ "decimal.js": "^10.6.0",
137
+ "emittery": "^1.2.0",
138
+ "micromatch": "^4.0.8",
139
+ "mime-types": "^3.0.2",
140
+ "pathe": "^2.0.3",
141
+ "s3mini": "^0.8.1",
142
+ "zod": "^4.3.5"
86
143
  },
87
144
  "scripts": {
88
145
  "test": "echo \"Error: no test specified\" && exit 1"
@@ -0,0 +1 @@
1
+ export { fromQwen3VlBbox2d, toQwen3VlBbox2d } from './utils';
@@ -0,0 +1,36 @@
1
+ // xyxy
2
+ type Bbox2d = [number, number, number, number];
3
+ type Dimensions = { width: number; height: number };
4
+ // x_center, y_center, z_center, x_size, y_size, z_size, roll, pitch, yaw
5
+ type Bbox3d = [number, number, number, number, number, number, number, number, number];
6
+ /**
7
+ * Convert Qwen3V format bbox (0-1000 range) to absolute pixel coordinates
8
+ * @param dimensions Image dimensions {width, height}
9
+ * @param bbox Bbox in Qwen3V format [x1, y1, x2, y2] where each value is 0-1000
10
+ * @returns Absolute pixel coordinates [x1, y1, x2, y2]
11
+ */
12
+ export function fromQwen3VlBbox2d({ width, height }: Dimensions, bbox: Bbox2d): Bbox2d {
13
+ const [x1, y1, x2, y2] = bbox;
14
+ return [
15
+ Math.floor((x1 / 1000) * width),
16
+ Math.floor((y1 / 1000) * height),
17
+ Math.floor((x2 / 1000) * width),
18
+ Math.floor((y2 / 1000) * height),
19
+ ];
20
+ }
21
+
22
+ /**
23
+ * Convert absolute pixel coordinates to Qwen3V format bbox (0-1000 range)
24
+ * @param dimensions Image dimensions {width, height}
25
+ * @param bbox Absolute pixel coordinates [x1, y1, x2, y2]
26
+ * @returns Bbox in Qwen3V format [x1, y1, x2, y2] where each value is 0-1000
27
+ */
28
+ export function toQwen3VlBbox2d({ width, height }: Dimensions, bbox: Bbox2d): Bbox2d {
29
+ const [x1, y1, x2, y2] = bbox;
30
+ return [
31
+ Math.round((x1 / width) * 1000),
32
+ Math.round((y1 / height) * 1000),
33
+ Math.round((x2 / width) * 1000),
34
+ Math.round((y2 / height) * 1000),
35
+ ];
36
+ }
@@ -0,0 +1,30 @@
1
+ import { z } from 'zod';
2
+
3
+ // based on DocLayout-YOLO
4
+
5
+ export const DocLayoutElementType = Object.freeze({
6
+ Title: 'Title',
7
+ PlainText: 'PlainText',
8
+ Abandon: 'Abandon',
9
+ Figure: 'Figure',
10
+ FigureCaption: 'FigureCaption',
11
+ Table: 'Table',
12
+ TableCaption: 'TableCaption',
13
+ TableFootnote: 'TableFootnote',
14
+ IsolateFormula: 'IsolateFormula',
15
+ FormulaCaption: 'FormulaCaption',
16
+ });
17
+ export type DocLayoutElementType = (typeof DocLayoutElementType)[keyof typeof DocLayoutElementType];
18
+
19
+ export const DocLayoutElementTypeSchema = z.union([
20
+ z.literal(DocLayoutElementType.Title).describe('标题'),
21
+ z.literal(DocLayoutElementType.PlainText).describe('纯文本'),
22
+ z.literal(DocLayoutElementType.Abandon).describe('废弃'),
23
+ z.literal(DocLayoutElementType.Figure).describe('图片'),
24
+ z.literal(DocLayoutElementType.FigureCaption).describe('图片说明'),
25
+ z.literal(DocLayoutElementType.Table).describe('表格'),
26
+ z.literal(DocLayoutElementType.TableCaption).describe('表格标题'),
27
+ z.literal(DocLayoutElementType.TableFootnote).describe('表格脚注'),
28
+ z.literal(DocLayoutElementType.IsolateFormula).describe('独立公式'),
29
+ z.literal(DocLayoutElementType.FormulaCaption).describe('公式说明'),
30
+ ]);
@@ -0,0 +1,60 @@
1
+ import { z } from 'zod';
2
+
3
+ export type ImageAnnotation = z.infer<typeof ImageAnnotationSchema>;
4
+ export const ImageAnnotationSchema = z.looseObject({
5
+ id: z.string().optional(),
6
+ title: z.string().trim().optional().describe('标题'),
7
+ description: z.string().trim().optional().describe('描述'),
8
+ type: z.string().trim().optional().describe('类型'),
9
+
10
+ // 内容字段
11
+ text: z.string().optional().describe('文本内容'),
12
+ markdown: z.string().optional().describe('Markdown 内容'),
13
+ csv: z.string().optional().describe('CSV 内容'),
14
+ html: z.string().optional().describe('HTML 内容'),
15
+ data: z.any().optional().describe('任意数据'),
16
+
17
+ // 定位信息
18
+ field: z.string().trim().optional().describe('目标字段'),
19
+ file: z.string().trim().optional().describe('源文件'),
20
+ page: z.coerce.number().int().nonnegative().optional().describe('页码'),
21
+
22
+ // 几何/边界框信息
23
+ bbox: z.array(z.number()).optional().describe('边界框'),
24
+ xywh: z
25
+ .array(z.number())
26
+ .length(4, { error: 'xywh 必须包含4个数字 [x, y, width, height]' })
27
+ .optional()
28
+ .describe('XYWH'),
29
+ xyxy: z.array(z.number()).length(4, { error: 'xyxy 必须包含4个数字 [x1, y1, x2, y2]' }).optional().describe('XYXY'),
30
+ polygon: z.array(z.number().array()).optional().describe('Polygon'),
31
+ x: z.coerce.number().optional().describe('X 坐标'),
32
+ y: z.coerce.number().optional().describe('Y 坐标'),
33
+ w: z.coerce.number().nonnegative().optional().describe('宽度'),
34
+ h: z.coerce.number().nonnegative().optional().describe('高度'),
35
+
36
+ label: z.string().trim().optional().describe('标签'),
37
+ confidence: z.coerce.number().min(0).max(1).optional().describe('置信度'),
38
+ score: z.coerce.number().optional().describe('原始分数'),
39
+
40
+ classes: z
41
+ .array(
42
+ z.object({
43
+ label: z.string().nonempty({ error: '分类标签不能为空' }).describe('分类标签'),
44
+ confidence: z.coerce.number().min(0).max(1).optional().describe('分类置信度 (0-1)'),
45
+ score: z.coerce.number().optional().describe('分类原始分数'),
46
+ }),
47
+ )
48
+ .optional()
49
+ .describe('多分类结果'),
50
+
51
+ // 元数据和标签
52
+ tags: z.array(z.string()).optional().describe('标签'),
53
+ metadata: z.record(z.string(), z.any()).optional().describe('元数据'),
54
+ attributes: z.record(z.string(), z.any()).optional().describe('属性'),
55
+ properties: z.record(z.string(), z.any()).optional().describe('属性'),
56
+
57
+ get annotations(): z.ZodOptional<z.ZodArray<typeof ImageAnnotationSchema>> {
58
+ return z.array(ImageAnnotationSchema).optional().describe('子注释');
59
+ },
60
+ });
@@ -0,0 +1,2 @@
1
+ export { ImageAnnotationSchema, type ImageAnnotation } from './ImageAnnotationSchema';
2
+ export { resolveImageAnnotation, type ResolvedImageAnnotation } from './resolveImageAnnotation';
@@ -0,0 +1,135 @@
1
+ import type { ImageAnnotation } from './ImageAnnotationSchema';
2
+
3
+ export { resolveImageAnnotation };
4
+
5
+ export type ResolvedImageAnnotation = Omit<ImageAnnotation, 'id' | 'annotations' | 'attributes' | 'metadata'> & {
6
+ id: string;
7
+ annotations: ResolvedImageAnnotation[];
8
+ attributes: Record<string, any>;
9
+ metadata: Record<string, any>;
10
+ };
11
+
12
+ function resolveImageAnnotation(input: Partial<ImageAnnotation>): ResolvedImageAnnotation {
13
+ const normalize = (
14
+ input: ImageAnnotation,
15
+ {
16
+ path = [],
17
+ level = 0,
18
+ }: {
19
+ path?: number[];
20
+ level?: number;
21
+ } = {},
22
+ ) => {
23
+ input.id ||= path.join('.') || 'ROOT';
24
+ input.annotations ||= [];
25
+ input.tags ||= [];
26
+ input.attributes ||= {};
27
+ input.metadata ||= {};
28
+
29
+ if (!input.csv && input.html?.includes('<table') && globalThis.DOMParser) {
30
+ const parser = new DOMParser();
31
+ const doc = parser.parseFromString(input.html, 'text/html');
32
+ const table = doc.querySelector('table');
33
+
34
+ if (table) {
35
+ const rows = Array.from(table.querySelectorAll('tr'));
36
+ input.data = rows.map((row) =>
37
+ Array.from(row.querySelectorAll('td')).map((td) => td.textContent?.trim() || ''),
38
+ );
39
+ }
40
+ }
41
+ input.annotations.forEach((v, i) => normalize(v, { path: [...path, i], level: level + 1 }));
42
+
43
+ resolveBBox(input);
44
+
45
+ // can get bbox from annotations
46
+ let first = input.annotations.find((v) => v.xyxy)?.xyxy;
47
+ if (!input.xyxy && first) {
48
+ const xyxy = input.annotations.reduce((acc, v) => {
49
+ if (!v.xyxy) return acc;
50
+ return [
51
+ Math.min(acc[0], v.xyxy[0]),
52
+ Math.min(acc[1], v.xyxy[1]),
53
+ Math.max(acc[2], v.xyxy[2]),
54
+ Math.max(acc[3], v.xyxy[3]),
55
+ ];
56
+ }, first);
57
+ input.xyxy = xyxy;
58
+ input.xywh = xyxy2xywh(xyxy);
59
+ }
60
+ };
61
+
62
+ const out = input as ResolvedImageAnnotation;
63
+ normalize(out);
64
+ // out.annotations.forEach((v) => norm(v));
65
+
66
+ // only merge for root node
67
+
68
+ if (!out.markdown) {
69
+ out.markdown = out.annotations.map((v) => v.markdown).join('\n');
70
+ out.markdown ||= undefined;
71
+ }
72
+ if (!out.text) {
73
+ out.text = out.annotations.map((v) => v.text).join('\n');
74
+ out.text ||= undefined;
75
+ }
76
+ // fallback
77
+ out.text ||= out.markdown;
78
+ out.markdown ||= out.text;
79
+ return out;
80
+ }
81
+
82
+ function xywh2xyxy(input?: number[]) {
83
+ if (!input) return;
84
+ const [x, y, w, h] = input;
85
+ return [x, y, x + w, y + h];
86
+ }
87
+
88
+ function xyxy2xywh(input?: number[]) {
89
+ if (!input) return;
90
+ const [x1, y1, x2, y2] = input;
91
+ return [x1, y1, x2 - x1, y2 - y1];
92
+ }
93
+
94
+ type BBoxObject = {
95
+ xywh: number[];
96
+ xyxy: number[];
97
+ x: number;
98
+ y: number;
99
+ w: number;
100
+ h: number;
101
+ };
102
+
103
+ function resolveBBox(input: {
104
+ xywh?: number[];
105
+ xyxy?: number[];
106
+ x?: number;
107
+ y?: number;
108
+ w?: number;
109
+ h?: number;
110
+ }): BBoxObject | undefined {
111
+ let { x, y, w, h } = input as {
112
+ x: number;
113
+ y: number;
114
+ w: number;
115
+ h: number;
116
+ };
117
+ let isNil = (v: any) => v === undefined || v === null;
118
+ if (isNil(x) && input.xywh?.length) {
119
+ [x, y, w, h] = input.xywh;
120
+ }
121
+ if (isNil(x) && input.xyxy?.length) {
122
+ [x, y, w, h] = xyxy2xywh(input.xyxy)!;
123
+ }
124
+ if (!isNil(x)) {
125
+ input.xywh ||= [x, y, w, h];
126
+ input.xyxy ||= xywh2xyxy(input.xywh);
127
+ input.x = x;
128
+ input.y = y;
129
+ input.w = w;
130
+ input.h = h;
131
+
132
+ return input as BBoxObject;
133
+ }
134
+ return;
135
+ }
@@ -0,0 +1,18 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ChineseResidentIdNo } from './index';
3
+
4
+ describe('ChineseResidentIdNo', () => {
5
+ it('should parse', () => {
6
+ for (const a of ['11010519491231002X']) {
7
+ let out = ChineseResidentIdNo.parse(a);
8
+ expect(out).toBeTruthy();
9
+ expect(ChineseResidentIdNo.format(out!)).toBe(a);
10
+ expect(out).toMatchSnapshot();
11
+ }
12
+ });
13
+ it('should format with partial', () => {
14
+ expect(ChineseResidentIdNo.format({ addressCode: '110105', birthDate: new Date('1949-12-31'), sequence: 2 })).toBe(
15
+ '11010519491231002X',
16
+ );
17
+ });
18
+ });
@@ -0,0 +1,74 @@
1
+ import { z } from 'zod/v4';
2
+ import { SexType, SexTypeSchema } from '../foundation/schema';
3
+ import { Mod11 } from './Mod11';
4
+
5
+ export const ChineseResidentIdNoRegex =
6
+ /^(?<division>[1-9]\d{5})(?<year>(18|19|20)\d{2})(?<month>0[1-9]|1[0-2])(?<day>0[1-9]|[12]\d|3[01])(?<sequence>\d{3})(?<checkDigit>[0-9Xx])$/;
7
+
8
+ export type ParsedChineseResidentIdNo = z.infer<typeof ParsedChineseResidentIdNoSchema>;
9
+ export const ParsedChineseResidentIdNoSchema = z
10
+ .object({
11
+ raw: z.string().regex(ChineseResidentIdNoRegex, '无效的18位身份证号码格式').describe('身份证号码'),
12
+ addressCode: z.string().length(6).describe('地址码 '),
13
+ birthDate: z.iso.date().describe('出生日期'),
14
+ sequence: z.int().max(999).min(0).describe('顺序码'),
15
+ checkDigit: z.int().min(0).max(10).describe('校验码'),
16
+ sex: SexTypeSchema.describe('性别'),
17
+ age: z.number().optional(),
18
+ valid: z.boolean().optional().describe('是否有效'),
19
+ })
20
+ .describe('居民身份证号码解析内容');
21
+
22
+ export function parseChineseResidentIdNo(idNo: string): ParsedChineseResidentIdNo | undefined {
23
+ const reg = ChineseResidentIdNoRegex;
24
+ const match = idNo.match(reg);
25
+ if (!match || !match.groups) {
26
+ return undefined;
27
+ }
28
+ const { division, year, month, day, sequence, checkDigit } = match.groups;
29
+ let seq = parseInt(sequence, 10);
30
+ return {
31
+ raw: idNo,
32
+ addressCode: division,
33
+ birthDate: `${year}-${month}-${day}`,
34
+ sequence: seq,
35
+ checkDigit: checkDigit.toUpperCase() === 'X' ? 10 : parseInt(checkDigit),
36
+ sex: seq % 2 === 0 ? SexType.Male : SexType.Female,
37
+ age: new Date().getFullYear() - parseInt(year, 10),
38
+ valid: Mod11.validate(idNo),
39
+ };
40
+ }
41
+
42
+ export function formatChineseResidentIdNo({
43
+ addressCode,
44
+ birthDate,
45
+ sequence,
46
+ checkDigit,
47
+ }: {
48
+ addressCode: string;
49
+ birthDate: string | Date;
50
+ sequence: number | string;
51
+ checkDigit?: string | number;
52
+ }): string {
53
+ const date =
54
+ typeof birthDate === 'string'
55
+ ? birthDate.replace(/-/g, '')
56
+ : `${birthDate.getFullYear()}${String(birthDate.getMonth() + 1).padStart(2, '0')}${String(birthDate.getDate()).padStart(2, '0')}`;
57
+ const seq = String(sequence).padStart(3, '0');
58
+ const major = `${addressCode}${date}${seq}`;
59
+ const check =
60
+ typeof checkDigit === 'number'
61
+ ? checkDigit === 10
62
+ ? 'X'
63
+ : String(checkDigit)
64
+ : checkDigit?.toUpperCase() || Mod11.compute(major);
65
+ return `${major}${check}`;
66
+ }
67
+
68
+ export namespace ChineseResidentIdNo {
69
+ export const regex = ChineseResidentIdNoRegex;
70
+ export const parse = parseChineseResidentIdNo;
71
+ export const format = formatChineseResidentIdNo;
72
+ export type Result = ParsedChineseResidentIdNo;
73
+ export const ResultSchema = ParsedChineseResidentIdNoSchema;
74
+ }
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { DivisionCode } from './DivisionCode';
2
+ import { DivisionCode } from './index';
3
3
 
4
4
  describe('DivisionCode', () => {
5
5
  it('should parse', () => {
@@ -7,27 +7,17 @@ describe('DivisionCode', () => {
7
7
  [
8
8
  '441900003001',
9
9
  {
10
- province: '44',
11
- city: '19',
12
- county: '00',
13
- town: '003',
14
- village: '001',
15
10
  codes: ['44', '19', '00', '003', '001'],
16
11
  },
17
12
  ],
18
13
  [
19
14
  441900003001,
20
15
  {
21
- province: '44',
22
- city: '19',
23
- county: '00',
24
- town: '003',
25
- village: '001',
26
16
  codes: ['44', '19', '00', '003', '001'],
27
17
  },
28
18
  ],
29
- [441900, { province: '44', city: '19', county: '00' }],
30
- ['31', { province: '31' }],
19
+ [441900, { codes: ['44', '19', '00'] }],
20
+ ['31', { codes: ['31'] }],
31
21
  ['4', undefined],
32
22
  ['', undefined],
33
23
  [null, undefined],