@wener/common 2.0.2 → 2.0.5

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 (410) 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 +22 -15
  14. package/lib/cn/ChineseResidentIdNo.js.map +1 -0
  15. package/lib/cn/ChineseResidentIdNo.test.js +1 -1
  16. package/lib/cn/DivisionCode.js +30 -25
  17. package/lib/cn/DivisionCode.js.map +1 -0
  18. package/lib/cn/DivisionCode.test.js +1 -1
  19. package/lib/cn/Mod11.js +38 -81
  20. package/lib/cn/Mod11.js.map +1 -0
  21. package/lib/cn/Mod31.js +41 -90
  22. package/lib/cn/Mod31.js.map +1 -0
  23. package/lib/cn/UnifiedSocialCreditCode.js +43 -34
  24. package/lib/cn/UnifiedSocialCreditCode.js.map +1 -0
  25. package/lib/cn/UnifiedSocialCreditCode.test.js +1 -1
  26. package/lib/cn/formatChineseAmount.js +77 -0
  27. package/lib/cn/formatChineseAmount.js.map +1 -0
  28. package/lib/cn/index.js +7 -1
  29. package/lib/cn/index.js.map +1 -0
  30. package/lib/cn/parseChineseNumber.js +94 -0
  31. package/lib/cn/parseChineseNumber.js.map +1 -0
  32. package/lib/cn/parseChineseNumber.test.js +278 -0
  33. package/lib/cn/pinyin/cartesianProduct.js +22 -0
  34. package/lib/cn/pinyin/cartesianProduct.js.map +1 -0
  35. package/lib/cn/pinyin/cartesianProduct.test.js +179 -0
  36. package/lib/cn/pinyin/data.json +23573 -0
  37. package/lib/cn/pinyin/loader.js +14 -0
  38. package/lib/cn/pinyin/loader.js.map +1 -0
  39. package/lib/cn/pinyin/preload.js +3 -0
  40. package/lib/cn/pinyin/preload.js.map +1 -0
  41. package/lib/cn/pinyin/toPinyin.test.js +167 -0
  42. package/lib/cn/pinyin/toPinyinPure.js +33 -0
  43. package/lib/cn/pinyin/toPinyinPure.js.map +1 -0
  44. package/lib/cn/pinyin/transform.js +14 -0
  45. package/lib/cn/pinyin/transform.js.map +1 -0
  46. package/lib/cn/types.d.js +2 -0
  47. package/lib/cn/types.d.js.map +1 -0
  48. package/lib/consola/createStandardConsolaReporter.js +6 -6
  49. package/lib/consola/createStandardConsolaReporter.js.map +1 -0
  50. package/lib/consola/formatLogObject.js +66 -146
  51. package/lib/consola/formatLogObject.js.map +1 -0
  52. package/lib/consola/formatLogObject.test.js +184 -0
  53. package/lib/consola/index.js +1 -0
  54. package/lib/consola/index.js.map +1 -0
  55. package/lib/data/formatSort.js +6 -5
  56. package/lib/data/formatSort.js.map +1 -0
  57. package/lib/data/index.js +1 -0
  58. package/lib/data/index.js.map +1 -0
  59. package/lib/data/maybeNumber.js +6 -8
  60. package/lib/data/maybeNumber.js.map +1 -0
  61. package/lib/data/parseSort.js +22 -28
  62. package/lib/data/parseSort.js.map +1 -0
  63. package/lib/data/resolvePagination.js +13 -17
  64. package/lib/data/resolvePagination.js.map +1 -0
  65. package/lib/data/types.d.js +2 -0
  66. package/lib/data/types.d.js.map +1 -0
  67. package/lib/dayjs/dayjs.js +21 -19
  68. package/lib/dayjs/dayjs.js.map +1 -0
  69. package/lib/dayjs/formatDuration.js +15 -14
  70. package/lib/dayjs/formatDuration.js.map +1 -0
  71. package/lib/dayjs/index.js +2 -0
  72. package/lib/dayjs/index.js.map +1 -0
  73. package/lib/dayjs/parseDuration.js +5 -8
  74. package/lib/dayjs/parseDuration.js.map +1 -0
  75. package/lib/dayjs/parseRelativeTime.js +90 -0
  76. package/lib/dayjs/parseRelativeTime.js.map +1 -0
  77. package/lib/dayjs/parseRelativeTime.test.js +247 -0
  78. package/lib/dayjs/resolveRelativeTime.js +87 -0
  79. package/lib/dayjs/resolveRelativeTime.js.map +1 -0
  80. package/lib/dayjs/resolveRelativeTime.test.js +310 -0
  81. package/lib/decimal/index.js +1 -0
  82. package/lib/decimal/index.js.map +1 -0
  83. package/lib/decimal/parseDecimal.js +3 -1
  84. package/lib/decimal/parseDecimal.js.map +1 -0
  85. package/lib/drain3/Drain.js +356 -0
  86. package/lib/drain3/Drain.js.map +1 -0
  87. package/lib/drain3/LogCluster.js +38 -0
  88. package/lib/drain3/LogCluster.js.map +1 -0
  89. package/lib/drain3/Node.js +39 -0
  90. package/lib/drain3/Node.js.map +1 -0
  91. package/lib/drain3/TemplateMiner.js +204 -0
  92. package/lib/drain3/TemplateMiner.js.map +1 -0
  93. package/lib/drain3/index.js +31 -0
  94. package/lib/drain3/index.js.map +1 -0
  95. package/lib/drain3/persistence/FilePersistence.js +24 -0
  96. package/lib/drain3/persistence/FilePersistence.js.map +1 -0
  97. package/lib/drain3/persistence/MemoryPersistence.js +18 -0
  98. package/lib/drain3/persistence/MemoryPersistence.js.map +1 -0
  99. package/lib/drain3/persistence/PersistenceHandler.js +5 -0
  100. package/lib/drain3/persistence/PersistenceHandler.js.map +1 -0
  101. package/lib/drain3/types.js +7 -0
  102. package/lib/drain3/types.js.map +1 -0
  103. package/lib/emittery/emitter.js +10 -0
  104. package/lib/emittery/emitter.js.map +1 -0
  105. package/lib/emittery/index.js +2 -0
  106. package/lib/emittery/index.js.map +1 -0
  107. package/lib/foundation/schema/SexType.js +5 -3
  108. package/lib/foundation/schema/SexType.js.map +1 -0
  109. package/lib/foundation/schema/index.js +1 -0
  110. package/lib/foundation/schema/index.js.map +1 -0
  111. package/lib/foundation/schema/parseSexType.js +1 -0
  112. package/lib/foundation/schema/parseSexType.js.map +1 -0
  113. package/lib/foundation/schema/types.js +4 -2
  114. package/lib/foundation/schema/types.js.map +1 -0
  115. package/lib/fs/FileSystemError.js +23 -0
  116. package/lib/fs/FileSystemError.js.map +1 -0
  117. package/lib/fs/IFileSystem.d.js +3 -0
  118. package/lib/fs/IFileSystem.d.js.map +1 -0
  119. package/lib/fs/MemoryFileSystem.test.js +188 -0
  120. package/lib/fs/createBrowserFileSystem.js +250 -0
  121. package/lib/fs/createBrowserFileSystem.js.map +1 -0
  122. package/lib/fs/createMemoryFileSystem.js +517 -0
  123. package/lib/fs/createMemoryFileSystem.js.map +1 -0
  124. package/lib/fs/createSandboxFileSystem.js +108 -0
  125. package/lib/fs/createSandboxFileSystem.js.map +1 -0
  126. package/lib/fs/createWebDavFileSystem.js +154 -0
  127. package/lib/fs/createWebDavFileSystem.js.map +1 -0
  128. package/lib/fs/createWebFileSystem.js +225 -0
  129. package/lib/fs/createWebFileSystem.js.map +1 -0
  130. package/lib/fs/findMimeType.js +17 -0
  131. package/lib/fs/findMimeType.js.map +1 -0
  132. package/lib/fs/index.js +8 -0
  133. package/lib/fs/index.js.map +1 -0
  134. package/lib/fs/minio/createMinioFileSystem.js +974 -0
  135. package/lib/fs/minio/createMinioFileSystem.js.map +1 -0
  136. package/lib/fs/minio/index.js +2 -0
  137. package/lib/fs/minio/index.js.map +1 -0
  138. package/lib/fs/orpc/FileSystemContract.js +93 -0
  139. package/lib/fs/orpc/FileSystemContract.js.map +1 -0
  140. package/lib/fs/orpc/createContractClientFileSystem.js +93 -0
  141. package/lib/fs/orpc/createContractClientFileSystem.js.map +1 -0
  142. package/lib/fs/orpc/index.js +3 -0
  143. package/lib/fs/orpc/index.js.map +1 -0
  144. package/lib/fs/orpc/server/createFileSystemContractImpl.js +63 -0
  145. package/lib/fs/orpc/server/createFileSystemContractImpl.js.map +1 -0
  146. package/lib/fs/orpc/server/index.js +2 -0
  147. package/lib/fs/orpc/server/index.js.map +1 -0
  148. package/lib/fs/s3/createS3MiniFileSystem.js +753 -0
  149. package/lib/fs/s3/createS3MiniFileSystem.js.map +1 -0
  150. package/lib/fs/s3/index.js +2 -0
  151. package/lib/fs/s3/index.js.map +1 -0
  152. package/lib/fs/s3/s3mini.test.js +584 -0
  153. package/lib/fs/scandir.js +59 -0
  154. package/lib/fs/scandir.js.map +1 -0
  155. package/lib/fs/server/createDatabaseFileSystem.js +750 -0
  156. package/lib/fs/server/createDatabaseFileSystem.js.map +1 -0
  157. package/lib/fs/server/createNodeFileSystem.js +426 -0
  158. package/lib/fs/server/createNodeFileSystem.js.map +1 -0
  159. package/lib/fs/server/dbfs.test.js +221 -0
  160. package/lib/fs/server/index.js +2 -0
  161. package/lib/fs/server/index.js.map +1 -0
  162. package/lib/fs/server/loadTestDatabase.js +127 -0
  163. package/lib/fs/server/loadTestDatabase.js.map +1 -0
  164. package/lib/fs/tests/runFileSystemTest.js +319 -0
  165. package/lib/fs/tests/runFileSystemTest.js.map +1 -0
  166. package/lib/fs/types.js +27 -0
  167. package/lib/fs/types.js.map +1 -0
  168. package/lib/fs/utils/getFileUrl.js +35 -0
  169. package/lib/fs/utils/getFileUrl.js.map +1 -0
  170. package/lib/fs/utils.js +22 -0
  171. package/lib/fs/utils.js.map +1 -0
  172. package/lib/fs/webdav/index.js +2 -0
  173. package/lib/fs/webdav/index.js.map +1 -0
  174. package/lib/index.js +1 -0
  175. package/lib/index.js.map +1 -0
  176. package/lib/jsonschema/JsonSchema.js +146 -172
  177. package/lib/jsonschema/JsonSchema.js.map +1 -0
  178. package/lib/jsonschema/forEachJsonSchema.js +44 -0
  179. package/lib/jsonschema/forEachJsonSchema.js.map +1 -0
  180. package/lib/jsonschema/index.js +2 -0
  181. package/lib/jsonschema/index.js.map +1 -0
  182. package/lib/jsonschema/types.d.js +2 -0
  183. package/lib/jsonschema/types.d.js.map +1 -0
  184. package/lib/meta/defineFileType.js +20 -103
  185. package/lib/meta/defineFileType.js.map +1 -0
  186. package/lib/meta/defineInit.js +31 -250
  187. package/lib/meta/defineInit.js.map +1 -0
  188. package/lib/meta/defineMetadata.js +24 -140
  189. package/lib/meta/defineMetadata.js.map +1 -0
  190. package/lib/meta/index.js +1 -0
  191. package/lib/meta/index.js.map +1 -0
  192. package/lib/orpc/createOpenApiContractClient.js +27 -0
  193. package/lib/orpc/createOpenApiContractClient.js.map +1 -0
  194. package/lib/orpc/createRpcContractClient.js +34 -0
  195. package/lib/orpc/createRpcContractClient.js.map +1 -0
  196. package/lib/orpc/index.js +3 -0
  197. package/lib/orpc/index.js.map +1 -0
  198. package/lib/orpc/resolveLinkPlugins.js +28 -0
  199. package/lib/orpc/resolveLinkPlugins.js.map +1 -0
  200. package/lib/password/PHC.js +63 -87
  201. package/lib/password/PHC.js.map +1 -0
  202. package/lib/password/PHC.test.js +11 -3
  203. package/lib/password/Password.js +29 -294
  204. package/lib/password/Password.js.map +1 -0
  205. package/lib/password/Password.test.js +35 -22
  206. package/lib/password/createArgon2PasswordAlgorithm.js +35 -191
  207. package/lib/password/createArgon2PasswordAlgorithm.js.map +1 -0
  208. package/lib/password/createBase64PasswordAlgorithm.js +8 -141
  209. package/lib/password/createBase64PasswordAlgorithm.js.map +1 -0
  210. package/lib/password/createBcryptPasswordAlgorithm.js +13 -168
  211. package/lib/password/createBcryptPasswordAlgorithm.js.map +1 -0
  212. package/lib/password/createPBKDF2PasswordAlgorithm.js +46 -228
  213. package/lib/password/createPBKDF2PasswordAlgorithm.js.map +1 -0
  214. package/lib/password/createScryptPasswordAlgorithm.js +55 -211
  215. package/lib/password/createScryptPasswordAlgorithm.js.map +1 -0
  216. package/lib/password/index.js +1 -0
  217. package/lib/password/index.js.map +1 -0
  218. package/lib/password/server/index.js +1 -0
  219. package/lib/password/server/index.js.map +1 -0
  220. package/lib/resource/Identifiable.js +2 -0
  221. package/lib/resource/Identifiable.js.map +1 -0
  222. package/lib/resource/ListQuery.js +21 -93
  223. package/lib/resource/ListQuery.js.map +1 -0
  224. package/lib/resource/getTitleOfResource.js +3 -5
  225. package/lib/resource/getTitleOfResource.js.map +1 -0
  226. package/lib/resource/index.js +1 -0
  227. package/lib/resource/index.js.map +1 -0
  228. package/lib/resource/schema/AnyResourceSchema.js +2 -1
  229. package/lib/resource/schema/AnyResourceSchema.js.map +1 -0
  230. package/lib/resource/schema/BaseResourceSchema.js +2 -1
  231. package/lib/resource/schema/BaseResourceSchema.js.map +1 -0
  232. package/lib/resource/schema/ResourceActionType.js +6 -4
  233. package/lib/resource/schema/ResourceActionType.js.map +1 -0
  234. package/lib/resource/schema/ResourceStatus.js +5 -3
  235. package/lib/resource/schema/ResourceStatus.js.map +1 -0
  236. package/lib/resource/schema/ResourceType.js +5 -3
  237. package/lib/resource/schema/ResourceType.js.map +1 -0
  238. package/lib/resource/schema/index.js +1 -0
  239. package/lib/resource/schema/index.js.map +1 -0
  240. package/lib/resource/schema/types.js +16 -20
  241. package/lib/resource/schema/types.js.map +1 -0
  242. package/lib/s3/formatS3Url.js +65 -0
  243. package/lib/s3/formatS3Url.js.map +1 -0
  244. package/lib/s3/formatS3Url.test.js +262 -0
  245. package/lib/s3/index.js +3 -0
  246. package/lib/s3/index.js.map +1 -0
  247. package/lib/s3/parseS3Url.js +65 -0
  248. package/lib/s3/parseS3Url.js.map +1 -0
  249. package/lib/s3/parseS3Url.test.js +270 -0
  250. package/lib/schema/SchemaRegistry.js +38 -38
  251. package/lib/schema/SchemaRegistry.js.map +1 -0
  252. package/lib/schema/TypeSchema.d.js +2 -0
  253. package/lib/schema/TypeSchema.d.js.map +1 -0
  254. package/lib/schema/createSchemaData.js +26 -125
  255. package/lib/schema/createSchemaData.js.map +1 -0
  256. package/lib/schema/findJsonSchemaByPath.js +13 -36
  257. package/lib/schema/findJsonSchemaByPath.js.map +1 -0
  258. package/lib/schema/formatZodError.js +138 -0
  259. package/lib/schema/formatZodError.js.map +1 -0
  260. package/lib/schema/formatZodError.test.js +196 -0
  261. package/lib/schema/getSchemaCache.js +5 -5
  262. package/lib/schema/getSchemaCache.js.map +1 -0
  263. package/lib/schema/getSchemaOptions.js +8 -11
  264. package/lib/schema/getSchemaOptions.js.map +1 -0
  265. package/lib/schema/index.js +2 -1
  266. package/lib/schema/index.js.map +1 -0
  267. package/lib/schema/toJsonSchema.js +50 -293
  268. package/lib/schema/toJsonSchema.js.map +1 -0
  269. package/lib/schema/validate.js +34 -46
  270. package/lib/schema/validate.js.map +1 -0
  271. package/lib/tools/generateSchema.js +39 -197
  272. package/lib/tools/generateSchema.js.map +1 -0
  273. package/lib/tools/renderJsonSchemaToMarkdownDoc.js +55 -143
  274. package/lib/tools/renderJsonSchemaToMarkdownDoc.js.map +1 -0
  275. package/lib/utils/buildBaseUrl.js +13 -0
  276. package/lib/utils/buildBaseUrl.js.map +1 -0
  277. package/lib/utils/buildRedactorFormSchema.js +59 -0
  278. package/lib/utils/buildRedactorFormSchema.js.map +1 -0
  279. package/lib/utils/getEstimateProcessTime.js +12 -11
  280. package/lib/utils/getEstimateProcessTime.js.map +1 -0
  281. package/lib/utils/index.js +3 -0
  282. package/lib/utils/index.js.map +1 -0
  283. package/lib/utils/resolveFeatureOptions.js +12 -0
  284. package/lib/utils/resolveFeatureOptions.js.map +1 -0
  285. package/package.json +80 -13
  286. package/src/ai/qwen3vl/index.ts +1 -0
  287. package/src/ai/qwen3vl/utils.ts +36 -0
  288. package/src/ai/vision/DocLayoutElementTypeSchema.ts +30 -0
  289. package/src/ai/vision/ImageAnnotationSchema.ts +60 -0
  290. package/src/ai/vision/index.ts +2 -0
  291. package/src/ai/vision/resolveImageAnnotation.ts +135 -0
  292. package/src/cn/ChineseResidentIdNo.test.ts +1 -1
  293. package/src/cn/ChineseResidentIdNo.ts +9 -1
  294. package/src/cn/DivisionCode.test.ts +1 -1
  295. package/src/cn/DivisionCode.ts +8 -0
  296. package/src/cn/Mod11.ts +1 -1
  297. package/src/cn/UnifiedSocialCreditCode.test.ts +1 -1
  298. package/src/cn/UnifiedSocialCreditCode.ts +15 -0
  299. package/src/cn/__snapshots__/ChineseResidentIdNo.test.ts.snap +1 -1
  300. package/src/cn/formatChineseAmount.ts +61 -0
  301. package/src/cn/index.ts +7 -1
  302. package/src/cn/parseChineseNumber.test.ts +159 -0
  303. package/src/cn/parseChineseNumber.ts +97 -0
  304. package/src/cn/pinyin/cartesianProduct.test.ts +64 -0
  305. package/src/cn/pinyin/cartesianProduct.ts +24 -0
  306. package/src/cn/pinyin/data.json +23573 -0
  307. package/src/cn/pinyin/loader.ts +12 -0
  308. package/src/cn/pinyin/preload.ts +3 -0
  309. package/src/cn/pinyin/toPinyin.test.ts +12 -0
  310. package/src/cn/pinyin/toPinyinPure.ts +43 -0
  311. package/src/cn/pinyin/transform.ts +12 -0
  312. package/src/consola/formatLogObject.test.ts +27 -0
  313. package/src/consola/formatLogObject.ts +40 -12
  314. package/src/data/maybeNumber.ts +1 -1
  315. package/src/data/parseSort.test.ts +0 -1
  316. package/src/data/types.d.ts +2 -2
  317. package/src/dayjs/dayjs.ts +18 -18
  318. package/src/dayjs/formatDuration.ts +2 -2
  319. package/src/dayjs/index.ts +3 -1
  320. package/src/dayjs/parseRelativeTime.test.ts +185 -0
  321. package/src/dayjs/parseRelativeTime.ts +115 -0
  322. package/src/dayjs/resolveRelativeTime.test.ts +357 -0
  323. package/src/dayjs/resolveRelativeTime.ts +164 -0
  324. package/src/drain3/Drain.test.ts +378 -0
  325. package/src/drain3/Drain.ts +394 -0
  326. package/src/drain3/LogCluster.ts +46 -0
  327. package/src/drain3/Node.ts +53 -0
  328. package/src/drain3/TemplateMiner.ts +246 -0
  329. package/src/drain3/index.ts +36 -0
  330. package/src/drain3/persistence/FilePersistence.ts +24 -0
  331. package/src/drain3/persistence/MemoryPersistence.ts +23 -0
  332. package/src/drain3/persistence/PersistenceHandler.ts +19 -0
  333. package/src/drain3/types.ts +75 -0
  334. package/src/emittery/emitter.ts +9 -0
  335. package/src/emittery/index.ts +1 -0
  336. package/src/fs/FileSystemError.ts +26 -0
  337. package/src/fs/IFileSystem.d.ts +101 -0
  338. package/src/fs/MemoryFileSystem.test.ts +37 -0
  339. package/src/fs/createBrowserFileSystem.ts +293 -0
  340. package/src/fs/createMemoryFileSystem.ts +600 -0
  341. package/src/fs/createSandboxFileSystem.ts +136 -0
  342. package/src/fs/createWebDavFileSystem.ts +190 -0
  343. package/src/fs/createWebFileSystem.ts +242 -0
  344. package/src/fs/findMimeType.ts +20 -0
  345. package/src/fs/index.ts +8 -0
  346. package/src/fs/minio/createMinioFileSystem.ts +1148 -0
  347. package/src/fs/minio/index.ts +1 -0
  348. package/src/fs/orpc/FileSystemContract.ts +92 -0
  349. package/src/fs/orpc/createContractClientFileSystem.ts +115 -0
  350. package/src/fs/orpc/index.ts +2 -0
  351. package/src/fs/orpc/server/createFileSystemContractImpl.ts +64 -0
  352. package/src/fs/orpc/server/index.ts +1 -0
  353. package/src/fs/s3/createS3MiniFileSystem.ts +871 -0
  354. package/src/fs/s3/index.ts +1 -0
  355. package/src/fs/s3/s3fs.test.ts +441 -0
  356. package/src/fs/s3/s3mini.test.ts +264 -0
  357. package/src/fs/scandir.ts +75 -0
  358. package/src/fs/server/createDatabaseFileSystem.ts +668 -0
  359. package/src/fs/server/createNodeFileSystem.ts +518 -0
  360. package/src/fs/server/dbfs.test.ts +48 -0
  361. package/src/fs/server/index.ts +1 -0
  362. package/src/fs/server/loadTestDatabase.ts +131 -0
  363. package/src/fs/tests/runFileSystemTest.ts +289 -0
  364. package/src/fs/types.ts +29 -0
  365. package/src/fs/utils/getFileUrl.ts +44 -0
  366. package/src/fs/utils.ts +23 -0
  367. package/src/fs/webdav/index.ts +1 -0
  368. package/src/jsonschema/JsonSchema.ts +118 -110
  369. package/src/jsonschema/forEachJsonSchema.ts +50 -0
  370. package/src/jsonschema/index.ts +1 -0
  371. package/src/jsonschema/types.d.ts +1 -1
  372. package/src/meta/defineMetadata.ts +1 -1
  373. package/src/orpc/createOpenApiContractClient.ts +52 -0
  374. package/src/orpc/createRpcContractClient.ts +50 -0
  375. package/src/orpc/index.ts +2 -0
  376. package/src/orpc/resolveLinkPlugins.ts +29 -0
  377. package/src/password/PHC.ts +6 -6
  378. package/src/password/Password.test.ts +1 -1
  379. package/src/password/createArgon2PasswordAlgorithm.ts +1 -1
  380. package/src/password/createBase64PasswordAlgorithm.ts +2 -2
  381. package/src/password/createBcryptPasswordAlgorithm.ts +4 -2
  382. package/src/password/createPBKDF2PasswordAlgorithm.ts +4 -4
  383. package/src/password/createScryptPasswordAlgorithm.ts +4 -4
  384. package/src/resource/ListQuery.ts +4 -1
  385. package/src/resource/index.ts +2 -2
  386. package/src/resource/schema/AnyResourceSchema.ts +16 -2
  387. package/src/s3/formatS3Url.test.ts +254 -0
  388. package/src/s3/formatS3Url.ts +84 -0
  389. package/src/s3/index.ts +2 -0
  390. package/src/s3/parseS3Url.test.ts +258 -0
  391. package/src/s3/parseS3Url.ts +88 -0
  392. package/src/schema/SchemaRegistry.ts +35 -33
  393. package/src/schema/TypeSchema.d.ts +6 -6
  394. package/src/schema/createSchemaData.ts +4 -4
  395. package/src/schema/findJsonSchemaByPath.ts +4 -4
  396. package/src/schema/formatZodError.test.ts +197 -0
  397. package/src/schema/formatZodError.ts +139 -0
  398. package/src/schema/getSchemaOptions.ts +2 -2
  399. package/src/schema/index.ts +1 -1
  400. package/src/schema/toJsonSchema.ts +6 -6
  401. package/src/schema/validate.ts +1 -1
  402. package/src/utils/buildBaseUrl.ts +12 -0
  403. package/src/utils/buildRedactorFormSchema.ts +85 -0
  404. package/src/utils/index.ts +4 -0
  405. package/src/utils/resolveFeatureOptions.ts +14 -0
  406. package/src/cn/ChineseResidentIdNo.mod.ts +0 -7
  407. package/src/cn/DivisionCode.mod.ts +0 -7
  408. package/src/cn/UnifiedSocialCreditCode.mod.ts +0 -7
  409. package/src/cn/mod.ts +0 -3
  410. package/src/schema/SchemaRegistry.mod.ts +0 -1
package/lib/cn/Mod11.js CHANGED
@@ -1,86 +1,43 @@
1
1
  /**
2
2
  * ISO 7064:1983, MOD 11-2.
3
- */ function _class_call_check(instance, Constructor) {
4
- if (!(instance instanceof Constructor)) {
5
- throw new TypeError("Cannot call a class as a function");
3
+ */ export class Mod11Checksum {
4
+ weights = [
5
+ 7,
6
+ 9,
7
+ 10,
8
+ 5,
9
+ 8,
10
+ 4,
11
+ 2,
12
+ 1,
13
+ 6,
14
+ 3,
15
+ 7,
16
+ 9,
17
+ 10,
18
+ 5,
19
+ 8,
20
+ 4,
21
+ 2,
22
+ 1
23
+ ];
24
+ validate(s) {
25
+ return s.at(-1) === this.compute(s.slice(0, s.length - 1));
6
26
  }
7
- }
8
- function _defineProperties(target, props) {
9
- for(var i = 0; i < props.length; i++){
10
- var descriptor = props[i];
11
- descriptor.enumerable = descriptor.enumerable || false;
12
- descriptor.configurable = true;
13
- if ("value" in descriptor) descriptor.writable = true;
14
- Object.defineProperty(target, descriptor.key, descriptor);
15
- }
16
- }
17
- function _create_class(Constructor, protoProps, staticProps) {
18
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
19
- if (staticProps) _defineProperties(Constructor, staticProps);
20
- return Constructor;
21
- }
22
- function _define_property(obj, key, value) {
23
- if (key in obj) {
24
- Object.defineProperty(obj, key, {
25
- value: value,
26
- enumerable: true,
27
- configurable: true,
28
- writable: true
29
- });
30
- } else {
31
- obj[key] = value;
27
+ compute(s) {
28
+ const { weights } = this;
29
+ let sum = 0;
30
+ for(let i = 0; i < s.length; i++){
31
+ sum += parseInt(s[i], 10) * weights[i];
32
+ }
33
+ const num = (12 - sum % 11) % 11;
34
+ if (num < 10) {
35
+ return num.toString();
36
+ } else {
37
+ return 'X';
38
+ }
32
39
  }
33
- return obj;
34
40
  }
35
- export var Mod11Checksum = /*#__PURE__*/ function() {
36
- "use strict";
37
- function Mod11Checksum() {
38
- _class_call_check(this, Mod11Checksum);
39
- _define_property(this, "weights", [
40
- 7,
41
- 9,
42
- 10,
43
- 5,
44
- 8,
45
- 4,
46
- 2,
47
- 1,
48
- 6,
49
- 3,
50
- 7,
51
- 9,
52
- 10,
53
- 5,
54
- 8,
55
- 4,
56
- 2,
57
- 1
58
- ]);
59
- }
60
- _create_class(Mod11Checksum, [
61
- {
62
- key: "validate",
63
- value: function validate(s) {
64
- return s.at(-1) === this.compute(s.slice(0, s.length - 1));
65
- }
66
- },
67
- {
68
- key: "compute",
69
- value: function compute(s) {
70
- var weights = this.weights;
71
- var sum = 0;
72
- for(var i = 0; i < s.length; i++){
73
- sum += parseInt(s[i]) * weights[i];
74
- }
75
- var num = (12 - sum % 11) % 11;
76
- if (num < 10) {
77
- return num.toString();
78
- } else {
79
- return 'X';
80
- }
81
- }
82
- }
83
- ]);
84
- return Mod11Checksum;
85
- }();
86
- export var Mod11 = new Mod11Checksum();
41
+ export const Mod11 = new Mod11Checksum();
42
+
43
+ //# sourceMappingURL=Mod11.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cn/Mod11.ts"],"sourcesContent":["/**\n * ISO 7064:1983, MOD 11-2.\n */\nexport class Mod11Checksum {\n\tprotected weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];\n\n\tvalidate(s: string) {\n\t\treturn s.at(-1) === this.compute(s.slice(0, s.length - 1));\n\t}\n\n\tcompute(s: string) {\n\t\tconst { weights } = this;\n\t\tlet sum = 0;\n\t\tfor (let i = 0; i < s.length; i++) {\n\t\t\tsum += parseInt(s[i], 10) * weights[i];\n\t\t}\n\t\tconst num = (12 - (sum % 11)) % 11;\n\t\tif (num < 10) {\n\t\t\treturn num.toString();\n\t\t} else {\n\t\t\treturn 'X';\n\t\t}\n\t}\n}\n\nexport const Mod11 = new Mod11Checksum();\n"],"names":["Mod11Checksum","weights","validate","s","at","compute","slice","length","sum","i","parseInt","num","toString","Mod11"],"mappings":"AAAA;;CAEC,GACD,OAAO,MAAMA;IACFC,UAAU;QAAC;QAAG;QAAG;QAAI;QAAG;QAAG;QAAG;QAAG;QAAG;QAAG;QAAG;QAAG;QAAG;QAAI;QAAG;QAAG;QAAG;QAAG;KAAE,CAAC;IAE7EC,SAASC,CAAS,EAAE;QACnB,OAAOA,EAAEC,EAAE,CAAC,CAAC,OAAO,IAAI,CAACC,OAAO,CAACF,EAAEG,KAAK,CAAC,GAAGH,EAAEI,MAAM,GAAG;IACxD;IAEAF,QAAQF,CAAS,EAAE;QAClB,MAAM,EAAEF,OAAO,EAAE,GAAG,IAAI;QACxB,IAAIO,MAAM;QACV,IAAK,IAAIC,IAAI,GAAGA,IAAIN,EAAEI,MAAM,EAAEE,IAAK;YAClCD,OAAOE,SAASP,CAAC,CAACM,EAAE,EAAE,MAAMR,OAAO,CAACQ,EAAE;QACvC;QACA,MAAME,MAAM,AAAC,CAAA,KAAMH,MAAM,EAAE,IAAK;QAChC,IAAIG,MAAM,IAAI;YACb,OAAOA,IAAIC,QAAQ;QACpB,OAAO;YACN,OAAO;QACR;IACD;AACD;AAEA,OAAO,MAAMC,QAAQ,IAAIb,gBAAgB"}
package/lib/cn/Mod31.js CHANGED
@@ -2,97 +2,48 @@
2
2
  * GB/T 17710(采ISO 7064)的模31校验码
3
3
  *
4
4
  * Mod31-3
5
- */ function _class_call_check(instance, Constructor) {
6
- if (!(instance instanceof Constructor)) {
7
- throw new TypeError("Cannot call a class as a function");
5
+ */ export class Mod31Checksum {
6
+ weights = [
7
+ 1,
8
+ 3,
9
+ 9,
10
+ 27,
11
+ 19,
12
+ 26,
13
+ 16,
14
+ 17,
15
+ 20,
16
+ 29,
17
+ 25,
18
+ 13,
19
+ 8,
20
+ 24,
21
+ 10,
22
+ 30,
23
+ 28
24
+ ];
25
+ chars = '0123456789ABCDEFGHJKLMNPQRTUWXY';
26
+ numbers = this.chars.split('').reduce((acc, cur, i)=>{
27
+ acc[cur] = i;
28
+ return acc;
29
+ }, {});
30
+ toChar(n) {
31
+ return this.chars[n];
8
32
  }
9
- }
10
- function _defineProperties(target, props) {
11
- for(var i = 0; i < props.length; i++){
12
- var descriptor = props[i];
13
- descriptor.enumerable = descriptor.enumerable || false;
14
- descriptor.configurable = true;
15
- if ("value" in descriptor) descriptor.writable = true;
16
- Object.defineProperty(target, descriptor.key, descriptor);
33
+ toNumber(c) {
34
+ return this.numbers[c];
17
35
  }
18
- }
19
- function _create_class(Constructor, protoProps, staticProps) {
20
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
21
- if (staticProps) _defineProperties(Constructor, staticProps);
22
- return Constructor;
23
- }
24
- function _define_property(obj, key, value) {
25
- if (key in obj) {
26
- Object.defineProperty(obj, key, {
27
- value: value,
28
- enumerable: true,
29
- configurable: true,
30
- writable: true
31
- });
32
- } else {
33
- obj[key] = value;
36
+ validate(s) {
37
+ return s.at(-1) === this.compute(s.slice(0, s.length - 1));
34
38
  }
35
- return obj;
36
- }
37
- export var Mod31Checksum = /*#__PURE__*/ function() {
38
- "use strict";
39
- function Mod31Checksum() {
40
- _class_call_check(this, Mod31Checksum);
41
- _define_property(this, "weights", [
42
- 1,
43
- 3,
44
- 9,
45
- 27,
46
- 19,
47
- 26,
48
- 16,
49
- 17,
50
- 20,
51
- 29,
52
- 25,
53
- 13,
54
- 8,
55
- 24,
56
- 10,
57
- 30,
58
- 28
59
- ]);
60
- _define_property(this, "chars", '0123456789ABCDEFGHJKLMNPQRTUWXY');
61
- _define_property(this, "numbers", this.chars.split('').reduce(function(acc, cur, i) {
62
- acc[cur] = i;
63
- return acc;
64
- }, {}));
65
- }
66
- _create_class(Mod31Checksum, [
67
- {
68
- key: "toChar",
69
- value: function toChar(n) {
70
- return this.chars[n];
71
- }
72
- },
73
- {
74
- key: "toNumber",
75
- value: function toNumber(c) {
76
- return this.numbers[c];
77
- }
78
- },
79
- {
80
- key: "validate",
81
- value: function validate(s) {
82
- return s.at(-1) === this.compute(s.slice(0, s.length - 1));
83
- }
84
- },
85
- {
86
- key: "compute",
87
- value: function compute(s) {
88
- var sum = 0;
89
- for(var i = 0; i < s.length; i++){
90
- sum += this.numbers[s[i]] * this.weights[i];
91
- }
92
- return this.toChar(31 - sum % 31);
93
- }
39
+ compute(s) {
40
+ let sum = 0;
41
+ for(let i = 0; i < s.length; i++){
42
+ sum += this.numbers[s[i]] * this.weights[i];
94
43
  }
95
- ]);
96
- return Mod31Checksum;
97
- }();
98
- export var Mod31 = new Mod31Checksum();
44
+ return this.toChar(31 - sum % 31);
45
+ }
46
+ }
47
+ export const Mod31 = new Mod31Checksum();
48
+
49
+ //# sourceMappingURL=Mod31.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cn/Mod31.ts"],"sourcesContent":["/**\n * GB/T 17710(采ISO 7064)的模31校验码\n *\n * Mod31-3\n */\nexport class Mod31Checksum {\n\tweights = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];\n\tchars = '0123456789ABCDEFGHJKLMNPQRTUWXY';\n\tnumbers: Record<string, number> = this.chars.split('').reduce(\n\t\t(acc, cur, i) => {\n\t\t\tacc[cur] = i;\n\t\t\treturn acc;\n\t\t},\n\t\t{} as Record<string, number>,\n\t);\n\n\ttoChar(n: number) {\n\t\treturn this.chars[n];\n\t}\n\n\ttoNumber(c: string) {\n\t\treturn this.numbers[c];\n\t}\n\n\tvalidate(s: string) {\n\t\treturn s.at(-1) === this.compute(s.slice(0, s.length - 1));\n\t}\n\n\tcompute(s: string) {\n\t\tlet sum = 0;\n\t\tfor (let i = 0; i < s.length; i++) {\n\t\t\tsum += this.numbers[s[i]] * this.weights[i];\n\t\t}\n\t\treturn this.toChar(31 - (sum % 31));\n\t}\n}\n\nexport const Mod31 = new Mod31Checksum();\n"],"names":["Mod31Checksum","weights","chars","numbers","split","reduce","acc","cur","i","toChar","n","toNumber","c","validate","s","at","compute","slice","length","sum","Mod31"],"mappings":"AAAA;;;;CAIC,GACD,OAAO,MAAMA;IACZC,UAAU;QAAC;QAAG;QAAG;QAAG;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAG;QAAI;QAAI;QAAI;KAAG,CAAC;IAC3EC,QAAQ,kCAAkC;IAC1CC,UAAkC,IAAI,CAACD,KAAK,CAACE,KAAK,CAAC,IAAIC,MAAM,CAC5D,CAACC,KAAKC,KAAKC;QACVF,GAAG,CAACC,IAAI,GAAGC;QACX,OAAOF;IACR,GACA,CAAC,GACA;IAEFG,OAAOC,CAAS,EAAE;QACjB,OAAO,IAAI,CAACR,KAAK,CAACQ,EAAE;IACrB;IAEAC,SAASC,CAAS,EAAE;QACnB,OAAO,IAAI,CAACT,OAAO,CAACS,EAAE;IACvB;IAEAC,SAASC,CAAS,EAAE;QACnB,OAAOA,EAAEC,EAAE,CAAC,CAAC,OAAO,IAAI,CAACC,OAAO,CAACF,EAAEG,KAAK,CAAC,GAAGH,EAAEI,MAAM,GAAG;IACxD;IAEAF,QAAQF,CAAS,EAAE;QAClB,IAAIK,MAAM;QACV,IAAK,IAAIX,IAAI,GAAGA,IAAIM,EAAEI,MAAM,EAAEV,IAAK;YAClCW,OAAO,IAAI,CAAChB,OAAO,CAACW,CAAC,CAACN,EAAE,CAAC,GAAG,IAAI,CAACP,OAAO,CAACO,EAAE;QAC5C;QACA,OAAO,IAAI,CAACC,MAAM,CAAC,KAAMU,MAAM;IAChC;AACD;AAEA,OAAO,MAAMC,QAAQ,IAAIpB,gBAAgB"}
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod/v4";
2
2
  import { Mod31 } from "./Mod31.js";
3
- var CodeNames = {
3
+ const CodeNames = {
4
4
  1: {
5
5
  name: "\u673A\u6784\u7F16\u5236",
6
6
  children: {
@@ -61,7 +61,7 @@ var CodeNames = {
61
61
  }
62
62
  }
63
63
  };
64
- export var ParsedUnifiedSocialCreditCodeSchema = z.object({
64
+ export const ParsedUnifiedSocialCreditCodeSchema = z.object({
65
65
  raw: z.string().length(18).describe("\u7EDF\u4E00\u793E\u4F1A\u4FE1\u7528\u4EE3\u7801"),
66
66
  registrationAuthorityCode: z.string().length(1).describe("\u767B\u8BB0\u7BA1\u7406\u90E8\u95E8\u4EE3\u7801"),
67
67
  entityCategoryCode: z.string().length(1).describe("\u673A\u6784\u7C7B\u522B\u4EE3\u7801"),
@@ -72,56 +72,51 @@ export var ParsedUnifiedSocialCreditCodeSchema = z.object({
72
72
  names: z.string().array().describe("\u4EE3\u7801\u540D\u79F0"),
73
73
  valid: z.boolean().optional().describe("\u662F\u5426\u6709\u6548")
74
74
  }).describe("\u7EDF\u4E00\u793E\u4F1A\u4FE1\u7528\u4EE3\u7801");
75
- export var UnifiedSocialCreditCodeRegex = /^([159][1239]|Y1)[0-9]{6}[0-9A-HJ-NP-RTUWXY]{10}$/;
75
+ export const UnifiedSocialCreditCodeRegex = /^([159][1239]|Y1)[0-9]{6}[0-9A-HJ-NP-RTUWXY]{10}$/;
76
76
  export function parseUnifiedSocialCreditCode(s) {
77
77
  if (!s || s.length !== 18)
78
78
  return undefined;
79
- var registrationAuthorityCode = s[0];
80
- var entityCategoryCode = s[1];
81
- var adminDivisionCode = s.slice(2, 8);
82
- var organizationCode = s.slice(8, 17);
83
- var checkDigit = s[17];
84
- var codes = [
79
+ const registrationAuthorityCode = s[0];
80
+ const entityCategoryCode = s[1];
81
+ const adminDivisionCode = s.slice(2, 8);
82
+ const organizationCode = s.slice(8, 17);
83
+ const checkDigit = s[17];
84
+ const codes = [
85
85
  registrationAuthorityCode,
86
86
  entityCategoryCode,
87
87
  adminDivisionCode,
88
88
  organizationCode,
89
89
  checkDigit
90
90
  ];
91
- var names = [];
92
- var bureau = CodeNames[registrationAuthorityCode];
91
+ const names = [];
92
+ const bureau = CodeNames[registrationAuthorityCode];
93
93
  if (bureau) {
94
- var _bureau_children;
95
94
  names.push(bureau.name);
96
- var subject = (_bureau_children = bureau.children) === null || _bureau_children === void 0 ? void 0 : _bureau_children[entityCategoryCode];
95
+ const subject = bureau.children?.[entityCategoryCode];
97
96
  if (subject) {
98
97
  names.push(subject.name);
99
98
  }
100
99
  }
101
100
  return {
102
101
  raw: s,
103
- registrationAuthorityCode: registrationAuthorityCode,
104
- entityCategoryCode: entityCategoryCode,
105
- adminDivisionCode: adminDivisionCode,
106
- organizationCode: organizationCode,
107
- checkDigit: checkDigit,
108
- codes: codes,
109
- names: names,
102
+ registrationAuthorityCode,
103
+ entityCategoryCode,
104
+ adminDivisionCode,
105
+ organizationCode,
106
+ checkDigit,
107
+ codes,
108
+ names,
110
109
  valid: UnifiedSocialCreditCodeRegex.test(s) && Mod31.validate(s)
111
110
  };
112
111
  }
113
- export function formatUnifiedSocialCreditCode(param) {
114
- var registrationAuthorityCode = param.registrationAuthorityCode, entityCategoryCode = param.entityCategoryCode, adminDivisionCode = param.adminDivisionCode, organizationCode = param.organizationCode, checkDigit = param.checkDigit;
115
- var base = "".concat(registrationAuthorityCode).concat(entityCategoryCode).concat(adminDivisionCode).concat(organizationCode);
116
- checkDigit || (checkDigit = Mod31.compute(base));
117
- return "".concat(base).concat(checkDigit);
112
+ export function formatUnifiedSocialCreditCode({ registrationAuthorityCode, entityCategoryCode, adminDivisionCode, organizationCode, checkDigit }) {
113
+ const base = `${registrationAuthorityCode}${entityCategoryCode}${adminDivisionCode}${organizationCode}`;
114
+ checkDigit ||= Mod31.compute(base);
115
+ return `${base}${checkDigit}`;
118
116
  }
119
- export function next(s) {
120
- var delta = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1;
121
- var sp = s.split("").map(function (v) {
122
- return Mod31.numbers[v];
123
- });
124
- for (var i = sp.length - 1; i >= 0; i--) {
117
+ export function next(s, delta = 1) {
118
+ const sp = s.split("").map((v) => Mod31.numbers[v]);
119
+ for (let i = sp.length - 1; i >= 0; i--) {
125
120
  if (delta > 0 && sp[i] < 30 || delta < 0 && sp[i] > 0) {
126
121
  sp[i] += delta;
127
122
  break;
@@ -133,7 +128,21 @@ export function next(s) {
133
128
  sp[i] = 30;
134
129
  }
135
130
  }
136
- return sp.map(function (v) {
137
- return Mod31.chars[v];
138
- }).join("");
131
+ return sp.map((v) => Mod31.chars[v]).join("");
139
132
  }
133
+ (function (UnifiedSocialCreditCode) {
134
+ UnifiedSocialCreditCode.regex = UnifiedSocialCreditCodeRegex;
135
+ UnifiedSocialCreditCode.parse = parseUnifiedSocialCreditCode;
136
+ UnifiedSocialCreditCode.format = formatUnifiedSocialCreditCode;
137
+ UnifiedSocialCreditCode.ResultSchema = ParsedUnifiedSocialCreditCodeSchema;
138
+ function test(s) {
139
+ if (!s) {
140
+ return false;
141
+ }
142
+ // fast check
143
+ return UnifiedSocialCreditCode.regex.test(s) && Mod31.validate(s);
144
+ }
145
+ UnifiedSocialCreditCode.test = test;
146
+ })(UnifiedSocialCreditCode || (UnifiedSocialCreditCode = {}));
147
+ export var UnifiedSocialCreditCode;
148
+ //# sourceMappingURL=UnifiedSocialCreditCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cn/UnifiedSocialCreditCode.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { Mod31 } from './Mod31';\n\ninterface CodeValue {\n\tname: string;\n\tchildren?: Record<string, CodeValue>;\n}\n\nconst CodeNames: Record<string, CodeValue> = {\n\t1: {\n\t\tname: '机构编制',\n\t\tchildren: {\n\t\t\t1: { name: '机关' },\n\t\t\t2: { name: '事业单位' },\n\t\t\t3: { name: '中央编办直接管理机构编制的群众团体' },\n\t\t\t9: { name: '其他' },\n\t\t},\n\t},\n\t5: {\n\t\tname: '民政',\n\t\tchildren: {\n\t\t\t1: { name: '社会团体' },\n\t\t\t2: { name: '民办非企业单位' },\n\t\t\t3: { name: '基金会' },\n\t\t\t9: { name: '其他' },\n\t\t},\n\t},\n\t9: {\n\t\tname: '工商',\n\t\tchildren: {\n\t\t\t1: { name: '企业' },\n\t\t\t2: { name: '个体工商户' },\n\t\t\t3: { name: '农民专业合作社' },\n\t\t\t9: { name: '其他' },\n\t\t},\n\t},\n\tY: { name: '其他', children: { 1: { name: '其他' } } },\n};\n\nexport type ParsedUnifiedSocialCreditCode = z.infer<typeof ParsedUnifiedSocialCreditCodeSchema>;\nexport const ParsedUnifiedSocialCreditCodeSchema = z\n\t.object({\n\t\traw: z.string().length(18).describe('统一社会信用代码'),\n\t\tregistrationAuthorityCode: z.string().length(1).describe('登记管理部门代码'),\n\t\tentityCategoryCode: z.string().length(1).describe('机构类别代码'),\n\t\tadminDivisionCode: z.string().length(6).describe('登记管理机关行政区划码 '),\n\t\torganizationCode: z.string().length(9).describe('主体标识码/组织机构代码'),\n\t\tcheckDigit: z.string().length(1).describe('校验码'),\n\n\t\tcodes: z.string().array().describe('代码数组'),\n\t\tnames: z.string().array().describe('代码名称'),\n\t\tvalid: z.boolean().optional().describe('是否有效'),\n\t})\n\t.describe('统一社会信用代码');\n\nexport const UnifiedSocialCreditCodeRegex = /^([159][1239]|Y1)[0-9]{6}[0-9A-HJ-NP-RTUWXY]{10}$/;\n\nexport function parseUnifiedSocialCreditCode(s: string): ParsedUnifiedSocialCreditCode | undefined {\n\tif (!s || s.length !== 18) return undefined;\n\n\tconst registrationAuthorityCode = s[0];\n\tconst entityCategoryCode = s[1];\n\tconst adminDivisionCode = s.slice(2, 8);\n\tconst organizationCode = s.slice(8, 17);\n\tconst checkDigit = s[17];\n\n\tconst codes = [registrationAuthorityCode, entityCategoryCode, adminDivisionCode, organizationCode, checkDigit];\n\tconst names: string[] = [];\n\n\tconst bureau = CodeNames[registrationAuthorityCode];\n\tif (bureau) {\n\t\tnames.push(bureau.name);\n\t\tconst subject = bureau.children?.[entityCategoryCode];\n\t\tif (subject) {\n\t\t\tnames.push(subject.name);\n\t\t}\n\t}\n\n\treturn {\n\t\traw: s,\n\t\tregistrationAuthorityCode,\n\t\tentityCategoryCode,\n\t\tadminDivisionCode,\n\t\torganizationCode,\n\t\tcheckDigit,\n\t\tcodes,\n\t\tnames,\n\t\tvalid: UnifiedSocialCreditCodeRegex.test(s) && Mod31.validate(s),\n\t};\n}\n\nexport function formatUnifiedSocialCreditCode({\n\tregistrationAuthorityCode,\n\tentityCategoryCode,\n\tadminDivisionCode,\n\torganizationCode,\n\tcheckDigit,\n}: {\n\tregistrationAuthorityCode: string;\n\tentityCategoryCode: string;\n\tadminDivisionCode: string;\n\torganizationCode: string;\n\tcheckDigit?: string;\n}): string {\n\tconst base = `${registrationAuthorityCode}${entityCategoryCode}${adminDivisionCode}${organizationCode}`;\n\tcheckDigit ||= Mod31.compute(base);\n\treturn `${base}${checkDigit}`;\n}\n\nexport function next(s: string, delta: number = 1) {\n\tconst sp = s.split('').map((v) => Mod31.numbers[v]);\n\tfor (let i = sp.length - 1; i >= 0; i--) {\n\t\tif ((delta > 0 && sp[i] < 30) || (delta < 0 && sp[i] > 0)) {\n\t\t\tsp[i] += delta;\n\t\t\tbreak;\n\t\t} else if (delta > 0 && sp[i] === 30) {\n\t\t\tsp[i] = 0;\n\t\t} else if (delta < 0 && sp[i] === 0) {\n\t\t\tsp[i] = 30;\n\t\t}\n\t}\n\treturn sp.map((v) => Mod31.chars[v]).join('');\n}\n\nexport namespace UnifiedSocialCreditCode {\n\texport const regex = UnifiedSocialCreditCodeRegex;\n\texport const parse = parseUnifiedSocialCreditCode;\n\texport const format = formatUnifiedSocialCreditCode;\n\texport type Result = ParsedUnifiedSocialCreditCode;\n\texport const ResultSchema = ParsedUnifiedSocialCreditCodeSchema;\n\texport function test(s: string | undefined | null) {\n\t\tif (!s) {\n\t\t\treturn false;\n\t\t}\n\t\t// fast check\n\t\treturn regex.test(s) && Mod31.validate(s);\n\t}\n}\n"],"names":["z","Mod31","CodeNames","name","children","Y","ParsedUnifiedSocialCreditCodeSchema","object","raw","string","length","describe","registrationAuthorityCode","entityCategoryCode","adminDivisionCode","organizationCode","checkDigit","codes","array","names","valid","boolean","optional","UnifiedSocialCreditCodeRegex","parseUnifiedSocialCreditCode","s","undefined","slice","bureau","push","subject","test","validate","formatUnifiedSocialCreditCode","base","compute","next","delta","sp","split","map","v","numbers","i","chars","join","UnifiedSocialCreditCode","regex","parse","format","ResultSchema"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { UnifiedSocialCreditCode } from "./mod.js";
2
+ import { UnifiedSocialCreditCode } from "./index.js";
3
3
  describe("UnifiedSocialCreditCode", function () {
4
4
  it("should parse", function () {
5
5
  for (var _i = 0, _iter = [
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @see https://gist.github.com/tonyc726/00c829a54a40cf80409f
3
+ * @see https://github.com/Siykt/javascript-algorithms/blob/master/src/algorithms/string/getChinesePrice.ts 人民币金额转中文大写
4
+ */ export function formatChineseAmount(price) {
5
+ if (price === 0) return '零元整';
6
+ if (price >= 1e12) return '整数位已超过最大值';
7
+ const CHINESE_NUMBER_MAP = [
8
+ '零',
9
+ '壹',
10
+ '贰',
11
+ '叁',
12
+ '肆',
13
+ '伍',
14
+ '陆',
15
+ '柒',
16
+ '捌',
17
+ '玖'
18
+ ];
19
+ const CHINESE_UNIT_MAP = [
20
+ '',
21
+ '拾',
22
+ '佰',
23
+ '仟'
24
+ ];
25
+ const CHINESE_BIG_UNIT_MAP = [
26
+ '',
27
+ '万',
28
+ '亿'
29
+ ];
30
+ const CHINESE_SMALL_UNIT_MAP = [
31
+ '角',
32
+ '分',
33
+ '厘',
34
+ '毫'
35
+ ];
36
+ const priceStr = price.toString();
37
+ const priceArr = priceStr.split('.');
38
+ const integer = priceArr[0];
39
+ const decimal = priceArr[1];
40
+ let chineseIntegerPrice = '';
41
+ let zeroCount = 0;
42
+ for(let i = 0; i < integer.length; i++){
43
+ const num = +integer[i];
44
+ const unit = integer.length - i - 1; // 当前数字的单位
45
+ const quotient = Math.floor(unit / 4); // 1w为进位单位, 除 4 即为 万 亿
46
+ const remainder = unit % 4; // 1w为进位单位, 取模 4 即为 个 十 百 千
47
+ if (num === 0) {
48
+ zeroCount++;
49
+ } else {
50
+ // 处理前置的零
51
+ if (zeroCount > 0) chineseIntegerPrice += CHINESE_NUMBER_MAP[0];
52
+ zeroCount = 0;
53
+ chineseIntegerPrice += CHINESE_NUMBER_MAP[num] + CHINESE_UNIT_MAP[remainder];
54
+ }
55
+ if (remainder === 0 && zeroCount < 4) {
56
+ chineseIntegerPrice += CHINESE_BIG_UNIT_MAP[quotient];
57
+ }
58
+ }
59
+ // 价格为小数时,整数部分不显示
60
+ if (price < 1) chineseIntegerPrice = '';
61
+ else chineseIntegerPrice += '元';
62
+ let chineseDecimalPrice = '';
63
+ if (!decimal) {
64
+ chineseDecimalPrice = '整';
65
+ } else {
66
+ let hasZero = false;
67
+ for(let i = 0; i < decimal.length; i++){
68
+ const num = +decimal[i];
69
+ if (num) chineseDecimalPrice += CHINESE_NUMBER_MAP[num] + CHINESE_SMALL_UNIT_MAP[i];
70
+ else hasZero = true;
71
+ }
72
+ if (chineseIntegerPrice && hasZero) chineseIntegerPrice += '零';
73
+ }
74
+ return chineseIntegerPrice + chineseDecimalPrice;
75
+ }
76
+
77
+ //# sourceMappingURL=formatChineseAmount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cn/formatChineseAmount.ts"],"sourcesContent":["/**\n * @see https://gist.github.com/tonyc726/00c829a54a40cf80409f\n * @see https://github.com/Siykt/javascript-algorithms/blob/master/src/algorithms/string/getChinesePrice.ts 人民币金额转中文大写\n */\nexport function formatChineseAmount(price: number) {\n\tif (price === 0) return '零元整';\n\tif (price >= 1e12) return '整数位已超过最大值';\n\n\tconst CHINESE_NUMBER_MAP = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];\n\tconst CHINESE_UNIT_MAP = ['', '拾', '佰', '仟'];\n\tconst CHINESE_BIG_UNIT_MAP = ['', '万', '亿'];\n\tconst CHINESE_SMALL_UNIT_MAP = ['角', '分', '厘', '毫'];\n\n\tconst priceStr = price.toString();\n\tconst priceArr = priceStr.split('.');\n\tconst integer = priceArr[0];\n\tconst decimal = priceArr[1];\n\n\tlet chineseIntegerPrice = '';\n\tlet zeroCount = 0;\n\n\tfor (let i = 0; i < integer.length; i++) {\n\t\tconst num = +integer[i];\n\t\tconst unit = integer.length - i - 1; // 当前数字的单位\n\t\tconst quotient = Math.floor(unit / 4); // 1w为进位单位, 除 4 即为 万 亿\n\t\tconst remainder = unit % 4; // 1w为进位单位, 取模 4 即为 个 十 百 千\n\n\t\tif (num === 0) {\n\t\t\tzeroCount++;\n\t\t} else {\n\t\t\t// 处理前置的零\n\t\t\tif (zeroCount > 0) chineseIntegerPrice += CHINESE_NUMBER_MAP[0];\n\t\t\tzeroCount = 0;\n\t\t\tchineseIntegerPrice += CHINESE_NUMBER_MAP[num] + CHINESE_UNIT_MAP[remainder];\n\t\t}\n\t\tif (remainder === 0 && zeroCount < 4) {\n\t\t\tchineseIntegerPrice += CHINESE_BIG_UNIT_MAP[quotient];\n\t\t}\n\t}\n\n\t// 价格为小数时,整数部分不显示\n\tif (price < 1) chineseIntegerPrice = '';\n\telse chineseIntegerPrice += '元';\n\n\tlet chineseDecimalPrice = '';\n\n\tif (!decimal) {\n\t\tchineseDecimalPrice = '整';\n\t} else {\n\t\tlet hasZero = false;\n\t\tfor (let i = 0; i < decimal.length; i++) {\n\t\t\tconst num = +decimal[i];\n\t\t\tif (num) chineseDecimalPrice += CHINESE_NUMBER_MAP[num] + CHINESE_SMALL_UNIT_MAP[i];\n\t\t\telse hasZero = true;\n\t\t}\n\n\t\tif (chineseIntegerPrice && hasZero) chineseIntegerPrice += '零';\n\t}\n\n\treturn chineseIntegerPrice + chineseDecimalPrice;\n}\n"],"names":["formatChineseAmount","price","CHINESE_NUMBER_MAP","CHINESE_UNIT_MAP","CHINESE_BIG_UNIT_MAP","CHINESE_SMALL_UNIT_MAP","priceStr","toString","priceArr","split","integer","decimal","chineseIntegerPrice","zeroCount","i","length","num","unit","quotient","Math","floor","remainder","chineseDecimalPrice","hasZero"],"mappings":"AAAA;;;CAGC,GACD,OAAO,SAASA,oBAAoBC,KAAa;IAChD,IAAIA,UAAU,GAAG,OAAO;IACxB,IAAIA,SAAS,MAAM,OAAO;IAE1B,MAAMC,qBAAqB;QAAC;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;KAAI;IAC7E,MAAMC,mBAAmB;QAAC;QAAI;QAAK;QAAK;KAAI;IAC5C,MAAMC,uBAAuB;QAAC;QAAI;QAAK;KAAI;IAC3C,MAAMC,yBAAyB;QAAC;QAAK;QAAK;QAAK;KAAI;IAEnD,MAAMC,WAAWL,MAAMM,QAAQ;IAC/B,MAAMC,WAAWF,SAASG,KAAK,CAAC;IAChC,MAAMC,UAAUF,QAAQ,CAAC,EAAE;IAC3B,MAAMG,UAAUH,QAAQ,CAAC,EAAE;IAE3B,IAAII,sBAAsB;IAC1B,IAAIC,YAAY;IAEhB,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,QAAQK,MAAM,EAAED,IAAK;QACxC,MAAME,MAAM,CAACN,OAAO,CAACI,EAAE;QACvB,MAAMG,OAAOP,QAAQK,MAAM,GAAGD,IAAI,GAAG,UAAU;QAC/C,MAAMI,WAAWC,KAAKC,KAAK,CAACH,OAAO,IAAI,sBAAsB;QAC7D,MAAMI,YAAYJ,OAAO,GAAG,2BAA2B;QAEvD,IAAID,QAAQ,GAAG;YACdH;QACD,OAAO;YACN,SAAS;YACT,IAAIA,YAAY,GAAGD,uBAAuBV,kBAAkB,CAAC,EAAE;YAC/DW,YAAY;YACZD,uBAAuBV,kBAAkB,CAACc,IAAI,GAAGb,gBAAgB,CAACkB,UAAU;QAC7E;QACA,IAAIA,cAAc,KAAKR,YAAY,GAAG;YACrCD,uBAAuBR,oBAAoB,CAACc,SAAS;QACtD;IACD;IAEA,iBAAiB;IACjB,IAAIjB,QAAQ,GAAGW,sBAAsB;SAChCA,uBAAuB;IAE5B,IAAIU,sBAAsB;IAE1B,IAAI,CAACX,SAAS;QACbW,sBAAsB;IACvB,OAAO;QACN,IAAIC,UAAU;QACd,IAAK,IAAIT,IAAI,GAAGA,IAAIH,QAAQI,MAAM,EAAED,IAAK;YACxC,MAAME,MAAM,CAACL,OAAO,CAACG,EAAE;YACvB,IAAIE,KAAKM,uBAAuBpB,kBAAkB,CAACc,IAAI,GAAGX,sBAAsB,CAACS,EAAE;iBAC9ES,UAAU;QAChB;QAEA,IAAIX,uBAAuBW,SAASX,uBAAuB;IAC5D;IAEA,OAAOA,sBAAsBU;AAC9B"}
package/lib/cn/index.js CHANGED
@@ -1 +1,7 @@
1
- export { ChineseResidentIdNo, UnifiedSocialCreditCode, DivisionCode } from "./mod.js";
1
+ export { ChineseResidentIdNo } from "./ChineseResidentIdNo.js";
2
+ export { UnifiedSocialCreditCode } from "./UnifiedSocialCreditCode.js";
3
+ export { DivisionCode } from "./DivisionCode.js";
4
+ export * from "./formatChineseAmount.js";
5
+ export * from "./parseChineseNumber.js";
6
+ export * from "./pinyin/toPinyinPure.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cn/index.ts"],"sourcesContent":["export { ChineseResidentIdNo } from './ChineseResidentIdNo';\nexport { UnifiedSocialCreditCode } from './UnifiedSocialCreditCode';\nexport { DivisionCode } from './DivisionCode';\n\nexport * from './formatChineseAmount';\nexport * from './parseChineseNumber';\nexport * from './pinyin/toPinyinPure';\n"],"names":["ChineseResidentIdNo","UnifiedSocialCreditCode","DivisionCode"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,wBAAwB;AAC5D,SAASC,uBAAuB,QAAQ,4BAA4B;AACpE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,cAAc,wBAAwB;AACtC,cAAc,uBAAuB;AACrC,cAAc,wBAAwB"}
@@ -0,0 +1,94 @@
1
+ const ToNumber = {
2
+ 〇: 0,
3
+ 一: 1,
4
+ 二: 2,
5
+ 三: 3,
6
+ 四: 4,
7
+ 五: 5,
8
+ 六: 6,
9
+ 七: 7,
10
+ 八: 8,
11
+ 九: 9,
12
+ 十: 10,
13
+ 百: 100,
14
+ 千: 1000,
15
+ 万: 10000,
16
+ 零: 0,
17
+ 壹: 1,
18
+ 贰: 2,
19
+ 叁: 3,
20
+ 肆: 4,
21
+ 伍: 5,
22
+ 陆: 6,
23
+ 柒: 7,
24
+ 捌: 8,
25
+ 玖: 9,
26
+ 拾: 10,
27
+ 佰: 100,
28
+ 仟: 1000,
29
+ 0: 0,
30
+ 1: 1,
31
+ 2: 2,
32
+ 3: 3,
33
+ 4: 4,
34
+ 5: 5,
35
+ 6: 6,
36
+ 7: 7,
37
+ 8: 8,
38
+ 9: 9
39
+ };
40
+ // 一万一 -> 10001
41
+ // 一万一百一 -> 10101
42
+ // 一万 -> 10000
43
+ // 10000 -> 10000
44
+ export function parseChineseNumber(s) {
45
+ if (typeof s === 'number') {
46
+ return s;
47
+ }
48
+ let n = 0;
49
+ let c = 0;
50
+ let base = 0;
51
+ let shouldAddLast = false;
52
+ for (const char of s.split('').reverse()){
53
+ c = ToNumber[char];
54
+ if (c === undefined) {
55
+ throw new Error(`无法解析的数字: ${char}`);
56
+ }
57
+ switch(c){
58
+ case 10:
59
+ {
60
+ base = 1;
61
+ break;
62
+ }
63
+ case 100:
64
+ {
65
+ base = 2;
66
+ break;
67
+ }
68
+ case 1000:
69
+ {
70
+ base = 3;
71
+ break;
72
+ }
73
+ case 10000:
74
+ {
75
+ base = 4;
76
+ break;
77
+ }
78
+ }
79
+ //
80
+ if (c < 10) {
81
+ n += c * 10 ** base;
82
+ base++;
83
+ shouldAddLast = false;
84
+ } else {
85
+ shouldAddLast = true;
86
+ }
87
+ }
88
+ if (shouldAddLast) {
89
+ n += c;
90
+ }
91
+ return n;
92
+ }
93
+
94
+ //# sourceMappingURL=parseChineseNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cn/parseChineseNumber.ts"],"sourcesContent":["const ToNumber: Record<string, number> = {\n\t〇: 0,\n\t一: 1,\n\t二: 2,\n\t三: 3,\n\t四: 4,\n\t五: 5,\n\t六: 6,\n\t七: 7,\n\t八: 8,\n\t九: 9,\n\t十: 10,\n\t百: 100,\n\t千: 1000,\n\t万: 10_000,\n\t零: 0,\n\t壹: 1,\n\t贰: 2,\n\t叁: 3,\n\t肆: 4,\n\t伍: 5,\n\t陆: 6,\n\t柒: 7,\n\t捌: 8,\n\t玖: 9,\n\t拾: 10,\n\t佰: 100,\n\t仟: 1000,\n\t0: 0,\n\t1: 1,\n\t2: 2,\n\t3: 3,\n\t4: 4,\n\t5: 5,\n\t6: 6,\n\t7: 7,\n\t8: 8,\n\t9: 9,\n};\n\n// 一万一 -> 10001\n// 一万一百一 -> 10101\n// 一万 -> 10000\n// 10000 -> 10000\nexport function parseChineseNumber(s: string | number) {\n\tif (typeof s === 'number') {\n\t\treturn s;\n\t}\n\n\tlet n = 0;\n\tlet c = 0;\n\tlet base = 0;\n\tlet shouldAddLast = false;\n\tfor (const char of s.split('').reverse()) {\n\t\tc = ToNumber[char];\n\t\tif (c === undefined) {\n\t\t\tthrow new Error(`无法解析的数字: ${char}`);\n\t\t}\n\n\t\tswitch (c) {\n\t\t\tcase 10: {\n\t\t\t\tbase = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 100: {\n\t\t\t\tbase = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 1000: {\n\t\t\t\tbase = 3;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 10_000: {\n\t\t\t\tbase = 4;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//\n\t\tif (c < 10) {\n\t\t\tn += c * 10 ** base;\n\t\t\tbase++;\n\t\t\tshouldAddLast = false;\n\t\t} else {\n\t\t\tshouldAddLast = true;\n\t\t}\n\t}\n\n\tif (shouldAddLast) {\n\t\tn += c;\n\t}\n\n\treturn n;\n}\n"],"names":["ToNumber","〇","一","二","三","四","五","六","七","八","九","十","百","千","万","零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾","佰","仟","parseChineseNumber","s","n","c","base","shouldAddLast","char","split","reverse","undefined","Error"],"mappings":"AAAA,MAAMA,WAAmC;IACxCC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;AACJ;AAEA,eAAe;AACf,iBAAiB;AACjB,cAAc;AACd,iBAAiB;AACjB,OAAO,SAASC,mBAAmBC,CAAkB;IACpD,IAAI,OAAOA,MAAM,UAAU;QAC1B,OAAOA;IACR;IAEA,IAAIC,IAAI;IACR,IAAIC,IAAI;IACR,IAAIC,OAAO;IACX,IAAIC,gBAAgB;IACpB,KAAK,MAAMC,QAAQL,EAAEM,KAAK,CAAC,IAAIC,OAAO,GAAI;QACzCL,IAAI/B,QAAQ,CAACkC,KAAK;QAClB,IAAIH,MAAMM,WAAW;YACpB,MAAM,IAAIC,MAAM,CAAC,SAAS,EAAEJ,MAAM;QACnC;QAEA,OAAQH;YACP,KAAK;gBAAI;oBACRC,OAAO;oBACP;gBACD;YAEA,KAAK;gBAAK;oBACTA,OAAO;oBACP;gBACD;YAEA,KAAK;gBAAM;oBACVA,OAAO;oBACP;gBACD;YAEA,KAAK;gBAAQ;oBACZA,OAAO;oBACP;gBACD;QACD;QAEA,EAAE;QACF,IAAID,IAAI,IAAI;YACXD,KAAKC,IAAI,MAAMC;YACfA;YACAC,gBAAgB;QACjB,OAAO;YACNA,gBAAgB;QACjB;IACD;IAEA,IAAIA,eAAe;QAClBH,KAAKC;IACN;IAEA,OAAOD;AACR"}