@sapphire/timestamp 1.0.0 β†’ 1.0.1-next.0da14d1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,7 +18,8 @@
18
18
  - [Features](#features)
19
19
  - [Installation](#installation)
20
20
  - [Usage](#usage)
21
- - [Basic Usage](#basic-usage)
21
+ - [Human Readable Milliseconds](#human-readable-milliseconds)
22
+ - [Formatting a Date](#formatting-a-date)
22
23
  - [Buy us some doughnuts](#buy-us-some-doughnuts)
23
24
  - [Contributors ✨](#contributors-%E2%9C%A8)
24
25
 
@@ -37,6 +38,103 @@ You can use the following command to install this package, or replace `npm insta
37
38
  npm install @sapphire/timestamp
38
39
  ```
39
40
 
41
+ ## Usage
42
+
43
+ **Note:** While this section uses `require`, the imports match 1:1 with ESM imports. For example `const { Timestamp } = require('@sapphire/timestamp')` equals `import { Timestamp } from '@sapphire/timestamp'`.
44
+
45
+ ### Human Readable Milliseconds
46
+
47
+ Milliseconds are often hard for humans to quickly parse, so it's nice to use
48
+ named Enum members to make it easier to read.
49
+
50
+ ```typescript
51
+ // Import the Time enum
52
+ const { Time } = require('@sapphire/timestamp');
53
+
54
+ setTimeout(() => {
55
+ // Do something in half a second
56
+ }, Time.Second / 2 /* 500 */);
57
+
58
+ setTimeout(() => {
59
+ // Do something in 6 hours
60
+ }, Time.Hour * 6 /* 21600000 */);
61
+
62
+ setTimeout(() => {
63
+ // Do something in 1 day
64
+ }, Time.Day /* 86400000 */);
65
+ ```
66
+
67
+ ### Formatting a Date
68
+
69
+ ```typescript
70
+ // Import the Timestamp class
71
+ const { Timestamp } = require('@sapphire/timestamp');
72
+
73
+ // Saturday 9th March 2019, at 16:20:35:500
74
+ const date = new Date(2019, 2, 9, 16, 20, 35, 1);
75
+
76
+ // Format the date with tokens (use square brackets to escape)
77
+ const timestamp = new Timestamp('MMMM d YYYY[, at ]HH:mm:ss:SSS');
78
+ timestamp.display(date); // March 9th 2019, at 16:20:35:001
79
+ ```
80
+
81
+ <details>
82
+ <summary>
83
+ <b>View all available tokens</b>
84
+ </summary>
85
+
86
+ ```typescript
87
+ // Saturday 9th March 2019, at 16:20:35:500
88
+ const date = new Date(2019, 2, 9, 16, 20, 35, 1);
89
+
90
+ new Timestamp('Y').display(date); // 19
91
+ new Timestamp('YY').display(date); // 19
92
+ new Timestamp('YYY').display(date); // 2019
93
+ new Timestamp('YYYY').display(date); // 2019
94
+ new Timestamp('Q').display(date); // 1
95
+ new Timestamp('M').display(date); // 3
96
+ new Timestamp('MM').display(date); // 03
97
+ new Timestamp('MMM').display(date); // March
98
+ new Timestamp('MMMM').display(date); // March
99
+ new Timestamp('D').display(date); // 9
100
+ new Timestamp('DD').display(date); // 09
101
+ new Timestamp('DDD').display(date); // 68
102
+ new Timestamp('DDDD').display(date); // 68
103
+ new Timestamp('d').display(date); // 9th
104
+ new Timestamp('dd').display(date); // Sa
105
+ new Timestamp('ddd').display(date); // Sat
106
+ new Timestamp('dddd').display(date); // Saturday
107
+ new Timestamp('X').display(date); // 1552168835
108
+ new Timestamp('x').display(date); // 1552168835001
109
+ new Timestamp('H').display(date); // 16
110
+ new Timestamp('HH').display(date); // 16
111
+ new Timestamp('h').display(date); // 4
112
+ new Timestamp('hh').display(date); // 04
113
+ new Timestamp('a').display(date); // pm
114
+ new Timestamp('A').display(date); // PM
115
+ new Timestamp('m').display(date); // 20
116
+ new Timestamp('mm').display(date); // 20
117
+ new Timestamp('s').display(date); // 35
118
+ new Timestamp('ss').display(date); // 35
119
+ new Timestamp('S').display(date); // 0
120
+ new Timestamp('SS').display(date); // 00
121
+ new Timestamp('SSS').display(date); // 001
122
+ new Timestamp('t').display(date); // 4:20:35 PM
123
+ new Timestamp('T').display(date); // 4:20 PM
124
+ new Timestamp('L').display(date); // 03/09/2019
125
+ new Timestamp('LL').display(date); // March 09, 2019
126
+ new Timestamp('LLL').display(date); // March 09, 2019 4:20 PM
127
+ new Timestamp('LLLL').display(date); // Saturday, March 09, 2019 4:20 PM
128
+ new Timestamp('l').display(date); // 3/9/2019
129
+ new Timestamp('ll').display(date); // Mar 09, 2019
130
+ new Timestamp('lll').display(date); // Mar 09, 2019 4:20 PM
131
+ new Timestamp('llll').display(date); // Sat, Mar 09, 2019 4:20 PM
132
+ new Timestamp('Z').display(date); // -05:00
133
+ new Timestamp('ZZ').display(date); // -05:00
134
+ ```
135
+
136
+ </details>
137
+
40
138
  ## Buy us some doughnuts
41
139
 
42
140
  Sapphire Community is and always will be open source, even if we don't get donations. That being said, we know there are amazing people who may still want to donate just to show their appreciation. Thank you very much in advance!
@@ -108,6 +206,13 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
108
206
  <td align="center"><a href="https://github.com/EvolutionX-10"><img src="https://avatars.githubusercontent.com/u/85353424?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evo</b></sub></a><br /><a href="https://github.com/sapphiredev/utilities/commits?author=EvolutionX-10" title="Code">πŸ’»</a></td>
109
207
  <td align="center"><a href="https://enes.ovh/"><img src="https://avatars.githubusercontent.com/u/61084101?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Enes GenΓ§</b></sub></a><br /><a href="https://github.com/sapphiredev/utilities/commits?author=enxg" title="Code">πŸ’»</a></td>
110
208
  <td align="center"><a href="https://github.com/muchnameless"><img src="https://avatars.githubusercontent.com/u/12682826?v=4?s=100" width="100px;" alt=""/><br /><sub><b>muchnameless</b></sub></a><br /><a href="https://github.com/sapphiredev/utilities/commits?author=muchnameless" title="Code">πŸ’»</a></td>
209
+ <td align="center"><a href="https://github.com/r-priyam"><img src="https://avatars.githubusercontent.com/u/50884372?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Priyam</b></sub></a><br /><a href="https://github.com/sapphiredev/utilities/commits?author=r-priyam" title="Code">πŸ’»</a></td>
210
+ <td align="center"><a href="https://github.com/legendhimslef"><img src="https://avatars.githubusercontent.com/u/69213593?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Voxelli</b></sub></a><br /><a href="https://github.com/sapphiredev/utilities/commits?author=legendhimslef" title="Code">πŸ’»</a></td>
211
+ <td align="center"><a href="https://github.com/CitTheDev"><img src="https://avatars.githubusercontent.com/u/94020875?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cit The Dev</b></sub></a><br /><a href="https://github.com/sapphiredev/utilities/commits?author=CitTheDev" title="Code">πŸ’»</a></td>
212
+ </tr>
213
+ <tr>
214
+ <td align="center"><a href="https://www.goestav.com/"><img src="https://avatars.githubusercontent.com/u/27970303?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Goestav</b></sub></a><br /><a href="https://github.com/sapphiredev/utilities/commits?author=goestav" title="Code">πŸ’»</a></td>
215
+ <td align="center"><a href="https://github.com/didinele"><img src="https://avatars.githubusercontent.com/u/27137376?v=4?s=100" width="100px;" alt=""/><br /><sub><b>DD</b></sub></a><br /><a href="https://github.com/sapphiredev/utilities/commits?author=didinele" title="Code">πŸ’»</a></td>
111
216
  </tr>
112
217
  </table>
113
218
 
@@ -1,39 +1,14 @@
1
- "use strict";
2
- var SapphireTimestamp = (() => {
1
+ var SapphireTimestamp = (function (exports) {
2
+ 'use strict';
3
+
3
4
  var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
6
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
- var __export = (target, all) => {
10
- for (var name in all)
11
- __defProp(target, name, { get: all[name], enumerable: true });
12
- };
13
- var __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from === "object" || typeof from === "function") {
15
- for (let key of __getOwnPropNames(from))
16
- if (!__hasOwnProp.call(to, key) && key !== except)
17
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
- }
19
- return to;
20
- };
21
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
7
  var __publicField = (obj, key, value) => {
23
8
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
24
9
  return value;
25
10
  };
26
11
 
27
- // src/index.ts
28
- var src_exports = {};
29
- __export(src_exports, {
30
- Time: () => Time,
31
- Timestamp: () => Timestamp,
32
- days: () => days,
33
- months: () => months,
34
- tokens: () => tokens
35
- });
36
-
37
12
  // src/lib/constants.ts
38
13
  var Time = /* @__PURE__ */ ((Time2) => {
39
14
  Time2[Time2["Millisecond"] = 1] = "Millisecond";
@@ -127,26 +102,26 @@ var SapphireTimestamp = (() => {
127
102
  [
128
103
  "LLL",
129
104
  (time) => `${months[time.getMonth()]} ${String(time.getDate()).padStart(2, "0")}, ${String(time.getFullYear())} ${String(
130
- time.getHours() % 12 || 12
131
- )}:${String(time.getMinutes()).padStart(2, "0")} ${time.getHours() < 12 ? "AM" : "PM"}`
105
+ time.getHours() % 12 || 12
106
+ )}:${String(time.getMinutes()).padStart(2, "0")} ${time.getHours() < 12 ? "AM" : "PM"}`
132
107
  ],
133
108
  [
134
109
  "lll",
135
110
  (time) => `${months[time.getMonth()].slice(0, 3)} ${String(time.getDate()).padStart(2, "0")}, ${String(time.getFullYear())} ${String(
136
- time.getHours() % 12 || 12
137
- )}:${String(time.getMinutes()).padStart(2, "0")} ${time.getHours() < 12 ? "AM" : "PM"}`
111
+ time.getHours() % 12 || 12
112
+ )}:${String(time.getMinutes()).padStart(2, "0")} ${time.getHours() < 12 ? "AM" : "PM"}`
138
113
  ],
139
114
  [
140
115
  "LLLL",
141
116
  (time) => `${days[time.getDay()]}, ${months[time.getMonth()]} ${String(time.getDate()).padStart(2, "0")}, ${String(time.getFullYear())} ${String(
142
- time.getHours() % 12 || 12
143
- )}:${String(time.getMinutes()).padStart(2, "0")} ${time.getHours() < 12 ? "AM" : "PM"}`
117
+ time.getHours() % 12 || 12
118
+ )}:${String(time.getMinutes()).padStart(2, "0")} ${time.getHours() < 12 ? "AM" : "PM"}`
144
119
  ],
145
120
  [
146
121
  "llll",
147
122
  (time) => `${days[time.getDay()].slice(0, 3)} ${months[time.getMonth()].slice(0, 3)} ${String(time.getDate()).padStart(2, "0")}, ${String(
148
- time.getFullYear()
149
- )} ${String(time.getHours() % 12 || 12)}:${String(time.getMinutes()).padStart(2, "0")} ${time.getHours() < 12 ? "AM" : "PM"}`
123
+ time.getFullYear()
124
+ )} ${String(time.getHours() % 12 || 12)}:${String(time.getMinutes()).padStart(2, "0")} ${time.getHours() < 12 ? "AM" : "PM"}`
150
125
  ],
151
126
  [
152
127
  "Z",
@@ -235,6 +210,15 @@ var SapphireTimestamp = (() => {
235
210
  }
236
211
  };
237
212
  __name(Timestamp, "Timestamp");
238
- return __toCommonJS(src_exports);
239
- })();
213
+
214
+ exports.Time = Time;
215
+ exports.Timestamp = Timestamp;
216
+ exports.days = days;
217
+ exports.months = months;
218
+ exports.tokens = tokens;
219
+
220
+ return exports;
221
+
222
+ })({});
223
+ //# sourceMappingURL=out.js.map
240
224
  //# sourceMappingURL=index.global.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/lib/constants.ts","../src/lib/Timestamp.ts"],"sourcesContent":["export * from './lib/constants';\nexport * from './lib/Timestamp';\n","export enum Time {\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = 1000 * 60,\n\tHour = 1000 * 60 * 60,\n\tDay = 1000 * 60 * 60 * 24,\n\tMonth = 1000 * 60 * 60 * 24 * (365 / 12),\n\tYear = 1000 * 60 * 60 * 24 * 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"],"mappings":"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","names":["Time"]}
1
+ {"version":3,"sources":["../src/lib/constants.ts","../src/lib/Timestamp.ts"],"names":["Time"],"mappings":"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","sourcesContent":["export enum Time {\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = 1000 * 60,\n\tHour = 1000 * 60 * 60,\n\tDay = 1000 * 60 * 60 * 24,\n\tMonth = 1000 * 60 * 60 * 24 * (365 / 12),\n\tYear = 1000 * 60 * 60 * 24 * 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 CHANGED
@@ -1,40 +1,13 @@
1
- "use strict";
2
- "use strict";
1
+ 'use strict';
2
+
3
3
  var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
4
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
5
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
- var __export = (target, all) => {
10
- for (var name in all)
11
- __defProp(target, name, { get: all[name], enumerable: true });
12
- };
13
- var __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from === "object" || typeof from === "function") {
15
- for (let key of __getOwnPropNames(from))
16
- if (!__hasOwnProp.call(to, key) && key !== except)
17
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
- }
19
- return to;
20
- };
21
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
6
  var __publicField = (obj, key, value) => {
23
7
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
24
8
  return value;
25
9
  };
26
10
 
27
- // src/index.ts
28
- var src_exports = {};
29
- __export(src_exports, {
30
- Time: () => Time,
31
- Timestamp: () => Timestamp,
32
- days: () => days,
33
- months: () => months,
34
- tokens: () => tokens
35
- });
36
- module.exports = __toCommonJS(src_exports);
37
-
38
11
  // src/lib/constants.ts
39
12
  var Time = /* @__PURE__ */ ((Time2) => {
40
13
  Time2[Time2["Millisecond"] = 1] = "Millisecond";
@@ -236,12 +209,11 @@ var Timestamp = class {
236
209
  }
237
210
  };
238
211
  __name(Timestamp, "Timestamp");
239
- // Annotate the CommonJS export names for ESM import in node:
240
- 0 && (module.exports = {
241
- Time,
242
- Timestamp,
243
- days,
244
- months,
245
- tokens
246
- });
212
+
213
+ exports.Time = Time;
214
+ exports.Timestamp = Timestamp;
215
+ exports.days = days;
216
+ exports.months = months;
217
+ exports.tokens = tokens;
218
+ //# sourceMappingURL=out.js.map
247
219
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/lib/constants.ts","../src/lib/Timestamp.ts"],"sourcesContent":["export * from './lib/constants';\nexport * from './lib/Timestamp';\n","export enum Time {\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = 1000 * 60,\n\tHour = 1000 * 60 * 60,\n\tDay = 1000 * 60 * 60 * 24,\n\tMonth = 1000 * 60 * 60 * 24 * (365 / 12),\n\tYear = 1000 * 60 * 60 * 24 * 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"],"mappings":"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","names":["Time"]}
1
+ {"version":3,"sources":["../src/lib/constants.ts","../src/lib/Timestamp.ts"],"names":["Time"],"mappings":"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","sourcesContent":["export enum Time {\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = 1000 * 60,\n\tHour = 1000 * 60 * 60,\n\tDay = 1000 * 60 * 60 * 24,\n\tMonth = 1000 * 60 * 60 * 24 * (365 / 12),\n\tYear = 1000 * 60 * 60 * 24 * 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.mjs CHANGED
@@ -207,11 +207,7 @@ var Timestamp = class {
207
207
  }
208
208
  };
209
209
  __name(Timestamp, "Timestamp");
210
- export {
211
- Time,
212
- Timestamp,
213
- days,
214
- months,
215
- tokens
216
- };
210
+
211
+ export { Time, Timestamp, days, months, tokens };
212
+ //# sourceMappingURL=out.js.map
217
213
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/constants.ts","../src/lib/Timestamp.ts"],"sourcesContent":["export enum Time {\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = 1000 * 60,\n\tHour = 1000 * 60 * 60,\n\tDay = 1000 * 60 * 60 * 24,\n\tMonth = 1000 * 60 * 60 * 24 * (365 / 12),\n\tYear = 1000 * 60 * 60 * 24 * 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"],"mappings":"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","names":["Time"]}
1
+ {"version":3,"sources":["../src/lib/constants.ts","../src/lib/Timestamp.ts"],"names":["Time"],"mappings":"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","sourcesContent":["export enum Time {\n\tMillisecond = 1,\n\tSecond = 1000,\n\tMinute = 1000 * 60,\n\tHour = 1000 * 60 * 60,\n\tDay = 1000 * 60 * 60 * 24,\n\tMonth = 1000 * 60 * 60 * 24 * (365 / 12),\n\tYear = 1000 * 60 * 60 * 24 * 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/timestamp",
3
- "version": "1.0.0",
3
+ "version": "1.0.1-next.0da14d1.0",
4
4
  "description": "A timestamp utility library for JavaScript.",
5
5
  "author": "@sapphire",
6
6
  "license": "MIT",
@@ -57,12 +57,12 @@
57
57
  "access": "public"
58
58
  },
59
59
  "devDependencies": {
60
- "@favware/cliff-jumper": "^1.8.7",
61
- "@vitest/coverage-c8": "^0.23.4",
62
- "tsup": "^6.2.3",
63
- "typedoc": "^0.23.14",
64
- "typedoc-json-parser": "^4.0.0",
65
- "typescript": "^4.8.3",
66
- "vitest": "^0.23.4"
60
+ "@favware/cliff-jumper": "^1.8.8",
61
+ "@vitest/coverage-c8": "^0.24.5",
62
+ "tsup": "^6.4.0",
63
+ "typedoc": "^0.23.20",
64
+ "typedoc-json-parser": "^7.0.1",
65
+ "typescript": "^4.8.4",
66
+ "vitest": "^0.24.5"
67
67
  }
68
68
  }