@kikiutils/shared 18.0.0 → 18.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.
Files changed (156) hide show
  1. package/dist/buffer.d.ts +19 -21
  2. package/dist/buffer.d.ts.map +1 -1
  3. package/dist/buffer.js +18 -19
  4. package/dist/buffer.js.map +1 -1
  5. package/dist/classes/enhanced-date.d.ts +425 -0
  6. package/dist/classes/enhanced-date.d.ts.map +1 -0
  7. package/dist/classes/enhanced-date.js +591 -0
  8. package/dist/classes/enhanced-date.js.map +1 -0
  9. package/dist/classes/path.d.ts +211 -48
  10. package/dist/classes/path.d.ts.map +1 -1
  11. package/dist/classes/path.js +181 -52
  12. package/dist/classes/path.js.map +1 -1
  13. package/dist/classes/precision-number.d.ts +44 -39
  14. package/dist/classes/precision-number.d.ts.map +1 -1
  15. package/dist/classes/precision-number.js +51 -45
  16. package/dist/classes/precision-number.js.map +1 -1
  17. package/dist/classes/ssh-client.d.ts +3 -4
  18. package/dist/classes/ssh-client.d.ts.map +1 -1
  19. package/dist/classes/ssh-client.js +2 -2
  20. package/dist/classes/ssh-client.js.map +1 -1
  21. package/dist/clipboard.d.ts +25 -26
  22. package/dist/clipboard.d.ts.map +1 -1
  23. package/dist/clipboard.js +23 -23
  24. package/dist/clipboard.js.map +1 -1
  25. package/dist/consola.d.ts +12 -15
  26. package/dist/consola.d.ts.map +1 -1
  27. package/dist/consola.js +10 -12
  28. package/dist/consola.js.map +1 -1
  29. package/dist/crypto-hash.d.ts +65 -56
  30. package/dist/crypto-hash.d.ts.map +1 -1
  31. package/dist/crypto-hash.js +55 -45
  32. package/dist/crypto-hash.js.map +1 -1
  33. package/dist/datetime.d.ts +41 -53
  34. package/dist/datetime.d.ts.map +1 -1
  35. package/dist/datetime.js +53 -66
  36. package/dist/datetime.js.map +1 -1
  37. package/dist/element-plus.d.ts +13 -14
  38. package/dist/element-plus.d.ts.map +1 -1
  39. package/dist/element-plus.js +11 -11
  40. package/dist/element-plus.js.map +1 -1
  41. package/dist/enum.d.ts +39 -36
  42. package/dist/enum.d.ts.map +1 -1
  43. package/dist/enum.js +36 -32
  44. package/dist/enum.js.map +1 -1
  45. package/dist/env.d.ts +22 -15
  46. package/dist/env.d.ts.map +1 -1
  47. package/dist/env.js +20 -12
  48. package/dist/env.js.map +1 -1
  49. package/dist/event-awaiter.d.ts +47 -52
  50. package/dist/event-awaiter.d.ts.map +1 -1
  51. package/dist/event-awaiter.js +46 -50
  52. package/dist/event-awaiter.js.map +1 -1
  53. package/dist/general.d.ts +22 -17
  54. package/dist/general.d.ts.map +1 -1
  55. package/dist/general.js.map +1 -1
  56. package/dist/hash.d.ts +24 -21
  57. package/dist/hash.d.ts.map +1 -1
  58. package/dist/hash.js +20 -16
  59. package/dist/hash.js.map +1 -1
  60. package/dist/math.d.ts +20 -19
  61. package/dist/math.d.ts.map +1 -1
  62. package/dist/math.js +14 -12
  63. package/dist/math.js.map +1 -1
  64. package/dist/number.d.ts +10 -9
  65. package/dist/number.d.ts.map +1 -1
  66. package/dist/number.js +9 -7
  67. package/dist/number.js.map +1 -1
  68. package/dist/object.d.ts +22 -10
  69. package/dist/object.d.ts.map +1 -1
  70. package/dist/object.js +21 -8
  71. package/dist/object.js.map +1 -1
  72. package/dist/pino.d.ts +12 -15
  73. package/dist/pino.d.ts.map +1 -1
  74. package/dist/pino.js +10 -15
  75. package/dist/pino.js.map +1 -1
  76. package/dist/random.d.ts +17 -15
  77. package/dist/random.d.ts.map +1 -1
  78. package/dist/random.js +16 -13
  79. package/dist/random.js.map +1 -1
  80. package/dist/redis/script-runner.d.ts +57 -0
  81. package/dist/redis/script-runner.d.ts.map +1 -0
  82. package/dist/redis/script-runner.js +46 -0
  83. package/dist/redis/script-runner.js.map +1 -0
  84. package/dist/storages/lru/keyed-store.d.ts +18 -14
  85. package/dist/storages/lru/keyed-store.d.ts.map +1 -1
  86. package/dist/storages/lru/keyed-store.js +17 -12
  87. package/dist/storages/lru/keyed-store.js.map +1 -1
  88. package/dist/storages/redis/keyed-store.d.ts +11 -21
  89. package/dist/storages/redis/keyed-store.d.ts.map +1 -1
  90. package/dist/storages/redis/keyed-store.js +10 -19
  91. package/dist/storages/redis/keyed-store.js.map +1 -1
  92. package/dist/storages/redis/msgpack.d.ts +33 -13
  93. package/dist/storages/redis/msgpack.d.ts.map +1 -1
  94. package/dist/storages/redis/msgpack.js +32 -11
  95. package/dist/storages/redis/msgpack.js.map +1 -1
  96. package/dist/storages/redis/types.d.ts +34 -17
  97. package/dist/storages/redis/types.d.ts.map +1 -1
  98. package/dist/string.d.ts +12 -11
  99. package/dist/string.d.ts.map +1 -1
  100. package/dist/string.js +20 -15
  101. package/dist/string.js.map +1 -1
  102. package/dist/time.d.ts +35 -10
  103. package/dist/time.d.ts.map +1 -1
  104. package/dist/time.js +49 -9
  105. package/dist/time.js.map +1 -1
  106. package/dist/types/filtered-key-path.d.ts +4 -15
  107. package/dist/types/filtered-key-path.d.ts.map +1 -1
  108. package/dist/types/index.d.ts +10 -10
  109. package/dist/types/index.d.ts.map +1 -1
  110. package/dist/types/vue.d.ts +7 -7
  111. package/dist/types/vue.d.ts.map +1 -1
  112. package/dist/url.d.ts +15 -14
  113. package/dist/url.d.ts.map +1 -1
  114. package/dist/url.js +12 -10
  115. package/dist/url.js.map +1 -1
  116. package/dist/vue.d.ts +19 -21
  117. package/dist/vue.d.ts.map +1 -1
  118. package/dist/vue.js +15 -16
  119. package/dist/vue.js.map +1 -1
  120. package/dist/web.d.ts +14 -11
  121. package/dist/web.d.ts.map +1 -1
  122. package/dist/web.js +12 -8
  123. package/dist/web.js.map +1 -1
  124. package/package.json +20 -20
  125. package/src/buffer.ts +18 -19
  126. package/src/classes/enhanced-date.ts +665 -0
  127. package/src/classes/path.ts +232 -91
  128. package/src/classes/precision-number.ts +61 -53
  129. package/src/classes/ssh-client.ts +8 -5
  130. package/src/clipboard.ts +23 -23
  131. package/src/consola.ts +10 -12
  132. package/src/crypto-hash.ts +55 -45
  133. package/src/datetime.ts +65 -85
  134. package/src/element-plus.ts +11 -11
  135. package/src/enum.ts +36 -32
  136. package/src/env.ts +20 -12
  137. package/src/event-awaiter.ts +49 -50
  138. package/src/general.ts +20 -14
  139. package/src/hash.ts +20 -16
  140. package/src/math.ts +18 -16
  141. package/src/number.ts +9 -7
  142. package/src/object.ts +21 -8
  143. package/src/pino.ts +11 -15
  144. package/src/random.ts +16 -13
  145. package/src/redis/script-runner.ts +107 -0
  146. package/src/storages/lru/keyed-store.ts +17 -12
  147. package/src/storages/redis/keyed-store.ts +10 -19
  148. package/src/storages/redis/msgpack.ts +32 -11
  149. package/src/storages/redis/types.ts +32 -14
  150. package/src/string.ts +10 -8
  151. package/src/time.ts +52 -8
  152. package/src/types/filtered-key-path.ts +9 -14
  153. package/src/types/vue.ts +6 -5
  154. package/src/url.ts +12 -10
  155. package/src/vue.ts +15 -16
  156. package/src/web.ts +12 -8
@@ -0,0 +1,591 @@
1
+ import * as dateFns from "date-fns";
2
+ //#region src/classes/enhanced-date.ts
3
+ /**
4
+ * A mutable calendar date with chainable date-fns operations.
5
+ *
6
+ * @remarks
7
+ * Inherits the native constructor, including zero-based month arguments and millisecond timestamps.
8
+ * Native methods retain their original behavior.
9
+ * Mutating arithmetic and boundary methods update this instance and return `this`;
10
+ * their `to`-prefixed counterparts return a new `EnhancedDate` instead.
11
+ * Invalid dates, parsing, rounding, and week defaults follow date-fns semantics.
12
+ * Operations use the system time zone unless configured through date-fns options.
13
+ * Day and week arithmetic uses calendar days, preserving local wall-clock time across daylight saving changes.
14
+ * Hour, minute, second, and millisecond arithmetic uses elapsed durations. Month and year arithmetic clamps
15
+ * to the last valid day of the destination month. Native setters retain their native overflow behavior.
16
+ * Exceptions from date-fns propagate unchanged, and operations can preserve or produce `Invalid Date`.
17
+ *
18
+ * When used in Vue state, prefer replacing the value with a `to`-prefixed result:
19
+ * mutating a Date's internal timestamp does not trigger reactive updates.
20
+ *
21
+ * @example
22
+ *
23
+ * ```ts
24
+ * import { EnhancedDate } from '@kikiutils/shared/classes/enhanced-date';
25
+ *
26
+ * const date = new EnhancedDate('2026-01-31T12:00:00Z');
27
+ * const nextMonth = date.toAddMonths(1); // Original date is unchanged.
28
+ * date.addDays(1).startOfDay(); // Mutates the original date.
29
+ * nextMonth.isAfter(date);
30
+ * ```
31
+ */
32
+ var EnhancedDate = class EnhancedDate extends Date {
33
+ /**
34
+ * Returns a new instance at the end of today in the system time zone.
35
+ */
36
+ static endOfToday() {
37
+ return new EnhancedDate(dateFns.endOfToday());
38
+ }
39
+ /**
40
+ * Parses a date using date-fns and an explicit reference for missing fields.
41
+ *
42
+ * @param value - Date string to parse.
43
+ * @param pattern - date-fns parsing pattern.
44
+ * @param referenceDate - Reference for fields absent from the pattern.
45
+ * @param options - Options passed to `date-fns/parse`.
46
+ *
47
+ * @returns A new `EnhancedDate`, including `Invalid Date` for invalid values.
48
+ */
49
+ static fromFormat(value, pattern, referenceDate, options) {
50
+ return new EnhancedDate(dateFns.parse(value, pattern, referenceDate, options));
51
+ }
52
+ /**
53
+ * Parses an ISO 8601 string using date-fns, including its partial-date support.
54
+ *
55
+ * @param value - ISO date string.
56
+ * @param options - Options passed to `date-fns/parseISO`.
57
+ *
58
+ * @returns A new `EnhancedDate`, or `Invalid Date` when parsing fails.
59
+ */
60
+ static fromISO(value, options) {
61
+ return new EnhancedDate(dateFns.parseISO(value, options));
62
+ }
63
+ /**
64
+ * Creates a date from Unix seconds; native constructor numbers remain milliseconds.
65
+ *
66
+ * @param seconds - Seconds since the Unix epoch.
67
+ */
68
+ static fromUnixSeconds(seconds) {
69
+ return new EnhancedDate(seconds * 1e3);
70
+ }
71
+ /**
72
+ * Returns a new instance at the start of today in the system time zone.
73
+ */
74
+ static startOfToday() {
75
+ return new EnhancedDate(dateFns.startOfToday());
76
+ }
77
+ /**
78
+ * Adds the specified number of days in place using date-fns.
79
+ *
80
+ * @param amount - Number of days.
81
+ *
82
+ * @returns This instance for chaining.
83
+ */
84
+ addDays(amount) {
85
+ this.setTime(dateFns.addDays(this, amount).getTime());
86
+ return this;
87
+ }
88
+ /**
89
+ * Adds the specified number of hours in place using date-fns.
90
+ *
91
+ * @param amount - Number of hours.
92
+ *
93
+ * @returns This instance for chaining.
94
+ */
95
+ addHours(amount) {
96
+ this.setTime(dateFns.addHours(this, amount).getTime());
97
+ return this;
98
+ }
99
+ /**
100
+ * Adds the specified number of milliseconds in place using date-fns.
101
+ *
102
+ * @param amount - Number of milliseconds.
103
+ *
104
+ * @returns This instance for chaining.
105
+ */
106
+ addMilliseconds(amount) {
107
+ this.setTime(dateFns.addMilliseconds(this, amount).getTime());
108
+ return this;
109
+ }
110
+ /**
111
+ * Adds the specified number of minutes in place using date-fns.
112
+ *
113
+ * @param amount - Number of minutes.
114
+ *
115
+ * @returns This instance for chaining.
116
+ */
117
+ addMinutes(amount) {
118
+ this.setTime(dateFns.addMinutes(this, amount).getTime());
119
+ return this;
120
+ }
121
+ /**
122
+ * Adds the specified number of months in place using date-fns.
123
+ *
124
+ * @param amount - Number of months.
125
+ *
126
+ * @returns This instance for chaining.
127
+ */
128
+ addMonths(amount) {
129
+ this.setTime(dateFns.addMonths(this, amount).getTime());
130
+ return this;
131
+ }
132
+ /**
133
+ * Adds the specified number of seconds in place using date-fns.
134
+ *
135
+ * @param amount - Number of seconds.
136
+ *
137
+ * @returns This instance for chaining.
138
+ */
139
+ addSeconds(amount) {
140
+ this.setTime(dateFns.addSeconds(this, amount).getTime());
141
+ return this;
142
+ }
143
+ /**
144
+ * Adds the specified number of weeks in place using date-fns.
145
+ *
146
+ * @param amount - Number of weeks.
147
+ *
148
+ * @returns This instance for chaining.
149
+ */
150
+ addWeeks(amount) {
151
+ this.setTime(dateFns.addWeeks(this, amount).getTime());
152
+ return this;
153
+ }
154
+ /**
155
+ * Adds the specified number of years in place using date-fns.
156
+ *
157
+ * @param amount - Number of years.
158
+ *
159
+ * @returns This instance for chaining.
160
+ */
161
+ addYears(amount) {
162
+ this.setTime(dateFns.addYears(this, amount).getTime());
163
+ return this;
164
+ }
165
+ /**
166
+ * Returns a new `EnhancedDate` with the same timestamp, including `Invalid Date`.
167
+ */
168
+ clone() {
169
+ return new EnhancedDate(this.getTime());
170
+ }
171
+ /**
172
+ * Returns the signed difference in calendar days: this date minus the other date.
173
+ *
174
+ * @remarks
175
+ * Defaults and rounding follow date-fns.
176
+ */
177
+ differenceInCalendarDays(other) {
178
+ return dateFns.differenceInCalendarDays(this, other);
179
+ }
180
+ /**
181
+ * Returns the signed difference in calendar weeks: this date minus the other date.
182
+ *
183
+ * @remarks
184
+ * Defaults and rounding follow date-fns.
185
+ */
186
+ differenceInCalendarWeeks(other, options) {
187
+ return dateFns.differenceInCalendarWeeks(this, other, options);
188
+ }
189
+ /**
190
+ * Returns the signed difference in full minutes: this date minus the other date.
191
+ *
192
+ * @remarks
193
+ * Defaults and rounding follow date-fns.
194
+ */
195
+ differenceInMinutes(other, options) {
196
+ return dateFns.differenceInMinutes(this, other, options);
197
+ }
198
+ /**
199
+ * Moves this date to the end of its day in place.
200
+ *
201
+ * @returns This instance for chaining.
202
+ */
203
+ endOfDay() {
204
+ this.setTime(dateFns.endOfDay(this).getTime());
205
+ return this;
206
+ }
207
+ /**
208
+ * Moves this date to the end of its minute in place.
209
+ *
210
+ * @returns This instance for chaining.
211
+ */
212
+ endOfMinute() {
213
+ this.setTime(dateFns.endOfMinute(this).getTime());
214
+ return this;
215
+ }
216
+ /**
217
+ * Moves this date to the end of its month in place.
218
+ *
219
+ * @returns This instance for chaining.
220
+ */
221
+ endOfMonth() {
222
+ this.setTime(dateFns.endOfMonth(this).getTime());
223
+ return this;
224
+ }
225
+ /**
226
+ * Moves this date to the end of its week in place.
227
+ *
228
+ * @param options - date-fns week options; defaults are unchanged.
229
+ *
230
+ * @returns This instance for chaining.
231
+ */
232
+ endOfWeek(options) {
233
+ this.setTime(dateFns.endOfWeek(this, options).getTime());
234
+ return this;
235
+ }
236
+ /**
237
+ * Formats this date using a date-fns pattern (default: `yyyy-MM-dd HH:mm:ss`) and optional locale/options.
238
+ *
239
+ * @remarks
240
+ * Invalid dates and invalid patterns retain date-fns error behavior.
241
+ */
242
+ format(pattern = "yyyy-MM-dd HH:mm:ss", options) {
243
+ return dateFns.format(this, pattern, options);
244
+ }
245
+ /**
246
+ * Formats the distance from this date to now using date-fns.
247
+ */
248
+ formatDistanceToNow(options) {
249
+ return dateFns.formatDistanceToNow(this, options);
250
+ }
251
+ /**
252
+ * Returns Unix seconds using date-fns; `getTime()` returns milliseconds.
253
+ */
254
+ getUnixTime() {
255
+ return dateFns.getUnixTime(this);
256
+ }
257
+ /**
258
+ * Checks whether this date occurs after the other date.
259
+ */
260
+ isAfter(other) {
261
+ return dateFns.isAfter(this, other);
262
+ }
263
+ /**
264
+ * Checks whether this date occurs before the other date.
265
+ */
266
+ isBefore(other) {
267
+ return dateFns.isBefore(this, other);
268
+ }
269
+ /**
270
+ * Checks whether this date has the same timestamp as the other date.
271
+ */
272
+ isEqual(other) {
273
+ return dateFns.isEqual(this, other);
274
+ }
275
+ /**
276
+ * Checks whether this date is after the current time.
277
+ */
278
+ isFuture() {
279
+ return dateFns.isFuture(this);
280
+ }
281
+ /**
282
+ * Checks whether this date falls on the same calendar day as the other date.
283
+ */
284
+ isSameDay(other) {
285
+ return dateFns.isSameDay(this, other);
286
+ }
287
+ /**
288
+ * Checks whether this date falls in the same calendar minute as the other date.
289
+ */
290
+ isSameMinute(other) {
291
+ return dateFns.isSameMinute(this, other);
292
+ }
293
+ /**
294
+ * Checks whether this date falls on today.
295
+ */
296
+ isToday() {
297
+ return dateFns.isToday(this);
298
+ }
299
+ /**
300
+ * Checks whether this date falls on tomorrow.
301
+ */
302
+ isTomorrow() {
303
+ return dateFns.isTomorrow(this);
304
+ }
305
+ /**
306
+ * Checks whether this date has a valid timestamp.
307
+ */
308
+ isValid() {
309
+ return dateFns.isValid(this);
310
+ }
311
+ /**
312
+ * Moves this date to the start of its day in place.
313
+ *
314
+ * @returns This instance for chaining.
315
+ */
316
+ startOfDay() {
317
+ this.setTime(dateFns.startOfDay(this).getTime());
318
+ return this;
319
+ }
320
+ /**
321
+ * Moves this date to the start of its minute in place.
322
+ *
323
+ * @returns This instance for chaining.
324
+ */
325
+ startOfMinute() {
326
+ this.setTime(dateFns.startOfMinute(this).getTime());
327
+ return this;
328
+ }
329
+ /**
330
+ * Moves this date to the start of its month in place.
331
+ *
332
+ * @returns This instance for chaining.
333
+ */
334
+ startOfMonth() {
335
+ this.setTime(dateFns.startOfMonth(this).getTime());
336
+ return this;
337
+ }
338
+ /**
339
+ * Moves this date to the start of its week in place.
340
+ *
341
+ * @param options - date-fns week options; defaults are unchanged.
342
+ *
343
+ * @returns This instance for chaining.
344
+ */
345
+ startOfWeek(options) {
346
+ this.setTime(dateFns.startOfWeek(this, options).getTime());
347
+ return this;
348
+ }
349
+ /**
350
+ * Subtracts the specified number of days in place using date-fns.
351
+ *
352
+ * @param amount - Number of days.
353
+ *
354
+ * @returns This instance for chaining.
355
+ */
356
+ subDays(amount) {
357
+ this.setTime(dateFns.subDays(this, amount).getTime());
358
+ return this;
359
+ }
360
+ /**
361
+ * Subtracts the specified number of hours in place using date-fns.
362
+ *
363
+ * @param amount - Number of hours.
364
+ *
365
+ * @returns This instance for chaining.
366
+ */
367
+ subHours(amount) {
368
+ this.setTime(dateFns.subHours(this, amount).getTime());
369
+ return this;
370
+ }
371
+ /**
372
+ * Subtracts the specified number of milliseconds in place using date-fns.
373
+ *
374
+ * @param amount - Number of milliseconds.
375
+ *
376
+ * @returns This instance for chaining.
377
+ */
378
+ subMilliseconds(amount) {
379
+ this.setTime(dateFns.subMilliseconds(this, amount).getTime());
380
+ return this;
381
+ }
382
+ /**
383
+ * Subtracts the specified number of minutes in place using date-fns.
384
+ *
385
+ * @param amount - Number of minutes.
386
+ *
387
+ * @returns This instance for chaining.
388
+ */
389
+ subMinutes(amount) {
390
+ this.setTime(dateFns.subMinutes(this, amount).getTime());
391
+ return this;
392
+ }
393
+ /**
394
+ * Subtracts the specified number of months in place using date-fns.
395
+ *
396
+ * @param amount - Number of months.
397
+ *
398
+ * @returns This instance for chaining.
399
+ */
400
+ subMonths(amount) {
401
+ this.setTime(dateFns.subMonths(this, amount).getTime());
402
+ return this;
403
+ }
404
+ /**
405
+ * Subtracts the specified number of seconds in place using date-fns.
406
+ *
407
+ * @param amount - Number of seconds.
408
+ *
409
+ * @returns This instance for chaining.
410
+ */
411
+ subSeconds(amount) {
412
+ this.setTime(dateFns.subSeconds(this, amount).getTime());
413
+ return this;
414
+ }
415
+ /**
416
+ * Subtracts the specified number of weeks in place using date-fns.
417
+ *
418
+ * @param amount - Number of weeks.
419
+ *
420
+ * @returns This instance for chaining.
421
+ */
422
+ subWeeks(amount) {
423
+ this.setTime(dateFns.subWeeks(this, amount).getTime());
424
+ return this;
425
+ }
426
+ /**
427
+ * Subtracts the specified number of years in place using date-fns.
428
+ *
429
+ * @param amount - Number of years.
430
+ *
431
+ * @returns This instance for chaining.
432
+ */
433
+ subYears(amount) {
434
+ this.setTime(dateFns.subYears(this, amount).getTime());
435
+ return this;
436
+ }
437
+ /**
438
+ * Returns a new instance with days added, leaving this date unchanged.
439
+ */
440
+ toAddDays(amount) {
441
+ return this.clone().addDays(amount);
442
+ }
443
+ /**
444
+ * Returns a new instance with hours added, leaving this date unchanged.
445
+ */
446
+ toAddHours(amount) {
447
+ return this.clone().addHours(amount);
448
+ }
449
+ /**
450
+ * Returns a new instance with milliseconds added, leaving this date unchanged.
451
+ */
452
+ toAddMilliseconds(amount) {
453
+ return this.clone().addMilliseconds(amount);
454
+ }
455
+ /**
456
+ * Returns a new instance with minutes added, leaving this date unchanged.
457
+ */
458
+ toAddMinutes(amount) {
459
+ return this.clone().addMinutes(amount);
460
+ }
461
+ /**
462
+ * Returns a new instance with months added, leaving this date unchanged.
463
+ */
464
+ toAddMonths(amount) {
465
+ return this.clone().addMonths(amount);
466
+ }
467
+ /**
468
+ * Returns a new instance with seconds added, leaving this date unchanged.
469
+ */
470
+ toAddSeconds(amount) {
471
+ return this.clone().addSeconds(amount);
472
+ }
473
+ /**
474
+ * Returns a new instance with weeks added, leaving this date unchanged.
475
+ */
476
+ toAddWeeks(amount) {
477
+ return this.clone().addWeeks(amount);
478
+ }
479
+ /**
480
+ * Returns a new instance with years added, leaving this date unchanged.
481
+ */
482
+ toAddYears(amount) {
483
+ return this.clone().addYears(amount);
484
+ }
485
+ /**
486
+ * Returns a new plain native Date; mutations are not shared with this instance.
487
+ */
488
+ toDate() {
489
+ return new Date(this.getTime());
490
+ }
491
+ /**
492
+ * Returns a new instance at the end of this day, leaving this date unchanged.
493
+ */
494
+ toEndOfDay() {
495
+ return this.clone().endOfDay();
496
+ }
497
+ /**
498
+ * Returns a new instance at the end of this minute, leaving this date unchanged.
499
+ */
500
+ toEndOfMinute() {
501
+ return this.clone().endOfMinute();
502
+ }
503
+ /**
504
+ * Returns a new instance at the end of this month, leaving this date unchanged.
505
+ */
506
+ toEndOfMonth() {
507
+ return this.clone().endOfMonth();
508
+ }
509
+ /**
510
+ * Returns a new instance at the end of this week, leaving this date unchanged.
511
+ */
512
+ toEndOfWeek(options) {
513
+ return this.clone().endOfWeek(options);
514
+ }
515
+ /**
516
+ * Returns a new instance at the start of this day, leaving this date unchanged.
517
+ */
518
+ toStartOfDay() {
519
+ return this.clone().startOfDay();
520
+ }
521
+ /**
522
+ * Returns a new instance at the start of this minute, leaving this date unchanged.
523
+ */
524
+ toStartOfMinute() {
525
+ return this.clone().startOfMinute();
526
+ }
527
+ /**
528
+ * Returns a new instance at the start of this month, leaving this date unchanged.
529
+ */
530
+ toStartOfMonth() {
531
+ return this.clone().startOfMonth();
532
+ }
533
+ /**
534
+ * Returns a new instance at the start of this week, leaving this date unchanged.
535
+ */
536
+ toStartOfWeek(options) {
537
+ return this.clone().startOfWeek(options);
538
+ }
539
+ /**
540
+ * Returns a new instance with days subtracted, leaving this date unchanged.
541
+ */
542
+ toSubDays(amount) {
543
+ return this.clone().subDays(amount);
544
+ }
545
+ /**
546
+ * Returns a new instance with hours subtracted, leaving this date unchanged.
547
+ */
548
+ toSubHours(amount) {
549
+ return this.clone().subHours(amount);
550
+ }
551
+ /**
552
+ * Returns a new instance with milliseconds subtracted, leaving this date unchanged.
553
+ */
554
+ toSubMilliseconds(amount) {
555
+ return this.clone().subMilliseconds(amount);
556
+ }
557
+ /**
558
+ * Returns a new instance with minutes subtracted, leaving this date unchanged.
559
+ */
560
+ toSubMinutes(amount) {
561
+ return this.clone().subMinutes(amount);
562
+ }
563
+ /**
564
+ * Returns a new instance with months subtracted, leaving this date unchanged.
565
+ */
566
+ toSubMonths(amount) {
567
+ return this.clone().subMonths(amount);
568
+ }
569
+ /**
570
+ * Returns a new instance with seconds subtracted, leaving this date unchanged.
571
+ */
572
+ toSubSeconds(amount) {
573
+ return this.clone().subSeconds(amount);
574
+ }
575
+ /**
576
+ * Returns a new instance with weeks subtracted, leaving this date unchanged.
577
+ */
578
+ toSubWeeks(amount) {
579
+ return this.clone().subWeeks(amount);
580
+ }
581
+ /**
582
+ * Returns a new instance with years subtracted, leaving this date unchanged.
583
+ */
584
+ toSubYears(amount) {
585
+ return this.clone().subYears(amount);
586
+ }
587
+ };
588
+ //#endregion
589
+ export { EnhancedDate };
590
+
591
+ //# sourceMappingURL=enhanced-date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-date.js","names":[],"sources":["../../src/classes/enhanced-date.ts"],"sourcesContent":["import * as dateFns from 'date-fns';\n\n/**\n * A mutable calendar date with chainable date-fns operations.\n *\n * @remarks\n * Inherits the native constructor, including zero-based month arguments and millisecond timestamps.\n * Native methods retain their original behavior.\n * Mutating arithmetic and boundary methods update this instance and return `this`;\n * their `to`-prefixed counterparts return a new `EnhancedDate` instead.\n * Invalid dates, parsing, rounding, and week defaults follow date-fns semantics.\n * Operations use the system time zone unless configured through date-fns options.\n * Day and week arithmetic uses calendar days, preserving local wall-clock time across daylight saving changes.\n * Hour, minute, second, and millisecond arithmetic uses elapsed durations. Month and year arithmetic clamps\n * to the last valid day of the destination month. Native setters retain their native overflow behavior.\n * Exceptions from date-fns propagate unchanged, and operations can preserve or produce `Invalid Date`.\n *\n * When used in Vue state, prefer replacing the value with a `to`-prefixed result:\n * mutating a Date's internal timestamp does not trigger reactive updates.\n *\n * @example\n *\n * ```ts\n * import { EnhancedDate } from '@kikiutils/shared/classes/enhanced-date';\n *\n * const date = new EnhancedDate('2026-01-31T12:00:00Z');\n * const nextMonth = date.toAddMonths(1); // Original date is unchanged.\n * date.addDays(1).startOfDay(); // Mutates the original date.\n * nextMonth.isAfter(date);\n * ```\n */\nexport class EnhancedDate extends Date {\n // Public static methods\n\n /**\n * Returns a new instance at the end of today in the system time zone.\n */\n static endOfToday() {\n return new EnhancedDate(dateFns.endOfToday());\n }\n\n /**\n * Parses a date using date-fns and an explicit reference for missing fields.\n *\n * @param value - Date string to parse.\n * @param pattern - date-fns parsing pattern.\n * @param referenceDate - Reference for fields absent from the pattern.\n * @param options - Options passed to `date-fns/parse`.\n *\n * @returns A new `EnhancedDate`, including `Invalid Date` for invalid values.\n */\n static fromFormat(\n value: string,\n pattern: string,\n referenceDate: dateFns.DateArg<Date>,\n options?: dateFns.ParseOptions,\n ) {\n return new EnhancedDate(dateFns.parse(value, pattern, referenceDate, options));\n }\n\n /**\n * Parses an ISO 8601 string using date-fns, including its partial-date support.\n *\n * @param value - ISO date string.\n * @param options - Options passed to `date-fns/parseISO`.\n *\n * @returns A new `EnhancedDate`, or `Invalid Date` when parsing fails.\n */\n static fromISO(value: string, options?: dateFns.ParseISOOptions) {\n return new EnhancedDate(dateFns.parseISO(value, options));\n }\n\n /**\n * Creates a date from Unix seconds; native constructor numbers remain milliseconds.\n *\n * @param seconds - Seconds since the Unix epoch.\n */\n static fromUnixSeconds(seconds: number) {\n return new EnhancedDate(seconds * 1000);\n }\n\n /**\n * Returns a new instance at the start of today in the system time zone.\n */\n static startOfToday() {\n return new EnhancedDate(dateFns.startOfToday());\n }\n\n // Public instance methods\n\n /**\n * Adds the specified number of days in place using date-fns.\n *\n * @param amount - Number of days.\n *\n * @returns This instance for chaining.\n */\n addDays(amount: number) {\n this.setTime(dateFns.addDays(this, amount).getTime());\n return this;\n }\n\n /**\n * Adds the specified number of hours in place using date-fns.\n *\n * @param amount - Number of hours.\n *\n * @returns This instance for chaining.\n */\n addHours(amount: number) {\n this.setTime(dateFns.addHours(this, amount).getTime());\n return this;\n }\n\n /**\n * Adds the specified number of milliseconds in place using date-fns.\n *\n * @param amount - Number of milliseconds.\n *\n * @returns This instance for chaining.\n */\n addMilliseconds(amount: number) {\n this.setTime(dateFns.addMilliseconds(this, amount).getTime());\n return this;\n }\n\n /**\n * Adds the specified number of minutes in place using date-fns.\n *\n * @param amount - Number of minutes.\n *\n * @returns This instance for chaining.\n */\n addMinutes(amount: number) {\n this.setTime(dateFns.addMinutes(this, amount).getTime());\n return this;\n }\n\n /**\n * Adds the specified number of months in place using date-fns.\n *\n * @param amount - Number of months.\n *\n * @returns This instance for chaining.\n */\n addMonths(amount: number) {\n this.setTime(dateFns.addMonths(this, amount).getTime());\n return this;\n }\n\n /**\n * Adds the specified number of seconds in place using date-fns.\n *\n * @param amount - Number of seconds.\n *\n * @returns This instance for chaining.\n */\n addSeconds(amount: number) {\n this.setTime(dateFns.addSeconds(this, amount).getTime());\n return this;\n }\n\n /**\n * Adds the specified number of weeks in place using date-fns.\n *\n * @param amount - Number of weeks.\n *\n * @returns This instance for chaining.\n */\n addWeeks(amount: number) {\n this.setTime(dateFns.addWeeks(this, amount).getTime());\n return this;\n }\n\n /**\n * Adds the specified number of years in place using date-fns.\n *\n * @param amount - Number of years.\n *\n * @returns This instance for chaining.\n */\n addYears(amount: number) {\n this.setTime(dateFns.addYears(this, amount).getTime());\n return this;\n }\n\n /**\n * Returns a new `EnhancedDate` with the same timestamp, including `Invalid Date`.\n */\n clone() {\n return new EnhancedDate(this.getTime());\n }\n\n /**\n * Returns the signed difference in calendar days: this date minus the other date.\n *\n * @remarks\n * Defaults and rounding follow date-fns.\n */\n differenceInCalendarDays(other: dateFns.DateArg<Date>) {\n return dateFns.differenceInCalendarDays(this, other);\n }\n\n /**\n * Returns the signed difference in calendar weeks: this date minus the other date.\n *\n * @remarks\n * Defaults and rounding follow date-fns.\n */\n differenceInCalendarWeeks(other: dateFns.DateArg<Date>, options?: dateFns.DifferenceInCalendarWeeksOptions) {\n return dateFns.differenceInCalendarWeeks(this, other, options);\n }\n\n /**\n * Returns the signed difference in full minutes: this date minus the other date.\n *\n * @remarks\n * Defaults and rounding follow date-fns.\n */\n differenceInMinutes(other: dateFns.DateArg<Date>, options?: dateFns.DifferenceInMinutesOptions) {\n return dateFns.differenceInMinutes(this, other, options);\n }\n\n /**\n * Moves this date to the end of its day in place.\n *\n * @returns This instance for chaining.\n */\n endOfDay() {\n this.setTime(dateFns.endOfDay(this).getTime());\n return this;\n }\n\n /**\n * Moves this date to the end of its minute in place.\n *\n * @returns This instance for chaining.\n */\n endOfMinute() {\n this.setTime(dateFns.endOfMinute(this).getTime());\n return this;\n }\n\n /**\n * Moves this date to the end of its month in place.\n *\n * @returns This instance for chaining.\n */\n endOfMonth() {\n this.setTime(dateFns.endOfMonth(this).getTime());\n return this;\n }\n\n /**\n * Moves this date to the end of its week in place.\n *\n * @param options - date-fns week options; defaults are unchanged.\n *\n * @returns This instance for chaining.\n */\n endOfWeek(options?: dateFns.EndOfWeekOptions) {\n this.setTime(dateFns.endOfWeek(this, options).getTime());\n return this;\n }\n\n /**\n * Formats this date using a date-fns pattern (default: `yyyy-MM-dd HH:mm:ss`) and optional locale/options.\n *\n * @remarks\n * Invalid dates and invalid patterns retain date-fns error behavior.\n */\n format(pattern: string = 'yyyy-MM-dd HH:mm:ss', options?: dateFns.FormatOptions) {\n return dateFns.format(this, pattern, options);\n }\n\n /**\n * Formats the distance from this date to now using date-fns.\n */\n formatDistanceToNow(options?: dateFns.FormatDistanceToNowOptions) {\n return dateFns.formatDistanceToNow(this, options);\n }\n\n /**\n * Returns Unix seconds using date-fns; `getTime()` returns milliseconds.\n */\n getUnixTime() {\n return dateFns.getUnixTime(this);\n }\n\n /**\n * Checks whether this date occurs after the other date.\n */\n isAfter(other: dateFns.DateArg<Date>) {\n return dateFns.isAfter(this, other);\n }\n\n /**\n * Checks whether this date occurs before the other date.\n */\n isBefore(other: dateFns.DateArg<Date>) {\n return dateFns.isBefore(this, other);\n }\n\n /**\n * Checks whether this date has the same timestamp as the other date.\n */\n isEqual(other: dateFns.DateArg<Date>) {\n return dateFns.isEqual(this, other);\n }\n\n /**\n * Checks whether this date is after the current time.\n */\n isFuture() {\n return dateFns.isFuture(this);\n }\n\n /**\n * Checks whether this date falls on the same calendar day as the other date.\n */\n isSameDay(other: dateFns.DateArg<Date>) {\n return dateFns.isSameDay(this, other);\n }\n\n /**\n * Checks whether this date falls in the same calendar minute as the other date.\n */\n isSameMinute(other: dateFns.DateArg<Date>) {\n return dateFns.isSameMinute(this, other);\n }\n\n /**\n * Checks whether this date falls on today.\n */\n isToday() {\n return dateFns.isToday(this);\n }\n\n /**\n * Checks whether this date falls on tomorrow.\n */\n isTomorrow() {\n return dateFns.isTomorrow(this);\n }\n\n /**\n * Checks whether this date has a valid timestamp.\n */\n isValid() {\n return dateFns.isValid(this);\n }\n\n /**\n * Moves this date to the start of its day in place.\n *\n * @returns This instance for chaining.\n */\n startOfDay() {\n this.setTime(dateFns.startOfDay(this).getTime());\n return this;\n }\n\n /**\n * Moves this date to the start of its minute in place.\n *\n * @returns This instance for chaining.\n */\n startOfMinute() {\n this.setTime(dateFns.startOfMinute(this).getTime());\n return this;\n }\n\n /**\n * Moves this date to the start of its month in place.\n *\n * @returns This instance for chaining.\n */\n startOfMonth() {\n this.setTime(dateFns.startOfMonth(this).getTime());\n return this;\n }\n\n /**\n * Moves this date to the start of its week in place.\n *\n * @param options - date-fns week options; defaults are unchanged.\n *\n * @returns This instance for chaining.\n */\n startOfWeek(options?: dateFns.StartOfWeekOptions) {\n this.setTime(dateFns.startOfWeek(this, options).getTime());\n return this;\n }\n\n /**\n * Subtracts the specified number of days in place using date-fns.\n *\n * @param amount - Number of days.\n *\n * @returns This instance for chaining.\n */\n subDays(amount: number) {\n this.setTime(dateFns.subDays(this, amount).getTime());\n return this;\n }\n\n /**\n * Subtracts the specified number of hours in place using date-fns.\n *\n * @param amount - Number of hours.\n *\n * @returns This instance for chaining.\n */\n subHours(amount: number) {\n this.setTime(dateFns.subHours(this, amount).getTime());\n return this;\n }\n\n /**\n * Subtracts the specified number of milliseconds in place using date-fns.\n *\n * @param amount - Number of milliseconds.\n *\n * @returns This instance for chaining.\n */\n subMilliseconds(amount: number) {\n this.setTime(dateFns.subMilliseconds(this, amount).getTime());\n return this;\n }\n\n /**\n * Subtracts the specified number of minutes in place using date-fns.\n *\n * @param amount - Number of minutes.\n *\n * @returns This instance for chaining.\n */\n subMinutes(amount: number) {\n this.setTime(dateFns.subMinutes(this, amount).getTime());\n return this;\n }\n\n /**\n * Subtracts the specified number of months in place using date-fns.\n *\n * @param amount - Number of months.\n *\n * @returns This instance for chaining.\n */\n subMonths(amount: number) {\n this.setTime(dateFns.subMonths(this, amount).getTime());\n return this;\n }\n\n /**\n * Subtracts the specified number of seconds in place using date-fns.\n *\n * @param amount - Number of seconds.\n *\n * @returns This instance for chaining.\n */\n subSeconds(amount: number) {\n this.setTime(dateFns.subSeconds(this, amount).getTime());\n return this;\n }\n\n /**\n * Subtracts the specified number of weeks in place using date-fns.\n *\n * @param amount - Number of weeks.\n *\n * @returns This instance for chaining.\n */\n subWeeks(amount: number) {\n this.setTime(dateFns.subWeeks(this, amount).getTime());\n return this;\n }\n\n /**\n * Subtracts the specified number of years in place using date-fns.\n *\n * @param amount - Number of years.\n *\n * @returns This instance for chaining.\n */\n subYears(amount: number) {\n this.setTime(dateFns.subYears(this, amount).getTime());\n return this;\n }\n\n /**\n * Returns a new instance with days added, leaving this date unchanged.\n */\n toAddDays(amount: number) {\n return this.clone().addDays(amount);\n }\n\n /**\n * Returns a new instance with hours added, leaving this date unchanged.\n */\n toAddHours(amount: number) {\n return this.clone().addHours(amount);\n }\n\n /**\n * Returns a new instance with milliseconds added, leaving this date unchanged.\n */\n toAddMilliseconds(amount: number) {\n return this.clone().addMilliseconds(amount);\n }\n\n /**\n * Returns a new instance with minutes added, leaving this date unchanged.\n */\n toAddMinutes(amount: number) {\n return this.clone().addMinutes(amount);\n }\n\n /**\n * Returns a new instance with months added, leaving this date unchanged.\n */\n toAddMonths(amount: number) {\n return this.clone().addMonths(amount);\n }\n\n /**\n * Returns a new instance with seconds added, leaving this date unchanged.\n */\n toAddSeconds(amount: number) {\n return this.clone().addSeconds(amount);\n }\n\n /**\n * Returns a new instance with weeks added, leaving this date unchanged.\n */\n toAddWeeks(amount: number) {\n return this.clone().addWeeks(amount);\n }\n\n /**\n * Returns a new instance with years added, leaving this date unchanged.\n */\n toAddYears(amount: number) {\n return this.clone().addYears(amount);\n }\n\n /**\n * Returns a new plain native Date; mutations are not shared with this instance.\n */\n toDate() {\n return new Date(this.getTime());\n }\n\n /**\n * Returns a new instance at the end of this day, leaving this date unchanged.\n */\n toEndOfDay() {\n return this.clone().endOfDay();\n }\n\n /**\n * Returns a new instance at the end of this minute, leaving this date unchanged.\n */\n toEndOfMinute() {\n return this.clone().endOfMinute();\n }\n\n /**\n * Returns a new instance at the end of this month, leaving this date unchanged.\n */\n toEndOfMonth() {\n return this.clone().endOfMonth();\n }\n\n /**\n * Returns a new instance at the end of this week, leaving this date unchanged.\n */\n toEndOfWeek(options?: dateFns.EndOfWeekOptions) {\n return this.clone().endOfWeek(options);\n }\n\n /**\n * Returns a new instance at the start of this day, leaving this date unchanged.\n */\n toStartOfDay() {\n return this.clone().startOfDay();\n }\n\n /**\n * Returns a new instance at the start of this minute, leaving this date unchanged.\n */\n toStartOfMinute() {\n return this.clone().startOfMinute();\n }\n\n /**\n * Returns a new instance at the start of this month, leaving this date unchanged.\n */\n toStartOfMonth() {\n return this.clone().startOfMonth();\n }\n\n /**\n * Returns a new instance at the start of this week, leaving this date unchanged.\n */\n toStartOfWeek(options?: dateFns.StartOfWeekOptions) {\n return this.clone().startOfWeek(options);\n }\n\n /**\n * Returns a new instance with days subtracted, leaving this date unchanged.\n */\n toSubDays(amount: number) {\n return this.clone().subDays(amount);\n }\n\n /**\n * Returns a new instance with hours subtracted, leaving this date unchanged.\n */\n toSubHours(amount: number) {\n return this.clone().subHours(amount);\n }\n\n /**\n * Returns a new instance with milliseconds subtracted, leaving this date unchanged.\n */\n toSubMilliseconds(amount: number) {\n return this.clone().subMilliseconds(amount);\n }\n\n /**\n * Returns a new instance with minutes subtracted, leaving this date unchanged.\n */\n toSubMinutes(amount: number) {\n return this.clone().subMinutes(amount);\n }\n\n /**\n * Returns a new instance with months subtracted, leaving this date unchanged.\n */\n toSubMonths(amount: number) {\n return this.clone().subMonths(amount);\n }\n\n /**\n * Returns a new instance with seconds subtracted, leaving this date unchanged.\n */\n toSubSeconds(amount: number) {\n return this.clone().subSeconds(amount);\n }\n\n /**\n * Returns a new instance with weeks subtracted, leaving this date unchanged.\n */\n toSubWeeks(amount: number) {\n return this.clone().subWeeks(amount);\n }\n\n /**\n * Returns a new instance with years subtracted, leaving this date unchanged.\n */\n toSubYears(amount: number) {\n return this.clone().subYears(amount);\n }\n}\n"],"mappings":"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"}