@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
@@ -0,0 +1,394 @@
1
+ import { LogCluster } from './LogCluster';
2
+ import { Node } from './Node';
3
+ import type { ClusterUpdateType, DrainOptions, SearchStrategy } from './types';
4
+
5
+ /**
6
+ * Simple LRU cache using Map iteration order.
7
+ * Map preserves insertion order; re-inserting a key moves it to the end.
8
+ */
9
+ class SimpleLRU<K, V> {
10
+ private readonly map = new Map<K, V>();
11
+ constructor(private readonly max: number) {}
12
+
13
+ get(key: K): V | undefined {
14
+ const value = this.map.get(key);
15
+ if (value !== undefined) {
16
+ // Move to end (most recently used)
17
+ this.map.delete(key);
18
+ this.map.set(key, value);
19
+ }
20
+ return value;
21
+ }
22
+
23
+ set(key: K, value: V): void {
24
+ if (this.map.has(key)) {
25
+ this.map.delete(key);
26
+ } else if (this.map.size >= this.max) {
27
+ // Evict oldest (first key)
28
+ const first = this.map.keys().next().value;
29
+ if (first !== undefined) {
30
+ this.map.delete(first);
31
+ }
32
+ }
33
+ this.map.set(key, value);
34
+ }
35
+
36
+ values(): IterableIterator<V> {
37
+ return this.map.values();
38
+ }
39
+ }
40
+
41
+ function isSliceEqual<T>(a: T[], b: T[]): boolean {
42
+ if (a.length !== b.length) return false;
43
+ for (let i = 0; i < a.length; i++) {
44
+ if (a[i] !== b[i]) return false;
45
+ }
46
+ return true;
47
+ }
48
+
49
+ function hasNumbers(s: string): boolean {
50
+ return /\d/.test(s);
51
+ }
52
+
53
+ /**
54
+ * Core Drain algorithm for log clustering.
55
+ *
56
+ * Drain is an online log parsing algorithm that groups log messages into clusters
57
+ * based on their structural similarity, extracting templates by parameterizing
58
+ * variable parts of the logs.
59
+ */
60
+ export class Drain {
61
+ public readonly logClusterDepth: number;
62
+ public readonly maxNodeDepth: number;
63
+ public readonly simTh: number;
64
+ public readonly maxChildren: number;
65
+ public readonly rootNode: Node;
66
+ public readonly maxClusters: number;
67
+ public readonly extraDelimiters: readonly string[];
68
+ public readonly paramStr: string;
69
+ public readonly parametrizeNumericTokens: boolean;
70
+
71
+ private readonly idToCluster: SimpleLRU<number, LogCluster>;
72
+ private clustersCounter: number = 0;
73
+
74
+ constructor(options: DrainOptions = {}) {
75
+ this.logClusterDepth = options.logClusterDepth ?? 4;
76
+ this.simTh = options.simTh ?? 0.4;
77
+ this.maxChildren = options.maxChildren ?? 100;
78
+ this.maxClusters = options.maxClusters ?? 1000;
79
+ this.extraDelimiters = options.extraDelimiters ?? [];
80
+ this.paramStr = options.paramStr ?? '<*>';
81
+ this.parametrizeNumericTokens = options.parametrizeNumericTokens ?? true;
82
+
83
+ if (this.logClusterDepth < 3) {
84
+ throw new Error('depth argument must be at least 3');
85
+ }
86
+
87
+ this.maxNodeDepth = this.logClusterDepth - 2;
88
+ this.rootNode = Node.newNode();
89
+ this.idToCluster = new SimpleLRU<number, LogCluster>(this.maxClusters);
90
+ }
91
+
92
+ addLogMessage(content: string): { cluster: LogCluster; updateType: ClusterUpdateType } {
93
+ const contentTokens = this.getContentAsTokens(content);
94
+ const matchCluster = this.treeSearch(this.rootNode, contentTokens, this.simTh, false);
95
+
96
+ let updateType: ClusterUpdateType = 'none';
97
+
98
+ if (matchCluster === null) {
99
+ this.clustersCounter++;
100
+ const clusterId = this.clustersCounter;
101
+ const cluster = new LogCluster(clusterId, contentTokens);
102
+ this.idToCluster.set(clusterId, cluster);
103
+ this.addSeqToPrefixTree(this.rootNode, cluster);
104
+ updateType = 'created';
105
+ return { cluster, updateType };
106
+ }
107
+
108
+ const newTemplateTokens = this.createTemplate(contentTokens, matchCluster.logTemplateTokens);
109
+
110
+ if (!isSliceEqual(newTemplateTokens, matchCluster.logTemplateTokens)) {
111
+ matchCluster.logTemplateTokens = newTemplateTokens;
112
+ updateType = 'templateChanged';
113
+ }
114
+
115
+ matchCluster.size++;
116
+
117
+ // Touch cluster to update its position in the LRU cache
118
+ this.idToCluster.get(matchCluster.clusterId);
119
+
120
+ return { cluster: matchCluster, updateType };
121
+ }
122
+
123
+ getContentAsTokens(content: string): string[] {
124
+ let processed = content.trim();
125
+ for (const delimiter of this.extraDelimiters) {
126
+ processed = processed.replaceAll(delimiter, ' ');
127
+ }
128
+ return processed.split(/\s+/).filter((token) => token.length > 0);
129
+ }
130
+
131
+ private treeSearch(rootNode: Node, tokens: string[], simTh: number, includeParams: boolean): LogCluster | null {
132
+ const tokenCount = tokens.length;
133
+ const firstNode = rootNode.keyToChildNode.get(tokenCount.toString());
134
+
135
+ if (firstNode === undefined) return null;
136
+
137
+ if (tokenCount === 0) {
138
+ const firstClusterId = firstNode.clusterIds[0];
139
+ if (firstClusterId === undefined) return null;
140
+ return this.idToCluster.get(firstClusterId) ?? null;
141
+ }
142
+
143
+ let currentNode: Node = firstNode;
144
+ let currentNodeDepth = 1;
145
+ for (const token of tokens) {
146
+ if (currentNodeDepth >= this.maxNodeDepth || currentNodeDepth === tokenCount) break;
147
+
148
+ const keyToChildNode: Map<string, Node> = currentNode.keyToChildNode;
149
+ let nextNode: Node | undefined = keyToChildNode.get(token);
150
+ if (nextNode === undefined) {
151
+ nextNode = keyToChildNode.get(this.paramStr);
152
+ }
153
+ if (nextNode === undefined) return null;
154
+
155
+ currentNode = nextNode;
156
+ currentNodeDepth += 1;
157
+ }
158
+
159
+ return this.fastMatch(currentNode.clusterIds, tokens, simTh, includeParams);
160
+ }
161
+
162
+ private fastMatch(clusterIds: number[], tokens: string[], simTh: number, includeParams: boolean): LogCluster | null {
163
+ let maxSim = -1;
164
+ let maxParamCount = -1;
165
+ let maxCluster: LogCluster | null = null;
166
+
167
+ for (const clusterId of clusterIds) {
168
+ const cluster = this.idToCluster.get(clusterId);
169
+ if (cluster === undefined) continue;
170
+
171
+ const [currentSim, paramCount] = this.getSeqDistance(cluster.logTemplateTokens, tokens, includeParams);
172
+
173
+ if (currentSim > maxSim || (currentSim === maxSim && paramCount > maxParamCount)) {
174
+ maxSim = currentSim;
175
+ maxParamCount = paramCount;
176
+ maxCluster = cluster;
177
+ }
178
+ }
179
+
180
+ return maxSim >= simTh ? maxCluster : null;
181
+ }
182
+
183
+ private getSeqDistance(seq1: string[], seq2: string[], includeParams: boolean): [number, number] {
184
+ if (seq1.length !== seq2.length) {
185
+ throw new Error(`seq1 length ${seq1.length} not equals to seq2 length ${seq2.length}`);
186
+ }
187
+
188
+ if (seq1.length === 0) return [1, 0];
189
+
190
+ let simTokens = 0;
191
+ let paramCount = 0;
192
+
193
+ for (let i = 0; i < seq1.length; i++) {
194
+ if (seq1[i] === this.paramStr) {
195
+ paramCount++;
196
+ } else if (seq1[i] === seq2[i]) {
197
+ simTokens++;
198
+ }
199
+ }
200
+
201
+ if (includeParams) simTokens += paramCount;
202
+
203
+ return [simTokens / seq1.length, paramCount];
204
+ }
205
+
206
+ private addSeqToPrefixTree(rootNode: Node, cluster: LogCluster): void {
207
+ const tokenCount = cluster.logTemplateTokens.length;
208
+ const tokenCountStr = tokenCount.toString();
209
+ let firstLayerNode = rootNode.keyToChildNode.get(tokenCountStr);
210
+ if (firstLayerNode === undefined) {
211
+ firstLayerNode = Node.newNode();
212
+ rootNode.keyToChildNode.set(tokenCountStr, firstLayerNode);
213
+ }
214
+
215
+ let currentNode = firstLayerNode;
216
+
217
+ if (tokenCount === 0) {
218
+ currentNode.clusterIds = [cluster.clusterId];
219
+ return;
220
+ }
221
+
222
+ let currentDepth = 1;
223
+ for (const token of cluster.logTemplateTokens) {
224
+ if (currentDepth >= this.maxNodeDepth || currentDepth >= tokenCount) {
225
+ const newClusterIds: number[] = [];
226
+ for (const clusterId of currentNode.clusterIds) {
227
+ if (this.idToCluster.get(clusterId) !== undefined) {
228
+ newClusterIds.push(clusterId);
229
+ }
230
+ }
231
+ newClusterIds.push(cluster.clusterId);
232
+ currentNode.clusterIds = newClusterIds;
233
+ break;
234
+ }
235
+
236
+ if (!currentNode.keyToChildNode.has(token)) {
237
+ if (this.parametrizeNumericTokens && hasNumbers(token)) {
238
+ const node = currentNode.keyToChildNode.get(this.paramStr);
239
+ if (node === undefined) {
240
+ const newNode = Node.newNode();
241
+ currentNode.keyToChildNode.set(this.paramStr, newNode);
242
+ currentNode = newNode;
243
+ } else {
244
+ currentNode = node;
245
+ }
246
+ } else {
247
+ const wildcardNode = currentNode.keyToChildNode.get(this.paramStr);
248
+ if (wildcardNode !== undefined) {
249
+ if (currentNode.keyToChildNode.size < this.maxChildren) {
250
+ const newNode = Node.newNode();
251
+ currentNode.keyToChildNode.set(token, newNode);
252
+ currentNode = newNode;
253
+ } else {
254
+ currentNode = wildcardNode;
255
+ }
256
+ } else {
257
+ if (currentNode.keyToChildNode.size + 1 < this.maxChildren) {
258
+ const newNode = Node.newNode();
259
+ currentNode.keyToChildNode.set(token, newNode);
260
+ currentNode = newNode;
261
+ } else if (currentNode.keyToChildNode.size + 1 === this.maxChildren) {
262
+ const newNode = Node.newNode();
263
+ currentNode.keyToChildNode.set(this.paramStr, newNode);
264
+ currentNode = newNode;
265
+ } else {
266
+ currentNode = currentNode.keyToChildNode.get(this.paramStr)!;
267
+ }
268
+ }
269
+ }
270
+ } else {
271
+ currentNode = currentNode.keyToChildNode.get(token)!;
272
+ }
273
+
274
+ currentDepth++;
275
+ }
276
+ }
277
+
278
+ private createTemplate(seq1: string[], seq2: string[]): string[] {
279
+ if (seq1.length !== seq2.length) {
280
+ throw new Error(`seq1 length ${seq1.length} not equals to seq2 length ${seq2.length}`);
281
+ }
282
+ const retVal = [...seq2];
283
+ for (let i = 0; i < seq1.length; i++) {
284
+ if (seq1[i] !== seq2[i]) {
285
+ retVal[i] = this.paramStr;
286
+ }
287
+ }
288
+ return retVal;
289
+ }
290
+
291
+ match(content: string, strategy: SearchStrategy = 'never'): LogCluster | null {
292
+ const requiredSimTh = 1.0;
293
+ const contentTokens = this.getContentAsTokens(content);
294
+
295
+ const fullSearch = (): LogCluster | null => {
296
+ const allIds = this.getClustersIdsForSeqLen(contentTokens.length);
297
+ return this.fastMatch(allIds, contentTokens, requiredSimTh, true);
298
+ };
299
+
300
+ if (strategy === 'always') return fullSearch();
301
+
302
+ const matchCluster = this.treeSearch(this.rootNode, contentTokens, requiredSimTh, true);
303
+ if (matchCluster !== null) return matchCluster;
304
+
305
+ if (strategy === 'never') return null;
306
+
307
+ return fullSearch();
308
+ }
309
+
310
+ private getClustersIdsForSeqLen(seqLen: number): number[] {
311
+ const appendClusterRecursive = (node: Node, idListToFill: number[]): void => {
312
+ idListToFill.push(...node.clusterIds);
313
+ for (const childNode of node.keyToChildNode.values()) {
314
+ appendClusterRecursive(childNode, idListToFill);
315
+ }
316
+ };
317
+
318
+ const currentNode = this.rootNode.keyToChildNode.get(seqLen.toString());
319
+ if (currentNode === undefined) return [];
320
+
321
+ const target: number[] = [];
322
+ appendClusterRecursive(currentNode, target);
323
+ return target;
324
+ }
325
+
326
+ getClusters(): LogCluster[] {
327
+ return [...this.idToCluster.values()];
328
+ }
329
+
330
+ toJSON() {
331
+ return {
332
+ logClusterDepth: this.logClusterDepth,
333
+ maxNodeDepth: this.maxNodeDepth,
334
+ simTh: this.simTh,
335
+ maxChildren: this.maxChildren,
336
+ rootNode: this.rootNode.toJSON(),
337
+ maxClusters: this.maxClusters,
338
+ extraDelimiters: [...this.extraDelimiters],
339
+ paramStr: this.paramStr,
340
+ parametrizeNumericTokens: this.parametrizeNumericTokens,
341
+ clusters: this.getClusters().map((c) => c.toJSON()),
342
+ clustersCounter: this.clustersCounter,
343
+ };
344
+ }
345
+
346
+ static fromJSON(data: {
347
+ logClusterDepth: number;
348
+ maxNodeDepth: number;
349
+ simTh: number;
350
+ maxChildren: number;
351
+ rootNode: {
352
+ keyToChildNode: Record<string, unknown>;
353
+ clusterIds: number[];
354
+ };
355
+ maxClusters: number;
356
+ extraDelimiters: string[];
357
+ paramStr: string;
358
+ parametrizeNumericTokens: boolean;
359
+ clusters: Array<{
360
+ clusterId: number;
361
+ logTemplateTokens: string[];
362
+ size: number;
363
+ }>;
364
+ clustersCounter: number;
365
+ }): Drain {
366
+ const drain = new Drain({
367
+ logClusterDepth: data.logClusterDepth,
368
+ simTh: data.simTh,
369
+ maxChildren: data.maxChildren,
370
+ maxClusters: data.maxClusters,
371
+ extraDelimiters: data.extraDelimiters,
372
+ paramStr: data.paramStr,
373
+ parametrizeNumericTokens: data.parametrizeNumericTokens,
374
+ });
375
+
376
+ drain.rootNode.keyToChildNode.clear();
377
+ drain.rootNode.clusterIds = [];
378
+
379
+ const rootNode = Node.fromJSON(data.rootNode);
380
+ for (const [key, node] of rootNode.keyToChildNode) {
381
+ drain.rootNode.keyToChildNode.set(key, node);
382
+ }
383
+ drain.rootNode.clusterIds = rootNode.clusterIds;
384
+
385
+ for (const clusterData of data.clusters) {
386
+ const cluster = LogCluster.fromJSON(clusterData);
387
+ drain.idToCluster.set(cluster.clusterId, cluster);
388
+ }
389
+
390
+ drain.clustersCounter = data.clustersCounter;
391
+
392
+ return drain;
393
+ }
394
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Represents a cluster of similar log messages with a common template.
3
+ */
4
+ export class LogCluster {
5
+ constructor(
6
+ public readonly clusterId: number,
7
+ public logTemplateTokens: string[],
8
+ public size: number = 1,
9
+ ) {}
10
+
11
+ /**
12
+ * Returns the template as a space-separated string.
13
+ */
14
+ getTemplate(): string {
15
+ return this.logTemplateTokens.join(' ');
16
+ }
17
+
18
+ /**
19
+ * Returns a string representation of the cluster.
20
+ */
21
+ toString(): string {
22
+ return `ID=${this.clusterId.toString().padEnd(5)} : size=${this.size.toString().padEnd(10)}: ${this.getTemplate()}`;
23
+ }
24
+
25
+ /**
26
+ * Creates a LogCluster from JSON data.
27
+ */
28
+ static fromJSON(data: { clusterId: number; logTemplateTokens: string[]; size: number }): LogCluster {
29
+ return new LogCluster(data.clusterId, data.logTemplateTokens, data.size);
30
+ }
31
+
32
+ /**
33
+ * Converts the cluster to JSON for serialization.
34
+ */
35
+ toJSON(): {
36
+ clusterId: number;
37
+ logTemplateTokens: string[];
38
+ size: number;
39
+ } {
40
+ return {
41
+ clusterId: this.clusterId,
42
+ logTemplateTokens: this.logTemplateTokens,
43
+ size: this.size,
44
+ };
45
+ }
46
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Represents a node in the prefix tree used by Drain algorithm.
3
+ */
4
+ export class Node {
5
+ /**
6
+ * Map of token keys to child nodes.
7
+ */
8
+ public readonly keyToChildNode: Map<string, Node> = new Map();
9
+
10
+ /**
11
+ * List of cluster IDs associated with this node.
12
+ */
13
+ public clusterIds: number[] = [];
14
+
15
+ /**
16
+ * Creates a new empty node.
17
+ */
18
+ static newNode(): Node {
19
+ return new Node();
20
+ }
21
+
22
+ /**
23
+ * Converts the node to JSON for serialization.
24
+ */
25
+ toJSON(): {
26
+ keyToChildNode: Record<string, unknown>;
27
+ clusterIds: number[];
28
+ } {
29
+ const keyToChildNode: Record<string, unknown> = {};
30
+ for (const [key, node] of this.keyToChildNode) {
31
+ keyToChildNode[key] = node.toJSON();
32
+ }
33
+ return {
34
+ keyToChildNode,
35
+ clusterIds: this.clusterIds,
36
+ };
37
+ }
38
+
39
+ /**
40
+ * Creates a Node from JSON data.
41
+ */
42
+ static fromJSON(data: { keyToChildNode: Record<string, unknown>; clusterIds: number[] }): Node {
43
+ const node = new Node();
44
+ node.clusterIds = data.clusterIds;
45
+ for (const [key, childData] of Object.entries(data.keyToChildNode)) {
46
+ node.keyToChildNode.set(
47
+ key,
48
+ Node.fromJSON(childData as { keyToChildNode: Record<string, unknown>; clusterIds: number[] }),
49
+ );
50
+ }
51
+ return node;
52
+ }
53
+ }