@alanszp/relative-date 16.4.3 → 16.5.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.
Files changed (43) hide show
  1. package/README.md +168 -0
  2. package/dist/DateExpression.d.ts +74 -0
  3. package/dist/DateExpression.js +124 -0
  4. package/dist/DateExpression.js.map +1 -0
  5. package/dist/DateExpression.test.d.ts +1 -0
  6. package/dist/DateExpression.test.js +495 -0
  7. package/dist/DateExpression.test.js.map +1 -0
  8. package/dist/Modifier.d.ts +26 -0
  9. package/dist/Modifier.js +84 -0
  10. package/dist/Modifier.js.map +1 -0
  11. package/dist/Modifier.test.d.ts +1 -0
  12. package/dist/Modifier.test.js +430 -0
  13. package/dist/Modifier.test.js.map +1 -0
  14. package/dist/date-parser/AbsoluteDateParser.d.ts +5 -0
  15. package/dist/date-parser/AbsoluteDateParser.js +15 -0
  16. package/dist/date-parser/AbsoluteDateParser.js.map +1 -0
  17. package/dist/date-parser/DateParser.d.ts +4 -0
  18. package/dist/date-parser/DateParser.js +3 -0
  19. package/dist/date-parser/DateParser.js.map +1 -0
  20. package/dist/date-parser/DateParserFactory.d.ts +4 -0
  21. package/dist/date-parser/DateParserFactory.js +19 -0
  22. package/dist/date-parser/DateParserFactory.js.map +1 -0
  23. package/dist/date-parser/RelativeDateParser.d.ts +26 -0
  24. package/dist/date-parser/RelativeDateParser.js +101 -0
  25. package/dist/date-parser/RelativeDateParser.js.map +1 -0
  26. package/dist/date-parser/RelativeDateParser.test.d.ts +1 -0
  27. package/dist/date-parser/RelativeDateParser.test.js +351 -0
  28. package/dist/date-parser/RelativeDateParser.test.js.map +1 -0
  29. package/dist/errors/InvalidDateExpression.d.ts +3 -0
  30. package/dist/errors/InvalidDateExpression.js +10 -0
  31. package/dist/errors/InvalidDateExpression.js.map +1 -0
  32. package/dist/errors/InvalidModifier.d.ts +3 -0
  33. package/dist/errors/InvalidModifier.js +10 -0
  34. package/dist/errors/InvalidModifier.js.map +1 -0
  35. package/dist/index.d.ts +5 -0
  36. package/dist/index.js +11 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/relativeDateToFixed.d.ts +0 -2
  39. package/dist/relativeDateToFixed.js +7 -107
  40. package/dist/relativeDateToFixed.js.map +1 -1
  41. package/dist/relativeDateToFixed.test.js +0 -258
  42. package/dist/relativeDateToFixed.test.js.map +1 -1
  43. package/package.json +2 -2
@@ -0,0 +1,495 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const DateExpression_1 = require("./DateExpression");
4
+ const InvalidDateExpression_1 = require("./errors/InvalidDateExpression");
5
+ const InvalidModifier_1 = require("./errors/InvalidModifier");
6
+ const Modifier_1 = require("./Modifier");
7
+ const date_fns_1 = require("date-fns");
8
+ // Mock lodash now() to return a fixed timestamp
9
+ jest.mock("lodash", () => (Object.assign(Object.assign({}, jest.requireActual("lodash")), { now: () => new Date("2023-06-15T10:30:00.000Z").getTime() })));
10
+ describe("DateExpression", () => {
11
+ const testDate = "2023-06-15";
12
+ describe("Constructor and Builders", () => {
13
+ describe("from()", () => {
14
+ it("should create DateExpression from valid absolute date", () => {
15
+ const expression = DateExpression_1.DateExpression.from(testDate);
16
+ expect(expression).toBeInstanceOf(DateExpression_1.DateExpression);
17
+ expect(expression.raw).toBe(testDate);
18
+ expect(expression.rawDate).toBe(testDate);
19
+ expect(expression.modifier).toBeNull();
20
+ });
21
+ it("should create DateExpression from valid relative date", () => {
22
+ const expression = DateExpression_1.DateExpression.from("+5d");
23
+ expect(expression).toBeInstanceOf(DateExpression_1.DateExpression);
24
+ expect(expression.raw).toBe("+5d");
25
+ expect(expression.rawDate).toBe("+5d");
26
+ expect(expression.modifier).toBeNull();
27
+ });
28
+ it("should create DateExpression from valid relative date with modifier", () => {
29
+ var _a, _b;
30
+ const expression = DateExpression_1.DateExpression.from("+5d:eoy");
31
+ expect(expression).toBeInstanceOf(DateExpression_1.DateExpression);
32
+ expect(expression.raw).toBe("+5d:eoy");
33
+ expect(expression.rawDate).toBe("+5d");
34
+ expect(expression.modifier).toBeInstanceOf(Modifier_1.Modifier);
35
+ expect((_a = expression.modifier) === null || _a === void 0 ? void 0 : _a.extreme).toBe("e");
36
+ expect((_b = expression.modifier) === null || _b === void 0 ? void 0 : _b.unit).toBe("y");
37
+ });
38
+ it("should create DateExpression with now", () => {
39
+ const expression = DateExpression_1.DateExpression.from("now");
40
+ expect(expression).toBeInstanceOf(DateExpression_1.DateExpression);
41
+ expect(expression.raw).toBe("now");
42
+ expect(expression.rawDate).toBe("now");
43
+ expect(expression.modifier).toBeNull();
44
+ });
45
+ it("should create DateExpression with modifier", () => {
46
+ var _a, _b;
47
+ const expression = DateExpression_1.DateExpression.from("2023-06-15:som");
48
+ expect(expression).toBeInstanceOf(DateExpression_1.DateExpression);
49
+ expect(expression.raw).toBe("2023-06-15:som");
50
+ expect(expression.rawDate).toBe("2023-06-15");
51
+ expect(expression.modifier).toBeInstanceOf(Modifier_1.Modifier);
52
+ expect((_a = expression.modifier) === null || _a === void 0 ? void 0 : _a.extreme).toBe("s");
53
+ expect((_b = expression.modifier) === null || _b === void 0 ? void 0 : _b.unit).toBe("m");
54
+ });
55
+ it("should handle whitespace around expression", () => {
56
+ expect(() => DateExpression_1.DateExpression.from(" 2023-06-15 ")).not.toThrow();
57
+ });
58
+ it("should handle whitespace around modifier", () => {
59
+ const expression = DateExpression_1.DateExpression.from("2023-06-15 : som ");
60
+ expect(expression.rawDate).toBe("2023-06-15");
61
+ expect(expression.modifier).toBeInstanceOf(Modifier_1.Modifier);
62
+ });
63
+ it("should throw InvalidDateExpression for invalid date part", () => {
64
+ expect(() => DateExpression_1.DateExpression.from("invalid-date")).toThrow(InvalidDateExpression_1.InvalidDateExpression);
65
+ expect(() => DateExpression_1.DateExpression.from("2023-13-45")).toThrow(InvalidDateExpression_1.InvalidDateExpression);
66
+ expect(() => DateExpression_1.DateExpression.from("")).toThrow(InvalidDateExpression_1.InvalidDateExpression);
67
+ });
68
+ it("should throw InvalidModifier for invalid modifier part", () => {
69
+ expect(() => DateExpression_1.DateExpression.from("2023-06-15:invalid")).toThrow(InvalidModifier_1.InvalidModifier);
70
+ });
71
+ });
72
+ describe("now()", () => {
73
+ it("should create DateExpression for now", () => {
74
+ const expression = DateExpression_1.DateExpression.now();
75
+ expect(expression.raw).toBe("now");
76
+ expect(expression.rawDate).toBe("now");
77
+ expect(expression.modifier).toBeNull();
78
+ expect(expression.isNow).toBe(true);
79
+ });
80
+ });
81
+ describe("yesterday()", () => {
82
+ it("should create DateExpression for yesterday", () => {
83
+ const expression = DateExpression_1.DateExpression.yesterday();
84
+ expect(expression.raw).toBe("-1d");
85
+ expect(expression.rawDate).toBe("-1d");
86
+ expect(expression.modifier).toBeNull();
87
+ expect(expression.isRelativeDate()).toBe(true);
88
+ });
89
+ });
90
+ });
91
+ describe("Properties and Getters", () => {
92
+ describe("isNow", () => {
93
+ it("should return true when rawDate is 'now'", () => {
94
+ const expression = DateExpression_1.DateExpression.from("now");
95
+ expect(expression.isNow).toBe(true);
96
+ });
97
+ it("should return false when rawDate is not 'now'", () => {
98
+ const expression = DateExpression_1.DateExpression.from("2023-06-15");
99
+ expect(expression.isNow).toBe(false);
100
+ });
101
+ it("should return false for relative dates that are not 'now'", () => {
102
+ const expression = DateExpression_1.DateExpression.from("+1d");
103
+ expect(expression.isNow).toBe(false);
104
+ });
105
+ it("should return true for now with modifier", () => {
106
+ const expression = DateExpression_1.DateExpression.from("now:eom");
107
+ expect(expression.isNow).toBe(true);
108
+ });
109
+ });
110
+ describe("raw", () => {
111
+ it("should return the original expression string", () => {
112
+ const originalExpression = "2023-06-15:eom";
113
+ const expression = DateExpression_1.DateExpression.from(originalExpression);
114
+ expect(expression.raw).toBe(originalExpression);
115
+ });
116
+ });
117
+ describe("rawDate", () => {
118
+ it("should return date part without modifier for absolute date with modifier", () => {
119
+ const expression = DateExpression_1.DateExpression.from("2023-06-15:som");
120
+ expect(expression.rawDate).toBe("2023-06-15");
121
+ });
122
+ it("should return date part without modifier for relative date", () => {
123
+ const expression = DateExpression_1.DateExpression.from("-5d:som");
124
+ expect(expression.rawDate).toBe("-5d");
125
+ });
126
+ it("should return full expression when no modifier for absolute date", () => {
127
+ const expression = DateExpression_1.DateExpression.from("2023-06-15");
128
+ expect(expression.rawDate).toBe("2023-06-15");
129
+ });
130
+ it("should return full expression when no modifier for relative date", () => {
131
+ const expression = DateExpression_1.DateExpression.from("+5d");
132
+ expect(expression.rawDate).toBe("+5d");
133
+ });
134
+ it("should return trimmed date part for absolute with modifier date with space", () => {
135
+ const expression = DateExpression_1.DateExpression.from(" 2023-06-15 : som ");
136
+ expect(expression.rawDate).toBe("2023-06-15");
137
+ });
138
+ it("should return trimmed date part for absolute date with space", () => {
139
+ const expression = DateExpression_1.DateExpression.from(" 2023-06-15 ");
140
+ expect(expression.rawDate).toBe("2023-06-15");
141
+ });
142
+ it("should return trimmed date part for relative with modifier date with space", () => {
143
+ const expression = DateExpression_1.DateExpression.from(" +5d : eom ");
144
+ expect(expression.rawDate).toBe("+5d");
145
+ });
146
+ it("should return trimmed date part for relative date with space", () => {
147
+ const expression = DateExpression_1.DateExpression.from(" +5d ");
148
+ expect(expression.rawDate).toBe("+5d");
149
+ });
150
+ });
151
+ describe("modifier", () => {
152
+ it("should return Modifier instance when present", () => {
153
+ const expression = DateExpression_1.DateExpression.from("2023-06-15:som");
154
+ expect(expression.modifier).toBeInstanceOf(Modifier_1.Modifier);
155
+ });
156
+ it("should return null when not present", () => {
157
+ const expression = DateExpression_1.DateExpression.from(testDate);
158
+ expect(expression.modifier).toBeNull();
159
+ });
160
+ });
161
+ });
162
+ describe("Instance Methods", () => {
163
+ describe("toDate()", () => {
164
+ it("should return Date object for absolute date without modifier", () => {
165
+ const expression = DateExpression_1.DateExpression.from("2023-06-15");
166
+ const result = expression.toDate();
167
+ expect(result).toBeInstanceOf(Date);
168
+ expect((0, date_fns_1.format)(result, DateExpression_1.INPUT_DATE_FORMAT)).toBe("2023-06-15");
169
+ });
170
+ it("should return Date object for relative date without modifier", () => {
171
+ const expression = DateExpression_1.DateExpression.from("now");
172
+ const result = expression.toDate();
173
+ expect(result).toBeInstanceOf(Date);
174
+ });
175
+ it("should apply modifier when present", () => {
176
+ const expression = DateExpression_1.DateExpression.from("2023-06-15:som");
177
+ const result = expression.toDate();
178
+ expect(result).toBeInstanceOf(Date);
179
+ // The exact result depends on Modifier implementation
180
+ // Not the right place to test Modifier
181
+ // but we verify the modifier was applied by checking it's different from base date
182
+ const baseDate = (0, date_fns_1.parseISO)("2023-06-15");
183
+ expect(result).not.toEqual(baseDate);
184
+ });
185
+ it("should not apply modifier when not present", () => {
186
+ const expression = DateExpression_1.DateExpression.from(testDate);
187
+ const result = expression.toDate();
188
+ expect((0, date_fns_1.format)(result, DateExpression_1.INPUT_DATE_FORMAT)).toBe(testDate);
189
+ });
190
+ });
191
+ describe("toAbsoluteString()", () => {
192
+ it("should return formatted date string for absolute date", () => {
193
+ const expression = DateExpression_1.DateExpression.from(testDate);
194
+ const result = expression.toAbsoluteString();
195
+ expect(result).toBe(testDate);
196
+ });
197
+ it("should return formatted date string with modifier applied", () => {
198
+ const expression = DateExpression_1.DateExpression.from("2023-06-15:som");
199
+ const result = expression.toAbsoluteString();
200
+ expect(result).toMatch(/^\d{4}-\d{2}-\d{2}$/);
201
+ expect(result).not.toBe("2023-06-15"); // Should be different due to modifier
202
+ });
203
+ it("should return string in predefined format for relative date", () => {
204
+ const expression = DateExpression_1.DateExpression.from("-1d");
205
+ const result = expression.toAbsoluteString();
206
+ expect(result).toMatch(/^\d{4}-\d{2}-\d{2}$/);
207
+ expect(result).toBe("2023-06-14");
208
+ });
209
+ });
210
+ describe("hasModifier", () => {
211
+ it("should return true when modifier is present", () => {
212
+ const expression = DateExpression_1.DateExpression.from("2023-06-15:som");
213
+ expect(expression.hasModifier()).toBe(true);
214
+ });
215
+ it("should return false when modifier is not present", () => {
216
+ const expression = DateExpression_1.DateExpression.from("2023-06-15");
217
+ expect(expression.hasModifier()).toBe(false);
218
+ });
219
+ });
220
+ describe("isRelativeDate", () => {
221
+ it.each([["now"], ["+5d"], ["-2w"], ["+1m"], ["-3y"]])("should return true for relative date expression: %s", (expr) => {
222
+ expect(DateExpression_1.DateExpression.from(expr).isRelativeDate()).toBe(true);
223
+ });
224
+ it("should return false for absolute date expressions", () => {
225
+ const expression = DateExpression_1.DateExpression.from("2023-06-15");
226
+ expect(expression.isRelativeDate()).toBe(false);
227
+ });
228
+ });
229
+ describe("isAbsoluteDate", () => {
230
+ it("should return true for absolute date expressions", () => {
231
+ const expression = DateExpression_1.DateExpression.from("2023-06-15");
232
+ expect(expression.isAbsoluteDate()).toBe(true);
233
+ });
234
+ it("should return true for absolute date expressions with modifier", () => {
235
+ const expression = DateExpression_1.DateExpression.from("2023-06-15:som");
236
+ expect(expression.isAbsoluteDate()).toBe(true);
237
+ });
238
+ it("should return true for absolute date expressions with modifier and spaces", () => {
239
+ const expression = DateExpression_1.DateExpression.from(" 2023-06-15 : som ");
240
+ expect(expression.isAbsoluteDate()).toBe(true);
241
+ });
242
+ it.each([["now"], ["+5d"], ["-2w"]])("should return false for relative date expression: %s", (expr) => {
243
+ expect(DateExpression_1.DateExpression.from(expr).isAbsoluteDate()).toBe(false);
244
+ });
245
+ });
246
+ });
247
+ describe("Static Methods", () => {
248
+ describe("isValid()", () => {
249
+ it.each([["2023-06-15"], ["2023-01-01"], ["2023-12-31"]])("should return true for valid absolute date: %s", (date) => {
250
+ expect(DateExpression_1.DateExpression.isValid(date)).toBe(true);
251
+ });
252
+ it.each([["now"], ["+1d"], ["-5d"], ["+2w"], ["-1m"], ["+3y"]])("should return true for valid relative date: %s", (date) => {
253
+ expect(DateExpression_1.DateExpression.isValid(date)).toBe(true);
254
+ });
255
+ it.each([["2023-06-15:som"], ["now:eom"], ["+1d:soy"]])("should return true for valid date with modifier: %s", (date) => {
256
+ expect(DateExpression_1.DateExpression.isValid(date)).toBe(true);
257
+ });
258
+ it.each([
259
+ [""],
260
+ ["invalid-date"],
261
+ ["2023-13-45"],
262
+ ["not-a-date"],
263
+ ["2023-06-15:invalid-modifier"],
264
+ ["-120p"],
265
+ ["-1d otra cosa"],
266
+ ])("should return false for invalid date: %s", (date) => {
267
+ expect(DateExpression_1.DateExpression.isValid(date)).toBe(false);
268
+ });
269
+ });
270
+ });
271
+ describe("Error Handling", () => {
272
+ it("should throw InvalidDateExpression for invalid date expression", () => {
273
+ expect(() => DateExpression_1.DateExpression.from("invalid-format")).toThrow(InvalidDateExpression_1.InvalidDateExpression);
274
+ });
275
+ it("should throw InvalidModifier for invalid modifier", () => {
276
+ expect(() => DateExpression_1.DateExpression.from("2023-06-15:invalid")).toThrow(InvalidModifier_1.InvalidModifier);
277
+ });
278
+ it.each([
279
+ ["2023-02-30"],
280
+ ["2023-13-01"],
281
+ ["abc-def-ghi"],
282
+ ["-1d otra cosa"], // Invalid relative date
283
+ ])("should handle edge case in date parsing: %s", (invalidDate) => {
284
+ expect(() => DateExpression_1.DateExpression.from(invalidDate)).toThrow(InvalidDateExpression_1.InvalidDateExpression);
285
+ });
286
+ });
287
+ describe("modify()", () => {
288
+ describe("adding modifiers to expressions without existing modifiers", () => {
289
+ it("should add startOf modifier to now", () => {
290
+ var _a, _b;
291
+ const expression = DateExpression_1.DateExpression.now();
292
+ const modified = expression.modify(Modifier_1.Modifier.startOf("m"));
293
+ expect(modified.raw).toBe("now:som");
294
+ expect(modified.rawDate).toBe("now");
295
+ expect(modified.modifier).toBeInstanceOf(Modifier_1.Modifier);
296
+ expect((_a = modified.modifier) === null || _a === void 0 ? void 0 : _a.extreme).toBe("s");
297
+ expect((_b = modified.modifier) === null || _b === void 0 ? void 0 : _b.unit).toBe("m");
298
+ });
299
+ it("should add endOf modifier to absolute date", () => {
300
+ var _a, _b;
301
+ const expression = DateExpression_1.DateExpression.from("2023-06-15");
302
+ const modified = expression.modify(Modifier_1.Modifier.endOf("y"));
303
+ expect(modified.raw).toBe("2023-06-15:eoy");
304
+ expect(modified.rawDate).toBe("2023-06-15");
305
+ expect(modified.modifier).toBeInstanceOf(Modifier_1.Modifier);
306
+ expect((_a = modified.modifier) === null || _a === void 0 ? void 0 : _a.extreme).toBe("e");
307
+ expect((_b = modified.modifier) === null || _b === void 0 ? void 0 : _b.unit).toBe("y");
308
+ });
309
+ it("should add modifier to relative date", () => {
310
+ var _a, _b;
311
+ const expression = DateExpression_1.DateExpression.from("+5d");
312
+ const modified = expression.modify(Modifier_1.Modifier.startOf("w"));
313
+ expect(modified.raw).toBe("+5d:sow");
314
+ expect(modified.rawDate).toBe("+5d");
315
+ expect(modified.modifier).toBeInstanceOf(Modifier_1.Modifier);
316
+ expect((_a = modified.modifier) === null || _a === void 0 ? void 0 : _a.extreme).toBe("s");
317
+ expect((_b = modified.modifier) === null || _b === void 0 ? void 0 : _b.unit).toBe("w");
318
+ });
319
+ it("should add modifier to yesterday", () => {
320
+ var _a, _b;
321
+ const expression = DateExpression_1.DateExpression.yesterday();
322
+ const modified = expression.modify(Modifier_1.Modifier.endOf("q"));
323
+ expect(modified.raw).toBe("-1d:eoq");
324
+ expect(modified.rawDate).toBe("-1d");
325
+ expect(modified.modifier).toBeInstanceOf(Modifier_1.Modifier);
326
+ expect((_a = modified.modifier) === null || _a === void 0 ? void 0 : _a.extreme).toBe("e");
327
+ expect((_b = modified.modifier) === null || _b === void 0 ? void 0 : _b.unit).toBe("q");
328
+ });
329
+ });
330
+ describe("replacing existing modifiers", () => {
331
+ it("should replace startOf with endOf modifier", () => {
332
+ var _a, _b;
333
+ const expression = DateExpression_1.DateExpression.from("2023-06-15:som");
334
+ const modified = expression.modify(Modifier_1.Modifier.endOf("m"));
335
+ expect(modified.raw).toBe("2023-06-15:eom");
336
+ expect(modified.rawDate).toBe("2023-06-15");
337
+ expect(modified.modifier).toBeInstanceOf(Modifier_1.Modifier);
338
+ expect((_a = modified.modifier) === null || _a === void 0 ? void 0 : _a.extreme).toBe("e");
339
+ expect((_b = modified.modifier) === null || _b === void 0 ? void 0 : _b.unit).toBe("m");
340
+ });
341
+ it("should replace endOf with startOf modifier", () => {
342
+ var _a, _b;
343
+ const expression = DateExpression_1.DateExpression.from("now:eom");
344
+ const modified = expression.modify(Modifier_1.Modifier.startOf("y"));
345
+ expect(modified.raw).toBe("now:soy");
346
+ expect(modified.rawDate).toBe("now");
347
+ expect(modified.modifier).toBeInstanceOf(Modifier_1.Modifier);
348
+ expect((_a = modified.modifier) === null || _a === void 0 ? void 0 : _a.extreme).toBe("s");
349
+ expect((_b = modified.modifier) === null || _b === void 0 ? void 0 : _b.unit).toBe("y");
350
+ });
351
+ it("should replace modifier with different unit", () => {
352
+ var _a, _b;
353
+ const expression = DateExpression_1.DateExpression.from("+2w:soq");
354
+ const modified = expression.modify(Modifier_1.Modifier.startOf("m"));
355
+ expect(modified.raw).toBe("+2w:som");
356
+ expect(modified.rawDate).toBe("+2w");
357
+ expect(modified.modifier).toBeInstanceOf(Modifier_1.Modifier);
358
+ expect((_a = modified.modifier) === null || _a === void 0 ? void 0 : _a.extreme).toBe("s");
359
+ expect((_b = modified.modifier) === null || _b === void 0 ? void 0 : _b.unit).toBe("m");
360
+ });
361
+ });
362
+ describe("immutability", () => {
363
+ it("should create a new instance without modifying the original", () => {
364
+ const original = DateExpression_1.DateExpression.from("2023-06-15:som");
365
+ const modified = original.modify(Modifier_1.Modifier.endOf("m"));
366
+ expect(modified).not.toBe(original);
367
+ expect(modified.raw).toBe("2023-06-15:eom");
368
+ expect(original.raw).toBe("2023-06-15:som"); // Original unchanged
369
+ });
370
+ it("should create a new instance even when adding modifier to expression without modifier", () => {
371
+ const original = DateExpression_1.DateExpression.now();
372
+ const modified = original.modify(Modifier_1.Modifier.startOf("m"));
373
+ expect(modified).not.toBe(original);
374
+ expect(modified.raw).toBe("now:som");
375
+ expect(original.raw).toBe("now"); // Original unchanged
376
+ });
377
+ });
378
+ describe("edge cases", () => {
379
+ it("should handle expressions with whitespace", () => {
380
+ const expression = DateExpression_1.DateExpression.from(" 2023-06-15 ");
381
+ const modified = expression.modify(Modifier_1.Modifier.startOf("m"));
382
+ expect(modified.raw).toBe("2023-06-15:som");
383
+ expect(modified.rawDate).toBe("2023-06-15");
384
+ });
385
+ it("should handle expressions with existing whitespace around modifier", () => {
386
+ const expression = DateExpression_1.DateExpression.from("2023-06-15 : som ");
387
+ const modified = expression.modify(Modifier_1.Modifier.endOf("m"));
388
+ expect(modified.raw).toBe("2023-06-15:eom");
389
+ expect(modified.rawDate).toBe("2023-06-15");
390
+ });
391
+ });
392
+ });
393
+ describe("toJSON()", () => {
394
+ it("should return correct JSON structure for absolute date without modifier", () => {
395
+ const expression = DateExpression_1.DateExpression.from("2023-06-15");
396
+ const json = expression.toJSON();
397
+ expect(json).toEqual({
398
+ raw: "2023-06-15",
399
+ rawDate: "2023-06-15",
400
+ modifier: null,
401
+ isNow: false,
402
+ isRelativeDate: false,
403
+ isAbsoluteDate: true,
404
+ hasModifier: false,
405
+ toDate: expect.any(Date),
406
+ toAbsoluteString: "2023-06-15",
407
+ });
408
+ });
409
+ it("should return correct JSON structure for relative date without modifier", () => {
410
+ const expression = DateExpression_1.DateExpression.from("+5d");
411
+ const json = expression.toJSON();
412
+ expect(json).toEqual({
413
+ raw: "+5d",
414
+ rawDate: "+5d",
415
+ modifier: null,
416
+ isNow: false,
417
+ isRelativeDate: true,
418
+ isAbsoluteDate: false,
419
+ hasModifier: false,
420
+ toDate: expect.any(Date),
421
+ toAbsoluteString: expect.any(String),
422
+ });
423
+ });
424
+ it("should return correct JSON structure for absolute date with modifier", () => {
425
+ const expression = DateExpression_1.DateExpression.from("2023-06-15:som");
426
+ const json = expression.toJSON();
427
+ expect(json).toEqual({
428
+ raw: "2023-06-15:som",
429
+ rawDate: "2023-06-15",
430
+ modifier: {
431
+ extreme: "s",
432
+ unit: "m",
433
+ },
434
+ isNow: false,
435
+ isRelativeDate: false,
436
+ isAbsoluteDate: true,
437
+ hasModifier: true,
438
+ toDate: expect.any(Date),
439
+ toAbsoluteString: expect.any(String),
440
+ });
441
+ });
442
+ it("should return correct JSON structure for relative date with modifier", () => {
443
+ const expression = DateExpression_1.DateExpression.from("+2w:eoy");
444
+ const json = expression.toJSON();
445
+ expect(json).toEqual({
446
+ raw: "+2w:eoy",
447
+ rawDate: "+2w",
448
+ modifier: {
449
+ extreme: "e",
450
+ unit: "y",
451
+ },
452
+ isNow: false,
453
+ isRelativeDate: true,
454
+ isAbsoluteDate: false,
455
+ hasModifier: true,
456
+ toDate: expect.any(Date),
457
+ toAbsoluteString: expect.any(String),
458
+ });
459
+ });
460
+ it("should return correct JSON structure for 'now' expression", () => {
461
+ const expression = DateExpression_1.DateExpression.now();
462
+ const json = expression.toJSON();
463
+ expect(json).toEqual({
464
+ raw: "now",
465
+ rawDate: "now",
466
+ modifier: null,
467
+ isNow: true,
468
+ isRelativeDate: true,
469
+ isAbsoluteDate: false,
470
+ hasModifier: false,
471
+ toDate: expect.any(Date),
472
+ toAbsoluteString: expect.any(String),
473
+ });
474
+ });
475
+ it("should return correct JSON structure for 'now' with modifier", () => {
476
+ const expression = DateExpression_1.DateExpression.from("now:eom");
477
+ const json = expression.toJSON();
478
+ expect(json).toEqual({
479
+ raw: "now:eom",
480
+ rawDate: "now",
481
+ modifier: {
482
+ extreme: "e",
483
+ unit: "m",
484
+ },
485
+ isNow: true,
486
+ isRelativeDate: true,
487
+ isAbsoluteDate: false,
488
+ hasModifier: true,
489
+ toDate: expect.any(Date),
490
+ toAbsoluteString: expect.any(String),
491
+ });
492
+ });
493
+ });
494
+ });
495
+ //# sourceMappingURL=DateExpression.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateExpression.test.js","sourceRoot":"","sources":["../src/DateExpression.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ declare type PeriodModifierExtreme = "s" | "e";
2
+ declare const PERIOD_MODIFIER_TIME_UNITS: readonly ["w", "m", "q", "y", "s", "b", "t"];
3
+ declare type PeriodModifierTimeUnit = (typeof PERIOD_MODIFIER_TIME_UNITS)[number];
4
+ export declare class Modifier {
5
+ readonly extreme: PeriodModifierExtreme;
6
+ readonly unit: PeriodModifierTimeUnit;
7
+ private static MODIFIER_REGEX;
8
+ private constructor();
9
+ static startOf(unit: PeriodModifierTimeUnit): Modifier;
10
+ static endOf(unit: PeriodModifierTimeUnit): Modifier;
11
+ static from(modifier: string): Modifier;
12
+ apply(date: Date): Date;
13
+ isStart(): this is Modifier & {
14
+ extreme: "s";
15
+ };
16
+ isEnd(): this is Modifier & {
17
+ extreme: "e";
18
+ };
19
+ private static MODIFIER_FN_MAP;
20
+ toJSON(): {
21
+ extreme: PeriodModifierExtreme;
22
+ unit: "b" | "q" | "s" | "w" | "m" | "t" | "y";
23
+ };
24
+ toString(): string;
25
+ }
26
+ export {};
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Modifier = void 0;
4
+ const date_fns_1 = require("date-fns");
5
+ const InvalidModifier_1 = require("./errors/InvalidModifier");
6
+ const PERIOD_MODIFIER_TIME_UNITS = ["w", "m", "q", "y", "s", "b", "t"];
7
+ function startOfNs(n) {
8
+ return (date) => {
9
+ const month = date.getMonth();
10
+ const year = date.getFullYear();
11
+ const trimesterStartMonth = month - (month % n);
12
+ return new Date(year, trimesterStartMonth, 1);
13
+ };
14
+ }
15
+ function endOfNs(n) {
16
+ return (date) => {
17
+ const month = date.getMonth();
18
+ const year = date.getFullYear();
19
+ const trimesterEndMonth = month + (n - (month % n));
20
+ // Get last day of the trimester month
21
+ return new Date(year, trimesterEndMonth, 0, 23, 59, 59, 999);
22
+ };
23
+ }
24
+ class Modifier {
25
+ constructor(extreme, unit) {
26
+ this.extreme = extreme;
27
+ this.unit = unit;
28
+ }
29
+ static startOf(unit) {
30
+ return new Modifier("s", unit);
31
+ }
32
+ static endOf(unit) {
33
+ return new Modifier("e", unit);
34
+ }
35
+ static from(modifier) {
36
+ const match = modifier.match(this.MODIFIER_REGEX);
37
+ if (!match) {
38
+ throw new InvalidModifier_1.InvalidModifier(modifier);
39
+ }
40
+ const [_, extreme, unit] = match;
41
+ return new Modifier(extreme, unit);
42
+ }
43
+ apply(date) {
44
+ return Modifier.MODIFIER_FN_MAP[this.extreme][this.unit](date);
45
+ }
46
+ isStart() {
47
+ return this.extreme === "s";
48
+ }
49
+ isEnd() {
50
+ return this.extreme === "e";
51
+ }
52
+ toJSON() {
53
+ return {
54
+ extreme: this.extreme,
55
+ unit: this.unit,
56
+ };
57
+ }
58
+ toString() {
59
+ return `${this.extreme}o${this.unit}`;
60
+ }
61
+ }
62
+ exports.Modifier = Modifier;
63
+ Modifier.MODIFIER_REGEX = new RegExp(`^([se])o([${PERIOD_MODIFIER_TIME_UNITS.join("")}])$`);
64
+ Modifier.MODIFIER_FN_MAP = {
65
+ e: {
66
+ w: date_fns_1.endOfWeek,
67
+ m: date_fns_1.endOfMonth,
68
+ q: date_fns_1.endOfQuarter,
69
+ y: date_fns_1.endOfYear,
70
+ s: endOfNs(6),
71
+ b: endOfNs(2),
72
+ t: endOfNs(4),
73
+ },
74
+ s: {
75
+ w: date_fns_1.startOfWeek,
76
+ m: date_fns_1.startOfMonth,
77
+ q: date_fns_1.startOfQuarter,
78
+ y: date_fns_1.startOfYear,
79
+ s: startOfNs(6),
80
+ b: startOfNs(2),
81
+ t: startOfNs(4),
82
+ },
83
+ };
84
+ //# sourceMappingURL=Modifier.js.map