@sdkwork/sdk-common 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/token-manager.cjs +127 -0
- package/dist/auth/token-manager.cjs.map +1 -0
- package/dist/auth/token-manager.d.ts +80 -0
- package/dist/auth/token-manager.d.ts.map +1 -0
- package/dist/auth/token-manager.js +127 -0
- package/dist/auth/token-manager.js.map +1 -0
- package/dist/auth.cjs +9 -0
- package/dist/auth.cjs.map +1 -0
- package/dist/auth.js +9 -0
- package/dist/auth.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/types.cjs +54 -0
- package/dist/core/types.cjs.map +1 -0
- package/dist/core/types.d.ts +187 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +54 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core.cjs +11 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.js +11 -0
- package/dist/core.js.map +1 -0
- package/dist/errors/index.d.ts +103 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors.cjs +286 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.js +286 -0
- package/dist/errors.js.map +1 -0
- package/dist/http/base-client.cjs +485 -0
- package/dist/http/base-client.cjs.map +1 -0
- package/dist/http/base-client.d.ts +98 -0
- package/dist/http/base-client.d.ts.map +1 -0
- package/dist/http/base-client.js +485 -0
- package/dist/http/base-client.js.map +1 -0
- package/dist/http/index.d.ts +2 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http.cjs +6 -0
- package/dist/http.cjs.map +1 -0
- package/dist/http.js +6 -0
- package/dist/http.js.map +1 -0
- package/dist/index.cjs +48 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/array.d.ts +146 -0
- package/dist/utils/array.d.ts.map +1 -0
- package/dist/utils/cache.cjs +80 -0
- package/dist/utils/cache.cjs.map +1 -0
- package/dist/utils/cache.d.ts +25 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +80 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/date.cjs +25 -0
- package/dist/utils/date.cjs.map +1 -0
- package/dist/utils/date.d.ts +127 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +25 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/encoding.cjs +678 -0
- package/dist/utils/encoding.cjs.map +1 -0
- package/dist/utils/encoding.d.ts +107 -0
- package/dist/utils/encoding.d.ts.map +1 -0
- package/dist/utils/encoding.js +679 -0
- package/dist/utils/encoding.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/logger.cjs +110 -0
- package/dist/utils/logger.cjs.map +1 -0
- package/dist/utils/logger.d.ts +28 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +110 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/object.d.ts +131 -0
- package/dist/utils/object.d.ts.map +1 -0
- package/dist/utils/retry.cjs +73 -0
- package/dist/utils/retry.cjs.map +1 -0
- package/dist/utils/retry.d.ts +9 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +73 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/string.cjs +820 -0
- package/dist/utils/string.cjs.map +1 -0
- package/dist/utils/string.d.ts +160 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +821 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/utils/url.d.ts +106 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/validation.d.ts +157 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils.cjs +52 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.js +46 -0
- package/dist/utils.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
export type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';
|
|
2
|
+
export type DateFormat = 'iso' | 'iso-date' | 'iso-time' | 'datetime' | 'date' | 'time' | 'time-24' | 'year-month' | 'month-day' | 'custom';
|
|
3
|
+
export interface DateComponents {
|
|
4
|
+
year: number;
|
|
5
|
+
month: number;
|
|
6
|
+
day: number;
|
|
7
|
+
hours: number;
|
|
8
|
+
minutes: number;
|
|
9
|
+
seconds: number;
|
|
10
|
+
milliseconds: number;
|
|
11
|
+
}
|
|
12
|
+
export interface Duration {
|
|
13
|
+
milliseconds?: number;
|
|
14
|
+
seconds?: number;
|
|
15
|
+
minutes?: number;
|
|
16
|
+
hours?: number;
|
|
17
|
+
days?: number;
|
|
18
|
+
weeks?: number;
|
|
19
|
+
months?: number;
|
|
20
|
+
years?: number;
|
|
21
|
+
}
|
|
22
|
+
export declare const MILLISECONDS_IN_SECOND = 1000;
|
|
23
|
+
export declare const MILLISECONDS_IN_MINUTE: number;
|
|
24
|
+
export declare const MILLISECONDS_IN_HOUR: number;
|
|
25
|
+
export declare const MILLISECONDS_IN_DAY: number;
|
|
26
|
+
export declare const MILLISECONDS_IN_WEEK: number;
|
|
27
|
+
export declare const TIME_UNITS_IN_MS: Record<TimeUnit, number>;
|
|
28
|
+
export declare function now(): Date;
|
|
29
|
+
export declare function today(): Date;
|
|
30
|
+
export declare function yesterday(): Date;
|
|
31
|
+
export declare function tomorrow(): Date;
|
|
32
|
+
export declare function createDate(year: number, month: number, day: number, hours?: number, minutes?: number, seconds?: number, milliseconds?: number): Date;
|
|
33
|
+
export declare function fromTimestamp(timestamp: number): Date;
|
|
34
|
+
export declare function fromUnixTimestamp(unixTimestamp: number): Date;
|
|
35
|
+
export declare function parse(value: string | Date | number): Date;
|
|
36
|
+
export declare function parseIso(value: string): Date;
|
|
37
|
+
export declare function parseFormat(value: string, format: string): Date;
|
|
38
|
+
export declare function isValid(value: Date | string | number): boolean;
|
|
39
|
+
export declare function isBefore(date: Date, compare: Date): boolean;
|
|
40
|
+
export declare function isAfter(date: Date, compare: Date): boolean;
|
|
41
|
+
export declare function isSame(date: Date, compare: Date, unit?: TimeUnit): boolean;
|
|
42
|
+
export declare function isSameDay(date: Date, compare: Date): boolean;
|
|
43
|
+
export declare function isSameWeek(date: Date, compare: Date, weekStartsOn?: number): boolean;
|
|
44
|
+
export declare function isSameMonth(date: Date, compare: Date): boolean;
|
|
45
|
+
export declare function isSameYear(date: Date, compare: Date): boolean;
|
|
46
|
+
export declare function isToday(date: Date): boolean;
|
|
47
|
+
export declare function isYesterday(date: Date): boolean;
|
|
48
|
+
export declare function isTomorrow(date: Date): boolean;
|
|
49
|
+
export declare function isPast(date: Date): boolean;
|
|
50
|
+
export declare function isFuture(date: Date): boolean;
|
|
51
|
+
export declare function isWeekend(date: Date): boolean;
|
|
52
|
+
export declare function isWeekday(date: Date): boolean;
|
|
53
|
+
export declare function isLeapYear(year: number): boolean;
|
|
54
|
+
export declare function isInLeapYear(date: Date): boolean;
|
|
55
|
+
export declare function getYear(date: Date): number;
|
|
56
|
+
export declare function getMonth(date: Date): number;
|
|
57
|
+
export declare function getDay(date: Date): number;
|
|
58
|
+
export declare function getDayOfWeek(date: Date): number;
|
|
59
|
+
export declare function getDayOfYear(date: Date): number;
|
|
60
|
+
export declare function getWeek(date: Date, _weekStartsOn?: number): number;
|
|
61
|
+
export declare function getQuarter(date: Date): number;
|
|
62
|
+
export declare function getHours(date: Date): number;
|
|
63
|
+
export declare function getMinutes(date: Date): number;
|
|
64
|
+
export declare function getSeconds(date: Date): number;
|
|
65
|
+
export declare function getMilliseconds(date: Date): number;
|
|
66
|
+
export declare function getTimestamp(date: Date): number;
|
|
67
|
+
export declare function getUnixTimestamp(date: Date): number;
|
|
68
|
+
export declare function getDaysInMonth(date: Date): number;
|
|
69
|
+
export declare function getDaysInYear(date: Date): number;
|
|
70
|
+
export declare function setYear(date: Date, year: number): Date;
|
|
71
|
+
export declare function setMonth(date: Date, month: number): Date;
|
|
72
|
+
export declare function setDay(date: Date, day: number): Date;
|
|
73
|
+
export declare function setDayOfWeek(date: Date, day: number): Date;
|
|
74
|
+
export declare function setHours(date: Date, hours: number): Date;
|
|
75
|
+
export declare function setMinutes(date: Date, minutes: number): Date;
|
|
76
|
+
export declare function setSeconds(date: Date, seconds: number): Date;
|
|
77
|
+
export declare function setMilliseconds(date: Date, milliseconds: number): Date;
|
|
78
|
+
export declare function startOf(date: Date, unit: TimeUnit): Date;
|
|
79
|
+
export declare function endOf(date: Date, unit: TimeUnit): Date;
|
|
80
|
+
export declare function startOfDay(date: Date): Date;
|
|
81
|
+
export declare function endOfDay(date: Date): Date;
|
|
82
|
+
export declare function startOfWeek(date: Date, weekStartsOn?: number): Date;
|
|
83
|
+
export declare function endOfWeek(date: Date, weekStartsOn?: number): Date;
|
|
84
|
+
export declare function startOfMonth(date: Date): Date;
|
|
85
|
+
export declare function endOfMonth(date: Date): Date;
|
|
86
|
+
export declare function startOfYear(date: Date): Date;
|
|
87
|
+
export declare function endOfYear(date: Date): Date;
|
|
88
|
+
export declare function addMilliseconds(date: Date, amount: number): Date;
|
|
89
|
+
export declare function addSeconds(date: Date, amount: number): Date;
|
|
90
|
+
export declare function addMinutes(date: Date, amount: number): Date;
|
|
91
|
+
export declare function addHours(date: Date, amount: number): Date;
|
|
92
|
+
export declare function addDays(date: Date, amount: number): Date;
|
|
93
|
+
export declare function addWeeks(date: Date, amount: number): Date;
|
|
94
|
+
export declare function addMonths(date: Date, amount: number): Date;
|
|
95
|
+
export declare function addQuarters(date: Date, amount: number): Date;
|
|
96
|
+
export declare function addYears(date: Date, amount: number): Date;
|
|
97
|
+
export declare function add(date: Date, duration: Duration): Date;
|
|
98
|
+
export declare function subtract(date: Date, duration: Duration): Date;
|
|
99
|
+
export declare function diff(date1: Date, date2: Date, unit?: TimeUnit): number;
|
|
100
|
+
export declare function format(date: Date, formatStr?: string): string;
|
|
101
|
+
export declare function formatIso(date: Date): string;
|
|
102
|
+
export declare function formatIsoDate(date: Date): string;
|
|
103
|
+
export declare function formatIsoTime(date: Date): string;
|
|
104
|
+
export declare function formatRelative(date: Date, base?: Date): string;
|
|
105
|
+
export declare function formatDuration(duration: Duration): string;
|
|
106
|
+
export declare function toComponents(date: Date): DateComponents;
|
|
107
|
+
export declare function fromComponents(components: Partial<DateComponents>): Date;
|
|
108
|
+
export declare function clone(date: Date): Date;
|
|
109
|
+
export declare function min(...dates: Date[]): Date;
|
|
110
|
+
export declare function max(...dates: Date[]): Date;
|
|
111
|
+
export declare function isBetween(date: Date, start: Date, end: Date, inclusive?: boolean): boolean;
|
|
112
|
+
export declare function eachDay(start: Date, end: Date): Date[];
|
|
113
|
+
export declare function eachWeek(start: Date, end: Date, weekStartsOn?: number): Date[];
|
|
114
|
+
export declare function eachMonth(start: Date, end: Date): Date[];
|
|
115
|
+
export declare function eachYear(start: Date, end: Date): Date[];
|
|
116
|
+
export declare function closestTo(date: Date, dates: Date[]): Date | null;
|
|
117
|
+
export declare function countWeekendDays(start: Date, end: Date): number;
|
|
118
|
+
export declare function countWeekdays(start: Date, end: Date): number;
|
|
119
|
+
export declare function nextWeekday(date: Date): Date;
|
|
120
|
+
export declare function previousWeekday(date: Date): Date;
|
|
121
|
+
export declare function nthDayOfMonth(year: number, month: number, dayOfWeek: number, nth: number): Date;
|
|
122
|
+
export declare function lastDayOfMonth(year: number, month: number, dayOfWeek: number): Date;
|
|
123
|
+
export declare function age(birthDate: Date, referenceDate?: Date): number;
|
|
124
|
+
export declare function timezoneOffset(date?: Date): number;
|
|
125
|
+
export declare function toTimezone(date: Date, timezone: string): Date;
|
|
126
|
+
export declare function isDST(date: Date): boolean;
|
|
127
|
+
//# sourceMappingURL=date.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const MILLISECONDS_IN_SECOND = 1e3;
|
|
2
|
+
const MILLISECONDS_IN_MINUTE = 60 * MILLISECONDS_IN_SECOND;
|
|
3
|
+
const MILLISECONDS_IN_HOUR = 60 * MILLISECONDS_IN_MINUTE;
|
|
4
|
+
const MILLISECONDS_IN_DAY = 24 * MILLISECONDS_IN_HOUR;
|
|
5
|
+
const MILLISECONDS_IN_WEEK = 7 * MILLISECONDS_IN_DAY;
|
|
6
|
+
const TIME_UNITS_IN_MS = {
|
|
7
|
+
millisecond: 1,
|
|
8
|
+
second: MILLISECONDS_IN_SECOND,
|
|
9
|
+
minute: MILLISECONDS_IN_MINUTE,
|
|
10
|
+
hour: MILLISECONDS_IN_HOUR,
|
|
11
|
+
day: MILLISECONDS_IN_DAY,
|
|
12
|
+
week: MILLISECONDS_IN_WEEK,
|
|
13
|
+
month: 30 * MILLISECONDS_IN_DAY,
|
|
14
|
+
quarter: 90 * MILLISECONDS_IN_DAY,
|
|
15
|
+
year: 365 * MILLISECONDS_IN_DAY
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
MILLISECONDS_IN_DAY,
|
|
19
|
+
MILLISECONDS_IN_HOUR,
|
|
20
|
+
MILLISECONDS_IN_MINUTE,
|
|
21
|
+
MILLISECONDS_IN_SECOND,
|
|
22
|
+
MILLISECONDS_IN_WEEK,
|
|
23
|
+
TIME_UNITS_IN_MS
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sources":["../../src/utils/date.ts"],"sourcesContent":["export type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport type DateFormat = 'iso' | 'iso-date' | 'iso-time' | 'datetime' | 'date' | 'time' | 'time-24' | 'year-month' | 'month-day' | 'custom';\n\nexport interface DateComponents {\n year: number;\n month: number;\n day: number;\n hours: number;\n minutes: number;\n seconds: number;\n milliseconds: number;\n}\n\nexport interface Duration {\n milliseconds?: number;\n seconds?: number;\n minutes?: number;\n hours?: number;\n days?: number;\n weeks?: number;\n months?: number;\n years?: number;\n}\n\nexport const MILLISECONDS_IN_SECOND = 1000;\nexport const MILLISECONDS_IN_MINUTE = 60 * MILLISECONDS_IN_SECOND;\nexport const MILLISECONDS_IN_HOUR = 60 * MILLISECONDS_IN_MINUTE;\nexport const MILLISECONDS_IN_DAY = 24 * MILLISECONDS_IN_HOUR;\nexport const MILLISECONDS_IN_WEEK = 7 * MILLISECONDS_IN_DAY;\n\nexport const TIME_UNITS_IN_MS: Record<TimeUnit, number> = {\n millisecond: 1,\n second: MILLISECONDS_IN_SECOND,\n minute: MILLISECONDS_IN_MINUTE,\n hour: MILLISECONDS_IN_HOUR,\n day: MILLISECONDS_IN_DAY,\n week: MILLISECONDS_IN_WEEK,\n month: 30 * MILLISECONDS_IN_DAY,\n quarter: 90 * MILLISECONDS_IN_DAY,\n year: 365 * MILLISECONDS_IN_DAY,\n};\n\nexport function now(): Date {\n return new Date();\n}\n\nexport function today(): Date {\n return startOfDay(new Date());\n}\n\nexport function yesterday(): Date {\n return addDays(today(), -1);\n}\n\nexport function tomorrow(): Date {\n return addDays(today(), 1);\n}\n\nexport function createDate(year: number, month: number, day: number, hours: number = 0, minutes: number = 0, seconds: number = 0, milliseconds: number = 0): Date {\n return new Date(year, month - 1, day, hours, minutes, seconds, milliseconds);\n}\n\nexport function fromTimestamp(timestamp: number): Date {\n return new Date(timestamp);\n}\n\nexport function fromUnixTimestamp(unixTimestamp: number): Date {\n return new Date(unixTimestamp * MILLISECONDS_IN_SECOND);\n}\n\nexport function parse(value: string | Date | number): Date {\n if (value instanceof Date) return value;\n if (typeof value === 'number') return new Date(value);\n return new Date(value);\n}\n\nexport function parseIso(value: string): Date {\n return new Date(value);\n}\n\nexport function parseFormat(value: string, format: string): Date {\n const formatTokens: Record<string, (date: Date, value: string) => void> = {\n 'YYYY': (date, v) => date.setFullYear(parseInt(v, 10)),\n 'YY': (date, v) => date.setFullYear(2000 + parseInt(v, 10)),\n 'MM': (date, v) => date.setMonth(parseInt(v, 10) - 1),\n 'M': (date, v) => date.setMonth(parseInt(v, 10) - 1),\n 'DD': (date, v) => date.setDate(parseInt(v, 10)),\n 'D': (date, v) => date.setDate(parseInt(v, 10)),\n 'HH': (date, v) => date.setHours(parseInt(v, 10)),\n 'H': (date, v) => date.setHours(parseInt(v, 10)),\n 'mm': (date, v) => date.setMinutes(parseInt(v, 10)),\n 'm': (date, v) => date.setMinutes(parseInt(v, 10)),\n 'ss': (date, v) => date.setSeconds(parseInt(v, 10)),\n 's': (date, v) => date.setSeconds(parseInt(v, 10)),\n 'SSS': (date, v) => date.setMilliseconds(parseInt(v, 10)),\n };\n\n const date = new Date(0);\n let formatIndex = 0;\n let valueIndex = 0;\n\n while (formatIndex < format.length && valueIndex < value.length) {\n const token = Object.keys(formatTokens).find((t) => format.slice(formatIndex).startsWith(t));\n if (token) {\n const tokenLength = token.length;\n const tokenValue = value.slice(valueIndex, valueIndex + tokenLength);\n formatTokens[token]!(date, tokenValue);\n formatIndex += tokenLength;\n valueIndex += tokenLength;\n } else {\n formatIndex++;\n valueIndex++;\n }\n }\n\n return date;\n}\n\nexport function isValid(value: Date | string | number): boolean {\n const date = value instanceof Date ? value : new Date(value);\n return !isNaN(date.getTime());\n}\n\nexport function isBefore(date: Date, compare: Date): boolean {\n return date.getTime() < compare.getTime();\n}\n\nexport function isAfter(date: Date, compare: Date): boolean {\n return date.getTime() > compare.getTime();\n}\n\nexport function isSame(date: Date, compare: Date, unit: TimeUnit = 'millisecond'): boolean {\n const d1 = startOf(date, unit);\n const d2 = startOf(compare, unit);\n return d1.getTime() === d2.getTime();\n}\n\nexport function isSameDay(date: Date, compare: Date): boolean {\n return isSame(date, compare, 'day');\n}\n\nexport function isSameWeek(date: Date, compare: Date, weekStartsOn: number = 0): boolean {\n const d1 = startOfWeek(date, weekStartsOn);\n const d2 = startOfWeek(compare, weekStartsOn);\n return d1.getTime() === d2.getTime();\n}\n\nexport function isSameMonth(date: Date, compare: Date): boolean {\n return isSame(date, compare, 'month');\n}\n\nexport function isSameYear(date: Date, compare: Date): boolean {\n return isSame(date, compare, 'year');\n}\n\nexport function isToday(date: Date): boolean {\n return isSameDay(date, new Date());\n}\n\nexport function isYesterday(date: Date): boolean {\n return isSameDay(date, yesterday());\n}\n\nexport function isTomorrow(date: Date): boolean {\n return isSameDay(date, tomorrow());\n}\n\nexport function isPast(date: Date): boolean {\n return isBefore(date, new Date());\n}\n\nexport function isFuture(date: Date): boolean {\n return isAfter(date, new Date());\n}\n\nexport function isWeekend(date: Date): boolean {\n const day = date.getDay();\n return day === 0 || day === 6;\n}\n\nexport function isWeekday(date: Date): boolean {\n return !isWeekend(date);\n}\n\nexport function isLeapYear(year: number): boolean {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\nexport function isInLeapYear(date: Date): boolean {\n return isLeapYear(date.getFullYear());\n}\n\nexport function getYear(date: Date): number {\n return date.getFullYear();\n}\n\nexport function getMonth(date: Date): number {\n return date.getMonth() + 1;\n}\n\nexport function getDay(date: Date): number {\n return date.getDate();\n}\n\nexport function getDayOfWeek(date: Date): number {\n return date.getDay();\n}\n\nexport function getDayOfYear(date: Date): number {\n const start = new Date(date.getFullYear(), 0, 0);\n const diff = date.getTime() - start.getTime();\n return Math.floor(diff / MILLISECONDS_IN_DAY);\n}\n\nexport function getWeek(date: Date, _weekStartsOn: number = 0): number {\n const firstDayOfYear = new Date(date.getFullYear(), 0, 1);\n const pastDaysOfYear = (date.getTime() - firstDayOfYear.getTime()) / MILLISECONDS_IN_DAY;\n return Math.ceil((pastDaysOfYear + firstDayOfYear.getDay() + 1) / 7);\n}\n\nexport function getQuarter(date: Date): number {\n return Math.floor(date.getMonth() / 3) + 1;\n}\n\nexport function getHours(date: Date): number {\n return date.getHours();\n}\n\nexport function getMinutes(date: Date): number {\n return date.getMinutes();\n}\n\nexport function getSeconds(date: Date): number {\n return date.getSeconds();\n}\n\nexport function getMilliseconds(date: Date): number {\n return date.getMilliseconds();\n}\n\nexport function getTimestamp(date: Date): number {\n return date.getTime();\n}\n\nexport function getUnixTimestamp(date: Date): number {\n return Math.floor(date.getTime() / MILLISECONDS_IN_SECOND);\n}\n\nexport function getDaysInMonth(date: Date): number {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n}\n\nexport function getDaysInYear(date: Date): number {\n return isLeapYear(date.getFullYear()) ? 366 : 365;\n}\n\nexport function setYear(date: Date, year: number): Date {\n const result = new Date(date);\n result.setFullYear(year);\n return result;\n}\n\nexport function setMonth(date: Date, month: number): Date {\n const result = new Date(date);\n result.setMonth(month - 1);\n return result;\n}\n\nexport function setDay(date: Date, day: number): Date {\n const result = new Date(date);\n result.setDate(day);\n return result;\n}\n\nexport function setDayOfWeek(date: Date, day: number): Date {\n const result = new Date(date);\n const currentDay = result.getDay();\n const diff = day - currentDay;\n result.setDate(result.getDate() + diff);\n return result;\n}\n\nexport function setHours(date: Date, hours: number): Date {\n const result = new Date(date);\n result.setHours(hours);\n return result;\n}\n\nexport function setMinutes(date: Date, minutes: number): Date {\n const result = new Date(date);\n result.setMinutes(minutes);\n return result;\n}\n\nexport function setSeconds(date: Date, seconds: number): Date {\n const result = new Date(date);\n result.setSeconds(seconds);\n return result;\n}\n\nexport function setMilliseconds(date: Date, milliseconds: number): Date {\n const result = new Date(date);\n result.setMilliseconds(milliseconds);\n return result;\n}\n\nexport function startOf(date: Date, unit: TimeUnit): Date {\n const result = new Date(date);\n\n switch (unit) {\n case 'year':\n result.setMonth(0, 1);\n result.setHours(0, 0, 0, 0);\n break;\n case 'quarter':\n result.setMonth(Math.floor(result.getMonth() / 3) * 3, 1);\n result.setHours(0, 0, 0, 0);\n break;\n case 'month':\n result.setDate(1);\n result.setHours(0, 0, 0, 0);\n break;\n case 'week':\n return startOfWeek(result);\n case 'day':\n result.setHours(0, 0, 0, 0);\n break;\n case 'hour':\n result.setMinutes(0, 0, 0);\n break;\n case 'minute':\n result.setSeconds(0, 0);\n break;\n case 'second':\n result.setMilliseconds(0);\n break;\n }\n\n return result;\n}\n\nexport function endOf(date: Date, unit: TimeUnit): Date {\n const result = new Date(date);\n\n switch (unit) {\n case 'year':\n result.setMonth(11, 31);\n result.setHours(23, 59, 59, 999);\n break;\n case 'quarter':\n result.setMonth(Math.floor(result.getMonth() / 3) * 3 + 2);\n result.setDate(getDaysInMonth(result));\n result.setHours(23, 59, 59, 999);\n break;\n case 'month':\n result.setDate(getDaysInMonth(result));\n result.setHours(23, 59, 59, 999);\n break;\n case 'week':\n return endOfWeek(result);\n case 'day':\n result.setHours(23, 59, 59, 999);\n break;\n case 'hour':\n result.setMinutes(59, 59, 999);\n break;\n case 'minute':\n result.setSeconds(59, 999);\n break;\n case 'second':\n result.setMilliseconds(999);\n break;\n }\n\n return result;\n}\n\nexport function startOfDay(date: Date): Date {\n return startOf(date, 'day');\n}\n\nexport function endOfDay(date: Date): Date {\n return endOf(date, 'day');\n}\n\nexport function startOfWeek(date: Date, weekStartsOn: number = 0): Date {\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n result.setDate(result.getDate() - diff);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\nexport function endOfWeek(date: Date, weekStartsOn: number = 0): Date {\n const result = startOfWeek(date, weekStartsOn);\n result.setDate(result.getDate() + 6);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\nexport function startOfMonth(date: Date): Date {\n return startOf(date, 'month');\n}\n\nexport function endOfMonth(date: Date): Date {\n return endOf(date, 'month');\n}\n\nexport function startOfYear(date: Date): Date {\n return startOf(date, 'year');\n}\n\nexport function endOfYear(date: Date): Date {\n return endOf(date, 'year');\n}\n\nexport function addMilliseconds(date: Date, amount: number): Date {\n const result = new Date(date);\n result.setMilliseconds(result.getMilliseconds() + amount);\n return result;\n}\n\nexport function addSeconds(date: Date, amount: number): Date {\n return addMilliseconds(date, amount * MILLISECONDS_IN_SECOND);\n}\n\nexport function addMinutes(date: Date, amount: number): Date {\n return addMilliseconds(date, amount * MILLISECONDS_IN_MINUTE);\n}\n\nexport function addHours(date: Date, amount: number): Date {\n return addMilliseconds(date, amount * MILLISECONDS_IN_HOUR);\n}\n\nexport function addDays(date: Date, amount: number): Date {\n const result = new Date(date);\n result.setDate(result.getDate() + amount);\n return result;\n}\n\nexport function addWeeks(date: Date, amount: number): Date {\n return addDays(date, amount * 7);\n}\n\nexport function addMonths(date: Date, amount: number): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + amount);\n return result;\n}\n\nexport function addQuarters(date: Date, amount: number): Date {\n return addMonths(date, amount * 3);\n}\n\nexport function addYears(date: Date, amount: number): Date {\n return addMonths(date, amount * 12);\n}\n\nexport function add(date: Date, duration: Duration): Date {\n let result = new Date(date);\n \n if (duration.milliseconds) result = addMilliseconds(result, duration.milliseconds);\n if (duration.seconds) result = addSeconds(result, duration.seconds);\n if (duration.minutes) result = addMinutes(result, duration.minutes);\n if (duration.hours) result = addHours(result, duration.hours);\n if (duration.days) result = addDays(result, duration.days);\n if (duration.weeks) result = addWeeks(result, duration.weeks);\n if (duration.months) result = addMonths(result, duration.months);\n if (duration.years) result = addYears(result, duration.years);\n \n return result;\n}\n\nexport function subtract(date: Date, duration: Duration): Date {\n const negativeDuration: Duration = {};\n for (const key in duration) {\n negativeDuration[key as keyof Duration] = -(duration[key as keyof Duration] ?? 0);\n }\n return add(date, negativeDuration);\n}\n\nexport function diff(date1: Date, date2: Date, unit: TimeUnit = 'millisecond'): number {\n const diffMs = date1.getTime() - date2.getTime();\n \n switch (unit) {\n case 'millisecond':\n return diffMs;\n case 'second':\n return Math.floor(diffMs / MILLISECONDS_IN_SECOND);\n case 'minute':\n return Math.floor(diffMs / MILLISECONDS_IN_MINUTE);\n case 'hour':\n return Math.floor(diffMs / MILLISECONDS_IN_HOUR);\n case 'day':\n return Math.floor(diffMs / MILLISECONDS_IN_DAY);\n case 'week':\n return Math.floor(diffMs / MILLISECONDS_IN_WEEK);\n case 'month':\n const months = (date1.getFullYear() - date2.getFullYear()) * 12 + (date1.getMonth() - date2.getMonth());\n return months;\n case 'quarter':\n return Math.floor(diff(date1, date2, 'month') / 3);\n case 'year':\n return date1.getFullYear() - date2.getFullYear();\n default:\n return diffMs;\n }\n}\n\nexport function format(date: Date, formatStr: string = 'YYYY-MM-DD HH:mm:ss'): string {\n const tokens: Record<string, () => string> = {\n 'YYYY': () => String(date.getFullYear()),\n 'YY': () => String(date.getFullYear()).slice(-2),\n 'MM': () => String(date.getMonth() + 1).padStart(2, '0'),\n 'M': () => String(date.getMonth() + 1),\n 'DD': () => String(date.getDate()).padStart(2, '0'),\n 'D': () => String(date.getDate()),\n 'HH': () => String(date.getHours()).padStart(2, '0'),\n 'H': () => String(date.getHours()),\n 'hh': () => String(date.getHours() % 12 || 12).padStart(2, '0'),\n 'h': () => String(date.getHours() % 12 || 12),\n 'mm': () => String(date.getMinutes()).padStart(2, '0'),\n 'm': () => String(date.getMinutes()),\n 'ss': () => String(date.getSeconds()).padStart(2, '0'),\n 's': () => String(date.getSeconds()),\n 'SSS': () => String(date.getMilliseconds()).padStart(3, '0'),\n 'A': () => date.getHours() >= 12 ? 'PM' : 'AM',\n 'a': () => date.getHours() >= 12 ? 'pm' : 'am',\n 'd': () => String(date.getDay()),\n 'ddd': () => ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][date.getDay()] ?? '',\n 'dddd': () => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][date.getDay()] ?? '',\n 'MMM': () => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][date.getMonth()] ?? '',\n 'MMMM': () => ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][date.getMonth()] ?? '',\n 'Q': () => String(getQuarter(date)),\n 'W': () => String(getWeek(date)).padStart(2, '0'),\n 'Do': () => {\n const day = date.getDate();\n const suffix: string[] = ['th', 'st', 'nd', 'rd'];\n const remainder = day % 100;\n return day + (suffix[(remainder - 20) % 10] ?? suffix[remainder] ?? suffix[0]!);\n },\n };\n\n let result = formatStr;\n const sortedTokens = Object.keys(tokens).sort((a, b) => b.length - a.length);\n\n for (const token of sortedTokens) {\n if (result.includes(token)) {\n result = result.replace(new RegExp(token, 'g'), tokens[token]!());\n }\n }\n\n return result;\n}\n\nexport function formatIso(date: Date): string {\n return date.toISOString();\n}\n\nexport function formatIsoDate(date: Date): string {\n return format(date, 'YYYY-MM-DD');\n}\n\nexport function formatIsoTime(date: Date): string {\n return format(date, 'HH:mm:ss.SSS');\n}\n\nexport function formatRelative(date: Date, base: Date = new Date()): string {\n const diffMs = base.getTime() - date.getTime();\n const diffSeconds = Math.floor(diffMs / MILLISECONDS_IN_SECOND);\n const diffMinutes = Math.floor(diffSeconds / 60);\n const diffHours = Math.floor(diffMinutes / 60);\n const diffDays = Math.floor(diffHours / 24);\n const diffWeeks = Math.floor(diffDays / 7);\n const diffMonths = Math.floor(diffDays / 30);\n const diffYears = Math.floor(diffDays / 365);\n\n if (diffSeconds < 60) return 'just now';\n if (diffMinutes < 60) return `${diffMinutes} minute${diffMinutes > 1 ? 's' : ''} ago`;\n if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;\n if (diffDays < 7) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;\n if (diffWeeks < 4) return `${diffWeeks} week${diffWeeks > 1 ? 's' : ''} ago`;\n if (diffMonths < 12) return `${diffMonths} month${diffMonths > 1 ? 's' : ''} ago`;\n return `${diffYears} year${diffYears > 1 ? 's' : ''} ago`;\n}\n\nexport function formatDuration(duration: Duration): string {\n const parts: string[] = [];\n \n if (duration.years) parts.push(`${duration.years}y`);\n if (duration.months) parts.push(`${duration.months}mo`);\n if (duration.weeks) parts.push(`${duration.weeks}w`);\n if (duration.days) parts.push(`${duration.days}d`);\n if (duration.hours) parts.push(`${duration.hours}h`);\n if (duration.minutes) parts.push(`${duration.minutes}m`);\n if (duration.seconds) parts.push(`${duration.seconds}s`);\n if (duration.milliseconds) parts.push(`${duration.milliseconds}ms`);\n \n return parts.join(' ') || '0ms';\n}\n\nexport function toComponents(date: Date): DateComponents {\n return {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n milliseconds: date.getMilliseconds(),\n };\n}\n\nexport function fromComponents(components: Partial<DateComponents>): Date {\n return new Date(\n components.year ?? 1970,\n (components.month ?? 1) - 1,\n components.day ?? 1,\n components.hours ?? 0,\n components.minutes ?? 0,\n components.seconds ?? 0,\n components.milliseconds ?? 0\n );\n}\n\nexport function clone(date: Date): Date {\n return new Date(date.getTime());\n}\n\nexport function min(...dates: Date[]): Date {\n return new Date(Math.min(...dates.map((d) => d.getTime())));\n}\n\nexport function max(...dates: Date[]): Date {\n return new Date(Math.max(...dates.map((d) => d.getTime())));\n}\n\nexport function isBetween(date: Date, start: Date, end: Date, inclusive: boolean = true): boolean {\n if (inclusive) {\n return date.getTime() >= start.getTime() && date.getTime() <= end.getTime();\n }\n return date.getTime() > start.getTime() && date.getTime() < end.getTime();\n}\n\nexport function eachDay(start: Date, end: Date): Date[] {\n const days: Date[] = [];\n let current = startOfDay(start);\n const endDate = startOfDay(end);\n\n while (current <= endDate) {\n days.push(clone(current));\n current = addDays(current, 1);\n }\n\n return days;\n}\n\nexport function eachWeek(start: Date, end: Date, weekStartsOn: number = 0): Date[] {\n const weeks: Date[] = [];\n let current = startOfWeek(start, weekStartsOn);\n const endDate = startOfWeek(end, weekStartsOn);\n\n while (current <= endDate) {\n weeks.push(clone(current));\n current = addWeeks(current, 1);\n }\n\n return weeks;\n}\n\nexport function eachMonth(start: Date, end: Date): Date[] {\n const months: Date[] = [];\n let current = startOfMonth(start);\n const endDate = startOfMonth(end);\n\n while (current <= endDate) {\n months.push(clone(current));\n current = addMonths(current, 1);\n }\n\n return months;\n}\n\nexport function eachYear(start: Date, end: Date): Date[] {\n const years: Date[] = [];\n let current = startOfYear(start);\n const endDate = startOfYear(end);\n\n while (current <= endDate) {\n years.push(clone(current));\n current = addYears(current, 1);\n }\n\n return years;\n}\n\nexport function closestTo(date: Date, dates: Date[]): Date | null {\n if (dates.length === 0) return null;\n \n const diffMs = date.getTime();\n let closest = dates[0]!;\n let minDiff = Math.abs(diffMs - closest.getTime());\n\n for (let i = 1; i < dates.length; i++) {\n const currentDiff = Math.abs(diffMs - dates[i]!.getTime());\n if (currentDiff < minDiff) {\n minDiff = currentDiff;\n closest = dates[i]!;\n }\n }\n\n return clone(closest);\n}\n\nexport function countWeekendDays(start: Date, end: Date): number {\n let count = 0;\n let current = startOfDay(start);\n const endDate = startOfDay(end);\n\n while (current <= endDate) {\n if (isWeekend(current)) {\n count++;\n }\n current = addDays(current, 1);\n }\n\n return count;\n}\n\nexport function countWeekdays(start: Date, end: Date): number {\n const totalDays = diff(end, start, 'day') + 1;\n return totalDays - countWeekendDays(start, end);\n}\n\nexport function nextWeekday(date: Date): Date {\n let result = addDays(date, 1);\n while (isWeekend(result)) {\n result = addDays(result, 1);\n }\n return result;\n}\n\nexport function previousWeekday(date: Date): Date {\n let result = addDays(date, -1);\n while (isWeekend(result)) {\n result = addDays(result, -1);\n }\n return result;\n}\n\nexport function nthDayOfMonth(year: number, month: number, dayOfWeek: number, nth: number): Date {\n const firstDay = new Date(year, month - 1, 1);\n const firstDayOfWeek = firstDay.getDay();\n const offset = (dayOfWeek - firstDayOfWeek + 7) % 7;\n const day = 1 + offset + (nth - 1) * 7;\n return new Date(year, month - 1, day);\n}\n\nexport function lastDayOfMonth(year: number, month: number, dayOfWeek: number): Date {\n const lastDate = new Date(year, month, 0);\n const lastDay = lastDate.getDate();\n const lastDayOfWeek = lastDate.getDay();\n const offset = (lastDayOfWeek - dayOfWeek + 7) % 7;\n return new Date(year, month - 1, lastDay - offset);\n}\n\nexport function age(birthDate: Date, referenceDate: Date = new Date()): number {\n let age = referenceDate.getFullYear() - birthDate.getFullYear();\n const monthDiff = referenceDate.getMonth() - birthDate.getMonth();\n \n if (monthDiff < 0 || (monthDiff === 0 && referenceDate.getDate() < birthDate.getDate())) {\n age--;\n }\n \n return age;\n}\n\nexport function timezoneOffset(date: Date = new Date()): number {\n return date.getTimezoneOffset();\n}\n\nexport function toTimezone(date: Date, timezone: string): Date {\n const str = date.toLocaleString('en-US', { timeZone: timezone });\n return new Date(str);\n}\n\nexport function isDST(date: Date): boolean {\n const jan = new Date(date.getFullYear(), 0, 1);\n const jul = new Date(date.getFullYear(), 6, 1);\n const stdOffset = Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());\n return date.getTimezoneOffset() < stdOffset;\n}\n"],"names":[],"mappings":"AAyBO,MAAM,yBAAyB;AAC/B,MAAM,yBAAyB,KAAK;AACpC,MAAM,uBAAuB,KAAK;AAClC,MAAM,sBAAsB,KAAK;AACjC,MAAM,uBAAuB,IAAI;AAEjC,MAAM,mBAA6C;AAAA,EACxD,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO,KAAK;AAAA,EACZ,SAAS,KAAK;AAAA,EACd,MAAM,MAAM;AACd;"}
|