indusagi-coding-agent 0.1.22 → 0.1.24

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 (222) hide show
  1. package/CHANGELOG.md +72 -11
  2. package/README.md +2 -36
  3. package/dist/cli/args.d.ts +117 -1
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +231 -64
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/config-selector.d.ts +58 -2
  8. package/dist/cli/config-selector.d.ts.map +1 -1
  9. package/dist/cli/config-selector.js +130 -12
  10. package/dist/cli/config-selector.js.map +1 -1
  11. package/dist/cli/file-processor.d.ts +70 -2
  12. package/dist/cli/file-processor.d.ts.map +1 -1
  13. package/dist/cli/file-processor.js +240 -15
  14. package/dist/cli/file-processor.js.map +1 -1
  15. package/dist/cli/list-models.d.ts +63 -3
  16. package/dist/cli/list-models.d.ts.map +1 -1
  17. package/dist/cli/list-models.js +202 -27
  18. package/dist/cli/list-models.js.map +1 -1
  19. package/dist/cli/login-handler.d.ts +82 -8
  20. package/dist/cli/login-handler.d.ts.map +1 -1
  21. package/dist/cli/login-handler.js +410 -77
  22. package/dist/cli/login-handler.js.map +1 -1
  23. package/dist/cli/session-picker.d.ts +74 -2
  24. package/dist/cli/session-picker.d.ts.map +1 -1
  25. package/dist/cli/session-picker.js +236 -12
  26. package/dist/cli/session-picker.js.map +1 -1
  27. package/dist/core/agent-session.d.ts +214 -9
  28. package/dist/core/agent-session.d.ts.map +1 -1
  29. package/dist/core/agent-session.js +214 -9
  30. package/dist/core/agent-session.js.map +1 -1
  31. package/dist/core/bash-executor.d.ts +302 -12
  32. package/dist/core/bash-executor.d.ts.map +1 -1
  33. package/dist/core/bash-executor.js +302 -12
  34. package/dist/core/bash-executor.js.map +1 -1
  35. package/dist/core/diagnostics.d.ts +191 -0
  36. package/dist/core/diagnostics.d.ts.map +1 -1
  37. package/dist/core/diagnostics.js +142 -0
  38. package/dist/core/diagnostics.js.map +1 -1
  39. package/dist/core/event-bus.d.ts +146 -0
  40. package/dist/core/event-bus.d.ts.map +1 -1
  41. package/dist/core/event-bus.js +93 -0
  42. package/dist/core/event-bus.js.map +1 -1
  43. package/dist/core/export-html/ansi-to-html.d.ts +4 -0
  44. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  45. package/dist/core/export-html/ansi-to-html.js +4 -0
  46. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  47. package/dist/core/export-html/index.d.ts +128 -0
  48. package/dist/core/export-html/index.d.ts.map +1 -1
  49. package/dist/core/export-html/index.js +128 -0
  50. package/dist/core/export-html/index.js.map +1 -1
  51. package/dist/core/export-html/tool-renderer.d.ts +4 -0
  52. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  53. package/dist/core/export-html/tool-renderer.js +4 -0
  54. package/dist/core/export-html/tool-renderer.js.map +1 -1
  55. package/dist/core/keybindings.d.ts +142 -0
  56. package/dist/core/keybindings.d.ts.map +1 -1
  57. package/dist/core/keybindings.js +142 -0
  58. package/dist/core/keybindings.js.map +1 -1
  59. package/dist/core/model-registry.d.ts +98 -1
  60. package/dist/core/model-registry.d.ts.map +1 -1
  61. package/dist/core/model-registry.js +98 -1
  62. package/dist/core/model-registry.js.map +1 -1
  63. package/dist/core/model-resolver.d.ts +99 -1
  64. package/dist/core/model-resolver.d.ts.map +1 -1
  65. package/dist/core/model-resolver.js +99 -1
  66. package/dist/core/model-resolver.js.map +1 -1
  67. package/dist/core/prompt-templates.js.map +1 -1
  68. package/dist/core/sdk.d.ts +1 -1
  69. package/dist/core/sdk.d.ts.map +1 -1
  70. package/dist/core/sdk.js +0 -2
  71. package/dist/core/sdk.js.map +1 -1
  72. package/dist/core/session-manager.d.ts +127 -0
  73. package/dist/core/session-manager.d.ts.map +1 -1
  74. package/dist/core/session-manager.js +125 -0
  75. package/dist/core/session-manager.js.map +1 -1
  76. package/dist/core/skills.js.map +1 -1
  77. package/dist/core/subagents.js.map +1 -1
  78. package/dist/core/tools/bash.d.ts +391 -11
  79. package/dist/core/tools/bash.d.ts.map +1 -1
  80. package/dist/core/tools/bash.js +269 -2
  81. package/dist/core/tools/bash.js.map +1 -1
  82. package/dist/core/tools/edit.d.ts +284 -6
  83. package/dist/core/tools/edit.d.ts.map +1 -1
  84. package/dist/core/tools/edit.js +238 -0
  85. package/dist/core/tools/edit.js.map +1 -1
  86. package/dist/core/tools/find.d.ts +169 -5
  87. package/dist/core/tools/find.d.ts.map +1 -1
  88. package/dist/core/tools/find.js +136 -0
  89. package/dist/core/tools/find.js.map +1 -1
  90. package/dist/core/tools/grep.d.ts +285 -5
  91. package/dist/core/tools/grep.d.ts.map +1 -1
  92. package/dist/core/tools/grep.js +247 -0
  93. package/dist/core/tools/grep.js.map +1 -1
  94. package/dist/core/tools/index.d.ts +0 -18
  95. package/dist/core/tools/index.d.ts.map +1 -1
  96. package/dist/core/tools/index.js +1 -23
  97. package/dist/core/tools/index.js.map +1 -1
  98. package/dist/core/tools/ls.d.ts +6 -0
  99. package/dist/core/tools/ls.d.ts.map +1 -1
  100. package/dist/core/tools/ls.js +6 -0
  101. package/dist/core/tools/ls.js.map +1 -1
  102. package/dist/core/tools/read.d.ts +308 -7
  103. package/dist/core/tools/read.d.ts.map +1 -1
  104. package/dist/core/tools/read.js +231 -0
  105. package/dist/core/tools/read.js.map +1 -1
  106. package/dist/core/tools/webfetch.d.ts +118 -3
  107. package/dist/core/tools/webfetch.d.ts.map +1 -1
  108. package/dist/core/tools/webfetch.js +118 -3
  109. package/dist/core/tools/webfetch.js.map +1 -1
  110. package/dist/core/tools/websearch.d.ts +130 -3
  111. package/dist/core/tools/websearch.d.ts.map +1 -1
  112. package/dist/core/tools/websearch.js +130 -3
  113. package/dist/core/tools/websearch.js.map +1 -1
  114. package/dist/core/tools/write.d.ts +251 -5
  115. package/dist/core/tools/write.d.ts.map +1 -1
  116. package/dist/core/tools/write.js +210 -0
  117. package/dist/core/tools/write.js.map +1 -1
  118. package/dist/modes/interactive/components/assistant-message.d.ts +164 -1
  119. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  120. package/dist/modes/interactive/components/assistant-message.js +164 -1
  121. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  122. package/dist/modes/interactive/components/bash-execution.d.ts +297 -1
  123. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  124. package/dist/modes/interactive/components/bash-execution.js +297 -1
  125. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  126. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  127. package/dist/modes/interactive/components/tool-execution.js +251 -1
  128. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  129. package/dist/modes/interactive/components/user-message.d.ts +186 -1
  130. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  131. package/dist/modes/interactive/components/user-message.js +186 -1
  132. package/dist/modes/interactive/components/user-message.js.map +1 -1
  133. package/dist/modes/interactive/interactive-mode.d.ts +1567 -13
  134. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  135. package/dist/modes/interactive/interactive-mode.js +1567 -13
  136. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  137. package/dist/modes/interactive/theme/theme.d.ts +422 -0
  138. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  139. package/dist/modes/interactive/theme/theme.js +422 -0
  140. package/dist/modes/interactive/theme/theme.js.map +1 -1
  141. package/dist/modes/print-mode.d.ts +538 -5
  142. package/dist/modes/print-mode.d.ts.map +1 -1
  143. package/dist/modes/print-mode.js +538 -5
  144. package/dist/modes/print-mode.js.map +1 -1
  145. package/dist/modes/rpc/rpc-client.d.ts +921 -8
  146. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  147. package/dist/modes/rpc/rpc-client.js +921 -8
  148. package/dist/modes/rpc/rpc-client.js.map +1 -1
  149. package/dist/modes/rpc/rpc-mode.d.ts +802 -9
  150. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  151. package/dist/modes/rpc/rpc-mode.js +802 -9
  152. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  153. package/dist/modes/rpc/rpc-types.d.ts +356 -3
  154. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  155. package/dist/modes/rpc/rpc-types.js +356 -3
  156. package/dist/modes/rpc/rpc-types.js.map +1 -1
  157. package/dist/modes/shared.d.ts +386 -0
  158. package/dist/modes/shared.d.ts.map +1 -0
  159. package/dist/modes/shared.js +543 -0
  160. package/dist/modes/shared.js.map +1 -0
  161. package/dist/utils/array.d.ts +389 -0
  162. package/dist/utils/array.d.ts.map +1 -0
  163. package/dist/utils/array.js +585 -0
  164. package/dist/utils/array.js.map +1 -0
  165. package/dist/utils/color-formatter.d.ts +318 -0
  166. package/dist/utils/color-formatter.d.ts.map +1 -0
  167. package/dist/utils/color-formatter.js +442 -0
  168. package/dist/utils/color-formatter.js.map +1 -0
  169. package/dist/utils/data-transformer.d.ts +326 -0
  170. package/dist/utils/data-transformer.d.ts.map +1 -0
  171. package/dist/utils/data-transformer.js +512 -0
  172. package/dist/utils/data-transformer.js.map +1 -0
  173. package/dist/utils/date-formatter.d.ts +281 -0
  174. package/dist/utils/date-formatter.d.ts.map +1 -0
  175. package/dist/utils/date-formatter.js +503 -0
  176. package/dist/utils/date-formatter.js.map +1 -0
  177. package/dist/utils/error-handler.d.ts +541 -0
  178. package/dist/utils/error-handler.d.ts.map +1 -0
  179. package/dist/utils/error-handler.js +726 -0
  180. package/dist/utils/error-handler.js.map +1 -0
  181. package/dist/utils/file-operations.d.ts +297 -0
  182. package/dist/utils/file-operations.d.ts.map +1 -0
  183. package/dist/utils/file-operations.js +505 -0
  184. package/dist/utils/file-operations.js.map +1 -0
  185. package/dist/utils/frontmatter.d.ts +268 -6
  186. package/dist/utils/frontmatter.d.ts.map +1 -1
  187. package/dist/utils/frontmatter.js +500 -21
  188. package/dist/utils/frontmatter.js.map +1 -1
  189. package/dist/utils/json-formatter.d.ts +259 -0
  190. package/dist/utils/json-formatter.d.ts.map +1 -0
  191. package/dist/utils/json-formatter.js +517 -0
  192. package/dist/utils/json-formatter.js.map +1 -0
  193. package/dist/utils/logger.d.ts +176 -0
  194. package/dist/utils/logger.d.ts.map +1 -0
  195. package/dist/utils/logger.js +346 -0
  196. package/dist/utils/logger.js.map +1 -0
  197. package/dist/utils/markdown-formatter.d.ts +211 -0
  198. package/dist/utils/markdown-formatter.d.ts.map +1 -0
  199. package/dist/utils/markdown-formatter.js +482 -0
  200. package/dist/utils/markdown-formatter.js.map +1 -0
  201. package/dist/utils/path-validator.d.ts +603 -0
  202. package/dist/utils/path-validator.d.ts.map +1 -0
  203. package/dist/utils/path-validator.js +870 -0
  204. package/dist/utils/path-validator.js.map +1 -0
  205. package/dist/utils/string-formatter.d.ts +609 -0
  206. package/dist/utils/string-formatter.d.ts.map +1 -0
  207. package/dist/utils/string-formatter.js +806 -0
  208. package/dist/utils/string-formatter.js.map +1 -0
  209. package/dist/utils/type-guards.d.ts +629 -0
  210. package/dist/utils/type-guards.d.ts.map +1 -0
  211. package/dist/utils/type-guards.js +662 -0
  212. package/dist/utils/type-guards.js.map +1 -0
  213. package/docs/COMPLETE-GUIDE.md +300 -0
  214. package/docs/MODES-ARCHITECTURE.md +565 -0
  215. package/docs/PRINT-MODE-GUIDE.md +456 -0
  216. package/docs/README.md +1 -2
  217. package/docs/RPC-GUIDE.md +705 -0
  218. package/docs/UTILS-IMPLEMENTATION-SUMMARY.md +647 -0
  219. package/docs/UTILS-MODULE-OVERVIEW.md +1480 -0
  220. package/docs/UTILS-QA-CHECKLIST.md +1061 -0
  221. package/docs/UTILS-USAGE-GUIDE.md +1419 -0
  222. package/package.json +3 -3
@@ -0,0 +1,503 @@
1
+ /**
2
+ * @fileoverview Date and time formatting utilities with timezone support
3
+ *
4
+ * This module provides:
5
+ * - Duration formatting (ms to human readable)
6
+ * - Relative time formatting (e.g., "2 hours ago")
7
+ * - Date parsing from various formats
8
+ * - ISO string conversion
9
+ * - Time arithmetic (add/subtract time)
10
+ * - Timezone handling
11
+ * - Formatting with locale support
12
+ * - Date validation
13
+ *
14
+ * @example
15
+ * import { formatDuration, formatRelativeTime, addTime, toISOString } from './date-formatter';
16
+ *
17
+ * const duration = formatDuration(125000); // "2m 5s"
18
+ * const relative = formatRelativeTime(new Date(Date.now() - 3600000)); // "1 hour ago"
19
+ * const future = addTime(new Date(), 1, 'day'); // Add 1 day
20
+ *
21
+ * @author indusagi
22
+ * @version 1.0.0
23
+ */
24
+ /**
25
+ * Format milliseconds to human-readable duration string
26
+ * @param ms - Milliseconds to format
27
+ * @param precision - Number of units to show (default: 2)
28
+ * @returns Formatted duration string
29
+ *
30
+ * @example
31
+ * formatDuration(1000); // "1s"
32
+ * formatDuration(61000); // "1m 1s"
33
+ * formatDuration(3661000); // "1h 1m"
34
+ * formatDuration(90061000); // "1d 1h"
35
+ *
36
+ * @example
37
+ * formatDuration(125000, 3); // "2m 5s 0ms"
38
+ */
39
+ export function formatDuration(ms, precision = 2) {
40
+ if (ms < 0)
41
+ return '0s';
42
+ if (ms === 0)
43
+ return '0ms';
44
+ const units = [
45
+ { name: 'd', ms: 86400000 },
46
+ { name: 'h', ms: 3600000 },
47
+ { name: 'm', ms: 60000 },
48
+ { name: 's', ms: 1000 },
49
+ { name: 'ms', ms: 1 },
50
+ ];
51
+ const parts = [];
52
+ let remaining = ms;
53
+ for (const unit of units) {
54
+ if (remaining >= unit.ms) {
55
+ const value = Math.floor(remaining / unit.ms);
56
+ parts.push(`${value}${unit.name}`);
57
+ remaining -= value * unit.ms;
58
+ if (parts.length >= precision) {
59
+ break;
60
+ }
61
+ }
62
+ }
63
+ return parts.length > 0 ? parts.join(' ') : '0ms';
64
+ }
65
+ /**
66
+ * Parse duration string to milliseconds
67
+ * @param duration - Duration string (e.g., "1h 30m", "2d", "500ms")
68
+ * @returns Milliseconds
69
+ *
70
+ * @example
71
+ * parseDuration('1s'); // 1000
72
+ * parseDuration('1m 30s'); // 90000
73
+ * parseDuration('2h'); // 7200000
74
+ * parseDuration('1d 2h 30m'); // 95400000
75
+ */
76
+ export function parseDuration(duration) {
77
+ const unitMap = {
78
+ ms: 1,
79
+ s: 1000,
80
+ m: 60000,
81
+ h: 3600000,
82
+ d: 86400000,
83
+ w: 604800000,
84
+ y: 31536000000,
85
+ };
86
+ let total = 0;
87
+ const parts = duration.match(/(\d+(?:\.\d+)?)\s*([a-z]+)/gi);
88
+ if (!parts) {
89
+ return 0;
90
+ }
91
+ for (const part of parts) {
92
+ const match = part.match(/(\d+(?:\.\d+)?)\s*([a-z]+)/i);
93
+ if (match) {
94
+ const value = parseFloat(match[1]);
95
+ const unit = match[2].toLowerCase();
96
+ if (unitMap[unit]) {
97
+ total += value * unitMap[unit];
98
+ }
99
+ }
100
+ }
101
+ return Math.floor(total);
102
+ }
103
+ /**
104
+ * Format date as relative time (e.g., "2 hours ago")
105
+ * @param date - Date to format
106
+ * @param baseDate - Base date for comparison (default: now)
107
+ * @returns Relative time string
108
+ *
109
+ * @example
110
+ * formatRelativeTime(new Date(Date.now() - 60000)); // "1 minute ago"
111
+ * formatRelativeTime(new Date(Date.now() - 3600000)); // "1 hour ago"
112
+ * formatRelativeTime(new Date(Date.now() - 86400000)); // "1 day ago"
113
+ *
114
+ * @example
115
+ * const future = new Date(Date.now() + 3600000);
116
+ * formatRelativeTime(future); // "in 1 hour"
117
+ */
118
+ export function formatRelativeTime(date, baseDate = new Date()) {
119
+ const seconds = Math.floor((baseDate.getTime() - date.getTime()) / 1000);
120
+ if (seconds < 0) {
121
+ return formatRelativeTimeFuture(-seconds);
122
+ }
123
+ // Seconds
124
+ if (seconds < 60) {
125
+ return seconds === 1 ? '1 second ago' : `${seconds} seconds ago`;
126
+ }
127
+ // Minutes
128
+ const minutes = Math.floor(seconds / 60);
129
+ if (minutes < 60) {
130
+ return minutes === 1 ? '1 minute ago' : `${minutes} minutes ago`;
131
+ }
132
+ // Hours
133
+ const hours = Math.floor(minutes / 60);
134
+ if (hours < 24) {
135
+ return hours === 1 ? '1 hour ago' : `${hours} hours ago`;
136
+ }
137
+ // Days
138
+ const days = Math.floor(hours / 24);
139
+ if (days < 7) {
140
+ return days === 1 ? '1 day ago' : `${days} days ago`;
141
+ }
142
+ // Weeks
143
+ const weeks = Math.floor(days / 7);
144
+ if (weeks < 4) {
145
+ return weeks === 1 ? '1 week ago' : `${weeks} weeks ago`;
146
+ }
147
+ // Months
148
+ const months = Math.floor(days / 30);
149
+ if (months < 12) {
150
+ return months === 1 ? '1 month ago' : `${months} months ago`;
151
+ }
152
+ // Years
153
+ const years = Math.floor(days / 365);
154
+ return years === 1 ? '1 year ago' : `${years} years ago`;
155
+ }
156
+ /**
157
+ * Format future relative time
158
+ * @param seconds - Seconds in future
159
+ * @returns Relative time string
160
+ */
161
+ function formatRelativeTimeFuture(seconds) {
162
+ if (seconds < 60) {
163
+ return seconds === 1 ? 'in 1 second' : `in ${seconds} seconds`;
164
+ }
165
+ const minutes = Math.floor(seconds / 60);
166
+ if (minutes < 60) {
167
+ return minutes === 1 ? 'in 1 minute' : `in ${minutes} minutes`;
168
+ }
169
+ const hours = Math.floor(minutes / 60);
170
+ if (hours < 24) {
171
+ return hours === 1 ? 'in 1 hour' : `in ${hours} hours`;
172
+ }
173
+ const days = Math.floor(hours / 24);
174
+ if (days < 7) {
175
+ return days === 1 ? 'in 1 day' : `in ${days} days`;
176
+ }
177
+ const weeks = Math.floor(days / 7);
178
+ if (weeks < 4) {
179
+ return weeks === 1 ? 'in 1 week' : `in ${weeks} weeks`;
180
+ }
181
+ const months = Math.floor(days / 30);
182
+ if (months < 12) {
183
+ return months === 1 ? 'in 1 month' : `in ${months} months`;
184
+ }
185
+ const years = Math.floor(days / 365);
186
+ return years === 1 ? 'in 1 year' : `in ${years} years`;
187
+ }
188
+ /**
189
+ * Parse date from various formats
190
+ * @param dateString - Date string to parse
191
+ * @returns Parsed Date object or null
192
+ *
193
+ * @example
194
+ * parseDate('2024-01-15'); // Date object
195
+ * parseDate('01/15/2024'); // Date object
196
+ * parseDate('January 15, 2024'); // Date object
197
+ * parseDate('invalid'); // null
198
+ */
199
+ export function parseDate(dateString) {
200
+ if (!dateString) {
201
+ return null;
202
+ }
203
+ // Try standard Date parsing first
204
+ const date = new Date(dateString);
205
+ if (!isNaN(date.getTime())) {
206
+ return date;
207
+ }
208
+ // Try MM/DD/YYYY format
209
+ const usFormat = dateString.match(/(\d{1,2})\/(\d{1,2})\/(\d{4})/);
210
+ if (usFormat) {
211
+ return new Date(parseInt(usFormat[3]), parseInt(usFormat[1]) - 1, parseInt(usFormat[2]));
212
+ }
213
+ // Try DD.MM.YYYY format
214
+ const euFormat = dateString.match(/(\d{1,2})\.(\d{1,2})\.(\d{4})/);
215
+ if (euFormat) {
216
+ return new Date(parseInt(euFormat[3]), parseInt(euFormat[2]) - 1, parseInt(euFormat[1]));
217
+ }
218
+ // Try YYYY-MM-DD format
219
+ const isoFormat = dateString.match(/(\d{4})-(\d{2})-(\d{2})/);
220
+ if (isoFormat) {
221
+ return new Date(parseInt(isoFormat[1]), parseInt(isoFormat[2]) - 1, parseInt(isoFormat[3]));
222
+ }
223
+ return null;
224
+ }
225
+ /**
226
+ * Convert date to ISO string
227
+ * @param date - Date to convert
228
+ * @returns ISO string
229
+ *
230
+ * @example
231
+ * toISOString(new Date('2024-01-15')); // "2024-01-15T00:00:00.000Z"
232
+ */
233
+ export function toISOString(date) {
234
+ return date.toISOString();
235
+ }
236
+ /**
237
+ * Convert ISO string to Date
238
+ * @param isoString - ISO string
239
+ * @returns Date object
240
+ *
241
+ * @example
242
+ * fromISO('2024-01-15T12:30:00Z');
243
+ */
244
+ export function fromISO(isoString) {
245
+ return new Date(isoString);
246
+ }
247
+ /**
248
+ * Add time to date
249
+ * @param date - Base date
250
+ * @param amount - Amount to add
251
+ * @param unit - Time unit
252
+ * @returns New date with time added
253
+ *
254
+ * @example
255
+ * const date = new Date('2024-01-15');
256
+ * addTime(date, 1, 'day'); // 2024-01-16
257
+ * addTime(date, 2, 'hour'); // Add 2 hours
258
+ * addTime(date, 30, 'minute'); // Add 30 minutes
259
+ */
260
+ export function addTime(date, amount, unit) {
261
+ const newDate = new Date(date);
262
+ switch (unit) {
263
+ case 'millisecond':
264
+ newDate.setMilliseconds(newDate.getMilliseconds() + amount);
265
+ break;
266
+ case 'second':
267
+ newDate.setSeconds(newDate.getSeconds() + amount);
268
+ break;
269
+ case 'minute':
270
+ newDate.setMinutes(newDate.getMinutes() + amount);
271
+ break;
272
+ case 'hour':
273
+ newDate.setHours(newDate.getHours() + amount);
274
+ break;
275
+ case 'day':
276
+ newDate.setDate(newDate.getDate() + amount);
277
+ break;
278
+ case 'week':
279
+ newDate.setDate(newDate.getDate() + amount * 7);
280
+ break;
281
+ case 'month':
282
+ newDate.setMonth(newDate.getMonth() + amount);
283
+ break;
284
+ case 'year':
285
+ newDate.setFullYear(newDate.getFullYear() + amount);
286
+ break;
287
+ }
288
+ return newDate;
289
+ }
290
+ /**
291
+ * Subtract time from date
292
+ * @param date - Base date
293
+ * @param amount - Amount to subtract
294
+ * @param unit - Time unit
295
+ * @returns New date with time subtracted
296
+ *
297
+ * @example
298
+ * const date = new Date('2024-01-15');
299
+ * subtractTime(date, 1, 'day'); // 2024-01-14
300
+ * subtractTime(date, 1, 'hour'); // 1 hour earlier
301
+ */
302
+ export function subtractTime(date, amount, unit) {
303
+ return addTime(date, -amount, unit);
304
+ }
305
+ /**
306
+ * Get duration between two dates
307
+ * @param startDate - Start date
308
+ * @param endDate - End date
309
+ * @returns Duration object
310
+ *
311
+ * @example
312
+ * const start = new Date('2024-01-15T08:00:00');
313
+ * const end = new Date('2024-01-16T12:30:45');
314
+ * const duration = getDuration(start, end);
315
+ * // { days: 1, hours: 4, minutes: 30, seconds: 45, milliseconds: 0 }
316
+ */
317
+ export function getDuration(startDate, endDate) {
318
+ let ms = endDate.getTime() - startDate.getTime();
319
+ if (ms < 0) {
320
+ ms = -ms;
321
+ }
322
+ const days = Math.floor(ms / 86400000);
323
+ ms -= days * 86400000;
324
+ const hours = Math.floor(ms / 3600000);
325
+ ms -= hours * 3600000;
326
+ const minutes = Math.floor(ms / 60000);
327
+ ms -= minutes * 60000;
328
+ const seconds = Math.floor(ms / 1000);
329
+ ms -= seconds * 1000;
330
+ const milliseconds = ms;
331
+ return { days, hours, minutes, seconds, milliseconds };
332
+ }
333
+ /**
334
+ * Format date with options
335
+ * @param date - Date to format
336
+ * @param options - Format options
337
+ * @returns Formatted date string
338
+ *
339
+ * @example
340
+ * formatDate(new Date(), { dateStyle: 'long' });
341
+ * // "January 15, 2024"
342
+ *
343
+ * @example
344
+ * formatDate(new Date(), { dateStyle: 'short', timeStyle: 'short' });
345
+ * // "1/15/24, 3:30 PM"
346
+ */
347
+ export function formatDate(date, options = {}) {
348
+ const { locale = 'en-US', dateStyle, timeStyle, timezone, } = options;
349
+ const intlOptions = {};
350
+ if (dateStyle)
351
+ intlOptions.dateStyle = dateStyle;
352
+ if (timeStyle)
353
+ intlOptions.timeStyle = timeStyle;
354
+ if (timezone)
355
+ intlOptions.timeZone = timezone;
356
+ return new Intl.DateTimeFormat(locale, intlOptions).format(date);
357
+ }
358
+ /**
359
+ * Get start of day
360
+ * @param date - Date
361
+ * @returns Date at start of day (00:00:00)
362
+ *
363
+ * @example
364
+ * startOfDay(new Date('2024-01-15T14:30:00'));
365
+ * // 2024-01-15T00:00:00
366
+ */
367
+ export function startOfDay(date) {
368
+ const newDate = new Date(date);
369
+ newDate.setHours(0, 0, 0, 0);
370
+ return newDate;
371
+ }
372
+ /**
373
+ * Get end of day
374
+ * @param date - Date
375
+ * @returns Date at end of day (23:59:59.999)
376
+ *
377
+ * @example
378
+ * endOfDay(new Date('2024-01-15T14:30:00'));
379
+ * // 2024-01-15T23:59:59.999
380
+ */
381
+ export function endOfDay(date) {
382
+ const newDate = new Date(date);
383
+ newDate.setHours(23, 59, 59, 999);
384
+ return newDate;
385
+ }
386
+ /**
387
+ * Get start of month
388
+ * @param date - Date
389
+ * @returns Date at start of month
390
+ *
391
+ * @example
392
+ * startOfMonth(new Date('2024-01-15'));
393
+ * // 2024-01-01T00:00:00
394
+ */
395
+ export function startOfMonth(date) {
396
+ const newDate = new Date(date);
397
+ newDate.setDate(1);
398
+ newDate.setHours(0, 0, 0, 0);
399
+ return newDate;
400
+ }
401
+ /**
402
+ * Get end of month
403
+ * @param date - Date
404
+ * @returns Date at end of month
405
+ *
406
+ * @example
407
+ * endOfMonth(new Date('2024-01-15'));
408
+ * // 2024-01-31T23:59:59.999
409
+ */
410
+ export function endOfMonth(date) {
411
+ const newDate = new Date(date);
412
+ newDate.setMonth(newDate.getMonth() + 1);
413
+ newDate.setDate(0);
414
+ newDate.setHours(23, 59, 59, 999);
415
+ return newDate;
416
+ }
417
+ /**
418
+ * Check if date is today
419
+ * @param date - Date to check
420
+ * @returns True if date is today
421
+ *
422
+ * @example
423
+ * isToday(new Date()); // true
424
+ * isToday(new Date(Date.now() - 86400000)); // false
425
+ */
426
+ export function isToday(date) {
427
+ const today = new Date();
428
+ return (date.getDate() === today.getDate() &&
429
+ date.getMonth() === today.getMonth() &&
430
+ date.getFullYear() === today.getFullYear());
431
+ }
432
+ /**
433
+ * Check if date is in the past
434
+ * @param date - Date to check
435
+ * @returns True if date is in the past
436
+ *
437
+ * @example
438
+ * isPast(new Date(Date.now() - 1000)); // true
439
+ * isPast(new Date(Date.now() + 1000)); // false
440
+ */
441
+ export function isPast(date) {
442
+ return date.getTime() < Date.now();
443
+ }
444
+ /**
445
+ * Check if date is in the future
446
+ * @param date - Date to check
447
+ * @returns True if date is in the future
448
+ *
449
+ * @example
450
+ * isFuture(new Date(Date.now() + 1000)); // true
451
+ * isFuture(new Date(Date.now() - 1000)); // false
452
+ */
453
+ export function isFuture(date) {
454
+ return date.getTime() > Date.now();
455
+ }
456
+ /**
457
+ * Get array of dates between two dates
458
+ * @param startDate - Start date
459
+ * @param endDate - End date
460
+ * @param step - Step in days (default: 1)
461
+ * @returns Array of dates
462
+ *
463
+ * @example
464
+ * const dates = dateRange(
465
+ * new Date('2024-01-15'),
466
+ * new Date('2024-01-20')
467
+ * );
468
+ * // [Jan 15, Jan 16, Jan 17, Jan 18, Jan 19, Jan 20]
469
+ */
470
+ export function dateRange(startDate, endDate, step = 1) {
471
+ const dates = [];
472
+ const currentDate = new Date(startDate);
473
+ while (currentDate <= endDate) {
474
+ dates.push(new Date(currentDate));
475
+ currentDate.setDate(currentDate.getDate() + step);
476
+ }
477
+ return dates;
478
+ }
479
+ /**
480
+ * Get day of week name
481
+ * @param date - Date
482
+ * @param locale - Locale (default: 'en-US')
483
+ * @returns Day name
484
+ *
485
+ * @example
486
+ * getDayName(new Date('2024-01-15')); // "Monday"
487
+ */
488
+ export function getDayName(date, locale = 'en-US') {
489
+ return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);
490
+ }
491
+ /**
492
+ * Get month name
493
+ * @param date - Date
494
+ * @param locale - Locale (default: 'en-US')
495
+ * @returns Month name
496
+ *
497
+ * @example
498
+ * getMonthName(new Date('2024-01-15')); // "January"
499
+ */
500
+ export function getMonthName(date, locale = 'en-US') {
501
+ return new Intl.DateTimeFormat(locale, { month: 'long' }).format(date);
502
+ }
503
+ //# sourceMappingURL=date-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-formatter.js","sourceRoot":"","sources":["../../src/utils/date-formatter.ts"],"names":[],"mappings":"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"}