@alanszp/relative-date 16.5.0 → 16.5.4
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.
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { DateParser } from "./DateParser";
|
|
2
2
|
declare type Operator = "+" | "-";
|
|
3
|
-
declare
|
|
3
|
+
declare const SINGLE_TIME_UNITS: readonly ["d", "w", "m", "q", "s", "t", "y", "b"];
|
|
4
|
+
declare type SingleTimeUnit = (typeof SINGLE_TIME_UNITS)[number];
|
|
5
|
+
declare type TimeUnit = SingleTimeUnit | "day" | "days" | "week" | "weeks" | "month" | "months" | "bimester" | "bimesters" | "quarter" | "quarters" | "semester" | "semesters" | "third" | "thirds" | "year" | "years";
|
|
4
6
|
declare type RelativeDate = `${Operator}${number}${TimeUnit}` | "now";
|
|
5
7
|
export declare enum RelativeDateUnit {
|
|
6
8
|
DAYS = "days",
|
|
@@ -13,6 +15,8 @@ export declare type RelativeDateDecomposition = {
|
|
|
13
15
|
operator: Operator;
|
|
14
16
|
quantity: number;
|
|
15
17
|
unit: RelativeDateUnit;
|
|
18
|
+
originalQuantity: number;
|
|
19
|
+
originalUnit: SingleTimeUnit;
|
|
16
20
|
};
|
|
17
21
|
export declare class RelativeDateParser implements DateParser {
|
|
18
22
|
private static readonly RELATIVE_DATE_REGEX;
|
|
@@ -22,5 +26,6 @@ export declare class RelativeDateParser implements DateParser {
|
|
|
22
26
|
private static defaultRelativeDateConverter;
|
|
23
27
|
private static relativeDateMap;
|
|
24
28
|
private parseRelativeDate;
|
|
29
|
+
private narrowTimeUnit;
|
|
25
30
|
}
|
|
26
31
|
export {};
|
|
@@ -5,6 +5,7 @@ exports.RelativeDateParser = exports.RelativeDateUnit = void 0;
|
|
|
5
5
|
const lodash_1 = require("lodash");
|
|
6
6
|
const date_fns_1 = require("date-fns");
|
|
7
7
|
const InvalidDateExpression_1 = require("../errors/InvalidDateExpression");
|
|
8
|
+
const SINGLE_TIME_UNITS = ["d", "w", "m", "q", "s", "t", "y", "b"];
|
|
8
9
|
var RelativeDateUnit;
|
|
9
10
|
(function (RelativeDateUnit) {
|
|
10
11
|
RelativeDateUnit["DAYS"] = "days";
|
|
@@ -14,6 +15,7 @@ var RelativeDateUnit;
|
|
|
14
15
|
RelativeDateUnit["NOW"] = "now";
|
|
15
16
|
})(RelativeDateUnit = exports.RelativeDateUnit || (exports.RelativeDateUnit = {}));
|
|
16
17
|
const PLUS = "+";
|
|
18
|
+
const isSingleTimeUnit = (unit) => SINGLE_TIME_UNITS.includes(unit);
|
|
17
19
|
class RelativeDateParser {
|
|
18
20
|
toJSDate(raw) {
|
|
19
21
|
if (raw === RelativeDateUnit.NOW) {
|
|
@@ -23,15 +25,29 @@ class RelativeDateParser {
|
|
|
23
25
|
}
|
|
24
26
|
decompose(raw) {
|
|
25
27
|
if (raw === RelativeDateUnit.NOW) {
|
|
26
|
-
return {
|
|
28
|
+
return {
|
|
29
|
+
operator: "+",
|
|
30
|
+
quantity: 0,
|
|
31
|
+
unit: RelativeDateUnit.NOW,
|
|
32
|
+
originalQuantity: 0,
|
|
33
|
+
originalUnit: "d",
|
|
34
|
+
};
|
|
27
35
|
}
|
|
28
36
|
const match = raw.match(RelativeDateParser.RELATIVE_DATE_REGEX);
|
|
29
37
|
if (!match) {
|
|
30
38
|
throw new InvalidDateExpression_1.InvalidDateExpression(raw);
|
|
31
39
|
}
|
|
32
40
|
const [, operator, rawQuantity, rawTimeUnit] = match;
|
|
33
|
-
const
|
|
34
|
-
|
|
41
|
+
const narrowTimeUnit = this.narrowTimeUnit(rawTimeUnit);
|
|
42
|
+
const originalQuantity = Number.parseInt(rawQuantity, 10);
|
|
43
|
+
const { unit, quantity } = RelativeDateParser.relativeDateMap[narrowTimeUnit](originalQuantity);
|
|
44
|
+
return {
|
|
45
|
+
operator: operator,
|
|
46
|
+
quantity,
|
|
47
|
+
unit,
|
|
48
|
+
originalQuantity,
|
|
49
|
+
originalUnit: narrowTimeUnit,
|
|
50
|
+
};
|
|
35
51
|
}
|
|
36
52
|
static isRelativeDate(raw) {
|
|
37
53
|
return RelativeDateParser.RELATIVE_DATE_REGEX.test(raw);
|
|
@@ -44,58 +60,26 @@ class RelativeDateParser {
|
|
|
44
60
|
const op = operator === PLUS ? date_fns_1.add : date_fns_1.sub;
|
|
45
61
|
return op((0, lodash_1.now)(), { [unit]: quantity });
|
|
46
62
|
}
|
|
63
|
+
narrowTimeUnit(raw) {
|
|
64
|
+
const firstChar = raw.charAt(0);
|
|
65
|
+
if (isSingleTimeUnit(firstChar)) {
|
|
66
|
+
return firstChar;
|
|
67
|
+
}
|
|
68
|
+
const _never = firstChar;
|
|
69
|
+
return _never;
|
|
70
|
+
}
|
|
47
71
|
}
|
|
48
72
|
exports.RelativeDateParser = RelativeDateParser;
|
|
49
73
|
_a = RelativeDateParser;
|
|
50
74
|
RelativeDateParser.RELATIVE_DATE_REGEX = /^\s*([+-])\s*(\d+)\s*(d|day|days|w|week|weeks|m|month|months|b|bimester|bimesters|q|quarter|quarters|s|semester|semesters|t|third|thirds|y|year|years)\s*$|^now\s*$/;
|
|
51
75
|
RelativeDateParser.relativeDateMap = {
|
|
52
76
|
d: _a.defaultRelativeDateConverter(RelativeDateUnit.DAYS),
|
|
53
|
-
day: _a.defaultRelativeDateConverter(RelativeDateUnit.DAYS),
|
|
54
|
-
days: _a.defaultRelativeDateConverter(RelativeDateUnit.DAYS),
|
|
55
77
|
w: _a.defaultRelativeDateConverter(RelativeDateUnit.WEEKS),
|
|
56
|
-
week: _a.defaultRelativeDateConverter(RelativeDateUnit.WEEKS),
|
|
57
|
-
weeks: _a.defaultRelativeDateConverter(RelativeDateUnit.WEEKS),
|
|
58
78
|
m: _a.defaultRelativeDateConverter(RelativeDateUnit.MONTHS),
|
|
59
|
-
month: _a.defaultRelativeDateConverter(RelativeDateUnit.MONTHS),
|
|
60
|
-
months: _a.defaultRelativeDateConverter(RelativeDateUnit.MONTHS),
|
|
61
79
|
b: (q) => ({ unit: RelativeDateUnit.MONTHS, quantity: q * 2 }),
|
|
62
|
-
bimester: (q) => ({
|
|
63
|
-
unit: RelativeDateUnit.MONTHS,
|
|
64
|
-
quantity: q * 2,
|
|
65
|
-
}),
|
|
66
|
-
bimesters: (q) => ({
|
|
67
|
-
unit: RelativeDateUnit.MONTHS,
|
|
68
|
-
quantity: q * 2,
|
|
69
|
-
}),
|
|
70
80
|
q: (q) => ({ unit: RelativeDateUnit.MONTHS, quantity: q * 3 }),
|
|
71
|
-
quarter: (q) => ({
|
|
72
|
-
unit: RelativeDateUnit.MONTHS,
|
|
73
|
-
quantity: q * 3,
|
|
74
|
-
}),
|
|
75
|
-
quarters: (q) => ({
|
|
76
|
-
unit: RelativeDateUnit.MONTHS,
|
|
77
|
-
quantity: q * 3,
|
|
78
|
-
}),
|
|
79
81
|
s: (q) => ({ unit: RelativeDateUnit.MONTHS, quantity: q * 6 }),
|
|
80
|
-
semester: (q) => ({
|
|
81
|
-
unit: RelativeDateUnit.MONTHS,
|
|
82
|
-
quantity: q * 6,
|
|
83
|
-
}),
|
|
84
|
-
semesters: (q) => ({
|
|
85
|
-
unit: RelativeDateUnit.MONTHS,
|
|
86
|
-
quantity: q * 6,
|
|
87
|
-
}),
|
|
88
82
|
t: (q) => ({ unit: RelativeDateUnit.MONTHS, quantity: q * 4 }),
|
|
89
|
-
third: (q) => ({
|
|
90
|
-
unit: RelativeDateUnit.MONTHS,
|
|
91
|
-
quantity: q * 4,
|
|
92
|
-
}),
|
|
93
|
-
thirds: (q) => ({
|
|
94
|
-
unit: RelativeDateUnit.MONTHS,
|
|
95
|
-
quantity: q * 4,
|
|
96
|
-
}),
|
|
97
83
|
y: _a.defaultRelativeDateConverter(RelativeDateUnit.YEARS),
|
|
98
|
-
year: _a.defaultRelativeDateConverter(RelativeDateUnit.YEARS),
|
|
99
|
-
years: _a.defaultRelativeDateConverter(RelativeDateUnit.YEARS),
|
|
100
84
|
};
|
|
101
85
|
//# sourceMappingURL=RelativeDateParser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelativeDateParser.js","sourceRoot":"","sources":["../../src/date-parser/RelativeDateParser.ts"],"names":[],"mappings":";;;;AAAA,mCAA6B;AAE7B,uCAAoC;AACpC,2EAAwE;
|
|
1
|
+
{"version":3,"file":"RelativeDateParser.js","sourceRoot":"","sources":["../../src/date-parser/RelativeDateParser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alanszp/relative-date",
|
|
3
|
-
"version": "16.5.
|
|
3
|
+
"version": "16.5.4",
|
|
4
4
|
"description": "Relative date utils.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -31,5 +31,5 @@
|
|
|
31
31
|
"date-fns": "^2.28.0",
|
|
32
32
|
"jest": "^29.7.0"
|
|
33
33
|
},
|
|
34
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "8d1aacba9dbc946adcff7cf00a14ba0f08d4a061"
|
|
35
35
|
}
|