@visulima/humanizer 1.1.2 → 1.2.1

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 (339) hide show
  1. package/README.md +107 -26
  2. package/dist/index.cjs +3 -1
  3. package/dist/index.d.cts +5 -3
  4. package/dist/index.d.mts +5 -3
  5. package/dist/index.d.ts +5 -3
  6. package/dist/index.mjs +2 -1
  7. package/dist/language/af.cjs +25 -1
  8. package/dist/language/af.d.cts +1 -1
  9. package/dist/language/af.d.mts +1 -1
  10. package/dist/language/af.d.ts +1 -1
  11. package/dist/language/af.mjs +25 -1
  12. package/dist/language/am.cjs +29 -1
  13. package/dist/language/am.d.cts +1 -1
  14. package/dist/language/am.d.mts +1 -1
  15. package/dist/language/am.d.ts +1 -1
  16. package/dist/language/am.mjs +29 -1
  17. package/dist/language/ar.cjs +25 -3
  18. package/dist/language/ar.d.cts +5 -2
  19. package/dist/language/ar.d.mts +5 -2
  20. package/dist/language/ar.d.ts +5 -2
  21. package/dist/language/ar.mjs +25 -3
  22. package/dist/language/bg.cjs +25 -1
  23. package/dist/language/bg.d.cts +1 -1
  24. package/dist/language/bg.d.mts +1 -1
  25. package/dist/language/bg.d.ts +1 -1
  26. package/dist/language/bg.mjs +25 -1
  27. package/dist/language/bn.cjs +29 -1
  28. package/dist/language/bn.d.cts +1 -1
  29. package/dist/language/bn.d.mts +1 -1
  30. package/dist/language/bn.d.ts +1 -1
  31. package/dist/language/bn.mjs +29 -1
  32. package/dist/language/ca.cjs +25 -1
  33. package/dist/language/ca.d.cts +1 -1
  34. package/dist/language/ca.d.mts +1 -1
  35. package/dist/language/ca.d.ts +1 -1
  36. package/dist/language/ca.mjs +25 -1
  37. package/dist/language/ckb.cjs +29 -1
  38. package/dist/language/ckb.d.cts +1 -1
  39. package/dist/language/ckb.d.mts +1 -1
  40. package/dist/language/ckb.d.ts +1 -1
  41. package/dist/language/ckb.mjs +29 -1
  42. package/dist/language/cs.cjs +36 -1
  43. package/dist/language/cs.d.cts +1 -1
  44. package/dist/language/cs.d.mts +1 -1
  45. package/dist/language/cs.d.ts +1 -1
  46. package/dist/language/cs.mjs +36 -1
  47. package/dist/language/cy.cjs +51 -1
  48. package/dist/language/cy.d.cts +1 -1
  49. package/dist/language/cy.d.mts +1 -1
  50. package/dist/language/cy.d.ts +1 -1
  51. package/dist/language/cy.mjs +51 -1
  52. package/dist/language/da.cjs +29 -1
  53. package/dist/language/da.d.cts +1 -1
  54. package/dist/language/da.d.mts +1 -1
  55. package/dist/language/da.d.ts +1 -1
  56. package/dist/language/da.mjs +29 -1
  57. package/dist/language/de.cjs +31 -1
  58. package/dist/language/de.d.cts +1 -1
  59. package/dist/language/de.d.mts +1 -1
  60. package/dist/language/de.d.ts +1 -1
  61. package/dist/language/de.mjs +31 -1
  62. package/dist/language/el.cjs +37 -1
  63. package/dist/language/el.d.cts +1 -1
  64. package/dist/language/el.d.mts +1 -1
  65. package/dist/language/el.d.ts +1 -1
  66. package/dist/language/el.mjs +37 -1
  67. package/dist/language/en.cjs +43 -1
  68. package/dist/language/en.d.cts +3 -2
  69. package/dist/language/en.d.mts +3 -2
  70. package/dist/language/en.d.ts +3 -2
  71. package/dist/language/en.mjs +43 -2
  72. package/dist/language/eo.cjs +31 -1
  73. package/dist/language/eo.d.cts +1 -1
  74. package/dist/language/eo.d.mts +1 -1
  75. package/dist/language/eo.d.ts +1 -1
  76. package/dist/language/eo.mjs +31 -1
  77. package/dist/language/es.cjs +30 -1
  78. package/dist/language/es.d.cts +1 -1
  79. package/dist/language/es.d.mts +1 -1
  80. package/dist/language/es.d.ts +1 -1
  81. package/dist/language/es.mjs +30 -1
  82. package/dist/language/et.cjs +31 -1
  83. package/dist/language/et.d.cts +1 -1
  84. package/dist/language/et.d.mts +1 -1
  85. package/dist/language/et.d.ts +1 -1
  86. package/dist/language/et.mjs +31 -1
  87. package/dist/language/eu.cjs +25 -1
  88. package/dist/language/eu.d.cts +1 -1
  89. package/dist/language/eu.d.mts +1 -1
  90. package/dist/language/eu.d.ts +1 -1
  91. package/dist/language/eu.mjs +25 -1
  92. package/dist/language/fa.cjs +34 -1
  93. package/dist/language/fa.d.cts +1 -1
  94. package/dist/language/fa.d.mts +1 -1
  95. package/dist/language/fa.d.ts +1 -1
  96. package/dist/language/fa.mjs +34 -1
  97. package/dist/language/fi.cjs +39 -1
  98. package/dist/language/fi.d.cts +1 -1
  99. package/dist/language/fi.d.mts +1 -1
  100. package/dist/language/fi.d.ts +1 -1
  101. package/dist/language/fi.mjs +39 -1
  102. package/dist/language/fo.cjs +32 -1
  103. package/dist/language/fo.d.cts +1 -1
  104. package/dist/language/fo.d.mts +1 -1
  105. package/dist/language/fo.d.ts +1 -1
  106. package/dist/language/fo.mjs +32 -1
  107. package/dist/language/fr.cjs +36 -1
  108. package/dist/language/fr.d.cts +1 -1
  109. package/dist/language/fr.d.mts +1 -1
  110. package/dist/language/fr.d.ts +1 -1
  111. package/dist/language/fr.mjs +36 -1
  112. package/dist/language/he.cjs +37 -1
  113. package/dist/language/he.d.cts +1 -1
  114. package/dist/language/he.d.mts +1 -1
  115. package/dist/language/he.d.ts +1 -1
  116. package/dist/language/he.mjs +37 -1
  117. package/dist/language/hi.cjs +40 -1
  118. package/dist/language/hi.d.cts +1 -1
  119. package/dist/language/hi.d.mts +1 -1
  120. package/dist/language/hi.d.ts +1 -1
  121. package/dist/language/hi.mjs +40 -1
  122. package/dist/language/hr.cjs +42 -1
  123. package/dist/language/hr.d.cts +1 -1
  124. package/dist/language/hr.d.mts +1 -1
  125. package/dist/language/hr.d.ts +1 -1
  126. package/dist/language/hr.mjs +42 -1
  127. package/dist/language/hu.cjs +47 -1
  128. package/dist/language/hu.d.cts +1 -1
  129. package/dist/language/hu.d.mts +1 -1
  130. package/dist/language/hu.d.ts +1 -1
  131. package/dist/language/hu.mjs +47 -1
  132. package/dist/language/id.cjs +46 -1
  133. package/dist/language/id.d.cts +1 -1
  134. package/dist/language/id.d.mts +1 -1
  135. package/dist/language/id.d.ts +1 -1
  136. package/dist/language/id.mjs +46 -1
  137. package/dist/language/is.cjs +37 -1
  138. package/dist/language/is.d.cts +1 -1
  139. package/dist/language/is.d.mts +1 -1
  140. package/dist/language/is.d.ts +1 -1
  141. package/dist/language/is.mjs +37 -1
  142. package/dist/language/it.cjs +43 -9
  143. package/dist/language/it.d.cts +1 -1
  144. package/dist/language/it.d.mts +1 -1
  145. package/dist/language/it.d.ts +1 -1
  146. package/dist/language/it.mjs +43 -9
  147. package/dist/language/ja.cjs +43 -1
  148. package/dist/language/ja.d.cts +1 -1
  149. package/dist/language/ja.d.mts +1 -1
  150. package/dist/language/ja.d.ts +1 -1
  151. package/dist/language/ja.mjs +43 -1
  152. package/dist/language/km.cjs +53 -1
  153. package/dist/language/km.d.cts +1 -1
  154. package/dist/language/km.d.mts +1 -1
  155. package/dist/language/km.d.ts +1 -1
  156. package/dist/language/km.mjs +53 -1
  157. package/dist/language/kn.cjs +35 -1
  158. package/dist/language/kn.d.cts +1 -1
  159. package/dist/language/kn.d.mts +1 -1
  160. package/dist/language/kn.d.ts +1 -1
  161. package/dist/language/kn.mjs +35 -1
  162. package/dist/language/ko.cjs +38 -1
  163. package/dist/language/ko.d.cts +1 -1
  164. package/dist/language/ko.d.mts +1 -1
  165. package/dist/language/ko.d.ts +1 -1
  166. package/dist/language/ko.mjs +38 -1
  167. package/dist/language/ku.cjs +50 -1
  168. package/dist/language/ku.d.cts +1 -1
  169. package/dist/language/ku.d.mts +1 -1
  170. package/dist/language/ku.d.ts +1 -1
  171. package/dist/language/ku.mjs +50 -1
  172. package/dist/language/lo.cjs +54 -1
  173. package/dist/language/lo.d.cts +1 -1
  174. package/dist/language/lo.d.mts +1 -1
  175. package/dist/language/lo.d.ts +1 -1
  176. package/dist/language/lo.mjs +54 -1
  177. package/dist/language/lt.cjs +44 -1
  178. package/dist/language/lt.d.cts +1 -1
  179. package/dist/language/lt.d.mts +1 -1
  180. package/dist/language/lt.d.ts +1 -1
  181. package/dist/language/lt.mjs +44 -1
  182. package/dist/language/lv.cjs +38 -1
  183. package/dist/language/lv.d.cts +1 -1
  184. package/dist/language/lv.d.mts +1 -1
  185. package/dist/language/lv.d.ts +1 -1
  186. package/dist/language/lv.mjs +38 -1
  187. package/dist/language/mk.cjs +39 -1
  188. package/dist/language/mk.d.cts +1 -1
  189. package/dist/language/mk.d.mts +1 -1
  190. package/dist/language/mk.d.ts +1 -1
  191. package/dist/language/mk.mjs +39 -1
  192. package/dist/language/mn.cjs +42 -1
  193. package/dist/language/mn.d.cts +1 -1
  194. package/dist/language/mn.d.mts +1 -1
  195. package/dist/language/mn.d.ts +1 -1
  196. package/dist/language/mn.mjs +42 -1
  197. package/dist/language/mr.cjs +29 -2
  198. package/dist/language/mr.d.cts +1 -1
  199. package/dist/language/mr.d.mts +1 -1
  200. package/dist/language/mr.d.ts +1 -1
  201. package/dist/language/mr.mjs +29 -2
  202. package/dist/language/ms.cjs +45 -1
  203. package/dist/language/ms.d.cts +1 -1
  204. package/dist/language/ms.d.mts +1 -1
  205. package/dist/language/ms.d.ts +1 -1
  206. package/dist/language/ms.mjs +45 -1
  207. package/dist/language/nl.cjs +34 -1
  208. package/dist/language/nl.d.cts +1 -1
  209. package/dist/language/nl.d.mts +1 -1
  210. package/dist/language/nl.d.ts +1 -1
  211. package/dist/language/nl.mjs +34 -1
  212. package/dist/language/no.cjs +31 -1
  213. package/dist/language/no.d.cts +1 -1
  214. package/dist/language/no.d.mts +1 -1
  215. package/dist/language/no.d.ts +1 -1
  216. package/dist/language/no.mjs +31 -1
  217. package/dist/language/pl.cjs +45 -1
  218. package/dist/language/pl.d.cts +1 -1
  219. package/dist/language/pl.d.mts +1 -1
  220. package/dist/language/pl.d.ts +1 -1
  221. package/dist/language/pl.mjs +45 -1
  222. package/dist/language/pt.cjs +34 -1
  223. package/dist/language/pt.d.cts +1 -1
  224. package/dist/language/pt.d.mts +1 -1
  225. package/dist/language/pt.d.ts +1 -1
  226. package/dist/language/pt.mjs +34 -1
  227. package/dist/language/ro.cjs +37 -1
  228. package/dist/language/ro.d.cts +1 -1
  229. package/dist/language/ro.d.mts +1 -1
  230. package/dist/language/ro.d.ts +1 -1
  231. package/dist/language/ro.mjs +37 -1
  232. package/dist/language/ru.cjs +42 -1
  233. package/dist/language/ru.d.cts +1 -1
  234. package/dist/language/ru.d.mts +1 -1
  235. package/dist/language/ru.d.ts +1 -1
  236. package/dist/language/ru.mjs +42 -1
  237. package/dist/language/sk.cjs +47 -1
  238. package/dist/language/sk.d.cts +1 -1
  239. package/dist/language/sk.d.mts +1 -1
  240. package/dist/language/sk.d.ts +1 -1
  241. package/dist/language/sk.mjs +47 -1
  242. package/dist/language/sl.cjs +45 -1
  243. package/dist/language/sl.d.cts +1 -1
  244. package/dist/language/sl.d.mts +1 -1
  245. package/dist/language/sl.d.ts +1 -1
  246. package/dist/language/sl.mjs +45 -1
  247. package/dist/language/sq.cjs +35 -1
  248. package/dist/language/sq.d.cts +1 -1
  249. package/dist/language/sq.d.mts +1 -1
  250. package/dist/language/sq.d.ts +1 -1
  251. package/dist/language/sq.mjs +35 -1
  252. package/dist/language/sr.cjs +66 -1
  253. package/dist/language/sr.d.cts +1 -1
  254. package/dist/language/sr.d.mts +1 -1
  255. package/dist/language/sr.d.ts +1 -1
  256. package/dist/language/sr.mjs +66 -1
  257. package/dist/language/sv.cjs +33 -1
  258. package/dist/language/sv.d.cts +1 -1
  259. package/dist/language/sv.d.mts +1 -1
  260. package/dist/language/sv.d.ts +1 -1
  261. package/dist/language/sv.mjs +33 -1
  262. package/dist/language/sw.cjs +33 -1
  263. package/dist/language/sw.d.cts +4 -1
  264. package/dist/language/sw.d.mts +4 -1
  265. package/dist/language/sw.d.ts +4 -1
  266. package/dist/language/sw.mjs +33 -1
  267. package/dist/language/ta.cjs +39 -1
  268. package/dist/language/ta.d.cts +1 -1
  269. package/dist/language/ta.d.mts +1 -1
  270. package/dist/language/ta.d.ts +1 -1
  271. package/dist/language/ta.mjs +39 -1
  272. package/dist/language/te.cjs +35 -1
  273. package/dist/language/te.d.cts +1 -1
  274. package/dist/language/te.d.mts +1 -1
  275. package/dist/language/te.d.ts +1 -1
  276. package/dist/language/te.mjs +35 -1
  277. package/dist/language/th.cjs +40 -1
  278. package/dist/language/th.d.cts +1 -1
  279. package/dist/language/th.d.mts +1 -1
  280. package/dist/language/th.d.ts +1 -1
  281. package/dist/language/th.mjs +40 -1
  282. package/dist/language/tr.cjs +38 -1
  283. package/dist/language/tr.d.cts +1 -1
  284. package/dist/language/tr.d.mts +1 -1
  285. package/dist/language/tr.d.ts +1 -1
  286. package/dist/language/tr.mjs +38 -1
  287. package/dist/language/uk.cjs +44 -1
  288. package/dist/language/uk.d.cts +1 -1
  289. package/dist/language/uk.d.mts +1 -1
  290. package/dist/language/uk.d.ts +1 -1
  291. package/dist/language/uk.mjs +44 -1
  292. package/dist/language/ur.cjs +42 -1
  293. package/dist/language/ur.d.cts +1 -1
  294. package/dist/language/ur.d.mts +1 -1
  295. package/dist/language/ur.d.ts +1 -1
  296. package/dist/language/ur.mjs +42 -1
  297. package/dist/language/util/create-duration-language.cjs +10 -1
  298. package/dist/language/util/create-duration-language.d.cts +2 -2
  299. package/dist/language/util/create-duration-language.d.mts +2 -2
  300. package/dist/language/util/create-duration-language.d.ts +2 -2
  301. package/dist/language/util/create-duration-language.mjs +10 -1
  302. package/dist/language/util/validate-duration-language.cjs +6 -0
  303. package/dist/language/util/validate-duration-language.d.cts +1 -1
  304. package/dist/language/util/validate-duration-language.d.mts +1 -1
  305. package/dist/language/util/validate-duration-language.d.ts +1 -1
  306. package/dist/language/util/validate-duration-language.mjs +6 -0
  307. package/dist/language/uz.cjs +39 -1
  308. package/dist/language/uz.d.cts +1 -1
  309. package/dist/language/uz.d.mts +1 -1
  310. package/dist/language/uz.d.ts +1 -1
  311. package/dist/language/uz.mjs +39 -1
  312. package/dist/language/uz_CYR.cjs +39 -1
  313. package/dist/language/uz_CYR.d.cts +1 -1
  314. package/dist/language/uz_CYR.d.mts +1 -1
  315. package/dist/language/uz_CYR.d.ts +1 -1
  316. package/dist/language/uz_CYR.mjs +39 -1
  317. package/dist/language/vi.cjs +30 -1
  318. package/dist/language/vi.d.cts +1 -1
  319. package/dist/language/vi.d.mts +1 -1
  320. package/dist/language/vi.d.ts +1 -1
  321. package/dist/language/vi.mjs +30 -1
  322. package/dist/language/zh_CN.cjs +35 -1
  323. package/dist/language/zh_CN.d.cts +1 -1
  324. package/dist/language/zh_CN.d.mts +1 -1
  325. package/dist/language/zh_CN.d.ts +1 -1
  326. package/dist/language/zh_CN.mjs +35 -1
  327. package/dist/language/zh_TW.cjs +35 -1
  328. package/dist/language/zh_TW.d.cts +1 -1
  329. package/dist/language/zh_TW.d.mts +1 -1
  330. package/dist/language/zh_TW.d.ts +1 -1
  331. package/dist/language/zh_TW.mjs +35 -1
  332. package/dist/packem_shared/{duration-f-II6vKb.cjs → duration-DYSJZCH0.cjs} +2 -2
  333. package/dist/packem_shared/{duration-CEv0RfYk.mjs → duration-jUX98xbn.mjs} +2 -2
  334. package/dist/packem_shared/parseDuration-Bp1J3FbZ.cjs +115 -0
  335. package/dist/packem_shared/parseDuration-N_JLGPIB.mjs +113 -0
  336. package/dist/packem_shared/{types-4Kt5giRg.d.ts → types-H2jJHSlI.d.cts} +8 -1
  337. package/dist/packem_shared/{types-4Kt5giRg.d.cts → types-H2jJHSlI.d.mts} +8 -1
  338. package/dist/packem_shared/{types-4Kt5giRg.d.mts → types-H2jJHSlI.d.ts} +8 -1
  339. package/package.json +1 -1
package/README.md CHANGED
@@ -46,7 +46,7 @@ pnpm add @visulima/humanizer
46
46
  Convert bytes to human-readable strings and vice versa: 1024 → 1KB and 1KB → 1024
47
47
 
48
48
  ```ts
49
- import { formatBytes, p } from "@visulima/humanizer";
49
+ import { formatBytes, parseBytes } from "@visulima/humanizer";
50
50
 
51
51
  console.log(formatBytes(123412341, { decimals: 2 })); // "117.70 MB"
52
52
  console.log(parseBytes("117.70 MB")); // 123417395.2
@@ -650,26 +650,60 @@ console.log(formatBytes(123412341, { decimals: 2, base: 10 })); // "123.41 MB"
650
650
 
651
651
  ### Duration
652
652
 
653
- > `duration` use a modified version of [HumanizeDuration](https://github.com/EvanHahn/HumanizeDuration.js).
653
+ > `duration` and `parseDuration` functionality is based on a modified version of [HumanizeDuration](https://github.com/EvanHahn/HumanizeDuration.js).
654
654
 
655
- I have the time in milliseconds and I want it to become "30 minutes" or "3 days, 1 hour".
655
+ Format time in milliseconds into a human-readable string like "30 minutes" or "3 days, 1 hour". Parse various human-readable duration strings back into milliseconds.
656
656
 
657
657
  ```ts
658
- import { duration } from "@visulima/humanizer";
658
+ import { duration, parseDuration } from "@visulima/humanizer";
659
+ import { durationLanguage as fr } from "@visulima/humanizer/language/fr"; // Example language import
659
660
 
660
- duration(3000);
661
+ // --- Formatting ---
662
+ console.log(duration(3000));
661
663
  // => "3 seconds"
662
664
 
663
- duration(2250);
665
+ console.log(duration(2250));
664
666
  // => "2.25 seconds"
665
667
 
666
- duration(97320000);
668
+ console.log(duration(97320000));
667
669
  // => "1 day, 3 hours, 2 minutes"
670
+
671
+ // --- Parsing ---
672
+ console.log(parseDuration("1 day, 3 hours, 2 minutes"));
673
+ // => 97320000
674
+
675
+ console.log(parseDuration("2h 30 min"));
676
+ // => 9000000
677
+
678
+ console.log(parseDuration("-3 weeks"));
679
+ // => -1814400000
680
+
681
+ console.log(parseDuration("1.5 years"));
682
+ // => 47335428000
683
+
684
+ // Parsing with different languages (requires language object with unitMap)
685
+ console.log(parseDuration("2 jours et 5 heures", { language: fr }));
686
+ // => 190800000
687
+
688
+ // Parsing colon format (H:MM:SS or MM:SS)
689
+ console.log(parseDuration("1:25:05"));
690
+ // => 5105000
691
+
692
+ console.log(parseDuration("15:30"));
693
+ // => 930000
694
+
695
+ // Parsing ISO 8601 duration format (PT#H#M#S)
696
+ console.log(parseDuration("PT2H30M5S"));
697
+ // => 9005000
698
+
699
+ // Parsing just numbers (uses defaultUnit)
700
+ console.log(parseDuration("1500")); // Default unit is 'ms'
701
+ // => 1500
668
702
  ```
669
703
 
670
- #### Options
704
+ #### Options for `duration`
671
705
 
672
- You can change the settings by passing options as the second argument.
706
+ You can change the formatting settings by passing options as the second argument to `duration`.
673
707
 
674
708
  ##### units
675
709
 
@@ -695,7 +729,7 @@ duration(3600000, { units: ["d", "h"] });
695
729
  // => "1 hour"
696
730
  ```
697
731
 
698
- #### largest
732
+ ##### largest
699
733
 
700
734
  Integer representing the maximum number of units to use.
701
735
 
@@ -709,7 +743,7 @@ duration(1000000000000, { largest: 2 });
709
743
  // => "31 years, 8 months"
710
744
  ```
711
745
 
712
- #### round
746
+ ##### round
713
747
 
714
748
  A boolean that, if `true`, rounds the smallest unit.
715
749
 
@@ -726,7 +760,7 @@ duration(1600, { round: true });
726
760
  // => "2 seconds"
727
761
  ```
728
762
 
729
- #### delimiter
763
+ ##### delimiter
730
764
 
731
765
  String to display between units.
732
766
 
@@ -740,7 +774,7 @@ duration(22140000, { delimiter: " and " });
740
774
  // => "6 hours and 9 minutes"
741
775
  ```
742
776
 
743
- #### spacer
777
+ ##### spacer
744
778
 
745
779
  String to display between the count and the word.
746
780
 
@@ -754,7 +788,7 @@ duration(260040000, { spacer: " whole " });
754
788
  // => "3 whole days, 14 whole minutes"
755
789
  ```
756
790
 
757
- #### decimal
791
+ ##### decimal
758
792
 
759
793
  String to display between the integer and decimal parts of a count, if relevant.
760
794
 
@@ -768,7 +802,7 @@ duration(1200, { decimal: " point " });
768
802
  // => "1 point 2 seconds"
769
803
  ```
770
804
 
771
- #### conjunction
805
+ ##### conjunction
772
806
 
773
807
  String to include before the final unit.
774
808
 
@@ -790,7 +824,7 @@ duration(22141000, { conjunction: " and ", serialComma: false });
790
824
  // => "6 hours, 9 minutes and 1 second"
791
825
  ```
792
826
 
793
- #### maxDecimalPoints
827
+ ##### maxDecimalPoints
794
828
 
795
829
  Integer that defines the maximum number of decimal points to show, if relevant. If `undefined`, the count will be converted to a string using [`Number.prototype.toString()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString).
796
830
 
@@ -815,7 +849,7 @@ duration(7999, { maxDecimalPoints: 2 });
815
849
  // => "7.99 seconds"
816
850
  ```
817
851
 
818
- #### digitReplacements
852
+ ##### digitReplacements
819
853
 
820
854
  Array of ten strings to which will replace the numerals 0-9. Useful if a language uses different numerals.
821
855
 
@@ -831,7 +865,7 @@ duration(1234, {
831
865
  // => "One.TwoThreeFour seconds"
832
866
  ```
833
867
 
834
- #### unitMeasures
868
+ ##### unitMeasures
835
869
 
836
870
  _Use this option with care. It is an advanced feature._
837
871
 
@@ -858,14 +892,13 @@ duration(2629800000, {
858
892
  // => "1 month, 10 hours, 30 minutes"
859
893
  ```
860
894
 
861
- #### language
895
+ ##### language
862
896
 
863
- Language for unit display.
864
- Accepts an [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) from one of the [supported languages](#supported-languages).
897
+ Language for unit display. Accepts an [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) from one of the [supported languages](#supported-languages), or a custom language object.
865
898
 
866
- Default: `"en"`.
899
+ Default: `en` (English language object).
867
900
 
868
- ```js
901
+ ```ts
869
902
  import { duration } from "@visulima/humanizer";
870
903
  import { durationLanguage as es } from "@visulima/humanizer/language/es";
871
904
  import { durationLanguage as ko } from "@visulima/humanizer/language/ko";
@@ -877,9 +910,57 @@ duration(5000, { language: ko });
877
910
  // => "5 초"
878
911
  ```
879
912
 
913
+ #### Options for `parseDuration`
914
+
915
+ You can pass options as the second argument to `parseDuration`.
916
+
917
+ ##### language
918
+
919
+ Language object containing the `unitMap` for parsing localized strings. See the `language` option for the `duration` function for details on how to import language objects.
920
+
921
+ If omitted or if the language object doesn't have a `unitMap`, parsing will only recognize standard English units (like "hour", "min", "d", "ms" etc.).
922
+
923
+ Default: English units.
924
+
925
+ ```ts
926
+ import { parseDuration } from "@visulima/humanizer";
927
+ import { durationLanguage as de } from "@visulima/humanizer/language/de";
928
+ import { durationLanguage as ru } from "@visulima/humanizer/language/ru";
929
+
930
+ // Without language option (or if unitMap is missing)
931
+ parseDuration("3 Stunden"); // => undefined
932
+ parseDuration("5 часов"); // => undefined
933
+
934
+ // With language option containing a unitMap
935
+ parseDuration("3 Stunden", { language: de });
936
+ // => 10800000
937
+
938
+ parseDuration("5 часов, 10 минут", { language: ru });
939
+ // => 18600000
940
+ ```
941
+
942
+ ##### defaultUnit
943
+
944
+ Specifies the unit to assume if the input string is just a number (without any units).
945
+
946
+ Possible values: `y`, `mo`, `w`, `d`, `h`, `m`, `s`, `ms`.
947
+
948
+ Default: `"ms"`
949
+
950
+ ```ts
951
+ parseDuration("1500");
952
+ // => 1500 (interpreted as 1500 ms)
953
+
954
+ parseDuration("1500", { defaultUnit: "s" });
955
+ // => 1500000 (interpreted as 1500 s)
956
+
957
+ parseDuration("-10", { defaultUnit: "d" });
958
+ // => -864000000 (interpreted as -10 days)
959
+ ```
960
+
880
961
  ###### Supported languages
881
962
 
882
- `duration` supports the following languages:
963
+ `duration` and `parseDuration` (when provided with a language object containing a `unitMap`) support the following languages:
883
964
 
884
965
  | Language | Code |
885
966
  | -------------------- | -------- |
@@ -960,8 +1041,8 @@ duration(5000, { language: ko });
960
1041
 
961
1042
  ## Supported Node.js Versions
962
1043
 
963
- Libraries in this ecosystem make the best effort to track [Node.js release schedule](https://github.com/nodejs/release#release-schedule).
964
- Heres [a post on why we think this is important](https://medium.com/the-node-js-collection/maintainers-should-consider-following-node-js-release-schedule-ab08ed4de71a).
1044
+ Libraries in this ecosystem make the best effort to track [Node.js' release schedule](https://github.com/nodejs/release#release-schedule).
1045
+ Here's [a post on why we think this is important](https://medium.com/the-node-js-collection/maintainers-should-consider-following-node-js-release-schedule-ab08ed4de71a).
965
1046
 
966
1047
  ## Contributing
967
1048
 
package/dist/index.cjs CHANGED
@@ -3,10 +3,12 @@
3
3
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
4
 
5
5
  const parseBytes = require('./packem_shared/parseBytes-0lZhif0J.cjs');
6
- const duration = require('./packem_shared/duration-f-II6vKb.cjs');
6
+ const duration = require('./packem_shared/duration-DYSJZCH0.cjs');
7
+ const parseDuration = require('./packem_shared/parseDuration-Bp1J3FbZ.cjs');
7
8
 
8
9
 
9
10
 
10
11
  exports.formatBytes = parseBytes.formatBytes;
11
12
  exports.parseBytes = parseBytes.parseBytes;
12
13
  exports.duration = duration;
14
+ exports.parseDuration = parseDuration;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as FormateByteOptions, P as ParseByteOptions, D as DurationOptions } from './packem_shared/types-4Kt5giRg.cjs';
2
- export { a as DurationDigitReplacements, b as DurationLanguage, c as DurationPiece, d as DurationUnit, e as DurationUnitMeasures, f as DurationUnitName, I as IntlLocale } from './packem_shared/types-4Kt5giRg.cjs';
1
+ import { F as FormateByteOptions, P as ParseByteOptions, D as DurationOptions, a as ParseDurationOptions } from './packem_shared/types-H2jJHSlI.cjs';
2
+ export { b as DurationDigitReplacements, c as DurationLanguage, d as DurationPiece, e as DurationUnit, f as DurationUnitMeasures, g as DurationUnitName, I as IntlLocale } from './packem_shared/types-H2jJHSlI.cjs';
3
3
 
4
4
  declare const BYTE_SIZES: {
5
5
  readonly iec: readonly [{
@@ -121,4 +121,6 @@ declare const formatBytes: (bytes: number, options?: FormateByteOptions<ByteSize
121
121
 
122
122
  declare const duration: (milliseconds: number, options?: DurationOptions) => string;
123
123
 
124
- export { DurationOptions, FormateByteOptions, ParseByteOptions, duration, formatBytes, parseBytes };
124
+ declare const parseDuration: (value: string, options?: ParseDurationOptions) => number | undefined;
125
+
126
+ export { DurationOptions, FormateByteOptions, ParseByteOptions, duration, formatBytes, parseBytes, parseDuration };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as FormateByteOptions, P as ParseByteOptions, D as DurationOptions } from './packem_shared/types-4Kt5giRg.mjs';
2
- export { a as DurationDigitReplacements, b as DurationLanguage, c as DurationPiece, d as DurationUnit, e as DurationUnitMeasures, f as DurationUnitName, I as IntlLocale } from './packem_shared/types-4Kt5giRg.mjs';
1
+ import { F as FormateByteOptions, P as ParseByteOptions, D as DurationOptions, a as ParseDurationOptions } from './packem_shared/types-H2jJHSlI.mjs';
2
+ export { b as DurationDigitReplacements, c as DurationLanguage, d as DurationPiece, e as DurationUnit, f as DurationUnitMeasures, g as DurationUnitName, I as IntlLocale } from './packem_shared/types-H2jJHSlI.mjs';
3
3
 
4
4
  declare const BYTE_SIZES: {
5
5
  readonly iec: readonly [{
@@ -121,4 +121,6 @@ declare const formatBytes: (bytes: number, options?: FormateByteOptions<ByteSize
121
121
 
122
122
  declare const duration: (milliseconds: number, options?: DurationOptions) => string;
123
123
 
124
- export { DurationOptions, FormateByteOptions, ParseByteOptions, duration, formatBytes, parseBytes };
124
+ declare const parseDuration: (value: string, options?: ParseDurationOptions) => number | undefined;
125
+
126
+ export { DurationOptions, FormateByteOptions, ParseByteOptions, duration, formatBytes, parseBytes, parseDuration };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as FormateByteOptions, P as ParseByteOptions, D as DurationOptions } from './packem_shared/types-4Kt5giRg.js';
2
- export { a as DurationDigitReplacements, b as DurationLanguage, c as DurationPiece, d as DurationUnit, e as DurationUnitMeasures, f as DurationUnitName, I as IntlLocale } from './packem_shared/types-4Kt5giRg.js';
1
+ import { F as FormateByteOptions, P as ParseByteOptions, D as DurationOptions, a as ParseDurationOptions } from './packem_shared/types-H2jJHSlI.js';
2
+ export { b as DurationDigitReplacements, c as DurationLanguage, d as DurationPiece, e as DurationUnit, f as DurationUnitMeasures, g as DurationUnitName, I as IntlLocale } from './packem_shared/types-H2jJHSlI.js';
3
3
 
4
4
  declare const BYTE_SIZES: {
5
5
  readonly iec: readonly [{
@@ -121,4 +121,6 @@ declare const formatBytes: (bytes: number, options?: FormateByteOptions<ByteSize
121
121
 
122
122
  declare const duration: (milliseconds: number, options?: DurationOptions) => string;
123
123
 
124
- export { DurationOptions, FormateByteOptions, ParseByteOptions, duration, formatBytes, parseBytes };
124
+ declare const parseDuration: (value: string, options?: ParseDurationOptions) => number | undefined;
125
+
126
+ export { DurationOptions, FormateByteOptions, ParseByteOptions, duration, formatBytes, parseBytes, parseDuration };
package/dist/index.mjs CHANGED
@@ -1,2 +1,3 @@
1
1
  export { formatBytes, parseBytes } from './packem_shared/parseBytes-CAElABGr.mjs';
2
- export { default as duration } from './packem_shared/duration-CEv0RfYk.mjs';
2
+ export { default as duration } from './packem_shared/duration-jUX98xbn.mjs';
3
+ export { default as parseDuration } from './packem_shared/parseDuration-N_JLGPIB.mjs';
@@ -4,6 +4,24 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
4
4
 
5
5
  const language_util_createDurationLanguage = require('./util/create-duration-language.cjs');
6
6
 
7
+ const afUnitMap = {
8
+ dae: "d",
9
+ dag: "d",
10
+ jaar: "y",
11
+ jare: "y",
12
+ maand: "mo",
13
+ maande: "mo",
14
+ millisekonde: "ms",
15
+ millisekondes: "ms",
16
+ minute: "m",
17
+ minuut: "m",
18
+ sekonde: "s",
19
+ sekondes: "s",
20
+ ure: "h",
21
+ uur: "h",
22
+ week: "w",
23
+ weke: "w"
24
+ };
7
25
  const durationLanguage = language_util_createDurationLanguage(
8
26
  "jaar",
9
27
  (counter) => `maand${counter === 1 ? "" : "e"}`,
@@ -15,7 +33,13 @@ const durationLanguage = language_util_createDurationLanguage(
15
33
  (counter) => `millisekonde${counter === 1 ? "" : "s"}`,
16
34
  "oor %s",
17
35
  "%s gelede",
18
- ","
36
+ ",",
37
+ // decimal
38
+ afUnitMap,
39
+ " ",
40
+ // groupSeparator (often space in af)
41
+ "_"
42
+ // placeholderSeparator
19
43
  );
20
44
 
21
45
  exports.durationLanguage = durationLanguage;
@@ -1,4 +1,4 @@
1
- import { b as DurationLanguage } from '../packem_shared/types-4Kt5giRg.cjs';
1
+ import { c as DurationLanguage } from '../packem_shared/types-H2jJHSlI.cjs';
2
2
 
3
3
  declare const durationLanguage: DurationLanguage;
4
4
 
@@ -1,4 +1,4 @@
1
- import { b as DurationLanguage } from '../packem_shared/types-4Kt5giRg.mjs';
1
+ import { c as DurationLanguage } from '../packem_shared/types-H2jJHSlI.mjs';
2
2
 
3
3
  declare const durationLanguage: DurationLanguage;
4
4
 
@@ -1,4 +1,4 @@
1
- import { b as DurationLanguage } from '../packem_shared/types-4Kt5giRg.js';
1
+ import { c as DurationLanguage } from '../packem_shared/types-H2jJHSlI.js';
2
2
 
3
3
  declare const durationLanguage: DurationLanguage;
4
4
 
@@ -1,5 +1,23 @@
1
1
  import createDurationLanguage from './util/create-duration-language.mjs';
2
2
 
3
+ const afUnitMap = {
4
+ dae: "d",
5
+ dag: "d",
6
+ jaar: "y",
7
+ jare: "y",
8
+ maand: "mo",
9
+ maande: "mo",
10
+ millisekonde: "ms",
11
+ millisekondes: "ms",
12
+ minute: "m",
13
+ minuut: "m",
14
+ sekonde: "s",
15
+ sekondes: "s",
16
+ ure: "h",
17
+ uur: "h",
18
+ week: "w",
19
+ weke: "w"
20
+ };
3
21
  const durationLanguage = createDurationLanguage(
4
22
  "jaar",
5
23
  (counter) => `maand${counter === 1 ? "" : "e"}`,
@@ -11,7 +29,13 @@ const durationLanguage = createDurationLanguage(
11
29
  (counter) => `millisekonde${counter === 1 ? "" : "s"}`,
12
30
  "oor %s",
13
31
  "%s gelede",
14
- ","
32
+ ",",
33
+ // decimal
34
+ afUnitMap,
35
+ " ",
36
+ // groupSeparator (often space in af)
37
+ "_"
38
+ // placeholderSeparator
15
39
  );
16
40
 
17
41
  export { durationLanguage };
@@ -4,6 +4,34 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
4
4
 
5
5
  const language_util_createDurationLanguage = require('./util/create-duration-language.cjs');
6
6
 
7
- const durationLanguage = language_util_createDurationLanguage("ዓመት", "ወር", "ሳምንት", "ቀን", "ሰዓት", "ደቂቃ", "ሰከንድ", "ሚሊሰከንድ", "በአንድ %s", "%s በፊት");
7
+ const amUnitMap = {
8
+ ሚሊሰከንድ: "ms",
9
+ ሰከንድ: "s",
10
+ ሰዓት: "h",
11
+ ሳምንት: "w",
12
+ ቀን: "d",
13
+ ወር: "mo",
14
+ ዓመት: "y",
15
+ ደቂቃ: "m"
16
+ };
17
+ const durationLanguage = language_util_createDurationLanguage(
18
+ "ዓመት",
19
+ "ወር",
20
+ "ሳምንት",
21
+ "ቀን",
22
+ "ሰዓት",
23
+ "ደቂቃ",
24
+ "ሰከንድ",
25
+ "ሚሊሰከንድ",
26
+ "በአንድ %s",
27
+ "%s በፊት",
28
+ ".",
29
+ // decimal
30
+ amUnitMap,
31
+ ",",
32
+ // groupSeparator
33
+ "_"
34
+ // placeholderSeparator
35
+ );
8
36
 
9
37
  exports.durationLanguage = durationLanguage;
@@ -1,4 +1,4 @@
1
- import { b as DurationLanguage } from '../packem_shared/types-4Kt5giRg.cjs';
1
+ import { c as DurationLanguage } from '../packem_shared/types-H2jJHSlI.cjs';
2
2
 
3
3
  declare const durationLanguage: DurationLanguage;
4
4
 
@@ -1,4 +1,4 @@
1
- import { b as DurationLanguage } from '../packem_shared/types-4Kt5giRg.mjs';
1
+ import { c as DurationLanguage } from '../packem_shared/types-H2jJHSlI.mjs';
2
2
 
3
3
  declare const durationLanguage: DurationLanguage;
4
4
 
@@ -1,4 +1,4 @@
1
- import { b as DurationLanguage } from '../packem_shared/types-4Kt5giRg.js';
1
+ import { c as DurationLanguage } from '../packem_shared/types-H2jJHSlI.js';
2
2
 
3
3
  declare const durationLanguage: DurationLanguage;
4
4
 
@@ -1,5 +1,33 @@
1
1
  import createDurationLanguage from './util/create-duration-language.mjs';
2
2
 
3
- const durationLanguage = createDurationLanguage("ዓመት", "ወር", "ሳምንት", "ቀን", "ሰዓት", "ደቂቃ", "ሰከንድ", "ሚሊሰከንድ", "በአንድ %s", "%s በፊት");
3
+ const amUnitMap = {
4
+ ሚሊሰከንድ: "ms",
5
+ ሰከንድ: "s",
6
+ ሰዓት: "h",
7
+ ሳምንት: "w",
8
+ ቀን: "d",
9
+ ወር: "mo",
10
+ ዓመት: "y",
11
+ ደቂቃ: "m"
12
+ };
13
+ const durationLanguage = createDurationLanguage(
14
+ "ዓመት",
15
+ "ወር",
16
+ "ሳምንት",
17
+ "ቀን",
18
+ "ሰዓት",
19
+ "ደቂቃ",
20
+ "ሰከንድ",
21
+ "ሚሊሰከንድ",
22
+ "በአንድ %s",
23
+ "%s በፊት",
24
+ ".",
25
+ // decimal
26
+ amUnitMap,
27
+ ",",
28
+ // groupSeparator
29
+ "_"
30
+ // placeholderSeparator
31
+ );
4
32
 
5
33
  export { durationLanguage };
@@ -6,6 +6,24 @@ const language_util_createDurationLanguage = require('./util/create-duration-lan
6
6
 
7
7
  var __defProp = Object.defineProperty;
8
8
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ const arUnitMap = {
10
+ "أجزاء من الثانية": "ms",
11
+ أسابيع: "w",
12
+ أسبوع: "w",
13
+ "أشهر طويلة": "mo",
14
+ أعوام: "y",
15
+ أيام: "d",
16
+ ثانية: "s",
17
+ ثواني: "s",
18
+ "جزء من الثانية": "ms",
19
+ دقائق: "m",
20
+ دقيقة: "m",
21
+ ساعات: "h",
22
+ ساعة: "h",
23
+ "شهر طويل": "mo",
24
+ عام: "y",
25
+ يوم: "d"
26
+ };
9
27
  const getArabicForm = /* @__PURE__ */ __name((counter) => {
10
28
  if (counter === 2) {
11
29
  return 1;
@@ -27,11 +45,15 @@ const durationLanguage = {
27
45
  (counter) => ["جزء من الثانية", "جزآن من الثانية", "أجزاء من الثانية"][getArabicForm(counter)],
28
46
  "بعد %s",
29
47
  "منذ %s",
30
- ","
48
+ " ﻭ ",
49
+ arUnitMap,
50
+ "٬",
51
+ // groupSeparator - Arabic uses U+066C
52
+ "_"
53
+ // placeholderSeparator
31
54
  ),
32
55
  _digitReplacements: ["۰", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"],
33
- _hideCountIf2: true,
34
- delimiter: " ﻭ "
56
+ _hideCountIf2: true
35
57
  };
36
58
 
37
59
  exports.durationLanguage = durationLanguage;
@@ -1,19 +1,22 @@
1
- import { d as DurationUnit } from '../packem_shared/types-4Kt5giRg.cjs';
1
+ import { e as DurationUnit, f as DurationUnitMeasures } from '../packem_shared/types-H2jJHSlI.cjs';
2
2
 
3
3
  declare const durationLanguage: {
4
4
  _digitReplacements: string[];
5
5
  _hideCountIf2: boolean;
6
- delimiter: string;
7
6
  _numberFirst?: boolean;
8
7
  d: DurationUnit;
9
8
  decimal?: string;
9
+ delimiter?: string;
10
10
  future?: string;
11
+ groupSeparator?: string;
11
12
  h: DurationUnit;
12
13
  m: DurationUnit;
13
14
  mo: DurationUnit;
14
15
  ms: DurationUnit;
15
16
  past?: string;
17
+ placeholderSeparator?: string;
16
18
  s: DurationUnit;
19
+ unitMap?: Record<string, keyof DurationUnitMeasures>;
17
20
  w: DurationUnit;
18
21
  y: DurationUnit;
19
22
  };
@@ -1,19 +1,22 @@
1
- import { d as DurationUnit } from '../packem_shared/types-4Kt5giRg.mjs';
1
+ import { e as DurationUnit, f as DurationUnitMeasures } from '../packem_shared/types-H2jJHSlI.mjs';
2
2
 
3
3
  declare const durationLanguage: {
4
4
  _digitReplacements: string[];
5
5
  _hideCountIf2: boolean;
6
- delimiter: string;
7
6
  _numberFirst?: boolean;
8
7
  d: DurationUnit;
9
8
  decimal?: string;
9
+ delimiter?: string;
10
10
  future?: string;
11
+ groupSeparator?: string;
11
12
  h: DurationUnit;
12
13
  m: DurationUnit;
13
14
  mo: DurationUnit;
14
15
  ms: DurationUnit;
15
16
  past?: string;
17
+ placeholderSeparator?: string;
16
18
  s: DurationUnit;
19
+ unitMap?: Record<string, keyof DurationUnitMeasures>;
17
20
  w: DurationUnit;
18
21
  y: DurationUnit;
19
22
  };
@@ -1,19 +1,22 @@
1
- import { d as DurationUnit } from '../packem_shared/types-4Kt5giRg.js';
1
+ import { e as DurationUnit, f as DurationUnitMeasures } from '../packem_shared/types-H2jJHSlI.js';
2
2
 
3
3
  declare const durationLanguage: {
4
4
  _digitReplacements: string[];
5
5
  _hideCountIf2: boolean;
6
- delimiter: string;
7
6
  _numberFirst?: boolean;
8
7
  d: DurationUnit;
9
8
  decimal?: string;
9
+ delimiter?: string;
10
10
  future?: string;
11
+ groupSeparator?: string;
11
12
  h: DurationUnit;
12
13
  m: DurationUnit;
13
14
  mo: DurationUnit;
14
15
  ms: DurationUnit;
15
16
  past?: string;
17
+ placeholderSeparator?: string;
16
18
  s: DurationUnit;
19
+ unitMap?: Record<string, keyof DurationUnitMeasures>;
17
20
  w: DurationUnit;
18
21
  y: DurationUnit;
19
22
  };