@alanszp/nunjucks-utils 20.0.3 → 20.2.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/dist/filters/dateDiff.d.ts +44 -0
- package/dist/filters/dateDiff.js +100 -0
- package/dist/filters/dateDiff.js.map +1 -0
- package/dist/filters/dateDiff.test.d.ts +1 -0
- package/dist/filters/dateDiff.test.js +183 -0
- package/dist/filters/dateDiff.test.js.map +1 -0
- package/dist/filters/dateFiltersIntegration.test.d.ts +1 -0
- package/dist/filters/dateFiltersIntegration.test.js +141 -0
- package/dist/filters/dateFiltersIntegration.test.js.map +1 -0
- package/dist/filters/index.d.ts +1 -0
- package/dist/filters/index.js +1 -0
- package/dist/filters/index.js.map +1 -1
- package/dist/registerFilters.js +2 -0
- package/dist/registerFilters.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare const diffUnits: readonly ["years", "months", "weeks", "days", "hours", "minutes", "seconds"];
|
|
2
|
+
export type DiffUnit = (typeof diffUnits)[number];
|
|
3
|
+
export interface DiffOptions {
|
|
4
|
+
signed?: boolean;
|
|
5
|
+
allowFuture?: boolean;
|
|
6
|
+
targetDate?: Date;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Calculates the difference between two dates in the specified unit.
|
|
10
|
+
* @param date1 - Start date (ISO string or Date)
|
|
11
|
+
* @param date2 - End date (ISO string or Date)
|
|
12
|
+
* @param unit - Time unit: years, months, weeks, days, hours, minutes, or seconds
|
|
13
|
+
* @param options - Optional configuration (signed, allowFuture, targetDate)
|
|
14
|
+
* @returns Number of units between dates (positive if date2 > date1)
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* diffBetween("2023-01-01", "2023-01-15", "days") // returns 14
|
|
18
|
+
* diffBetween("2023-01-01", "2023-06-01", "months") // returns 5
|
|
19
|
+
* diffBetween("2023-01-01", "2023-01-15", "days", { signed: true }) // returns 14
|
|
20
|
+
*/
|
|
21
|
+
export declare function diffBetween(date1: string | Date, date2: string | Date, unit?: DiffUnit, options?: DiffOptions): number;
|
|
22
|
+
/**
|
|
23
|
+
* Calculates the difference between a given date and now (or a target date).
|
|
24
|
+
* @param date - The date to calculate difference from (ISO string or Date)
|
|
25
|
+
* @param unit - Time unit: years, months, weeks, days, hours, minutes, or seconds
|
|
26
|
+
* @param options - Optional configuration (signed, allowFuture, targetDate)
|
|
27
|
+
* @returns Number of units between the date and now/targetDate
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* diffFromNow("2023-01-01", "days") // returns days since Jan 1, 2023
|
|
31
|
+
* diffFromNow("2025-01-01", "days", { signed: true }) // returns negative if date is in future
|
|
32
|
+
* diffFromNow("2023-01-01", "days", { targetDate: new Date("2023-01-15") }) // returns 14
|
|
33
|
+
* diffFromNow("2050-01-01", "days", { allowFuture: false }) // returns 0 (future date blocked)
|
|
34
|
+
*/
|
|
35
|
+
export declare function diffFromNow(date: string | Date, unit?: DiffUnit, options?: DiffOptions): number;
|
|
36
|
+
/**
|
|
37
|
+
* Alias for diffFromNow - maintained for backward compatibility with notification-service.
|
|
38
|
+
* Calculates the difference between a given date and now (or a target date).
|
|
39
|
+
* @param date - The date to calculate difference from (ISO string or Date)
|
|
40
|
+
* @param unit - Time unit: years, months, weeks, days, hours, minutes, or seconds
|
|
41
|
+
* @param options - Optional configuration (signed, allowFuture, targetDate)
|
|
42
|
+
* @returns Number of units between the date and now/targetDate
|
|
43
|
+
*/
|
|
44
|
+
export declare function diffFrom(date: string | Date, unit?: DiffUnit, options?: DiffOptions): number;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.diffUnits = void 0;
|
|
4
|
+
exports.diffBetween = diffBetween;
|
|
5
|
+
exports.diffFromNow = diffFromNow;
|
|
6
|
+
exports.diffFrom = diffFrom;
|
|
7
|
+
const date_fns_1 = require("date-fns");
|
|
8
|
+
const dateFunctions_1 = require("./dateFunctions");
|
|
9
|
+
exports.diffUnits = [
|
|
10
|
+
"years",
|
|
11
|
+
"months",
|
|
12
|
+
"weeks",
|
|
13
|
+
"days",
|
|
14
|
+
"hours",
|
|
15
|
+
"minutes",
|
|
16
|
+
"seconds",
|
|
17
|
+
];
|
|
18
|
+
const diffFnCalculate = {
|
|
19
|
+
years: date_fns_1.differenceInYears,
|
|
20
|
+
months: date_fns_1.differenceInMonths,
|
|
21
|
+
weeks: date_fns_1.differenceInWeeks,
|
|
22
|
+
days: date_fns_1.differenceInDays,
|
|
23
|
+
hours: date_fns_1.differenceInHours,
|
|
24
|
+
minutes: date_fns_1.differenceInMinutes,
|
|
25
|
+
seconds: date_fns_1.differenceInSeconds,
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Calculates the difference between two dates in the specified unit.
|
|
29
|
+
* @param date1 - Start date (ISO string or Date)
|
|
30
|
+
* @param date2 - End date (ISO string or Date)
|
|
31
|
+
* @param unit - Time unit: years, months, weeks, days, hours, minutes, or seconds
|
|
32
|
+
* @param options - Optional configuration (signed, allowFuture, targetDate)
|
|
33
|
+
* @returns Number of units between dates (positive if date2 > date1)
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* diffBetween("2023-01-01", "2023-01-15", "days") // returns 14
|
|
37
|
+
* diffBetween("2023-01-01", "2023-06-01", "months") // returns 5
|
|
38
|
+
* diffBetween("2023-01-01", "2023-01-15", "days", { signed: true }) // returns 14
|
|
39
|
+
*/
|
|
40
|
+
function diffBetween(date1, date2, unit = "days", options = {}) {
|
|
41
|
+
const start = (0, dateFunctions_1.parseDate)(date1);
|
|
42
|
+
const end = (0, dateFunctions_1.parseDate)(date2);
|
|
43
|
+
if (!start || !end)
|
|
44
|
+
return 0;
|
|
45
|
+
const calc = diffFnCalculate[unit];
|
|
46
|
+
if (!calc) {
|
|
47
|
+
return 0;
|
|
48
|
+
}
|
|
49
|
+
let diff = calc(end, start);
|
|
50
|
+
if (options.signed) {
|
|
51
|
+
return diff;
|
|
52
|
+
}
|
|
53
|
+
return Math.abs(diff);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Calculates the difference between a given date and now (or a target date).
|
|
57
|
+
* @param date - The date to calculate difference from (ISO string or Date)
|
|
58
|
+
* @param unit - Time unit: years, months, weeks, days, hours, minutes, or seconds
|
|
59
|
+
* @param options - Optional configuration (signed, allowFuture, targetDate)
|
|
60
|
+
* @returns Number of units between the date and now/targetDate
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* diffFromNow("2023-01-01", "days") // returns days since Jan 1, 2023
|
|
64
|
+
* diffFromNow("2025-01-01", "days", { signed: true }) // returns negative if date is in future
|
|
65
|
+
* diffFromNow("2023-01-01", "days", { targetDate: new Date("2023-01-15") }) // returns 14
|
|
66
|
+
* diffFromNow("2050-01-01", "days", { allowFuture: false }) // returns 0 (future date blocked)
|
|
67
|
+
*/
|
|
68
|
+
function diffFromNow(date, unit = "days", options = {}) {
|
|
69
|
+
var _a, _b;
|
|
70
|
+
const targetDate = (_a = options.targetDate) !== null && _a !== void 0 ? _a : new Date();
|
|
71
|
+
const allowFuture = (_b = options.allowFuture) !== null && _b !== void 0 ? _b : false;
|
|
72
|
+
const start = (0, dateFunctions_1.parseDate)(date);
|
|
73
|
+
const end = (0, dateFunctions_1.parseDate)(targetDate);
|
|
74
|
+
if (!start || !end)
|
|
75
|
+
return 0;
|
|
76
|
+
const calc = diffFnCalculate[unit];
|
|
77
|
+
if (!calc) {
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
let diff = calc(end, start);
|
|
81
|
+
if (options.signed) {
|
|
82
|
+
return diff;
|
|
83
|
+
}
|
|
84
|
+
if (!allowFuture && diff < 0) {
|
|
85
|
+
return 0;
|
|
86
|
+
}
|
|
87
|
+
return Math.abs(diff);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Alias for diffFromNow - maintained for backward compatibility with notification-service.
|
|
91
|
+
* Calculates the difference between a given date and now (or a target date).
|
|
92
|
+
* @param date - The date to calculate difference from (ISO string or Date)
|
|
93
|
+
* @param unit - Time unit: years, months, weeks, days, hours, minutes, or seconds
|
|
94
|
+
* @param options - Optional configuration (signed, allowFuture, targetDate)
|
|
95
|
+
* @returns Number of units between the date and now/targetDate
|
|
96
|
+
*/
|
|
97
|
+
function diffFrom(date, unit = "days", options = {}) {
|
|
98
|
+
return diffFromNow(date, unit, options);
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=dateDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateDiff.js","sourceRoot":"","sources":["../../src/filters/dateDiff.ts"],"names":[],"mappings":";;;AAoDA,kCAuBC;AAeD,kCA6BC;AAUD,4BAMC;AAvID,uCAQkB;AAClB,mDAA4C;AAE/B,QAAA,SAAS,GAAG;IACvB,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,SAAS;CACD,CAAC;AAUX,MAAM,eAAe,GAAmD;IACtE,KAAK,EAAE,4BAAiB;IACxB,MAAM,EAAE,6BAAkB;IAC1B,KAAK,EAAE,4BAAiB;IACxB,IAAI,EAAE,2BAAgB;IACtB,KAAK,EAAE,4BAAiB;IACxB,OAAO,EAAE,8BAAmB;IAC5B,OAAO,EAAE,8BAAmB;CAC7B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,SAAgB,WAAW,CACzB,KAAoB,EACpB,KAAoB,EACpB,OAAiB,MAAM,EACvB,UAAuB,EAAE;IAEzB,MAAM,KAAK,GAAG,IAAA,yBAAS,EAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAA,yBAAS,EAAC,KAAK,CAAC,CAAC;IAE7B,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC;IAE7B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE5B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,WAAW,CACzB,IAAmB,EACnB,OAAiB,MAAM,EACvB,UAAuB,EAAE;;IAEzB,MAAM,UAAU,GAAG,MAAA,OAAO,CAAC,UAAU,mCAAI,IAAI,IAAI,EAAE,CAAC;IACpD,MAAM,WAAW,GAAG,MAAA,OAAO,CAAC,WAAW,mCAAI,KAAK,CAAC;IAEjD,MAAM,KAAK,GAAG,IAAA,yBAAS,EAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAA,yBAAS,EAAC,UAAU,CAAC,CAAC;IAElC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC;IAE7B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE5B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,WAAW,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,QAAQ,CACtB,IAAmB,EACnB,OAAiB,MAAM,EACvB,UAAuB,EAAE;IAEzB,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const dateDiff_1 = require("./dateDiff");
|
|
4
|
+
describe("diffBetween", () => {
|
|
5
|
+
describe("days unit", () => {
|
|
6
|
+
it("should calculate difference in days between two dates", () => {
|
|
7
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-01", "2023-01-15", "days");
|
|
8
|
+
expect(result).toBe(14);
|
|
9
|
+
});
|
|
10
|
+
it("should calculate difference in days with ISO strings", () => {
|
|
11
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-01T00:00:00.000Z", "2023-01-10T00:00:00.000Z", "days");
|
|
12
|
+
expect(result).toBe(9);
|
|
13
|
+
});
|
|
14
|
+
it("should calculate difference in days with Date objects", () => {
|
|
15
|
+
const date1 = new Date(2023, 0, 1);
|
|
16
|
+
const date2 = new Date(2023, 0, 8);
|
|
17
|
+
const result = (0, dateDiff_1.diffBetween)(date1, date2, "days");
|
|
18
|
+
expect(result).toBe(7);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
describe("months unit", () => {
|
|
22
|
+
it("should calculate difference in months between two dates", () => {
|
|
23
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-15", "2023-06-15", "months");
|
|
24
|
+
expect(result).toBe(5);
|
|
25
|
+
});
|
|
26
|
+
it("should calculate difference in months across years", () => {
|
|
27
|
+
const result = (0, dateDiff_1.diffBetween)("2022-06-01", "2023-03-01", "months");
|
|
28
|
+
expect(result).toBe(9);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe("years unit", () => {
|
|
32
|
+
it("should calculate difference in years between two dates", () => {
|
|
33
|
+
const result = (0, dateDiff_1.diffBetween)("2020-03-15", "2023-03-15", "years");
|
|
34
|
+
expect(result).toBe(3);
|
|
35
|
+
});
|
|
36
|
+
it("should calculate partial years correctly", () => {
|
|
37
|
+
const result = (0, dateDiff_1.diffBetween)("2020-03-15", "2023-02-15", "years");
|
|
38
|
+
expect(result).toBe(2);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe("weeks unit", () => {
|
|
42
|
+
it("should calculate difference in weeks between two dates", () => {
|
|
43
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-01", "2023-01-22", "weeks");
|
|
44
|
+
expect(result).toBe(3);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe("hours unit", () => {
|
|
48
|
+
it("should calculate difference in hours between two dates", () => {
|
|
49
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-01T00:00:00", "2023-01-01T05:00:00", "hours");
|
|
50
|
+
expect(result).toBe(5);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe("minutes unit", () => {
|
|
54
|
+
it("should calculate difference in minutes between two dates", () => {
|
|
55
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-01T00:00:00", "2023-01-01T00:30:00", "minutes");
|
|
56
|
+
expect(result).toBe(30);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
describe("seconds unit", () => {
|
|
60
|
+
it("should calculate difference in seconds between two dates", () => {
|
|
61
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-01T00:00:00", "2023-01-01T00:00:45", "seconds");
|
|
62
|
+
expect(result).toBe(45);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe("signed option", () => {
|
|
66
|
+
it("should return positive difference when signed is true and date2 > date1", () => {
|
|
67
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-01", "2023-01-15", "days", {
|
|
68
|
+
signed: true,
|
|
69
|
+
});
|
|
70
|
+
expect(result).toBe(14);
|
|
71
|
+
});
|
|
72
|
+
it("should return negative difference when signed is true and date2 < date1", () => {
|
|
73
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-15", "2023-01-01", "days", {
|
|
74
|
+
signed: true,
|
|
75
|
+
});
|
|
76
|
+
expect(result).toBe(-14);
|
|
77
|
+
});
|
|
78
|
+
it("should return absolute difference when signed is false (default)", () => {
|
|
79
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-15", "2023-01-01", "days", {
|
|
80
|
+
signed: false,
|
|
81
|
+
});
|
|
82
|
+
expect(result).toBe(14);
|
|
83
|
+
});
|
|
84
|
+
it("should return absolute difference by default (unsigned)", () => {
|
|
85
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-15", "2023-01-01", "days");
|
|
86
|
+
expect(result).toBe(14);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe("invalid date handling", () => {
|
|
90
|
+
it("should return 0 for invalid first date", () => {
|
|
91
|
+
const result = (0, dateDiff_1.diffBetween)("not-a-date", "2023-01-15", "days");
|
|
92
|
+
expect(result).toBe(0);
|
|
93
|
+
});
|
|
94
|
+
it("should return 0 for invalid second date", () => {
|
|
95
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-01", "invalid", "days");
|
|
96
|
+
expect(result).toBe(0);
|
|
97
|
+
});
|
|
98
|
+
it("should return 0 for both dates invalid", () => {
|
|
99
|
+
const result = (0, dateDiff_1.diffBetween)("invalid1", "invalid2", "days");
|
|
100
|
+
expect(result).toBe(0);
|
|
101
|
+
});
|
|
102
|
+
it("should return 0 for null-like inputs", () => {
|
|
103
|
+
const result = (0, dateDiff_1.diffBetween)("", "2023-01-15", "days");
|
|
104
|
+
expect(result).toBe(0);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe("default unit", () => {
|
|
108
|
+
it("should default to days when unit is not specified", () => {
|
|
109
|
+
const result = (0, dateDiff_1.diffBetween)("2023-01-01", "2023-01-15");
|
|
110
|
+
expect(result).toBe(14);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
describe("diffFromNow", () => {
|
|
115
|
+
it("should calculate difference from now to past date", () => {
|
|
116
|
+
const pastDate = "2020-01-01";
|
|
117
|
+
const result = (0, dateDiff_1.diffFromNow)(pastDate, "days");
|
|
118
|
+
expect(result).toBeGreaterThan(0);
|
|
119
|
+
});
|
|
120
|
+
it("should return unsigned difference by default", () => {
|
|
121
|
+
const futureDate = "2050-01-01";
|
|
122
|
+
const result = (0, dateDiff_1.diffFromNow)(futureDate, "days");
|
|
123
|
+
expect(result).toBe(0);
|
|
124
|
+
});
|
|
125
|
+
it("should return 0 for future date when allowFuture is false (default)", () => {
|
|
126
|
+
const futureDate = "2050-01-01";
|
|
127
|
+
const result = (0, dateDiff_1.diffFromNow)(futureDate, "days", { allowFuture: false });
|
|
128
|
+
expect(result).toBe(0);
|
|
129
|
+
});
|
|
130
|
+
it("should return positive difference for future date when allowFuture is true", () => {
|
|
131
|
+
const futureDate = "2050-01-01";
|
|
132
|
+
const result = (0, dateDiff_1.diffFromNow)(futureDate, "days", { allowFuture: true });
|
|
133
|
+
expect(result).toBeGreaterThan(0);
|
|
134
|
+
});
|
|
135
|
+
it("should return positive difference for past date when allowFuture is false", () => {
|
|
136
|
+
const pastDate = "2020-01-01";
|
|
137
|
+
const result = (0, dateDiff_1.diffFromNow)(pastDate, "days", { allowFuture: false });
|
|
138
|
+
expect(result).toBeGreaterThan(0);
|
|
139
|
+
});
|
|
140
|
+
it("should return positive difference for past date when allowFuture is true", () => {
|
|
141
|
+
const pastDate = "2020-01-01";
|
|
142
|
+
const result = (0, dateDiff_1.diffFromNow)(pastDate, "days", { allowFuture: true });
|
|
143
|
+
expect(result).toBeGreaterThan(0);
|
|
144
|
+
});
|
|
145
|
+
it("should return signed negative difference for future dates", () => {
|
|
146
|
+
const futureDate = "2050-01-01";
|
|
147
|
+
const result = (0, dateDiff_1.diffFromNow)(futureDate, "days", { signed: true });
|
|
148
|
+
expect(result).toBeLessThan(0);
|
|
149
|
+
});
|
|
150
|
+
it("should return signed positive difference for past dates", () => {
|
|
151
|
+
const pastDate = "2020-01-01";
|
|
152
|
+
const result = (0, dateDiff_1.diffFromNow)(pastDate, "days", { signed: true });
|
|
153
|
+
expect(result).toBeGreaterThan(0);
|
|
154
|
+
});
|
|
155
|
+
it("should default to days unit", () => {
|
|
156
|
+
const pastDate = "2020-01-01";
|
|
157
|
+
const result = (0, dateDiff_1.diffFromNow)(pastDate);
|
|
158
|
+
expect(result).toBeGreaterThan(0);
|
|
159
|
+
});
|
|
160
|
+
it("should work with different units", () => {
|
|
161
|
+
const pastDate = "2020-01-01";
|
|
162
|
+
const daysResult = (0, dateDiff_1.diffFromNow)(pastDate, "days");
|
|
163
|
+
const monthsResult = (0, dateDiff_1.diffFromNow)(pastDate, "months");
|
|
164
|
+
const yearsResult = (0, dateDiff_1.diffFromNow)(pastDate, "years");
|
|
165
|
+
expect(yearsResult).toBeLessThan(monthsResult);
|
|
166
|
+
expect(monthsResult).toBeLessThan(daysResult);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
describe("diffUnits constant", () => {
|
|
170
|
+
it("should include all supported units", () => {
|
|
171
|
+
expect(dateDiff_1.diffUnits).toContain("years");
|
|
172
|
+
expect(dateDiff_1.diffUnits).toContain("months");
|
|
173
|
+
expect(dateDiff_1.diffUnits).toContain("weeks");
|
|
174
|
+
expect(dateDiff_1.diffUnits).toContain("days");
|
|
175
|
+
expect(dateDiff_1.diffUnits).toContain("hours");
|
|
176
|
+
expect(dateDiff_1.diffUnits).toContain("minutes");
|
|
177
|
+
expect(dateDiff_1.diffUnits).toContain("seconds");
|
|
178
|
+
});
|
|
179
|
+
it("should have exactly 7 units", () => {
|
|
180
|
+
expect(dateDiff_1.diffUnits.length).toBe(7);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
//# sourceMappingURL=dateDiff.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateDiff.test.js","sourceRoot":"","sources":["../../src/filters/dateDiff.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const nunjucks = __importStar(require("nunjucks"));
|
|
37
|
+
const registerFilters_1 = require("../registerFilters");
|
|
38
|
+
describe("Date Filters Integration", () => {
|
|
39
|
+
let env;
|
|
40
|
+
beforeEach(() => {
|
|
41
|
+
env = nunjucks.configure({ autoescape: false });
|
|
42
|
+
(0, registerFilters_1.registerFilters)(env);
|
|
43
|
+
});
|
|
44
|
+
describe("date_diff filter", () => {
|
|
45
|
+
it("should calculate difference in days", () => {
|
|
46
|
+
const template = "{{ date1 | date_diff(date2, 'days') }}";
|
|
47
|
+
const result = env.renderString(template, {
|
|
48
|
+
date1: "2023-01-01",
|
|
49
|
+
date2: "2023-01-15",
|
|
50
|
+
});
|
|
51
|
+
expect(result.trim()).toBe("14");
|
|
52
|
+
});
|
|
53
|
+
it("should calculate difference in months", () => {
|
|
54
|
+
const template = "{{ date1 | date_diff(date2, 'months') }}";
|
|
55
|
+
const result = env.renderString(template, {
|
|
56
|
+
date1: "2023-01-15",
|
|
57
|
+
date2: "2023-06-15",
|
|
58
|
+
});
|
|
59
|
+
expect(result.trim()).toBe("5");
|
|
60
|
+
});
|
|
61
|
+
it("should calculate difference in years", () => {
|
|
62
|
+
const template = "{{ date1 | date_diff(date2, 'years') }}";
|
|
63
|
+
const result = env.renderString(template, {
|
|
64
|
+
date1: "2020-03-15",
|
|
65
|
+
date2: "2023-03-15",
|
|
66
|
+
});
|
|
67
|
+
expect(result.trim()).toBe("3");
|
|
68
|
+
});
|
|
69
|
+
it("should handle signed option", () => {
|
|
70
|
+
const template = "{{ date1 | date_diff(date2, 'days', { signed: true }) }}";
|
|
71
|
+
const result = env.renderString(template, {
|
|
72
|
+
date1: "2023-01-15",
|
|
73
|
+
date2: "2023-01-01",
|
|
74
|
+
});
|
|
75
|
+
expect(result.trim()).toBe("-14");
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe("diff_from_now filter", () => {
|
|
79
|
+
it("should calculate difference from now", () => {
|
|
80
|
+
const template = "{{ date | diff_from_now('days') }}";
|
|
81
|
+
const result = env.renderString(template, {
|
|
82
|
+
date: "2020-01-01",
|
|
83
|
+
});
|
|
84
|
+
const days = parseInt(result.trim(), 10);
|
|
85
|
+
expect(days).toBeGreaterThan(0);
|
|
86
|
+
});
|
|
87
|
+
it("should support signed option for future dates", () => {
|
|
88
|
+
const template = "{{ date | diff_from_now('days', { signed: true }) }}";
|
|
89
|
+
const result = env.renderString(template, {
|
|
90
|
+
date: "2050-01-01",
|
|
91
|
+
});
|
|
92
|
+
const days = parseInt(result.trim(), 10);
|
|
93
|
+
expect(days).toBeLessThan(0);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
describe("formatDate filter", () => {
|
|
97
|
+
it("should format date with yyyy-MM-dd pattern", () => {
|
|
98
|
+
const template = "{{ date | formatDate('yyyy-MM-dd') }}";
|
|
99
|
+
const result = env.renderString(template, {
|
|
100
|
+
date: "2023-06-15T14:30:00",
|
|
101
|
+
});
|
|
102
|
+
expect(result.trim()).toBe("2023-06-15");
|
|
103
|
+
});
|
|
104
|
+
it("should format date with dd-MM-yyyy pattern", () => {
|
|
105
|
+
const template = "{{ date | formatDate('dd-MM-yyyy') }}";
|
|
106
|
+
const result = env.renderString(template, {
|
|
107
|
+
date: "2023-06-15",
|
|
108
|
+
});
|
|
109
|
+
expect(result.trim()).toBe("15-06-2023");
|
|
110
|
+
});
|
|
111
|
+
it("should format date with MM/dd/yyyy pattern", () => {
|
|
112
|
+
const template = "{{ date | formatDate('MM/dd/yyyy') }}";
|
|
113
|
+
const result = env.renderString(template, {
|
|
114
|
+
date: "2023-06-15",
|
|
115
|
+
});
|
|
116
|
+
expect(result.trim()).toBe("06/15/2023");
|
|
117
|
+
});
|
|
118
|
+
it("should format date with locale", () => {
|
|
119
|
+
const template = "{{ date | formatDate('MMMM yyyy', 'es') }}";
|
|
120
|
+
const result = env.renderString(template, {
|
|
121
|
+
date: "2023-06-15",
|
|
122
|
+
});
|
|
123
|
+
expect(result.trim()).toBe("junio 2023");
|
|
124
|
+
});
|
|
125
|
+
it("should format date with time", () => {
|
|
126
|
+
const template = "{{ date | formatDate('HH:mm:ss') }}";
|
|
127
|
+
const result = env.renderString(template, {
|
|
128
|
+
date: "2023-06-15T14:30:45",
|
|
129
|
+
});
|
|
130
|
+
expect(result.trim()).toBe("14:30:45");
|
|
131
|
+
});
|
|
132
|
+
it("should format date with full datetime", () => {
|
|
133
|
+
const template = "{{ date | formatDate('dd/MM/yyyy HH:mm') }}";
|
|
134
|
+
const result = env.renderString(template, {
|
|
135
|
+
date: "2023-06-15T14:30:00",
|
|
136
|
+
});
|
|
137
|
+
expect(result.trim()).toBe("15/06/2023 14:30");
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=dateFiltersIntegration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateFiltersIntegration.test.js","sourceRoot":"","sources":["../../src/filters/dateFiltersIntegration.test.ts"],"names":[],"mappings":"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"}
|
package/dist/filters/index.d.ts
CHANGED
package/dist/filters/index.js
CHANGED
|
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./calculateProperty"), exports);
|
|
18
|
+
__exportStar(require("./dateDiff"), exports);
|
|
18
19
|
__exportStar(require("./dateFunctions"), exports);
|
|
19
20
|
__exportStar(require("./filterBy"), exports);
|
|
20
21
|
__exportStar(require("./formatArray"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,kDAAgC;AAChC,6CAA2B;AAC3B,gDAA8B;AAC9B,sDAAoC;AACpC,iDAA+B;AAC/B,iDAA+B;AAC/B,iDAA+B;AAC/B,6CAA2B;AAC3B,wDAAsC;AACtC,oDAAkC;AAClC,mDAAiC;AACjC,gDAA8B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,6CAA2B;AAC3B,kDAAgC;AAChC,6CAA2B;AAC3B,gDAA8B;AAC9B,sDAAoC;AACpC,iDAA+B;AAC/B,iDAA+B;AAC/B,iDAA+B;AAC/B,6CAA2B;AAC3B,wDAAsC;AACtC,oDAAkC;AAClC,mDAAiC;AACjC,gDAA8B"}
|
package/dist/registerFilters.js
CHANGED
|
@@ -33,6 +33,8 @@ function registerFilters(nj) {
|
|
|
33
33
|
nj.addFilter("parseDate", filters_1.parseDate);
|
|
34
34
|
nj.addFilter("dateAdd", date_fns_1.add);
|
|
35
35
|
nj.addFilter("dateSub", date_fns_1.sub);
|
|
36
|
+
nj.addFilter("dateDiff", filters_1.diffBetween);
|
|
37
|
+
nj.addFilter("diffFromNow", filters_1.diffFromNow);
|
|
36
38
|
return nj;
|
|
37
39
|
}
|
|
38
40
|
//# sourceMappingURL=registerFilters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerFilters.js","sourceRoot":"","sources":["../src/registerFilters.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"registerFilters.js","sourceRoot":"","sources":["../src/registerFilters.ts"],"names":[],"mappings":";;AAmCA,0CAkCC;AApED,mCAUgB;AAChB,uCAoBmB;AACnB,uCAAoC;AAEpC,SAAgB,eAAe,CAAC,EAAe;IAC7C,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,wBAAc,CAAC,CAAC;IAE/C,EAAE,CAAC,SAAS,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;IACvD,EAAE,CAAC,SAAS,CAAC,qBAAqB,EAAE,6BAAmB,CAAC,CAAC;IACzD,EAAE,CAAC,SAAS,CAAC,+BAA+B,EAAE,uCAA6B,CAAC,CAAC;IAC7E,EAAE,CAAC,SAAS,CAAC,0BAA0B,EAAE,kCAAwB,CAAC,CAAC;IACnE,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,sBAAY,CAAC,CAAC;IAC3C,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,sBAAY,CAAC,CAAC;IAC3C,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,IAAA,gBAAO,EAAC,sBAAY,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAA,gBAAO,EAAC,2BAAiB,EAAE,EAAE,CAAC,CAAC,CAAC;IAClE,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,IAAA,gBAAO,EAAC,qBAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IACtD,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAA,gBAAO,EAAC,kBAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAChD,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAA,gBAAO,EAAC,kBAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAChD,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,wBAAc,CAAC,CAAC;IAC/C,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,yBAAe,CAAC,CAAC;IACjD,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAA,gBAAO,EAAC,2BAAiB,EAAE,EAAE,CAAC,CAAC,CAAC;IAClE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,YAAG,CAAC,CAAC;IACzB,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,YAAG,CAAC,CAAC;IACzB,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,aAAI,CAAC,CAAC;IAC3B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,gBAAO,CAAC,CAAC;IACjC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,eAAM,CAAC,CAAC;IAC/B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,gBAAO,CAAC,CAAC;IACjC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,qBAAW,CAAC,CAAC;IACzC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,gBAAO,CAAC,CAAC;IACjC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,kBAAS,CAAC,CAAC;IACrC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,oBAAU,CAAC,CAAC;IACvC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,mBAAS,CAAC,CAAC;IACrC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,cAAG,CAAC,CAAC;IAC7B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,cAAG,CAAC,CAAC;IAC7B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,qBAAW,CAAC,CAAC;IACtC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,qBAAW,CAAC,CAAC;IAEzC,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alanszp/nunjucks-utils",
|
|
3
|
-
"version": "20.0
|
|
3
|
+
"version": "20.2.0",
|
|
4
4
|
"description": "Nunjucks filters and helpers.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"nunjucks": "^3.2.4"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@alanszp/relative-date": "^20.0
|
|
24
|
+
"@alanszp/relative-date": "^20.2.0",
|
|
25
25
|
"date-fns": "^4.1.0",
|
|
26
|
-
"lodash": "^4.17.
|
|
26
|
+
"lodash": "^4.17.23"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@babel/core": "^7.23.9",
|
|
@@ -34,5 +34,5 @@
|
|
|
34
34
|
"jest": "^29.7.0",
|
|
35
35
|
"nunjucks": "^3.2.4"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "5f7b992fc36b2b0291182f6c3ad380a837e6b754"
|
|
38
38
|
}
|