@wener/common 2.0.3 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/lib/ai/qwen3vl/index.js +1 -1
  2. package/lib/ai/qwen3vl/utils.js +15 -15
  3. package/lib/ai/qwen3vl/utils.js.map +1 -1
  4. package/lib/ai/vision/DocLayoutElementTypeSchema.js +22 -22
  5. package/lib/ai/vision/ImageAnnotationSchema.js +63 -47
  6. package/lib/ai/vision/index.js +2 -2
  7. package/lib/ai/vision/resolveImageAnnotation.js +81 -95
  8. package/lib/cn/ChineseResidentIdNo.js +55 -41
  9. package/lib/cn/ChineseResidentIdNo.js.map +1 -1
  10. package/lib/cn/ChineseResidentIdNo.mod.js +6 -1
  11. package/lib/cn/ChineseResidentIdNo.test.js +22 -21
  12. package/lib/cn/DivisionCode.js +220 -235
  13. package/lib/cn/DivisionCode.mod.js +6 -1
  14. package/lib/cn/DivisionCode.test.js +92 -121
  15. package/lib/cn/Mod11.js +18 -37
  16. package/lib/cn/Mod11.js.map +1 -1
  17. package/lib/cn/Mod31.js +23 -41
  18. package/lib/cn/UnifiedSocialCreditCode.js +143 -137
  19. package/lib/cn/UnifiedSocialCreditCode.mod.js +6 -1
  20. package/lib/cn/UnifiedSocialCreditCode.test.js +21 -15
  21. package/lib/cn/formatChineseAmount.js +46 -71
  22. package/lib/cn/index.js +6 -6
  23. package/lib/cn/mod.js +5 -3
  24. package/lib/cn/parseChineseNumber.js +81 -85
  25. package/lib/cn/parseChineseNumber.test.js +183 -261
  26. package/lib/cn/pinyin/cartesianProduct.js +19 -19
  27. package/lib/cn/pinyin/cartesianProduct.test.js +78 -178
  28. package/lib/cn/pinyin/loader.js +13 -11
  29. package/lib/cn/pinyin/preload.js +2 -1
  30. package/lib/cn/pinyin/toPinyin.test.js +149 -161
  31. package/lib/cn/pinyin/toPinyinPure.js +28 -23
  32. package/lib/cn/pinyin/transform.js +11 -11
  33. package/lib/cn/types.d.js +2 -2
  34. package/lib/consola/createStandardConsolaReporter.js +14 -15
  35. package/lib/consola/formatLogObject.js +149 -133
  36. package/lib/consola/formatLogObject.js.map +1 -1
  37. package/lib/consola/formatLogObject.test.js +167 -178
  38. package/lib/consola/index.js +2 -2
  39. package/lib/data/formatSort.js +14 -12
  40. package/lib/data/formatSort.test.js +33 -33
  41. package/lib/data/index.js +3 -3
  42. package/lib/data/maybeNumber.js +23 -23
  43. package/lib/data/maybeNumber.js.map +1 -1
  44. package/lib/data/parseSort.js +75 -68
  45. package/lib/data/parseSort.test.js +196 -187
  46. package/lib/data/resolvePagination.js +38 -39
  47. package/lib/data/resolvePagination.test.js +228 -218
  48. package/lib/data/types.d.js +2 -2
  49. package/lib/data/types.d.js.map +1 -1
  50. package/lib/dayjs/dayjs.js +20 -20
  51. package/lib/dayjs/formatDuration.js +56 -56
  52. package/lib/dayjs/formatDuration.js.map +1 -1
  53. package/lib/dayjs/formatDuration.test.js +63 -77
  54. package/lib/dayjs/index.js +4 -4
  55. package/lib/dayjs/parseDuration.js +21 -26
  56. package/lib/dayjs/parseRelativeTime.js +65 -66
  57. package/lib/dayjs/parseRelativeTime.test.js +227 -243
  58. package/lib/dayjs/resolveRelativeTime.js +74 -144
  59. package/lib/dayjs/resolveRelativeTime.js.map +1 -1
  60. package/lib/dayjs/resolveRelativeTime.test.js +296 -307
  61. package/lib/decimal/index.js +1 -1
  62. package/lib/decimal/parseDecimal.js +12 -12
  63. package/lib/drain3/Drain.js +321 -0
  64. package/lib/drain3/Drain.js.map +1 -0
  65. package/lib/drain3/LogCluster.js +38 -0
  66. package/lib/drain3/LogCluster.js.map +1 -0
  67. package/lib/drain3/Node.js +39 -0
  68. package/lib/drain3/Node.js.map +1 -0
  69. package/lib/drain3/TemplateMiner.js +205 -0
  70. package/lib/drain3/TemplateMiner.js.map +1 -0
  71. package/lib/drain3/index.js +31 -0
  72. package/lib/drain3/index.js.map +1 -0
  73. package/lib/drain3/persistence/FilePersistence.js +24 -0
  74. package/lib/drain3/persistence/FilePersistence.js.map +1 -0
  75. package/lib/drain3/persistence/MemoryPersistence.js +18 -0
  76. package/lib/drain3/persistence/MemoryPersistence.js.map +1 -0
  77. package/lib/drain3/persistence/PersistenceHandler.js +5 -0
  78. package/lib/drain3/persistence/PersistenceHandler.js.map +1 -0
  79. package/lib/drain3/types.js +7 -0
  80. package/lib/drain3/types.js.map +1 -0
  81. package/lib/emittery/emitter.js +7 -7
  82. package/lib/emittery/index.js +1 -1
  83. package/lib/foundation/schema/SexType.js +15 -12
  84. package/lib/foundation/schema/index.js +1 -1
  85. package/lib/foundation/schema/parseSexType.js +15 -16
  86. package/lib/foundation/schema/types.js +8 -6
  87. package/lib/fs/FileSystemError.js +18 -18
  88. package/lib/fs/IFileSystem.d.js +2 -2
  89. package/lib/fs/IFileSystem.d.js.map +1 -1
  90. package/lib/fs/MemoryFileSystem.test.js +172 -181
  91. package/lib/fs/createBrowserFileSystem.js +222 -233
  92. package/lib/fs/createBrowserFileSystem.js.map +1 -1
  93. package/lib/fs/createMemoryFileSystem.js +473 -510
  94. package/lib/fs/createMemoryFileSystem.js.map +1 -1
  95. package/lib/fs/createSandboxFileSystem.js +102 -101
  96. package/lib/fs/createSandboxFileSystem.js.map +1 -1
  97. package/lib/fs/createWebDavFileSystem.js +162 -132
  98. package/lib/fs/createWebDavFileSystem.js.map +1 -1
  99. package/lib/fs/createWebFileSystem.js +202 -0
  100. package/lib/fs/createWebFileSystem.js.map +1 -0
  101. package/lib/fs/findMimeType.js +14 -14
  102. package/lib/fs/findMimeType.js.map +1 -1
  103. package/lib/fs/index.js +7 -7
  104. package/lib/fs/index.js.map +1 -1
  105. package/lib/fs/minio/createMinioFileSystem.js +977 -0
  106. package/lib/fs/minio/createMinioFileSystem.js.map +1 -0
  107. package/lib/fs/minio/index.js +2 -0
  108. package/lib/fs/minio/index.js.map +1 -0
  109. package/lib/fs/orpc/FileSystemContract.js +57 -57
  110. package/lib/fs/orpc/createContractClientFileSystem.js +88 -88
  111. package/lib/fs/orpc/createContractClientFileSystem.js.map +1 -1
  112. package/lib/fs/orpc/index.js +2 -2
  113. package/lib/fs/orpc/server/createFileSystemContractImpl.js +62 -60
  114. package/lib/fs/orpc/server/createFileSystemContractImpl.js.map +1 -1
  115. package/lib/fs/orpc/server/index.js +1 -1
  116. package/lib/fs/s3/createS3MiniFileSystem.js +756 -689
  117. package/lib/fs/s3/createS3MiniFileSystem.js.map +1 -1
  118. package/lib/fs/s3/index.js +1 -1
  119. package/lib/fs/s3/s3mini.test.js +524 -553
  120. package/lib/fs/scandir.js +56 -56
  121. package/lib/fs/server/createDatabaseFileSystem.js +834 -741
  122. package/lib/fs/server/createDatabaseFileSystem.js.map +1 -1
  123. package/lib/fs/server/createNodeFileSystem.js +407 -380
  124. package/lib/fs/server/createNodeFileSystem.js.map +1 -1
  125. package/lib/fs/server/dbfs.test.js +201 -214
  126. package/lib/fs/server/index.js +1 -1
  127. package/lib/fs/server/loadTestDatabase.js +40 -43
  128. package/lib/fs/tests/runFileSystemTest.js +352 -315
  129. package/lib/fs/tests/runFileSystemTest.js.map +1 -1
  130. package/lib/fs/types.js +17 -20
  131. package/lib/fs/utils/getFileUrl.js +24 -30
  132. package/lib/fs/utils.js +17 -17
  133. package/lib/fs/utils.js.map +1 -1
  134. package/lib/fs/webdav/index.js +2 -0
  135. package/lib/fs/webdav/index.js.map +1 -0
  136. package/lib/index.js +2 -2
  137. package/lib/jsonschema/JsonSchema.js +216 -155
  138. package/lib/jsonschema/JsonSchema.js.map +1 -1
  139. package/lib/jsonschema/JsonSchema.test.js +123 -124
  140. package/lib/jsonschema/forEachJsonSchema.js +41 -41
  141. package/lib/jsonschema/forEachJsonSchema.js.map +1 -1
  142. package/lib/jsonschema/index.js +2 -2
  143. package/lib/jsonschema/types.d.js +2 -2
  144. package/lib/jsonschema/types.d.js.map +1 -1
  145. package/lib/meta/defineFileType.js +32 -38
  146. package/lib/meta/defineInit.js +39 -35
  147. package/lib/meta/defineMetadata.js +37 -34
  148. package/lib/meta/defineMetadata.js.map +1 -1
  149. package/lib/meta/defineMetadata.test.js +13 -12
  150. package/lib/meta/index.js +3 -3
  151. package/lib/orpc/createOpenApiContractClient.js +26 -24
  152. package/lib/orpc/createOpenApiContractClient.js.map +1 -1
  153. package/lib/orpc/createRpcContractClient.js +37 -31
  154. package/lib/orpc/index.js +2 -2
  155. package/lib/orpc/resolveLinkPlugins.js +25 -25
  156. package/lib/password/PHC.js +187 -189
  157. package/lib/password/PHC.js.map +1 -1
  158. package/lib/password/PHC.test.js +517 -535
  159. package/lib/password/Password.js +85 -80
  160. package/lib/password/Password.test.js +330 -364
  161. package/lib/password/createArgon2PasswordAlgorithm.js +50 -51
  162. package/lib/password/createArgon2PasswordAlgorithm.js.map +1 -1
  163. package/lib/password/createBase64PasswordAlgorithm.js +11 -11
  164. package/lib/password/createBase64PasswordAlgorithm.js.map +1 -1
  165. package/lib/password/createBcryptPasswordAlgorithm.js +20 -18
  166. package/lib/password/createBcryptPasswordAlgorithm.js.map +1 -1
  167. package/lib/password/createPBKDF2PasswordAlgorithm.js +65 -52
  168. package/lib/password/createPBKDF2PasswordAlgorithm.js.map +1 -1
  169. package/lib/password/createScryptPasswordAlgorithm.js +74 -63
  170. package/lib/password/createScryptPasswordAlgorithm.js.map +1 -1
  171. package/lib/password/index.js +5 -5
  172. package/lib/password/server/index.js +1 -1
  173. package/lib/resource/Identifiable.js +2 -2
  174. package/lib/resource/ListQuery.js +42 -42
  175. package/lib/resource/ListQuery.js.map +1 -1
  176. package/lib/resource/getTitleOfResource.js +5 -5
  177. package/lib/resource/index.js +2 -2
  178. package/lib/resource/index.js.map +1 -1
  179. package/lib/resource/schema/AnyResourceSchema.js +91 -89
  180. package/lib/resource/schema/BaseResourceSchema.js +26 -26
  181. package/lib/resource/schema/ResourceActionType.js +117 -115
  182. package/lib/resource/schema/ResourceStatus.js +94 -92
  183. package/lib/resource/schema/ResourceType.js +25 -23
  184. package/lib/resource/schema/index.js +5 -5
  185. package/lib/resource/schema/types.js +86 -55
  186. package/lib/resource/schema/types.test.js +16 -13
  187. package/lib/s3/formatS3Url.js +60 -60
  188. package/lib/s3/formatS3Url.js.map +1 -1
  189. package/lib/s3/formatS3Url.test.js +238 -261
  190. package/lib/s3/index.js +2 -2
  191. package/lib/s3/parseS3Url.js +61 -60
  192. package/lib/s3/parseS3Url.js.map +1 -1
  193. package/lib/s3/parseS3Url.test.js +270 -269
  194. package/lib/schema/SchemaRegistry.js +41 -42
  195. package/lib/schema/SchemaRegistry.js.map +1 -1
  196. package/lib/schema/SchemaRegistry.mod.js +1 -1
  197. package/lib/schema/TypeSchema.d.js +2 -2
  198. package/lib/schema/TypeSchema.d.js.map +1 -1
  199. package/lib/schema/createSchemaData.js +113 -67
  200. package/lib/schema/createSchemaData.js.map +1 -1
  201. package/lib/schema/findJsonSchemaByPath.js +28 -23
  202. package/lib/schema/findJsonSchemaByPath.js.map +1 -1
  203. package/lib/schema/formatZodError.js +113 -134
  204. package/lib/schema/formatZodError.js.map +1 -1
  205. package/lib/schema/formatZodError.test.js +192 -195
  206. package/lib/schema/getSchemaCache.js +7 -7
  207. package/lib/schema/getSchemaOptions.js +17 -16
  208. package/lib/schema/index.js +6 -6
  209. package/lib/schema/toJsonSchema.js +196 -190
  210. package/lib/schema/toJsonSchema.js.map +1 -1
  211. package/lib/schema/toJsonSchema.test.js +34 -26
  212. package/lib/schema/validate.js +106 -97
  213. package/lib/schema/validate.js.map +1 -1
  214. package/lib/tools/generateSchema.js +40 -40
  215. package/lib/tools/renderJsonSchemaToMarkdownDoc.js +74 -74
  216. package/lib/utils/buildBaseUrl.js +8 -8
  217. package/lib/utils/buildRedactorFormSchema.js +55 -54
  218. package/lib/utils/buildRedactorFormSchema.js.map +1 -1
  219. package/lib/utils/getEstimateProcessTime.js +24 -19
  220. package/lib/utils/index.js +3 -3
  221. package/lib/utils/resolveFeatureOptions.js +9 -9
  222. package/package.json +37 -18
  223. package/src/ai/qwen3vl/utils.ts +1 -1
  224. package/src/ai/vision/index.ts +2 -2
  225. package/src/cn/ChineseResidentIdNo.ts +1 -1
  226. package/src/cn/Mod11.ts +1 -1
  227. package/src/cn/__snapshots__/ChineseResidentIdNo.test.ts.snap +1 -1
  228. package/src/cn/__snapshots__/UnifiedSocialCreditCode.test.ts.snap +0 -23
  229. package/src/cn/index.ts +1 -2
  230. package/src/cn/parseChineseNumber.test.ts +4 -4
  231. package/src/consola/formatLogObject.ts +6 -6
  232. package/src/consola/index.ts +1 -1
  233. package/src/data/index.ts +3 -4
  234. package/src/data/maybeNumber.ts +1 -1
  235. package/src/data/parseSort.test.ts +0 -1
  236. package/src/data/resolvePagination.ts +2 -2
  237. package/src/data/types.d.ts +2 -2
  238. package/src/dayjs/formatDuration.ts +10 -11
  239. package/src/dayjs/index.ts +1 -1
  240. package/src/dayjs/parseRelativeTime.ts +1 -1
  241. package/src/dayjs/resolveRelativeTime.ts +11 -14
  242. package/src/drain3/Drain.test.ts +378 -0
  243. package/src/drain3/Drain.ts +394 -0
  244. package/src/drain3/LogCluster.ts +46 -0
  245. package/src/drain3/Node.ts +53 -0
  246. package/src/drain3/TemplateMiner.ts +246 -0
  247. package/src/drain3/index.ts +34 -0
  248. package/src/drain3/persistence/FilePersistence.ts +24 -0
  249. package/src/drain3/persistence/MemoryPersistence.ts +23 -0
  250. package/src/drain3/persistence/PersistenceHandler.ts +19 -0
  251. package/src/drain3/types.ts +75 -0
  252. package/src/fs/IFileSystem.d.ts +1 -2
  253. package/src/fs/createBrowserFileSystem.ts +7 -5
  254. package/src/fs/createMemoryFileSystem.ts +9 -13
  255. package/src/fs/createSandboxFileSystem.ts +1 -1
  256. package/src/fs/createWebDavFileSystem.ts +30 -17
  257. package/src/fs/createWebFileSystem.ts +242 -0
  258. package/src/fs/findMimeType.ts +1 -4
  259. package/src/fs/index.ts +5 -5
  260. package/src/fs/minio/createMinioFileSystem.ts +1148 -0
  261. package/src/fs/minio/index.ts +1 -0
  262. package/src/fs/orpc/createContractClientFileSystem.ts +5 -5
  263. package/src/fs/orpc/server/createFileSystemContractImpl.ts +1 -1
  264. package/src/fs/s3/createS3MiniFileSystem.ts +120 -79
  265. package/src/fs/s3/s3fs.test.ts +441 -0
  266. package/src/fs/s3/s3mini.test.ts +2 -2
  267. package/src/fs/server/createDatabaseFileSystem.ts +78 -114
  268. package/src/fs/server/createNodeFileSystem.ts +32 -13
  269. package/src/fs/server/dbfs.test.ts +13 -8
  270. package/src/fs/server/index.ts +1 -0
  271. package/src/fs/server/loadTestDatabase.ts +8 -119
  272. package/src/fs/tests/runFileSystemTest.ts +29 -28
  273. package/src/fs/utils.ts +1 -1
  274. package/src/fs/webdav/index.ts +1 -0
  275. package/src/jsonschema/JsonSchema.ts +5 -5
  276. package/src/jsonschema/forEachJsonSchema.ts +1 -1
  277. package/src/jsonschema/index.ts +1 -1
  278. package/src/jsonschema/types.d.ts +1 -1
  279. package/src/meta/defineMetadata.ts +1 -1
  280. package/src/meta/index.ts +2 -3
  281. package/src/orm/createSqliteDialect.ts +17 -0
  282. package/src/orm/index.ts +1 -0
  283. package/src/orpc/createOpenApiContractClient.ts +3 -3
  284. package/src/orpc/index.ts +1 -1
  285. package/src/password/PHC.ts +3 -3
  286. package/src/password/createArgon2PasswordAlgorithm.ts +2 -2
  287. package/src/password/createBase64PasswordAlgorithm.ts +2 -2
  288. package/src/password/createBcryptPasswordAlgorithm.ts +4 -2
  289. package/src/password/createPBKDF2PasswordAlgorithm.ts +2 -2
  290. package/src/password/createScryptPasswordAlgorithm.ts +4 -4
  291. package/src/password/index.ts +2 -2
  292. package/src/resource/ListQuery.ts +4 -1
  293. package/src/resource/index.ts +3 -3
  294. package/src/resource/schema/index.ts +4 -4
  295. package/src/s3/formatS3Url.test.ts +1 -1
  296. package/src/s3/formatS3Url.ts +2 -2
  297. package/src/s3/index.ts +1 -1
  298. package/src/s3/parseS3Url.ts +1 -1
  299. package/src/schema/SchemaRegistry.ts +2 -2
  300. package/src/schema/TypeSchema.d.ts +6 -6
  301. package/src/schema/createSchemaData.ts +5 -5
  302. package/src/schema/findJsonSchemaByPath.ts +5 -5
  303. package/src/schema/formatZodError.test.ts +2 -1
  304. package/src/schema/formatZodError.ts +50 -62
  305. package/src/schema/index.ts +5 -5
  306. package/src/schema/toJsonSchema.ts +6 -6
  307. package/src/schema/validate.ts +2 -2
  308. package/src/utils/buildRedactorFormSchema.ts +4 -4
  309. package/src/utils/formatNumber.ts +18 -0
  310. package/src/utils/formatPercent.ts +17 -0
  311. package/src/utils/index.ts +3 -3
  312. package/src/utils/resolveFeatureOptions.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dayjs/formatDuration.ts"],"sourcesContent":["import { type OpUnitType, type UnitTypeLongPlural } from 'dayjs';\nimport { type Duration } from 'dayjs/plugin/duration';\nimport { parseDuration } from './parseDuration';\n\ntype FormatDurationOptions = {\n\thumanize?: boolean;\n\tformat?: string | 'human' | 'humanize' | 'iso' | 'auto';\n\tiso?: boolean;\n};\n\nexport type MaybeDuration =\n\t| number\n\t| string\n\t| Duration\n\t| Partial<{\n\t\t\t[unit in Exclude<UnitTypeLongPlural, 'dates'> | 'weeks']: number;\n\t }>\n\t| {\n\t\t\tvalue: number;\n\t\t\tunit?: Exclude<OpUnitType, 'date' | 'dates'>;\n\t }\n\t| undefined\n\t| null;\n\nexport function formatDuration(value: MaybeDuration, o?: FormatDurationOptions): string | undefined {\n\tconst v = parseDuration(value);\n\tif (v === undefined || v === null) {\n\t\treturn;\n\t}\n\n\tlet { format, humanize, iso } = o || {};\n\t// Use local variables instead of modifying o directly\n\tswitch (format) {\n\t\tcase 'human':\n\t\tcase 'humanize':\n\t\t\thumanize = true;\n\t\t\tformat = undefined;\n\t\t\tbreak;\n\t\tcase 'iso':\n\t\t\tiso = true;\n\t\t\tformat = undefined;\n\t\t\tbreak;\n\t\tcase 'auto':\n\t\t\tformat = undefined;\n\t\t\tbreak;\n\t}\n\n\tif (humanize) {\n\t\treturn v.humanize();\n\t}\n\tif (iso) {\n\t\treturn v.toISOString();\n\t}\n\tif (format) {\n\t\treturn v.format(format);\n\t}\n\n\t// auto format\n\t// 1h2m3s\n\tif (v.asDays() > 1) {\n\t\tlet s = v.toISOString();\n\t\treturn s.replace('P', '').replace('T', '').toLowerCase();\n\t}\n\n\t{\n\t\tlet parts: string[] = [];\n\t\tlet h = v.hours();\n\t\tlet m = v.minutes();\n\t\tlet s = v.seconds();\n\t\tlet ms = v.milliseconds();\n\n\t\tif (h > 0) {\n\t\t\tparts.push(`${h}h`);\n\t\t}\n\t\tif (m > 0) {\n\t\t\tparts.push(`${m}m`);\n\t\t}\n\t\tif (s > 0) {\n\t\t\tparts.push(`${s}s`);\n\t\t}\n\t\tif (ms > 0 || (h === 0 && m === 0 && s === 0)) {\n\t\t\tparts.push(`${ms}ms`);\n\t\t}\n\t\treturn parts.join('');\n\t}\n}\n"],"names":["parseDuration","formatDuration","value","o","v","undefined","format","humanize","iso","toISOString","asDays","s","replace","toLowerCase","parts","h","hours","m","minutes","seconds","ms","milliseconds","push","join"],"mappings":"AAEA,SAASA,aAAa,QAAQ,kBAAkB;AAsBhD,OAAO,SAASC,eAAeC,KAAoB,EAAEC,CAAyB;IAC7E,MAAMC,IAAIJ,cAAcE;IACxB,IAAIE,MAAMC,aAAaD,MAAM,MAAM;QAClC;IACD;IAEA,IAAI,EAAEE,MAAM,EAAEC,QAAQ,EAAEC,GAAG,EAAE,GAAGL,KAAK,CAAC;IACtC,sDAAsD;IACtD,OAAQG;QACP,KAAK;QACL,KAAK;YACJC,WAAW;YACXD,SAASD;YACT;QACD,KAAK;YACJG,MAAM;YACNF,SAASD;YACT;QACD,KAAK;YACJC,SAASD;YACT;IACF;IAEA,IAAIE,UAAU;QACb,OAAOH,EAAEG,QAAQ;IAClB;IACA,IAAIC,KAAK;QACR,OAAOJ,EAAEK,WAAW;IACrB;IACA,IAAIH,QAAQ;QACX,OAAOF,EAAEE,MAAM,CAACA;IACjB;IAEA,cAAc;IACd,SAAS;IACT,IAAIF,EAAEM,MAAM,KAAK,GAAG;QACnB,IAAIC,IAAIP,EAAEK,WAAW;QACrB,OAAOE,EAAEC,OAAO,CAAC,KAAK,IAAIA,OAAO,CAAC,KAAK,IAAIC,WAAW;IACvD;IAEA;QACC,IAAIC,QAAkB,EAAE;QACxB,IAAIC,IAAIX,EAAEY,KAAK;QACf,IAAIC,IAAIb,EAAEc,OAAO;QACjB,IAAIP,IAAIP,EAAEe,OAAO;QACjB,IAAIC,KAAKhB,EAAEiB,YAAY;QAEvB,IAAIN,IAAI,GAAG;YACVD,MAAMQ,IAAI,CAAC,GAAGP,EAAE,CAAC,CAAC;QACnB;QACA,IAAIE,IAAI,GAAG;YACVH,MAAMQ,IAAI,CAAC,GAAGL,EAAE,CAAC,CAAC;QACnB;QACA,IAAIN,IAAI,GAAG;YACVG,MAAMQ,IAAI,CAAC,GAAGX,EAAE,CAAC,CAAC;QACnB;QACA,IAAIS,KAAK,KAAML,MAAM,KAAKE,MAAM,KAAKN,MAAM,GAAI;YAC9CG,MAAMQ,IAAI,CAAC,GAAGF,GAAG,EAAE,CAAC;QACrB;QACA,OAAON,MAAMS,IAAI,CAAC;IACnB;AACD"}
1
+ {"version":3,"sources":["../../src/dayjs/formatDuration.ts"],"sourcesContent":["import type { OpUnitType, UnitTypeLongPlural } from 'dayjs';\nimport type { Duration } from 'dayjs/plugin/duration';\nimport { parseDuration } from './parseDuration';\n\ntype FormatDurationOptions = {\n\thumanize?: boolean;\n\tformat?: string | 'human' | 'humanize' | 'iso' | 'auto';\n\tiso?: boolean;\n};\n\nexport type MaybeDuration =\n\t| number\n\t| string\n\t| Duration\n\t| Partial<{\n\t\t\t[unit in Exclude<UnitTypeLongPlural, 'dates'> | 'weeks']: number;\n\t }>\n\t| {\n\t\t\tvalue: number;\n\t\t\tunit?: Exclude<OpUnitType, 'date' | 'dates'>;\n\t }\n\t| undefined\n\t| null;\n\nexport function formatDuration(value: MaybeDuration, o?: FormatDurationOptions): string | undefined {\n\tconst v = parseDuration(value);\n\tif (v === undefined || v === null) {\n\t\treturn;\n\t}\n\n\tlet { format, humanize, iso } = o || {};\n\t// Use local variables instead of modifying o directly\n\tswitch (format) {\n\t\tcase 'human':\n\t\tcase 'humanize':\n\t\t\thumanize = true;\n\t\t\tformat = undefined;\n\t\t\tbreak;\n\t\tcase 'iso':\n\t\t\tiso = true;\n\t\t\tformat = undefined;\n\t\t\tbreak;\n\t\tcase 'auto':\n\t\t\tformat = undefined;\n\t\t\tbreak;\n\t}\n\n\tif (humanize) {\n\t\treturn v.humanize();\n\t}\n\tif (iso) {\n\t\treturn v.toISOString();\n\t}\n\tif (format) {\n\t\treturn v.format(format);\n\t}\n\n\t// auto format\n\t// 1h2m3s\n\tif (v.asDays() > 1) {\n\t\tlet s = v.toISOString();\n\t\treturn s.replace('P', '').replace('T', '').toLowerCase();\n\t}\n\n\t{\n\t\tlet parts: string[] = [];\n\t\tlet h = v.hours();\n\t\tlet m = v.minutes();\n\t\tlet s = v.seconds();\n\t\tlet ms = v.milliseconds();\n\n\t\tif (h > 0) {\n\t\t\tparts.push(`${h}h`);\n\t\t}\n\t\tif (m > 0) {\n\t\t\tparts.push(`${m}m`);\n\t\t}\n\t\tif (s > 0) {\n\t\t\tparts.push(`${s}s`);\n\t\t}\n\t\tif (ms > 0 || (h === 0 && m === 0 && s === 0)) {\n\t\t\tparts.push(`${ms}ms`);\n\t\t}\n\t\treturn parts.join('');\n\t}\n}\n"],"names":["parseDuration","formatDuration","value","o","v","undefined","format","humanize","iso","toISOString","asDays","s","replace","toLowerCase","parts","h","hours","m","minutes","seconds","ms","milliseconds","push","join"],"mappings":"AAEA,SAASA,aAAa,QAAQ,kBAAkB;AAsBhD,OAAO,SAASC,eAAeC,KAAoB,EAAEC,CAAyB;IAC7E,MAAMC,IAAIJ,cAAcE;IACxB,IAAIE,MAAMC,aAAaD,MAAM,MAAM;QAClC;IACD;IAEA,IAAI,EAAEE,MAAM,EAAEC,QAAQ,EAAEC,GAAG,EAAE,GAAGL,KAAK,CAAC;IACtC,sDAAsD;IACtD,OAAQG;QACP,KAAK;QACL,KAAK;YACJC,WAAW;YACXD,SAASD;YACT;QACD,KAAK;YACJG,MAAM;YACNF,SAASD;YACT;QACD,KAAK;YACJC,SAASD;YACT;IACF;IAEA,IAAIE,UAAU;QACb,OAAOH,EAAEG,QAAQ;IAClB;IACA,IAAIC,KAAK;QACR,OAAOJ,EAAEK,WAAW;IACrB;IACA,IAAIH,QAAQ;QACX,OAAOF,EAAEE,MAAM,CAACA;IACjB;IAEA,cAAc;IACd,SAAS;IACT,IAAIF,EAAEM,MAAM,KAAK,GAAG;QACnB,IAAIC,IAAIP,EAAEK,WAAW;QACrB,OAAOE,EAAEC,OAAO,CAAC,KAAK,IAAIA,OAAO,CAAC,KAAK,IAAIC,WAAW;IACvD;IAEA;QACC,IAAIC,QAAkB,EAAE;QACxB,IAAIC,IAAIX,EAAEY,KAAK;QACf,IAAIC,IAAIb,EAAEc,OAAO;QACjB,IAAIP,IAAIP,EAAEe,OAAO;QACjB,IAAIC,KAAKhB,EAAEiB,YAAY;QAEvB,IAAIN,IAAI,GAAG;YACVD,MAAMQ,IAAI,CAAC,GAAGP,EAAE,CAAC,CAAC;QACnB;QACA,IAAIE,IAAI,GAAG;YACVH,MAAMQ,IAAI,CAAC,GAAGL,EAAE,CAAC,CAAC;QACnB;QACA,IAAIN,IAAI,GAAG;YACVG,MAAMQ,IAAI,CAAC,GAAGX,EAAE,CAAC,CAAC;QACnB;QACA,IAAIS,KAAK,KAAML,MAAM,KAAKE,MAAM,KAAKN,MAAM,GAAI;YAC9CG,MAAMQ,IAAI,CAAC,GAAGF,GAAG,EAAE,CAAC;QACrB;QACA,OAAON,MAAMS,IAAI,CAAC;IACnB;AACD"}
@@ -1,90 +1,76 @@
1
1
  function _array_like_to_array(arr, len) {
2
- if (len == null || len > arr.length)
3
- len = arr.length;
4
- for (var i = 0, arr2 = new Array(len); i < len; i++)
5
- arr2[i] = arr[i];
6
- return arr2;
2
+ if (len == null || len > arr.length) len = arr.length;
3
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
4
+ return arr2;
7
5
  }
8
6
  function _array_with_holes(arr) {
9
- if (Array.isArray(arr))
10
- return arr;
7
+ if (Array.isArray(arr)) return arr;
11
8
  }
12
9
  function _iterable_to_array_limit(arr, i) {
13
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
14
- if (_i == null)
15
- return;
16
- var _arr = [];
17
- var _n = true;
18
- var _d = false;
19
- var _s, _e;
20
- try {
21
- for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
22
- _arr.push(_s.value);
23
- if (i && _arr.length === i)
24
- break;
25
- }
26
- }
27
- catch (err) {
28
- _d = true;
29
- _e = err;
30
- }
31
- finally {
32
- try {
33
- if (!_n && _i["return"] != null)
34
- _i["return"]();
35
- }
36
- finally {
37
- if (_d)
38
- throw _e;
39
- }
40
- }
41
- return _arr;
10
+ var _i = arr == null ? null : (typeof Symbol !== 'undefined' && arr[Symbol.iterator]) || arr['@@iterator'];
11
+ if (_i == null) return;
12
+ var _arr = [];
13
+ var _n = true;
14
+ var _d = false;
15
+ var _s, _e;
16
+ try {
17
+ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
18
+ _arr.push(_s.value);
19
+ if (i && _arr.length === i) break;
20
+ }
21
+ } catch (err) {
22
+ _d = true;
23
+ _e = err;
24
+ } finally {
25
+ try {
26
+ if (!_n && _i['return'] != null) _i['return']();
27
+ } finally {
28
+ if (_d) throw _e;
29
+ }
30
+ }
31
+ return _arr;
42
32
  }
43
33
  function _non_iterable_rest() {
44
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
34
+ throw new TypeError(
35
+ 'Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.',
36
+ );
45
37
  }
46
38
  function _sliced_to_array(arr, i) {
47
- return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
39
+ return (
40
+ _array_with_holes(arr) ||
41
+ _iterable_to_array_limit(arr, i) ||
42
+ _unsupported_iterable_to_array(arr, i) ||
43
+ _non_iterable_rest()
44
+ );
48
45
  }
49
46
  function _unsupported_iterable_to_array(o, minLen) {
50
- if (!o)
51
- return;
52
- if (typeof o === "string")
53
- return _array_like_to_array(o, minLen);
54
- var n = Object.prototype.toString.call(o).slice(8, -1);
55
- if (n === "Object" && o.constructor)
56
- n = o.constructor.name;
57
- if (n === "Map" || n === "Set")
58
- return Array.from(n);
59
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
60
- return _array_like_to_array(o, minLen);
47
+ if (!o) return;
48
+ if (typeof o === 'string') return _array_like_to_array(o, minLen);
49
+ var n = Object.prototype.toString.call(o).slice(8, -1);
50
+ if (n === 'Object' && o.constructor) n = o.constructor.name;
51
+ if (n === 'Map' || n === 'Set') return Array.from(n);
52
+ if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
61
53
  }
62
- import { expect, test } from "vitest";
63
- import { formatDuration } from "./formatDuration.js";
64
- test("formatDuration", function () {
65
- for (var _i = 0, _iter = [
66
- [
67
- 0,
68
- "0ms"
69
- ],
70
- [
71
- 1000,
72
- "1s"
73
- ],
74
- [
75
- 1000 * 60,
76
- "1m"
77
- ],
78
- [
79
- 1000 * 60 + 1000,
80
- "1m1s"
81
- ],
82
- [
83
- 1000 * 60 + 1000 + 1,
84
- "1m1s1ms"
85
- ]
86
- ]; _i < _iter.length; _i++) {
87
- var _iter__i = _sliced_to_array(_iter[_i], 2), a = _iter__i[0], b = _iter__i[1];
88
- expect(formatDuration(a)).toBe(b);
89
- }
54
+
55
+ import { expect, test } from 'vitest';
56
+ import { formatDuration } from './formatDuration.js';
57
+
58
+ test('formatDuration', () => {
59
+ for (
60
+ var _i = 0,
61
+ _iter = [
62
+ [0, '0ms'],
63
+ [1000, '1s'],
64
+ [1000 * 60, '1m'],
65
+ [1000 * 60 + 1000, '1m1s'],
66
+ [1000 * 60 + 1000 + 1, '1m1s1ms'],
67
+ ];
68
+ _i < _iter.length;
69
+ _i++
70
+ ) {
71
+ var _iter__i = _sliced_to_array(_iter[_i], 2),
72
+ a = _iter__i[0],
73
+ b = _iter__i[1];
74
+ expect(formatDuration(a)).toBe(b);
75
+ }
90
76
  });
@@ -1,5 +1,5 @@
1
- export { dayjs } from "./dayjs.js";
2
- export { parseDuration } from "./parseDuration.js";
3
- export { formatDuration } from "./formatDuration.js";
4
- export { resolveRelativeTime } from "./resolveRelativeTime.js";
1
+ export { dayjs } from './dayjs.js';
2
+ export { formatDuration } from './formatDuration.js';
3
+ export { parseDuration } from './parseDuration.js';
4
+ export { resolveRelativeTime } from './resolveRelativeTime.js';
5
5
  //# sourceMappingURL=index.js.map
@@ -1,29 +1,24 @@
1
- import { dayjs } from "./dayjs.js";
1
+ import { dayjs } from './dayjs.js';
2
2
  export function parseDuration(value) {
3
- if (!value && value !== 0) {
4
- return;
5
- }
6
- let duration;
7
- if (typeof value === "number") {
8
- duration = dayjs.duration(value);
9
- }
10
- else if (typeof value === "string" && value.startsWith("P")) {
11
- // PT0S
12
- duration = dayjs.duration(value);
13
- }
14
- else if (typeof value === "object" && "value" in value) {
15
- duration = dayjs.duration(value.value, value.unit);
16
- }
17
- else if (dayjs.isDuration(value)) {
18
- duration = value;
19
- }
20
- else if (typeof value === "object") {
21
- duration = dayjs.duration(value);
22
- }
23
- else {
24
- console.warn(`Invalid duration value:`, value);
25
- return;
26
- }
27
- return duration;
3
+ if (!value && value !== 0) {
4
+ return;
5
+ }
6
+ let duration;
7
+ if (typeof value === 'number') {
8
+ duration = dayjs.duration(value);
9
+ } else if (typeof value === 'string' && value.startsWith('P')) {
10
+ // PT0S
11
+ duration = dayjs.duration(value);
12
+ } else if (typeof value === 'object' && 'value' in value) {
13
+ duration = dayjs.duration(value.value, value.unit);
14
+ } else if (dayjs.isDuration(value)) {
15
+ duration = value;
16
+ } else if (typeof value === 'object') {
17
+ duration = dayjs.duration(value);
18
+ } else {
19
+ console.warn(`Invalid duration value:`, value);
20
+ return;
21
+ }
22
+ return duration;
28
23
  }
29
24
  //# sourceMappingURL=parseDuration.js.map
@@ -1,5 +1,5 @@
1
- import dayjs from "dayjs";
2
- import { checkDurationUnit, RelativeDurationUnits } from "./resolveRelativeTime.js";
1
+ import dayjs from 'dayjs';
2
+ import { checkDurationUnit, RelativeDurationUnits } from './resolveRelativeTime.js';
3
3
  /**
4
4
  * Parses a relative time string and returns an array of operations.
5
5
  *
@@ -17,74 +17,73 @@ import { checkDurationUnit, RelativeDurationUnits } from "./resolveRelativeTime.
17
17
  * parseRelativeTime('now+500ms') // [{ operator: '+', duration: dayjs.duration(500, 'ms') }]
18
18
  * ```
19
19
  */ export function parseRelativeTime(s) {
20
- if (typeof s !== "string" || !s.startsWith("now")) {
21
- throw new Error(`Invalid relative time format: ${s}`);
22
- }
23
- const remaining = s.slice(3); // Remove 'now'
24
- if (!remaining) {
25
- return [];
26
- }
27
- const operations = [];
28
- // Single regex to match all operations: <op><duration_spec> or <op><unit>
29
- // Where duration_spec can be: 1h, 1d6h, 500ms, etc.
30
- const operationRegex = /([+\-/\\])([^+\-/\\]+)/g;
31
- let match;
32
- let lastIndex = 0;
33
- while ((match = operationRegex.exec(remaining)) !== null) {
34
- const [, operator, operand] = match;
35
- if (operator === "/" || operator === "\\") {
36
- // Truncation operation - single unit only
37
- checkDurationUnit(operand.trim());
38
- operations.push({
39
- operator: operator,
40
- unit: operand.trim()
41
- });
42
- }
43
- else {
44
- // Addition or subtraction operation - parse complex duration
45
- const parsedDuration = parseDurationSpec(operand.trim());
46
- operations.push({
47
- operator: operator,
48
- duration: parsedDuration
49
- });
50
- }
51
- lastIndex = operationRegex.lastIndex;
52
- }
53
- // Check if we parsed the entire remaining string
54
- if (lastIndex < remaining.length) {
55
- throw new Error(`Invalid relative time format: ${s}`);
56
- }
57
- return operations;
20
+ if (typeof s !== 'string' || !s.startsWith('now')) {
21
+ throw new Error(`Invalid relative time format: ${s}`);
22
+ }
23
+ const remaining = s.slice(3); // Remove 'now'
24
+ if (!remaining) {
25
+ return [];
26
+ }
27
+ const operations = [];
28
+ // Single regex to match all operations: <op><duration_spec> or <op><unit>
29
+ // Where duration_spec can be: 1h, 1d6h, 500ms, etc.
30
+ const operationRegex = /([+\-/\\])([^+\-/\\]+)/g;
31
+ let match;
32
+ let lastIndex = 0;
33
+ while ((match = operationRegex.exec(remaining)) !== null) {
34
+ const [, operator, operand] = match;
35
+ if (operator === '/' || operator === '\\') {
36
+ // Truncation operation - single unit only
37
+ checkDurationUnit(operand.trim());
38
+ operations.push({
39
+ operator: operator,
40
+ unit: operand.trim(),
41
+ });
42
+ } else {
43
+ // Addition or subtraction operation - parse complex duration
44
+ const parsedDuration = parseDurationSpec(operand.trim());
45
+ operations.push({
46
+ operator: operator,
47
+ duration: parsedDuration,
48
+ });
49
+ }
50
+ lastIndex = operationRegex.lastIndex;
51
+ }
52
+ // Check if we parsed the entire remaining string
53
+ if (lastIndex < remaining.length) {
54
+ throw new Error(`Invalid relative time format: ${s}`);
55
+ }
56
+ return operations;
58
57
  }
59
58
  /**
60
59
  * Parses a duration specification like "1h", "1d6h", "500ms" into a dayjs Duration.
61
60
  * Supports multiple units in a single specification.
62
61
  */ function parseDurationSpec(spec) {
63
- // Match all number+unit pairs: 1d, 6h, 30m, 500ms, etc.
64
- const durationRegex = /(\d+)(ms|[smhdwMQy])/g;
65
- const durationObj = {};
66
- let match;
67
- let hasMatch = false;
68
- while ((match = durationRegex.exec(spec)) !== null) {
69
- const [, amountStr, unit] = match;
70
- checkDurationUnit(unit);
71
- const amount = parseInt(amountStr, 10);
72
- // Dayjs duration supports unit strings directly
73
- durationObj[unit] = (durationObj[unit] || 0) + amount;
74
- hasMatch = true;
75
- }
76
- if (!hasMatch) {
77
- // Check if there are invalid units by looking for number+invalid_unit patterns
78
- const invalidUnitRegex = /\d+([a-zA-Z]+)/g;
79
- let invalidMatch;
80
- while ((invalidMatch = invalidUnitRegex.exec(spec)) !== null) {
81
- const [, unit] = invalidMatch;
82
- if (!RelativeDurationUnits.includes(unit)) {
83
- throw new Error(`Invalid unit: ${unit}`);
84
- }
85
- }
86
- throw new Error(`Invalid duration specification: ${spec}`);
87
- }
88
- return dayjs.duration(durationObj);
62
+ // Match all number+unit pairs: 1d, 6h, 30m, 500ms, etc.
63
+ const durationRegex = /(\d+)(ms|[smhdwMQy])/g;
64
+ const durationObj = {};
65
+ let match;
66
+ let hasMatch = false;
67
+ while ((match = durationRegex.exec(spec)) !== null) {
68
+ const [, amountStr, unit] = match;
69
+ checkDurationUnit(unit);
70
+ const amount = parseInt(amountStr, 10);
71
+ // Dayjs duration supports unit strings directly
72
+ durationObj[unit] = (durationObj[unit] || 0) + amount;
73
+ hasMatch = true;
74
+ }
75
+ if (!hasMatch) {
76
+ // Check if there are invalid units by looking for number+invalid_unit patterns
77
+ const invalidUnitRegex = /\d+([a-zA-Z]+)/g;
78
+ let invalidMatch;
79
+ while ((invalidMatch = invalidUnitRegex.exec(spec)) !== null) {
80
+ const [, unit] = invalidMatch;
81
+ if (!RelativeDurationUnits.includes(unit)) {
82
+ throw new Error(`Invalid unit: ${unit}`);
83
+ }
84
+ }
85
+ throw new Error(`Invalid duration specification: ${spec}`);
86
+ }
87
+ return dayjs.duration(durationObj);
89
88
  }
90
89
  //# sourceMappingURL=parseRelativeTime.js.map