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.
- package/CHANGELOG.md +72 -11
- package/README.md +2 -36
- package/dist/cli/args.d.ts +117 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +231 -64
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts +58 -2
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +130 -12
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +70 -2
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +240 -15
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/list-models.d.ts +63 -3
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +202 -27
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/login-handler.d.ts +82 -8
- package/dist/cli/login-handler.d.ts.map +1 -1
- package/dist/cli/login-handler.js +410 -77
- package/dist/cli/login-handler.js.map +1 -1
- package/dist/cli/session-picker.d.ts +74 -2
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +236 -12
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/core/agent-session.d.ts +214 -9
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +214 -9
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts +302 -12
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +302 -12
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/diagnostics.d.ts +191 -0
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/diagnostics.js +142 -0
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/event-bus.d.ts +146 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +93 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts +4 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js +4 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts +128 -0
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +128 -0
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +4 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +4 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/keybindings.d.ts +142 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +142 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry.d.ts +98 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +98 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +99 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +99 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +0 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +127 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +125 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagents.js.map +1 -1
- package/dist/core/tools/bash.d.ts +391 -11
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +269 -2
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +284 -6
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +238 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +169 -5
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +136 -0
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +285 -5
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +247 -0
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +0 -18
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +1 -23
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +6 -0
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +6 -0
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +308 -7
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +231 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/webfetch.d.ts +118 -3
- package/dist/core/tools/webfetch.d.ts.map +1 -1
- package/dist/core/tools/webfetch.js +118 -3
- package/dist/core/tools/webfetch.js.map +1 -1
- package/dist/core/tools/websearch.d.ts +130 -3
- package/dist/core/tools/websearch.d.ts.map +1 -1
- package/dist/core/tools/websearch.js +130 -3
- package/dist/core/tools/websearch.js.map +1 -1
- package/dist/core/tools/write.d.ts +251 -5
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +210 -0
- package/dist/core/tools/write.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +164 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +164 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +297 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +297 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +251 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +186 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +186 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1567 -13
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1567 -13
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +422 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +422 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +538 -5
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +538 -5
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +921 -8
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +921 -8
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +802 -9
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +802 -9
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +356 -3
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +356 -3
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/shared.d.ts +386 -0
- package/dist/modes/shared.d.ts.map +1 -0
- package/dist/modes/shared.js +543 -0
- package/dist/modes/shared.js.map +1 -0
- package/dist/utils/array.d.ts +389 -0
- package/dist/utils/array.d.ts.map +1 -0
- package/dist/utils/array.js +585 -0
- package/dist/utils/array.js.map +1 -0
- package/dist/utils/color-formatter.d.ts +318 -0
- package/dist/utils/color-formatter.d.ts.map +1 -0
- package/dist/utils/color-formatter.js +442 -0
- package/dist/utils/color-formatter.js.map +1 -0
- package/dist/utils/data-transformer.d.ts +326 -0
- package/dist/utils/data-transformer.d.ts.map +1 -0
- package/dist/utils/data-transformer.js +512 -0
- package/dist/utils/data-transformer.js.map +1 -0
- package/dist/utils/date-formatter.d.ts +281 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +503 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/error-handler.d.ts +541 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +726 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/file-operations.d.ts +297 -0
- package/dist/utils/file-operations.d.ts.map +1 -0
- package/dist/utils/file-operations.js +505 -0
- package/dist/utils/file-operations.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +268 -6
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +500 -21
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/json-formatter.d.ts +259 -0
- package/dist/utils/json-formatter.d.ts.map +1 -0
- package/dist/utils/json-formatter.js +517 -0
- package/dist/utils/json-formatter.js.map +1 -0
- package/dist/utils/logger.d.ts +176 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +346 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown-formatter.d.ts +211 -0
- package/dist/utils/markdown-formatter.d.ts.map +1 -0
- package/dist/utils/markdown-formatter.js +482 -0
- package/dist/utils/markdown-formatter.js.map +1 -0
- package/dist/utils/path-validator.d.ts +603 -0
- package/dist/utils/path-validator.d.ts.map +1 -0
- package/dist/utils/path-validator.js +870 -0
- package/dist/utils/path-validator.js.map +1 -0
- package/dist/utils/string-formatter.d.ts +609 -0
- package/dist/utils/string-formatter.d.ts.map +1 -0
- package/dist/utils/string-formatter.js +806 -0
- package/dist/utils/string-formatter.js.map +1 -0
- package/dist/utils/type-guards.d.ts +629 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +662 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/docs/COMPLETE-GUIDE.md +300 -0
- package/docs/MODES-ARCHITECTURE.md +565 -0
- package/docs/PRINT-MODE-GUIDE.md +456 -0
- package/docs/README.md +1 -2
- package/docs/RPC-GUIDE.md +705 -0
- package/docs/UTILS-IMPLEMENTATION-SUMMARY.md +647 -0
- package/docs/UTILS-MODULE-OVERVIEW.md +1480 -0
- package/docs/UTILS-QA-CHECKLIST.md +1061 -0
- package/docs/UTILS-USAGE-GUIDE.md +1419 -0
- 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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"}
|