@giveback007/util-lib 0.25.4 → 1.0.0

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 (58) hide show
  1. package/README.md +7 -7
  2. package/dist/@types.d.ts +40 -42
  3. package/dist/@types.js +2 -2
  4. package/dist/array.d.ts +66 -66
  5. package/dist/array.js +128 -128
  6. package/dist/array.js.map +1 -1
  7. package/dist/clone.d.ts +2 -2
  8. package/dist/clone.js +44 -45
  9. package/dist/clone.js.map +1 -1
  10. package/dist/equality.d.ts +1 -1
  11. package/dist/equality.js +81 -82
  12. package/dist/equality.js.map +1 -1
  13. package/dist/general.d.ts +44 -37
  14. package/dist/general.js +172 -139
  15. package/dist/general.js.map +1 -1
  16. package/dist/index.d.ts +11 -11
  17. package/dist/index.js +27 -23
  18. package/dist/index.js.map +1 -1
  19. package/dist/iterate.d.ts +44 -44
  20. package/dist/iterate.js +43 -44
  21. package/dist/iterate.js.map +1 -1
  22. package/dist/number.d.ts +33 -32
  23. package/dist/number.js +57 -55
  24. package/dist/number.js.map +1 -1
  25. package/dist/object.d.ts +45 -49
  26. package/dist/object.js +82 -92
  27. package/dist/object.js.map +1 -1
  28. package/dist/string.d.ts +3 -4
  29. package/dist/string.js +8 -18
  30. package/dist/string.js.map +1 -1
  31. package/dist/test.d.ts +40 -41
  32. package/dist/test.js +65 -67
  33. package/dist/test.js.map +1 -1
  34. package/dist/time.d.ts +87 -93
  35. package/dist/time.js +230 -174
  36. package/dist/time.js.map +1 -1
  37. package/package.json +33 -45
  38. package/src/@types/types.d.ts +34 -0
  39. package/src/@types.ts +67 -67
  40. package/src/array.ts +175 -175
  41. package/src/clone.ts +34 -35
  42. package/src/equality.ts +80 -80
  43. package/src/general.ts +192 -152
  44. package/src/index.ts +11 -11
  45. package/src/iterate.ts +86 -86
  46. package/src/number.ts +64 -62
  47. package/src/object.ts +109 -123
  48. package/src/string.ts +6 -20
  49. package/src/test.ts +71 -74
  50. package/src/time.ts +268 -219
  51. package/dist/node/file-systems.d.ts +0 -1
  52. package/dist/node/file-systems.js +0 -16
  53. package/dist/node/file-systems.js.map +0 -1
  54. package/dist/node/index.d.ts +0 -1
  55. package/dist/node/index.js +0 -14
  56. package/dist/node/index.js.map +0 -1
  57. package/src/node/file-systems.ts +0 -16
  58. package/src/node/index.ts +0 -1
package/dist/time.d.ts CHANGED
@@ -1,93 +1,87 @@
1
- import { MsTime } from '.';
2
- export declare const msTime: MsTime;
3
- export declare const weekTuple: readonly ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];
4
- /**
5
- * Converts Date to time of day.
6
- * Good for use in loging.
7
- *
8
- * If no parameter `dt = new Date()`.
9
- * @param dt instance of Date obj
10
- * @returns `hh:mm:ss:ms`
11
- * @example "15:07:56:150"
12
- */
13
- export declare function dateTimeToString(dt?: Date): string;
14
- export declare const msToSec: (ms: number) => number;
15
- export declare const msToMin: (ms: number) => number;
16
- export declare const msToHrs: (ms: number) => number;
17
- export declare const msToDys: (ms: number) => number;
18
- export declare const msToWks: (ms: number) => number;
19
- declare type TimeObjS = {
20
- d: string;
21
- h: string;
22
- m: string;
23
- s: string;
24
- ms: string;
25
- };
26
- declare type TimeObjN = {
27
- d: number;
28
- h: number;
29
- m: number;
30
- s: number;
31
- ms: number;
32
- };
33
- /**
34
- * DEPRECATED use `msTimeObj()`
35
- *
36
- * ----------------------------
37
- *
38
- * Takes milliseconds and outputs to human readable time
39
- * @returns `'ddd:hh:mm:ss:ms'` | `{ d: number; h: number; m: number; s: number; ms: number; }`
40
- * @example
41
- * ```js
42
- * msToTime(86400005) => '001:00:00:00:005'
43
- * msToTime(86400005, true) => { d: 1; h: 0; m: 0; s: 0; ms: 5; }
44
- * ```
45
- */
46
- export declare function msToTime<T extends boolean>(msT: number, toObj?: boolean): string | TimeObjN;
47
- export declare function msToTime<T extends boolean>(msT: number, toObj: true): TimeObjN;
48
- export declare function msToTime<T extends boolean>(msT: number, toObj?: false): string;
49
- export declare function msTimeObj<T extends boolean>(msT: number, toNumbers?: boolean): TimeObjS;
50
- export declare function msTimeObj<T extends boolean>(msT: number, toNumbers: true): TimeObjN;
51
- /** Gives seconds in milliseconds | `sec(s) => s * 1000` */
52
- export declare const seconds: (s: number) => number;
53
- /** Analog of seconds() */
54
- export declare const sec: (s: number) => number;
55
- /** Gives minutes in milliseconds | `min(m) => m * 60000` */
56
- export declare const minutes: (m: number) => number;
57
- /** Analog of minutes() */
58
- export declare const min: (m: number) => number;
59
- /** Gives hours in milliseconds | `hrs(h) => h * 3600000` */
60
- export declare const hours: (h: number) => number;
61
- /** Analog of hours */
62
- export declare const hrs: (h: number) => number;
63
- /** Gives days in milliseconds | `dys(d) => d * 86400000` */
64
- export declare const days: (d: number) => number;
65
- /** Analog of days */
66
- export declare const dys: (d: number) => number;
67
- /** Gives weeks in milliseconds | `wks(w) => w * 604800000` */
68
- export declare const weeks: (w: number) => number;
69
- /** Analog of weeks */
70
- export declare const wks: (w: number) => number;
71
- /** Gives the 'start' and 'end' of a day.
72
- *
73
- * Start of day is the first ms of the day
74
- *
75
- * End of day is the last ms of the day
76
- */
77
- export declare function getDayStartEnd(t: number | Date, type?: 'unix' | 'local'): {
78
- start: Date;
79
- end: Date;
80
- };
81
- export declare function weekStartEnd(t: number | Date, weekStart?: 'sun' | 'mon', type?: 'unix' | 'local'): {
82
- start: Date;
83
- end: Date;
84
- };
85
- export declare function monthStartEnd(t: number | Date, type?: 'unix' | 'local'): {
86
- start: Date;
87
- end: Date;
88
- };
89
- export declare function yearStartEnd(t: number | Date, type?: 'unix' | 'local'): {
90
- start: Date;
91
- end: Date;
92
- };
93
- export {};
1
+ import { MsTime } from '.';
2
+ export declare const msTime: MsTime;
3
+ export declare const weekTuple: readonly ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
4
+ /**
5
+ * Converts Date to time of day.
6
+ * Good for use in logging.
7
+ *
8
+ * If no parameter `dt = new Date()`.
9
+ * @param dt instance of Date obj
10
+ * @returns `hh:mm:ss:ms`
11
+ * @example "15:07:56:150"
12
+ */
13
+ export declare function dateTimeToString(dt?: Date): string;
14
+ /** Gives the 'start' and 'end' of a day.
15
+ *
16
+ * Start of day is the first ms of the day
17
+ *
18
+ * End of day is the last ms of the day
19
+ */
20
+ export declare function getDayStartEnd(t: number | Date, type?: 'unix' | 'local'): {
21
+ start: Date;
22
+ end: Date;
23
+ };
24
+ export declare function weekStartEnd(t: number | Date, weekStart?: 'sun' | 'mon', type?: 'unix' | 'local'): {
25
+ start: Date;
26
+ end: Date;
27
+ };
28
+ export declare function monthStartEnd(t: number | Date, type?: 'unix' | 'local'): {
29
+ start: Date;
30
+ end: Date;
31
+ };
32
+ export declare function yearStartEnd(t: number | Date, type?: 'unix' | 'local'): {
33
+ start: Date;
34
+ end: Date;
35
+ };
36
+ export declare const time: {
37
+ /** Seconds(n) -> to ms */
38
+ readonly sec: (n: num) => number;
39
+ /** Minutes(n) -> to ms */
40
+ readonly min: (n: num) => number;
41
+ /** Hours(n) -> to ms */
42
+ readonly hrs: (n: num) => number;
43
+ /** Days(n) -> to ms */
44
+ readonly dys: (n: num) => number;
45
+ /** Weeks(n) -> to ms */
46
+ readonly wks: (n: num) => number;
47
+ /** Count time elapsed since: `from` until `to`, `to` def to `Date.now()` */
48
+ readonly since: (from: num, to?: num) => number;
49
+ /** Count down to: `target` time from `from`, `from` def to `Date.now()` */
50
+ readonly until: (target: num, from?: num) => number;
51
+ readonly future: {
52
+ /** fnc(n) -> add ms to now */
53
+ readonly ms: (n: num) => number;
54
+ /** fnc(n) -> add sec to now */
55
+ readonly sec: (n: num) => number;
56
+ /** fnc(n) -> add min to now */
57
+ readonly min: (n: num) => number;
58
+ };
59
+ readonly msTo: {
60
+ /** fnc(n) -> from ms to num of seconds */
61
+ readonly sec: (ms: num) => number;
62
+ /** fnc(n) -> from ms to num of minutes */
63
+ readonly min: (ms: num) => number;
64
+ /** fnc(n) -> from ms to num of hours */
65
+ readonly hrs: (ms: num) => number;
66
+ /** fnc(n) -> from ms to num of days */
67
+ readonly dys: (ms: num) => number;
68
+ /** fnc(n) -> from ms to num of weeks */
69
+ readonly wks: (ms: num) => number;
70
+ };
71
+ readonly now: number;
72
+ };
73
+ export declare const humanizedTime: (date: AnyDate) => string | null;
74
+ /** A Date substitute, to make working with time easier and more versatile */
75
+ export declare function getTime(date: TimeObj | PartialTimeObj | TimeArr, ianaTimeZone?: str): {
76
+ tzOffsetMin: number;
77
+ localISO: string;
78
+ isoStr: string;
79
+ Date: Date;
80
+ epochMs: number;
81
+ ianaTZ: string;
82
+ timeObj: TimeObj;
83
+ };
84
+ export declare function timeZoneOffsetMin(ianaTimeZone: string, date?: Date): number;
85
+ export declare const timeObj: (dt: Date) => TimeObj;
86
+ export declare function parseDate(d: AnyDate): Date | null;
87
+ export declare function toLocalISOString(date: Date, tzOffsetMin?: number): string;
package/dist/time.js CHANGED
@@ -1,175 +1,231 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.yearStartEnd = exports.monthStartEnd = exports.weekStartEnd = exports.getDayStartEnd = exports.wks = exports.weeks = exports.dys = exports.days = exports.hrs = exports.hours = exports.min = exports.minutes = exports.sec = exports.seconds = exports.msTimeObj = exports.msToTime = exports.msToWks = exports.msToDys = exports.msToHrs = exports.msToMin = exports.msToSec = exports.dateTimeToString = exports.weekTuple = exports.msTime = void 0;
4
- const _1 = require(".");
5
- exports.msTime = {
6
- s: 1000,
7
- m: 60000,
8
- h: 3600000,
9
- d: 86400000,
10
- w: 604800000,
11
- };
12
- exports.weekTuple = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
13
- /**
14
- * Converts Date to time of day.
15
- * Good for use in loging.
16
- *
17
- * If no parameter `dt = new Date()`.
18
- * @param dt instance of Date obj
19
- * @returns `hh:mm:ss:ms`
20
- * @example "15:07:56:150"
21
- */
22
- function dateTimeToString(dt = new Date()) {
23
- const h = ('0' + dt.getHours()).slice(-2);
24
- const m = ('0' + dt.getMinutes()).slice(-2);
25
- const s = ('0' + dt.getSeconds()).slice(-2);
26
- const ms = ('00' + dt.getMilliseconds()).slice(-3);
27
- return `${h}:${m}:${s}:${ms}`;
28
- }
29
- exports.dateTimeToString = dateTimeToString;
30
- const msToSec = (ms) => ms / exports.msTime.s;
31
- exports.msToSec = msToSec;
32
- const msToMin = (ms) => ms / exports.msTime.m;
33
- exports.msToMin = msToMin;
34
- const msToHrs = (ms) => ms / exports.msTime.h;
35
- exports.msToHrs = msToHrs;
36
- const msToDys = (ms) => ms / exports.msTime.d;
37
- exports.msToDys = msToDys;
38
- const msToWks = (ms) => ms / exports.msTime.w;
39
- exports.msToWks = msToWks;
40
- function msToTime(msT, toObj = false) {
41
- // N - number;
42
- const msN = (msT % 1000);
43
- let sN = Math.floor(msT / 1000);
44
- let mN = Math.floor(sN / 60);
45
- sN = sN % 60;
46
- let hN = Math.floor(mN / 60);
47
- mN = mN % 60;
48
- const dN = Math.floor(hN / 24);
49
- hN = hN % 24;
50
- const d = ('00' + dN).slice(-3);
51
- const h = (('0' + hN).slice(-2));
52
- const m = (('0' + mN).slice(-2));
53
- const s = (('0' + sN)).slice(-2);
54
- const ms = (('00' + msN).slice(-3));
55
- if (toObj)
56
- return { d: dN, h: hN, m: mN, s: sN, ms: msN };
57
- return `${dN ? d + ':' : ''}${h}:${m}:${s}:${ms}`;
58
- }
59
- exports.msToTime = msToTime;
60
- function msTimeObj(msT, toNumbers = false) {
61
- // N - number;
62
- const ms = (msT % 1000);
63
- let s = Math.floor(msT / 1000);
64
- let m = Math.floor(s / 60);
65
- s = s % 60;
66
- let h = Math.floor(m / 60);
67
- m = m % 60;
68
- const d = Math.floor(h / 24);
69
- h = h % 24;
70
- if (toNumbers)
71
- return { d, h, m, s, ms };
72
- return {
73
- d: ('00' + d).slice(-3),
74
- h: (('0' + h).slice(-2)),
75
- m: (('0' + m).slice(-2)),
76
- s: (('0' + s)).slice(-2),
77
- ms: (('00' + ms).slice(-3)),
78
- };
79
- }
80
- exports.msTimeObj = msTimeObj;
81
- /** Gives seconds in milliseconds | `sec(s) => s * 1000` */
82
- const seconds = (s) => s * exports.msTime.s;
83
- exports.seconds = seconds;
84
- /** Analog of seconds() */
85
- exports.sec = exports.seconds;
86
- /** Gives minutes in milliseconds | `min(m) => m * 60000` */
87
- const minutes = (m) => m * exports.msTime.m;
88
- exports.minutes = minutes;
89
- /** Analog of minutes() */
90
- exports.min = exports.minutes;
91
- /** Gives hours in milliseconds | `hrs(h) => h * 3600000` */
92
- const hours = (h) => h * exports.msTime.h;
93
- exports.hours = hours;
94
- /** Analog of hours */
95
- exports.hrs = exports.hours;
96
- /** Gives days in milliseconds | `dys(d) => d * 86400000` */
97
- const days = (d) => d * exports.msTime.d;
98
- exports.days = days;
99
- /** Analog of days */
100
- exports.dys = exports.days;
101
- /** Gives weeks in milliseconds | `wks(w) => w * 604800000` */
102
- const weeks = (w) => w * exports.msTime.w;
103
- exports.weeks = weeks;
104
- /** Analog of weeks */
105
- exports.wks = exports.weeks;
106
- /** Gives the 'start' and 'end' of a day.
107
- *
108
- * Start of day is the first ms of the day
109
- *
110
- * End of day is the last ms of the day
111
- */
112
- function getDayStartEnd(t, type = 'local') {
113
- if (_1.isType(t, 'number'))
114
- t = new Date(t);
115
- const y = t.getFullYear();
116
- const m = t.getMonth();
117
- const d = t.getDate();
118
- let start = new Date(y, m, d);
119
- let end = new Date(y, m, d, 23, 59, 59, 999);
120
- if (type === 'unix') {
121
- const tzOffset = exports.min(start.getTimezoneOffset());
122
- start = new Date(start.getTime() + tzOffset);
123
- end = new Date(end.getTime() + tzOffset);
124
- }
125
- return { start, end };
126
- }
127
- exports.getDayStartEnd = getDayStartEnd;
128
- function weekStartEnd(t, weekStart = 'sun', type = 'local') {
129
- if (_1.isType(t, 'number'))
130
- t = new Date(t);
131
- const wd = t.getDay();
132
- const startOffset = wd * -1 + (weekStart === 'mon' ? 1 : 0);
133
- const endOffset = 6 + startOffset;
134
- const s = new Date(t.getTime() + exports.days(startOffset));
135
- const e = new Date(t.getTime() + exports.days(endOffset));
136
- let start = new Date(s.getFullYear(), s.getMonth(), s.getDate());
137
- let end = new Date(e.getFullYear(), e.getMonth(), e.getDate(), 23, 59, 59, 999);
138
- if (type === 'unix') {
139
- const tzOffset = exports.min(start.getTimezoneOffset());
140
- start = new Date(start.getTime() + tzOffset);
141
- end = new Date(end.getTime() + tzOffset);
142
- }
143
- return { start, end };
144
- }
145
- exports.weekStartEnd = weekStartEnd;
146
- function monthStartEnd(t, type = 'local') {
147
- if (_1.isType(t, 'number'))
148
- t = new Date(t);
149
- const y = t.getFullYear();
150
- const m = t.getMonth();
151
- let start = new Date(y, m, 1);
152
- let end = new Date(y, m + 1, 0, 23, 59, 59, 999);
153
- if (type === 'unix') {
154
- const tzOffset = exports.min(start.getTimezoneOffset());
155
- start = new Date(start.getTime() + tzOffset);
156
- end = new Date(end.getTime() + tzOffset);
157
- }
158
- return { start, end };
159
- }
160
- exports.monthStartEnd = monthStartEnd;
161
- function yearStartEnd(t, type = 'local') {
162
- if (_1.isType(t, 'number'))
163
- t = new Date(t);
164
- const y = t.getFullYear();
165
- let start = new Date(y, 0, 1);
166
- let end = new Date(y, 12, 0, 23, 59, 59, 999);
167
- if (type === 'unix') {
168
- const tzOffset = exports.min(start.getTimezoneOffset());
169
- start = new Date(start.getTime() + tzOffset);
170
- end = new Date(end.getTime() + tzOffset);
171
- }
172
- return { start, end };
173
- }
174
- exports.yearStartEnd = yearStartEnd;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.timeObj = exports.humanizedTime = exports.time = exports.weekTuple = exports.msTime = void 0;
4
+ exports.dateTimeToString = dateTimeToString;
5
+ exports.getDayStartEnd = getDayStartEnd;
6
+ exports.weekStartEnd = weekStartEnd;
7
+ exports.monthStartEnd = monthStartEnd;
8
+ exports.yearStartEnd = yearStartEnd;
9
+ exports.getTime = getTime;
10
+ exports.timeZoneOffsetMin = timeZoneOffsetMin;
11
+ exports.parseDate = parseDate;
12
+ exports.toLocalISOString = toLocalISOString;
13
+ const _1 = require(".");
14
+ exports.msTime = {
15
+ s: 1000,
16
+ m: 60000,
17
+ h: 3600000,
18
+ d: 86400000,
19
+ w: 604800000,
20
+ };
21
+ exports.weekTuple = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
22
+ /**
23
+ * Converts Date to time of day.
24
+ * Good for use in logging.
25
+ *
26
+ * If no parameter `dt = new Date()`.
27
+ * @param dt instance of Date obj
28
+ * @returns `hh:mm:ss:ms`
29
+ * @example "15:07:56:150"
30
+ */
31
+ function dateTimeToString(dt = new Date()) {
32
+ const h = ('0' + dt.getHours()).slice(-2);
33
+ const m = ('0' + dt.getMinutes()).slice(-2);
34
+ const s = ('0' + dt.getSeconds()).slice(-2);
35
+ const ms = ('00' + dt.getMilliseconds()).slice(-3);
36
+ return `${h}:${m}:${s}:${ms}`;
37
+ }
38
+ /** Gives the 'start' and 'end' of a day.
39
+ *
40
+ * Start of day is the first ms of the day
41
+ *
42
+ * End of day is the last ms of the day
43
+ */
44
+ function getDayStartEnd(t, type = 'local') {
45
+ if ((0, _1.isType)(t, 'number'))
46
+ t = new Date(t);
47
+ const y = t.getFullYear();
48
+ const m = t.getMonth();
49
+ const d = t.getDate();
50
+ let start = new Date(y, m, d);
51
+ let end = new Date(y, m, d, 23, 59, 59, 999);
52
+ if (type === 'unix') {
53
+ const tzOffset = exports.time.min(start.getTimezoneOffset());
54
+ start = new Date(start.getTime() + tzOffset);
55
+ end = new Date(end.getTime() + tzOffset);
56
+ }
57
+ return { start, end };
58
+ }
59
+ function weekStartEnd(t, weekStart = 'sun', type = 'local') {
60
+ if ((0, _1.isType)(t, 'number'))
61
+ t = new Date(t);
62
+ const wd = t.getDay();
63
+ const startOffset = wd * -1 + (weekStart === 'mon' ? 1 : 0);
64
+ const endOffset = 6 + startOffset;
65
+ const s = new Date(t.getTime() + exports.time.dys(startOffset));
66
+ const e = new Date(t.getTime() + exports.time.dys(endOffset));
67
+ let start = new Date(s.getFullYear(), s.getMonth(), s.getDate());
68
+ let end = new Date(e.getFullYear(), e.getMonth(), e.getDate(), 23, 59, 59, 999);
69
+ if (type === 'unix') {
70
+ const tzOffset = exports.time.min(start.getTimezoneOffset());
71
+ start = new Date(start.getTime() + tzOffset);
72
+ end = new Date(end.getTime() + tzOffset);
73
+ }
74
+ return { start, end };
75
+ }
76
+ function monthStartEnd(t, type = 'local') {
77
+ if ((0, _1.isType)(t, 'number'))
78
+ t = new Date(t);
79
+ const y = t.getFullYear();
80
+ const m = t.getMonth();
81
+ let start = new Date(y, m, 1);
82
+ let end = new Date(y, m, 0, 23, 59, 59, 999);
83
+ if (type === 'unix') {
84
+ const tzOffset = exports.time.min(start.getTimezoneOffset());
85
+ start = new Date(start.getTime() + tzOffset);
86
+ end = new Date(end.getTime() + tzOffset);
87
+ }
88
+ return { start, end };
89
+ }
90
+ function yearStartEnd(t, type = 'local') {
91
+ if ((0, _1.isType)(t, 'number'))
92
+ t = new Date(t);
93
+ const y = t.getFullYear();
94
+ let start = new Date(y, 0, 1);
95
+ let end = new Date(y, 12, 0, 23, 59, 59, 999);
96
+ if (type === 'unix') {
97
+ const tzOffset = exports.time.min(start.getTimezoneOffset());
98
+ start = new Date(start.getTime() + tzOffset);
99
+ end = new Date(end.getTime() + tzOffset);
100
+ }
101
+ return { start, end };
102
+ }
103
+ exports.time = {
104
+ /** Seconds(n) -> to ms */
105
+ sec: (n) => 1_000 * n,
106
+ /** Minutes(n) -> to ms */
107
+ min: (n) => 60_000 * n,
108
+ /** Hours(n) -> to ms */
109
+ hrs: (n) => 3_600_000 * n,
110
+ /** Days(n) -> to ms */
111
+ dys: (n) => 86_400_000 * n,
112
+ /** Weeks(n) -> to ms */
113
+ wks: (n) => 604_800_000 * n,
114
+ /** Count time elapsed since: `from` until `to`, `to` def to `Date.now()` */
115
+ since: (from, to = Date.now()) => to - from,
116
+ /** Count down to: `target` time from `from`, `from` def to `Date.now()` */
117
+ until: (target, from = Date.now()) => target - from,
118
+ future: {
119
+ /** fnc(n) -> add ms to now */
120
+ ms: (n) => Date.now() + n,
121
+ /** fnc(n) -> add sec to now */
122
+ sec: (n) => Date.now() + n * exports.msTime.s,
123
+ /** fnc(n) -> add min to now */
124
+ min: (n) => Date.now() + n * exports.msTime.m,
125
+ },
126
+ msTo: {
127
+ /** fnc(n) -> from ms to num of seconds */
128
+ sec: (ms) => ms / exports.msTime.s,
129
+ /** fnc(n) -> from ms to num of minutes */
130
+ min: (ms) => ms / exports.msTime.m,
131
+ /** fnc(n) -> from ms to num of hours */
132
+ hrs: (ms) => ms / exports.msTime.h,
133
+ /** fnc(n) -> from ms to num of days */
134
+ dys: (ms) => ms / exports.msTime.d,
135
+ /** fnc(n) -> from ms to num of weeks */
136
+ wks: (ms) => ms / exports.msTime.w,
137
+ },
138
+ get now() { return Date.now(); }
139
+ };
140
+ const humanizedTime = (date) => {
141
+ const dt = parseDate(date);
142
+ if (!dt)
143
+ return null;
144
+ const dif = exports.time.since(dt.getTime());
145
+ /** p for plural */
146
+ const p = (n) => n > 1 ? 's' : '';
147
+ if (dif < 0) {
148
+ return dt.toLocaleString();
149
+ }
150
+ else if (dif < exports.time.min(1)) {
151
+ const s = Math.ceil(exports.time.msTo.sec(dif)) || 1;
152
+ return `${s} second${p(s)} ago`;
153
+ }
154
+ else if (dif < exports.time.hrs(1)) {
155
+ const m = Math.floor(exports.time.msTo.min(dif));
156
+ return `${m} minute${p(m)} ago`;
157
+ }
158
+ else if (dif < exports.time.hrs(24) && dt.getDate() === new Date().getDate()) {
159
+ const h = Math.floor(exports.time.msTo.hrs(dif));
160
+ const m = Math.floor(exports.time.msTo.min(dif - exports.time.hrs(h)));
161
+ return `${h} hour${p(h)} ${m > 1 ? `${m} minute${p(m)} ` : ''}ago`;
162
+ }
163
+ else {
164
+ return dt.toLocaleString();
165
+ }
166
+ };
167
+ exports.humanizedTime = humanizedTime;
168
+ // Intl.supportedValuesOf('timeZone');
169
+ /** A Date substitute, to make working with time easier and more versatile */
170
+ function getTime(date, ianaTimeZone) {
171
+ const dt = parseDate(date);
172
+ if (!dt)
173
+ throw new Error('Invalid Date');
174
+ ianaTimeZone = ianaTimeZone || Intl.DateTimeFormat().resolvedOptions().timeZone;
175
+ const tzOffsetMin = timeZoneOffsetMin(ianaTimeZone, dt);
176
+ const localISO = toLocalISOString(dt, tzOffsetMin);
177
+ const finalDateObj = new Date(localISO);
178
+ return {
179
+ tzOffsetMin, // this flips from the JS output, to align with the ISO output (- when js would be +)
180
+ localISO,
181
+ isoStr: finalDateObj.toISOString(),
182
+ Date: finalDateObj,
183
+ epochMs: finalDateObj.getTime(),
184
+ ianaTZ: ianaTimeZone,
185
+ timeObj: (0, exports.timeObj)(dt),
186
+ };
187
+ }
188
+ function timeZoneOffsetMin(ianaTimeZone, date = new Date()) {
189
+ const local = new Date(date);
190
+ local.setMilliseconds(0);
191
+ local.setSeconds(0);
192
+ const tzTime = local.toLocaleString('US-en', { timeZone: ianaTimeZone });
193
+ const tzDt = new Date(tzTime);
194
+ const offsetMs = -local.getTimezoneOffset() * 60_000;
195
+ const utcTime = tzDt.getTime() + offsetMs;
196
+ return (utcTime - local.getTime()) / 60_000;
197
+ }
198
+ const timeObj = (dt) => ({
199
+ y: dt.getFullYear(),
200
+ m: dt.getMonth() + 1,
201
+ d: dt.getDate(),
202
+ h: dt.getHours(),
203
+ min: dt.getMinutes(),
204
+ sec: dt.getSeconds(),
205
+ ms: dt.getMilliseconds(),
206
+ wDay: exports.weekTuple[dt.getDay()]
207
+ });
208
+ exports.timeObj = timeObj;
209
+ function parseDate(d) {
210
+ const dt = Array.isArray(d) ?
211
+ new Date(d[0], (d[1] || 1) - 1, d[2] || 1, d[3] || 0, d[4] || 0, d[5] || 0, d[6] || 0)
212
+ :
213
+ (0, _1.isType)(d, 'object') && !(d instanceof Date) ?
214
+ new Date(d.y, (d?.m || 1) - 1, d.d || 1, d.h || 0, d.min || 0, d.sec || 0, d.ms || 0)
215
+ :
216
+ new Date(d);
217
+ if (isNaN(dt)) {
218
+ console.error(new Error(`Invalid Date: ${(0, _1.isType)(d, 'string') ? `"${d}"` : JSON.stringify(d)}`));
219
+ return null;
220
+ }
221
+ return dt;
222
+ }
223
+ function toLocalISOString(date, tzOffsetMin = -date.getTimezoneOffset()) {
224
+ const sign = tzOffsetMin >= 0 ? '+' : '-';
225
+ const diffHours = String(Math.floor(Math.abs(tzOffsetMin) / 60)).padStart(2, '0');
226
+ const diffMinutes = String(Math.abs(tzOffsetMin) % 60).padStart(2, '0');
227
+ return date.toLocaleString('lt').replace(' ', 'T') // or use: "sv-SE" (same effect)
228
+ + '.' + (date.getMilliseconds() + '').padStart(3, '0')
229
+ + sign + diffHours + ':' + diffMinutes;
230
+ }
175
231
  //# sourceMappingURL=time.js.map