@autometa/datetime 0.0.0 → 0.1.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/CHANGELOG.md +14 -0
- package/dist/esm/index.js +150 -37
- package/dist/esm/index.js.map +1 -0
- package/dist/index.d.cts +73 -0
- package/dist/index.d.ts +36 -17
- package/dist/index.js +156 -37
- package/dist/index.js.map +1 -0
- package/package.json +9 -7
- package/tsup.config.ts +1 -0
package/CHANGELOG.md
ADDED
package/dist/esm/index.js
CHANGED
|
@@ -17,7 +17,7 @@ var __privateMethod = (obj, member, method) => {
|
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
// src/dates/date-factory.ts
|
|
20
|
-
import { camel, convertPhrase } from "@autometa/phrases";
|
|
20
|
+
import { camel, convertPhrase, collapse } from "@autometa/phrases";
|
|
21
21
|
|
|
22
22
|
// src/dates/midnight.ts
|
|
23
23
|
function midnight() {
|
|
@@ -27,72 +27,130 @@ function midnight() {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// src/dates/date-factory.ts
|
|
30
|
-
|
|
30
|
+
import { AutomationError, raise } from "@autometa/errors";
|
|
31
|
+
import { ConfirmDefined, ConfirmLengthAtLeast } from "@autometa/asserters";
|
|
32
|
+
var _extractTimeFromPhrase, extractTimeFromPhrase_fn, _extractFutureFromPhrase, extractFutureFromPhrase_fn, _extractPastFromPhrase, extractPastFromPhrase_fn, _addYears, addYears_fn, _addMonths, addMonths_fn, _addWeeks, addWeeks_fn, _addDays, addDays_fn, _addSeconds, addSeconds_fn, _addMilliseconds, addMilliseconds_fn, _addHours, addHours_fn, _addMinutes, addMinutes_fn;
|
|
31
33
|
var DateFactory = class {
|
|
32
34
|
constructor() {
|
|
33
|
-
__privateAdd(this,
|
|
35
|
+
__privateAdd(this, _extractTimeFromPhrase);
|
|
36
|
+
__privateAdd(this, _extractFutureFromPhrase);
|
|
37
|
+
__privateAdd(this, _extractPastFromPhrase);
|
|
38
|
+
__privateAdd(this, _addYears);
|
|
39
|
+
__privateAdd(this, _addMonths);
|
|
40
|
+
__privateAdd(this, _addWeeks);
|
|
34
41
|
__privateAdd(this, _addDays);
|
|
35
42
|
__privateAdd(this, _addSeconds);
|
|
36
43
|
__privateAdd(this, _addMilliseconds);
|
|
37
44
|
__privateAdd(this, _addHours);
|
|
38
45
|
__privateAdd(this, _addMinutes);
|
|
39
46
|
this.phraseMap = /* @__PURE__ */ new Map([
|
|
40
|
-
["
|
|
41
|
-
["
|
|
42
|
-
["
|
|
43
|
-
["
|
|
44
|
-
["
|
|
45
|
-
["
|
|
46
|
-
["
|
|
47
|
-
["
|
|
48
|
-
["
|
|
49
|
-
["
|
|
47
|
+
["now", () => this.make(0, "days")],
|
|
48
|
+
["beforeYesterday", () => this.make(-2, "days")],
|
|
49
|
+
["yesterday", () => this.make(-1, "days")],
|
|
50
|
+
["today", () => this.make(0, "days")],
|
|
51
|
+
["tomorrow", () => this.make(1, "days")],
|
|
52
|
+
["afterTomorrow", () => this.make(2, "days")],
|
|
53
|
+
["nextWeek", () => this.make(7, "days")],
|
|
54
|
+
["lastWeek", () => this.make(-7, "days")],
|
|
55
|
+
["nextFortnight", () => this.make(14, "days")],
|
|
56
|
+
["lastFortnight", () => this.make(-14, "days")],
|
|
57
|
+
["midnight", midnight]
|
|
50
58
|
]);
|
|
51
59
|
}
|
|
52
|
-
|
|
60
|
+
fromPhraseSafe(phrase) {
|
|
53
61
|
const name = convertPhrase(phrase, camel);
|
|
54
62
|
if (this.phraseMap.has(name)) {
|
|
55
|
-
return this.phraseMap.get(name);
|
|
63
|
+
return this.phraseMap.get(name)?.call(this);
|
|
56
64
|
}
|
|
57
|
-
const matchDay = __privateMethod(this,
|
|
65
|
+
const matchDay = __privateMethod(this, _extractTimeFromPhrase, extractTimeFromPhrase_fn).call(this, phrase);
|
|
58
66
|
if (matchDay) {
|
|
59
67
|
return matchDay;
|
|
60
68
|
}
|
|
61
69
|
const parsed = new Date(phrase);
|
|
62
|
-
if (
|
|
63
|
-
return
|
|
64
|
-
|
|
70
|
+
if (isNaN(parsed.getTime())) {
|
|
71
|
+
return new Date(Date.parse(phrase));
|
|
72
|
+
}
|
|
73
|
+
return parsed;
|
|
65
74
|
}
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
fromPhrase(phrase) {
|
|
76
|
+
const result = this.fromPhraseSafe(phrase);
|
|
77
|
+
if (result) {
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
raise(
|
|
81
|
+
`Could not parse date from phrase ${phrase}. Please use a valid date string or a phrase from the following list: ${Array.from(
|
|
82
|
+
this.phraseMap.keys()
|
|
83
|
+
).join(", ")}`
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
make(timeOffset, timeunit) {
|
|
87
|
+
const unit = timeunit.endsWith("s") ? timeunit : `${timeunit}s`;
|
|
88
|
+
switch (unit) {
|
|
89
|
+
case "years":
|
|
90
|
+
return __privateMethod(this, _addYears, addYears_fn).call(this, timeOffset);
|
|
91
|
+
case "months":
|
|
92
|
+
return __privateMethod(this, _addMonths, addMonths_fn).call(this, timeOffset);
|
|
93
|
+
case "weeks":
|
|
94
|
+
return __privateMethod(this, _addWeeks, addWeeks_fn).call(this, timeOffset);
|
|
68
95
|
case "days":
|
|
69
|
-
return __privateMethod(this, _addDays, addDays_fn).call(this,
|
|
96
|
+
return __privateMethod(this, _addDays, addDays_fn).call(this, timeOffset);
|
|
70
97
|
case "seconds":
|
|
71
|
-
return __privateMethod(this, _addSeconds, addSeconds_fn).call(this,
|
|
98
|
+
return __privateMethod(this, _addSeconds, addSeconds_fn).call(this, timeOffset);
|
|
72
99
|
case "milliseconds":
|
|
73
|
-
return __privateMethod(this, _addMilliseconds, addMilliseconds_fn).call(this,
|
|
100
|
+
return __privateMethod(this, _addMilliseconds, addMilliseconds_fn).call(this, timeOffset);
|
|
74
101
|
case "hours":
|
|
75
|
-
return __privateMethod(this, _addHours, addHours_fn).call(this,
|
|
102
|
+
return __privateMethod(this, _addHours, addHours_fn).call(this, timeOffset);
|
|
76
103
|
case "minutes":
|
|
77
|
-
return __privateMethod(this, _addMinutes, addMinutes_fn).call(this,
|
|
104
|
+
return __privateMethod(this, _addMinutes, addMinutes_fn).call(this, timeOffset);
|
|
78
105
|
default:
|
|
79
|
-
throw new
|
|
80
|
-
`Invalid timeunit ${timeunit}, options are 'days', 'seconds', 'milliseconds', 'hours', 'minutes'
|
|
106
|
+
throw new AutomationError(
|
|
107
|
+
`Invalid timeunit ${timeunit}, options are 'days', 'seconds', 'milliseconds', 'hours', 'minutes'. Non plural equivalents such as 'day' or 'week' are also accepted.`
|
|
81
108
|
);
|
|
82
109
|
}
|
|
83
110
|
}
|
|
84
111
|
};
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
112
|
+
_extractTimeFromPhrase = new WeakSet();
|
|
113
|
+
extractTimeFromPhrase_fn = function(phrase) {
|
|
114
|
+
return __privateMethod(this, _extractFutureFromPhrase, extractFutureFromPhrase_fn).call(this, phrase) ?? __privateMethod(this, _extractPastFromPhrase, extractPastFromPhrase_fn).call(this, phrase);
|
|
115
|
+
};
|
|
116
|
+
_extractFutureFromPhrase = new WeakSet();
|
|
117
|
+
extractFutureFromPhrase_fn = function(phrase) {
|
|
118
|
+
const pastPattern = /(\d+) (.*)s? from now?/;
|
|
119
|
+
const pastMatch = pastPattern.exec(phrase);
|
|
120
|
+
if (ConfirmDefined(pastMatch) && ConfirmLengthAtLeast(pastMatch, 3)) {
|
|
121
|
+
const [_, value, unit] = pastMatch;
|
|
122
|
+
const timeunit = convertPhrase(unit, collapse);
|
|
123
|
+
return this.make(Number(value), timeunit);
|
|
90
124
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
125
|
+
};
|
|
126
|
+
_extractPastFromPhrase = new WeakSet();
|
|
127
|
+
extractPastFromPhrase_fn = function(phrase) {
|
|
128
|
+
const pastPattern = /(\d+) (.*)(s)? ago?/gm;
|
|
129
|
+
const pastMatch = pastPattern.exec(phrase);
|
|
130
|
+
if (ConfirmDefined(pastMatch) && ConfirmLengthAtLeast(pastMatch, 3)) {
|
|
131
|
+
const [_, value, unit] = pastMatch;
|
|
132
|
+
const timeunit = convertPhrase(unit, camel);
|
|
133
|
+
return this.make(-Number(value), timeunit);
|
|
94
134
|
}
|
|
95
135
|
};
|
|
136
|
+
_addYears = new WeakSet();
|
|
137
|
+
addYears_fn = function(yearsOffset) {
|
|
138
|
+
const date = /* @__PURE__ */ new Date();
|
|
139
|
+
date.setFullYear(date.getFullYear() + yearsOffset);
|
|
140
|
+
return date;
|
|
141
|
+
};
|
|
142
|
+
_addMonths = new WeakSet();
|
|
143
|
+
addMonths_fn = function(monthOffset) {
|
|
144
|
+
const date = /* @__PURE__ */ new Date();
|
|
145
|
+
date.setMonth(date.getMonth() + monthOffset);
|
|
146
|
+
return date;
|
|
147
|
+
};
|
|
148
|
+
_addWeeks = new WeakSet();
|
|
149
|
+
addWeeks_fn = function(weekOffset) {
|
|
150
|
+
const date = /* @__PURE__ */ new Date();
|
|
151
|
+
date.setMonth(date.getMonth() + weekOffset / 4);
|
|
152
|
+
return date;
|
|
153
|
+
};
|
|
96
154
|
_addDays = new WeakSet();
|
|
97
155
|
addDays_fn = function(daysOffset) {
|
|
98
156
|
const date = /* @__PURE__ */ new Date();
|
|
@@ -206,6 +264,9 @@ var DatesObject = class {
|
|
|
206
264
|
get fmt() {
|
|
207
265
|
return __privateGet(this, _fmt);
|
|
208
266
|
}
|
|
267
|
+
get now() {
|
|
268
|
+
return __privateGet(this, _factory).phraseMap.get("now");
|
|
269
|
+
}
|
|
209
270
|
get beforeYesterday() {
|
|
210
271
|
return __privateGet(this, _factory).phraseMap.get("beforeYesterday");
|
|
211
272
|
}
|
|
@@ -239,6 +300,9 @@ var DatesObject = class {
|
|
|
239
300
|
fromPhrase(phrase) {
|
|
240
301
|
return __privateGet(this, _factory).fromPhrase(phrase);
|
|
241
302
|
}
|
|
303
|
+
fromPhraseSafe(phrase) {
|
|
304
|
+
return __privateGet(this, _factory).fromPhraseSafe(phrase);
|
|
305
|
+
}
|
|
242
306
|
make(timeOffset, timeUnit) {
|
|
243
307
|
return __privateGet(this, _factory).make(timeOffset, timeUnit);
|
|
244
308
|
}
|
|
@@ -247,6 +311,55 @@ _factory = new WeakMap();
|
|
|
247
311
|
_iso = new WeakMap();
|
|
248
312
|
_fmt = new WeakMap();
|
|
249
313
|
var Dates = new DatesObject();
|
|
314
|
+
|
|
315
|
+
// src/time/time.ts
|
|
316
|
+
import { AssertKey } from "@autometa/asserters";
|
|
317
|
+
import { camel as camel2, convertPhrase as convertPhrase2 } from "@autometa/phrases";
|
|
318
|
+
var TimeDiff = class {
|
|
319
|
+
minutes(date1, date2) {
|
|
320
|
+
return this.millis(date1, date2) / 6e4;
|
|
321
|
+
}
|
|
322
|
+
seconds(date1, date2) {
|
|
323
|
+
return this.millis(date1, date2) / 1e3;
|
|
324
|
+
}
|
|
325
|
+
millis(date1, date2) {
|
|
326
|
+
const d1 = new Date(date1).getTime();
|
|
327
|
+
const d2 = new Date(date2).getTime();
|
|
328
|
+
return Math.abs(Math.round(d2 - d1));
|
|
329
|
+
}
|
|
330
|
+
days(date1, date2) {
|
|
331
|
+
return this.millis(date1, date2) / 864e5;
|
|
332
|
+
}
|
|
333
|
+
hours(date1, date2) {
|
|
334
|
+
return this.millis(date1, date2) / 36e5;
|
|
335
|
+
}
|
|
336
|
+
weeks(date1, date2) {
|
|
337
|
+
return this.millis(date1, date2) / 6048e5;
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
var _diff;
|
|
341
|
+
var TimeObject = class {
|
|
342
|
+
constructor() {
|
|
343
|
+
__privateAdd(this, _diff, new TimeDiff());
|
|
344
|
+
}
|
|
345
|
+
get diff() {
|
|
346
|
+
return __privateGet(this, _diff);
|
|
347
|
+
}
|
|
348
|
+
fromPhrase(phrase) {
|
|
349
|
+
const propertyKey = convertPhrase2(phrase, camel2);
|
|
350
|
+
AssertKey(this.diff, propertyKey);
|
|
351
|
+
return Time.diff[propertyKey];
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
_diff = new WeakMap();
|
|
355
|
+
var Time = new TimeObject();
|
|
250
356
|
export {
|
|
251
|
-
|
|
357
|
+
DateFactory,
|
|
358
|
+
Dates,
|
|
359
|
+
FmtDateFactory,
|
|
360
|
+
IsoDateFactory,
|
|
361
|
+
Time,
|
|
362
|
+
TimeDiff,
|
|
363
|
+
TimeObject
|
|
252
364
|
};
|
|
365
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dates/date-factory.ts","../../src/dates/midnight.ts","../../src/dates/iso-date-factory.ts","../../src/dates/formatted-date-factory.ts","../../src/dates/dates.ts","../../src/time/time.ts"],"sourcesContent":["import { TimeUnit, camel, convertPhrase, collapse } from \"@autometa/phrases\";\nimport { midnight } from \"./midnight\";\nimport { AutomationError, raise } from \"@autometa/errors\";\nimport { ConfirmDefined, ConfirmLengthAtLeast } from \"@autometa/asserters\";\n\nexport class DateFactory {\n phraseMap = new Map<string, () => Date>([\n [\"now\", () => this.make(0, \"days\")],\n [\"beforeYesterday\", () => this.make(-2, \"days\")],\n [\"yesterday\", () => this.make(-1, \"days\")],\n [\"today\", () => this.make(0, \"days\")],\n [\"tomorrow\", () => this.make(1, \"days\")],\n [\"afterTomorrow\", () => this.make(2, \"days\")],\n [\"nextWeek\", () => this.make(7, \"days\")],\n [\"lastWeek\", () => this.make(-7, \"days\")],\n [\"nextFortnight\", () => this.make(14, \"days\")],\n [\"lastFortnight\", () => this.make(-14, \"days\")],\n [\"midnight\", midnight]\n ]);\n\n fromPhraseSafe(phrase: string) {\n const name = convertPhrase(phrase, camel);\n if (this.phraseMap.has(name)) {\n return this.phraseMap.get(name)?.call(this);\n }\n const matchDay = this.#extractTimeFromPhrase(phrase);\n if (matchDay) {\n return matchDay;\n }\n const parsed = new Date(phrase);\n if (isNaN(parsed.getTime())) {\n return new Date(Date.parse(phrase));\n }\n return parsed;\n }\n fromPhrase(phrase: string) {\n const result = this.fromPhraseSafe(phrase);\n if (result) {\n return result;\n }\n raise(\n `Could not parse date from phrase ${phrase}. Please use a valid date string or a phrase from the following list: ${Array.from(\n this.phraseMap.keys()\n ).join(\", \")}`\n );\n }\n make(timeOffset: number, timeunit: TimeUnit) {\n const unit = timeunit.endsWith(\"s\") ? timeunit : `${timeunit}s`;\n switch (unit) {\n case \"years\":\n return this.#addYears(timeOffset);\n case \"months\":\n return this.#addMonths(timeOffset);\n case \"weeks\":\n return this.#addWeeks(timeOffset);\n case \"days\":\n return this.#addDays(timeOffset);\n case \"seconds\":\n return this.#addSeconds(timeOffset);\n case \"milliseconds\":\n return this.#addMilliseconds(timeOffset);\n case \"hours\":\n return this.#addHours(timeOffset);\n case \"minutes\":\n return this.#addMinutes(timeOffset);\n default:\n throw new AutomationError(\n `Invalid timeunit ${timeunit}, options are 'days', 'seconds', 'milliseconds', 'hours', 'minutes'. Non plural equivalents such as 'day' or 'week' are also accepted.`\n );\n }\n }\n #extractTimeFromPhrase(phrase: string) {\n return (\n this.#extractFutureFromPhrase(phrase) ??\n this.#extractPastFromPhrase(phrase)\n );\n }\n #extractFutureFromPhrase(phrase: string) {\n const pastPattern = /(\\d+) (.*)s? from now?/;\n const pastMatch = pastPattern.exec(phrase);\n\n if (ConfirmDefined(pastMatch) && ConfirmLengthAtLeast(pastMatch, 3)) {\n const [_, value, unit] = pastMatch;\n const timeunit = convertPhrase(unit, collapse) as TimeUnit;\n return this.make(Number(value), timeunit);\n }\n }\n #extractPastFromPhrase(phrase: string) {\n const pastPattern = /(\\d+) (.*)(s)? ago?/gm;\n const pastMatch = pastPattern.exec(phrase);\n if (ConfirmDefined(pastMatch) && ConfirmLengthAtLeast(pastMatch, 3)) {\n const [_, value, unit] = pastMatch;\n const timeunit = convertPhrase(unit, camel) as TimeUnit;\n return this.make(-Number(value), timeunit);\n }\n }\n #addYears(yearsOffset: number) {\n const date = new Date();\n date.setFullYear(date.getFullYear() + yearsOffset);\n return date;\n }\n #addMonths(monthOffset: number) {\n const date = new Date();\n date.setMonth(date.getMonth() + monthOffset);\n return date;\n }\n #addWeeks(weekOffset: number) {\n const date = new Date();\n date.setMonth(date.getMonth() + weekOffset / 4);\n return date;\n }\n #addDays(daysOffset: number) {\n const date = new Date();\n date.setDate(date.getDate() + daysOffset);\n return date;\n }\n\n #addSeconds(secondsOffset: number) {\n const date = new Date();\n date.setSeconds(date.getSeconds() + secondsOffset);\n return date;\n }\n\n #addMilliseconds(millisecondsOffset: number) {\n const date = new Date();\n date.setMilliseconds(date.getMilliseconds() + millisecondsOffset);\n return date;\n }\n #addHours(hoursOffset: number) {\n const date = new Date();\n date.setHours(date.getHours() + hoursOffset);\n return date;\n }\n #addMinutes(minutesOffset: number) {\n const date = new Date();\n date.setMinutes(date.getMinutes() + minutesOffset);\n return date;\n }\n}\n","\nexport function midnight() {\n const date = new Date();\n date.setHours(0, 0, 0, 0);\n return date;\n}\n","import { TimeUnit } from '@autometa/phrases';\nimport { midnight } from './midnight';\nimport { DateFactory } from './date-factory';\n\n\nexport class IsoDateFactory {\n constructor(readonly dateFactory: DateFactory) { }\n phraseMap = new Map<string, string>([\n ['beforeYesterday', this.make(-2, 'days')],\n ['yesterday', this.make(-1, 'days')],\n ['today', this.make(0, 'days')],\n ['tomorrow', this.make(1, 'days')],\n ['afterTomorrow', this.make(2, 'days')],\n ['nextWeek', this.make(7, 'days')],\n ['lastWeek', this.make(-7, 'days')],\n ['nextFortnight', this.make(14, 'days')],\n ['lastFortnight', this.make(-14, 'days')],\n ['midnight', midnight().toISOString()],\n ]);\n make(daysOffset: number, timeunit: TimeUnit) {\n return this.dateFactory.make(daysOffset, timeunit).toISOString();\n }\n fromPhrase(phrase: string) {\n return this.dateFactory.fromPhrase(phrase)?.toISOString();\n }\n\n get beforeYesterday() {\n return this.phraseMap.get('beforeYesterday');\n }\n get yesterday() {\n return this.phraseMap.get('yesterday');\n }\n get today() {\n return this.phraseMap.get('today');\n }\n get tomorrow() {\n return this.phraseMap.get('tomorrow');\n }\n get afterTomorrow() {\n return this.phraseMap.get('afterTomorrow');\n }\n get midnight() {\n return this.phraseMap.get('midnight');\n }\n get lastWeek() {\n return this.phraseMap.get('lastWeek');\n }\n get nextWeek() {\n return this.phraseMap.get('nextWeek');\n }\n get lastFortnight() {\n return this.phraseMap.get('lastFortnight');\n }\n get nextFortnight() {\n return this.phraseMap.get('nextFortnight');\n }\n}\n","import { TimeUnit } from '@autometa/phrases';\nimport { DateFactory } from './date-factory';\n\n\nexport class FmtDateFactory {\n constructor(readonly dateFactory: DateFactory) { }\n make(daysOffset: number, timeunit: TimeUnit) {\n return this.dateFactory\n .make(daysOffset, timeunit)\n .toISOString()\n .split('T')[0];\n }\n fromPhrase(phrase: string) {\n return this.dateFactory.fromPhrase(phrase)?.toISOString().split('T')[0];\n }\n}\n","import { DateFactory } from \"./date-factory\";\nimport { IsoDateFactory } from \"./iso-date-factory\";\nimport { FmtDateFactory } from \"./formatted-date-factory\";\nimport { TimeUnit } from \"@autometa/phrases\";\n\nexport class DatesObject {\n #factory: DateFactory = new DateFactory();\n #iso = new IsoDateFactory(this.#factory);\n #fmt = new FmtDateFactory(this.#factory);\n get iso() {\n return this.#iso;\n }\n\n get fmt() {\n return this.#fmt;\n }\n\n get now(){\n return this.#factory.phraseMap.get(\"now\");\n\n }\n\n get beforeYesterday() {\n return this.#factory.phraseMap.get(\"beforeYesterday\");\n }\n\n get yesterday() {\n return this.#factory.phraseMap.get(\"yesterday\");\n }\n\n get today() {\n return this.#factory.phraseMap.get(\"today\");\n }\n\n get tomorrow() {\n return this.#factory.phraseMap.get(\"tomorrow\");\n }\n\n get afterTomorrow() {\n return this.#factory.phraseMap.get(\"afterTomorrow\");\n }\n\n get midnight() {\n return this.#factory.phraseMap.get(\"midnight\");\n }\n\n get lastWeek() {\n return this.#factory.phraseMap.get(\"lastWeek\");\n }\n\n get nextWeek() {\n return this.#factory.phraseMap.get(\"nextWeek\");\n }\n\n get lastFortnight() {\n return this.#factory.phraseMap.get(\"lastFortnight\");\n }\n\n get nextFortnight() {\n return this.#factory.phraseMap.get(\"nextFortnight\");\n }\n\n fromPhrase(phrase: string) {\n return this.#factory.fromPhrase(phrase);\n }\n \n fromPhraseSafe(phrase: string) {\n return this.#factory.fromPhraseSafe(phrase);\n }\n\n make(timeOffset: number, timeUnit: TimeUnit) {\n return this.#factory.make(timeOffset, timeUnit);\n }\n}\n\nexport const Dates = new DatesObject();","import { AssertKey } from \"@autometa/asserters\";\nimport { camel, convertPhrase } from \"@autometa/phrases\";\ntype TimeDiffFn = (date1: Date, date2: Date) => number;\n\nexport class TimeDiff {\n minutes(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 60000;\n }\n seconds(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 1000;\n }\n millis(date1: Date, date2: Date) {\n const d1 = new Date(date1).getTime();\n const d2 = new Date(date2).getTime();\n return Math.abs(Math.round(d2 - d1));\n }\n days(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 86400000;\n }\n hours(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 3600000;\n }\n weeks(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 604800000;\n }\n}\n\nexport class TimeObject {\n #diff = new TimeDiff();\n get diff() {\n return this.#diff;\n }\n\n fromPhrase(phrase: string): TimeDiffFn {\n const propertyKey = convertPhrase(phrase, camel);\n AssertKey(this.diff, propertyKey);\n return Time.diff[propertyKey];\n }\n}\n\nexport const Time = new TimeObject();\n"],"mappings":"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","names":["camel","convertPhrase","convertPhrase","camel"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { TimeUnit } from '@autometa/phrases';
|
|
2
|
+
|
|
3
|
+
declare class DateFactory {
|
|
4
|
+
#private;
|
|
5
|
+
phraseMap: Map<string, () => Date>;
|
|
6
|
+
fromPhraseSafe(phrase: string): Date | undefined;
|
|
7
|
+
fromPhrase(phrase: string): Date;
|
|
8
|
+
make(timeOffset: number, timeunit: TimeUnit): Date;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare class IsoDateFactory {
|
|
12
|
+
readonly dateFactory: DateFactory;
|
|
13
|
+
constructor(dateFactory: DateFactory);
|
|
14
|
+
phraseMap: Map<string, string>;
|
|
15
|
+
make(daysOffset: number, timeunit: TimeUnit): string;
|
|
16
|
+
fromPhrase(phrase: string): string;
|
|
17
|
+
get beforeYesterday(): string | undefined;
|
|
18
|
+
get yesterday(): string | undefined;
|
|
19
|
+
get today(): string | undefined;
|
|
20
|
+
get tomorrow(): string | undefined;
|
|
21
|
+
get afterTomorrow(): string | undefined;
|
|
22
|
+
get midnight(): string | undefined;
|
|
23
|
+
get lastWeek(): string | undefined;
|
|
24
|
+
get nextWeek(): string | undefined;
|
|
25
|
+
get lastFortnight(): string | undefined;
|
|
26
|
+
get nextFortnight(): string | undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
declare class FmtDateFactory {
|
|
30
|
+
readonly dateFactory: DateFactory;
|
|
31
|
+
constructor(dateFactory: DateFactory);
|
|
32
|
+
make(daysOffset: number, timeunit: TimeUnit): string;
|
|
33
|
+
fromPhrase(phrase: string): string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
declare class DatesObject {
|
|
37
|
+
#private;
|
|
38
|
+
get iso(): IsoDateFactory;
|
|
39
|
+
get fmt(): FmtDateFactory;
|
|
40
|
+
get now(): (() => Date) | undefined;
|
|
41
|
+
get beforeYesterday(): (() => Date) | undefined;
|
|
42
|
+
get yesterday(): (() => Date) | undefined;
|
|
43
|
+
get today(): (() => Date) | undefined;
|
|
44
|
+
get tomorrow(): (() => Date) | undefined;
|
|
45
|
+
get afterTomorrow(): (() => Date) | undefined;
|
|
46
|
+
get midnight(): (() => Date) | undefined;
|
|
47
|
+
get lastWeek(): (() => Date) | undefined;
|
|
48
|
+
get nextWeek(): (() => Date) | undefined;
|
|
49
|
+
get lastFortnight(): (() => Date) | undefined;
|
|
50
|
+
get nextFortnight(): (() => Date) | undefined;
|
|
51
|
+
fromPhrase(phrase: string): Date;
|
|
52
|
+
fromPhraseSafe(phrase: string): Date | undefined;
|
|
53
|
+
make(timeOffset: number, timeUnit: TimeUnit): Date;
|
|
54
|
+
}
|
|
55
|
+
declare const Dates: DatesObject;
|
|
56
|
+
|
|
57
|
+
type TimeDiffFn = (date1: Date, date2: Date) => number;
|
|
58
|
+
declare class TimeDiff {
|
|
59
|
+
minutes(date1: Date, date2: Date): number;
|
|
60
|
+
seconds(date1: Date, date2: Date): number;
|
|
61
|
+
millis(date1: Date, date2: Date): number;
|
|
62
|
+
days(date1: Date, date2: Date): number;
|
|
63
|
+
hours(date1: Date, date2: Date): number;
|
|
64
|
+
weeks(date1: Date, date2: Date): number;
|
|
65
|
+
}
|
|
66
|
+
declare class TimeObject {
|
|
67
|
+
#private;
|
|
68
|
+
get diff(): TimeDiff;
|
|
69
|
+
fromPhrase(phrase: string): TimeDiffFn;
|
|
70
|
+
}
|
|
71
|
+
declare const Time: TimeObject;
|
|
72
|
+
|
|
73
|
+
export { DateFactory, Dates, FmtDateFactory, IsoDateFactory, Time, TimeDiff, TimeObject };
|
package/dist/index.d.ts
CHANGED
|
@@ -2,9 +2,10 @@ import { TimeUnit } from '@autometa/phrases';
|
|
|
2
2
|
|
|
3
3
|
declare class DateFactory {
|
|
4
4
|
#private;
|
|
5
|
-
phraseMap: Map<string, Date>;
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
phraseMap: Map<string, () => Date>;
|
|
6
|
+
fromPhraseSafe(phrase: string): Date | undefined;
|
|
7
|
+
fromPhrase(phrase: string): Date;
|
|
8
|
+
make(timeOffset: number, timeunit: TimeUnit): Date;
|
|
8
9
|
}
|
|
9
10
|
|
|
10
11
|
declare class IsoDateFactory {
|
|
@@ -12,7 +13,7 @@ declare class IsoDateFactory {
|
|
|
12
13
|
constructor(dateFactory: DateFactory);
|
|
13
14
|
phraseMap: Map<string, string>;
|
|
14
15
|
make(daysOffset: number, timeunit: TimeUnit): string;
|
|
15
|
-
fromPhrase(phrase: string): string
|
|
16
|
+
fromPhrase(phrase: string): string;
|
|
16
17
|
get beforeYesterday(): string | undefined;
|
|
17
18
|
get yesterday(): string | undefined;
|
|
18
19
|
get today(): string | undefined;
|
|
@@ -29,26 +30,44 @@ declare class FmtDateFactory {
|
|
|
29
30
|
readonly dateFactory: DateFactory;
|
|
30
31
|
constructor(dateFactory: DateFactory);
|
|
31
32
|
make(daysOffset: number, timeunit: TimeUnit): string;
|
|
32
|
-
fromPhrase(phrase: string): string
|
|
33
|
+
fromPhrase(phrase: string): string;
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
declare class DatesObject {
|
|
36
37
|
#private;
|
|
37
38
|
get iso(): IsoDateFactory;
|
|
38
39
|
get fmt(): FmtDateFactory;
|
|
39
|
-
get
|
|
40
|
-
get
|
|
41
|
-
get
|
|
42
|
-
get
|
|
43
|
-
get
|
|
44
|
-
get
|
|
45
|
-
get
|
|
46
|
-
get
|
|
47
|
-
get
|
|
48
|
-
get
|
|
49
|
-
|
|
40
|
+
get now(): (() => Date) | undefined;
|
|
41
|
+
get beforeYesterday(): (() => Date) | undefined;
|
|
42
|
+
get yesterday(): (() => Date) | undefined;
|
|
43
|
+
get today(): (() => Date) | undefined;
|
|
44
|
+
get tomorrow(): (() => Date) | undefined;
|
|
45
|
+
get afterTomorrow(): (() => Date) | undefined;
|
|
46
|
+
get midnight(): (() => Date) | undefined;
|
|
47
|
+
get lastWeek(): (() => Date) | undefined;
|
|
48
|
+
get nextWeek(): (() => Date) | undefined;
|
|
49
|
+
get lastFortnight(): (() => Date) | undefined;
|
|
50
|
+
get nextFortnight(): (() => Date) | undefined;
|
|
51
|
+
fromPhrase(phrase: string): Date;
|
|
52
|
+
fromPhraseSafe(phrase: string): Date | undefined;
|
|
50
53
|
make(timeOffset: number, timeUnit: TimeUnit): Date;
|
|
51
54
|
}
|
|
52
55
|
declare const Dates: DatesObject;
|
|
53
56
|
|
|
54
|
-
|
|
57
|
+
type TimeDiffFn = (date1: Date, date2: Date) => number;
|
|
58
|
+
declare class TimeDiff {
|
|
59
|
+
minutes(date1: Date, date2: Date): number;
|
|
60
|
+
seconds(date1: Date, date2: Date): number;
|
|
61
|
+
millis(date1: Date, date2: Date): number;
|
|
62
|
+
days(date1: Date, date2: Date): number;
|
|
63
|
+
hours(date1: Date, date2: Date): number;
|
|
64
|
+
weeks(date1: Date, date2: Date): number;
|
|
65
|
+
}
|
|
66
|
+
declare class TimeObject {
|
|
67
|
+
#private;
|
|
68
|
+
get diff(): TimeDiff;
|
|
69
|
+
fromPhrase(phrase: string): TimeDiffFn;
|
|
70
|
+
}
|
|
71
|
+
declare const Time: TimeObject;
|
|
72
|
+
|
|
73
|
+
export { DateFactory, Dates, FmtDateFactory, IsoDateFactory, Time, TimeDiff, TimeObject };
|
package/dist/index.js
CHANGED
|
@@ -37,7 +37,13 @@ var __privateMethod = (obj, member, method) => {
|
|
|
37
37
|
// src/index.ts
|
|
38
38
|
var src_exports = {};
|
|
39
39
|
__export(src_exports, {
|
|
40
|
-
|
|
40
|
+
DateFactory: () => DateFactory,
|
|
41
|
+
Dates: () => Dates,
|
|
42
|
+
FmtDateFactory: () => FmtDateFactory,
|
|
43
|
+
IsoDateFactory: () => IsoDateFactory,
|
|
44
|
+
Time: () => Time,
|
|
45
|
+
TimeDiff: () => TimeDiff,
|
|
46
|
+
TimeObject: () => TimeObject
|
|
41
47
|
});
|
|
42
48
|
module.exports = __toCommonJS(src_exports);
|
|
43
49
|
|
|
@@ -52,72 +58,130 @@ function midnight() {
|
|
|
52
58
|
}
|
|
53
59
|
|
|
54
60
|
// src/dates/date-factory.ts
|
|
55
|
-
var
|
|
61
|
+
var import_errors = require("@autometa/errors");
|
|
62
|
+
var import_asserters = require("@autometa/asserters");
|
|
63
|
+
var _extractTimeFromPhrase, extractTimeFromPhrase_fn, _extractFutureFromPhrase, extractFutureFromPhrase_fn, _extractPastFromPhrase, extractPastFromPhrase_fn, _addYears, addYears_fn, _addMonths, addMonths_fn, _addWeeks, addWeeks_fn, _addDays, addDays_fn, _addSeconds, addSeconds_fn, _addMilliseconds, addMilliseconds_fn, _addHours, addHours_fn, _addMinutes, addMinutes_fn;
|
|
56
64
|
var DateFactory = class {
|
|
57
65
|
constructor() {
|
|
58
|
-
__privateAdd(this,
|
|
66
|
+
__privateAdd(this, _extractTimeFromPhrase);
|
|
67
|
+
__privateAdd(this, _extractFutureFromPhrase);
|
|
68
|
+
__privateAdd(this, _extractPastFromPhrase);
|
|
69
|
+
__privateAdd(this, _addYears);
|
|
70
|
+
__privateAdd(this, _addMonths);
|
|
71
|
+
__privateAdd(this, _addWeeks);
|
|
59
72
|
__privateAdd(this, _addDays);
|
|
60
73
|
__privateAdd(this, _addSeconds);
|
|
61
74
|
__privateAdd(this, _addMilliseconds);
|
|
62
75
|
__privateAdd(this, _addHours);
|
|
63
76
|
__privateAdd(this, _addMinutes);
|
|
64
77
|
this.phraseMap = /* @__PURE__ */ new Map([
|
|
65
|
-
["
|
|
66
|
-
["
|
|
67
|
-
["
|
|
68
|
-
["
|
|
69
|
-
["
|
|
70
|
-
["
|
|
71
|
-
["
|
|
72
|
-
["
|
|
73
|
-
["
|
|
74
|
-
["
|
|
78
|
+
["now", () => this.make(0, "days")],
|
|
79
|
+
["beforeYesterday", () => this.make(-2, "days")],
|
|
80
|
+
["yesterday", () => this.make(-1, "days")],
|
|
81
|
+
["today", () => this.make(0, "days")],
|
|
82
|
+
["tomorrow", () => this.make(1, "days")],
|
|
83
|
+
["afterTomorrow", () => this.make(2, "days")],
|
|
84
|
+
["nextWeek", () => this.make(7, "days")],
|
|
85
|
+
["lastWeek", () => this.make(-7, "days")],
|
|
86
|
+
["nextFortnight", () => this.make(14, "days")],
|
|
87
|
+
["lastFortnight", () => this.make(-14, "days")],
|
|
88
|
+
["midnight", midnight]
|
|
75
89
|
]);
|
|
76
90
|
}
|
|
77
|
-
|
|
91
|
+
fromPhraseSafe(phrase) {
|
|
78
92
|
const name = (0, import_phrases.convertPhrase)(phrase, import_phrases.camel);
|
|
79
93
|
if (this.phraseMap.has(name)) {
|
|
80
|
-
return this.phraseMap.get(name);
|
|
94
|
+
return this.phraseMap.get(name)?.call(this);
|
|
81
95
|
}
|
|
82
|
-
const matchDay = __privateMethod(this,
|
|
96
|
+
const matchDay = __privateMethod(this, _extractTimeFromPhrase, extractTimeFromPhrase_fn).call(this, phrase);
|
|
83
97
|
if (matchDay) {
|
|
84
98
|
return matchDay;
|
|
85
99
|
}
|
|
86
100
|
const parsed = new Date(phrase);
|
|
87
|
-
if (
|
|
88
|
-
return
|
|
89
|
-
|
|
101
|
+
if (isNaN(parsed.getTime())) {
|
|
102
|
+
return new Date(Date.parse(phrase));
|
|
103
|
+
}
|
|
104
|
+
return parsed;
|
|
90
105
|
}
|
|
91
|
-
|
|
92
|
-
|
|
106
|
+
fromPhrase(phrase) {
|
|
107
|
+
const result = this.fromPhraseSafe(phrase);
|
|
108
|
+
if (result) {
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
(0, import_errors.raise)(
|
|
112
|
+
`Could not parse date from phrase ${phrase}. Please use a valid date string or a phrase from the following list: ${Array.from(
|
|
113
|
+
this.phraseMap.keys()
|
|
114
|
+
).join(", ")}`
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
make(timeOffset, timeunit) {
|
|
118
|
+
const unit = timeunit.endsWith("s") ? timeunit : `${timeunit}s`;
|
|
119
|
+
switch (unit) {
|
|
120
|
+
case "years":
|
|
121
|
+
return __privateMethod(this, _addYears, addYears_fn).call(this, timeOffset);
|
|
122
|
+
case "months":
|
|
123
|
+
return __privateMethod(this, _addMonths, addMonths_fn).call(this, timeOffset);
|
|
124
|
+
case "weeks":
|
|
125
|
+
return __privateMethod(this, _addWeeks, addWeeks_fn).call(this, timeOffset);
|
|
93
126
|
case "days":
|
|
94
|
-
return __privateMethod(this, _addDays, addDays_fn).call(this,
|
|
127
|
+
return __privateMethod(this, _addDays, addDays_fn).call(this, timeOffset);
|
|
95
128
|
case "seconds":
|
|
96
|
-
return __privateMethod(this, _addSeconds, addSeconds_fn).call(this,
|
|
129
|
+
return __privateMethod(this, _addSeconds, addSeconds_fn).call(this, timeOffset);
|
|
97
130
|
case "milliseconds":
|
|
98
|
-
return __privateMethod(this, _addMilliseconds, addMilliseconds_fn).call(this,
|
|
131
|
+
return __privateMethod(this, _addMilliseconds, addMilliseconds_fn).call(this, timeOffset);
|
|
99
132
|
case "hours":
|
|
100
|
-
return __privateMethod(this, _addHours, addHours_fn).call(this,
|
|
133
|
+
return __privateMethod(this, _addHours, addHours_fn).call(this, timeOffset);
|
|
101
134
|
case "minutes":
|
|
102
|
-
return __privateMethod(this, _addMinutes, addMinutes_fn).call(this,
|
|
135
|
+
return __privateMethod(this, _addMinutes, addMinutes_fn).call(this, timeOffset);
|
|
103
136
|
default:
|
|
104
|
-
throw new
|
|
105
|
-
`Invalid timeunit ${timeunit}, options are 'days', 'seconds', 'milliseconds', 'hours', 'minutes'
|
|
137
|
+
throw new import_errors.AutomationError(
|
|
138
|
+
`Invalid timeunit ${timeunit}, options are 'days', 'seconds', 'milliseconds', 'hours', 'minutes'. Non plural equivalents such as 'day' or 'week' are also accepted.`
|
|
106
139
|
);
|
|
107
140
|
}
|
|
108
141
|
}
|
|
109
142
|
};
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
143
|
+
_extractTimeFromPhrase = new WeakSet();
|
|
144
|
+
extractTimeFromPhrase_fn = function(phrase) {
|
|
145
|
+
return __privateMethod(this, _extractFutureFromPhrase, extractFutureFromPhrase_fn).call(this, phrase) ?? __privateMethod(this, _extractPastFromPhrase, extractPastFromPhrase_fn).call(this, phrase);
|
|
146
|
+
};
|
|
147
|
+
_extractFutureFromPhrase = new WeakSet();
|
|
148
|
+
extractFutureFromPhrase_fn = function(phrase) {
|
|
149
|
+
const pastPattern = /(\d+) (.*)s? from now?/;
|
|
150
|
+
const pastMatch = pastPattern.exec(phrase);
|
|
151
|
+
if ((0, import_asserters.ConfirmDefined)(pastMatch) && (0, import_asserters.ConfirmLengthAtLeast)(pastMatch, 3)) {
|
|
152
|
+
const [_, value, unit] = pastMatch;
|
|
153
|
+
const timeunit = (0, import_phrases.convertPhrase)(unit, import_phrases.collapse);
|
|
154
|
+
return this.make(Number(value), timeunit);
|
|
115
155
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
156
|
+
};
|
|
157
|
+
_extractPastFromPhrase = new WeakSet();
|
|
158
|
+
extractPastFromPhrase_fn = function(phrase) {
|
|
159
|
+
const pastPattern = /(\d+) (.*)(s)? ago?/gm;
|
|
160
|
+
const pastMatch = pastPattern.exec(phrase);
|
|
161
|
+
if ((0, import_asserters.ConfirmDefined)(pastMatch) && (0, import_asserters.ConfirmLengthAtLeast)(pastMatch, 3)) {
|
|
162
|
+
const [_, value, unit] = pastMatch;
|
|
163
|
+
const timeunit = (0, import_phrases.convertPhrase)(unit, import_phrases.camel);
|
|
164
|
+
return this.make(-Number(value), timeunit);
|
|
119
165
|
}
|
|
120
166
|
};
|
|
167
|
+
_addYears = new WeakSet();
|
|
168
|
+
addYears_fn = function(yearsOffset) {
|
|
169
|
+
const date = /* @__PURE__ */ new Date();
|
|
170
|
+
date.setFullYear(date.getFullYear() + yearsOffset);
|
|
171
|
+
return date;
|
|
172
|
+
};
|
|
173
|
+
_addMonths = new WeakSet();
|
|
174
|
+
addMonths_fn = function(monthOffset) {
|
|
175
|
+
const date = /* @__PURE__ */ new Date();
|
|
176
|
+
date.setMonth(date.getMonth() + monthOffset);
|
|
177
|
+
return date;
|
|
178
|
+
};
|
|
179
|
+
_addWeeks = new WeakSet();
|
|
180
|
+
addWeeks_fn = function(weekOffset) {
|
|
181
|
+
const date = /* @__PURE__ */ new Date();
|
|
182
|
+
date.setMonth(date.getMonth() + weekOffset / 4);
|
|
183
|
+
return date;
|
|
184
|
+
};
|
|
121
185
|
_addDays = new WeakSet();
|
|
122
186
|
addDays_fn = function(daysOffset) {
|
|
123
187
|
const date = /* @__PURE__ */ new Date();
|
|
@@ -231,6 +295,9 @@ var DatesObject = class {
|
|
|
231
295
|
get fmt() {
|
|
232
296
|
return __privateGet(this, _fmt);
|
|
233
297
|
}
|
|
298
|
+
get now() {
|
|
299
|
+
return __privateGet(this, _factory).phraseMap.get("now");
|
|
300
|
+
}
|
|
234
301
|
get beforeYesterday() {
|
|
235
302
|
return __privateGet(this, _factory).phraseMap.get("beforeYesterday");
|
|
236
303
|
}
|
|
@@ -264,6 +331,9 @@ var DatesObject = class {
|
|
|
264
331
|
fromPhrase(phrase) {
|
|
265
332
|
return __privateGet(this, _factory).fromPhrase(phrase);
|
|
266
333
|
}
|
|
334
|
+
fromPhraseSafe(phrase) {
|
|
335
|
+
return __privateGet(this, _factory).fromPhraseSafe(phrase);
|
|
336
|
+
}
|
|
267
337
|
make(timeOffset, timeUnit) {
|
|
268
338
|
return __privateGet(this, _factory).make(timeOffset, timeUnit);
|
|
269
339
|
}
|
|
@@ -272,7 +342,56 @@ _factory = new WeakMap();
|
|
|
272
342
|
_iso = new WeakMap();
|
|
273
343
|
_fmt = new WeakMap();
|
|
274
344
|
var Dates = new DatesObject();
|
|
345
|
+
|
|
346
|
+
// src/time/time.ts
|
|
347
|
+
var import_asserters2 = require("@autometa/asserters");
|
|
348
|
+
var import_phrases2 = require("@autometa/phrases");
|
|
349
|
+
var TimeDiff = class {
|
|
350
|
+
minutes(date1, date2) {
|
|
351
|
+
return this.millis(date1, date2) / 6e4;
|
|
352
|
+
}
|
|
353
|
+
seconds(date1, date2) {
|
|
354
|
+
return this.millis(date1, date2) / 1e3;
|
|
355
|
+
}
|
|
356
|
+
millis(date1, date2) {
|
|
357
|
+
const d1 = new Date(date1).getTime();
|
|
358
|
+
const d2 = new Date(date2).getTime();
|
|
359
|
+
return Math.abs(Math.round(d2 - d1));
|
|
360
|
+
}
|
|
361
|
+
days(date1, date2) {
|
|
362
|
+
return this.millis(date1, date2) / 864e5;
|
|
363
|
+
}
|
|
364
|
+
hours(date1, date2) {
|
|
365
|
+
return this.millis(date1, date2) / 36e5;
|
|
366
|
+
}
|
|
367
|
+
weeks(date1, date2) {
|
|
368
|
+
return this.millis(date1, date2) / 6048e5;
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
var _diff;
|
|
372
|
+
var TimeObject = class {
|
|
373
|
+
constructor() {
|
|
374
|
+
__privateAdd(this, _diff, new TimeDiff());
|
|
375
|
+
}
|
|
376
|
+
get diff() {
|
|
377
|
+
return __privateGet(this, _diff);
|
|
378
|
+
}
|
|
379
|
+
fromPhrase(phrase) {
|
|
380
|
+
const propertyKey = (0, import_phrases2.convertPhrase)(phrase, import_phrases2.camel);
|
|
381
|
+
(0, import_asserters2.AssertKey)(this.diff, propertyKey);
|
|
382
|
+
return Time.diff[propertyKey];
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
_diff = new WeakMap();
|
|
386
|
+
var Time = new TimeObject();
|
|
275
387
|
// Annotate the CommonJS export names for ESM import in node:
|
|
276
388
|
0 && (module.exports = {
|
|
277
|
-
|
|
389
|
+
DateFactory,
|
|
390
|
+
Dates,
|
|
391
|
+
FmtDateFactory,
|
|
392
|
+
IsoDateFactory,
|
|
393
|
+
Time,
|
|
394
|
+
TimeDiff,
|
|
395
|
+
TimeObject
|
|
278
396
|
});
|
|
397
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/dates/date-factory.ts","../src/dates/midnight.ts","../src/dates/iso-date-factory.ts","../src/dates/formatted-date-factory.ts","../src/dates/dates.ts","../src/time/time.ts"],"sourcesContent":["export * from './dates'\nexport * from './time'","import { TimeUnit, camel, convertPhrase, collapse } from \"@autometa/phrases\";\nimport { midnight } from \"./midnight\";\nimport { AutomationError, raise } from \"@autometa/errors\";\nimport { ConfirmDefined, ConfirmLengthAtLeast } from \"@autometa/asserters\";\n\nexport class DateFactory {\n phraseMap = new Map<string, () => Date>([\n [\"now\", () => this.make(0, \"days\")],\n [\"beforeYesterday\", () => this.make(-2, \"days\")],\n [\"yesterday\", () => this.make(-1, \"days\")],\n [\"today\", () => this.make(0, \"days\")],\n [\"tomorrow\", () => this.make(1, \"days\")],\n [\"afterTomorrow\", () => this.make(2, \"days\")],\n [\"nextWeek\", () => this.make(7, \"days\")],\n [\"lastWeek\", () => this.make(-7, \"days\")],\n [\"nextFortnight\", () => this.make(14, \"days\")],\n [\"lastFortnight\", () => this.make(-14, \"days\")],\n [\"midnight\", midnight]\n ]);\n\n fromPhraseSafe(phrase: string) {\n const name = convertPhrase(phrase, camel);\n if (this.phraseMap.has(name)) {\n return this.phraseMap.get(name)?.call(this);\n }\n const matchDay = this.#extractTimeFromPhrase(phrase);\n if (matchDay) {\n return matchDay;\n }\n const parsed = new Date(phrase);\n if (isNaN(parsed.getTime())) {\n return new Date(Date.parse(phrase));\n }\n return parsed;\n }\n fromPhrase(phrase: string) {\n const result = this.fromPhraseSafe(phrase);\n if (result) {\n return result;\n }\n raise(\n `Could not parse date from phrase ${phrase}. Please use a valid date string or a phrase from the following list: ${Array.from(\n this.phraseMap.keys()\n ).join(\", \")}`\n );\n }\n make(timeOffset: number, timeunit: TimeUnit) {\n const unit = timeunit.endsWith(\"s\") ? timeunit : `${timeunit}s`;\n switch (unit) {\n case \"years\":\n return this.#addYears(timeOffset);\n case \"months\":\n return this.#addMonths(timeOffset);\n case \"weeks\":\n return this.#addWeeks(timeOffset);\n case \"days\":\n return this.#addDays(timeOffset);\n case \"seconds\":\n return this.#addSeconds(timeOffset);\n case \"milliseconds\":\n return this.#addMilliseconds(timeOffset);\n case \"hours\":\n return this.#addHours(timeOffset);\n case \"minutes\":\n return this.#addMinutes(timeOffset);\n default:\n throw new AutomationError(\n `Invalid timeunit ${timeunit}, options are 'days', 'seconds', 'milliseconds', 'hours', 'minutes'. Non plural equivalents such as 'day' or 'week' are also accepted.`\n );\n }\n }\n #extractTimeFromPhrase(phrase: string) {\n return (\n this.#extractFutureFromPhrase(phrase) ??\n this.#extractPastFromPhrase(phrase)\n );\n }\n #extractFutureFromPhrase(phrase: string) {\n const pastPattern = /(\\d+) (.*)s? from now?/;\n const pastMatch = pastPattern.exec(phrase);\n\n if (ConfirmDefined(pastMatch) && ConfirmLengthAtLeast(pastMatch, 3)) {\n const [_, value, unit] = pastMatch;\n const timeunit = convertPhrase(unit, collapse) as TimeUnit;\n return this.make(Number(value), timeunit);\n }\n }\n #extractPastFromPhrase(phrase: string) {\n const pastPattern = /(\\d+) (.*)(s)? ago?/gm;\n const pastMatch = pastPattern.exec(phrase);\n if (ConfirmDefined(pastMatch) && ConfirmLengthAtLeast(pastMatch, 3)) {\n const [_, value, unit] = pastMatch;\n const timeunit = convertPhrase(unit, camel) as TimeUnit;\n return this.make(-Number(value), timeunit);\n }\n }\n #addYears(yearsOffset: number) {\n const date = new Date();\n date.setFullYear(date.getFullYear() + yearsOffset);\n return date;\n }\n #addMonths(monthOffset: number) {\n const date = new Date();\n date.setMonth(date.getMonth() + monthOffset);\n return date;\n }\n #addWeeks(weekOffset: number) {\n const date = new Date();\n date.setMonth(date.getMonth() + weekOffset / 4);\n return date;\n }\n #addDays(daysOffset: number) {\n const date = new Date();\n date.setDate(date.getDate() + daysOffset);\n return date;\n }\n\n #addSeconds(secondsOffset: number) {\n const date = new Date();\n date.setSeconds(date.getSeconds() + secondsOffset);\n return date;\n }\n\n #addMilliseconds(millisecondsOffset: number) {\n const date = new Date();\n date.setMilliseconds(date.getMilliseconds() + millisecondsOffset);\n return date;\n }\n #addHours(hoursOffset: number) {\n const date = new Date();\n date.setHours(date.getHours() + hoursOffset);\n return date;\n }\n #addMinutes(minutesOffset: number) {\n const date = new Date();\n date.setMinutes(date.getMinutes() + minutesOffset);\n return date;\n }\n}\n","\nexport function midnight() {\n const date = new Date();\n date.setHours(0, 0, 0, 0);\n return date;\n}\n","import { TimeUnit } from '@autometa/phrases';\nimport { midnight } from './midnight';\nimport { DateFactory } from './date-factory';\n\n\nexport class IsoDateFactory {\n constructor(readonly dateFactory: DateFactory) { }\n phraseMap = new Map<string, string>([\n ['beforeYesterday', this.make(-2, 'days')],\n ['yesterday', this.make(-1, 'days')],\n ['today', this.make(0, 'days')],\n ['tomorrow', this.make(1, 'days')],\n ['afterTomorrow', this.make(2, 'days')],\n ['nextWeek', this.make(7, 'days')],\n ['lastWeek', this.make(-7, 'days')],\n ['nextFortnight', this.make(14, 'days')],\n ['lastFortnight', this.make(-14, 'days')],\n ['midnight', midnight().toISOString()],\n ]);\n make(daysOffset: number, timeunit: TimeUnit) {\n return this.dateFactory.make(daysOffset, timeunit).toISOString();\n }\n fromPhrase(phrase: string) {\n return this.dateFactory.fromPhrase(phrase)?.toISOString();\n }\n\n get beforeYesterday() {\n return this.phraseMap.get('beforeYesterday');\n }\n get yesterday() {\n return this.phraseMap.get('yesterday');\n }\n get today() {\n return this.phraseMap.get('today');\n }\n get tomorrow() {\n return this.phraseMap.get('tomorrow');\n }\n get afterTomorrow() {\n return this.phraseMap.get('afterTomorrow');\n }\n get midnight() {\n return this.phraseMap.get('midnight');\n }\n get lastWeek() {\n return this.phraseMap.get('lastWeek');\n }\n get nextWeek() {\n return this.phraseMap.get('nextWeek');\n }\n get lastFortnight() {\n return this.phraseMap.get('lastFortnight');\n }\n get nextFortnight() {\n return this.phraseMap.get('nextFortnight');\n }\n}\n","import { TimeUnit } from '@autometa/phrases';\nimport { DateFactory } from './date-factory';\n\n\nexport class FmtDateFactory {\n constructor(readonly dateFactory: DateFactory) { }\n make(daysOffset: number, timeunit: TimeUnit) {\n return this.dateFactory\n .make(daysOffset, timeunit)\n .toISOString()\n .split('T')[0];\n }\n fromPhrase(phrase: string) {\n return this.dateFactory.fromPhrase(phrase)?.toISOString().split('T')[0];\n }\n}\n","import { DateFactory } from \"./date-factory\";\nimport { IsoDateFactory } from \"./iso-date-factory\";\nimport { FmtDateFactory } from \"./formatted-date-factory\";\nimport { TimeUnit } from \"@autometa/phrases\";\n\nexport class DatesObject {\n #factory: DateFactory = new DateFactory();\n #iso = new IsoDateFactory(this.#factory);\n #fmt = new FmtDateFactory(this.#factory);\n get iso() {\n return this.#iso;\n }\n\n get fmt() {\n return this.#fmt;\n }\n\n get now(){\n return this.#factory.phraseMap.get(\"now\");\n\n }\n\n get beforeYesterday() {\n return this.#factory.phraseMap.get(\"beforeYesterday\");\n }\n\n get yesterday() {\n return this.#factory.phraseMap.get(\"yesterday\");\n }\n\n get today() {\n return this.#factory.phraseMap.get(\"today\");\n }\n\n get tomorrow() {\n return this.#factory.phraseMap.get(\"tomorrow\");\n }\n\n get afterTomorrow() {\n return this.#factory.phraseMap.get(\"afterTomorrow\");\n }\n\n get midnight() {\n return this.#factory.phraseMap.get(\"midnight\");\n }\n\n get lastWeek() {\n return this.#factory.phraseMap.get(\"lastWeek\");\n }\n\n get nextWeek() {\n return this.#factory.phraseMap.get(\"nextWeek\");\n }\n\n get lastFortnight() {\n return this.#factory.phraseMap.get(\"lastFortnight\");\n }\n\n get nextFortnight() {\n return this.#factory.phraseMap.get(\"nextFortnight\");\n }\n\n fromPhrase(phrase: string) {\n return this.#factory.fromPhrase(phrase);\n }\n \n fromPhraseSafe(phrase: string) {\n return this.#factory.fromPhraseSafe(phrase);\n }\n\n make(timeOffset: number, timeUnit: TimeUnit) {\n return this.#factory.make(timeOffset, timeUnit);\n }\n}\n\nexport const Dates = new DatesObject();","import { AssertKey } from \"@autometa/asserters\";\nimport { camel, convertPhrase } from \"@autometa/phrases\";\ntype TimeDiffFn = (date1: Date, date2: Date) => number;\n\nexport class TimeDiff {\n minutes(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 60000;\n }\n seconds(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 1000;\n }\n millis(date1: Date, date2: Date) {\n const d1 = new Date(date1).getTime();\n const d2 = new Date(date2).getTime();\n return Math.abs(Math.round(d2 - d1));\n }\n days(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 86400000;\n }\n hours(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 3600000;\n }\n weeks(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 604800000;\n }\n}\n\nexport class TimeObject {\n #diff = new TimeDiff();\n get diff() {\n return this.#diff;\n }\n\n fromPhrase(phrase: string): TimeDiffFn {\n const propertyKey = convertPhrase(phrase, camel);\n AssertKey(this.diff, propertyKey);\n return Time.diff[propertyKey];\n }\n}\n\nexport const Time = new TimeObject();\n"],"mappings":"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","names":["import_asserters","import_phrases"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autometa/datetime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Date and Time utilities for Autometa",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -18,22 +18,24 @@
|
|
|
18
18
|
"@types/uuid": "^9.0.1",
|
|
19
19
|
"@typescript-eslint/eslint-plugin": "^5.54.1",
|
|
20
20
|
"@typescript-eslint/parser": "^5.54.1",
|
|
21
|
+
"@vitest/coverage-istanbul": "^0.31.0",
|
|
21
22
|
"eslint": "^8.37.0",
|
|
22
|
-
"eslint-config-custom": "0.
|
|
23
|
+
"eslint-config-custom": "0.6.0",
|
|
23
24
|
"eslint-config-prettier": "^8.3.0",
|
|
24
25
|
"rimraf": "^4.1.2",
|
|
25
26
|
"tsconfig": " *",
|
|
26
|
-
"tsup": "^
|
|
27
|
+
"tsup": "^7.2.0",
|
|
27
28
|
"typescript": "^4.9.5",
|
|
28
|
-
"vitest": "
|
|
29
|
+
"vitest": "0.33.0"
|
|
29
30
|
},
|
|
30
31
|
"dependencies": {
|
|
31
|
-
"@autometa/asserters": "^0.
|
|
32
|
-
"@autometa/errors": "^0.
|
|
33
|
-
"@autometa/phrases": "^0.
|
|
32
|
+
"@autometa/asserters": "^0.1.0",
|
|
33
|
+
"@autometa/errors": "^0.1.0",
|
|
34
|
+
"@autometa/phrases": "^0.1.0"
|
|
34
35
|
},
|
|
35
36
|
"scripts": {
|
|
36
37
|
"test": "vitest run --passWithNoTests",
|
|
38
|
+
"coverage": "vitest run --coverage",
|
|
37
39
|
"prettify": "prettier --config .prettierrc 'src/**/*.ts' --write",
|
|
38
40
|
"lint": "eslint . --max-warnings 0",
|
|
39
41
|
"lint:fix": "eslint . --fix",
|
package/tsup.config.ts
CHANGED