@sapphire/time-utilities 1.8.0-pr-601.2f2c308a.0 → 1.8.0-pr-935.7da5c8bb

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/CHANGELOG.md CHANGED
@@ -2,6 +2,42 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ # [@sapphire/time-utilities@1.7.13](https://github.com/sapphiredev/utilities/compare/@sapphire/time-utilities@1.7.12...@sapphire/time-utilities@1.7.13) - (2024-11-02)
6
+
7
+ ## 🐛 Bug Fixes
8
+
9
+ - Move browser imports ([100ffb0](https://github.com/sapphiredev/utilities/commit/100ffb0a2471bb9f74cc580d282d11059e1a0a68)) ([#826](https://github.com/sapphiredev/utilities/pull/826) by @kyranet)
10
+ - **deps:** Update all non-major dependencies ([083376a](https://github.com/sapphiredev/utilities/commit/083376aac55094dbeddb5194e8a8f0d794b8cceb)) ([#763](https://github.com/sapphiredev/utilities/pull/763) by @renovate[bot])
11
+ - **deps:** Update all non-major dependencies ([e7fdc5d](https://github.com/sapphiredev/utilities/commit/e7fdc5db3632a7f90292ef3978898da32730343a)) ([#752](https://github.com/sapphiredev/utilities/pull/752) by @renovate[bot])
12
+
13
+ ## 📝 Documentation
14
+
15
+ - **readme:** Fix urls to other readmes ([848968e](https://github.com/sapphiredev/utilities/commit/848968e982098accf4242cadd6956150ba15ec62))
16
+ - **readme:** Fix readme table of contents ([c60e8bd](https://github.com/sapphiredev/utilities/commit/c60e8bd9fc89156cf973871597ec3f0ef0308c08))
17
+
18
+ # [@sapphire/time-utilities@1.7.12](https://github.com/sapphiredev/utilities/compare/@sapphire/time-utilities@1.7.12...@sapphire/time-utilities@1.7.12) - (2024-01-19)
19
+
20
+ ## 🐛 Bug Fixes
21
+
22
+ - Fixed commonjs typings export mapping (#707) ([216ff02](https://github.com/sapphiredev/utilities/commit/216ff0260d63a9590357f9a5069f1ae2b34eaf5d))
23
+
24
+ # [@sapphire/time-utilities@1.7.11](https://github.com/sapphiredev/utilities/compare/@sapphire/time-utilities@1.7.11...@sapphire/time-utilities@1.7.11) - (2023-12-04)
25
+
26
+ ## 🐛 Bug Fixes
27
+
28
+ - **time-utilities:** Properly split CJS, ESM and IIFE ([c8b75e0](https://github.com/sapphiredev/utilities/commit/c8b75e0f4bc4df0d165b9e93d2e2b3128a7517a3))
29
+ - Update export mapping for proper ESM/CJS split ([dd0cff8](https://github.com/sapphiredev/utilities/commit/dd0cff8e9b03a15812f25f7a1180501a92422629))
30
+
31
+ # [@sapphire/time-utilities@1.7.10](https://github.com/sapphiredev/utilities/compare/@sapphire/time-utilities@1.7.9...@sapphire/time-utilities@1.7.10) - (2023-07-21)
32
+
33
+ ## 🐛 Bug Fixes
34
+
35
+ - **deps:** Update all non-major dependencies (#577) ([291dd67](https://github.com/sapphiredev/utilities/commit/291dd6783e57d8f075ce566218ba076ef6c4bbbd))
36
+
37
+ ## 🧪 Testing
38
+
39
+ - Update vitest to coverage v8 ([a4bc6e4](https://github.com/sapphiredev/utilities/commit/a4bc6e4f24ea60143a150ecc76fda6484f172ab9))
40
+
5
41
  # [@sapphire/time-utilities@1.7.9](https://github.com/sapphiredev/utilities/compare/@sapphire/time-utilities@1.7.8...@sapphire/time-utilities@1.7.9) - (2023-03-15)
6
42
 
7
43
  ## 🐛 Bug Fixes
package/README.md CHANGED
@@ -7,7 +7,6 @@
7
7
  **Time utilities for JavaScript.**
8
8
 
9
9
  [![GitHub](https://img.shields.io/github/license/sapphiredev/utilities)](https://github.com/sapphiredev/utilities/blob/main/LICENSE.md)
10
- [![codecov](https://codecov.io/gh/sapphiredev/utilities/branch/main/graph/badge.svg?token=OEGIV6RFDO)](https://codecov.io/gh/sapphiredev/utilities)
11
10
  [![npm bundle size](https://img.shields.io/bundlephobia/min/@sapphire/time-utilities?logo=webpack&style=flat-square)](https://bundlephobia.com/result?p=@sapphire/time-utilities)
12
11
  [![npm](https://img.shields.io/npm/v/@sapphire/time-utilities?color=crimson&logo=npm&style=flat-square)](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](#contributors-%E2%9C%A8)
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]: ../cron/#readme
70
- [duration-readme]: ../duration#readme
71
- [timer-manager-readme]: ../timer-manager#readme
72
- [timestamp-readme]: ../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
@@ -7,77 +7,77 @@ var timestamp = require('@sapphire/timestamp');
7
7
 
8
8
 
9
9
 
10
- Object.defineProperty(exports, 'Cron', {
10
+ Object.defineProperty(exports, "Cron", {
11
11
  enumerable: true,
12
12
  get: function () { return cron.Cron; }
13
13
  });
14
- Object.defineProperty(exports, 'allowedNum', {
14
+ Object.defineProperty(exports, "allowedNum", {
15
15
  enumerable: true,
16
16
  get: function () { return cron.allowedNum; }
17
17
  });
18
- Object.defineProperty(exports, 'cronTokens', {
18
+ Object.defineProperty(exports, "cronTokens", {
19
19
  enumerable: true,
20
20
  get: function () { return cron.cronTokens; }
21
21
  });
22
- Object.defineProperty(exports, 'partRegex', {
22
+ Object.defineProperty(exports, "partRegex", {
23
23
  enumerable: true,
24
24
  get: function () { return cron.partRegex; }
25
25
  });
26
- Object.defineProperty(exports, 'predefined', {
26
+ Object.defineProperty(exports, "predefined", {
27
27
  enumerable: true,
28
28
  get: function () { return cron.predefined; }
29
29
  });
30
- Object.defineProperty(exports, 'tokensRegex', {
30
+ Object.defineProperty(exports, "tokensRegex", {
31
31
  enumerable: true,
32
32
  get: function () { return cron.tokensRegex; }
33
33
  });
34
- Object.defineProperty(exports, 'wildcardRegex', {
34
+ Object.defineProperty(exports, "wildcardRegex", {
35
35
  enumerable: true,
36
36
  get: function () { return cron.wildcardRegex; }
37
37
  });
38
- Object.defineProperty(exports, 'DEFAULT_SEPARATORS', {
38
+ Object.defineProperty(exports, "DEFAULT_SEPARATORS", {
39
39
  enumerable: true,
40
40
  get: function () { return duration.DEFAULT_SEPARATORS; }
41
41
  });
42
- Object.defineProperty(exports, 'DEFAULT_UNITS', {
42
+ Object.defineProperty(exports, "DEFAULT_UNITS", {
43
43
  enumerable: true,
44
44
  get: function () { return duration.DEFAULT_UNITS; }
45
45
  });
46
- Object.defineProperty(exports, 'Duration', {
46
+ Object.defineProperty(exports, "Duration", {
47
47
  enumerable: true,
48
48
  get: function () { return duration.Duration; }
49
49
  });
50
- Object.defineProperty(exports, 'DurationFormatter', {
50
+ Object.defineProperty(exports, "DurationFormatter", {
51
51
  enumerable: true,
52
52
  get: function () { return duration.DurationFormatter; }
53
53
  });
54
- Object.defineProperty(exports, 'Time', {
54
+ Object.defineProperty(exports, "Time", {
55
55
  enumerable: true,
56
56
  get: function () { return duration.Time; }
57
57
  });
58
- Object.defineProperty(exports, 'TimeTypes', {
58
+ Object.defineProperty(exports, "TimeTypes", {
59
59
  enumerable: true,
60
60
  get: function () { return duration.TimeTypes; }
61
61
  });
62
- Object.defineProperty(exports, 'TimerManager', {
62
+ Object.defineProperty(exports, "TimerManager", {
63
63
  enumerable: true,
64
64
  get: function () { return timerManager.TimerManager; }
65
65
  });
66
- Object.defineProperty(exports, 'Timestamp', {
66
+ Object.defineProperty(exports, "Timestamp", {
67
67
  enumerable: true,
68
68
  get: function () { return timestamp.Timestamp; }
69
69
  });
70
- Object.defineProperty(exports, 'days', {
70
+ Object.defineProperty(exports, "days", {
71
71
  enumerable: true,
72
72
  get: function () { return timestamp.days; }
73
73
  });
74
- Object.defineProperty(exports, 'months', {
74
+ Object.defineProperty(exports, "months", {
75
75
  enumerable: true,
76
76
  get: function () { return timestamp.months; }
77
77
  });
78
- Object.defineProperty(exports, 'tokens', {
78
+ Object.defineProperty(exports, "tokens", {
79
79
  enumerable: true,
80
80
  get: function () { return timestamp.tokens; }
81
81
  });
82
- //# sourceMappingURL=out.js.map
83
- //# sourceMappingURL=index.js.map
82
+ //# sourceMappingURL=index.cjs.map
83
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs","sourcesContent":[]}
@@ -0,0 +1,4 @@
1
+ export { Cron, allowedNum, cronTokens, partRegex, predefined, tokensRegex, wildcardRegex } from '@sapphire/cron';
2
+ export { DEFAULT_SEPARATORS, DEFAULT_UNITS, Duration, DurationFormatAssetsTime, DurationFormatAssetsUnit, DurationFormatSeparators, DurationFormatter, Time, TimeTypes } from '@sapphire/duration';
3
+ export { TimerManager } from '@sapphire/timer-manager';
4
+ export { TimeResolvable, Timestamp, TimestampTemplateEntry, days, months, tokens } from '@sapphire/timestamp';
@@ -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=out.js.map
5
+ //# sourceMappingURL=index.mjs.map
6
6
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs","sourcesContent":[]}
@@ -4,25 +4,22 @@ 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/chunk-AZHX2MBF.mjs
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
 
11
- // ../utilities/dist/lib/range.mjs
11
+ // ../utilities/dist/esm/lib/range.mjs
12
12
  function range(min, max, step) {
13
13
  return new Array(Math.floor((max - min) / step) + 1).fill(0).map((_val, i) => min + i * step);
14
14
  }
15
15
  __name(range, "range");
16
16
  __name2(range, "range");
17
17
 
18
- // ../cron/dist/index.mjs
18
+ // ../cron/dist/esm/index.mjs
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 = [
@@ -62,7 +59,8 @@ var SapphireTimeUtilities = (function (exports) {
62
59
  sat: 6
63
60
  };
64
61
  var tokensRegex = new RegExp(Object.keys(cronTokens).join("|"), "g");
65
- var Cron = /* @__PURE__ */ __name(class {
62
+ var _a;
63
+ var _Cron = (_a = class {
66
64
  /**
67
65
  * @param cron The cron pattern to use
68
66
  */
@@ -75,8 +73,8 @@ var SapphireTimeUtilities = (function (exports) {
75
73
  __publicField(this, "months");
76
74
  __publicField(this, "dows");
77
75
  this.cron = cron.toLowerCase();
78
- this.normalized = Cron.normalize(this.cron);
79
- [this.minutes, this.hours, this.days, this.months, this.dows] = Cron.parseString(this.normalized);
76
+ this.normalized = _a.normalize(this.cron);
77
+ [this.minutes, this.hours, this.days, this.months, this.dows] = _a.parseString(this.normalized);
80
78
  }
81
79
  /**
82
80
  * Get the next date that matches with the current pattern
@@ -90,15 +88,12 @@ var SapphireTimeUtilities = (function (exports) {
90
88
  /* Day */
91
89
  ), false);
92
90
  }
93
- if (!origin)
94
- 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]));
95
92
  const now = new Date(outset.getTime() + 6e4);
96
93
  for (const hour of this.hours) {
97
- if (hour < now.getUTCHours())
98
- continue;
94
+ if (hour < now.getUTCHours()) continue;
99
95
  for (const minute of this.minutes) {
100
- if (hour === now.getUTCHours() && minute < now.getUTCMinutes())
101
- continue;
96
+ if (hour === now.getUTCHours() && minute < now.getUTCMinutes()) continue;
102
97
  return new Date(Date.UTC(outset.getUTCFullYear(), outset.getUTCMonth(), outset.getUTCDate(), hour, minute));
103
98
  }
104
99
  }
@@ -107,18 +102,24 @@ var SapphireTimeUtilities = (function (exports) {
107
102
  /* Day */
108
103
  ), false);
109
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
+ }
110
113
  /**
111
114
  * Normalize the pattern
112
115
  * @param cron The pattern to normalize
113
116
  */
114
117
  static normalize(cron) {
115
- if (Reflect.has(predefined, cron))
116
- return Reflect.get(predefined, cron);
118
+ if (Reflect.has(predefined, cron)) return Reflect.get(predefined, cron);
117
119
  const now = /* @__PURE__ */ new Date();
118
120
  cron = cron.split(" ").map(
119
121
  (val, i) => val.replace(wildcardRegex, (match) => {
120
- if (match === "h")
121
- 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();
122
123
  if (match === "?") {
123
124
  switch (i) {
124
125
  case 0:
@@ -144,9 +145,8 @@ var SapphireTimeUtilities = (function (exports) {
144
145
  */
145
146
  static parseString(cron) {
146
147
  const parts = cron.split(" ");
147
- if (parts.length !== 5)
148
- throw new Error("Invalid Cron Provided");
149
- return parts.map((part, i) => Cron.parsePart(part, i));
148
+ if (parts.length !== 5) throw new Error("Invalid Cron Provided");
149
+ return parts.map((part, i) => _a.parsePart(part, i));
150
150
  }
151
151
  /**
152
152
  * Parse the current part
@@ -156,30 +156,25 @@ var SapphireTimeUtilities = (function (exports) {
156
156
  static parsePart(cronPart, id) {
157
157
  if (cronPart.includes(",")) {
158
158
  const res = [];
159
- for (const part of cronPart.split(","))
160
- res.push(...Cron.parsePart(part, id));
159
+ for (const part of cronPart.split(",")) res.push(..._a.parsePart(part, id));
161
160
  return [...new Set(res)].sort((a, b) => a - b);
162
161
  }
163
162
  const [, wild, minStr, maxStr, step] = partRegex.exec(cronPart);
164
163
  let [min, max] = [parseInt(minStr, 10), parseInt(maxStr, 10)];
165
- if (wild)
166
- [min, max] = allowedNum[id];
167
- else if (!max && !step)
168
- return [min];
164
+ if (wild) [min, max] = allowedNum[id];
165
+ else if (!max && !step) return [min];
169
166
  [min, max] = [min, max || allowedNum[id][1]].sort((a, b) => a - b);
170
167
  return range(min, max, parseInt(step, 10) || 1);
171
168
  }
172
- }, "Cron");
173
- __name3(Cron, "Cron");
169
+ }, __name(_a, "_Cron"), _a);
170
+ __name3(_Cron, "Cron");
171
+ var Cron = _Cron;
174
172
 
175
- // ../duration/dist/index.mjs
173
+ // ../duration/dist/esm/index.mjs
176
174
  var __defProp4 = Object.defineProperty;
177
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");
178
176
  var __name4 = /* @__PURE__ */ __name((target, value) => __defProp4(target, "name", { value, configurable: true }), "__name");
179
- var __publicField2 = /* @__PURE__ */ __name((obj, key, value) => {
180
- __defNormalProp2(obj, typeof key !== "symbol" ? key + "" : key, value);
181
- return value;
182
- }, "__publicField");
177
+ var __publicField2 = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp2(obj, typeof key !== "symbol" ? key + "" : key, value), "__publicField");
183
178
  var Time = /* @__PURE__ */ ((Time2) => {
184
179
  Time2[Time2["Nanosecond"] = 1e-6] = "Nanosecond";
185
180
  Time2[Time2["Microsecond"] = 1e-3] = "Microsecond";
@@ -256,7 +251,8 @@ var SapphireTimeUtilities = (function (exports) {
256
251
  };
257
252
  var DEFAULT_SEPARATORS = {
258
253
  left: " ",
259
- right: " "
254
+ right: " ",
255
+ final: " "
260
256
  };
261
257
  var tokens = /* @__PURE__ */ new Map([
262
258
  [
@@ -482,7 +478,8 @@ var SapphireTimeUtilities = (function (exports) {
482
478
  [2628e6, "months"],
483
479
  [31536e6, "years"]
484
480
  ]);
485
- var _Duration = /* @__PURE__ */ __name(class {
481
+ var _a2;
482
+ var _Duration = (_a2 = class {
486
483
  /**
487
484
  * Create a new Duration instance
488
485
  * @param pattern The string to parse
@@ -501,7 +498,7 @@ var SapphireTimeUtilities = (function (exports) {
501
498
  __publicField2(this, "years", 0);
502
499
  let result = 0;
503
500
  let valid = false;
504
- pattern.toLowerCase().replace(_Duration.commaRegex, "").replace(_Duration.aAndAnRegex, "1").replace(_Duration.patternRegex, (_, i, units) => {
501
+ pattern.toLowerCase().replace(_a2.commaRegex, "").replace(_a2.aAndAnRegex, "1").replace(_a2.patternRegex, (_, i, units) => {
505
502
  const token = tokens.get(units);
506
503
  if (token !== void 0) {
507
504
  const n = Number(i);
@@ -526,12 +523,12 @@ var SapphireTimeUtilities = (function (exports) {
526
523
  dateFrom(date) {
527
524
  return new Date(date.getTime() + this.offset);
528
525
  }
529
- }, "_Duration");
526
+ }, __name(_a2, "_Duration"), _a2);
527
+ __name4(_Duration, "Duration");
528
+ __publicField2(_Duration, "patternRegex", /(-?\d*\.?\d+(?:e[-+]?\d+)?)\s*([a-zμ]*)/gi);
529
+ __publicField2(_Duration, "commaRegex", /,/g);
530
+ __publicField2(_Duration, "aAndAnRegex", /\ban?\b/gi);
530
531
  var Duration = _Duration;
531
- __name4(Duration, "Duration");
532
- __publicField2(Duration, "patternRegex", /(-?\d*\.?\d+(?:e[-+]?\d+)?)\s*([a-zμ]*)/gi);
533
- __publicField2(Duration, "commaRegex", /,/g);
534
- __publicField2(Duration, "aAndAnRegex", /\ban?\b/gi);
535
532
  var kTimeDurations = [
536
533
  ["year", 31536e6],
537
534
  // 29.53059 days is the official duration of a month: https://en.wikipedia.org/wiki/Month
@@ -542,49 +539,55 @@ var SapphireTimeUtilities = (function (exports) {
542
539
  ["minute", 1e3 * 60],
543
540
  ["second", 1e3]
544
541
  ];
545
- var DurationFormatter = /* @__PURE__ */ __name(class {
542
+ var _a3;
543
+ var _DurationFormatter = (_a3 = class {
546
544
  constructor(units = DEFAULT_UNITS) {
547
545
  this.units = units;
548
546
  }
549
547
  format(duration, precision = 7, {
550
548
  left: leftSeparator = DEFAULT_SEPARATORS.left,
551
- right: rightSeparator = DEFAULT_SEPARATORS.right
549
+ right: rightSeparator = DEFAULT_SEPARATORS.right,
550
+ final: finalSeparator = DEFAULT_SEPARATORS.final
552
551
  } = DEFAULT_SEPARATORS) {
553
552
  const output = [];
554
553
  const negative = duration < 0;
555
- if (negative)
556
- duration *= -1;
554
+ if (negative) duration *= -1;
557
555
  for (const [type, timeDuration] of kTimeDurations) {
558
556
  const division = duration / timeDuration;
559
- if (division < 1)
560
- continue;
557
+ if (division < 1) continue;
561
558
  const floored = Math.floor(division);
562
559
  duration -= floored * timeDuration;
563
560
  output.push(addUnit(floored, this.units[type], leftSeparator));
564
- if (output.length >= precision)
565
- break;
561
+ if (output.length >= precision) break;
562
+ }
563
+ if (output.length === 0) return addUnit(0, this.units[
564
+ "second"
565
+ /* Second */
566
+ ], leftSeparator);
567
+ if (negative) output[0] = `-${output[0]}`;
568
+ if (output.length > 1) {
569
+ const last = output.pop();
570
+ return `${output.join(rightSeparator)}${finalSeparator}${last}`;
566
571
  }
567
- return `${negative ? "-" : ""}${output.join(rightSeparator) || addUnit(0, this.units.second, leftSeparator)}`;
572
+ return output.join(rightSeparator);
568
573
  }
569
- }, "DurationFormatter");
570
- __name4(DurationFormatter, "DurationFormatter");
574
+ }, __name(_a3, "_DurationFormatter"), _a3);
575
+ __name4(_DurationFormatter, "DurationFormatter");
576
+ var DurationFormatter = _DurationFormatter;
571
577
  function addUnit(time, unit, separator) {
572
- if (Reflect.has(unit, time))
573
- return `${time}${separator}${Reflect.get(unit, time)}`;
578
+ if (Reflect.has(unit, time)) return `${time}${separator}${Reflect.get(unit, time)}`;
574
579
  return `${time}${separator}${unit.DEFAULT}`;
575
580
  }
576
581
  __name(addUnit, "addUnit");
577
582
  __name4(addUnit, "addUnit");
578
583
 
579
- // ../timer-manager/dist/index.mjs
584
+ // ../timer-manager/dist/esm/index.mjs
580
585
  var __defProp5 = Object.defineProperty;
581
586
  var __defNormalProp3 = /* @__PURE__ */ __name((obj, key, value) => key in obj ? __defProp5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value, "__defNormalProp");
582
587
  var __name5 = /* @__PURE__ */ __name((target, value) => __defProp5(target, "name", { value, configurable: true }), "__name");
583
- var __publicField3 = /* @__PURE__ */ __name((obj, key, value) => {
584
- __defNormalProp3(obj, typeof key !== "symbol" ? key + "" : key, value);
585
- return value;
586
- }, "__publicField");
587
- var TimerManager = /* @__PURE__ */ __name(class extends null {
588
+ var __publicField3 = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp3(obj, typeof key !== "symbol" ? key + "" : key, value), "__publicField");
589
+ var _a4;
590
+ var _TimerManager = (_a4 = class extends null {
588
591
  /**
589
592
  * Creates a timeout gets cleared when destroyed
590
593
  * @param fn callback function
@@ -630,26 +633,22 @@ var SapphireTimeUtilities = (function (exports) {
630
633
  * Clears running timeouts and intervals created through this class so NodeJS can gracefully exit
631
634
  */
632
635
  static destroy() {
633
- for (const i of this.storedTimeouts)
634
- clearTimeout(i);
635
- for (const i of this.storedIntervals)
636
- clearInterval(i);
636
+ for (const i of this.storedTimeouts) clearTimeout(i);
637
+ for (const i of this.storedIntervals) clearInterval(i);
637
638
  this.storedTimeouts.clear();
638
639
  this.storedIntervals.clear();
639
640
  }
640
- }, "TimerManager");
641
- __name5(TimerManager, "TimerManager");
642
- __publicField3(TimerManager, "storedTimeouts", /* @__PURE__ */ new Set());
643
- __publicField3(TimerManager, "storedIntervals", /* @__PURE__ */ new Set());
641
+ }, __name(_a4, "_TimerManager"), _a4);
642
+ __name5(_TimerManager, "TimerManager");
643
+ __publicField3(_TimerManager, "storedTimeouts", /* @__PURE__ */ new Set());
644
+ __publicField3(_TimerManager, "storedIntervals", /* @__PURE__ */ new Set());
645
+ var TimerManager = _TimerManager;
644
646
 
645
- // ../timestamp/dist/index.mjs
647
+ // ../timestamp/dist/esm/index.mjs
646
648
  var __defProp6 = Object.defineProperty;
647
649
  var __defNormalProp4 = /* @__PURE__ */ __name((obj, key, value) => key in obj ? __defProp6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value, "__defNormalProp");
648
650
  var __name6 = /* @__PURE__ */ __name((target, value) => __defProp6(target, "name", { value, configurable: true }), "__name");
649
- var __publicField4 = /* @__PURE__ */ __name((obj, key, value) => {
650
- __defNormalProp4(obj, typeof key !== "symbol" ? key + "" : key, value);
651
- return value;
652
- }, "__publicField");
651
+ var __publicField4 = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp4(obj, typeof key !== "symbol" ? key + "" : key, value), "__publicField");
653
652
  var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
654
653
  var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
655
654
  var tokens2 = /* @__PURE__ */ new Map([
@@ -698,12 +697,9 @@ var SapphireTimeUtilities = (function (exports) {
698
697
  "d",
699
698
  (time) => {
700
699
  const day = String(time.getDate());
701
- if (day !== "11" && day.endsWith("1"))
702
- return `${day}st`;
703
- if (day !== "12" && day.endsWith("2"))
704
- return `${day}nd`;
705
- if (day !== "13" && day.endsWith("3"))
706
- return `${day}rd`;
700
+ if (day !== "11" && day.endsWith("1")) return `${day}st`;
701
+ if (day !== "12" && day.endsWith("2")) return `${day}nd`;
702
+ if (day !== "13" && day.endsWith("3")) return `${day}rd`;
707
703
  return `${day}th`;
708
704
  }
709
705
  ],
@@ -781,7 +777,8 @@ var SapphireTimeUtilities = (function (exports) {
781
777
  }
782
778
  ]
783
779
  ]);
784
- var Timestamp = /* @__PURE__ */ __name(class {
780
+ var _a5;
781
+ var _Timestamp = (_a5 = class {
785
782
  /**
786
783
  * Starts a new Timestamp and parses the pattern.
787
784
  * @since 1.0.0
@@ -791,7 +788,7 @@ var SapphireTimeUtilities = (function (exports) {
791
788
  __publicField4(this, "pattern");
792
789
  __publicField4(this, "template");
793
790
  this.pattern = pattern;
794
- this.template = Timestamp.parse(pattern);
791
+ this.template = _a5.parse(pattern);
795
792
  }
796
793
  /**
797
794
  * Display the current date with the current pattern.
@@ -799,7 +796,7 @@ var SapphireTimeUtilities = (function (exports) {
799
796
  * @param time The time to display
800
797
  */
801
798
  display(time = /* @__PURE__ */ new Date()) {
802
- return Timestamp.display(this.template, time);
799
+ return _a5.display(this.template, time);
803
800
  }
804
801
  /**
805
802
  * Display the current date utc with the current pattern.
@@ -807,7 +804,7 @@ var SapphireTimeUtilities = (function (exports) {
807
804
  * @param time The time to display in utc
808
805
  */
809
806
  displayUTC(time) {
810
- return Timestamp.display(this.template, Timestamp.utc(time));
807
+ return _a5.display(this.template, _a5.utc(time));
811
808
  }
812
809
  /**
813
810
  * Edits the current pattern.
@@ -817,7 +814,7 @@ var SapphireTimeUtilities = (function (exports) {
817
814
  */
818
815
  edit(pattern) {
819
816
  this.pattern = pattern;
820
- this.template = Timestamp.parse(pattern);
817
+ this.template = _a5.parse(pattern);
821
818
  return this;
822
819
  }
823
820
  /**
@@ -833,7 +830,7 @@ var SapphireTimeUtilities = (function (exports) {
833
830
  * @param time The time to display
834
831
  */
835
832
  static displayArbitrary(pattern, time = /* @__PURE__ */ new Date()) {
836
- return Timestamp.display(Timestamp.parse(pattern), time);
833
+ return _a5.display(_a5.parse(pattern), time);
837
834
  }
838
835
  /**
839
836
  * Display the current date utc with the current pattern.
@@ -842,7 +839,7 @@ var SapphireTimeUtilities = (function (exports) {
842
839
  * @param time The time to display
843
840
  */
844
841
  static displayUTCArbitrary(pattern, time = /* @__PURE__ */ new Date()) {
845
- return Timestamp.display(Timestamp.parse(pattern), Timestamp.utc(time));
842
+ return _a5.display(_a5.parse(pattern), _a5.utc(time));
846
843
  }
847
844
  /**
848
845
  * Creates a UTC Date object to work with.
@@ -850,7 +847,7 @@ var SapphireTimeUtilities = (function (exports) {
850
847
  * @param time The date to convert to utc
851
848
  */
852
849
  static utc(time = /* @__PURE__ */ new Date()) {
853
- time = Timestamp.resolveDate(time);
850
+ time = _a5.resolveDate(time);
854
851
  return new Date(time.valueOf() + time.getTimezoneOffset() * 6e4);
855
852
  }
856
853
  /**
@@ -861,9 +858,8 @@ var SapphireTimeUtilities = (function (exports) {
861
858
  */
862
859
  static display(template, time) {
863
860
  let output = "";
864
- const parsedTime = Timestamp.resolveDate(time);
865
- for (const { content, type } of template)
866
- output += content || tokenResolvers.get(type)(parsedTime);
861
+ const parsedTime = _a5.resolveDate(time);
862
+ for (const { content, type } of template) output += content || tokenResolvers.get(type)(parsedTime);
867
863
  return output;
868
864
  }
869
865
  /**
@@ -879,18 +875,15 @@ var SapphireTimeUtilities = (function (exports) {
879
875
  const tokenMax = tokens2.get(currentChar);
880
876
  if (typeof tokenMax === "number") {
881
877
  current += currentChar;
882
- while (pattern[i + 1] === currentChar && current.length < tokenMax)
883
- current += pattern[++i];
878
+ while (pattern[i + 1] === currentChar && current.length < tokenMax) current += pattern[++i];
884
879
  template.push({ type: current, content: null });
885
880
  } else if (currentChar === "[") {
886
- while (i + 1 < pattern.length && pattern[i + 1] !== "]")
887
- current += pattern[++i];
881
+ while (i + 1 < pattern.length && pattern[i + 1] !== "]") current += pattern[++i];
888
882
  i++;
889
883
  template.push({ type: "literal", content: current || "[" });
890
884
  } else {
891
885
  current += currentChar;
892
- while (i + 1 < pattern.length && !tokens2.has(pattern[i + 1]) && pattern[i + 1] !== "[")
893
- current += pattern[++i];
886
+ while (i + 1 < pattern.length && !tokens2.has(pattern[i + 1]) && pattern[i + 1] !== "[") current += pattern[++i];
894
887
  template.push({ type: "literal", content: current });
895
888
  }
896
889
  }
@@ -904,8 +897,9 @@ var SapphireTimeUtilities = (function (exports) {
904
897
  static resolveDate(time) {
905
898
  return time instanceof Date ? time : new Date(time);
906
899
  }
907
- }, "Timestamp");
908
- __name6(Timestamp, "Timestamp");
900
+ }, __name(_a5, "_Timestamp"), _a5);
901
+ __name6(_Timestamp, "Timestamp");
902
+ var Timestamp = _Timestamp;
909
903
 
910
904
  exports.Cron = Cron;
911
905
  exports.DEFAULT_SEPARATORS = DEFAULT_SEPARATORS;
@@ -929,5 +923,5 @@ var SapphireTimeUtilities = (function (exports) {
929
923
  return exports;
930
924
 
931
925
  })({});
932
- //# sourceMappingURL=out.js.map
926
+ //# sourceMappingURL=index.global.js.map
933
927
  //# sourceMappingURL=index.global.js.map
@@ -0,0 +1 @@
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\tfinal: ' '\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\tfinal: finalSeparator = DEFAULT_SEPARATORS.final\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\tif (output.length === 0) return addUnit(0, this.units[TimeTypes.Second], leftSeparator!);\n\t\tif (negative) output[0] = `-${output[0]}`;\n\n\t\tif (output.length > 1) {\n\t\t\tconst last = output.pop();\n\t\t\treturn `${output.join(rightSeparator!)}${finalSeparator}${last}`;\n\t\t}\n\n\t\treturn output.join(rightSeparator!);\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\tfinal?: 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,24 +1,31 @@
1
1
  {
2
2
  "name": "@sapphire/time-utilities",
3
- "version": "1.8.0-pr-601.2f2c308a.0",
3
+ "version": "1.8.0-pr-935.7da5c8bb",
4
4
  "description": "A time utility library for JavaScript.",
5
5
  "author": "@sapphire",
6
6
  "license": "MIT",
7
- "main": "dist/index.js",
8
- "module": "dist/index.mjs",
9
- "browser": "dist/index.global.js",
10
- "unpkg": "dist/index.global.js",
11
- "types": "dist/index.d.ts",
7
+ "main": "dist/cjs/index.cjs",
8
+ "module": "dist/esm/index.mjs",
9
+ "browser": "dist/iife/index.global.js",
10
+ "unpkg": "dist/iife/index.global.js",
11
+ "types": "dist/cjs/index.d.cts",
12
12
  "exports": {
13
- "import": "./dist/index.mjs",
14
- "require": "./dist/index.js",
15
- "types": "./dist/index.d.ts"
13
+ "import": {
14
+ "types": "./dist/esm/index.d.mts",
15
+ "default": "./dist/esm/index.mjs"
16
+ },
17
+ "require": {
18
+ "types": "./dist/cjs/index.d.cts",
19
+ "default": "./dist/cjs/index.cjs"
20
+ },
21
+ "browser": "./dist/iife/index.global.js"
16
22
  },
17
23
  "sideEffects": false,
18
24
  "homepage": "https://github.com/sapphiredev/utilities/tree/main/packages/time-utilities",
19
25
  "scripts": {
20
26
  "lint": "eslint src --ext ts --fix -c ../../.eslintrc",
21
- "build": "tsup",
27
+ "build": "tsup && yarn build:rename-cjs-index",
28
+ "build:rename-cjs-index": "tsx ../../scripts/rename-cjs-index.cts",
22
29
  "docs": "typedoc-json-parser",
23
30
  "prepack": "yarn build",
24
31
  "bump": "cliff-jumper",
@@ -30,9 +37,7 @@
30
37
  "directory": "packages/time-utilities"
31
38
  },
32
39
  "files": [
33
- "dist/**/*.js*",
34
- "dist/**/*.mjs*",
35
- "dist/**/*.d*"
40
+ "dist/"
36
41
  ],
37
42
  "engines": {
38
43
  "node": ">=v14.0.0",
@@ -55,16 +60,17 @@
55
60
  "access": "public"
56
61
  },
57
62
  "dependencies": {
58
- "@sapphire/cron": "^1.1.0",
59
- "@sapphire/duration": "^1.1.0",
60
- "@sapphire/timer-manager": "^1.0.0",
61
- "@sapphire/timestamp": "^1.0.1"
63
+ "@sapphire/cron": "^1.2.1",
64
+ "@sapphire/duration": "^1.2.0",
65
+ "@sapphire/timer-manager": "^1.0.4",
66
+ "@sapphire/timestamp": "^1.0.5"
62
67
  },
63
68
  "devDependencies": {
64
- "@favware/cliff-jumper": "^2.0.1",
65
- "tsup": "^6.7.0",
66
- "typedoc": "^0.24.7",
67
- "typedoc-json-parser": "^8.1.2",
68
- "typescript": "^5.0.4"
69
+ "@favware/cliff-jumper": "^6.0.0",
70
+ "tsup": "^8.5.0",
71
+ "tsx": "^4.20.6",
72
+ "typedoc": "^0.26.11",
73
+ "typedoc-json-parser": "^10.2.0",
74
+ "typescript": "~5.4.5"
69
75
  }
70
76
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../utilities/dist/chunk-AZHX2MBF.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","__publicField","tokens"],"mappings":"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","sourcesContent":["var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\nexport { __name, __publicField };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=chunk-AZHX2MBF.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"]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAAA,SAAS,YAAY,MAAM,YAAY,WAAW,YAAY,aAAa,qBAAqB;AAChG;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIM;AACP,SAAS,oBAAoB;AAC7B,SAAS,MAAM,QAAQ,WAAW,cAAgE","sourcesContent":["export { allowedNum, Cron, cronTokens, partRegex, predefined, tokensRegex, wildcardRegex } from '@sapphire/cron';\nexport {\n\tDEFAULT_SEPARATORS,\n\tDEFAULT_UNITS,\n\tDuration,\n\tDurationFormatter,\n\tTime,\n\tTimeTypes,\n\ttype DurationFormatAssetsTime,\n\ttype DurationFormatAssetsUnit,\n\ttype DurationFormatSeparators\n} from '@sapphire/duration';\nexport { TimerManager } from '@sapphire/timer-manager';\nexport { days, months, Timestamp, tokens, type TimeResolvable, type TimestampTemplateEntry } from '@sapphire/timestamp';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAAA,SAAS,YAAY,MAAM,YAAY,WAAW,YAAY,aAAa,qBAAqB;AAChG;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIM;AACP,SAAS,oBAAoB;AAC7B,SAAS,MAAM,QAAQ,WAAW,cAAgE","sourcesContent":["export { allowedNum, Cron, cronTokens, partRegex, predefined, tokensRegex, wildcardRegex } from '@sapphire/cron';\nexport {\n\tDEFAULT_SEPARATORS,\n\tDEFAULT_UNITS,\n\tDuration,\n\tDurationFormatter,\n\tTime,\n\tTimeTypes,\n\ttype DurationFormatAssetsTime,\n\ttype DurationFormatAssetsUnit,\n\ttype DurationFormatSeparators\n} from '@sapphire/duration';\nexport { TimerManager } from '@sapphire/timer-manager';\nexport { days, months, Timestamp, tokens, type TimeResolvable, type TimestampTemplateEntry } from '@sapphire/timestamp';\n"]}
File without changes