ts-time-utils 4.1.0 → 4.4.1
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 +83 -32
- package/dist/{age.js → age.cjs} +14 -6
- package/dist/{calculate.js → calculate.cjs} +42 -18
- package/dist/calculate.d.ts +7 -0
- package/dist/calculate.d.ts.map +1 -1
- package/dist/{calendar.js → calendar.cjs} +80 -39
- package/dist/{calendars.js → calendars.cjs} +48 -23
- package/dist/{chain.js → chain.cjs} +41 -40
- package/dist/{compare.js → compare.cjs} +58 -28
- package/dist/constants.cjs +19 -0
- package/dist/{countdown.js → countdown.cjs} +16 -7
- package/dist/{cron.js → cron.cjs} +20 -9
- package/dist/{dateRange.js → dateRange.cjs} +42 -26
- package/dist/{duration.js → duration.cjs} +56 -44
- package/dist/esm/calculate.d.ts +7 -0
- package/dist/esm/calculate.d.ts.map +1 -1
- package/dist/esm/calculate.js +11 -0
- package/dist/esm/chain.js +0 -5
- package/dist/esm/format.d.ts.map +1 -1
- package/dist/esm/format.js +3 -3
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/naturalLanguage.d.ts +1 -3
- package/dist/esm/naturalLanguage.d.ts.map +1 -1
- package/dist/esm/naturalLanguage.js +9 -2
- package/dist/esm/plugins.d.ts +0 -6
- package/dist/esm/plugins.d.ts.map +1 -1
- package/dist/esm/plugins.js +36 -42
- package/dist/esm/recurrence.d.ts.map +1 -1
- package/dist/esm/recurrence.js +3 -5
- package/dist/esm/timezone.d.ts +6 -1
- package/dist/esm/timezone.d.ts.map +1 -1
- package/dist/esm/timezone.js +106 -66
- package/dist/esm/types.d.ts +0 -4
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/{finance.js → finance.cjs} +39 -22
- package/dist/{fiscal.js → fiscal.cjs} +36 -17
- package/dist/{format.js → format.cjs} +85 -72
- package/dist/format.d.ts.map +1 -1
- package/dist/{healthcare.js → healthcare.cjs} +37 -22
- package/dist/{holidays.js → holidays.cjs} +52 -25
- package/dist/index.cjs +596 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/{interval.js → interval.cjs} +24 -11
- package/dist/{iterate.js → iterate.cjs} +84 -41
- package/dist/{locale.js → locale.cjs} +54 -26
- package/dist/{naturalLanguage.js → naturalLanguage.cjs} +36 -23
- package/dist/naturalLanguage.d.ts +1 -3
- package/dist/naturalLanguage.d.ts.map +1 -1
- package/dist/{parse.js → parse.cjs} +24 -11
- package/dist/{performance.js → performance.cjs} +23 -10
- package/dist/{plugins.js → plugins.cjs} +48 -47
- package/dist/plugins.d.ts +0 -6
- package/dist/plugins.d.ts.map +1 -1
- package/dist/{precision.js → precision.cjs} +74 -37
- package/dist/{rangePresets.js → rangePresets.cjs} +40 -19
- package/dist/{recurrence.js → recurrence.cjs} +27 -21
- package/dist/recurrence.d.ts.map +1 -1
- package/dist/{scheduling.js → scheduling.cjs} +46 -31
- package/dist/{serialize.js → serialize.cjs} +36 -17
- package/dist/{temporal.js → temporal.cjs} +28 -13
- package/dist/{timezone.js → timezone.cjs} +140 -82
- package/dist/timezone.d.ts +6 -1
- package/dist/timezone.d.ts.map +1 -1
- package/dist/{types.js → types.cjs} +9 -3
- package/dist/types.d.ts +0 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/{validate.js → validate.cjs} +54 -26
- package/dist/{workingHours.js → workingHours.cjs} +36 -17
- package/package.json +41 -38
- package/dist/constants.js +0 -16
- package/dist/index.js +0 -72
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// Format utilities
|
|
6
6
|
export { formatDuration, timeAgo, formatTime, parseDuration, formatDate, formatDateRange, formatOrdinal, formatDayOrdinal, formatDurationCompact, formatCalendarDate } from './format.js';
|
|
7
7
|
// Calculation utilities
|
|
8
|
-
export { differenceInUnits, addTime, subtractTime, startOf, endOf, isBetween, businessDaysBetween, roundToNearestUnit, ceilDate, floorDate } from './calculate.js';
|
|
8
|
+
export { differenceInUnits, differenceInCalendarDays, addTime, subtractTime, startOf, endOf, isBetween, businessDaysBetween, roundToNearestUnit, ceilDate, floorDate } from './calculate.js';
|
|
9
9
|
// Validation utilities
|
|
10
10
|
export { isValidDate, isLeapYear, isPast, isFuture, isToday, isYesterday, isTomorrow, isSameDay, isSameWeek, isSameMonth, isSameYear, isThisWeek, isThisMonth, isThisYear, isWeekend, isWeekday, isBusinessDay, isInLastNDays, isInNextNDays, isValidTimeString, isValidISOString, isSameHour, isSameMinute, isSameSecond, isInQuarter, isSameQuarter } from './validate.js';
|
|
11
11
|
// Age utilities
|
|
@@ -14,9 +14,7 @@ export interface NaturalParseOptions {
|
|
|
14
14
|
minute: number;
|
|
15
15
|
second?: number;
|
|
16
16
|
};
|
|
17
|
-
/**
|
|
18
|
-
locale?: string;
|
|
19
|
-
/** Whether to use strict parsing */
|
|
17
|
+
/** Whether to skip permissive fallback parsing */
|
|
20
18
|
strict?: boolean;
|
|
21
19
|
}
|
|
22
20
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naturalLanguage.d.ts","sourceRoot":"","sources":["../../src/naturalLanguage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,sDAAsD;IACtD,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,
|
|
1
|
+
{"version":3,"file":"naturalLanguage.d.ts","sourceRoot":"","sources":["../../src/naturalLanguage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,sDAAsD;IACtD,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACjD,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,GAAG,IAAI,CAkD9F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,GAAE,IAAiB,GAAG,IAAI,GAAG,IAAI,CA6DhG;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,aAAa,EAAE,CAsDjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,KAAK,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAkDzD"}
|
|
@@ -26,7 +26,7 @@ import { parseRelativeDate } from './parse.js';
|
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
28
|
export function parseNaturalDate(input, options = {}) {
|
|
29
|
-
const { referenceDate = new Date(), defaultTime } = options;
|
|
29
|
+
const { referenceDate = new Date(), defaultTime, strict = false } = options;
|
|
30
30
|
const normalized = input.toLowerCase().trim();
|
|
31
31
|
// Try relative phrase parser first (handles "next week", "last month", etc.)
|
|
32
32
|
const relativePhraseResult = parseRelativePhrase(input, referenceDate);
|
|
@@ -61,6 +61,9 @@ export function parseNaturalDate(input, options = {}) {
|
|
|
61
61
|
return parseMatchedPattern(match, referenceDate, defaultTime);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
|
+
if (strict) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
64
67
|
// Try standard Date parsing as fallback
|
|
65
68
|
const standardDate = new Date(input);
|
|
66
69
|
if (!isNaN(standardDate.getTime())) {
|
|
@@ -182,7 +185,11 @@ export function extractDatesFromText(text, options = {}) {
|
|
|
182
185
|
continue;
|
|
183
186
|
processed.add(`${index}-${matchedText}`);
|
|
184
187
|
// Try to parse the matched text
|
|
185
|
-
const parsed = parseNaturalDate(matchedText, {
|
|
188
|
+
const parsed = parseNaturalDate(matchedText, {
|
|
189
|
+
referenceDate,
|
|
190
|
+
defaultTime: options.defaultTime,
|
|
191
|
+
strict: options.strict
|
|
192
|
+
});
|
|
186
193
|
if (parsed) {
|
|
187
194
|
results.push({
|
|
188
195
|
date: parsed,
|
package/dist/esm/plugins.d.ts
CHANGED
|
@@ -19,12 +19,6 @@
|
|
|
19
19
|
* chain(new Date()).nextMonday().format('YYYY-MM-DD');
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
|
-
/**
|
|
23
|
-
* Initialize the plugin system with ChainedDate class
|
|
24
|
-
* This is called automatically when chain.js is imported
|
|
25
|
-
* @internal
|
|
26
|
-
*/
|
|
27
|
-
export declare function __initPluginSystem(ChainedDateClass: any): void;
|
|
28
22
|
/**
|
|
29
23
|
* Plugin function type - methods receive ChainedDate instance as `this`
|
|
30
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/plugins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/plugins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAgBH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAAC;CACtC;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAwBhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAqClD;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAG7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,iBAAiB;CAAG"}
|
package/dist/esm/plugins.js
CHANGED
|
@@ -19,38 +19,20 @@
|
|
|
19
19
|
* chain(new Date()).nextMonday().format('YYYY-MM-DD');
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
|
-
|
|
23
|
-
// We need the actual class (not just the type) to modify its prototype
|
|
24
|
-
let ChainedDateConstructor = null;
|
|
22
|
+
import { ChainedDate } from './chain.js';
|
|
25
23
|
/**
|
|
26
|
-
* Get ChainedDate class
|
|
24
|
+
* Get ChainedDate class for prototype mutation.
|
|
25
|
+
* Importing `plugins` now brings in `chain` directly, so the class is available
|
|
26
|
+
* without a hidden global handshake.
|
|
27
27
|
*/
|
|
28
28
|
function getChainedDate() {
|
|
29
|
-
if (!
|
|
30
|
-
|
|
31
|
-
try {
|
|
32
|
-
// Try ESM import path first
|
|
33
|
-
ChainedDateConstructor = globalThis.__chainedDateClass;
|
|
34
|
-
if (!ChainedDateConstructor) {
|
|
35
|
-
// Fallback: The class will be set by chain.js when it loads
|
|
36
|
-
throw new Error('ChainedDate not yet loaded. Import chain.js before using plugins.');
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
catch (e) {
|
|
40
|
-
throw new Error('ChainedDate class not available. Ensure chain.js is imported before registering plugins.');
|
|
41
|
-
}
|
|
29
|
+
if (!ChainedDate) {
|
|
30
|
+
throw new Error('ChainedDate export is not available yet. Import chain.js before registering plugins.');
|
|
42
31
|
}
|
|
43
|
-
return
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Initialize the plugin system with ChainedDate class
|
|
47
|
-
* This is called automatically when chain.js is imported
|
|
48
|
-
* @internal
|
|
49
|
-
*/
|
|
50
|
-
export function __initPluginSystem(ChainedDateClass) {
|
|
51
|
-
ChainedDateConstructor = ChainedDateClass;
|
|
32
|
+
return ChainedDate;
|
|
52
33
|
}
|
|
53
34
|
const registry = {};
|
|
35
|
+
const methodStates = {};
|
|
54
36
|
/**
|
|
55
37
|
* Extend ChainedDate with custom methods
|
|
56
38
|
*
|
|
@@ -80,23 +62,23 @@ export function extend(pluginName, methods) {
|
|
|
80
62
|
if (registry[pluginName]) {
|
|
81
63
|
throw new Error(`Plugin "${pluginName}" is already registered. Use a different name or uninstall first.`);
|
|
82
64
|
}
|
|
83
|
-
// Get ChainedDate class and save original methods before overwriting
|
|
84
65
|
const ChainedDateClass = getChainedDate();
|
|
85
|
-
const originalMethods = new Map();
|
|
86
66
|
Object.entries(methods).forEach(([methodName, fn]) => {
|
|
87
|
-
|
|
67
|
+
const current = ChainedDateClass.prototype[methodName];
|
|
68
|
+
if (!methodStates[methodName]) {
|
|
69
|
+
methodStates[methodName] = {
|
|
70
|
+
original: typeof current === 'function' ? current : undefined,
|
|
71
|
+
owners: []
|
|
72
|
+
};
|
|
73
|
+
}
|
|
88
74
|
if (methodName in ChainedDateClass.prototype) {
|
|
89
|
-
const original = ChainedDateClass.prototype[methodName];
|
|
90
|
-
if (typeof original === 'function') {
|
|
91
|
-
originalMethods.set(methodName, original);
|
|
92
|
-
}
|
|
93
75
|
console.warn(`Method "${methodName}" already exists on ChainedDate and will be overwritten`);
|
|
94
76
|
}
|
|
77
|
+
methodStates[methodName].owners.push(pluginName);
|
|
95
78
|
// Add the plugin method
|
|
96
79
|
ChainedDateClass.prototype[methodName] = fn;
|
|
97
80
|
});
|
|
98
|
-
|
|
99
|
-
registry[pluginName] = { plugin: methods, originalMethods };
|
|
81
|
+
registry[pluginName] = { plugin: methods };
|
|
100
82
|
}
|
|
101
83
|
/**
|
|
102
84
|
* Remove a plugin and its methods from ChainedDate
|
|
@@ -113,20 +95,32 @@ export function uninstall(pluginName) {
|
|
|
113
95
|
if (!entry) {
|
|
114
96
|
throw new Error(`Plugin "${pluginName}" is not registered`);
|
|
115
97
|
}
|
|
116
|
-
// Get ChainedDate class and restore/remove methods
|
|
117
98
|
const ChainedDateClass = getChainedDate();
|
|
118
99
|
Object.keys(entry.plugin).forEach((methodName) => {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
100
|
+
const state = methodStates[methodName];
|
|
101
|
+
if (!state) {
|
|
102
|
+
delete ChainedDateClass.prototype[methodName];
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
state.owners = state.owners.filter((owner) => owner !== pluginName);
|
|
106
|
+
const nextOwner = state.owners[state.owners.length - 1];
|
|
107
|
+
if (nextOwner) {
|
|
108
|
+
const nextPlugin = registry[nextOwner];
|
|
109
|
+
if (nextPlugin && methodName in nextPlugin.plugin) {
|
|
110
|
+
ChainedDateClass.prototype[methodName] = nextPlugin.plugin[methodName];
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
delete ChainedDateClass.prototype[methodName];
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (state.original) {
|
|
117
|
+
ChainedDateClass.prototype[methodName] = state.original;
|
|
123
118
|
}
|
|
124
119
|
else {
|
|
125
|
-
// Otherwise, delete the method entirely
|
|
126
120
|
delete ChainedDateClass.prototype[methodName];
|
|
127
121
|
}
|
|
122
|
+
delete methodStates[methodName];
|
|
128
123
|
});
|
|
129
|
-
// Remove from registry
|
|
130
124
|
delete registry[pluginName];
|
|
131
125
|
}
|
|
132
126
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurrence.d.ts","sourceRoot":"","sources":["../../src/recurrence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAuB,MAAM,YAAY,CAAC;AAGjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc;;oCAKjB,SAAS;mCACV,SAAS,OAAO,SAAS,UAAU,MAAM;6BAE/C,SAAS;;
|
|
1
|
+
{"version":3,"file":"recurrence.d.ts","sourceRoot":"","sources":["../../src/recurrence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAuB,MAAM,YAAY,CAAC;AAGjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc;;oCAKjB,SAAS;mCACV,SAAS,OAAO,SAAS,UAAU,MAAM;6BAE/C,SAAS;;EAmBrC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAyC1F;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,SAAS,EACd,KAAK,SAAO,GACX,IAAI,EAAE,CA6BR;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAW/E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAgC5E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CA6C/D"}
|
package/dist/esm/recurrence.js
CHANGED
|
@@ -43,19 +43,17 @@ export function createRecurrence(rule) {
|
|
|
43
43
|
isRecurrenceDate: (date) => isRecurrenceDate(date, rule),
|
|
44
44
|
getAllOccurrences: (limit = 100) => {
|
|
45
45
|
const occurrences = [];
|
|
46
|
-
let current = new Date(startDate);
|
|
47
|
-
|
|
48
|
-
while (count < limit) {
|
|
46
|
+
let current = new Date(startDate.getTime() - 1);
|
|
47
|
+
while (occurrences.length < limit) {
|
|
49
48
|
if (rule.until && current > new Date(rule.until))
|
|
50
49
|
break;
|
|
51
|
-
if (rule.count &&
|
|
50
|
+
if (rule.count && occurrences.length >= rule.count)
|
|
52
51
|
break;
|
|
53
52
|
const next = getNextOccurrence(rule, current);
|
|
54
53
|
if (!next)
|
|
55
54
|
break;
|
|
56
55
|
occurrences.push(next);
|
|
57
56
|
current = new Date(next.getTime() + 1);
|
|
58
|
-
count++;
|
|
59
57
|
}
|
|
60
58
|
return occurrences;
|
|
61
59
|
}
|
package/dist/esm/timezone.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ export declare function compareZoneOffsets(zoneA: string, zoneB: string, date?:
|
|
|
33
33
|
export declare function reinterpretAsZone(date: Date, targetZone: string): Date | null;
|
|
34
34
|
/**
|
|
35
35
|
* Check if a date is in Daylight Saving Time for a given timezone
|
|
36
|
+
* Uses a yearly-offset heuristic: sample the zone's local year and treat the
|
|
37
|
+
* maximum observed UTC offset as the DST offset for that year.
|
|
36
38
|
* @param date - date to check
|
|
37
39
|
* @param zone - IANA timezone string
|
|
38
40
|
*/
|
|
@@ -50,7 +52,10 @@ export declare function getNextDSTTransition(date: Date, zone: string): Date | n
|
|
|
50
52
|
* @param workHoursStart - work hours start (0-24)
|
|
51
53
|
* @param workHoursEnd - work hours end (0-24)
|
|
52
54
|
* @param date - reference date (default: today)
|
|
53
|
-
* @returns
|
|
55
|
+
* @returns one contiguous UTC overlap window, specifically the longest
|
|
56
|
+
* contiguous overlap slice. A full-day overlap is returned as
|
|
57
|
+
* `{ startUTC: 0, endUTC: 24 }`, and wrapped overlaps are returned with
|
|
58
|
+
* `endUTC` normalized back into the 0-24 range and may be less than `startUTC`
|
|
54
59
|
*/
|
|
55
60
|
export declare function findCommonWorkingHours(zones: string[], workHoursStart?: number, workHoursEnd?: number, date?: Date): {
|
|
56
61
|
startUTC: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../src/timezone.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../src/timezone.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA6B5C,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,MAAM,GAAG,IAAI,CAgBtF;AAED,iCAAiC;AACjC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,IAAI,CAAC,qBAA0B,GAAG,MAAM,CAG3G;AAED,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAIvE;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE,GAAG,IAAI,CAoB9J;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOrD;AAED,uEAAuE;AACvE,eAAO,MAAM,gBAAgB,UAK5B,CAAC;AAEF,0CAA0C;AAC1C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,MAAM,GAAG,IAAI,CAKvG;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAI7E;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CA4B9D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAmC1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EAAE,EACf,cAAc,GAAE,MAAU,EAC1B,YAAY,GAAE,MAAW,EACzB,IAAI,GAAE,IAAiB,GACtB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqE7C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,MAAM,GAAG,IAAI,CAY5F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAa7F;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,MAAM,GAAG,IAAI,CAI/G;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,OAAO,GAAG,IAAI,CAIpG"}
|
package/dist/esm/timezone.js
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Timezone utilities using Intl API with fallbacks
|
|
3
3
|
*/
|
|
4
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
5
|
+
const DAY_HOURS = 24;
|
|
6
|
+
const YEAR_MONTHS = Array.from({ length: 12 }, (_, month) => month);
|
|
7
|
+
function normalizeHourValue(hour) {
|
|
8
|
+
return ((hour % DAY_HOURS) + DAY_HOURS) % DAY_HOURS;
|
|
9
|
+
}
|
|
10
|
+
function pushSweepInterval(events, start, end) {
|
|
11
|
+
const clampedStart = Math.max(0, start);
|
|
12
|
+
const clampedEnd = Math.min(DAY_HOURS * 2, end);
|
|
13
|
+
if (clampedStart >= clampedEnd)
|
|
14
|
+
return;
|
|
15
|
+
events.push({ time: clampedStart, delta: 1 });
|
|
16
|
+
events.push({ time: clampedEnd, delta: -1 });
|
|
17
|
+
}
|
|
4
18
|
/** Get offset (minutes) for a zone at a given date */
|
|
5
19
|
export function getTimezoneOffset(zone, date = new Date()) {
|
|
6
20
|
try {
|
|
@@ -99,30 +113,35 @@ export function reinterpretAsZone(date, targetZone) {
|
|
|
99
113
|
}
|
|
100
114
|
/**
|
|
101
115
|
* Check if a date is in Daylight Saving Time for a given timezone
|
|
116
|
+
* Uses a yearly-offset heuristic: sample the zone's local year and treat the
|
|
117
|
+
* maximum observed UTC offset as the DST offset for that year.
|
|
102
118
|
* @param date - date to check
|
|
103
119
|
* @param zone - IANA timezone string
|
|
104
120
|
*/
|
|
105
121
|
export function isDST(date, zone) {
|
|
106
122
|
if (!isValidTimeZone(zone))
|
|
107
123
|
return null;
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const julOffset = getTimezoneOffset(zone, july);
|
|
124
|
+
const zonedDate = convertDateToZone(date, zone);
|
|
125
|
+
if (!zonedDate) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
113
128
|
const currentOffset = getTimezoneOffset(zone, date);
|
|
114
|
-
if (
|
|
129
|
+
if (currentOffset === null) {
|
|
115
130
|
return null;
|
|
116
131
|
}
|
|
117
|
-
|
|
118
|
-
|
|
132
|
+
const yearlyOffsets = new Set();
|
|
133
|
+
for (const month of YEAR_MONTHS) {
|
|
134
|
+
const sample = new Date(Date.UTC(zonedDate.year, month, 1, 12, 0, 0));
|
|
135
|
+
const offset = getTimezoneOffset(zone, sample);
|
|
136
|
+
if (offset === null) {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
yearlyOffsets.add(offset);
|
|
140
|
+
}
|
|
141
|
+
if (yearlyOffsets.size <= 1) {
|
|
119
142
|
return false;
|
|
120
143
|
}
|
|
121
|
-
|
|
122
|
-
// In southern hemisphere, summer (January) has larger offset
|
|
123
|
-
// DST is whichever is the "larger" offset
|
|
124
|
-
const maxOffset = Math.max(janOffset, julOffset);
|
|
125
|
-
return currentOffset === maxOffset;
|
|
144
|
+
return currentOffset === Math.max(...yearlyOffsets);
|
|
126
145
|
}
|
|
127
146
|
/**
|
|
128
147
|
* Get the next DST transition (if any) for a timezone
|
|
@@ -133,46 +152,35 @@ export function isDST(date, zone) {
|
|
|
133
152
|
export function getNextDSTTransition(date, zone) {
|
|
134
153
|
if (!isValidTimeZone(zone))
|
|
135
154
|
return null;
|
|
136
|
-
const january = new Date(date.getFullYear(), 0, 1);
|
|
137
|
-
const july = new Date(date.getFullYear(), 6, 1);
|
|
138
|
-
const janOffset = getTimezoneOffset(zone, january);
|
|
139
|
-
const julOffset = getTimezoneOffset(zone, july);
|
|
140
|
-
if (janOffset === null || julOffset === null)
|
|
141
|
-
return null;
|
|
142
|
-
// No DST if offsets are the same
|
|
143
|
-
if (janOffset === julOffset)
|
|
144
|
-
return null;
|
|
145
|
-
// Binary search for the transition within the next year
|
|
146
155
|
const currentOffset = getTimezoneOffset(zone, date);
|
|
147
156
|
if (currentOffset === null)
|
|
148
157
|
return null;
|
|
149
|
-
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
let low = prevDay.getTime();
|
|
160
|
-
let high = searchDate.getTime();
|
|
161
|
-
while (high - low > 60000) { // 1 minute precision
|
|
162
|
-
const mid = Math.floor((low + high) / 2);
|
|
163
|
-
const midDate = new Date(mid);
|
|
164
|
-
const midOffset = getTimezoneOffset(zone, midDate);
|
|
165
|
-
if (midOffset === currentOffset) {
|
|
166
|
-
low = mid;
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
high = mid;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return new Date(high);
|
|
158
|
+
const startTime = date.getTime() + 1;
|
|
159
|
+
const searchLimit = startTime + 366 * DAY_MS;
|
|
160
|
+
let low = startTime;
|
|
161
|
+
let high = null;
|
|
162
|
+
for (let probeTime = startTime + DAY_MS; probeTime <= searchLimit; probeTime += DAY_MS) {
|
|
163
|
+
const probeOffset = getTimezoneOffset(zone, new Date(probeTime));
|
|
164
|
+
if (probeOffset !== null && probeOffset !== currentOffset) {
|
|
165
|
+
low = probeTime - DAY_MS;
|
|
166
|
+
high = probeTime;
|
|
167
|
+
break;
|
|
173
168
|
}
|
|
174
169
|
}
|
|
175
|
-
|
|
170
|
+
if (high === null) {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
while (high - low > 1) {
|
|
174
|
+
const mid = Math.floor((low + high) / 2);
|
|
175
|
+
const midOffset = getTimezoneOffset(zone, new Date(mid));
|
|
176
|
+
if (midOffset === currentOffset) {
|
|
177
|
+
low = mid;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
high = mid;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return new Date(high);
|
|
176
184
|
}
|
|
177
185
|
/**
|
|
178
186
|
* Find overlapping working hours between multiple timezones
|
|
@@ -180,32 +188,64 @@ export function getNextDSTTransition(date, zone) {
|
|
|
180
188
|
* @param workHoursStart - work hours start (0-24)
|
|
181
189
|
* @param workHoursEnd - work hours end (0-24)
|
|
182
190
|
* @param date - reference date (default: today)
|
|
183
|
-
* @returns
|
|
191
|
+
* @returns one contiguous UTC overlap window, specifically the longest
|
|
192
|
+
* contiguous overlap slice. A full-day overlap is returned as
|
|
193
|
+
* `{ startUTC: 0, endUTC: 24 }`, and wrapped overlaps are returned with
|
|
194
|
+
* `endUTC` normalized back into the 0-24 range and may be less than `startUTC`
|
|
184
195
|
*/
|
|
185
196
|
export function findCommonWorkingHours(zones, workHoursStart = 9, workHoursEnd = 17, date = new Date()) {
|
|
186
197
|
if (zones.length === 0)
|
|
187
198
|
return null;
|
|
188
|
-
|
|
189
|
-
const
|
|
199
|
+
const endHour = workHoursEnd < workHoursStart ? workHoursEnd + DAY_HOURS : workHoursEnd;
|
|
200
|
+
const duration = endHour - workHoursStart;
|
|
201
|
+
if (duration <= 0) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
const sweepEvents = [];
|
|
205
|
+
for (const zone of zones) {
|
|
190
206
|
const offset = getTimezoneOffset(zone, date);
|
|
191
|
-
if (offset === null)
|
|
207
|
+
if (offset === null) {
|
|
192
208
|
return null;
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
209
|
+
}
|
|
210
|
+
if (duration >= DAY_HOURS) {
|
|
211
|
+
pushSweepInterval(sweepEvents, 0, DAY_HOURS * 2);
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
const startUTC = normalizeHourValue(workHoursStart - (offset / 60));
|
|
215
|
+
pushSweepInterval(sweepEvents, startUTC, startUTC + duration);
|
|
216
|
+
pushSweepInterval(sweepEvents, startUTC + DAY_HOURS, startUTC + DAY_HOURS + duration);
|
|
217
|
+
}
|
|
218
|
+
sweepEvents.sort((a, b) => a.time - b.time || b.delta - a.delta);
|
|
219
|
+
let activeWindows = 0;
|
|
220
|
+
let previousTime = 0;
|
|
221
|
+
let bestOverlap = null;
|
|
222
|
+
for (let i = 0; i < sweepEvents.length;) {
|
|
223
|
+
const currentTime = sweepEvents[i].time;
|
|
224
|
+
if (currentTime > previousTime && activeWindows === zones.length) {
|
|
225
|
+
const candidate = { start: previousTime, end: currentTime };
|
|
226
|
+
if (bestOverlap === null ||
|
|
227
|
+
candidate.end - candidate.start > bestOverlap.end - bestOverlap.start ||
|
|
228
|
+
(candidate.end - candidate.start === bestOverlap.end - bestOverlap.start &&
|
|
229
|
+
candidate.start < bestOverlap.start)) {
|
|
230
|
+
bestOverlap = candidate;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
while (i < sweepEvents.length && sweepEvents[i].time === currentTime) {
|
|
234
|
+
activeWindows += sweepEvents[i].delta;
|
|
235
|
+
i++;
|
|
236
|
+
}
|
|
237
|
+
previousTime = currentTime;
|
|
238
|
+
}
|
|
239
|
+
if (bestOverlap === null) {
|
|
200
240
|
return null;
|
|
201
|
-
const validRanges = utcRanges;
|
|
202
|
-
// Find intersection of all ranges
|
|
203
|
-
let overlapStart = Math.max(...validRanges.map(r => r.startUTC));
|
|
204
|
-
let overlapEnd = Math.min(...validRanges.map(r => r.endUTC));
|
|
205
|
-
if (overlapStart >= overlapEnd) {
|
|
206
|
-
return null; // No overlap
|
|
207
241
|
}
|
|
208
|
-
|
|
242
|
+
const overlapDuration = bestOverlap.end - bestOverlap.start;
|
|
243
|
+
if (overlapDuration >= DAY_HOURS) {
|
|
244
|
+
return { startUTC: 0, endUTC: DAY_HOURS };
|
|
245
|
+
}
|
|
246
|
+
const startUTC = normalizeHourValue(bestOverlap.start);
|
|
247
|
+
const endUTC = normalizeHourValue(bestOverlap.start + overlapDuration);
|
|
248
|
+
return { startUTC, endUTC };
|
|
209
249
|
}
|
|
210
250
|
/**
|
|
211
251
|
* Get all timezone abbreviations for a zone on a given date
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -14,8 +14,6 @@ export interface ParseOptions {
|
|
|
14
14
|
strict?: boolean;
|
|
15
15
|
/** Timezone to use for parsing */
|
|
16
16
|
timezone?: string;
|
|
17
|
-
/** Default locale for parsing */
|
|
18
|
-
locale?: string;
|
|
19
17
|
}
|
|
20
18
|
/** Options for formatting operations */
|
|
21
19
|
export interface FormatOptions {
|
|
@@ -63,8 +61,6 @@ export interface WorkingHoursConfig {
|
|
|
63
61
|
start: number;
|
|
64
62
|
end: number;
|
|
65
63
|
}[];
|
|
66
|
-
/** Timezone for working hours calculation */
|
|
67
|
-
timezone?: string;
|
|
68
64
|
}
|
|
69
65
|
/** Result of age calculation */
|
|
70
66
|
export interface AgeResult {
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,4CAA4C;AAC5C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAE/C,4CAA4C;AAC5C,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,IAAI,CAAC;CACX;AAED,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,4CAA4C;AAC5C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAE/C,4CAA4C;AAC5C,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,IAAI,CAAC;CACX;AAED,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qCAAqC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8CAA8C;AAC9C,MAAM,MAAM,QAAQ,GAChB,aAAa,GAAG,cAAc,GAAG,IAAI,GACrC,QAAQ,GAAG,SAAS,GAAG,GAAG,GAC1B,QAAQ,GAAG,SAAS,GAAG,GAAG,GAC1B,MAAM,GAAG,OAAO,GAAG,GAAG,GACtB,KAAK,GAAG,MAAM,GAAG,GAAG,GACpB,MAAM,GAAG,OAAO,GAAG,GAAG,GACtB,OAAO,GAAG,QAAQ,GAAG,GAAG,GACxB,MAAM,GAAG,OAAO,GAAG,GAAG,CAAC;AAE3B,+BAA+B;AAC/B,qBAAa,cAAe,SAAQ,KAAK;IACH,IAAI,CAAC,EAAE,MAAM;gBAArC,OAAO,EAAE,MAAM,EAAS,IAAI,CAAC,EAAE,MAAM,YAAA;CAIlD;AAED,qBAAa,UAAW,SAAQ,cAAc;IACR,KAAK,CAAC,EAAE,OAAO;gBAAvC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,OAAO,YAAA;CAIpD;AAED,qBAAa,eAAgB,SAAQ,cAAc;IACb,KAAK,CAAC,EAAE,OAAO;gBAAvC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,OAAO,YAAA;CAIpD;AAED,sCAAsC;AACtC,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAEpD,+CAA+C;AAC/C,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAEnD,6CAA6C;AAC7C,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0BAA0B;IAC1B,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,yCAAyC;IACzC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3C;AAED,gCAAgC;AAChC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,2BAA2B;AAC3B,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,0CAA0C;AAC1C,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,IAAI,CAAC;CACX;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,IAAI,CAAC;CACd;AAED,iCAAiC;AACjC,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5E,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,oCAAoC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,yCAAyC;AACzC,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACpE,2BAA2B;IAC3B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACjE;AAED,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAClB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,0BAA0B;AAC1B,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpH,mCAAmC;AACnC,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iCAAiC;AACjC,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5C,mCAAmC;AACnC,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gCAAgC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC/C,qCAAqC;IACrC,SAAS,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,cAAc,CAAC;IACxD,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,cAAc,GAAG,SAAS,GAAG,cAAc,CAAC;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,iDAAiD;AACjD,MAAM,MAAM,eAAe,GACvB,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAC5C,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAClC,IAAI,GAAG,OAAO,GAAG,OAAO,GACxB,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAClC,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GAAG,OAAO,GACxB,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GAAG,OAAO,GACxB,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,GACd,IAAI,GAAG,OAAO,CAAC;AAEnB,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GAAG,SAAS,GACpB,QAAQ,GAAG,SAAS,GACpB,MAAM,GAAG,OAAO,GAChB,KAAK,GAAG,MAAM,GACd,MAAM,GAAG,OAAO,GAChB,OAAO,GAAG,QAAQ,GAClB,MAAM,GAAG,OAAO,CAAC;AAErB,oCAAoC;AACpC,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,2BAA2B;IAC3B,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,2BAA2B;IAC3B,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,iCAAiC;IACjC,YAAY,CAAC,EAAE;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;KACnD,CAAC;IACF,iCAAiC;IACjC,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,wBAAwB;IACxB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,uDAAuD;IACvD,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,yDAAyD;IACzD,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACrC"}
|