@visulima/humanizer 2.0.5 → 3.0.0-alpha.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 (76) hide show
  1. package/dist/index.js +3 -1
  2. package/dist/language/af.js +41 -1
  3. package/dist/language/am.js +33 -1
  4. package/dist/language/ar.js +53 -1
  5. package/dist/language/bg.js +42 -1
  6. package/dist/language/bn.js +33 -1
  7. package/dist/language/ca.js +41 -1
  8. package/dist/language/ckb.js +33 -1
  9. package/dist/language/cs.js +53 -1
  10. package/dist/language/cy.js +53 -1
  11. package/dist/language/da.js +45 -1
  12. package/dist/language/de.js +47 -1
  13. package/dist/language/el.js +53 -1
  14. package/dist/language/en.js +57 -1
  15. package/dist/language/eo.js +47 -1
  16. package/dist/language/es.js +46 -1
  17. package/dist/language/et.js +47 -1
  18. package/dist/language/eu.js +41 -1
  19. package/dist/language/fa.js +38 -1
  20. package/dist/language/fi.js +55 -1
  21. package/dist/language/fo.js +48 -1
  22. package/dist/language/fr.js +52 -1
  23. package/dist/language/he.js +52 -1
  24. package/dist/language/hi.js +55 -1
  25. package/dist/language/hr.js +110 -1
  26. package/dist/language/hu.js +51 -1
  27. package/dist/language/id.js +50 -1
  28. package/dist/language/is.js +52 -1
  29. package/dist/language/it.js +51 -1
  30. package/dist/language/ja.js +47 -1
  31. package/dist/language/km.js +57 -1
  32. package/dist/language/kn.js +50 -1
  33. package/dist/language/ko.js +42 -1
  34. package/dist/language/ku.js +54 -1
  35. package/dist/language/lo.js +58 -1
  36. package/dist/language/lt.js +69 -1
  37. package/dist/language/lv.js +55 -1
  38. package/dist/language/mk.js +55 -1
  39. package/dist/language/mn.js +46 -1
  40. package/dist/language/mr.js +43 -1
  41. package/dist/language/ms.js +49 -1
  42. package/dist/language/nl.js +50 -1
  43. package/dist/language/no.js +47 -1
  44. package/dist/language/pl.js +73 -1
  45. package/dist/language/pt.js +50 -1
  46. package/dist/language/ro.js +53 -1
  47. package/dist/language/ru.js +59 -1
  48. package/dist/language/sk.js +64 -1
  49. package/dist/language/sl.js +138 -1
  50. package/dist/language/sq.js +51 -1
  51. package/dist/language/sr.js +83 -1
  52. package/dist/language/sr_Latn.js +21 -1
  53. package/dist/language/sv.js +49 -1
  54. package/dist/language/sw.js +51 -1
  55. package/dist/language/ta.js +54 -1
  56. package/dist/language/te.js +50 -1
  57. package/dist/language/th.js +44 -1
  58. package/dist/language/tr.js +42 -1
  59. package/dist/language/uk.js +61 -1
  60. package/dist/language/ur.js +57 -1
  61. package/dist/language/util/create-duration-language.js +33 -1
  62. package/dist/language/util/duration/get-czech-or-slovak-form.js +14 -1
  63. package/dist/language/util/duration/get-slavic-form.js +17 -1
  64. package/dist/language/util/validate-duration-language.js +36 -1
  65. package/dist/language/uz.js +43 -1
  66. package/dist/language/uz_CYR.js +43 -1
  67. package/dist/language/vi.js +34 -1
  68. package/dist/language/zh_CN.js +39 -1
  69. package/dist/language/zh_TW.js +39 -1
  70. package/dist/packem_shared/duration-C62ipnQn.js +214 -0
  71. package/dist/packem_shared/parseBytes-JWspeMzP.js +238 -0
  72. package/dist/packem_shared/parseDuration-CeFaBgx9.js +111 -0
  73. package/package.json +3 -3
  74. package/dist/packem_shared/duration-B8tBhwXw.js +0 -1
  75. package/dist/packem_shared/parseBytes-Da87aeh8.js +0 -1
  76. package/dist/packem_shared/parseDuration-Bo02kq8G.js +0 -1
@@ -1 +1,61 @@
1
- import o from"./util/create-duration-language.js";import s from"./util/duration/get-slavic-form.js";const r={г:"h",год:"h",годин:"h",година:"h",години:"h",д:"d",день:"d",дні:"d",днів:"d",мілісекунд:"ms",мілісекунда:"ms",мілісекунди:"ms",міс:"mo",місяці:"mo",місяців:"mo",місяць:"mo",мс:"ms",р:"y",рік:"y",роки:"y",років:"y",с:"s",сек:"s",секунд:"s",секунда:"s",секунди:"s",т:"w",тижд:"w",тиждень:"w",тижні:"w",тижнів:"w",хв:"m",хвилин:"m",хвилина:"m",хвилини:"m"},h=o(m=>["років","рік","роки"][s(m)],m=>["місяців","місяць","місяці"][s(m)],m=>["тижнів","тиждень","тижні"][s(m)],m=>["днів","день","дні"][s(m)],m=>["годин","година","години"][s(m)],m=>["хвилин","хвилина","хвилини"][s(m)],m=>["секунд","секунда","секунди"][s(m)],m=>["мілісекунд","мілісекунда","мілісекунди"][s(m)],"за %s","%s тому",",",r," ","_");export{h as durationLanguage};
1
+ import createDurationLanguage from './util/create-duration-language.js';
2
+ import getSlavicForm from './util/duration/get-slavic-form.js';
3
+
4
+ const ukUnitMap = {
5
+ г: "h",
6
+ год: "h",
7
+ годин: "h",
8
+ година: "h",
9
+ години: "h",
10
+ д: "d",
11
+ день: "d",
12
+ дні: "d",
13
+ днів: "d",
14
+ мілісекунд: "ms",
15
+ мілісекунда: "ms",
16
+ мілісекунди: "ms",
17
+ міс: "mo",
18
+ місяці: "mo",
19
+ місяців: "mo",
20
+ місяць: "mo",
21
+ мс: "ms",
22
+ р: "y",
23
+ рік: "y",
24
+ роки: "y",
25
+ років: "y",
26
+ с: "s",
27
+ сек: "s",
28
+ секунд: "s",
29
+ секунда: "s",
30
+ секунди: "s",
31
+ т: "w",
32
+ тижд: "w",
33
+ тиждень: "w",
34
+ тижні: "w",
35
+ тижнів: "w",
36
+ хв: "m",
37
+ хвилин: "m",
38
+ хвилина: "m",
39
+ хвилини: "m"
40
+ };
41
+ const durationLanguage = createDurationLanguage(
42
+ (counter) => ["років", "рік", "роки"][getSlavicForm(counter)],
43
+ (counter) => ["місяців", "місяць", "місяці"][getSlavicForm(counter)],
44
+ (counter) => ["тижнів", "тиждень", "тижні"][getSlavicForm(counter)],
45
+ (counter) => ["днів", "день", "дні"][getSlavicForm(counter)],
46
+ (counter) => ["годин", "година", "години"][getSlavicForm(counter)],
47
+ (counter) => ["хвилин", "хвилина", "хвилини"][getSlavicForm(counter)],
48
+ (counter) => ["секунд", "секунда", "секунди"][getSlavicForm(counter)],
49
+ (counter) => ["мілісекунд", "мілісекунда", "мілісекунди"][getSlavicForm(counter)],
50
+ "за %s",
51
+ "%s тому",
52
+ ",",
53
+ // decimal separator
54
+ ukUnitMap,
55
+ " ",
56
+ // group separator (space is standard)
57
+ "_"
58
+ // placeholder separator
59
+ );
60
+
61
+ export { durationLanguage };
@@ -1 +1,57 @@
1
- import s from"./util/create-duration-language.js";const o={ms:"ms",ث:"s",د:"d",دن:"d",س:"y",سال:"y",سیک:"s",سیکنڈ:"s",گھ:"h",گھنٹہ:"h",گھنٹے:"h",م:"m",ماہ:"mo",مل:"ms",ملی_سیکنڈ:"ms",منٹ:"m",مہ:"mo",مہینہ:"mo",مہینے:"mo",ہ:"w",ہفتہ:"w",ہفتے:"w"},n=s("سال",m=>m===1?"مہینہ":"مہینے",m=>m===1?"ہفتہ":"ہفتے","دن",m=>m===1?"گھنٹہ":"گھنٹے","منٹ","سیکنڈ","ملی سیکنڈ","%s بعد","%s قبل",".",o,",","_");export{n as durationLanguage};
1
+ import createDurationLanguage from './util/create-duration-language.js';
2
+
3
+ const urUnitMap = {
4
+ ms: "ms",
5
+ ث: "s",
6
+ // Alternative Abbreviation
7
+ د: "d",
8
+ // Abbreviation
9
+ دن: "d",
10
+ س: "y",
11
+ // Abbreviation
12
+ سال: "y",
13
+ سیک: "s",
14
+ // Abbreviation
15
+ سیکنڈ: "s",
16
+ گھ: "h",
17
+ // Abbreviation
18
+ گھنٹہ: "h",
19
+ گھنٹے: "h",
20
+ م: "m",
21
+ // Abbreviation
22
+ ماہ: "mo",
23
+ // Alternative word
24
+ مل: "ms",
25
+ // Abbreviation
26
+ ملی_سیکنڈ: "ms",
27
+ منٹ: "m",
28
+ مہ: "mo",
29
+ // Abbreviation
30
+ مہینہ: "mo",
31
+ مہینے: "mo",
32
+ ہ: "w",
33
+ // Abbreviation
34
+ ہفتہ: "w",
35
+ ہفتے: "w"
36
+ };
37
+ const durationLanguage = createDurationLanguage(
38
+ "سال",
39
+ (counter) => counter === 1 ? "مہینہ" : "مہینے",
40
+ (counter) => counter === 1 ? "ہفتہ" : "ہفتے",
41
+ "دن",
42
+ (counter) => counter === 1 ? "گھنٹہ" : "گھنٹے",
43
+ "منٹ",
44
+ "سیکنڈ",
45
+ "ملی سیکنڈ",
46
+ "%s بعد",
47
+ "%s قبل",
48
+ ".",
49
+ // decimal separator (Urdu uses .)
50
+ urUnitMap,
51
+ ",",
52
+ // group separator (Urdu uses ,)
53
+ "_"
54
+ // placeholder separator
55
+ );
56
+
57
+ export { durationLanguage };
@@ -1 +1,33 @@
1
- var f=Object.defineProperty;var v=(a,r)=>f(a,"name",{value:r,configurable:!0});var y=Object.defineProperty,b=v((a,r)=>y(a,"name",{value:r,configurable:!0}),"D");const D=b((a,r,p,c,l,s,m,g,o,t,d,i,n,u)=>{const e={d:c,h:l,m:s,mo:r,ms:g,s:m,w:p,y:a};return o!==void 0&&(e.future=o),t!==void 0&&(e.past=t),d!==void 0&&(e.decimal=d),i!==void 0&&(e.unitMap=i),n!==void 0&&(e.groupSeparator=n),u!==void 0&&(e.placeholderSeparator=u),e},"createDurationLanguage");export{D as default};
1
+ const createDurationLanguage = (y, mo, w, d, h, m, s, ms, future, past, decimal, unitMap, groupSeparator, placeholderSeparator) => {
2
+ const result = {
3
+ d,
4
+ h,
5
+ m,
6
+ mo,
7
+ ms,
8
+ s,
9
+ w,
10
+ y
11
+ };
12
+ if (future !== void 0) {
13
+ result.future = future;
14
+ }
15
+ if (past !== void 0) {
16
+ result.past = past;
17
+ }
18
+ if (decimal !== void 0) {
19
+ result.decimal = decimal;
20
+ }
21
+ if (unitMap !== void 0) {
22
+ result.unitMap = unitMap;
23
+ }
24
+ if (groupSeparator !== void 0) {
25
+ result.groupSeparator = groupSeparator;
26
+ }
27
+ if (placeholderSeparator !== void 0) {
28
+ result.placeholderSeparator = placeholderSeparator;
29
+ }
30
+ return result;
31
+ };
32
+
33
+ export { createDurationLanguage as default };
@@ -1 +1,14 @@
1
- var o=Object.defineProperty;var t=(e,a)=>o(e,"name",{value:a,configurable:!0});var l=Object.defineProperty,r=t((e,a)=>l(e,"name",{value:a,configurable:!0}),"e");const f=r(e=>e===1?0:Math.floor(e)!==e?1:e%10>=2&&e%10<=4&&e%100<10?2:3,"getCzechOrSlovakForm");export{f as default};
1
+ const getCzechOrSlovakForm = (counter) => {
2
+ if (counter === 1) {
3
+ return 0;
4
+ }
5
+ if (Math.floor(counter) !== counter) {
6
+ return 1;
7
+ }
8
+ if (counter % 10 >= 2 && counter % 10 <= 4 && counter % 100 < 10) {
9
+ return 2;
10
+ }
11
+ return 3;
12
+ };
13
+
14
+ export { getCzechOrSlovakForm as default };
@@ -1 +1,17 @@
1
- var o=Object.defineProperty;var t=(e,a)=>o(e,"name",{value:a,configurable:!0});var l=Object.defineProperty,f=t((e,a)=>l(e,"name",{value:a,configurable:!0}),"f");const n=f(e=>Math.floor(e)!==e?2:e%100>=5&&e%100<=20||e%10>=5&&e%10<=9||e%10===0?0:e%10===1?1:e>1?2:0,"getSlavicForm");export{n as default};
1
+ const getSlavicForm = (counter) => {
2
+ if (Math.floor(counter) !== counter) {
3
+ return 2;
4
+ }
5
+ if (counter % 100 >= 5 && counter % 100 <= 20 || counter % 10 >= 5 && counter % 10 <= 9 || counter % 10 === 0) {
6
+ return 0;
7
+ }
8
+ if (counter % 10 === 1) {
9
+ return 1;
10
+ }
11
+ if (counter > 1) {
12
+ return 2;
13
+ }
14
+ return 0;
15
+ };
16
+
17
+ export { getSlavicForm as default };
@@ -1 +1,36 @@
1
- var i=Object.defineProperty;var o=(e,r)=>i(e,"name",{value:r,configurable:!0});var n=Object.defineProperty,p=o((e,r)=>n(e,"name",{value:r,configurable:!0}),"o");const a=p(e=>{const r=["y","mo","w","d","h","m","s","ms","future","past"];for(const t of r)if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError(`Missing required property: ${t}`);if(typeof e.future!="string"||typeof e.past!="string")throw new TypeError("Properties future and past must be of type string");for(const t of["y","mo","w","d","h","m","s","ms"])if(typeof e[t]!="string"&&typeof e[t]!="function")throw new TypeError(`Property ${t} must be of type string or function`);if(e.decimal&&typeof e.decimal!="string")throw new TypeError("Property decimal must be of type string");if(e.delimiter&&typeof e.delimiter!="string")throw new TypeError("Property delimiter must be of type string");if(e._digitReplacements&&!Array.isArray(e._digitReplacements))throw new TypeError("Property _digitReplacements must be an array");if(e._numberFirst&&typeof e._numberFirst!="boolean")throw new TypeError("Property _numberFirst must be of type boolean");if(e.unitMap&&typeof e.unitMap!="object")throw new TypeError("Property unitMap must be an object");if(e.unitMap&&Object.values(e.unitMap).some(t=>typeof t!="string"))throw new TypeError("All values in unitMap must be of type string")},"validateDurationLanguage");export{a as default};
1
+ const validateDurationLanguage = (language) => {
2
+ const requiredProperties = ["y", "mo", "w", "d", "h", "m", "s", "ms", "future", "past"];
3
+ for (const property of requiredProperties) {
4
+ if (!Object.prototype.hasOwnProperty.call(language, property)) {
5
+ throw new TypeError(`Missing required property: ${property}`);
6
+ }
7
+ }
8
+ if (typeof language.future !== "string" || typeof language.past !== "string") {
9
+ throw new TypeError("Properties future and past must be of type string");
10
+ }
11
+ for (const property of ["y", "mo", "w", "d", "h", "m", "s", "ms"]) {
12
+ if (typeof language[property] !== "string" && typeof language[property] !== "function") {
13
+ throw new TypeError(`Property ${property} must be of type string or function`);
14
+ }
15
+ }
16
+ if (language.decimal && typeof language.decimal !== "string") {
17
+ throw new TypeError("Property decimal must be of type string");
18
+ }
19
+ if (language.delimiter && typeof language.delimiter !== "string") {
20
+ throw new TypeError("Property delimiter must be of type string");
21
+ }
22
+ if (language._digitReplacements && !Array.isArray(language._digitReplacements)) {
23
+ throw new TypeError("Property _digitReplacements must be an array");
24
+ }
25
+ if (language._numberFirst && typeof language._numberFirst !== "boolean") {
26
+ throw new TypeError("Property _numberFirst must be of type boolean");
27
+ }
28
+ if (language.unitMap && typeof language.unitMap !== "object") {
29
+ throw new TypeError("Property unitMap must be an object");
30
+ }
31
+ if (language.unitMap && Object.values(language.unitMap).some((value) => typeof value !== "string")) {
32
+ throw new TypeError("All values in unitMap must be of type string");
33
+ }
34
+ };
35
+
36
+ export { validateDurationLanguage as default };
@@ -1 +1,43 @@
1
- import s from"./util/create-duration-language.js";const m={h:"w",hafta:"w",k:"d",kun:"d",m:"m",millisekund:"ms",min:"m",minut:"m",ms:"ms",o:"mo",oy:"mo",s:"h",sek:"s",sekund:"s",soat:"h",y:"y",yil:"y"},o=s("yil","oy","hafta","kun","soat","minut","sekund","millisekund","%s da","%s avval",",",m," ","_");export{o as durationLanguage};
1
+ import createDurationLanguage from './util/create-duration-language.js';
2
+
3
+ const uzUnitMap = {
4
+ h: "w",
5
+ hafta: "w",
6
+ k: "d",
7
+ kun: "d",
8
+ m: "m",
9
+ millisekund: "ms",
10
+ min: "m",
11
+ minut: "m",
12
+ ms: "ms",
13
+ o: "mo",
14
+ oy: "mo",
15
+ s: "h",
16
+ sek: "s",
17
+ sekund: "s",
18
+ soat: "h",
19
+ y: "y",
20
+ yil: "y"
21
+ };
22
+ const durationLanguage = createDurationLanguage(
23
+ "yil",
24
+ "oy",
25
+ "hafta",
26
+ "kun",
27
+ "soat",
28
+ "minut",
29
+ "sekund",
30
+ "millisekund",
31
+ "%s da",
32
+ "%s avval",
33
+ // "%s ago"
34
+ ",",
35
+ // decimal separator in Uzbek
36
+ uzUnitMap,
37
+ " ",
38
+ // group separator in Uzbek
39
+ "_"
40
+ // placeholder separator
41
+ );
42
+
43
+ export { durationLanguage };
@@ -1 +1,43 @@
1
- import m from"./util/create-duration-language.js";const o={й:"y",йил:"y",к:"d",кун:"d",м:"m",миллисекунд:"ms",мин:"m",минут:"m",мс:"ms",о:"mo",ой:"mo",с:"h",сек:"s",секунд:"s",соат:"h",ҳ:"w",ҳафта:"w"},t=m("йил","ой","ҳафта","кун","соат","минут","секунд","миллисекунд","%s да","%s аввал",",",o," ","_");export{t as durationLanguage};
1
+ import createDurationLanguage from './util/create-duration-language.js';
2
+
3
+ const uzCyrUnitMap = {
4
+ й: "y",
5
+ йил: "y",
6
+ к: "d",
7
+ кун: "d",
8
+ м: "m",
9
+ миллисекунд: "ms",
10
+ мин: "m",
11
+ минут: "m",
12
+ мс: "ms",
13
+ о: "mo",
14
+ ой: "mo",
15
+ с: "h",
16
+ сек: "s",
17
+ секунд: "s",
18
+ соат: "h",
19
+ ҳ: "w",
20
+ ҳафта: "w"
21
+ };
22
+ const durationLanguage = createDurationLanguage(
23
+ "йил",
24
+ "ой",
25
+ "ҳафта",
26
+ "кун",
27
+ "соат",
28
+ "минут",
29
+ "секунд",
30
+ "миллисекунд",
31
+ "%s да",
32
+ "%s аввал",
33
+ // "%s ago"
34
+ ",",
35
+ // decimal separator in Uzbek Cyrillic
36
+ uzCyrUnitMap,
37
+ " ",
38
+ // group separator in Uzbek Cyrillic
39
+ "_"
40
+ // placeholder separator
41
+ );
42
+
43
+ export { durationLanguage };
@@ -1 +1,34 @@
1
- import i from"./util/create-duration-language.js";const t={giây:"s",giờ:"h",mili:"ms",miligiây:"ms",năm:"y",ngày:"d",phút:"m",tháng:"mo",tuần:"w"},n=i("năm","tháng","tuần","ngày","giờ","phút","giây","mili giây","%s tới","%s trước",",",t,".","_");export{n as durationLanguage};
1
+ import createDurationLanguage from './util/create-duration-language.js';
2
+
3
+ const viUnitMap = {
4
+ giây: "s",
5
+ giờ: "h",
6
+ mili: "ms",
7
+ miligiây: "ms",
8
+ năm: "y",
9
+ ngày: "d",
10
+ phút: "m",
11
+ tháng: "mo",
12
+ tuần: "w"
13
+ };
14
+ const durationLanguage = createDurationLanguage(
15
+ "năm",
16
+ "tháng",
17
+ "tuần",
18
+ "ngày",
19
+ "giờ",
20
+ "phút",
21
+ "giây",
22
+ "mili giây",
23
+ "%s tới",
24
+ "%s trước",
25
+ ",",
26
+ // decimal
27
+ viUnitMap,
28
+ ".",
29
+ // groupSeparator
30
+ "_"
31
+ // placeholderSeparator
32
+ );
33
+
34
+ export { durationLanguage };
@@ -1 +1,39 @@
1
- import o from"./util/create-duration-language.js";const m={个月:"mo",分:"m",分钟:"m",周:"w",天:"d",小时:"h",年:"y",日:"d",时:"h",星期:"w",月:"mo",毫秒:"ms",秒:"s",秒钟:"s"},t=o("年","个月","周","天","小时","分","秒","毫秒","%s后","%s前",".",m,",","_");export{t as durationLanguage};
1
+ import createDurationLanguage from './util/create-duration-language.js';
2
+
3
+ const zhCNUnitMap = {
4
+ 个月: "mo",
5
+ 分: "m",
6
+ 分钟: "m",
7
+ 周: "w",
8
+ 天: "d",
9
+ 小时: "h",
10
+ 年: "y",
11
+ 日: "d",
12
+ 时: "h",
13
+ 星期: "w",
14
+ 月: "mo",
15
+ 毫秒: "ms",
16
+ 秒: "s",
17
+ 秒钟: "s"
18
+ };
19
+ const durationLanguage = createDurationLanguage(
20
+ "年",
21
+ "个月",
22
+ "周",
23
+ "天",
24
+ "小时",
25
+ "分",
26
+ "秒",
27
+ "毫秒",
28
+ "%s后",
29
+ "%s前",
30
+ ".",
31
+ // decimal
32
+ zhCNUnitMap,
33
+ ",",
34
+ // groupSeparator
35
+ "_"
36
+ // placeholderSeparator
37
+ );
38
+
39
+ export { durationLanguage };
@@ -1 +1,39 @@
1
- import o from"./util/create-duration-language.js";const m={個月:"mo",分:"m",分鐘:"m",天:"d",小時:"h",年:"y",日:"d",星期:"w",時:"h",月:"mo",毫秒:"ms",秒:"s",秒鐘:"s",週:"w"},t=o("年","個月","周","天","小時","分鐘","秒","毫秒","%s後","%s前",".",m,",","_");export{t as durationLanguage};
1
+ import createDurationLanguage from './util/create-duration-language.js';
2
+
3
+ const zhTWUnitMap = {
4
+ 個月: "mo",
5
+ 分: "m",
6
+ 分鐘: "m",
7
+ 天: "d",
8
+ 小時: "h",
9
+ 年: "y",
10
+ 日: "d",
11
+ 星期: "w",
12
+ 時: "h",
13
+ 月: "mo",
14
+ 毫秒: "ms",
15
+ 秒: "s",
16
+ 秒鐘: "s",
17
+ 週: "w"
18
+ };
19
+ const durationLanguage = createDurationLanguage(
20
+ "年",
21
+ "個月",
22
+ "周",
23
+ "天",
24
+ "小時",
25
+ "分鐘",
26
+ "秒",
27
+ "毫秒",
28
+ "%s後",
29
+ "%s前",
30
+ ".",
31
+ // decimal
32
+ zhTWUnitMap,
33
+ ",",
34
+ // groupSeparator
35
+ "_"
36
+ // placeholderSeparator
37
+ );
38
+
39
+ export { durationLanguage };
@@ -0,0 +1,214 @@
1
+ import { durationLanguage } from '../language/en.js';
2
+ import validateDurationLanguage from '../language/util/validate-duration-language.js';
3
+
4
+ const toFixed = (number_, fixed) => {
5
+ fixed = fixed || -1;
6
+ const matches = new RegExp(String.raw`^-?\d+(?:.\d{0,${String(fixed)}})?`).exec(number_.toString());
7
+ if (matches === null) {
8
+ return number_;
9
+ }
10
+ return Number.parseFloat(matches[0]);
11
+ };
12
+ const renderPiece = ({ unitCount, unitName }, language, options) => {
13
+ let { spacer } = options;
14
+ const { maxDecimalPoints } = options;
15
+ let decimal = ".";
16
+ if (options.decimal !== void 0) {
17
+ decimal = options.decimal;
18
+ } else if (language.decimal !== void 0) {
19
+ decimal = language.decimal;
20
+ }
21
+ let digitReplacements;
22
+ if ("digitReplacements" in options) {
23
+ digitReplacements = options.digitReplacements;
24
+ } else if ("_digitReplacements" in language) {
25
+ digitReplacements = language._digitReplacements;
26
+ }
27
+ let formattedCount;
28
+ let normalizedUnitCount = unitCount;
29
+ if (maxDecimalPoints !== void 0) {
30
+ normalizedUnitCount = toFixed(unitCount, maxDecimalPoints);
31
+ }
32
+ const countString = normalizedUnitCount.toString();
33
+ if (!language._hideCountIf2 || unitCount !== 2) {
34
+ if (digitReplacements) {
35
+ formattedCount = "";
36
+ for (const char of countString) {
37
+ formattedCount += char === "." ? decimal : digitReplacements[char];
38
+ }
39
+ } else {
40
+ formattedCount = countString.replace(".", decimal);
41
+ }
42
+ } else {
43
+ formattedCount = "";
44
+ }
45
+ const languageWord = language[unitName];
46
+ let word = languageWord;
47
+ if (typeof languageWord === "function") {
48
+ word = languageWord(unitCount);
49
+ }
50
+ if (language._hideCountIf2 && unitCount === 2) {
51
+ spacer = "";
52
+ }
53
+ if (language._numberFirst) {
54
+ return word + spacer + formattedCount;
55
+ }
56
+ return formattedCount + spacer + word;
57
+ };
58
+ const getPieces = (ms, options) => {
59
+ const { units } = options;
60
+ if (units.length === 0) {
61
+ return [];
62
+ }
63
+ const { unitMeasures } = options;
64
+ const largest = options.largest ?? Number.POSITIVE_INFINITY;
65
+ const unitCounts = {};
66
+ let unitName;
67
+ let index;
68
+ let unitCount;
69
+ let msRemaining = ms;
70
+ for (index = 0; index < units.length; index++) {
71
+ unitName = units[index];
72
+ const unitMs = unitMeasures[unitName];
73
+ const isLast = index === units.length - 1;
74
+ unitCount = isLast ? msRemaining / unitMs : Math.floor(msRemaining / unitMs);
75
+ unitCounts[unitName] = unitCount;
76
+ msRemaining -= unitCount * unitMs;
77
+ }
78
+ if (options.round) {
79
+ let unitsRemainingBeforeRound = largest;
80
+ for (index = 0; index < units.length; index++) {
81
+ unitName = units[index];
82
+ unitCount = unitCounts[unitName];
83
+ if (unitCount === 0) {
84
+ continue;
85
+ }
86
+ unitsRemainingBeforeRound--;
87
+ if (unitsRemainingBeforeRound === 0) {
88
+ for (let index_ = index + 1; index_ < units.length; index_++) {
89
+ const smallerUnitName = units[index_];
90
+ const smallerUnitCount = unitCounts[smallerUnitName];
91
+ unitCounts[unitName] += smallerUnitCount * unitMeasures[smallerUnitName] / unitMeasures[unitName];
92
+ unitCounts[smallerUnitName] = 0;
93
+ }
94
+ break;
95
+ }
96
+ }
97
+ for (index = units.length - 1; index >= 0; index--) {
98
+ unitName = units[index];
99
+ unitCount = unitCounts[unitName];
100
+ if (unitCount === 0) {
101
+ continue;
102
+ }
103
+ const rounded = Math.round(unitCount);
104
+ unitCounts[unitName] = rounded;
105
+ if (index === 0) {
106
+ break;
107
+ }
108
+ const previousUnitName = units[index - 1];
109
+ const previousUnitMs = unitMeasures[previousUnitName];
110
+ const amountOfPreviousUnit = Math.floor(rounded * unitMeasures[unitName] / previousUnitMs);
111
+ if (amountOfPreviousUnit) {
112
+ unitCounts[previousUnitName] += amountOfPreviousUnit;
113
+ unitCounts[unitName] = 0;
114
+ } else {
115
+ break;
116
+ }
117
+ }
118
+ }
119
+ const result = [];
120
+ for (index = 0; index < units.length && result.length < largest; index++) {
121
+ unitName = units[index];
122
+ unitCount = unitCounts[unitName];
123
+ if (unitCount && !options.round && result.length === largest - 1) {
124
+ let index_;
125
+ let remainder = 0;
126
+ for (index_ = index + 1, units.length; index_ < units.length; index_++) {
127
+ const remainderUnitName = units[index_];
128
+ remainder += unitCounts[remainderUnitName] * (options.unitMeasures[remainderUnitName] / options.unitMeasures[unitName]);
129
+ }
130
+ unitCount += remainder;
131
+ if (options.maxDecimalPoints !== void 0) {
132
+ unitCount = toFixed(unitCount, options.maxDecimalPoints);
133
+ }
134
+ }
135
+ if (unitCount) {
136
+ result.push({ unitCount, unitName });
137
+ }
138
+ }
139
+ return result;
140
+ };
141
+ const formatPieces = (pieces, options, ms) => {
142
+ const { language, units } = options;
143
+ if (pieces.length === 0) {
144
+ const smallestUnitName = units.at(-1);
145
+ return renderPiece({ unitCount: 0, unitName: smallestUnitName }, language, options);
146
+ }
147
+ const { conjunction, serialComma } = options;
148
+ let delimiter = ", ";
149
+ if (options.delimiter !== void 0) {
150
+ delimiter = options.delimiter;
151
+ } else if (language.delimiter !== void 0) {
152
+ delimiter = language.delimiter;
153
+ }
154
+ let adverb = "";
155
+ if (options.timeAdverb && ms !== 0) {
156
+ adverb = language.future ?? "";
157
+ if (ms < 0) {
158
+ adverb = language.past ?? "";
159
+ }
160
+ }
161
+ const renderedPieces = [];
162
+ for (const piece_ of pieces) {
163
+ const piece = piece_;
164
+ renderedPieces.push(renderPiece(piece, language, options));
165
+ }
166
+ let result;
167
+ if (!conjunction || pieces.length === 1) {
168
+ result = renderedPieces.join(delimiter);
169
+ } else if (pieces.length === 2) {
170
+ result = renderedPieces.join(conjunction);
171
+ } else {
172
+ result = renderedPieces.slice(0, -1).join(delimiter) + (serialComma ? "," : "") + conjunction + renderedPieces.at(-1);
173
+ }
174
+ if (adverb) {
175
+ result = adverb.replace("%s", result);
176
+ }
177
+ return result;
178
+ };
179
+ const duration = (milliseconds, options) => {
180
+ if (Number.isNaN(milliseconds)) {
181
+ throw new TypeError("Expected a valid number");
182
+ }
183
+ if (typeof milliseconds !== "number") {
184
+ throw new TypeError("Expected a number for milliseconds input");
185
+ }
186
+ const config = {
187
+ conjunction: "",
188
+ language: durationLanguage,
189
+ round: false,
190
+ serialComma: true,
191
+ spacer: " ",
192
+ timeAdverb: false,
193
+ unitMeasures: {
194
+ d: 864e5,
195
+ h: 36e5,
196
+ m: 6e4,
197
+ mo: 2629746e3,
198
+ // 365.2425 / 12 = 30.436875 days
199
+ ms: 1,
200
+ s: 1e3,
201
+ w: 6048e5,
202
+ y: 31556952e3
203
+ // 365 + 1/4 - 1/100 + 1/400 (actual leap day rules) = 365.2425 days
204
+ },
205
+ units: ["w", "d", "h", "m", "s"],
206
+ ...options
207
+ };
208
+ validateDurationLanguage(config.language);
209
+ const absTime = Math.abs(milliseconds);
210
+ const pieces = getPieces(absTime, config);
211
+ return formatPieces(pieces, config, milliseconds);
212
+ };
213
+
214
+ export { duration as default };