@sapphire/time-utilities 1.7.13-next.a4da5c44.0 → 1.7.13-next.a6c8ccda
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/README.md +5 -6
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/iife/index.global.js +36 -62
- package/dist/iife/index.global.js.map +1 -1
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
**Time utilities for JavaScript.**
|
|
8
8
|
|
|
9
9
|
[](https://github.com/sapphiredev/utilities/blob/main/LICENSE.md)
|
|
10
|
-
[](https://codecov.io/gh/sapphiredev/utilities)
|
|
11
10
|
[](https://bundlephobia.com/result?p=@sapphire/time-utilities)
|
|
12
11
|
[](https://www.npmjs.com/package/@sapphire/time-utilities)
|
|
13
12
|
|
|
@@ -19,7 +18,7 @@
|
|
|
19
18
|
- [Features](#features)
|
|
20
19
|
- [Installation](#installation)
|
|
21
20
|
- [Buy us some doughnuts](#buy-us-some-doughnuts)
|
|
22
|
-
- [Contributors
|
|
21
|
+
- [Contributors](#contributors)
|
|
23
22
|
|
|
24
23
|
## Description
|
|
25
24
|
|
|
@@ -66,7 +65,7 @@ Thank you to all the people who already contributed to Sapphire!
|
|
|
66
65
|
</a>
|
|
67
66
|
|
|
68
67
|
[contributing]: https://github.com/sapphiredev/.github/blob/main/.github/CONTRIBUTING.md
|
|
69
|
-
[cron-readme]:
|
|
70
|
-
[duration-readme]:
|
|
71
|
-
[timer-manager-readme]:
|
|
72
|
-
[timestamp-readme]:
|
|
68
|
+
[cron-readme]: https://github.com/sapphiredev/utilities/blob/main/packages/cron/README.md
|
|
69
|
+
[duration-readme]: https://github.com/sapphiredev/utilities/blob/main/packages/duration/README.md
|
|
70
|
+
[timer-manager-readme]: https://github.com/sapphiredev/utilities/blob/main/packages/timer-manager/README.md
|
|
71
|
+
[timestamp-readme]: https://github.com/sapphiredev/utilities/blob/main/packages/timestamp/README.md
|
package/dist/cjs/index.cjs
CHANGED
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs","sourcesContent":[]}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -2,5 +2,5 @@ export { Cron, allowedNum, cronTokens, partRegex, predefined, tokensRegex, wildc
|
|
|
2
2
|
export { DEFAULT_SEPARATORS, DEFAULT_UNITS, Duration, DurationFormatter, Time, TimeTypes } from '@sapphire/duration';
|
|
3
3
|
export { TimerManager } from '@sapphire/timer-manager';
|
|
4
4
|
export { Timestamp, days, months, tokens } from '@sapphire/timestamp';
|
|
5
|
-
//# sourceMappingURL=
|
|
5
|
+
//# sourceMappingURL=index.mjs.map
|
|
6
6
|
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs","sourcesContent":[]}
|
|
@@ -4,7 +4,7 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
6
|
|
|
7
|
-
// ../utilities/dist/esm/chunk-
|
|
7
|
+
// ../utilities/dist/esm/chunk-PAWJFY3S.mjs
|
|
8
8
|
var __defProp2 = Object.defineProperty;
|
|
9
9
|
var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
|
|
10
10
|
|
|
@@ -19,10 +19,7 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
19
19
|
var __defProp3 = Object.defineProperty;
|
|
20
20
|
var __defNormalProp = /* @__PURE__ */ __name((obj, key, value) => key in obj ? __defProp3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value, "__defNormalProp");
|
|
21
21
|
var __name3 = /* @__PURE__ */ __name((target, value) => __defProp3(target, "name", { value, configurable: true }), "__name");
|
|
22
|
-
var __publicField = /* @__PURE__ */ __name((obj, key, value) =>
|
|
23
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
24
|
-
return value;
|
|
25
|
-
}, "__publicField");
|
|
22
|
+
var __publicField = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value), "__publicField");
|
|
26
23
|
var partRegex = /^(?:(\*)|(\d+)(?:-(\d+))?)(?:\/(\d+))?$/;
|
|
27
24
|
var wildcardRegex = /\bh\b|\B\?\B/g;
|
|
28
25
|
var allowedNum = [
|
|
@@ -91,15 +88,12 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
91
88
|
/* Day */
|
|
92
89
|
), false);
|
|
93
90
|
}
|
|
94
|
-
if (!origin)
|
|
95
|
-
return new Date(Date.UTC(outset.getUTCFullYear(), outset.getUTCMonth(), outset.getUTCDate(), this.hours[0], this.minutes[0]));
|
|
91
|
+
if (!origin) return new Date(Date.UTC(outset.getUTCFullYear(), outset.getUTCMonth(), outset.getUTCDate(), this.hours[0], this.minutes[0]));
|
|
96
92
|
const now = new Date(outset.getTime() + 6e4);
|
|
97
93
|
for (const hour of this.hours) {
|
|
98
|
-
if (hour < now.getUTCHours())
|
|
99
|
-
continue;
|
|
94
|
+
if (hour < now.getUTCHours()) continue;
|
|
100
95
|
for (const minute of this.minutes) {
|
|
101
|
-
if (hour === now.getUTCHours() && minute < now.getUTCMinutes())
|
|
102
|
-
continue;
|
|
96
|
+
if (hour === now.getUTCHours() && minute < now.getUTCMinutes()) continue;
|
|
103
97
|
return new Date(Date.UTC(outset.getUTCFullYear(), outset.getUTCMonth(), outset.getUTCDate(), hour, minute));
|
|
104
98
|
}
|
|
105
99
|
}
|
|
@@ -108,18 +102,24 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
108
102
|
/* Day */
|
|
109
103
|
), false);
|
|
110
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Returns the string that represents this cron pattern
|
|
107
|
+
*
|
|
108
|
+
* @returns The string that represents this cron pattern
|
|
109
|
+
*/
|
|
110
|
+
toString() {
|
|
111
|
+
return this.cron;
|
|
112
|
+
}
|
|
111
113
|
/**
|
|
112
114
|
* Normalize the pattern
|
|
113
115
|
* @param cron The pattern to normalize
|
|
114
116
|
*/
|
|
115
117
|
static normalize(cron) {
|
|
116
|
-
if (Reflect.has(predefined, cron))
|
|
117
|
-
return Reflect.get(predefined, cron);
|
|
118
|
+
if (Reflect.has(predefined, cron)) return Reflect.get(predefined, cron);
|
|
118
119
|
const now = /* @__PURE__ */ new Date();
|
|
119
120
|
cron = cron.split(" ").map(
|
|
120
121
|
(val, i) => val.replace(wildcardRegex, (match) => {
|
|
121
|
-
if (match === "h")
|
|
122
|
-
return (Math.floor(Math.random() * allowedNum[i][1]) + allowedNum[i][0]).toString();
|
|
122
|
+
if (match === "h") return (Math.floor(Math.random() * allowedNum[i][1]) + allowedNum[i][0]).toString();
|
|
123
123
|
if (match === "?") {
|
|
124
124
|
switch (i) {
|
|
125
125
|
case 0:
|
|
@@ -145,8 +145,7 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
145
145
|
*/
|
|
146
146
|
static parseString(cron) {
|
|
147
147
|
const parts = cron.split(" ");
|
|
148
|
-
if (parts.length !== 5)
|
|
149
|
-
throw new Error("Invalid Cron Provided");
|
|
148
|
+
if (parts.length !== 5) throw new Error("Invalid Cron Provided");
|
|
150
149
|
return parts.map((part, i) => _a.parsePart(part, i));
|
|
151
150
|
}
|
|
152
151
|
/**
|
|
@@ -157,16 +156,13 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
157
156
|
static parsePart(cronPart, id) {
|
|
158
157
|
if (cronPart.includes(",")) {
|
|
159
158
|
const res = [];
|
|
160
|
-
for (const part of cronPart.split(","))
|
|
161
|
-
res.push(..._a.parsePart(part, id));
|
|
159
|
+
for (const part of cronPart.split(",")) res.push(..._a.parsePart(part, id));
|
|
162
160
|
return [...new Set(res)].sort((a, b) => a - b);
|
|
163
161
|
}
|
|
164
162
|
const [, wild, minStr, maxStr, step] = partRegex.exec(cronPart);
|
|
165
163
|
let [min, max] = [parseInt(minStr, 10), parseInt(maxStr, 10)];
|
|
166
|
-
if (wild)
|
|
167
|
-
|
|
168
|
-
else if (!max && !step)
|
|
169
|
-
return [min];
|
|
164
|
+
if (wild) [min, max] = allowedNum[id];
|
|
165
|
+
else if (!max && !step) return [min];
|
|
170
166
|
[min, max] = [min, max || allowedNum[id][1]].sort((a, b) => a - b);
|
|
171
167
|
return range(min, max, parseInt(step, 10) || 1);
|
|
172
168
|
}
|
|
@@ -178,10 +174,7 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
178
174
|
var __defProp4 = Object.defineProperty;
|
|
179
175
|
var __defNormalProp2 = /* @__PURE__ */ __name((obj, key, value) => key in obj ? __defProp4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value, "__defNormalProp");
|
|
180
176
|
var __name4 = /* @__PURE__ */ __name((target, value) => __defProp4(target, "name", { value, configurable: true }), "__name");
|
|
181
|
-
var __publicField2 = /* @__PURE__ */ __name((obj, key, value) =>
|
|
182
|
-
__defNormalProp2(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
183
|
-
return value;
|
|
184
|
-
}, "__publicField");
|
|
177
|
+
var __publicField2 = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp2(obj, typeof key !== "symbol" ? key + "" : key, value), "__publicField");
|
|
185
178
|
var Time = /* @__PURE__ */ ((Time2) => {
|
|
186
179
|
Time2[Time2["Nanosecond"] = 1e-6] = "Nanosecond";
|
|
187
180
|
Time2[Time2["Microsecond"] = 1e-3] = "Microsecond";
|
|
@@ -556,17 +549,14 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
556
549
|
} = DEFAULT_SEPARATORS) {
|
|
557
550
|
const output = [];
|
|
558
551
|
const negative = duration < 0;
|
|
559
|
-
if (negative)
|
|
560
|
-
duration *= -1;
|
|
552
|
+
if (negative) duration *= -1;
|
|
561
553
|
for (const [type, timeDuration] of kTimeDurations) {
|
|
562
554
|
const division = duration / timeDuration;
|
|
563
|
-
if (division < 1)
|
|
564
|
-
continue;
|
|
555
|
+
if (division < 1) continue;
|
|
565
556
|
const floored = Math.floor(division);
|
|
566
557
|
duration -= floored * timeDuration;
|
|
567
558
|
output.push(addUnit(floored, this.units[type], leftSeparator));
|
|
568
|
-
if (output.length >= precision)
|
|
569
|
-
break;
|
|
559
|
+
if (output.length >= precision) break;
|
|
570
560
|
}
|
|
571
561
|
return `${negative ? "-" : ""}${output.join(rightSeparator) || addUnit(0, this.units.second, leftSeparator)}`;
|
|
572
562
|
}
|
|
@@ -574,8 +564,7 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
574
564
|
__name4(_DurationFormatter, "DurationFormatter");
|
|
575
565
|
var DurationFormatter = _DurationFormatter;
|
|
576
566
|
function addUnit(time, unit, separator) {
|
|
577
|
-
if (Reflect.has(unit, time))
|
|
578
|
-
return `${time}${separator}${Reflect.get(unit, time)}`;
|
|
567
|
+
if (Reflect.has(unit, time)) return `${time}${separator}${Reflect.get(unit, time)}`;
|
|
579
568
|
return `${time}${separator}${unit.DEFAULT}`;
|
|
580
569
|
}
|
|
581
570
|
__name(addUnit, "addUnit");
|
|
@@ -585,10 +574,7 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
585
574
|
var __defProp5 = Object.defineProperty;
|
|
586
575
|
var __defNormalProp3 = /* @__PURE__ */ __name((obj, key, value) => key in obj ? __defProp5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value, "__defNormalProp");
|
|
587
576
|
var __name5 = /* @__PURE__ */ __name((target, value) => __defProp5(target, "name", { value, configurable: true }), "__name");
|
|
588
|
-
var __publicField3 = /* @__PURE__ */ __name((obj, key, value) =>
|
|
589
|
-
__defNormalProp3(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
590
|
-
return value;
|
|
591
|
-
}, "__publicField");
|
|
577
|
+
var __publicField3 = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp3(obj, typeof key !== "symbol" ? key + "" : key, value), "__publicField");
|
|
592
578
|
var _a4;
|
|
593
579
|
var _TimerManager = (_a4 = class extends null {
|
|
594
580
|
/**
|
|
@@ -636,10 +622,8 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
636
622
|
* Clears running timeouts and intervals created through this class so NodeJS can gracefully exit
|
|
637
623
|
*/
|
|
638
624
|
static destroy() {
|
|
639
|
-
for (const i of this.storedTimeouts)
|
|
640
|
-
|
|
641
|
-
for (const i of this.storedIntervals)
|
|
642
|
-
clearInterval(i);
|
|
625
|
+
for (const i of this.storedTimeouts) clearTimeout(i);
|
|
626
|
+
for (const i of this.storedIntervals) clearInterval(i);
|
|
643
627
|
this.storedTimeouts.clear();
|
|
644
628
|
this.storedIntervals.clear();
|
|
645
629
|
}
|
|
@@ -653,10 +637,7 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
653
637
|
var __defProp6 = Object.defineProperty;
|
|
654
638
|
var __defNormalProp4 = /* @__PURE__ */ __name((obj, key, value) => key in obj ? __defProp6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value, "__defNormalProp");
|
|
655
639
|
var __name6 = /* @__PURE__ */ __name((target, value) => __defProp6(target, "name", { value, configurable: true }), "__name");
|
|
656
|
-
var __publicField4 = /* @__PURE__ */ __name((obj, key, value) =>
|
|
657
|
-
__defNormalProp4(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
658
|
-
return value;
|
|
659
|
-
}, "__publicField");
|
|
640
|
+
var __publicField4 = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp4(obj, typeof key !== "symbol" ? key + "" : key, value), "__publicField");
|
|
660
641
|
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
|
661
642
|
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
|
662
643
|
var tokens2 = /* @__PURE__ */ new Map([
|
|
@@ -705,12 +686,9 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
705
686
|
"d",
|
|
706
687
|
(time) => {
|
|
707
688
|
const day = String(time.getDate());
|
|
708
|
-
if (day !== "11" && day.endsWith("1"))
|
|
709
|
-
|
|
710
|
-
if (day !== "
|
|
711
|
-
return `${day}nd`;
|
|
712
|
-
if (day !== "13" && day.endsWith("3"))
|
|
713
|
-
return `${day}rd`;
|
|
689
|
+
if (day !== "11" && day.endsWith("1")) return `${day}st`;
|
|
690
|
+
if (day !== "12" && day.endsWith("2")) return `${day}nd`;
|
|
691
|
+
if (day !== "13" && day.endsWith("3")) return `${day}rd`;
|
|
714
692
|
return `${day}th`;
|
|
715
693
|
}
|
|
716
694
|
],
|
|
@@ -870,8 +848,7 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
870
848
|
static display(template, time) {
|
|
871
849
|
let output = "";
|
|
872
850
|
const parsedTime = _a5.resolveDate(time);
|
|
873
|
-
for (const { content, type } of template)
|
|
874
|
-
output += content || tokenResolvers.get(type)(parsedTime);
|
|
851
|
+
for (const { content, type } of template) output += content || tokenResolvers.get(type)(parsedTime);
|
|
875
852
|
return output;
|
|
876
853
|
}
|
|
877
854
|
/**
|
|
@@ -887,18 +864,15 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
887
864
|
const tokenMax = tokens2.get(currentChar);
|
|
888
865
|
if (typeof tokenMax === "number") {
|
|
889
866
|
current += currentChar;
|
|
890
|
-
while (pattern[i + 1] === currentChar && current.length < tokenMax)
|
|
891
|
-
current += pattern[++i];
|
|
867
|
+
while (pattern[i + 1] === currentChar && current.length < tokenMax) current += pattern[++i];
|
|
892
868
|
template.push({ type: current, content: null });
|
|
893
869
|
} else if (currentChar === "[") {
|
|
894
|
-
while (i + 1 < pattern.length && pattern[i + 1] !== "]")
|
|
895
|
-
current += pattern[++i];
|
|
870
|
+
while (i + 1 < pattern.length && pattern[i + 1] !== "]") current += pattern[++i];
|
|
896
871
|
i++;
|
|
897
872
|
template.push({ type: "literal", content: current || "[" });
|
|
898
873
|
} else {
|
|
899
874
|
current += currentChar;
|
|
900
|
-
while (i + 1 < pattern.length && !tokens2.has(pattern[i + 1]) && pattern[i + 1] !== "[")
|
|
901
|
-
current += pattern[++i];
|
|
875
|
+
while (i + 1 < pattern.length && !tokens2.has(pattern[i + 1]) && pattern[i + 1] !== "[") current += pattern[++i];
|
|
902
876
|
template.push({ type: "literal", content: current });
|
|
903
877
|
}
|
|
904
878
|
}
|
|
@@ -938,5 +912,5 @@ var SapphireTimeUtilities = (function (exports) {
|
|
|
938
912
|
return exports;
|
|
939
913
|
|
|
940
914
|
})({});
|
|
941
|
-
//# sourceMappingURL=
|
|
915
|
+
//# sourceMappingURL=index.global.js.map
|
|
942
916
|
//# sourceMappingURL=index.global.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../utilities/dist/esm/chunk-G5GHKT7C.mjs","../../../utilities/src/lib/range.ts","../../../cron/src/lib/constants.ts","../../../cron/src/lib/Cron.ts","../../../duration/src/lib/constants.ts","../../../duration/src/lib/Duration.ts","../../../duration/src/lib/DurationFormatter.ts","../../../timer-manager/src/lib/TimerManager.ts","../../../timestamp/src/lib/constants.ts","../../../timestamp/src/lib/Timestamp.ts"],"names":["__defProp","__name","Time","TimeTypes","_a","__publicField","tokens"],"mappings":"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","sourcesContent":["var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\nexport { __name };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=chunk-G5GHKT7C.mjs.map","/**\n * Get an array of numbers with the selected range\n * @param min The minimum value\n * @param max The maximum value\n * @param step The step value\n */\nexport function range(min: number, max: number, step: number): number[] {\n\treturn new Array(Math.floor((max - min) / step) + 1).fill(0).map((_val, i) => min + i * step);\n}\n","export enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\nexport const partRegex = /^(?:(\\*)|(\\d+)(?:-(\\d+))?)(?:\\/(\\d+))?$/;\n\nexport const wildcardRegex = /\\bh\\b|\\B\\?\\B/g;\n\nexport const allowedNum = [\n\t[0, 59],\n\t[0, 23],\n\t[1, 31],\n\t[1, 12],\n\t[0, 6]\n];\n\nexport const predefined = {\n\t'@annually': '0 0 1 1 *',\n\t'@yearly': '0 0 1 1 *',\n\t'@monthly': '0 0 1 * *',\n\t'@weekly': '0 0 * * 0',\n\t'@daily': '0 0 * * *',\n\t'@hourly': '0 * * * *'\n} as const;\n\nexport const cronTokens = {\n\tjan: 1,\n\tfeb: 2,\n\tmar: 3,\n\tapr: 4,\n\tmay: 5,\n\tjun: 6,\n\tjul: 7,\n\taug: 8,\n\tsep: 9,\n\toct: 10,\n\tnov: 11,\n\tdec: 12,\n\tsun: 0,\n\tmon: 1,\n\ttue: 2,\n\twed: 3,\n\tthu: 4,\n\tfri: 5,\n\tsat: 6\n} as const;\n\nexport const tokensRegex = new RegExp(Object.keys(cronTokens).join('|'), 'g');\n","import { range } from '@sapphire/utilities';\nimport { allowedNum, cronTokens, partRegex, predefined, Time, tokensRegex, wildcardRegex } from './constants';\n\n/**\n * Handles Cron strings and generates dates based on the cron string provided.\n * @see https://en.wikipedia.org/wiki/Cron\n */\nexport class Cron {\n\tpublic cron: string;\n\tpublic normalized: string;\n\tpublic minutes: number[];\n\tpublic hours: number[];\n\tpublic days: number[];\n\tpublic months: number[];\n\tpublic dows: number[];\n\n\t/**\n\t * @param cron The cron pattern to use\n\t */\n\tpublic constructor(cron: string) {\n\t\tthis.cron = cron.toLowerCase();\n\t\tthis.normalized = Cron.normalize(this.cron);\n\t\t[this.minutes, this.hours, this.days, this.months, this.dows] = Cron.parseString(this.normalized);\n\t}\n\n\t/**\n\t * Get the next date that matches with the current pattern\n\t * @param outset The Date instance to compare with\n\t * @param origin Whether this next call is origin\n\t */\n\tpublic next(outset: Date = new Date(), origin = true): Date {\n\t\tif (!this.days.includes(outset.getUTCDate()) || !this.months.includes(outset.getUTCMonth() + 1) || !this.dows.includes(outset.getUTCDay())) {\n\t\t\treturn this.next(new Date(outset.getTime() + Time.Day), false);\n\t\t}\n\t\tif (!origin) return new Date(Date.UTC(outset.getUTCFullYear(), outset.getUTCMonth(), outset.getUTCDate(), this.hours[0], this.minutes[0]));\n\n\t\tconst now = new Date(outset.getTime() + 60000);\n\n\t\tfor (const hour of this.hours) {\n\t\t\tif (hour < now.getUTCHours()) continue;\n\t\t\tfor (const minute of this.minutes) {\n\t\t\t\tif (hour === now.getUTCHours() && minute < now.getUTCMinutes()) continue;\n\t\t\t\treturn new Date(Date.UTC(outset.getUTCFullYear(), outset.getUTCMonth(), outset.getUTCDate(), hour, minute));\n\t\t\t}\n\t\t}\n\n\t\treturn this.next(new Date(outset.getTime() + Time.Day), false);\n\t}\n\n\t/**\n\t * Normalize the pattern\n\t * @param cron The pattern to normalize\n\t */\n\tprivate static normalize(cron: string): string {\n\t\tif (Reflect.has(predefined, cron)) return Reflect.get(predefined, cron);\n\t\tconst now = new Date();\n\t\tcron = cron\n\t\t\t.split(' ')\n\t\t\t.map((val, i) =>\n\t\t\t\tval.replace(wildcardRegex, (match) => {\n\t\t\t\t\tif (match === 'h') return (Math.floor(Math.random() * allowedNum[i][1]) + allowedNum[i][0]).toString();\n\n\t\t\t\t\tif (match === '?') {\n\t\t\t\t\t\tswitch (i) {\n\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\treturn now.getUTCMinutes().toString();\n\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\treturn now.getUTCHours().toString();\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\treturn now.getUTCDate().toString();\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\treturn now.getUTCMonth().toString();\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\treturn now.getUTCDay().toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t})\n\t\t\t)\n\t\t\t.join(' ');\n\t\treturn cron.replace(tokensRegex, (match) => String(Reflect.get(cronTokens, match)));\n\t}\n\n\t/**\n\t * Parse the pattern\n\t * @param cron The pattern to parse\n\t */\n\tprivate static parseString(cron: string): Array<number[]> {\n\t\tconst parts = cron.split(' ');\n\t\tif (parts.length !== 5) throw new Error('Invalid Cron Provided');\n\t\treturn parts.map((part, i) => Cron.parsePart(part, i));\n\t}\n\n\t/**\n\t * Parse the current part\n\t * @param cronPart The part of the pattern to parse\n\t * @param id The id that identifies the current part\n\t */\n\tprivate static parsePart(cronPart: string, id: number): number[] {\n\t\tif (cronPart.includes(',')) {\n\t\t\tconst res: number[] = [];\n\t\t\tfor (const part of cronPart.split(',')) res.push(...Cron.parsePart(part, id));\n\t\t\treturn [...new Set(res)].sort((a, b) => a - b);\n\t\t}\n\n\t\tconst [, wild, minStr, maxStr, step] = partRegex.exec(cronPart)!;\n\t\tlet [min, max] = [parseInt(minStr, 10), parseInt(maxStr, 10)];\n\n\t\t// If '*', set min and max as the minimum and maximum allowed numbers:\n\t\tif (wild) [min, max] = allowedNum[id];\n\t\t// Else if a number was given, but not a maximum nor a step, return it\n\t\t// as only allowed value:\n\t\telse if (!max && !step) return [min];\n\n\t\t// Set min and max as the given numbers, defaulting max to the maximum\n\t\t// allowed, so min is never bigger than max:\n\t\t// This makes min and max be, in the following cases (considering minutes):\n\t\t// -> 1-2 | 1..2\n\t\t// -> 2-1 | 1..2\n\t\t// -> 1/7 | 1, 8, 15, 22, 29, 36, 43, 50, 57\n\t\t[min, max] = [min, max || allowedNum[id][1]].sort((a, b) => a - b);\n\n\t\t// Generate a range\n\t\treturn range(min, max, parseInt(step, 10) || 1);\n\t}\n}\n","import type { DurationFormatAssetsTime, DurationFormatSeparators } from './DurationFormatter';\n\nexport enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\n/**\n * The supported time types\n */\nexport enum TimeTypes {\n\tSecond = 'second',\n\tMinute = 'minute',\n\tHour = 'hour',\n\tDay = 'day',\n\tWeek = 'week',\n\tMonth = 'month',\n\tYear = 'year'\n}\n\nexport const DEFAULT_UNITS: DurationFormatAssetsTime = {\n\t[TimeTypes.Year]: {\n\t\t1: 'year',\n\t\tDEFAULT: 'years'\n\t},\n\t[TimeTypes.Month]: {\n\t\t1: 'month',\n\t\tDEFAULT: 'months'\n\t},\n\t[TimeTypes.Week]: {\n\t\t1: 'week',\n\t\tDEFAULT: 'weeks'\n\t},\n\t[TimeTypes.Day]: {\n\t\t1: 'day',\n\t\tDEFAULT: 'days'\n\t},\n\t[TimeTypes.Hour]: {\n\t\t1: 'hour',\n\t\tDEFAULT: 'hours'\n\t},\n\t[TimeTypes.Minute]: {\n\t\t1: 'minute',\n\t\tDEFAULT: 'minutes'\n\t},\n\t[TimeTypes.Second]: {\n\t\t1: 'second',\n\t\tDEFAULT: 'seconds'\n\t}\n};\n\nexport const DEFAULT_SEPARATORS: DurationFormatSeparators = {\n\tleft: ' ',\n\tright: ' '\n};\n","import { Time } from './constants';\n\nconst tokens = new Map([\n\t['nanosecond', Time.Nanosecond],\n\t['nanoseconds', Time.Nanosecond],\n\t['ns', Time.Nanosecond],\n\n\t['microsecond', Time.Microsecond],\n\t['microseconds', Time.Microsecond],\n\t['μs', Time.Microsecond],\n\t['us', Time.Microsecond],\n\n\t['millisecond', Time.Millisecond],\n\t['milliseconds', Time.Millisecond],\n\t['ms', Time.Millisecond],\n\n\t['second', Time.Second],\n\t['seconds', Time.Second],\n\t['sec', Time.Second],\n\t['secs', Time.Second],\n\t['s', Time.Second],\n\n\t['minute', Time.Minute],\n\t['minutes', Time.Minute],\n\t['min', Time.Minute],\n\t['mins', Time.Minute],\n\t['m', Time.Minute],\n\n\t['hour', Time.Hour],\n\t['hours', Time.Hour],\n\t['hr', Time.Hour],\n\t['hrs', Time.Hour],\n\t['h', Time.Hour],\n\n\t['day', Time.Day],\n\t['days', Time.Day],\n\t['d', Time.Day],\n\n\t['week', Time.Week],\n\t['weeks', Time.Week],\n\t['wk', Time.Week],\n\t['wks', Time.Week],\n\t['w', Time.Week],\n\n\t['month', Time.Month],\n\t['months', Time.Month],\n\t['b', Time.Month],\n\t['mo', Time.Month],\n\n\t['year', Time.Year],\n\t['years', Time.Year],\n\t['yr', Time.Year],\n\t['yrs', Time.Year],\n\t['y', Time.Year]\n]);\n\nconst mappings = new Map([\n\t[Time.Nanosecond, 'nanoseconds'],\n\t[Time.Microsecond, 'microseconds'],\n\t[Time.Millisecond, 'milliseconds'],\n\t[Time.Second, 'seconds'],\n\t[Time.Minute, 'minutes'],\n\t[Time.Hour, 'hours'],\n\t[Time.Day, 'days'],\n\t[Time.Week, 'weeks'],\n\t[Time.Month, 'months'],\n\t[Time.Year, 'years']\n] as const);\n\n/**\n * Converts duration strings into ms and future dates\n */\nexport class Duration {\n\t/**\n\t * The offset\n\t */\n\tpublic offset: number;\n\n\t/**\n\t * The amount of nanoseconds extracted from the text.\n\t */\n\tpublic nanoseconds = 0;\n\n\t/**\n\t * The amount of microseconds extracted from the text.\n\t */\n\tpublic microseconds = 0;\n\n\t/**\n\t * The amount of milliseconds extracted from the text.\n\t */\n\tpublic milliseconds = 0;\n\n\t/**\n\t * The amount of seconds extracted from the text.\n\t */\n\tpublic seconds = 0;\n\n\t/**\n\t * The amount of minutes extracted from the text.\n\t */\n\tpublic minutes = 0;\n\n\t/**\n\t * The amount of hours extracted from the text.\n\t */\n\tpublic hours = 0;\n\n\t/**\n\t * The amount of days extracted from the text.\n\t */\n\tpublic days = 0;\n\n\t/**\n\t * The amount of weeks extracted from the text.\n\t */\n\tpublic weeks = 0;\n\n\t/**\n\t * The amount of months extracted from the text.\n\t */\n\tpublic months = 0;\n\n\t/**\n\t * The amount of years extracted from the text.\n\t */\n\tpublic years = 0;\n\n\t/**\n\t * Create a new Duration instance\n\t * @param pattern The string to parse\n\t */\n\tpublic constructor(pattern: string) {\n\t\tlet result = 0;\n\t\tlet valid = false;\n\n\t\tpattern\n\t\t\t.toLowerCase()\n\t\t\t// ignore commas\n\t\t\t.replace(Duration.commaRegex, '')\n\t\t\t// a / an = 1\n\t\t\t.replace(Duration.aAndAnRegex, '1')\n\t\t\t// do math\n\t\t\t.replace(Duration.patternRegex, (_, i, units) => {\n\t\t\t\tconst token = tokens.get(units);\n\t\t\t\tif (token !== undefined) {\n\t\t\t\t\tconst n = Number(i);\n\t\t\t\t\tresult += n * token;\n\t\t\t\t\tthis[mappings.get(token)!] += n;\n\t\t\t\t\tvalid = true;\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t});\n\n\t\tthis.offset = valid ? result : NaN;\n\t}\n\n\t/**\n\t * Get the date from now\n\t */\n\tpublic get fromNow(): Date {\n\t\treturn this.dateFrom(new Date());\n\t}\n\n\t/**\n\t * Get the date from\n\t * @param date The Date instance to get the date from\n\t */\n\tpublic dateFrom(date: Date): Date {\n\t\treturn new Date(date.getTime() + this.offset);\n\t}\n\n\t/**\n\t * The RegExp used for the pattern parsing\n\t */\n\tprivate static readonly patternRegex = /(-?\\d*\\.?\\d+(?:e[-+]?\\d+)?)\\s*([a-zμ]*)/gi;\n\n\t/**\n\t * The RegExp used for removing commas\n\t */\n\tprivate static readonly commaRegex = /,/g;\n\n\t/**\n\t * The RegExp used for replacing a/an with 1\n\t */\n\tprivate static readonly aAndAnRegex = /\\ban?\\b/gi;\n}\n","import { DEFAULT_SEPARATORS, DEFAULT_UNITS, TimeTypes } from './constants';\n\n/**\n * The duration of each time type in milliseconds\n */\nconst kTimeDurations: readonly [TimeTypes, number][] = [\n\t[TimeTypes.Year, 31536000000],\n\t// 29.53059 days is the official duration of a month: https://en.wikipedia.org/wiki/Month\n\t[TimeTypes.Month, 2628000000],\n\t[TimeTypes.Week, 1000 * 60 * 60 * 24 * 7],\n\t[TimeTypes.Day, 1000 * 60 * 60 * 24],\n\t[TimeTypes.Hour, 1000 * 60 * 60],\n\t[TimeTypes.Minute, 1000 * 60],\n\t[TimeTypes.Second, 1000]\n];\n\n/**\n * Display the duration\n * @param duration The duration in milliseconds to parse and display\n * @param assets The language assets\n */\nexport class DurationFormatter {\n\tpublic constructor(public units: DurationFormatAssetsTime = DEFAULT_UNITS) {}\n\n\tpublic format(\n\t\tduration: number,\n\t\tprecision = 7,\n\t\t{\n\t\t\tleft: leftSeparator = DEFAULT_SEPARATORS.left,\n\t\t\tright: rightSeparator = DEFAULT_SEPARATORS.right\n\t\t}: DurationFormatSeparators = DEFAULT_SEPARATORS\n\t) {\n\t\tconst output: string[] = [];\n\t\tconst negative = duration < 0;\n\t\tif (negative) duration *= -1;\n\n\t\tfor (const [type, timeDuration] of kTimeDurations) {\n\t\t\tconst division = duration / timeDuration;\n\t\t\tif (division < 1) continue;\n\n\t\t\tconst floored = Math.floor(division);\n\t\t\tduration -= floored * timeDuration;\n\t\t\toutput.push(addUnit(floored, this.units[type], leftSeparator!));\n\n\t\t\t// If the output has enough precision, break\n\t\t\tif (output.length >= precision) break;\n\t\t}\n\n\t\treturn `${negative ? '-' : ''}${output.join(rightSeparator) || addUnit(0, this.units.second, leftSeparator!)}`;\n\t}\n}\n\n/**\n * Adds an unit, if non zero\n * @param time The duration of said unit\n * @param unit The unit language assets\n */\nfunction addUnit(time: number, unit: DurationFormatAssetsUnit, separator: string) {\n\tif (Reflect.has(unit, time)) return `${time}${separator}${Reflect.get(unit, time)}`;\n\treturn `${time}${separator}${unit.DEFAULT}`;\n}\n\nexport interface DurationFormatSeparators {\n\tleft?: string;\n\tright?: string;\n}\n\nexport interface DurationFormatAssetsUnit extends Record<number, string> {\n\tDEFAULT: string;\n}\n\nexport interface DurationFormatAssetsTime {\n\t[TimeTypes.Second]: DurationFormatAssetsUnit;\n\t[TimeTypes.Minute]: DurationFormatAssetsUnit;\n\t[TimeTypes.Hour]: DurationFormatAssetsUnit;\n\t[TimeTypes.Day]: DurationFormatAssetsUnit;\n\t[TimeTypes.Week]: DurationFormatAssetsUnit;\n\t[TimeTypes.Month]: DurationFormatAssetsUnit;\n\t[TimeTypes.Year]: DurationFormatAssetsUnit;\n}\n","/**\n * Manages timers so that this application can be cleanly exited\n */\nexport class TimerManager extends null {\n\t/**\n\t * A set of timeouts to clear on destroy\n\t */\n\tprivate static storedTimeouts = new Set<NodeJS.Timeout>();\n\n\t/**\n\t * A set of intervals to clear on destroy\n\t */\n\tprivate static storedIntervals = new Set<NodeJS.Timeout>();\n\n\t/**\n\t * Creates a timeout gets cleared when destroyed\n\t * @param fn callback function\n\t * @param delay amount of time before running the callback\n\t * @param args additional arguments to pass back to the callback\n\t */\n\tpublic static setTimeout<A = unknown>(fn: (...args: A[]) => void, delay: number, ...args: A[]): NodeJS.Timeout {\n\t\tconst timeout = setTimeout(() => {\n\t\t\tthis.storedTimeouts.delete(timeout);\n\t\t\tfn(...args);\n\t\t}, delay);\n\t\tthis.storedTimeouts.add(timeout);\n\t\treturn timeout;\n\t}\n\n\t/**\n\t * Clears a timeout created through this class\n\t * @param timeout The timeout to clear\n\t */\n\tpublic static clearTimeout(timeout: NodeJS.Timeout): void {\n\t\tclearTimeout(timeout);\n\t\tthis.storedTimeouts.delete(timeout);\n\t}\n\n\t/**\n\t * Creates an interval gets cleared when destroyed\n\t * @param fn callback function\n\t * @param delay amount of time before running the callback\n\t * @param args additional arguments to pass back to the callback\n\t */\n\tpublic static setInterval<A = unknown>(fn: (...args: A[]) => void, delay: number, ...args: A[]): NodeJS.Timeout {\n\t\tconst interval = setInterval(fn, delay, ...args);\n\t\tthis.storedIntervals.add(interval);\n\t\treturn interval;\n\t}\n\n\t/**\n\t * Clears an internal created through this class\n\t * @param interval The interval to clear\n\t */\n\tpublic static clearInterval(interval: NodeJS.Timeout): void {\n\t\tclearInterval(interval);\n\t\tthis.storedIntervals.delete(interval);\n\t}\n\n\t/**\n\t * Clears running timeouts and intervals created through this class so NodeJS can gracefully exit\n\t */\n\tpublic static destroy(): void {\n\t\tfor (const i of this.storedTimeouts) clearTimeout(i);\n\t\tfor (const i of this.storedIntervals) clearInterval(i);\n\t\tthis.storedTimeouts.clear();\n\t\tthis.storedIntervals.clear();\n\t}\n}\n","export enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\nexport const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\nexport const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\nexport const tokens = new Map<string, number>([\n\t['Y', 4],\n\t['Q', 1],\n\t['M', 4],\n\t['D', 4],\n\t['d', 4],\n\t['X', 1],\n\t['x', 1],\n\t['H', 2],\n\t['h', 2],\n\t['a', 1],\n\t['A', 1],\n\t['m', 2],\n\t['s', 2],\n\t['S', 3],\n\t['Z', 2],\n\t['l', 4],\n\t['L', 4],\n\t['T', 1],\n\t['t', 1]\n]);\n","import { days, months, Time, tokens } from './constants';\n\ninterface TokenResolver {\n\t(time: Date): string;\n}\n\nconst tokenResolvers = new Map<string, TokenResolver>([\n\t// Dates\n\t['Y', (time) => String(time.getFullYear()).slice(2)],\n\t['YY', (time) => String(time.getFullYear()).slice(2)],\n\t['YYY', (time) => String(time.getFullYear())],\n\t['YYYY', (time) => String(time.getFullYear())],\n\t['Q', (time) => String((time.getMonth() + 1) / 3)],\n\t['M', (time) => String(time.getMonth() + 1)],\n\t['MM', (time) => String(time.getMonth() + 1).padStart(2, '0')],\n\t['MMM', (time) => months[time.getMonth()]],\n\t['MMMM', (time) => months[time.getMonth()]],\n\t['D', (time) => String(time.getDate())],\n\t['DD', (time) => String(time.getDate()).padStart(2, '0')],\n\t['DDD', (time) => String(Math.floor((time.getTime() - new Date(time.getFullYear(), 0, 0).getTime()) / Time.Day))],\n\t['DDDD', (time) => String(Math.floor((time.getTime() - new Date(time.getFullYear(), 0, 0).getTime()) / Time.Day))],\n\t[\n\t\t'd',\n\t\t(time) => {\n\t\t\tconst day = String(time.getDate());\n\t\t\tif (day !== '11' && day.endsWith('1')) return `${day}st`;\n\t\t\tif (day !== '12' && day.endsWith('2')) return `${day}nd`;\n\t\t\tif (day !== '13' && day.endsWith('3')) return `${day}rd`;\n\t\t\treturn `${day}th`;\n\t\t}\n\t],\n\t['dd', (time) => days[time.getDay()].slice(0, 2)],\n\t['ddd', (time) => days[time.getDay()].slice(0, 3)],\n\t['dddd', (time) => days[time.getDay()]],\n\t['X', (time) => String(time.valueOf() / Time.Second)],\n\t['x', (time) => String(time.valueOf())],\n\n\t// Locales\n\t['H', (time) => String(time.getHours())],\n\t['HH', (time) => String(time.getHours()).padStart(2, '0')],\n\t['h', (time) => String(time.getHours() % 12 || 12)],\n\t['hh', (time) => String(time.getHours() % 12 || 12).padStart(2, '0')],\n\t['a', (time) => (time.getHours() < 12 ? 'am' : 'pm')],\n\t['A', (time) => (time.getHours() < 12 ? 'AM' : 'PM')],\n\t['m', (time) => String(time.getMinutes())],\n\t['mm', (time) => String(time.getMinutes()).padStart(2, '0')],\n\t['s', (time) => String(time.getSeconds())],\n\t['ss', (time) => String(time.getSeconds()).padStart(2, '0')],\n\t['S', (time) => String(time.getMilliseconds())],\n\t['SS', (time) => String(time.getMilliseconds()).padStart(2, '0')],\n\t['SSS', (time) => String(time.getMilliseconds()).padStart(3, '0')],\n\t['T', (time) => `${String(time.getHours() % 12 || 12)}:${String(time.getMinutes()).padStart(2, '0')} ${time.getHours() < 12 ? 'AM' : 'PM'}`],\n\t[\n\t\t't',\n\t\t(time) =>\n\t\t\t`${String(time.getHours() % 12 || 12)}:${String(time.getMinutes()).padStart(2, '0')}:${String(time.getSeconds()).padStart(2, '0')} ${\n\t\t\t\ttime.getHours() < 12 ? 'am' : 'pm'\n\t\t\t}`\n\t],\n\t['L', (time) => `${String(time.getMonth() + 1).padStart(2, '0')}/${String(time.getDate()).padStart(2, '0')}/${String(time.getFullYear())}`],\n\t['l', (time) => `${String(time.getMonth() + 1)}/${String(time.getDate()).padStart(2, '0')}/${String(time.getFullYear())}`],\n\t['LL', (time) => `${months[time.getMonth()]} ${String(time.getDate()).padStart(2, '0')}, ${String(time.getFullYear())}`],\n\t['ll', (time) => `${months[time.getMonth()].slice(0, 3)} ${String(time.getDate()).padStart(2, '0')}, ${String(time.getFullYear())}`],\n\t[\n\t\t'LLL',\n\t\t(time) =>\n\t\t\t`${months[time.getMonth()]} ${String(time.getDate()).padStart(2, '0')}, ${String(time.getFullYear())} ${String(\n\t\t\t\ttime.getHours() % 12 || 12\n\t\t\t)}:${String(time.getMinutes()).padStart(2, '0')} ${time.getHours() < 12 ? 'AM' : 'PM'}`\n\t],\n\t[\n\t\t'lll',\n\t\t(time) =>\n\t\t\t`${months[time.getMonth()].slice(0, 3)} ${String(time.getDate()).padStart(2, '0')}, ${String(time.getFullYear())} ${String(\n\t\t\t\ttime.getHours() % 12 || 12\n\t\t\t)}:${String(time.getMinutes()).padStart(2, '0')} ${time.getHours() < 12 ? 'AM' : 'PM'}`\n\t],\n\t[\n\t\t'LLLL',\n\t\t(time) =>\n\t\t\t`${days[time.getDay()]}, ${months[time.getMonth()]} ${String(time.getDate()).padStart(2, '0')}, ${String(time.getFullYear())} ${String(\n\t\t\t\ttime.getHours() % 12 || 12\n\t\t\t)}:${String(time.getMinutes()).padStart(2, '0')} ${time.getHours() < 12 ? 'AM' : 'PM'}`\n\t],\n\t[\n\t\t'llll',\n\t\t(time) =>\n\t\t\t`${days[time.getDay()].slice(0, 3)} ${months[time.getMonth()].slice(0, 3)} ${String(time.getDate()).padStart(2, '0')}, ${String(\n\t\t\t\ttime.getFullYear()\n\t\t\t)} ${String(time.getHours() % 12 || 12)}:${String(time.getMinutes()).padStart(2, '0')} ${time.getHours() < 12 ? 'AM' : 'PM'}`\n\t],\n\t[\n\t\t'Z',\n\t\t(time) => {\n\t\t\tconst offset = time.getTimezoneOffset();\n\t\t\tconst unsigned = offset >= 0;\n\t\t\tconst absolute = Math.abs(offset);\n\t\t\t/* istanbul ignore next: whether it's signed or unsigned, depends on where the machine is, I cannot control this. */\n\t\t\treturn `${unsigned ? '+' : '-'}${String(Math.floor(absolute / 60)).padStart(2, '0')}:${String(absolute % 60).padStart(2, '0')}`;\n\t\t}\n\t],\n\t[\n\t\t'ZZ',\n\t\t(time) => {\n\t\t\tconst offset = time.getTimezoneOffset();\n\t\t\tconst unsigned = offset >= 0;\n\t\t\tconst absolute = Math.abs(offset);\n\t\t\t/* istanbul ignore next: whether it's signed or unsigned, depends on where the machine is, I cannot control this. */\n\t\t\treturn `${unsigned ? '+' : '-'}${String(Math.floor(absolute / 60)).padStart(2, '0')}:${String(absolute % 60).padStart(2, '0')}`;\n\t\t}\n\t]\n]);\n/* eslint-enable max-len */\n\nexport type TimeResolvable = Date | number | string;\n\nexport interface TimestampTemplateEntry {\n\ttype: string;\n\tcontent: string | null;\n}\n\n/**\n * Timestamp class, parses the pattern once, displays the desired Date or UNIX timestamp with the selected pattern.\n */\nexport class Timestamp {\n\t/**\n\t * The raw pattern\n\t * @since 1.0.0\n\t */\n\tpublic pattern: string;\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tprivate template: TimestampTemplateEntry[];\n\n\t/**\n\t * Starts a new Timestamp and parses the pattern.\n\t * @since 1.0.0\n\t * @param pattern The pattern to parse\n\t */\n\tpublic constructor(pattern: string) {\n\t\tthis.pattern = pattern;\n\t\tthis.template = Timestamp.parse(pattern);\n\t}\n\n\t/**\n\t * Display the current date with the current pattern.\n\t * @since 1.0.0\n\t * @param time The time to display\n\t */\n\tpublic display(time: TimeResolvable = new Date()): string {\n\t\treturn Timestamp.display(this.template, time);\n\t}\n\n\t/**\n\t * Display the current date utc with the current pattern.\n\t * @since 1.0.0\n\t * @param time The time to display in utc\n\t */\n\tpublic displayUTC(time?: TimeResolvable): string {\n\t\treturn Timestamp.display(this.template, Timestamp.utc(time));\n\t}\n\n\t/**\n\t * Edits the current pattern.\n\t * @since 1.0.0\n\t * @param pattern The new pattern for this instance\n\t * @chainable\n\t */\n\tpublic edit(pattern: string): this {\n\t\tthis.pattern = pattern;\n\t\tthis.template = Timestamp.parse(pattern);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Defines the toString behavior of Timestamp.\n\t */\n\tpublic toString(): string {\n\t\treturn this.display();\n\t}\n\n\t/**\n\t * Display the current date with the current pattern.\n\t * @since 1.0.0\n\t * @param pattern The pattern to parse\n\t * @param time The time to display\n\t */\n\tpublic static displayArbitrary(pattern: string, time: TimeResolvable = new Date()): string {\n\t\treturn Timestamp.display(Timestamp.parse(pattern), time);\n\t}\n\n\t/**\n\t * Display the current date utc with the current pattern.\n\t * @since 1.0.0\n\t * @param pattern The pattern to parse\n\t * @param time The time to display\n\t */\n\tpublic static displayUTCArbitrary(pattern: string, time: TimeResolvable = new Date()): string {\n\t\treturn Timestamp.display(Timestamp.parse(pattern), Timestamp.utc(time));\n\t}\n\n\t/**\n\t * Creates a UTC Date object to work with.\n\t * @since 1.0.0\n\t * @param time The date to convert to utc\n\t */\n\tpublic static utc(time: Date | number | string = new Date()): Date {\n\t\ttime = Timestamp.resolveDate(time);\n\t\treturn new Date(time.valueOf() + time.getTimezoneOffset() * 60000);\n\t}\n\n\t/**\n\t * Display the current date with the current pattern.\n\t * @since 1.0.0\n\t * @param template The pattern to parse\n\t * @param time The time to display\n\t */\n\tprivate static display(template: TimestampTemplateEntry[], time: Date | number | string): string {\n\t\tlet output = '';\n\t\tconst parsedTime = Timestamp.resolveDate(time);\n\t\tfor (const { content, type } of template) output += content || tokenResolvers.get(type)!(parsedTime);\n\t\treturn output;\n\t}\n\n\t/**\n\t * Parses the pattern.\n\t * @since 1.0.0\n\t * @param pattern The pattern to parse\n\t */\n\tprivate static parse(pattern: string): TimestampTemplateEntry[] {\n\t\tconst template: TimestampTemplateEntry[] = [];\n\t\tfor (let i = 0; i < pattern.length; i++) {\n\t\t\tlet current = '';\n\t\t\tconst currentChar = pattern[i];\n\t\t\tconst tokenMax = tokens.get(currentChar);\n\t\t\tif (typeof tokenMax === 'number') {\n\t\t\t\tcurrent += currentChar;\n\t\t\t\twhile (pattern[i + 1] === currentChar && current.length < tokenMax) current += pattern[++i];\n\t\t\t\ttemplate.push({ type: current, content: null });\n\t\t\t} else if (currentChar === '[') {\n\t\t\t\twhile (i + 1 < pattern.length && pattern[i + 1] !== ']') current += pattern[++i];\n\t\t\t\ti++;\n\t\t\t\ttemplate.push({ type: 'literal', content: current || '[' });\n\t\t\t} else {\n\t\t\t\tcurrent += currentChar;\n\t\t\t\twhile (i + 1 < pattern.length && !tokens.has(pattern[i + 1]) && pattern[i + 1] !== '[') current += pattern[++i];\n\t\t\t\ttemplate.push({ type: 'literal', content: current });\n\t\t\t}\n\t\t}\n\n\t\treturn template;\n\t}\n\n\t/**\n\t * Resolves a date.\n\t * @since 1.0.0\n\t * @param time The time to parse\n\t */\n\tprivate static resolveDate(time: TimeResolvable): Date {\n\t\treturn time instanceof Date ? time : new Date(time);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../utilities/dist/esm/chunk-PAWJFY3S.mjs","../../../utilities/src/lib/range.ts","../../../cron/src/lib/constants.ts","../../../cron/src/lib/Cron.ts","../../../duration/src/lib/constants.ts","../../../duration/src/lib/Duration.ts","../../../duration/src/lib/DurationFormatter.ts","../../../timer-manager/src/lib/TimerManager.ts","../../../timestamp/src/lib/constants.ts","../../../timestamp/src/lib/Timestamp.ts"],"names":["__defProp","__name","Time","TimeTypes","_a","__publicField","tokens"],"mappings":"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","file":"index.global.js","sourcesContent":["var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\nexport { __name };\n//# sourceMappingURL=chunk-PAWJFY3S.mjs.map\n//# sourceMappingURL=chunk-PAWJFY3S.mjs.map","/**\n * Get an array of numbers with the selected range\n * @param min The minimum value\n * @param max The maximum value\n * @param step The step value\n */\nexport function range(min: number, max: number, step: number): number[] {\n\treturn new Array(Math.floor((max - min) / step) + 1).fill(0).map((_val, i) => min + i * step);\n}\n","export enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\nexport const partRegex = /^(?:(\\*)|(\\d+)(?:-(\\d+))?)(?:\\/(\\d+))?$/;\n\nexport const wildcardRegex = /\\bh\\b|\\B\\?\\B/g;\n\nexport const allowedNum = [\n\t[0, 59],\n\t[0, 23],\n\t[1, 31],\n\t[1, 12],\n\t[0, 6]\n];\n\nexport const predefined = {\n\t'@annually': '0 0 1 1 *',\n\t'@yearly': '0 0 1 1 *',\n\t'@monthly': '0 0 1 * *',\n\t'@weekly': '0 0 * * 0',\n\t'@daily': '0 0 * * *',\n\t'@hourly': '0 * * * *'\n} as const;\n\nexport const cronTokens = {\n\tjan: 1,\n\tfeb: 2,\n\tmar: 3,\n\tapr: 4,\n\tmay: 5,\n\tjun: 6,\n\tjul: 7,\n\taug: 8,\n\tsep: 9,\n\toct: 10,\n\tnov: 11,\n\tdec: 12,\n\tsun: 0,\n\tmon: 1,\n\ttue: 2,\n\twed: 3,\n\tthu: 4,\n\tfri: 5,\n\tsat: 6\n} as const;\n\nexport const tokensRegex = new RegExp(Object.keys(cronTokens).join('|'), 'g');\n","import { range } from '@sapphire/utilities';\nimport { allowedNum, cronTokens, partRegex, predefined, Time, tokensRegex, wildcardRegex } from './constants';\n\n/**\n * Handles Cron strings and generates dates based on the cron string provided.\n * @see https://en.wikipedia.org/wiki/Cron\n */\nexport class Cron {\n\tpublic cron: string;\n\tpublic normalized: string;\n\tpublic minutes: number[];\n\tpublic hours: number[];\n\tpublic days: number[];\n\tpublic months: number[];\n\tpublic dows: number[];\n\n\t/**\n\t * @param cron The cron pattern to use\n\t */\n\tpublic constructor(cron: string) {\n\t\tthis.cron = cron.toLowerCase();\n\t\tthis.normalized = Cron.normalize(this.cron);\n\t\t[this.minutes, this.hours, this.days, this.months, this.dows] = Cron.parseString(this.normalized);\n\t}\n\n\t/**\n\t * Get the next date that matches with the current pattern\n\t * @param outset The Date instance to compare with\n\t * @param origin Whether this next call is origin\n\t */\n\tpublic next(outset: Date = new Date(), origin = true): Date {\n\t\tif (!this.days.includes(outset.getUTCDate()) || !this.months.includes(outset.getUTCMonth() + 1) || !this.dows.includes(outset.getUTCDay())) {\n\t\t\treturn this.next(new Date(outset.getTime() + Time.Day), false);\n\t\t}\n\t\tif (!origin) return new Date(Date.UTC(outset.getUTCFullYear(), outset.getUTCMonth(), outset.getUTCDate(), this.hours[0], this.minutes[0]));\n\n\t\tconst now = new Date(outset.getTime() + 60000);\n\n\t\tfor (const hour of this.hours) {\n\t\t\tif (hour < now.getUTCHours()) continue;\n\t\t\tfor (const minute of this.minutes) {\n\t\t\t\tif (hour === now.getUTCHours() && minute < now.getUTCMinutes()) continue;\n\t\t\t\treturn new Date(Date.UTC(outset.getUTCFullYear(), outset.getUTCMonth(), outset.getUTCDate(), hour, minute));\n\t\t\t}\n\t\t}\n\n\t\treturn this.next(new Date(outset.getTime() + Time.Day), false);\n\t}\n\n\t/**\n\t * Returns the string that represents this cron pattern\n\t *\n\t * @returns The string that represents this cron pattern\n\t */\n\tpublic toString() {\n\t\treturn this.cron;\n\t}\n\n\t/**\n\t * Normalize the pattern\n\t * @param cron The pattern to normalize\n\t */\n\tprivate static normalize(cron: string): string {\n\t\tif (Reflect.has(predefined, cron)) return Reflect.get(predefined, cron);\n\t\tconst now = new Date();\n\t\tcron = cron\n\t\t\t.split(' ')\n\t\t\t.map((val, i) =>\n\t\t\t\tval.replace(wildcardRegex, (match) => {\n\t\t\t\t\tif (match === 'h') return (Math.floor(Math.random() * allowedNum[i][1]) + allowedNum[i][0]).toString();\n\n\t\t\t\t\tif (match === '?') {\n\t\t\t\t\t\tswitch (i) {\n\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\treturn now.getUTCMinutes().toString();\n\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\treturn now.getUTCHours().toString();\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\treturn now.getUTCDate().toString();\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\treturn now.getUTCMonth().toString();\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\treturn now.getUTCDay().toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t})\n\t\t\t)\n\t\t\t.join(' ');\n\t\treturn cron.replace(tokensRegex, (match) => String(Reflect.get(cronTokens, match)));\n\t}\n\n\t/**\n\t * Parse the pattern\n\t * @param cron The pattern to parse\n\t */\n\tprivate static parseString(cron: string): Array<number[]> {\n\t\tconst parts = cron.split(' ');\n\t\tif (parts.length !== 5) throw new Error('Invalid Cron Provided');\n\t\treturn parts.map((part, i) => Cron.parsePart(part, i));\n\t}\n\n\t/**\n\t * Parse the current part\n\t * @param cronPart The part of the pattern to parse\n\t * @param id The id that identifies the current part\n\t */\n\tprivate static parsePart(cronPart: string, id: number): number[] {\n\t\tif (cronPart.includes(',')) {\n\t\t\tconst res: number[] = [];\n\t\t\tfor (const part of cronPart.split(',')) res.push(...Cron.parsePart(part, id));\n\t\t\treturn [...new Set(res)].sort((a, b) => a - b);\n\t\t}\n\n\t\tconst [, wild, minStr, maxStr, step] = partRegex.exec(cronPart)!;\n\t\tlet [min, max] = [parseInt(minStr, 10), parseInt(maxStr, 10)];\n\n\t\t// If '*', set min and max as the minimum and maximum allowed numbers:\n\t\tif (wild) [min, max] = allowedNum[id];\n\t\t// Else if a number was given, but not a maximum nor a step, return it\n\t\t// as only allowed value:\n\t\telse if (!max && !step) return [min];\n\n\t\t// Set min and max as the given numbers, defaulting max to the maximum\n\t\t// allowed, so min is never bigger than max:\n\t\t// This makes min and max be, in the following cases (considering minutes):\n\t\t// -> 1-2 | 1..2\n\t\t// -> 2-1 | 1..2\n\t\t// -> 1/7 | 1, 8, 15, 22, 29, 36, 43, 50, 57\n\t\t[min, max] = [min, max || allowedNum[id][1]].sort((a, b) => a - b);\n\n\t\t// Generate a range\n\t\treturn range(min, max, parseInt(step, 10) || 1);\n\t}\n}\n","import type { DurationFormatAssetsTime, DurationFormatSeparators } from './DurationFormatter';\n\nexport enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\n/**\n * The supported time types\n */\nexport enum TimeTypes {\n\tSecond = 'second',\n\tMinute = 'minute',\n\tHour = 'hour',\n\tDay = 'day',\n\tWeek = 'week',\n\tMonth = 'month',\n\tYear = 'year'\n}\n\nexport const DEFAULT_UNITS: DurationFormatAssetsTime = {\n\t[TimeTypes.Year]: {\n\t\t1: 'year',\n\t\tDEFAULT: 'years'\n\t},\n\t[TimeTypes.Month]: {\n\t\t1: 'month',\n\t\tDEFAULT: 'months'\n\t},\n\t[TimeTypes.Week]: {\n\t\t1: 'week',\n\t\tDEFAULT: 'weeks'\n\t},\n\t[TimeTypes.Day]: {\n\t\t1: 'day',\n\t\tDEFAULT: 'days'\n\t},\n\t[TimeTypes.Hour]: {\n\t\t1: 'hour',\n\t\tDEFAULT: 'hours'\n\t},\n\t[TimeTypes.Minute]: {\n\t\t1: 'minute',\n\t\tDEFAULT: 'minutes'\n\t},\n\t[TimeTypes.Second]: {\n\t\t1: 'second',\n\t\tDEFAULT: 'seconds'\n\t}\n};\n\nexport const DEFAULT_SEPARATORS: DurationFormatSeparators = {\n\tleft: ' ',\n\tright: ' '\n};\n","import { Time } from './constants';\n\nconst tokens = new Map([\n\t['nanosecond', Time.Nanosecond],\n\t['nanoseconds', Time.Nanosecond],\n\t['ns', Time.Nanosecond],\n\n\t['microsecond', Time.Microsecond],\n\t['microseconds', Time.Microsecond],\n\t['μs', Time.Microsecond],\n\t['us', Time.Microsecond],\n\n\t['millisecond', Time.Millisecond],\n\t['milliseconds', Time.Millisecond],\n\t['ms', Time.Millisecond],\n\n\t['second', Time.Second],\n\t['seconds', Time.Second],\n\t['sec', Time.Second],\n\t['secs', Time.Second],\n\t['s', Time.Second],\n\n\t['minute', Time.Minute],\n\t['minutes', Time.Minute],\n\t['min', Time.Minute],\n\t['mins', Time.Minute],\n\t['m', Time.Minute],\n\n\t['hour', Time.Hour],\n\t['hours', Time.Hour],\n\t['hr', Time.Hour],\n\t['hrs', Time.Hour],\n\t['h', Time.Hour],\n\n\t['day', Time.Day],\n\t['days', Time.Day],\n\t['d', Time.Day],\n\n\t['week', Time.Week],\n\t['weeks', Time.Week],\n\t['wk', Time.Week],\n\t['wks', Time.Week],\n\t['w', Time.Week],\n\n\t['month', Time.Month],\n\t['months', Time.Month],\n\t['b', Time.Month],\n\t['mo', Time.Month],\n\n\t['year', Time.Year],\n\t['years', Time.Year],\n\t['yr', Time.Year],\n\t['yrs', Time.Year],\n\t['y', Time.Year]\n]);\n\nconst mappings = new Map([\n\t[Time.Nanosecond, 'nanoseconds'],\n\t[Time.Microsecond, 'microseconds'],\n\t[Time.Millisecond, 'milliseconds'],\n\t[Time.Second, 'seconds'],\n\t[Time.Minute, 'minutes'],\n\t[Time.Hour, 'hours'],\n\t[Time.Day, 'days'],\n\t[Time.Week, 'weeks'],\n\t[Time.Month, 'months'],\n\t[Time.Year, 'years']\n] as const);\n\n/**\n * Converts duration strings into ms and future dates\n */\nexport class Duration {\n\t/**\n\t * The offset\n\t */\n\tpublic offset: number;\n\n\t/**\n\t * The amount of nanoseconds extracted from the text.\n\t */\n\tpublic nanoseconds = 0;\n\n\t/**\n\t * The amount of microseconds extracted from the text.\n\t */\n\tpublic microseconds = 0;\n\n\t/**\n\t * The amount of milliseconds extracted from the text.\n\t */\n\tpublic milliseconds = 0;\n\n\t/**\n\t * The amount of seconds extracted from the text.\n\t */\n\tpublic seconds = 0;\n\n\t/**\n\t * The amount of minutes extracted from the text.\n\t */\n\tpublic minutes = 0;\n\n\t/**\n\t * The amount of hours extracted from the text.\n\t */\n\tpublic hours = 0;\n\n\t/**\n\t * The amount of days extracted from the text.\n\t */\n\tpublic days = 0;\n\n\t/**\n\t * The amount of weeks extracted from the text.\n\t */\n\tpublic weeks = 0;\n\n\t/**\n\t * The amount of months extracted from the text.\n\t */\n\tpublic months = 0;\n\n\t/**\n\t * The amount of years extracted from the text.\n\t */\n\tpublic years = 0;\n\n\t/**\n\t * Create a new Duration instance\n\t * @param pattern The string to parse\n\t */\n\tpublic constructor(pattern: string) {\n\t\tlet result = 0;\n\t\tlet valid = false;\n\n\t\tpattern\n\t\t\t.toLowerCase()\n\t\t\t// ignore commas\n\t\t\t.replace(Duration.commaRegex, '')\n\t\t\t// a / an = 1\n\t\t\t.replace(Duration.aAndAnRegex, '1')\n\t\t\t// do math\n\t\t\t.replace(Duration.patternRegex, (_, i, units) => {\n\t\t\t\tconst token = tokens.get(units);\n\t\t\t\tif (token !== undefined) {\n\t\t\t\t\tconst n = Number(i);\n\t\t\t\t\tresult += n * token;\n\t\t\t\t\tthis[mappings.get(token)!] += n;\n\t\t\t\t\tvalid = true;\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t});\n\n\t\tthis.offset = valid ? result : NaN;\n\t}\n\n\t/**\n\t * Get the date from now\n\t */\n\tpublic get fromNow(): Date {\n\t\treturn this.dateFrom(new Date());\n\t}\n\n\t/**\n\t * Get the date from\n\t * @param date The Date instance to get the date from\n\t */\n\tpublic dateFrom(date: Date): Date {\n\t\treturn new Date(date.getTime() + this.offset);\n\t}\n\n\t/**\n\t * The RegExp used for the pattern parsing\n\t */\n\tprivate static readonly patternRegex = /(-?\\d*\\.?\\d+(?:e[-+]?\\d+)?)\\s*([a-zμ]*)/gi;\n\n\t/**\n\t * The RegExp used for removing commas\n\t */\n\tprivate static readonly commaRegex = /,/g;\n\n\t/**\n\t * The RegExp used for replacing a/an with 1\n\t */\n\tprivate static readonly aAndAnRegex = /\\ban?\\b/gi;\n}\n","import { DEFAULT_SEPARATORS, DEFAULT_UNITS, TimeTypes } from './constants';\n\n/**\n * The duration of each time type in milliseconds\n */\nconst kTimeDurations: readonly [TimeTypes, number][] = [\n\t[TimeTypes.Year, 31536000000],\n\t// 29.53059 days is the official duration of a month: https://en.wikipedia.org/wiki/Month\n\t[TimeTypes.Month, 2628000000],\n\t[TimeTypes.Week, 1000 * 60 * 60 * 24 * 7],\n\t[TimeTypes.Day, 1000 * 60 * 60 * 24],\n\t[TimeTypes.Hour, 1000 * 60 * 60],\n\t[TimeTypes.Minute, 1000 * 60],\n\t[TimeTypes.Second, 1000]\n];\n\n/**\n * Display the duration\n * @param duration The duration in milliseconds to parse and display\n * @param assets The language assets\n */\nexport class DurationFormatter {\n\tpublic constructor(public units: DurationFormatAssetsTime = DEFAULT_UNITS) {}\n\n\tpublic format(\n\t\tduration: number,\n\t\tprecision = 7,\n\t\t{\n\t\t\tleft: leftSeparator = DEFAULT_SEPARATORS.left,\n\t\t\tright: rightSeparator = DEFAULT_SEPARATORS.right\n\t\t}: DurationFormatSeparators = DEFAULT_SEPARATORS\n\t) {\n\t\tconst output: string[] = [];\n\t\tconst negative = duration < 0;\n\t\tif (negative) duration *= -1;\n\n\t\tfor (const [type, timeDuration] of kTimeDurations) {\n\t\t\tconst division = duration / timeDuration;\n\t\t\tif (division < 1) continue;\n\n\t\t\tconst floored = Math.floor(division);\n\t\t\tduration -= floored * timeDuration;\n\t\t\toutput.push(addUnit(floored, this.units[type], leftSeparator!));\n\n\t\t\t// If the output has enough precision, break\n\t\t\tif (output.length >= precision) break;\n\t\t}\n\n\t\treturn `${negative ? '-' : ''}${output.join(rightSeparator) || addUnit(0, this.units.second, leftSeparator!)}`;\n\t}\n}\n\n/**\n * Adds an unit, if non zero\n * @param time The duration of said unit\n * @param unit The unit language assets\n */\nfunction addUnit(time: number, unit: DurationFormatAssetsUnit, separator: string) {\n\tif (Reflect.has(unit, time)) return `${time}${separator}${Reflect.get(unit, time)}`;\n\treturn `${time}${separator}${unit.DEFAULT}`;\n}\n\nexport interface DurationFormatSeparators {\n\tleft?: string;\n\tright?: string;\n}\n\nexport interface DurationFormatAssetsUnit extends Record<number, string> {\n\tDEFAULT: string;\n}\n\nexport interface DurationFormatAssetsTime {\n\t[TimeTypes.Second]: DurationFormatAssetsUnit;\n\t[TimeTypes.Minute]: DurationFormatAssetsUnit;\n\t[TimeTypes.Hour]: DurationFormatAssetsUnit;\n\t[TimeTypes.Day]: DurationFormatAssetsUnit;\n\t[TimeTypes.Week]: DurationFormatAssetsUnit;\n\t[TimeTypes.Month]: DurationFormatAssetsUnit;\n\t[TimeTypes.Year]: DurationFormatAssetsUnit;\n}\n","/**\n * Manages timers so that this application can be cleanly exited\n */\nexport class TimerManager extends null {\n\t/**\n\t * A set of timeouts to clear on destroy\n\t */\n\tprivate static storedTimeouts = new Set<NodeJS.Timeout>();\n\n\t/**\n\t * A set of intervals to clear on destroy\n\t */\n\tprivate static storedIntervals = new Set<NodeJS.Timeout>();\n\n\t/**\n\t * Creates a timeout gets cleared when destroyed\n\t * @param fn callback function\n\t * @param delay amount of time before running the callback\n\t * @param args additional arguments to pass back to the callback\n\t */\n\tpublic static setTimeout<A = unknown>(fn: (...args: A[]) => void, delay: number, ...args: A[]): NodeJS.Timeout {\n\t\tconst timeout = setTimeout(() => {\n\t\t\tthis.storedTimeouts.delete(timeout);\n\t\t\tfn(...args);\n\t\t}, delay);\n\t\tthis.storedTimeouts.add(timeout);\n\t\treturn timeout;\n\t}\n\n\t/**\n\t * Clears a timeout created through this class\n\t * @param timeout The timeout to clear\n\t */\n\tpublic static clearTimeout(timeout: NodeJS.Timeout): void {\n\t\tclearTimeout(timeout);\n\t\tthis.storedTimeouts.delete(timeout);\n\t}\n\n\t/**\n\t * Creates an interval gets cleared when destroyed\n\t * @param fn callback function\n\t * @param delay amount of time before running the callback\n\t * @param args additional arguments to pass back to the callback\n\t */\n\tpublic static setInterval<A = unknown>(fn: (...args: A[]) => void, delay: number, ...args: A[]): NodeJS.Timeout {\n\t\tconst interval = setInterval(fn, delay, ...args);\n\t\tthis.storedIntervals.add(interval);\n\t\treturn interval;\n\t}\n\n\t/**\n\t * Clears an internal created through this class\n\t * @param interval The interval to clear\n\t */\n\tpublic static clearInterval(interval: NodeJS.Timeout): void {\n\t\tclearInterval(interval);\n\t\tthis.storedIntervals.delete(interval);\n\t}\n\n\t/**\n\t * Clears running timeouts and intervals created through this class so NodeJS can gracefully exit\n\t */\n\tpublic static destroy(): void {\n\t\tfor (const i of this.storedTimeouts) clearTimeout(i);\n\t\tfor (const i of this.storedIntervals) clearInterval(i);\n\t\tthis.storedTimeouts.clear();\n\t\tthis.storedIntervals.clear();\n\t}\n}\n","export enum Time {\n\tNanosecond = 1 / 1_000_000,\n\tMicrosecond = 1 / 1000,\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = Second * 60,\n\tHour = Minute * 60,\n\tDay = Hour * 24,\n\tWeek = Day * 7,\n\tMonth = Day * (365 / 12),\n\tYear = Day * 365\n}\n\nexport const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\nexport const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\nexport const tokens = new Map<string, number>([\n\t['Y', 4],\n\t['Q', 1],\n\t['M', 4],\n\t['D', 4],\n\t['d', 4],\n\t['X', 1],\n\t['x', 1],\n\t['H', 2],\n\t['h', 2],\n\t['a', 1],\n\t['A', 1],\n\t['m', 2],\n\t['s', 2],\n\t['S', 3],\n\t['Z', 2],\n\t['l', 4],\n\t['L', 4],\n\t['T', 1],\n\t['t', 1]\n]);\n","import { days, months, Time, tokens } from './constants';\n\ninterface TokenResolver {\n\t(time: Date): string;\n}\n\nconst tokenResolvers = new Map<string, TokenResolver>([\n\t// Dates\n\t['Y', (time) => String(time.getFullYear()).slice(2)],\n\t['YY', (time) => String(time.getFullYear()).slice(2)],\n\t['YYY', (time) => String(time.getFullYear())],\n\t['YYYY', (time) => String(time.getFullYear())],\n\t['Q', (time) => String((time.getMonth() + 1) / 3)],\n\t['M', (time) => String(time.getMonth() + 1)],\n\t['MM', (time) => String(time.getMonth() + 1).padStart(2, '0')],\n\t['MMM', (time) => months[time.getMonth()]],\n\t['MMMM', (time) => months[time.getMonth()]],\n\t['D', (time) => String(time.getDate())],\n\t['DD', (time) => String(time.getDate()).padStart(2, '0')],\n\t['DDD', (time) => String(Math.floor((time.getTime() - new Date(time.getFullYear(), 0, 0).getTime()) / Time.Day))],\n\t['DDDD', (time) => String(Math.floor((time.getTime() - new Date(time.getFullYear(), 0, 0).getTime()) / Time.Day))],\n\t[\n\t\t'd',\n\t\t(time) => {\n\t\t\tconst day = String(time.getDate());\n\t\t\tif (day !== '11' && day.endsWith('1')) return `${day}st`;\n\t\t\tif (day !== '12' && day.endsWith('2')) return `${day}nd`;\n\t\t\tif (day !== '13' && day.endsWith('3')) return `${day}rd`;\n\t\t\treturn `${day}th`;\n\t\t}\n\t],\n\t['dd', (time) => days[time.getDay()].slice(0, 2)],\n\t['ddd', (time) => days[time.getDay()].slice(0, 3)],\n\t['dddd', (time) => days[time.getDay()]],\n\t['X', (time) => String(time.valueOf() / Time.Second)],\n\t['x', (time) => String(time.valueOf())],\n\n\t// Locales\n\t['H', (time) => String(time.getHours())],\n\t['HH', (time) => String(time.getHours()).padStart(2, '0')],\n\t['h', (time) => String(time.getHours() % 12 || 12)],\n\t['hh', (time) => String(time.getHours() % 12 || 12).padStart(2, '0')],\n\t['a', (time) => (time.getHours() < 12 ? 'am' : 'pm')],\n\t['A', (time) => (time.getHours() < 12 ? 'AM' : 'PM')],\n\t['m', (time) => String(time.getMinutes())],\n\t['mm', (time) => String(time.getMinutes()).padStart(2, '0')],\n\t['s', (time) => String(time.getSeconds())],\n\t['ss', (time) => String(time.getSeconds()).padStart(2, '0')],\n\t['S', (time) => String(time.getMilliseconds())],\n\t['SS', (time) => String(time.getMilliseconds()).padStart(2, '0')],\n\t['SSS', (time) => String(time.getMilliseconds()).padStart(3, '0')],\n\t['T', (time) => `${String(time.getHours() % 12 || 12)}:${String(time.getMinutes()).padStart(2, '0')} ${time.getHours() < 12 ? 'AM' : 'PM'}`],\n\t[\n\t\t't',\n\t\t(time) =>\n\t\t\t`${String(time.getHours() % 12 || 12)}:${String(time.getMinutes()).padStart(2, '0')}:${String(time.getSeconds()).padStart(2, '0')} ${\n\t\t\t\ttime.getHours() < 12 ? 'am' : 'pm'\n\t\t\t}`\n\t],\n\t['L', (time) => `${String(time.getMonth() + 1).padStart(2, '0')}/${String(time.getDate()).padStart(2, '0')}/${String(time.getFullYear())}`],\n\t['l', (time) => `${String(time.getMonth() + 1)}/${String(time.getDate()).padStart(2, '0')}/${String(time.getFullYear())}`],\n\t['LL', (time) => `${months[time.getMonth()]} ${String(time.getDate()).padStart(2, '0')}, ${String(time.getFullYear())}`],\n\t['ll', (time) => `${months[time.getMonth()].slice(0, 3)} ${String(time.getDate()).padStart(2, '0')}, ${String(time.getFullYear())}`],\n\t[\n\t\t'LLL',\n\t\t(time) =>\n\t\t\t`${months[time.getMonth()]} ${String(time.getDate()).padStart(2, '0')}, ${String(time.getFullYear())} ${String(\n\t\t\t\ttime.getHours() % 12 || 12\n\t\t\t)}:${String(time.getMinutes()).padStart(2, '0')} ${time.getHours() < 12 ? 'AM' : 'PM'}`\n\t],\n\t[\n\t\t'lll',\n\t\t(time) =>\n\t\t\t`${months[time.getMonth()].slice(0, 3)} ${String(time.getDate()).padStart(2, '0')}, ${String(time.getFullYear())} ${String(\n\t\t\t\ttime.getHours() % 12 || 12\n\t\t\t)}:${String(time.getMinutes()).padStart(2, '0')} ${time.getHours() < 12 ? 'AM' : 'PM'}`\n\t],\n\t[\n\t\t'LLLL',\n\t\t(time) =>\n\t\t\t`${days[time.getDay()]}, ${months[time.getMonth()]} ${String(time.getDate()).padStart(2, '0')}, ${String(time.getFullYear())} ${String(\n\t\t\t\ttime.getHours() % 12 || 12\n\t\t\t)}:${String(time.getMinutes()).padStart(2, '0')} ${time.getHours() < 12 ? 'AM' : 'PM'}`\n\t],\n\t[\n\t\t'llll',\n\t\t(time) =>\n\t\t\t`${days[time.getDay()].slice(0, 3)} ${months[time.getMonth()].slice(0, 3)} ${String(time.getDate()).padStart(2, '0')}, ${String(\n\t\t\t\ttime.getFullYear()\n\t\t\t)} ${String(time.getHours() % 12 || 12)}:${String(time.getMinutes()).padStart(2, '0')} ${time.getHours() < 12 ? 'AM' : 'PM'}`\n\t],\n\t[\n\t\t'Z',\n\t\t(time) => {\n\t\t\tconst offset = time.getTimezoneOffset();\n\t\t\tconst unsigned = offset >= 0;\n\t\t\tconst absolute = Math.abs(offset);\n\t\t\t/* istanbul ignore next: whether it's signed or unsigned, depends on where the machine is, I cannot control this. */\n\t\t\treturn `${unsigned ? '+' : '-'}${String(Math.floor(absolute / 60)).padStart(2, '0')}:${String(absolute % 60).padStart(2, '0')}`;\n\t\t}\n\t],\n\t[\n\t\t'ZZ',\n\t\t(time) => {\n\t\t\tconst offset = time.getTimezoneOffset();\n\t\t\tconst unsigned = offset >= 0;\n\t\t\tconst absolute = Math.abs(offset);\n\t\t\t/* istanbul ignore next: whether it's signed or unsigned, depends on where the machine is, I cannot control this. */\n\t\t\treturn `${unsigned ? '+' : '-'}${String(Math.floor(absolute / 60)).padStart(2, '0')}:${String(absolute % 60).padStart(2, '0')}`;\n\t\t}\n\t]\n]);\n/* eslint-enable max-len */\n\nexport type TimeResolvable = Date | number | string;\n\nexport interface TimestampTemplateEntry {\n\ttype: string;\n\tcontent: string | null;\n}\n\n/**\n * Timestamp class, parses the pattern once, displays the desired Date or UNIX timestamp with the selected pattern.\n */\nexport class Timestamp {\n\t/**\n\t * The raw pattern\n\t * @since 1.0.0\n\t */\n\tpublic pattern: string;\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tprivate template: TimestampTemplateEntry[];\n\n\t/**\n\t * Starts a new Timestamp and parses the pattern.\n\t * @since 1.0.0\n\t * @param pattern The pattern to parse\n\t */\n\tpublic constructor(pattern: string) {\n\t\tthis.pattern = pattern;\n\t\tthis.template = Timestamp.parse(pattern);\n\t}\n\n\t/**\n\t * Display the current date with the current pattern.\n\t * @since 1.0.0\n\t * @param time The time to display\n\t */\n\tpublic display(time: TimeResolvable = new Date()): string {\n\t\treturn Timestamp.display(this.template, time);\n\t}\n\n\t/**\n\t * Display the current date utc with the current pattern.\n\t * @since 1.0.0\n\t * @param time The time to display in utc\n\t */\n\tpublic displayUTC(time?: TimeResolvable): string {\n\t\treturn Timestamp.display(this.template, Timestamp.utc(time));\n\t}\n\n\t/**\n\t * Edits the current pattern.\n\t * @since 1.0.0\n\t * @param pattern The new pattern for this instance\n\t * @chainable\n\t */\n\tpublic edit(pattern: string): this {\n\t\tthis.pattern = pattern;\n\t\tthis.template = Timestamp.parse(pattern);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Defines the toString behavior of Timestamp.\n\t */\n\tpublic toString(): string {\n\t\treturn this.display();\n\t}\n\n\t/**\n\t * Display the current date with the current pattern.\n\t * @since 1.0.0\n\t * @param pattern The pattern to parse\n\t * @param time The time to display\n\t */\n\tpublic static displayArbitrary(pattern: string, time: TimeResolvable = new Date()): string {\n\t\treturn Timestamp.display(Timestamp.parse(pattern), time);\n\t}\n\n\t/**\n\t * Display the current date utc with the current pattern.\n\t * @since 1.0.0\n\t * @param pattern The pattern to parse\n\t * @param time The time to display\n\t */\n\tpublic static displayUTCArbitrary(pattern: string, time: TimeResolvable = new Date()): string {\n\t\treturn Timestamp.display(Timestamp.parse(pattern), Timestamp.utc(time));\n\t}\n\n\t/**\n\t * Creates a UTC Date object to work with.\n\t * @since 1.0.0\n\t * @param time The date to convert to utc\n\t */\n\tpublic static utc(time: Date | number | string = new Date()): Date {\n\t\ttime = Timestamp.resolveDate(time);\n\t\treturn new Date(time.valueOf() + time.getTimezoneOffset() * 60000);\n\t}\n\n\t/**\n\t * Display the current date with the current pattern.\n\t * @since 1.0.0\n\t * @param template The pattern to parse\n\t * @param time The time to display\n\t */\n\tprivate static display(template: TimestampTemplateEntry[], time: Date | number | string): string {\n\t\tlet output = '';\n\t\tconst parsedTime = Timestamp.resolveDate(time);\n\t\tfor (const { content, type } of template) output += content || tokenResolvers.get(type)!(parsedTime);\n\t\treturn output;\n\t}\n\n\t/**\n\t * Parses the pattern.\n\t * @since 1.0.0\n\t * @param pattern The pattern to parse\n\t */\n\tprivate static parse(pattern: string): TimestampTemplateEntry[] {\n\t\tconst template: TimestampTemplateEntry[] = [];\n\t\tfor (let i = 0; i < pattern.length; i++) {\n\t\t\tlet current = '';\n\t\t\tconst currentChar = pattern[i];\n\t\t\tconst tokenMax = tokens.get(currentChar);\n\t\t\tif (typeof tokenMax === 'number') {\n\t\t\t\tcurrent += currentChar;\n\t\t\t\twhile (pattern[i + 1] === currentChar && current.length < tokenMax) current += pattern[++i];\n\t\t\t\ttemplate.push({ type: current, content: null });\n\t\t\t} else if (currentChar === '[') {\n\t\t\t\twhile (i + 1 < pattern.length && pattern[i + 1] !== ']') current += pattern[++i];\n\t\t\t\ti++;\n\t\t\t\ttemplate.push({ type: 'literal', content: current || '[' });\n\t\t\t} else {\n\t\t\t\tcurrent += currentChar;\n\t\t\t\twhile (i + 1 < pattern.length && !tokens.has(pattern[i + 1]) && pattern[i + 1] !== '[') current += pattern[++i];\n\t\t\t\ttemplate.push({ type: 'literal', content: current });\n\t\t\t}\n\t\t}\n\n\t\treturn template;\n\t}\n\n\t/**\n\t * Resolves a date.\n\t * @since 1.0.0\n\t * @param time The time to parse\n\t */\n\tprivate static resolveDate(time: TimeResolvable): Date {\n\t\treturn time instanceof Date ? time : new Date(time);\n\t}\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sapphire/time-utilities",
|
|
3
|
-
"version": "1.7.13-next.
|
|
3
|
+
"version": "1.7.13-next.a6c8ccda",
|
|
4
4
|
"description": "A time utility library for JavaScript.",
|
|
5
5
|
"author": "@sapphire",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"scripts": {
|
|
26
26
|
"lint": "eslint src --ext ts --fix -c ../../.eslintrc",
|
|
27
27
|
"build": "tsup && yarn build:rename-cjs-index",
|
|
28
|
-
"build:rename-cjs-index": "tsx
|
|
28
|
+
"build:rename-cjs-index": "tsx ../../scripts/rename-cjs-index.cts",
|
|
29
29
|
"docs": "typedoc-json-parser",
|
|
30
30
|
"prepack": "yarn build",
|
|
31
31
|
"bump": "cliff-jumper",
|
|
@@ -66,11 +66,11 @@
|
|
|
66
66
|
"@sapphire/timestamp": "^1.0.3"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@favware/cliff-jumper": "^
|
|
70
|
-
"tsup": "^8.0
|
|
71
|
-
"tsx": "^4.
|
|
72
|
-
"typedoc": "^0.25.
|
|
73
|
-
"typedoc-json-parser": "^
|
|
74
|
-
"typescript": "
|
|
69
|
+
"@favware/cliff-jumper": "^5.0.0",
|
|
70
|
+
"tsup": "^8.3.0",
|
|
71
|
+
"tsx": "^4.19.1",
|
|
72
|
+
"typedoc": "^0.25.13",
|
|
73
|
+
"typedoc-json-parser": "^10.0.0",
|
|
74
|
+
"typescript": "~5.4.5"
|
|
75
75
|
}
|
|
76
76
|
}
|