@arthurzakharov/ui-kit 1.0.2 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/box-b_yPaNPs.css +1 -0
- package/dist/assets/button-XGvsKGqH.css +1 -0
- package/dist/assets/certifications-tJ3i72S_.css +1 -0
- package/dist/assets/choice-BEXd0fh0.css +1 -0
- package/dist/assets/hidden-input-DHJQHUKd.css +1 -0
- package/dist/assets/index-CqamBlbE.css +1 -0
- package/dist/assets/input-DTN-3ZET.css +1 -0
- package/dist/assets/label-DF2VBeUr.css +1 -0
- package/dist/assets/main-C0tWHTEq.css +1 -0
- package/dist/assets/radio-label-Bd5UiESO.css +1 -0
- package/dist/assets/radio-text-DAsITkgm.css +1 -0
- package/dist/components/certifications/certifications.component.d.ts +1 -5
- package/dist/components/certifications/certifications.component.js +8 -8
- package/dist/components/certifications/certifications.test.d.ts +1 -0
- package/dist/components/certifications/certifications.test.js +37 -0
- package/dist/components/certifications/certifications.types.d.ts +5 -0
- package/dist/components/certifications/certifications.types.js +2 -0
- package/dist/components/certifications/index.d.ts +1 -0
- package/dist/components/certifications/index.js +5 -0
- package/dist/components/control/components/box/box.component.d.ts +2 -0
- package/dist/components/control/components/box/box.component.js +33 -0
- package/dist/components/control/components/box/box.test.d.ts +1 -0
- package/dist/components/control/components/box/box.test.js +111 -0
- package/dist/components/control/components/box/box.types.d.ts +9 -0
- package/dist/components/control/components/box/box.types.js +2 -0
- package/dist/components/control/components/box/index.d.ts +1 -0
- package/dist/components/control/components/box/index.js +5 -0
- package/dist/components/control/components/button/button.component.d.ts +2 -0
- package/dist/components/control/components/button/button.component.js +54 -0
- package/dist/components/control/components/button/button.test.d.ts +1 -0
- package/dist/components/control/components/button/button.test.js +155 -0
- package/dist/components/control/components/button/button.types.d.ts +16 -0
- package/dist/components/control/components/button/button.types.js +2 -0
- package/dist/components/control/components/button/index.d.ts +1 -0
- package/dist/components/control/components/button/index.js +5 -0
- package/dist/components/control/components/card-image/card-image.component.d.ts +2 -0
- package/dist/components/control/components/card-image/card-image.component.js +8 -0
- package/dist/components/control/components/card-image/card-image.test.d.ts +1 -0
- package/dist/components/control/components/card-image/card-image.test.js +118 -0
- package/dist/components/control/components/card-image/card-image.types.d.ts +6 -0
- package/dist/components/control/components/card-image/card-image.types.js +2 -0
- package/dist/components/control/components/card-image/index.d.ts +1 -0
- package/dist/components/control/components/card-image/index.js +5 -0
- package/dist/components/control/components/card-text/card-text.component.d.ts +2 -0
- package/dist/components/control/components/card-text/card-text.component.js +8 -0
- package/dist/components/control/components/card-text/card-text.test.d.ts +1 -0
- package/dist/components/control/components/card-text/card-text.test.js +109 -0
- package/dist/components/control/components/card-text/card-text.types.d.ts +5 -0
- package/dist/components/control/components/card-text/card-text.types.js +2 -0
- package/dist/components/control/components/card-text/index.d.ts +1 -0
- package/dist/components/control/components/card-text/index.js +5 -0
- package/dist/components/control/components/checkbox/checkbox.component.d.ts +2 -0
- package/dist/components/control/components/checkbox/checkbox.component.js +8 -0
- package/dist/components/control/components/checkbox/checkbox.types.d.ts +5 -0
- package/dist/components/control/components/checkbox/checkbox.types.js +2 -0
- package/dist/components/control/components/checkbox/index.d.ts +1 -0
- package/dist/components/control/components/checkbox/index.js +5 -0
- package/dist/components/control/components/choice/choice.component.d.ts +2 -0
- package/dist/components/control/components/choice/choice.component.js +43 -0
- package/dist/components/control/components/choice/choice.test.d.ts +1 -0
- package/dist/components/control/components/choice/choice.test.js +138 -0
- package/dist/components/control/components/choice/choice.types.d.ts +8 -0
- package/dist/components/control/components/choice/choice.types.js +2 -0
- package/dist/components/control/components/choice/index.d.ts +1 -0
- package/dist/components/control/components/choice/index.js +5 -0
- package/dist/components/control/components/dropdown/dropdown.component.d.ts +2 -0
- package/dist/components/control/components/dropdown/dropdown.component.js +12 -0
- package/dist/components/control/components/dropdown/dropdown.types.d.ts +14 -0
- package/dist/components/control/components/dropdown/dropdown.types.js +2 -0
- package/dist/components/control/components/dropdown/index.d.ts +1 -0
- package/dist/components/control/components/dropdown/index.js +5 -0
- package/dist/components/control/components/hidden-input/hidden-input.component.d.ts +2 -0
- package/dist/components/control/components/hidden-input/hidden-input.component.js +26 -0
- package/dist/components/control/components/hidden-input/hidden-input.test.d.ts +1 -0
- package/dist/components/control/components/hidden-input/hidden-input.test.js +142 -0
- package/dist/components/control/components/hidden-input/hidden-input.types.d.ts +11 -0
- package/dist/components/control/components/hidden-input/hidden-input.types.js +2 -0
- package/dist/components/control/components/hidden-input/index.d.ts +1 -0
- package/dist/components/control/components/hidden-input/index.js +5 -0
- package/dist/components/control/components/input/index.d.ts +1 -0
- package/dist/components/control/components/input/index.js +5 -0
- package/dist/components/control/components/input/input.component.d.ts +2 -0
- package/dist/components/control/components/input/input.component.js +6 -0
- package/dist/components/control/components/input/input.test.d.ts +1 -0
- package/dist/components/control/components/input/input.test.js +104 -0
- package/dist/components/control/components/input/input.types.d.ts +7 -0
- package/dist/components/control/components/input/input.types.js +2 -0
- package/dist/components/control/components/label/index.d.ts +1 -0
- package/dist/components/control/components/label/index.js +5 -0
- package/dist/components/control/components/label/label.component.d.ts +2 -0
- package/dist/components/control/components/label/label.component.js +29 -0
- package/dist/components/control/components/label/label.test.d.ts +1 -0
- package/dist/components/control/components/label/label.test.js +91 -0
- package/dist/components/control/components/label/label.types.d.ts +8 -0
- package/dist/components/control/components/label/label.types.js +2 -0
- package/dist/components/control/components/radio/index.d.ts +1 -0
- package/dist/components/control/components/radio/index.js +5 -0
- package/dist/components/control/components/radio/radio.component.d.ts +2 -0
- package/dist/components/control/components/radio/radio.component.js +8 -0
- package/dist/components/control/components/radio/radio.types.d.ts +6 -0
- package/dist/components/control/components/radio/radio.types.js +2 -0
- package/dist/components/control/components/radio-label/index.d.ts +1 -0
- package/dist/components/control/components/radio-label/index.js +5 -0
- package/dist/components/control/components/radio-label/radio-label.component.d.ts +3 -0
- package/dist/components/control/components/radio-label/radio-label.component.js +38 -0
- package/dist/components/control/components/radio-label/radio-label.test.d.ts +1 -0
- package/dist/components/control/components/radio-label/radio-label.test.js +282 -0
- package/dist/components/control/components/radio-label/radio-label.types.d.ts +17 -0
- package/dist/components/control/components/radio-label/radio-label.types.js +2 -0
- package/dist/components/control/components/radio-text/index.d.ts +1 -0
- package/dist/components/control/components/radio-text/index.js +5 -0
- package/dist/components/control/components/radio-text/radio-text.component.d.ts +2 -0
- package/dist/components/control/components/radio-text/radio-text.component.js +34 -0
- package/dist/components/control/components/radio-text/radio-text.test.d.ts +1 -0
- package/dist/components/control/components/radio-text/radio-text.test.js +82 -0
- package/dist/components/control/components/radio-text/radio-text.types.d.ts +6 -0
- package/dist/components/control/components/radio-text/radio-text.types.js +2 -0
- package/dist/components/control/components/text/index.d.ts +1 -0
- package/dist/components/control/components/text/index.js +5 -0
- package/dist/components/control/components/text/text.component.d.ts +2 -0
- package/dist/components/control/components/text/text.component.js +8 -0
- package/dist/components/control/components/text/text.test.d.ts +1 -0
- package/dist/components/control/components/text/text.test.js +146 -0
- package/dist/components/control/components/text/text.types.d.ts +6 -0
- package/dist/components/control/components/text/text.types.js +2 -0
- package/dist/components/control/components/textarea/index.d.ts +1 -0
- package/dist/components/control/components/textarea/index.js +5 -0
- package/dist/components/control/components/textarea/textarea.component.d.ts +2 -0
- package/dist/components/control/components/textarea/textarea.component.js +7 -0
- package/dist/components/control/components/textarea/textarea.test.d.ts +1 -0
- package/dist/components/control/components/textarea/textarea.test.js +148 -0
- package/dist/components/control/components/textarea/textarea.types.d.ts +8 -0
- package/dist/components/control/components/textarea/textarea.types.js +2 -0
- package/dist/components/control/hooks/index.d.ts +1 -0
- package/dist/components/control/hooks/index.js +5 -0
- package/dist/components/control/hooks/useChoice/index.d.ts +1 -0
- package/dist/components/control/hooks/useChoice/index.js +5 -0
- package/dist/components/control/hooks/useChoice/useChoice.hook.d.ts +5 -0
- package/dist/components/control/hooks/useChoice/useChoice.hook.js +10 -0
- package/dist/components/control/hooks/useChoice/useChoice.hook.test.d.ts +1 -0
- package/dist/components/control/hooks/useChoice/useChoice.hook.test.js +35 -0
- package/dist/components/control/index.d.ts +17 -0
- package/dist/components/control/index.js +13 -0
- package/dist/components/control/types.d.ts +35 -0
- package/dist/components/control/types.js +2 -0
- package/dist/components/control/utils/index.d.ts +1 -0
- package/dist/components/control/utils/index.js +7 -0
- package/dist/components/control/utils/utils.d.ts +4 -0
- package/dist/components/control/utils/utils.js +7 -0
- package/dist/components/control/utils/utils.test.d.ts +1 -0
- package/dist/components/control/utils/utils.test.js +34 -0
- package/dist/enums.d.ts +14 -0
- package/dist/enums.js +5 -0
- package/dist/index-DZTmNCEj.js +407 -0
- package/dist/input.component-Ju0oHzs9.js +38 -0
- package/dist/magic-string.es-uPKorP4O.js +664 -0
- package/dist/main.d.ts +2 -1
- package/dist/main.js +6 -4
- package/dist/react-18-1BDDKgtP.js +41 -0
- package/dist/react.esm-CZ9PjZjp.js +75462 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js +2 -0
- package/dist/utils/converter/converter.d.ts +37 -0
- package/dist/utils/converter/converter.js +140 -0
- package/dist/utils/converter/converter.test.d.ts +1 -0
- package/dist/utils/converter/converter.test.js +121 -0
- package/dist/utils/converter/index.d.ts +1 -0
- package/dist/utils/converter/index.js +5 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/time/index.d.ts +1 -0
- package/dist/utils/time/index.js +5 -0
- package/dist/utils/time/time.d.ts +7 -0
- package/dist/utils/time/time.js +34 -0
- package/dist/utils/time/time.test.d.ts +1 -0
- package/dist/utils/time/time.test.js +45 -0
- package/dist/vi.2VT5v0um-CyasTEXm.js +10517 -0
- package/package.json +17 -5
- package/dist/assets/certifications-CHPUtPfO.css +0 -1
package/dist/types.d.ts
ADDED
package/dist/types.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { DatePrecision } from '../../types';
|
|
2
|
+
export declare abstract class Converter {
|
|
3
|
+
private static formatNumberWithLeadingZero;
|
|
4
|
+
private static maskExplanation;
|
|
5
|
+
static mask(precision: DatePrecision): string;
|
|
6
|
+
static get Boolean(): {
|
|
7
|
+
ToBooleanString: (val: boolean) => string;
|
|
8
|
+
ToBooleanNumber: (val: boolean) => number;
|
|
9
|
+
ToBooleanNumberString: (val: boolean) => string;
|
|
10
|
+
};
|
|
11
|
+
static get BooleanString(): {
|
|
12
|
+
ToBoolean: (val: string) => boolean;
|
|
13
|
+
ToBooleanNumberString: (val: string) => string;
|
|
14
|
+
};
|
|
15
|
+
static get BooleanNumber(): {
|
|
16
|
+
ToBoolean: (val: number) => boolean;
|
|
17
|
+
ToBooleanString: (val: number) => string;
|
|
18
|
+
ToBooleanNumberString: (val: number) => string;
|
|
19
|
+
};
|
|
20
|
+
static get DateSting(): {
|
|
21
|
+
ToDate: (dateString: string) => Date | null;
|
|
22
|
+
ToDateStringUSFormat: (dateString: string) => string;
|
|
23
|
+
ToNumber: (dateString: string) => number;
|
|
24
|
+
ToMonthStyle: (dateString: string) => string;
|
|
25
|
+
ToDayStyle: (dateString: string) => string;
|
|
26
|
+
};
|
|
27
|
+
static get DateRelative(): {
|
|
28
|
+
ToDate: (dateRelative: string, setFirstHoursOfDay?: boolean) => Date;
|
|
29
|
+
};
|
|
30
|
+
static get Date(): {
|
|
31
|
+
ToDateString: (date: Date) => string;
|
|
32
|
+
};
|
|
33
|
+
static get Answer(): {
|
|
34
|
+
FromMultipleToArray: (value: string) => string[];
|
|
35
|
+
FromArrayToMultiple: (value: string[]) => string;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Time as c } from "../time/time.js";
|
|
2
|
+
class n {
|
|
3
|
+
static formatNumberWithLeadingZero(t) {
|
|
4
|
+
return String(t).padStart(2, "0");
|
|
5
|
+
}
|
|
6
|
+
static maskExplanation() {
|
|
7
|
+
return ["/", "d", "m", "y"];
|
|
8
|
+
}
|
|
9
|
+
static mask(t) {
|
|
10
|
+
return t === "day" ? "TT/MM/JJJJ" : "MM/JJJJ";
|
|
11
|
+
}
|
|
12
|
+
static get Boolean() {
|
|
13
|
+
return {
|
|
14
|
+
ToBooleanString: (t) => t ? "true" : "false",
|
|
15
|
+
ToBooleanNumber: (t) => t ? 1 : 0,
|
|
16
|
+
ToBooleanNumberString: (t) => t ? "1" : "0"
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
static get BooleanString() {
|
|
20
|
+
const t = (e) => e.toLowerCase();
|
|
21
|
+
return {
|
|
22
|
+
ToBoolean: (e) => t(e) === "true" ? !0 : (t(e) === "false", !1),
|
|
23
|
+
ToBooleanNumberString: (e) => t(e) === "true" ? "1" : (t(e) === "false", "0")
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
static get BooleanNumber() {
|
|
27
|
+
return {
|
|
28
|
+
ToBoolean: (t) => t === 1,
|
|
29
|
+
ToBooleanString: (t) => t === 1 ? "true" : "false",
|
|
30
|
+
ToBooleanNumberString: (t) => t === 1 ? "1" : "0"
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/* DD/MM/YYYY is the only allowed and expected format of date string */
|
|
34
|
+
static get DateSting() {
|
|
35
|
+
return {
|
|
36
|
+
ToDate: (t) => {
|
|
37
|
+
const [e, ...r] = n.maskExplanation(), a = t.split(e), { day: o, month: s, year: i } = r.reduce(
|
|
38
|
+
(u, p, l) => {
|
|
39
|
+
switch (p) {
|
|
40
|
+
case "d":
|
|
41
|
+
u.day = Number(a[l]) || NaN;
|
|
42
|
+
break;
|
|
43
|
+
case "m":
|
|
44
|
+
u.month = Number(a[l]) || NaN;
|
|
45
|
+
break;
|
|
46
|
+
case "y":
|
|
47
|
+
u.year = Number(a[l]) || NaN;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
return u;
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
day: NaN,
|
|
54
|
+
month: NaN,
|
|
55
|
+
year: NaN
|
|
56
|
+
}
|
|
57
|
+
), m = c.date(o, s - 1, i);
|
|
58
|
+
return m.toLocaleDateString("en-US", {
|
|
59
|
+
month: "numeric",
|
|
60
|
+
day: "numeric",
|
|
61
|
+
year: "numeric"
|
|
62
|
+
}) === [s, o, i].join(e) ? m : null;
|
|
63
|
+
},
|
|
64
|
+
ToDateStringUSFormat: (t) => {
|
|
65
|
+
const [e] = n.maskExplanation(), [r, a, o] = t.split(e);
|
|
66
|
+
return [o, a, r].join(e);
|
|
67
|
+
},
|
|
68
|
+
ToNumber: (t) => {
|
|
69
|
+
const e = n.DateSting.ToDate(t);
|
|
70
|
+
return e ? e.getTime() : 0;
|
|
71
|
+
},
|
|
72
|
+
ToMonthStyle: (t) => {
|
|
73
|
+
const [e] = n.maskExplanation(), [, r, a] = t.split(e);
|
|
74
|
+
return r && a ? [r, a].join(e) : "";
|
|
75
|
+
},
|
|
76
|
+
ToDayStyle: (t) => {
|
|
77
|
+
const [e] = n.maskExplanation(), [r, a] = t.split(e);
|
|
78
|
+
return r && a ? ["01", r, a].join(e) : "";
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
static get DateRelative() {
|
|
83
|
+
return {
|
|
84
|
+
ToDate: (t, e = !0) => {
|
|
85
|
+
const r = e ? c.startOfDay(/* @__PURE__ */ new Date()) : c.endOfDay(/* @__PURE__ */ new Date());
|
|
86
|
+
switch (t) {
|
|
87
|
+
case "today":
|
|
88
|
+
return r;
|
|
89
|
+
case "no limit":
|
|
90
|
+
return e && r.setFullYear(r.getFullYear() - 200), e || r.setFullYear(r.getFullYear() + 200), r;
|
|
91
|
+
default:
|
|
92
|
+
if (t.includes("day")) {
|
|
93
|
+
const [a] = t.split(" ");
|
|
94
|
+
r.setDate(r.getDate() + (e ? -a : +a));
|
|
95
|
+
}
|
|
96
|
+
if (t.includes("month")) {
|
|
97
|
+
const [a] = t.split(" ");
|
|
98
|
+
r.setMonth(r.getMonth() + (e ? -a : +a));
|
|
99
|
+
}
|
|
100
|
+
if (t.includes("year")) {
|
|
101
|
+
const [a] = t.split(" ");
|
|
102
|
+
r.setFullYear(r.getFullYear() + (e ? -a : +a));
|
|
103
|
+
}
|
|
104
|
+
if (t.includes("date")) {
|
|
105
|
+
const [a] = t.split(" "), [o, s, i] = a.split("/");
|
|
106
|
+
r.setDate(Number(o)), r.setMonth(Number(s) - 1), r.setFullYear(Number(i));
|
|
107
|
+
}
|
|
108
|
+
return r;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
static get Date() {
|
|
114
|
+
return {
|
|
115
|
+
ToDateString: (t) => {
|
|
116
|
+
const [e, ...r] = n.maskExplanation();
|
|
117
|
+
return r.map((a) => {
|
|
118
|
+
switch (a) {
|
|
119
|
+
case "d":
|
|
120
|
+
return n.formatNumberWithLeadingZero(t.getDate());
|
|
121
|
+
case "m":
|
|
122
|
+
return n.formatNumberWithLeadingZero(t.getMonth() + 1);
|
|
123
|
+
case "y":
|
|
124
|
+
return t.getFullYear();
|
|
125
|
+
}
|
|
126
|
+
}).join(e);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
static get Answer() {
|
|
131
|
+
return {
|
|
132
|
+
FromMultipleToArray: (e) => e.split(", "),
|
|
133
|
+
FromArrayToMultiple: (e) => e.join(", ")
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export {
|
|
138
|
+
n as Converter
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvY29udmVydGVyL2NvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1hc2tFeHBsYW5hdGlvbiwgRGF0ZVByZWNpc2lvbiB9IGZyb20gJ0AvdHlwZXMnO1xuaW1wb3J0IHsgVGltZSB9IGZyb20gJ0AvdXRpbHMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29udmVydGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgZm9ybWF0TnVtYmVyV2l0aExlYWRpbmdaZXJvKG51bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5nKG51bWJlcikucGFkU3RhcnQoMiwgJzAnKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG1hc2tFeHBsYW5hdGlvbigpOiBNYXNrRXhwbGFuYXRpb24ge1xuICAgIHJldHVybiBbJy8nLCAnZCcsICdtJywgJ3knXTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbWFzayhwcmVjaXNpb246IERhdGVQcmVjaXNpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09ICdkYXknID8gJ1RUL01NL0pKSkonIDogJ01NL0pKSkonO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgQm9vbGVhbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgVG9Cb29sZWFuU3RyaW5nOiAodmFsOiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgICB9LFxuICAgICAgVG9Cb29sZWFuTnVtYmVyOiAodmFsOiBib29sZWFuKTogbnVtYmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbCA/IDEgOiAwO1xuICAgICAgfSxcbiAgICAgIFRvQm9vbGVhbk51bWJlclN0cmluZzogKHZhbDogYm9vbGVhbik6IHN0cmluZyA9PiB7XG4gICAgICAgIHJldHVybiB2YWwgPyAnMScgOiAnMCc7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCBCb29sZWFuU3RyaW5nKCkge1xuICAgIGNvbnN0IHRvTG93ZXIgPSAodmFsOiBzdHJpbmcpOiBzdHJpbmcgPT4gdmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFRvQm9vbGVhbjogKHZhbDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGlmICh0b0xvd2VyKHZhbCkgPT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0b0xvd2VyKHZhbCkgPT09ICdmYWxzZScpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIFRvQm9vbGVhbk51bWJlclN0cmluZzogKHZhbDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKHRvTG93ZXIodmFsKSA9PT0gJ3RydWUnKSByZXR1cm4gJzEnO1xuICAgICAgICBpZiAodG9Mb3dlcih2YWwpID09PSAnZmFsc2UnKSByZXR1cm4gJzAnO1xuICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgQm9vbGVhbk51bWJlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgVG9Cb29sZWFuOiAodmFsOiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgICAgICAgaWYgKHZhbCA9PT0gMSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh2YWwgPT09IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIFRvQm9vbGVhblN0cmluZzogKHZhbDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKHZhbCA9PT0gMSkgcmV0dXJuICd0cnVlJztcbiAgICAgICAgaWYgKHZhbCA9PT0gMCkgcmV0dXJuICdmYWxzZSc7XG4gICAgICAgIHJldHVybiAnZmFsc2UnO1xuICAgICAgfSxcbiAgICAgIFRvQm9vbGVhbk51bWJlclN0cmluZzogKHZhbDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKHZhbCA9PT0gMSkgcmV0dXJuICcxJztcbiAgICAgICAgaWYgKHZhbCA9PT0gMCkgcmV0dXJuICcwJztcbiAgICAgICAgcmV0dXJuICcwJztcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qIEREL01NL1lZWVkgaXMgdGhlIG9ubHkgYWxsb3dlZCBhbmQgZXhwZWN0ZWQgZm9ybWF0IG9mIGRhdGUgc3RyaW5nICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IERhdGVTdGluZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgVG9EYXRlOiAoZGF0ZVN0cmluZzogc3RyaW5nKTogRGF0ZSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBbc2VwYXJhdG9yLCAuLi5leHBsYW5hdGlvbnNdID0gQ29udmVydGVyLm1hc2tFeHBsYW5hdGlvbigpO1xuICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHNlcGFyYXRvcik7XG4gICAgICAgIGNvbnN0IHsgZGF5LCBtb250aCwgeWVhciB9ID0gZXhwbGFuYXRpb25zLnJlZHVjZShcbiAgICAgICAgICAoZGF0ZSwga2V5LCBjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGRhdGUuZGF5ID0gTnVtYmVyKGRhdGVBcnJheVtjdXJyZW50SW5kZXhdKSB8fCBOYU47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIGRhdGUubW9udGggPSBOdW1iZXIoZGF0ZUFycmF5W2N1cnJlbnRJbmRleF0pIHx8IE5hTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgZGF0ZS55ZWFyID0gTnVtYmVyKGRhdGVBcnJheVtjdXJyZW50SW5kZXhdKSB8fCBOYU47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRheTogTmFOLFxuICAgICAgICAgICAgbW9udGg6IE5hTixcbiAgICAgICAgICAgIHllYXI6IE5hTixcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZERhdGUgPSBUaW1lLmRhdGUoZGF5LCBtb250aCAtIDEsIHllYXIpO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsZUNvbnZlcnRlZERhdGUgPSBjb252ZXJ0ZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgbW9udGg6ICdudW1lcmljJyxcbiAgICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBsb2NhbGVDb252ZXJ0ZWREYXRlID09PSBbbW9udGgsIGRheSwgeWVhcl0uam9pbihzZXBhcmF0b3IpID8gY29udmVydGVkRGF0ZSA6IG51bGw7XG4gICAgICB9LFxuICAgICAgVG9EYXRlU3RyaW5nVVNGb3JtYXQ6IChkYXRlU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICBjb25zdCBbc2VwYXJhdG9yXSA9IENvbnZlcnRlci5tYXNrRXhwbGFuYXRpb24oKTtcbiAgICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gZGF0ZVN0cmluZy5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgICByZXR1cm4gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgIH0sXG4gICAgICBUb051bWJlcjogKGRhdGVTdHJpbmc6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIGRhdGUgPyBkYXRlLmdldFRpbWUoKSA6IDA7XG4gICAgICB9LFxuICAgICAgVG9Nb250aFN0eWxlOiAoZGF0ZVN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgY29uc3QgW3NlcGFyYXRvcl0gPSBDb252ZXJ0ZXIubWFza0V4cGxhbmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IFssIG1vbnRoLCB5ZWFyXSA9IGRhdGVTdHJpbmcuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgICAgcmV0dXJuIG1vbnRoICYmIHllYXIgPyBbbW9udGgsIHllYXJdLmpvaW4oc2VwYXJhdG9yKSA6ICcnO1xuICAgICAgfSxcbiAgICAgIFRvRGF5U3R5bGU6IChkYXRlU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICBjb25zdCBbc2VwYXJhdG9yXSA9IENvbnZlcnRlci5tYXNrRXhwbGFuYXRpb24oKTtcbiAgICAgICAgY29uc3QgW21vbnRoLCB5ZWFyXSA9IGRhdGVTdHJpbmcuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgICAgcmV0dXJuIG1vbnRoICYmIHllYXIgPyBbJzAxJywgbW9udGgsIHllYXJdLmpvaW4oc2VwYXJhdG9yKSA6ICcnO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgRGF0ZVJlbGF0aXZlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBUb0RhdGU6IChkYXRlUmVsYXRpdmU6IHN0cmluZywgc2V0Rmlyc3RIb3Vyc09mRGF5OiBib29sZWFuID0gdHJ1ZSk6IERhdGUgPT4ge1xuICAgICAgICBjb25zdCB0b2RheSA9IHNldEZpcnN0SG91cnNPZkRheSA/IFRpbWUuc3RhcnRPZkRheShuZXcgRGF0ZSgpKSA6IFRpbWUuZW5kT2ZEYXkobmV3IERhdGUoKSk7XG4gICAgICAgIHN3aXRjaCAoZGF0ZVJlbGF0aXZlKSB7XG4gICAgICAgICAgY2FzZSAndG9kYXknOlxuICAgICAgICAgICAgcmV0dXJuIHRvZGF5O1xuICAgICAgICAgIGNhc2UgJ25vIGxpbWl0JzpcbiAgICAgICAgICAgIGlmIChzZXRGaXJzdEhvdXJzT2ZEYXkpIHRvZGF5LnNldEZ1bGxZZWFyKHRvZGF5LmdldEZ1bGxZZWFyKCkgLSAyMDApO1xuICAgICAgICAgICAgaWYgKCFzZXRGaXJzdEhvdXJzT2ZEYXkpIHRvZGF5LnNldEZ1bGxZZWFyKHRvZGF5LmdldEZ1bGxZZWFyKCkgKyAyMDApO1xuICAgICAgICAgICAgcmV0dXJuIHRvZGF5O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoZGF0ZVJlbGF0aXZlLmluY2x1ZGVzKCdkYXknKSkge1xuICAgICAgICAgICAgICBjb25zdCBbZGF5U2hpZnRdID0gZGF0ZVJlbGF0aXZlLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgIHRvZGF5LnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpICsgKHNldEZpcnN0SG91cnNPZkRheSA/IC1kYXlTaGlmdCA6ICtkYXlTaGlmdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVSZWxhdGl2ZS5pbmNsdWRlcygnbW9udGgnKSkge1xuICAgICAgICAgICAgICBjb25zdCBbbW9udGhTaGlmdF0gPSBkYXRlUmVsYXRpdmUuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgICAgdG9kYXkuc2V0TW9udGgodG9kYXkuZ2V0TW9udGgoKSArIChzZXRGaXJzdEhvdXJzT2ZEYXkgPyAtbW9udGhTaGlmdCA6ICttb250aFNoaWZ0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZVJlbGF0aXZlLmluY2x1ZGVzKCd5ZWFyJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgW3llYXJTaGlmdF0gPSBkYXRlUmVsYXRpdmUuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgICAgdG9kYXkuc2V0RnVsbFllYXIodG9kYXkuZ2V0RnVsbFllYXIoKSArIChzZXRGaXJzdEhvdXJzT2ZEYXkgPyAteWVhclNoaWZ0IDogK3llYXJTaGlmdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVSZWxhdGl2ZS5pbmNsdWRlcygnZGF0ZScpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IFtleGFjdERhdGVdID0gZGF0ZVJlbGF0aXZlLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IGV4YWN0RGF0ZS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICB0b2RheS5zZXREYXRlKE51bWJlcihkYXkpKTtcbiAgICAgICAgICAgICAgdG9kYXkuc2V0TW9udGgoTnVtYmVyKG1vbnRoKSAtIDEpO1xuICAgICAgICAgICAgICB0b2RheS5zZXRGdWxsWWVhcihOdW1iZXIoeWVhcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRvZGF5O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCBEYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBUb0RhdGVTdHJpbmc6IChkYXRlOiBEYXRlKTogc3RyaW5nID0+IHtcbiAgICAgICAgY29uc3QgW3NlcGFyYXRvciwgLi4uZXhwbGFuYXRpb25zXSA9IENvbnZlcnRlci5tYXNrRXhwbGFuYXRpb24oKTtcbiAgICAgICAgcmV0dXJuIGV4cGxhbmF0aW9uc1xuICAgICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENvbnZlcnRlci5mb3JtYXROdW1iZXJXaXRoTGVhZGluZ1plcm8oZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29udmVydGVyLmZvcm1hdE51bWJlcldpdGhMZWFkaW5nWmVybyhkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5qb2luKHNlcGFyYXRvcik7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCBBbnN3ZXIoKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gJywgJztcbiAgICByZXR1cm4ge1xuICAgICAgRnJvbU11bHRpcGxlVG9BcnJheTogKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpLFxuICAgICAgRnJvbUFycmF5VG9NdWx0aXBsZTogKHZhbHVlOiBzdHJpbmdbXSk6IHN0cmluZyA9PiB2YWx1ZS5qb2luKHNlcGFyYXRvciksXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNvbnZlcnRlciIsIm51bWJlciIsInByZWNpc2lvbiIsInZhbCIsInRvTG93ZXIiLCJkYXRlU3RyaW5nIiwic2VwYXJhdG9yIiwiZXhwbGFuYXRpb25zIiwiZGF0ZUFycmF5IiwiZGF5IiwibW9udGgiLCJ5ZWFyIiwiZGF0ZSIsImtleSIsImN1cnJlbnRJbmRleCIsImNvbnZlcnRlZERhdGUiLCJUaW1lIiwiZGF0ZVJlbGF0aXZlIiwic2V0Rmlyc3RIb3Vyc09mRGF5IiwidG9kYXkiLCJkYXlTaGlmdCIsIm1vbnRoU2hpZnQiLCJ5ZWFyU2hpZnQiLCJleGFjdERhdGUiLCJ2YWx1ZSJdLCJtYXBwaW5ncyI6IjtBQUdPLE1BQWVBLEVBQVU7QUFBQSxFQUM5QixPQUFlLDRCQUE0QkMsR0FBd0I7QUFDakUsV0FBTyxPQUFPQSxDQUFNLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFBQSxFQUN2QztBQUFBLEVBRUEsT0FBZSxrQkFBbUM7QUFDaEQsV0FBTyxDQUFDLEtBQUssS0FBSyxLQUFLLEdB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { MONTH as n } from "../../enums.js";
|
|
2
|
+
import { Converter as t } from "./converter.js";
|
|
3
|
+
import { d as r, i as o, g as e, b as B, a as s, v as u } from "../../vi.2VT5v0um-CyasTEXm.js";
|
|
4
|
+
r("Converter", () => {
|
|
5
|
+
r("mask", () => {
|
|
6
|
+
o("should return correct mask for day precision", () => {
|
|
7
|
+
e(t.mask("day")).toEqual("TT/MM/JJJJ");
|
|
8
|
+
}), o("should return correct mask for month precision", () => {
|
|
9
|
+
e(t.mask("month")).toEqual("MM/JJJJ");
|
|
10
|
+
});
|
|
11
|
+
}), r("Boolean", () => {
|
|
12
|
+
o("ToBooleanString", () => {
|
|
13
|
+
e(t.Boolean.ToBooleanString(!0)).toEqual("true"), e(t.Boolean.ToBooleanString(!1)).toEqual("false");
|
|
14
|
+
}), o("ToBooleanNumber", () => {
|
|
15
|
+
e(t.Boolean.ToBooleanNumber(!0)).toEqual(1), e(t.Boolean.ToBooleanNumber(!1)).toEqual(0);
|
|
16
|
+
}), o("ToBooleanNumberString", () => {
|
|
17
|
+
e(t.Boolean.ToBooleanNumberString(!0)).toEqual("1"), e(t.Boolean.ToBooleanNumberString(!1)).toEqual("0");
|
|
18
|
+
});
|
|
19
|
+
}), r("BooleanString", () => {
|
|
20
|
+
o("ToBoolean", () => {
|
|
21
|
+
e(t.BooleanString.ToBoolean("true")).toBe(!0), e(t.BooleanString.ToBoolean("True")).toBe(!0), e(t.BooleanString.ToBoolean("false")).toBe(!1), e(t.BooleanString.ToBoolean("False")).toBe(!1), e(t.BooleanString.ToBoolean("random")).toBe(!1), e(t.BooleanString.ToBoolean("")).toBe(!1);
|
|
22
|
+
}), o("ToBooleanNumberString", () => {
|
|
23
|
+
e(t.BooleanString.ToBooleanNumberString("true")).toBe("1"), e(t.BooleanString.ToBooleanNumberString("True")).toBe("1"), e(t.BooleanString.ToBooleanNumberString("false")).toBe("0"), e(t.BooleanString.ToBooleanNumberString("False")).toBe("0"), e(t.BooleanString.ToBooleanNumberString("random")).toBe("0"), e(t.BooleanString.ToBooleanNumberString("")).toBe("0");
|
|
24
|
+
});
|
|
25
|
+
}), r("BooleanNumber", () => {
|
|
26
|
+
o("ToBoolean", () => {
|
|
27
|
+
e(t.BooleanNumber.ToBoolean(1)).toBe(!0), e(t.BooleanNumber.ToBoolean(0)).toBe(!1), e(t.BooleanNumber.ToBoolean(5)).toBe(!1), e(t.BooleanNumber.ToBoolean(NaN)).toBe(!1);
|
|
28
|
+
}), o("ToBooleanString", () => {
|
|
29
|
+
e(t.BooleanNumber.ToBooleanString(1)).toBe("true"), e(t.BooleanNumber.ToBooleanString(0)).toBe("false"), e(t.BooleanNumber.ToBooleanString(5)).toBe("false"), e(t.BooleanNumber.ToBooleanString(NaN)).toBe("false");
|
|
30
|
+
}), o("ToBooleanNumberString", () => {
|
|
31
|
+
e(t.BooleanNumber.ToBooleanNumberString(1)).toBe("1"), e(t.BooleanNumber.ToBooleanNumberString(0)).toBe("0"), e(t.BooleanNumber.ToBooleanNumberString(5)).toBe("0"), e(t.BooleanNumber.ToBooleanNumberString(NaN)).toBe("0");
|
|
32
|
+
});
|
|
33
|
+
}), r("DateSting", () => {
|
|
34
|
+
r("ToDate", () => {
|
|
35
|
+
o("should convert valid date string to Date object", () => {
|
|
36
|
+
const l = t.DateSting.ToDate("15/01/2022");
|
|
37
|
+
e(l).toBeInstanceOf(Date), e(l?.getDate()).toEqual(15), e(l?.getMonth()).toEqual(n.JANUARY), e(l?.getFullYear()).toEqual(2022);
|
|
38
|
+
}), o("should return null for invalid date string", () => {
|
|
39
|
+
e(t.DateSting.ToDate("2022/01/15")).toBeNull(), e(t.DateSting.ToDate("01/15/2022")).toBeNull(), e(t.DateSting.ToDate("32/01/2022")).toBeNull(), e(t.DateSting.ToDate("invalid")).toBeNull();
|
|
40
|
+
});
|
|
41
|
+
}), r("ToDateStringUSFormat", () => {
|
|
42
|
+
o("should reformat date string", () => {
|
|
43
|
+
e(t.DateSting.ToDateStringUSFormat("15/01/2022")).toEqual("2022/01/15"), e(t.DateSting.ToDateStringUSFormat("33/44/2222")).toEqual("2222/44/33");
|
|
44
|
+
});
|
|
45
|
+
}), r("ToNumber", () => {
|
|
46
|
+
o("should return timestamp for valid date", () => {
|
|
47
|
+
const l = t.DateSting.ToNumber("15/01/2022");
|
|
48
|
+
e(l).toBeGreaterThan(0);
|
|
49
|
+
}), o("should return 0 for invalid date", () => {
|
|
50
|
+
e(t.DateSting.ToNumber("2022/01/15")).toEqual(0), e(t.DateSting.ToNumber("01/15/2022")).toEqual(0), e(t.DateSting.ToNumber("32/01/2022")).toEqual(0), e(t.DateSting.ToNumber("invalid")).toEqual(0);
|
|
51
|
+
});
|
|
52
|
+
}), r("ToMonthStyle", () => {
|
|
53
|
+
o("should return month and year", () => {
|
|
54
|
+
e(t.DateSting.ToMonthStyle("15/01/2022")).toEqual("01/2022"), e(t.DateSting.ToMonthStyle("2022/01/15")).toEqual("01/15"), e(t.DateSting.ToMonthStyle("01/15/2022")).toEqual("15/2022"), e(t.DateSting.ToMonthStyle("32/01/2022")).toEqual("01/2022");
|
|
55
|
+
}), o("should handle empty string", () => {
|
|
56
|
+
e(t.DateSting.ToMonthStyle("")).toEqual(""), e(t.DateSting.ToMonthStyle("invalid")).toEqual("");
|
|
57
|
+
});
|
|
58
|
+
}), r("ToDayStyle", () => {
|
|
59
|
+
o("should return first day of month", () => {
|
|
60
|
+
e(t.DateSting.ToDayStyle("01/2022")).toEqual("01/01/2022"), e(t.DateSting.ToDayStyle("2022/01/15")).toEqual("01/2022/01"), e(t.DateSting.ToDayStyle("01/15/2022")).toEqual("01/01/15"), e(t.DateSting.ToDayStyle("32/01/2022")).toEqual("01/32/01");
|
|
61
|
+
}), o("should handle empty string", () => {
|
|
62
|
+
e(t.DateSting.ToDayStyle("")).toBe(""), e(t.DateSting.ToDayStyle("invalid")).toBe("");
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}), r("DateRelative", () => {
|
|
66
|
+
B(() => {
|
|
67
|
+
u.useFakeTimers(), u.setSystemTime(new Date(2022, n.JUNE, 15, 12, 0, 0));
|
|
68
|
+
}), s(() => {
|
|
69
|
+
u.useRealTimers();
|
|
70
|
+
}), o('should handle "today"', () => {
|
|
71
|
+
const a = t.DateRelative.ToDate("today", !0), l = t.DateRelative.ToDate("today", !1), i = t.DateRelative.ToDate("today");
|
|
72
|
+
e(a.getHours()).toBe(0), e(a.getDate()).toBe(15), e(l.getHours()).toBe(23), e(l.getDate()).toBe(15), e(i.getHours()).toBe(0), e(i.getDate()).toBe(15);
|
|
73
|
+
}), o('should handle "no limit"', () => {
|
|
74
|
+
const a = t.DateRelative.ToDate("no limit", !0);
|
|
75
|
+
e(a.getFullYear()).toEqual(1822);
|
|
76
|
+
const l = t.DateRelative.ToDate("no limit", !1);
|
|
77
|
+
e(l.getFullYear()).toEqual(2222);
|
|
78
|
+
}), o("should handle relative days", () => {
|
|
79
|
+
const a = t.DateRelative.ToDate("20 day", !0);
|
|
80
|
+
e(a.getDate()).toBe(26), e(a.getMonth()).toBe(n.MAY), e(a.getFullYear()).toBe(2022);
|
|
81
|
+
const l = t.DateRelative.ToDate("20 day", !1);
|
|
82
|
+
e(l.getDate()).toBe(5), e(l.getMonth()).toBe(n.JULY), e(l.getFullYear()).toBe(2022);
|
|
83
|
+
}), o("should handle relative month", () => {
|
|
84
|
+
const a = t.DateRelative.ToDate("10 month", !0);
|
|
85
|
+
e(a.getDate()).toBe(15), e(a.getMonth()).toBe(n.AUGUST), e(a.getFullYear()).toBe(2021);
|
|
86
|
+
const l = t.DateRelative.ToDate("10 month", !1);
|
|
87
|
+
e(l.getDate()).toBe(15), e(l.getMonth()).toBe(n.APRIL), e(l.getFullYear()).toBe(2023);
|
|
88
|
+
}), o("should handle relative year", () => {
|
|
89
|
+
const a = t.DateRelative.ToDate("10 year", !0);
|
|
90
|
+
e(a.getDate()).toBe(15), e(a.getMonth()).toBe(n.JUNE), e(a.getFullYear()).toBe(2012);
|
|
91
|
+
const l = t.DateRelative.ToDate("10 year", !1);
|
|
92
|
+
e(l.getDate()).toBe(15), e(l.getMonth()).toBe(n.JUNE), e(l.getFullYear()).toBe(2032);
|
|
93
|
+
}), o("should handle specific date", () => {
|
|
94
|
+
const a = t.DateRelative.ToDate("20/01/2023 date", !0);
|
|
95
|
+
e(a.getDate()).toBe(20), e(a.getMonth()).toBe(n.JANUARY), e(a.getFullYear()).toBe(2023);
|
|
96
|
+
}), o("should return today date if specific date can not be parsed", () => {
|
|
97
|
+
const a = t.DateRelative.ToDate("invalid");
|
|
98
|
+
e(a.getDate()).toBe(15), e(a.getMonth()).toBe(n.JUNE), e(a.getFullYear()).toBe(2022);
|
|
99
|
+
});
|
|
100
|
+
}), r("Date", () => {
|
|
101
|
+
o("ToDateString", () => {
|
|
102
|
+
const a = new Date(2022, n.JANUARY, 5);
|
|
103
|
+
e(t.Date.ToDateString(a)).toBe("05/01/2022");
|
|
104
|
+
});
|
|
105
|
+
}), r("Answer", () => {
|
|
106
|
+
r("FromMultipleToArray", () => {
|
|
107
|
+
o('should return array of elements if separator is correct (", ")', () => {
|
|
108
|
+
e(t.Answer.FromMultipleToArray("a, b, c")).toEqual(["a", "b", "c"]);
|
|
109
|
+
}), o("should return string as single array element if string has no correct separator", () => {
|
|
110
|
+
e(t.Answer.FromMultipleToArray("a,b,c")).toEqual(["a,b,c"]), e(t.Answer.FromMultipleToArray("abc")).toEqual(["abc"]), e(t.Answer.FromMultipleToArray("")).toEqual([""]);
|
|
111
|
+
});
|
|
112
|
+
}), r("FromArrayToMultiple", () => {
|
|
113
|
+
o("should return joined string from array elements", () => {
|
|
114
|
+
e(t.Answer.FromArrayToMultiple(["a", "b", "c"])).toBe("a, b, c");
|
|
115
|
+
}), o("should return empty string for empty array", () => {
|
|
116
|
+
e(t.Answer.FromArrayToMultiple([])).toBe("");
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLnRlc3QuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9jb252ZXJ0ZXIvY29udmVydGVyLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJFYWNoLCBiZWZvcmVFYWNoLCBkZXNjcmliZSwgZXhwZWN0LCBpdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgTU9OVEggfSBmcm9tICdAL2VudW1zJztcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gJ0AvdXRpbHMnO1xuXG5kZXNjcmliZSgnQ29udmVydGVyJywgKCkgPT4ge1xuICBkZXNjcmliZSgnbWFzaycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IG1hc2sgZm9yIGRheSBwcmVjaXNpb24nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoQ29udmVydGVyLm1hc2soJ2RheScpKS50b0VxdWFsKCdUVC9NTS9KSkpKJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IG1hc2sgZm9yIG1vbnRoIHByZWNpc2lvbicsICgpID0+IHtcbiAgICAgIGV4cGVjdChDb252ZXJ0ZXIubWFzaygnbW9udGgnKSkudG9FcXVhbCgnTU0vSkpKSicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQm9vbGVhbicsICgpID0+IHtcbiAgICBpdCgnVG9Cb29sZWFuU3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KENvbnZlcnRlci5Cb29sZWFuLlRvQm9vbGVhblN0cmluZyh0cnVlKSkudG9FcXVhbCgndHJ1ZScpO1xuICAgICAgZXhwZWN0KENvbnZlcnRlci5Cb29sZWFuLlRvQm9vbGVhblN0cmluZyhmYWxzZSkpLnRvRXF1YWwoJ2ZhbHNlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnVG9Cb29sZWFuTnVtYmVyJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KENvbnZlcnRlci5Cb29sZWFuLlRvQm9vbGVhbk51bWJlcih0cnVlKSkudG9FcXVhbCgxKTtcbiAgICAgIGV4cGVjdChDb252ZXJ0ZXIuQm9vbGVhbi5Ub0Jvb2xlYW5OdW1iZXIoZmFsc2UpKS50b0VxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ1RvQm9vbGVhbk51bWJlclN0cmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChDb252ZXJ0ZXIuQm9vbGVhbi5Ub0Jvb2xlYW5OdW1iZXJTdHJpbmcodHJ1ZSkpLnRvRXF1YWwoJzEnKTtcbiAgICAgIGV4cGVjdChDb252ZXJ0ZXIuQm9vbGVhbi5Ub0Jvb2xlYW5OdW1iZXJTdHJpbmcoZmFsc2UpKS50b0VxdWFsKCcwJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCb29sZWFuU3RyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdUb0Jvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5TdHJpbmcuVG9Cb29sZWFuKCd0cnVlJykpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5TdHJpbmcuVG9Cb29sZWFuKCdUcnVlJykpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5TdHJpbmcuVG9Cb29sZWFuKCdmYWxzZScpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChDb252ZXJ0ZXIuQm9vbGVhblN0cmluZy5Ub0Jvb2xlYW4oJ0ZhbHNlJykpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KENvbnZlcnRlci5Cb29sZWFuU3RyaW5nLlRvQm9vbGVhbigncmFuZG9tJykpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KENvbnZlcnRlci5Cb29sZWFuU3RyaW5nLlRvQm9vbGVhbignJykpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1RvQm9vbGVhbk51bWJlclN0cmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChDb252ZXJ0ZXIuQm9vbGVhblN0cmluZy5Ub0Jvb2xlYW5OdW1iZXJTdHJpbmcoJ3RydWUnKSkudG9CZSgnMScpO1xuICAgICAgZXhwZWN0KENvbnZlcnRlci5Cb29sZWFuU3RyaW5nLlRvQm9vbGVhbk51bWJlclN0cmluZygnVHJ1ZScpKS50b0JlKCcxJyk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5TdHJpbmcuVG9Cb29sZWFuTnVtYmVyU3RyaW5nKCdmYWxzZScpKS50b0JlKCcwJyk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5TdHJpbmcuVG9Cb29sZWFuTnVtYmVyU3RyaW5nKCdGYWxzZScpKS50b0JlKCcwJyk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5TdHJpbmcuVG9Cb29sZWFuTnVtYmVyU3RyaW5nKCdyYW5kb20nKSkudG9CZSgnMCcpO1xuICAgICAgZXhwZWN0KENvbnZlcnRlci5Cb29sZWFuU3RyaW5nLlRvQm9vbGVhbk51bWJlclN0cmluZygnJykpLnRvQmUoJzAnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Jvb2xlYW5OdW1iZXInLCAoKSA9PiB7XG4gICAgaXQoJ1RvQm9vbGVhbicsICgpID0+IHtcbiAgICAgIGV4cGVjdChDb252ZXJ0ZXIuQm9vbGVhbk51bWJlci5Ub0Jvb2xlYW4oMSkpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5OdW1iZXIuVG9Cb29sZWFuKDApKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChDb252ZXJ0ZXIuQm9vbGVhbk51bWJlci5Ub0Jvb2xlYW4oNSkpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KENvbnZlcnRlci5Cb29sZWFuTnVtYmVyLlRvQm9vbGVhbihOYU4pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdUb0Jvb2xlYW5TdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5OdW1iZXIuVG9Cb29sZWFuU3RyaW5nKDEpKS50b0JlKCd0cnVlJyk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5OdW1iZXIuVG9Cb29sZWFuU3RyaW5nKDApKS50b0JlKCdmYWxzZScpO1xuICAgICAgZXhwZWN0KENvbnZlcnRlci5Cb29sZWFuTnVtYmVyLlRvQm9vbGVhblN0cmluZyg1KSkudG9CZSgnZmFsc2UnKTtcbiAgICAgIGV4cGVjdChDb252ZXJ0ZXIuQm9vbGVhbk51bWJlci5Ub0Jvb2xlYW5TdHJpbmcoTmFOKSkudG9CZSgnZmFsc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdUb0Jvb2xlYW5OdW1iZXJTdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5OdW1iZXIuVG9Cb29sZWFuTnVtYmVyU3RyaW5nKDEpKS50b0JlKCcxJyk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5OdW1iZXIuVG9Cb29sZWFuTnVtYmVyU3RyaW5nKDApKS50b0JlKCcwJyk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5OdW1iZXIuVG9Cb29sZWFuTnVtYmVyU3RyaW5nKDUpKS50b0JlKCcwJyk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkJvb2xlYW5OdW1iZXIuVG9Cb29sZWFuTnVtYmVyU3RyaW5nKE5hTikpLnRvQmUoJzAnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0RhdGVTdGluZycsICgpID0+IHtcbiAgICBkZXNjcmliZSgnVG9EYXRlJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHZhbGlkIGRhdGUgc3RyaW5nIHRvIERhdGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRlU3RyID0gJzE1LzAxLzIwMjInO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvRGF0ZShkYXRlU3RyKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUluc3RhbmNlT2YoRGF0ZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQ/LmdldERhdGUoKSkudG9FcXVhbCgxNSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQ/LmdldE1vbnRoKCkpLnRvRXF1YWwoTU9OVEguSkFOVUFSWSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQ/LmdldEZ1bGxZZWFyKCkpLnRvRXF1YWwoMjAyMik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCBmb3IgaW52YWxpZCBkYXRlIHN0cmluZycsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KENvbnZlcnRlci5EYXRlU3RpbmcuVG9EYXRlKCcyMDIyLzAxLzE1JykpLnRvQmVOdWxsKCk7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvRGF0ZSgnMDEvMTUvMjAyMicpKS50b0JlTnVsbCgpO1xuICAgICAgICBleHBlY3QoQ29udmVydGVyLkRhdGVTdGluZy5Ub0RhdGUoJzMyLzAxLzIwMjInKSkudG9CZU51bGwoKTtcbiAgICAgICAgZXhwZWN0KENvbnZlcnRlci5EYXRlU3RpbmcuVG9EYXRlKCdpbnZhbGlkJykpLnRvQmVOdWxsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUb0RhdGVTdHJpbmdVU0Zvcm1hdCcsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcmVmb3JtYXQgZGF0ZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvRGF0ZVN0cmluZ1VTRm9ybWF0KCcxNS8wMS8yMDIyJykpLnRvRXF1YWwoJzIwMjIvMDEvMTUnKTtcbiAgICAgICAgZXhwZWN0KENvbnZlcnRlci5EYXRlU3RpbmcuVG9EYXRlU3RyaW5nVVNGb3JtYXQoJzMzLzQ0LzIyMjInKSkudG9FcXVhbCgnMjIyMi80NC8zMycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVG9OdW1iZXInLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiB0aW1lc3RhbXAgZm9yIHZhbGlkIGRhdGUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSAnMTUvMDEvMjAyMic7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IENvbnZlcnRlci5EYXRlU3RpbmcuVG9OdW1iZXIoZGF0ZVN0cik7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiAwIGZvciBpbnZhbGlkIGRhdGUnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvTnVtYmVyKCcyMDIyLzAxLzE1JykpLnRvRXF1YWwoMCk7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvTnVtYmVyKCcwMS8xNS8yMDIyJykpLnRvRXF1YWwoMCk7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvTnVtYmVyKCczMi8wMS8yMDIyJykpLnRvRXF1YWwoMCk7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvTnVtYmVyKCdpbnZhbGlkJykpLnRvRXF1YWwoMCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUb01vbnRoU3R5bGUnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBtb250aCBhbmQgeWVhcicsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KENvbnZlcnRlci5EYXRlU3RpbmcuVG9Nb250aFN0eWxlKCcxNS8wMS8yMDIyJykpLnRvRXF1YWwoJzAxLzIwMjInKTtcbiAgICAgICAgLy8gVE9ETzogTmV4dCAzIGNhc2VzIGFyZSBpbmxvZ2ljLiBUaGlzIGlzIGEgcGxhY2UgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvTW9udGhTdHlsZSgnMjAyMi8wMS8xNScpKS50b0VxdWFsKCcwMS8xNScpO1xuICAgICAgICBleHBlY3QoQ29udmVydGVyLkRhdGVTdGluZy5Ub01vbnRoU3R5bGUoJzAxLzE1LzIwMjInKSkudG9FcXVhbCgnMTUvMjAyMicpO1xuICAgICAgICBleHBlY3QoQ29udmVydGVyLkRhdGVTdGluZy5Ub01vbnRoU3R5bGUoJzMyLzAxLzIwMjInKSkudG9FcXVhbCgnMDEvMjAyMicpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvTW9udGhTdHlsZSgnJykpLnRvRXF1YWwoJycpO1xuICAgICAgICBleHBlY3QoQ29udmVydGVyLkRhdGVTdGluZy5Ub01vbnRoU3R5bGUoJ2ludmFsaWQnKSkudG9FcXVhbCgnJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUb0RheVN0eWxlJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmlyc3QgZGF5IG9mIG1vbnRoJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoQ29udmVydGVyLkRhdGVTdGluZy5Ub0RheVN0eWxlKCcwMS8yMDIyJykpLnRvRXF1YWwoJzAxLzAxLzIwMjInKTtcbiAgICAgICAgLy8gVE9ETzogTmV4dCAzIGNhc2VzIGFyZSBpbmxvZ2ljLiBTYW1lIGFzIHdpdGggVG9Nb250aFN0eWxlLiBUaGlzIGlzIGEgcGxhY2UgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvRGF5U3R5bGUoJzIwMjIvMDEvMTUnKSkudG9FcXVhbCgnMDEvMjAyMi8wMScpO1xuICAgICAgICBleHBlY3QoQ29udmVydGVyLkRhdGVTdGluZy5Ub0RheVN0eWxlKCcwMS8xNS8yMDIyJykpLnRvRXF1YWwoJzAxLzAxLzE1Jyk7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvRGF5U3R5bGUoJzMyLzAxLzIwMjInKSkudG9FcXVhbCgnMDEvMzIvMDEnKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoQ29udmVydGVyLkRhdGVTdGluZy5Ub0RheVN0eWxlKCcnKSkudG9CZSgnJyk7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuRGF0ZVN0aW5nLlRvRGF5U3R5bGUoJ2ludmFsaWQnKSkudG9CZSgnJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0RhdGVSZWxhdGl2ZScsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIHZpLnVzZUZha2VUaW1lcnMoKTtcbiAgICAgIHZpLnNldFN5c3RlbVRpbWUobmV3IERhdGUoMjAyMiwgTU9OVEguSlVORSwgMTUsIDEyLCAwLCAwKSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgdmkudXNlUmVhbFRpbWVycygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgXCJ0b2RheVwiJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0U3RhcnQgPSBDb252ZXJ0ZXIuRGF0ZVJlbGF0aXZlLlRvRGF0ZSgndG9kYXknLCB0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3VsdEVuZCA9IENvbnZlcnRlci5EYXRlUmVsYXRpdmUuVG9EYXRlKCd0b2RheScsIGZhbHNlKTtcbiAgICAgIGNvbnN0IHJlc3VsdERlZmF1bHQgPSBDb252ZXJ0ZXIuRGF0ZVJlbGF0aXZlLlRvRGF0ZSgndG9kYXknKTtcbiAgICAgIGV4cGVjdChyZXN1bHRTdGFydC5nZXRIb3VycygpKS50b0JlKDApO1xuICAgICAgZXhwZWN0KHJlc3VsdFN0YXJ0LmdldERhdGUoKSkudG9CZSgxNSk7XG4gICAgICBleHBlY3QocmVzdWx0RW5kLmdldEhvdXJzKCkpLnRvQmUoMjMpO1xuICAgICAgZXhwZWN0KHJlc3VsdEVuZC5nZXREYXRlKCkpLnRvQmUoMTUpO1xuICAgICAgZXhwZWN0KHJlc3VsdERlZmF1bHQuZ2V0SG91cnMoKSkudG9CZSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHREZWZhdWx0LmdldERhdGUoKSkudG9CZSgxNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBcIm5vIGxpbWl0XCInLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IENvbnZlcnRlci5EYXRlUmVsYXRpdmUuVG9EYXRlKCdubyBsaW1pdCcsIHRydWUpO1xuICAgICAgZXhwZWN0KHN0YXJ0LmdldEZ1bGxZZWFyKCkpLnRvRXF1YWwoMTgyMik7XG5cbiAgICAgIGNvbnN0IGVuZCA9IENvbnZlcnRlci5EYXRlUmVsYXRpdmUuVG9EYXRlKCdubyBsaW1pdCcsIGZhbHNlKTtcbiAgICAgIGV4cGVjdChlbmQuZ2V0RnVsbFllYXIoKSkudG9FcXVhbCgyMjIyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHJlbGF0aXZlIGRheXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IENvbnZlcnRlci5EYXRlUmVsYXRpdmUuVG9EYXRlKCcyMCBkYXknLCB0cnVlKTtcbiAgICAgIGV4cGVjdChzdGFydC5nZXREYXRlKCkpLnRvQmUoMjYpO1xuICAgICAgZXhwZWN0KHN0YXJ0LmdldE1vbnRoKCkpLnRvQmUoTU9OVEguTUFZKTtcbiAgICAgIGV4cGVjdChzdGFydC5nZXRGdWxsWWVhcigpKS50b0JlKDIwMjIpO1xuXG4gICAgICBjb25zdCBlbmQgPSBDb252ZXJ0ZXIuRGF0ZVJlbGF0aXZlLlRvRGF0ZSgnMjAgZGF5JywgZmFsc2UpO1xuICAgICAgZXhwZWN0KGVuZC5nZXREYXRlKCkpLnRvQmUoNSk7XG4gICAgICBleHBlY3QoZW5kLmdldE1vbnRoKCkpLnRvQmUoTU9OVEguSlVMWSk7XG4gICAgICBleHBlY3QoZW5kLmdldEZ1bGxZZWFyKCkpLnRvQmUoMjAyMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSByZWxhdGl2ZSBtb250aCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gQ29udmVydGVyLkRhdGVSZWxhdGl2ZS5Ub0RhdGUoJzEwIG1vbnRoJywgdHJ1ZSk7XG4gICAgICBleHBlY3Qoc3RhcnQuZ2V0RGF0ZSgpKS50b0JlKDE1KTtcbiAgICAgIGV4cGVjdChzdGFydC5nZXRNb250aCgpKS50b0JlKE1PTlRILkFVR1VTVCk7XG4gICAgICBleHBlY3Qoc3RhcnQuZ2V0RnVsbFllYXIoKSkudG9CZSgyMDIxKTtcblxuICAgICAgY29uc3QgZW5kID0gQ29udmVydGVyLkRhdGVSZWxhdGl2ZS5Ub0RhdGUoJzEwIG1vbnRoJywgZmFsc2UpO1xuICAgICAgZXhwZWN0KGVuZC5nZXREYXRlKCkpLnRvQmUoMTUpO1xuICAgICAgZXhwZWN0KGVuZC5nZXRNb250aCgpKS50b0JlKE1PTlRILkFQUklMKTtcbiAgICAgIGV4cGVjdChlbmQuZ2V0RnVsbFllYXIoKSkudG9CZSgyMDIzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHJlbGF0aXZlIHllYXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IENvbnZlcnRlci5EYXRlUmVsYXRpdmUuVG9EYXRlKCcxMCB5ZWFyJywgdHJ1ZSk7XG4gICAgICBleHBlY3Qoc3RhcnQuZ2V0RGF0ZSgpKS50b0JlKDE1KTtcbiAgICAgIGV4cGVjdChzdGFydC5nZXRNb250aCgpKS50b0JlKE1PTlRILkpVTkUpO1xuICAgICAgZXhwZWN0KHN0YXJ0LmdldEZ1bGxZZWFyKCkpLnRvQmUoMjAxMik7XG5cbiAgICAgIGNvbnN0IGVuZCA9IENvbnZlcnRlci5EYXRlUmVsYXRpdmUuVG9EYXRlKCcxMCB5ZWFyJywgZmFsc2UpO1xuICAgICAgZXhwZWN0KGVuZC5nZXREYXRlKCkpLnRvQmUoMTUpO1xuICAgICAgZXhwZWN0KGVuZC5nZXRNb250aCgpKS50b0JlKE1PTlRILkpVTkUpO1xuICAgICAgZXhwZWN0KGVuZC5nZXRGdWxsWWVhcigpKS50b0JlKDIwMzIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc3BlY2lmaWMgZGF0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IENvbnZlcnRlci5EYXRlUmVsYXRpdmUuVG9EYXRlKCcyMC8wMS8yMDIzIGRhdGUnLCB0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZ2V0RGF0ZSgpKS50b0JlKDIwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZ2V0TW9udGgoKSkudG9CZShNT05USC5KQU5VQVJZKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZ2V0RnVsbFllYXIoKSkudG9CZSgyMDIzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRvZGF5IGRhdGUgaWYgc3BlY2lmaWMgZGF0ZSBjYW4gbm90IGJlIHBhcnNlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IENvbnZlcnRlci5EYXRlUmVsYXRpdmUuVG9EYXRlKCdpbnZhbGlkJyk7XG4gICAgICBleHBlY3QocmVzdWx0LmdldERhdGUoKSkudG9CZSgxNSk7XG4gICAgICBleHBlY3QocmVzdWx0LmdldE1vbnRoKCkpLnRvQmUoTU9OVEguSlVORSk7XG4gICAgICBleHBlY3QocmVzdWx0LmdldEZ1bGxZZWFyKCkpLnRvQmUoMjAyMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdEYXRlJywgKCkgPT4ge1xuICAgIGl0KCdUb0RhdGVTdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMjAyMiwgTU9OVEguSkFOVUFSWSwgNSk7XG4gICAgICBleHBlY3QoQ29udmVydGVyLkRhdGUuVG9EYXRlU3RyaW5nKGRhdGUpKS50b0JlKCcwNS8wMS8yMDIyJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBbnN3ZXInLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ0Zyb21NdWx0aXBsZVRvQXJyYXknLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhcnJheSBvZiBlbGVtZW50cyBpZiBzZXBhcmF0b3IgaXMgY29ycmVjdCAoXCIsIFwiKScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KENvbnZlcnRlci5BbnN3ZXIuRnJvbU11bHRpcGxlVG9BcnJheSgnYSwgYiwgYycpKS50b0VxdWFsKFsnYScsICdiJywgJ2MnXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gc3RyaW5nIGFzIHNpbmdsZSBhcnJheSBlbGVtZW50IGlmIHN0cmluZyBoYXMgbm8gY29ycmVjdCBzZXBhcmF0b3InLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuQW5zd2VyLkZyb21NdWx0aXBsZVRvQXJyYXkoJ2EsYixjJykpLnRvRXF1YWwoWydhLGIsYyddKTtcbiAgICAgICAgZXhwZWN0KENvbnZlcnRlci5BbnN3ZXIuRnJvbU11bHRpcGxlVG9BcnJheSgnYWJjJykpLnRvRXF1YWwoWydhYmMnXSk7XG4gICAgICAgIGV4cGVjdChDb252ZXJ0ZXIuQW5zd2VyLkZyb21NdWx0aXBsZVRvQXJyYXkoJycpKS50b0VxdWFsKFsnJ10pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRnJvbUFycmF5VG9NdWx0aXBsZScsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGpvaW5lZCBzdHJpbmcgZnJvbSBhcnJheSBlbGVtZW50cycsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KENvbnZlcnRlci5BbnN3ZXIuRnJvbUFycmF5VG9NdWx0aXBsZShbJ2EnLCAnYicsICdjJ10pKS50b0JlKCdhLCBiLCBjJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgc3RyaW5nIGZvciBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KENvbnZlcnRlci5BbnN3ZXIuRnJvbUFycmF5VG9NdWx0aXBsZShbXSkpLnRvQmUoJycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsIkNvbnZlcnRlciIsInJlc3VsdCIsIk1PTlRIIiwiYmVmb3JlRWFjaCIsInZpIiwiYWZ0ZXJFYWNoIiwicmVzdWx0U3RhcnQiLCJyZXN1bHRFbmQiLCJyZXN1bHREZWZhdWx0Iiwic3RhcnQiLCJlbmQiLCJkYXRlIl0sIm1hcHBpbmdzIjoiOzs7QUFJQUEsRUFBUyxhQUFhLE1BQU07QUFDMUIsRUFBQUEsRUFBUyxRQUFRLE1BQU07QUFDckIsSUFBQUMsRUFBRyxnREFBZ0QsTUFBTTtBQUN2REMsTUFBQUEsRUFBT0MsRUFBVSxLQUFLLEtBQUssQ0FBQyxFQUFFLFFBQVEsWUFBWTtBQUFBLElBQ3BELENBQUMsR0FFREYsRUFBRyxrREFBa0QsTUFBTTtBQUN6REMsTUFBQUEsRUFBT0MsRUFBVSxLQUFLLE9BQU8sQ0FBQyxFQUFFLFFBQVEsU0FBUztBQUFBLElBQ25ELENBQUM7QUFBQSxFQUNILENBQUMsR0FFREgsRUFBUyxXQUFXLE1BQU07QUFDeEIsSUFBQUMsRUFBRyxtQkFBbUIsTUFBTTtBQUMxQkMsTUFBQUEsRUFBT0MsRUFBVSxRQUFRLGdCQUFnQixFQUFJLENBQUMsRUFBRSxRQUFRLE1BQU0sR0FDOURELEVBQU9DLEVBQVUsUUFBUSxnQkFBZ0IsRUFBSyxDQUFDLEVBQUUsUUFBUSxPQUFPO0FBQUEsSUFDbEUsQ0FBQyxHQUVERixFQUFHLG1CQUFtQixNQUFNO0FBQzFCQyxNQUFBQSxFQUFPQyxFQUFVLFFBQVEsZ0JBQWdCLEVBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUN6REQsRUFBT0MsRUFBVSxRQUFRLGdCQUFnQixFQUFLLENBQUMsRUFBRSxRQUFRLENBQUM7QUFBQSxJQUM1RCxDQUFDLEdBRURGLEVBQUcseUJBQXlCLE1BQU07QUFDaENDLE1BQUFBLEVBQU9DLEVBQVUsUUFBUSxzQkFBc0IsRUFBSSxDQUFDLEVBQUUsUUFBUSxHQUFHLEdBQ2pFRCxFQUFPQyxFQUFVLFFBQVEsc0JBQXNCLEVBQUssQ0FBQyxFQUFFLFFBQVEsR0FBRztBQUFBLElBQ3BFLENBQUM7QUFBQSxFQUNILENBQUMs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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Converter } from './converter';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Converter as o } from "./converter/converter.js";
|
|
2
|
+
import { Time as t } from "./time/time.js";
|
|
3
|
+
export {
|
|
4
|
+
o as Converter,
|
|
5
|
+
t as Time
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzsifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Time } from './time';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type TimeFormat = 'utc' | 'local';
|
|
2
|
+
export declare abstract class Time {
|
|
3
|
+
static date(day: number, month: number, year: number, endDayTime?: boolean): Date;
|
|
4
|
+
static startOfDay(date: Date, timeFormat?: TimeFormat): Date;
|
|
5
|
+
static endOfDay(date: Date, timeFormat?: TimeFormat): Date;
|
|
6
|
+
}
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
class c {
|
|
2
|
+
static date(e, a, t, r = !1) {
|
|
3
|
+
const s = /* @__PURE__ */ new Date();
|
|
4
|
+
return s.setUTCFullYear(t), s.setUTCMonth(a), s.setUTCDate(e), r ? c.endOfDay(s, "utc") : c.startOfDay(s, "utc");
|
|
5
|
+
}
|
|
6
|
+
static startOfDay(e, a = "local") {
|
|
7
|
+
const t = new Date(e);
|
|
8
|
+
switch (a) {
|
|
9
|
+
case "utc":
|
|
10
|
+
t.setUTCHours(0, 0, 0, 0);
|
|
11
|
+
break;
|
|
12
|
+
case "local":
|
|
13
|
+
t.setHours(0, 0, 0, 0);
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
return t;
|
|
17
|
+
}
|
|
18
|
+
static endOfDay(e, a = "local") {
|
|
19
|
+
const t = new Date(e);
|
|
20
|
+
switch (a) {
|
|
21
|
+
case "utc":
|
|
22
|
+
t.setUTCHours(23, 59, 59, 0);
|
|
23
|
+
break;
|
|
24
|
+
case "local":
|
|
25
|
+
t.setHours(23, 59, 59, 0);
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
return t;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
c as Time
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3RpbWUvdGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIFRpbWVGb3JtYXQgPSAndXRjJyB8ICdsb2NhbCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUaW1lIHtcbiAgcHVibGljIHN0YXRpYyBkYXRlKGRheTogbnVtYmVyLCBtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIsIGVuZERheVRpbWU6IGJvb2xlYW4gPSBmYWxzZSk6IERhdGUge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhcik7XG4gICAgZGF0ZS5zZXRVVENNb250aChtb250aCk7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRheSk7XG4gICAgcmV0dXJuIGVuZERheVRpbWUgPyBUaW1lLmVuZE9mRGF5KGRhdGUsICd1dGMnKSA6IFRpbWUuc3RhcnRPZkRheShkYXRlLCAndXRjJyk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHN0YXJ0T2ZEYXkoZGF0ZTogRGF0ZSwgdGltZUZvcm1hdDogVGltZUZvcm1hdCA9ICdsb2NhbCcpOiBEYXRlIHtcbiAgICBjb25zdCB0ZW1wRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIHN3aXRjaCAodGltZUZvcm1hdCkge1xuICAgICAgY2FzZSAndXRjJzpcbiAgICAgICAgdGVtcERhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbG9jYWwnOlxuICAgICAgICB0ZW1wRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZW5kT2ZEYXkoZGF0ZTogRGF0ZSwgdGltZUZvcm1hdDogVGltZUZvcm1hdCA9ICdsb2NhbCcpOiBEYXRlIHtcbiAgICBjb25zdCB0ZW1wRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIHN3aXRjaCAodGltZUZvcm1hdCkge1xuICAgICAgY2FzZSAndXRjJzpcbiAgICAgICAgdGVtcERhdGUuc2V0VVRDSG91cnMoMjMsIDU5LCA1OSwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbG9jYWwnOlxuICAgICAgICB0ZW1wRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wRGF0ZTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlRpbWUiLCJkYXkiLCJtb250aCIsInllYXIiLCJlbmREYXlUaW1lIiwiZGF0ZSIsInRpbWVGb3JtYXQiLCJ0ZW1wRGF0ZSJdLCJtYXBwaW5ncyI6IkFBRU8sTUFBZUEsRUFBSztBQUFBLEVBQ3pCLE9BQWMsS0FBS0MsR0FBYUMsR0FBZUMsR0FBY0MsSUFBc0IsSUFBYTtBQUM5RixVQUFNQyx3QkFBVyxLQUFBO0FBQ2pCLFdBQUFBLEVBQUssZUFBZUYsQ0FBSSxHQUN4QkUsRUFBSyxZQUFZSCxDQUFLLEdBQ3RCRyxFQUFLLFdBQVdKLENBQUcsR0FDWkcsSUFBYUosRUFBSyxTQUFTSyxHQUFNLEtBQUssSUFBSUwsRUFBSyxXQUFXSyxHQUFNLEtBQUs7QUFBQSxFQUM5RTtBQUFBLEVBRUEsT0FBYyxXQUFXQSxHQUFZQyxJQUF5QixTQUFlO0FBQzNFLFVBQU1DLElBQVcsSUFBSSxLQUFLRixDQUFJO0FBQzlCLFlBQVFDLEdBQUE7QUFBQSxNQUNOLEtBQUs7QUFDSCxRQUFBQyxFQUFTLFlBQVksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMvQjtBQUFBLE1BQ0YsS0FBSztBQUNILFFBQUFBLEVBQVMsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQzVCO0FBQUEsSUFBQTtBQUVKLFdBQU9BO0FBQUEsRUFDVDtBQUFBLEVBRUEsT0FBYyxTQUFTRixHQUFZQyxJQUF5QixTQUFlO0FBQ3pFLFVBQU1DLElBQVcsSUFBSSxLQUFLRixDQUFJO0FBQzlCLFlBQVFDLEdBQUE7QUFBQSxNQUNOLEtBQUs7QUFDSCxRQUFBQyxFQUFTLFlBQVksSUFBSSxJQUFJLElBQUksQ0FBQztBQUNsQztBQUFBLE1BQ0YsS0FBSztBQUNILFFBQUFBLEVBQVMsU0FBUyxJQUFJLElBQUksSUFBSSxDQUFDO0FBQy9CO0FBQUEsSUFBQTtBQUVKLFdBQU9BO0FBQUEsRUFDVDtBQUNGOyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { MONTH as l } from "../../enums.js";
|
|
2
|
+
import { Time as n } from "./time.js";
|
|
3
|
+
import { d as r, i, g as t } from "../../vi.2VT5v0um-CyasTEXm.js";
|
|
4
|
+
r("Time", () => {
|
|
5
|
+
r("date", () => {
|
|
6
|
+
i("should create a date object at the start of the day (UTC) when endDayTime is false or not provided", () => {
|
|
7
|
+
const e = l.JANUARY, s = 2022, a = n.date(10, e, s), d = n.date(10, e, s, !1);
|
|
8
|
+
t([a.getUTCDate(), d.getUTCDate()]).toEqual([10, 10]), t([a.getUTCMonth(), d.getUTCMonth()]).toEqual([e, e]), t([a.getUTCFullYear(), d.getUTCFullYear()]).toEqual([s, s]), t([a.getUTCHours(), d.getUTCHours()]).toEqual([0, 0]), t([a.getUTCMinutes(), d.getUTCMinutes()]).toEqual([0, 0]), t([a.getUTCSeconds(), d.getUTCSeconds()]).toEqual([0, 0]), t([a.getUTCMilliseconds(), d.getUTCMilliseconds()]).toEqual([0, 0]);
|
|
9
|
+
}), i("should create a date object at the end of the day (UTC) when endDayTime is true", () => {
|
|
10
|
+
const e = l.JANUARY, s = 2022, a = n.date(10, e, s, !0);
|
|
11
|
+
t(a.getUTCDate()).toBe(10), t(a.getUTCMonth()).toBe(e), t(a.getUTCFullYear()).toBe(s), t(a.getUTCHours()).toBe(23), t(a.getUTCMinutes()).toBe(59), t(a.getUTCSeconds()).toBe(59), t(a.getUTCMilliseconds()).toBe(0);
|
|
12
|
+
});
|
|
13
|
+
}), r("startOfDay", () => {
|
|
14
|
+
i('should return the start of the day in UTC time when timeFormat is "utc" or not provided', () => {
|
|
15
|
+
const o = /* @__PURE__ */ new Date();
|
|
16
|
+
o.setUTCHours(12, 30, 30, 500);
|
|
17
|
+
const e = n.startOfDay(o, "utc");
|
|
18
|
+
t(e.getUTCHours()).toBe(0), t(e.getUTCMinutes()).toBe(0), t(e.getUTCMinutes()).toBe(0), t(e.getUTCMilliseconds()).toBe(0);
|
|
19
|
+
}), i('should return the start of the day in local time when timeFormat is "local" or not provided', () => {
|
|
20
|
+
const o = /* @__PURE__ */ new Date();
|
|
21
|
+
o.setUTCHours(12, 30, 30, 500);
|
|
22
|
+
const e = n.startOfDay(o, "local"), s = n.startOfDay(o);
|
|
23
|
+
t([e.getHours(), s.getHours()]).toEqual([0, 0]), t([e.getMinutes(), s.getMinutes()]).toEqual([0, 0]), t([e.getSeconds(), s.getSeconds()]).toEqual([0, 0]), t([e.getMilliseconds(), s.getMilliseconds()]).toEqual([0, 0]);
|
|
24
|
+
}), i("should not modify the original date object", () => {
|
|
25
|
+
const o = /* @__PURE__ */ new Date(), e = o.getTime();
|
|
26
|
+
n.startOfDay(o), t(o.getTime()).toBe(e);
|
|
27
|
+
});
|
|
28
|
+
}), r("endOfDay", () => {
|
|
29
|
+
i('should return the end of the day in UTC time when timeFormat is "utc" or not provided', () => {
|
|
30
|
+
const o = /* @__PURE__ */ new Date();
|
|
31
|
+
o.setUTCHours(12, 30, 30, 500);
|
|
32
|
+
const e = n.endOfDay(o, "utc");
|
|
33
|
+
t(e.getUTCHours()).toBe(23), t(e.getUTCMinutes()).toBe(59), t(e.getUTCMinutes()).toBe(59), t(e.getUTCMilliseconds()).toBe(0);
|
|
34
|
+
}), i('should return the end of the day in local time when timeFormat is "local" or not provided', () => {
|
|
35
|
+
const o = /* @__PURE__ */ new Date();
|
|
36
|
+
o.setUTCHours(12, 30, 30, 500);
|
|
37
|
+
const e = n.endOfDay(o, "local"), s = n.endOfDay(o);
|
|
38
|
+
t([e.getHours(), s.getHours()]).toEqual([23, 23]), t([e.getMinutes(), s.getMinutes()]).toEqual([59, 59]), t([e.getSeconds(), s.getSeconds()]).toEqual([59, 59]), t([e.getMilliseconds(), s.getMilliseconds()]).toEqual([0, 0]);
|
|
39
|
+
}), i("should not modify the original date object", () => {
|
|
40
|
+
const o = /* @__PURE__ */ new Date(), e = o.getTime();
|
|
41
|
+
n.endOfDay(o), t(o.getTime()).toBe(e);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS50ZXN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvdGltZS90aW1lLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgTU9OVEggfSBmcm9tICdAL2VudW1zJztcbmltcG9ydCB7IFRpbWUgfSBmcm9tICdAL3V0aWxzJztcblxuZGVzY3JpYmUoJ1RpbWUnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdkYXRlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgZGF0ZSBvYmplY3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBkYXkgKFVUQykgd2hlbiBlbmREYXlUaW1lIGlzIGZhbHNlIG9yIG5vdCBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRheSA9IDEwO1xuICAgICAgY29uc3QgbW9udGggPSBNT05USC5KQU5VQVJZO1xuICAgICAgY29uc3QgeWVhciA9IDIwMjI7XG4gICAgICBjb25zdCBkYXRlMSA9IFRpbWUuZGF0ZShkYXksIG1vbnRoLCB5ZWFyKTtcbiAgICAgIGNvbnN0IGRhdGUyID0gVGltZS5kYXRlKGRheSwgbW9udGgsIHllYXIsIGZhbHNlKTtcblxuICAgICAgZXhwZWN0KFtkYXRlMS5nZXRVVENEYXRlKCksIGRhdGUyLmdldFVUQ0RhdGUoKV0pLnRvRXF1YWwoW2RheSwgZGF5XSk7XG4gICAgICBleHBlY3QoW2RhdGUxLmdldFVUQ01vbnRoKCksIGRhdGUyLmdldFVUQ01vbnRoKCldKS50b0VxdWFsKFttb250aCwgbW9udGhdKTtcbiAgICAgIGV4cGVjdChbZGF0ZTEuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZTIuZ2V0VVRDRnVsbFllYXIoKV0pLnRvRXF1YWwoW3llYXIsIHllYXJdKTtcbiAgICAgIGV4cGVjdChbZGF0ZTEuZ2V0VVRDSG91cnMoKSwgZGF0ZTIuZ2V0VVRDSG91cnMoKV0pLnRvRXF1YWwoWzAsIDBdKTtcbiAgICAgIGV4cGVjdChbZGF0ZTEuZ2V0VVRDTWludXRlcygpLCBkYXRlMi5nZXRVVENNaW51dGVzKCldKS50b0VxdWFsKFswLCAwXSk7XG4gICAgICBleHBlY3QoW2RhdGUxLmdldFVUQ1NlY29uZHMoKSwgZGF0ZTIuZ2V0VVRDU2Vjb25kcygpXSkudG9FcXVhbChbMCwgMF0pO1xuICAgICAgZXhwZWN0KFtkYXRlMS5nZXRVVENNaWxsaXNlY29uZHMoKSwgZGF0ZTIuZ2V0VVRDTWlsbGlzZWNvbmRzKCldKS50b0VxdWFsKFswLCAwXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIGRhdGUgb2JqZWN0IGF0IHRoZSBlbmQgb2YgdGhlIGRheSAoVVRDKSB3aGVuIGVuZERheVRpbWUgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGRheSA9IDEwO1xuICAgICAgY29uc3QgbW9udGggPSBNT05USC5KQU5VQVJZO1xuICAgICAgY29uc3QgeWVhciA9IDIwMjI7XG4gICAgICBjb25zdCBkYXRlID0gVGltZS5kYXRlKGRheSwgbW9udGgsIHllYXIsIHRydWUpO1xuXG4gICAgICBleHBlY3QoZGF0ZS5nZXRVVENEYXRlKCkpLnRvQmUoZGF5KTtcbiAgICAgIGV4cGVjdChkYXRlLmdldFVUQ01vbnRoKCkpLnRvQmUobW9udGgpO1xuICAgICAgZXhwZWN0KGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkudG9CZSh5ZWFyKTtcbiAgICAgIGV4cGVjdChkYXRlLmdldFVUQ0hvdXJzKCkpLnRvQmUoMjMpO1xuICAgICAgZXhwZWN0KGRhdGUuZ2V0VVRDTWludXRlcygpKS50b0JlKDU5KTtcbiAgICAgIGV4cGVjdChkYXRlLmdldFVUQ1NlY29uZHMoKSkudG9CZSg1OSk7XG4gICAgICBleHBlY3QoZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKSkudG9CZSgwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0YXJ0T2ZEYXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHN0YXJ0IG9mIHRoZSBkYXkgaW4gVVRDIHRpbWUgd2hlbiB0aW1lRm9ybWF0IGlzIFwidXRjXCIgb3Igbm90IHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIG5vdy5zZXRVVENIb3VycygxMiwgMzAsIDMwLCA1MDApO1xuICAgICAgY29uc3Qgc3RhcnQgPSBUaW1lLnN0YXJ0T2ZEYXkobm93LCAndXRjJyk7XG5cbiAgICAgIGV4cGVjdChzdGFydC5nZXRVVENIb3VycygpKS50b0JlKDApO1xuICAgICAgZXhwZWN0KHN0YXJ0LmdldFVUQ01pbnV0ZXMoKSkudG9CZSgwKTtcbiAgICAgIGV4cGVjdChzdGFydC5nZXRVVENNaW51dGVzKCkpLnRvQmUoMCk7XG4gICAgICBleHBlY3Qoc3RhcnQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpLnRvQmUoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGRheSBpbiBsb2NhbCB0aW1lIHdoZW4gdGltZUZvcm1hdCBpcyBcImxvY2FsXCIgb3Igbm90IHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIG5vdy5zZXRVVENIb3VycygxMiwgMzAsIDMwLCA1MDApO1xuICAgICAgY29uc3Qgc3RhcnQxID0gVGltZS5zdGFydE9mRGF5KG5vdywgJ2xvY2FsJyk7XG4gICAgICBjb25zdCBzdGFydDIgPSBUaW1lLnN0YXJ0T2ZEYXkobm93KTtcblxuICAgICAgZXhwZWN0KFtzdGFydDEuZ2V0SG91cnMoKSwgc3RhcnQyLmdldEhvdXJzKCldKS50b0VxdWFsKFswLCAwXSk7XG4gICAgICBleHBlY3QoW3N0YXJ0MS5nZXRNaW51dGVzKCksIHN0YXJ0Mi5nZXRNaW51dGVzKCldKS50b0VxdWFsKFswLCAwXSk7XG4gICAgICBleHBlY3QoW3N0YXJ0MS5nZXRTZWNvbmRzKCksIHN0YXJ0Mi5nZXRTZWNvbmRzKCldKS50b0VxdWFsKFswLCAwXSk7XG4gICAgICBleHBlY3QoW3N0YXJ0MS5nZXRNaWxsaXNlY29uZHMoKSwgc3RhcnQyLmdldE1pbGxpc2Vjb25kcygpXSkudG9FcXVhbChbMCwgMF0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBkYXRlIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBvcmlnaW5hbFRpbWUgPSBub3cuZ2V0VGltZSgpO1xuICAgICAgVGltZS5zdGFydE9mRGF5KG5vdyk7XG4gICAgICBleHBlY3Qobm93LmdldFRpbWUoKSkudG9CZShvcmlnaW5hbFRpbWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZW5kT2ZEYXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGVuZCBvZiB0aGUgZGF5IGluIFVUQyB0aW1lIHdoZW4gdGltZUZvcm1hdCBpcyBcInV0Y1wiIG9yIG5vdCBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBub3cuc2V0VVRDSG91cnMoMTIsIDMwLCAzMCwgNTAwKTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gVGltZS5lbmRPZkRheShub3csICd1dGMnKTtcblxuICAgICAgZXhwZWN0KHN0YXJ0LmdldFVUQ0hvdXJzKCkpLnRvQmUoMjMpO1xuICAgICAgZXhwZWN0KHN0YXJ0LmdldFVUQ01pbnV0ZXMoKSkudG9CZSg1OSk7XG4gICAgICBleHBlY3Qoc3RhcnQuZ2V0VVRDTWludXRlcygpKS50b0JlKDU5KTtcbiAgICAgIGV4cGVjdChzdGFydC5nZXRVVENNaWxsaXNlY29uZHMoKSkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBlbmQgb2YgdGhlIGRheSBpbiBsb2NhbCB0aW1lIHdoZW4gdGltZUZvcm1hdCBpcyBcImxvY2FsXCIgb3Igbm90IHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIG5vdy5zZXRVVENIb3VycygxMiwgMzAsIDMwLCA1MDApO1xuICAgICAgY29uc3Qgc3RhcnQxID0gVGltZS5lbmRPZkRheShub3csICdsb2NhbCcpO1xuICAgICAgY29uc3Qgc3RhcnQyID0gVGltZS5lbmRPZkRheShub3cpO1xuXG4gICAgICBleHBlY3QoW3N0YXJ0MS5nZXRIb3VycygpLCBzdGFydDIuZ2V0SG91cnMoKV0pLnRvRXF1YWwoWzIzLCAyM10pO1xuICAgICAgZXhwZWN0KFtzdGFydDEuZ2V0TWludXRlcygpLCBzdGFydDIuZ2V0TWludXRlcygpXSkudG9FcXVhbChbNTksIDU5XSk7XG4gICAgICBleHBlY3QoW3N0YXJ0MS5nZXRTZWNvbmRzKCksIHN0YXJ0Mi5nZXRTZWNvbmRzKCldKS50b0VxdWFsKFs1OSwgNTldKTtcbiAgICAgIGV4cGVjdChbc3RhcnQxLmdldE1pbGxpc2Vjb25kcygpLCBzdGFydDIuZ2V0TWlsbGlzZWNvbmRzKCldKS50b0VxdWFsKFswLCAwXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIGRhdGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVGltZSA9IG5vdy5nZXRUaW1lKCk7XG4gICAgICBUaW1lLmVuZE9mRGF5KG5vdyk7XG4gICAgICBleHBlY3Qobm93LmdldFRpbWUoKSkudG9CZShvcmlnaW5hbFRpbWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaXQiLCJtb250aCIsIk1PTlRIIiwieWVhciIsImRhdGUxIiwiVGltZSIsImRhdGUyIiwiZXhwZWN0IiwiZGF0ZSIsIm5vdyIsInN0YXJ0Iiwic3RhcnQxIiwic3RhcnQyIiwib3JpZ2luYWxUaW1lIl0sIm1hcHBpbmdzIjoiOzs7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
|