@oneluiz/dual-datepicker 3.9.0 → 3.9.2
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/core/calendar-grid/cache.config.d.ts +34 -0
- package/core/calendar-grid/index.d.ts +6 -0
- package/core/calendar-grid/range-highlighter.cache.d.ts +6 -5
- package/esm2022/core/calendar-grid/cache.config.mjs +35 -0
- package/esm2022/core/calendar-grid/calendar-grid.cache.mjs +9 -3
- package/esm2022/core/calendar-grid/index.mjs +7 -1
- package/esm2022/core/calendar-grid/range-highlighter.cache.mjs +10 -8
- package/fesm2022/oneluiz-dual-datepicker.mjs +56 -10
- package/fesm2022/oneluiz-dual-datepicker.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache Configuration
|
|
3
|
+
*
|
|
4
|
+
* Centralized cache limits for memory safety.
|
|
5
|
+
*
|
|
6
|
+
* @module core/calendar-grid/cache.config
|
|
7
|
+
* @version 3.9.2
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Maximum cache entries before FIFO eviction
|
|
11
|
+
*
|
|
12
|
+
* Applied to both:
|
|
13
|
+
* - CalendarGridCache: Raw month grids
|
|
14
|
+
* - RangeHighlighterCache: Decorated grids
|
|
15
|
+
*
|
|
16
|
+
* Memory footprint:
|
|
17
|
+
* - CalendarGrid (raw): ~10KB each
|
|
18
|
+
* - DecoratedGrid: ~15KB each
|
|
19
|
+
* - Total worst case: (10KB + 15KB) × 48 = ~1.2MB
|
|
20
|
+
*
|
|
21
|
+
* Coverage:
|
|
22
|
+
* - 48 months = 4 years of navigation
|
|
23
|
+
* - Sufficient for long-running sessions
|
|
24
|
+
*
|
|
25
|
+
* Critical for:
|
|
26
|
+
* - ERP systems (invoice date selection)
|
|
27
|
+
* - BI dashboards (date range filters)
|
|
28
|
+
* - Hotel reservation systems (availability calendars)
|
|
29
|
+
* - Point-of-sale systems (report generation)
|
|
30
|
+
*
|
|
31
|
+
* @constant
|
|
32
|
+
* @since v3.9.2
|
|
33
|
+
*/
|
|
34
|
+
export declare const MAX_CACHE_ENTRIES = 48;
|
|
@@ -17,6 +17,11 @@
|
|
|
17
17
|
* - Render only visible weeks (configurable window)
|
|
18
18
|
* - ~50% reduction in DOM nodes with windowSize=3
|
|
19
19
|
*
|
|
20
|
+
* v3.9.2: Cache Bounds (Memory Safety)
|
|
21
|
+
* - MAX_CACHE_ENTRIES = 48 prevents unbounded growth
|
|
22
|
+
* - FIFO eviction for long-running sessions
|
|
23
|
+
* - Critical for ERP, BI, hotel systems
|
|
24
|
+
*
|
|
20
25
|
* Usage:
|
|
21
26
|
* ```typescript
|
|
22
27
|
* constructor(
|
|
@@ -48,3 +53,4 @@ export * from './range-highlighter';
|
|
|
48
53
|
export * from './range-highlighter.cache';
|
|
49
54
|
export * from './virtual-weeks.types';
|
|
50
55
|
export * from './virtual-weeks.logic';
|
|
56
|
+
export * from './cache.config';
|
|
@@ -10,7 +10,7 @@ import * as i0 from "@angular/core";
|
|
|
10
10
|
*
|
|
11
11
|
* Cache strategy:
|
|
12
12
|
* - LRU eviction (Map preserves insertion order)
|
|
13
|
-
* - Max 48 entries (
|
|
13
|
+
* - Max 48 entries (v3.9.2: Memory safety for long-running sessions)
|
|
14
14
|
* - Key: month + start + end + hover + disabled signature
|
|
15
15
|
*
|
|
16
16
|
* Performance:
|
|
@@ -18,10 +18,11 @@ import * as i0 from "@angular/core";
|
|
|
18
18
|
* - Cache miss: ~1ms (decoration + store)
|
|
19
19
|
* - Hit rate: Expected >80% in typical usage
|
|
20
20
|
*
|
|
21
|
-
* Memory:
|
|
22
|
-
* -
|
|
23
|
-
* -
|
|
24
|
-
* -
|
|
21
|
+
* Memory safety (v3.9.2):
|
|
22
|
+
* - MAX_CACHE_ENTRIES prevents unbounded growth
|
|
23
|
+
* - Critical for: ERP, BI dashboards, hotel systems
|
|
24
|
+
* - FIFO eviction when limit exceeded
|
|
25
|
+
* - ~720KB max memory footprint
|
|
25
26
|
*
|
|
26
27
|
* Edge cases handled:
|
|
27
28
|
* - Function predicates: Not cacheable (recompute every time)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache Configuration
|
|
3
|
+
*
|
|
4
|
+
* Centralized cache limits for memory safety.
|
|
5
|
+
*
|
|
6
|
+
* @module core/calendar-grid/cache.config
|
|
7
|
+
* @version 3.9.2
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Maximum cache entries before FIFO eviction
|
|
11
|
+
*
|
|
12
|
+
* Applied to both:
|
|
13
|
+
* - CalendarGridCache: Raw month grids
|
|
14
|
+
* - RangeHighlighterCache: Decorated grids
|
|
15
|
+
*
|
|
16
|
+
* Memory footprint:
|
|
17
|
+
* - CalendarGrid (raw): ~10KB each
|
|
18
|
+
* - DecoratedGrid: ~15KB each
|
|
19
|
+
* - Total worst case: (10KB + 15KB) × 48 = ~1.2MB
|
|
20
|
+
*
|
|
21
|
+
* Coverage:
|
|
22
|
+
* - 48 months = 4 years of navigation
|
|
23
|
+
* - Sufficient for long-running sessions
|
|
24
|
+
*
|
|
25
|
+
* Critical for:
|
|
26
|
+
* - ERP systems (invoice date selection)
|
|
27
|
+
* - BI dashboards (date range filters)
|
|
28
|
+
* - Hotel reservation systems (availability calendars)
|
|
29
|
+
* - Point-of-sale systems (report generation)
|
|
30
|
+
*
|
|
31
|
+
* @constant
|
|
32
|
+
* @since v3.9.2
|
|
33
|
+
*/
|
|
34
|
+
export const MAX_CACHE_ENTRIES = 48;
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvcmUvY2FsZW5kYXItZ3JpZC9jYWNoZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENhY2hlIENvbmZpZ3VyYXRpb25cbiAqIFxuICogQ2VudHJhbGl6ZWQgY2FjaGUgbGltaXRzIGZvciBtZW1vcnkgc2FmZXR5LlxuICogXG4gKiBAbW9kdWxlIGNvcmUvY2FsZW5kYXItZ3JpZC9jYWNoZS5jb25maWdcbiAqIEB2ZXJzaW9uIDMuOS4yXG4gKi9cblxuLyoqXG4gKiBNYXhpbXVtIGNhY2hlIGVudHJpZXMgYmVmb3JlIEZJRk8gZXZpY3Rpb25cbiAqIFxuICogQXBwbGllZCB0byBib3RoOlxuICogLSBDYWxlbmRhckdyaWRDYWNoZTogUmF3IG1vbnRoIGdyaWRzXG4gKiAtIFJhbmdlSGlnaGxpZ2h0ZXJDYWNoZTogRGVjb3JhdGVkIGdyaWRzXG4gKiBcbiAqIE1lbW9yeSBmb290cHJpbnQ6XG4gKiAtIENhbGVuZGFyR3JpZCAocmF3KTogfjEwS0IgZWFjaFxuICogLSBEZWNvcmF0ZWRHcmlkOiB+MTVLQiBlYWNoXG4gKiAtIFRvdGFsIHdvcnN0IGNhc2U6ICgxMEtCICsgMTVLQikgw5cgNDggPSB+MS4yTUJcbiAqIFxuICogQ292ZXJhZ2U6XG4gKiAtIDQ4IG1vbnRocyA9IDQgeWVhcnMgb2YgbmF2aWdhdGlvblxuICogLSBTdWZmaWNpZW50IGZvciBsb25nLXJ1bm5pbmcgc2Vzc2lvbnNcbiAqIFxuICogQ3JpdGljYWwgZm9yOlxuICogLSBFUlAgc3lzdGVtcyAoaW52b2ljZSBkYXRlIHNlbGVjdGlvbilcbiAqIC0gQkkgZGFzaGJvYXJkcyAoZGF0ZSByYW5nZSBmaWx0ZXJzKVxuICogLSBIb3RlbCByZXNlcnZhdGlvbiBzeXN0ZW1zIChhdmFpbGFiaWxpdHkgY2FsZW5kYXJzKVxuICogLSBQb2ludC1vZi1zYWxlIHN5c3RlbXMgKHJlcG9ydCBnZW5lcmF0aW9uKVxuICogXG4gKiBAY29uc3RhbnRcbiAqIEBzaW5jZSB2My45LjJcbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9DQUNIRV9FTlRSSUVTID0gNDg7XG4iXX0=
|
|
@@ -7,19 +7,25 @@
|
|
|
7
7
|
* Strategy:
|
|
8
8
|
* - Key: year-month-weekStart-locale
|
|
9
9
|
* - LRU eviction (least recently used) when limit is reached
|
|
10
|
-
* - Default limit:
|
|
10
|
+
* - Default limit: 48 months (covers 2 years of navigation)
|
|
11
11
|
*
|
|
12
12
|
* Performance impact:
|
|
13
13
|
* - Eliminates ~90% of grid recalculations in typical usage
|
|
14
14
|
* - Memory footprint: ~10KB per cached month (negligible)
|
|
15
|
+
*
|
|
16
|
+
* Memory safety (v3.9.2):
|
|
17
|
+
* - MAX_CACHE_ENTRIES prevents unbounded growth in long-running sessions
|
|
18
|
+
* - Critical for: ERP, BI dashboards, hotel reservation systems
|
|
19
|
+
* - FIFO eviction when limit exceeded
|
|
15
20
|
*/
|
|
16
21
|
import { Injectable } from '@angular/core';
|
|
22
|
+
import { MAX_CACHE_ENTRIES } from './cache.config';
|
|
17
23
|
import * as i0 from "@angular/core";
|
|
18
24
|
import * as i1 from "./calendar-grid.factory";
|
|
19
25
|
export class CalendarGridCache {
|
|
20
26
|
factory;
|
|
21
27
|
cache = new Map();
|
|
22
|
-
maxSize =
|
|
28
|
+
maxSize = MAX_CACHE_ENTRIES;
|
|
23
29
|
constructor(factory) {
|
|
24
30
|
this.factory = factory;
|
|
25
31
|
}
|
|
@@ -89,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
89
95
|
type: Injectable,
|
|
90
96
|
args: [{ providedIn: 'root' }]
|
|
91
97
|
}], ctorParameters: () => [{ type: i1.CalendarGridFactory }] });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZ3JpZC5jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL2NhbGVuZGFyLWdyaWQvY2FsZW5kYXItZ3JpZC5jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUduRCxNQUFNLE9BQU8saUJBQWlCO0lBSVI7SUFIWixLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFDL0IsT0FBTyxHQUFXLGlCQUFpQixDQUFDO0lBRXJELFlBQW9CLE9BQTRCO1FBQTVCLFlBQU8sR0FBUCxPQUFPLENBQXFCO0lBQUcsQ0FBQztJQUVwRDs7Ozs7OztPQU9HO0lBQ0gsR0FBRyxDQUFDLFNBQWUsRUFBRSxZQUFvQixDQUFDLEVBQUUsTUFBZTtRQUN6RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFeEQsY0FBYztRQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxvQkFBb0I7WUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuRSxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTFCLG1DQUFtQztRQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxRQUFRLENBQUMsU0FBZSxFQUFFLFNBQWlCLEVBQUUsTUFBZTtRQUNsRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25DLE9BQU8sR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxTQUFlLEVBQUUsWUFBb0IsQ0FBQyxFQUFFLE1BQWU7UUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQzt3R0F6RVUsaUJBQWlCOzRHQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FsZW5kYXIgR3JpZCBDYWNoZVxuICpcbiAqIExSVSBjYWNoZSBmb3IgY2FsZW5kYXIgbW9udGggZ3JpZHMgdG8gYXZvaWQgcmVjb21wdXRpbmcgdGhlIHNhbWUgbW9udGggZ3JpZFxuICogbXVsdGlwbGUgdGltZXMgd2hlbiBvbmx5IGRlY29yYXRpb25zIChzZWxlY3RlZCBkYXRlcywgaG92ZXIsIGV0Yy4pIGNoYW5nZS5cbiAqXG4gKiBTdHJhdGVneTpcbiAqIC0gS2V5OiB5ZWFyLW1vbnRoLXdlZWtTdGFydC1sb2NhbGVcbiAqIC0gTFJVIGV2aWN0aW9uIChsZWFzdCByZWNlbnRseSB1c2VkKSB3aGVuIGxpbWl0IGlzIHJlYWNoZWRcbiAqIC0gRGVmYXVsdCBsaW1pdDogNDggbW9udGhzIChjb3ZlcnMgMiB5ZWFycyBvZiBuYXZpZ2F0aW9uKVxuICpcbiAqIFBlcmZvcm1hbmNlIGltcGFjdDpcbiAqIC0gRWxpbWluYXRlcyB+OTAlIG9mIGdyaWQgcmVjYWxjdWxhdGlvbnMgaW4gdHlwaWNhbCB1c2FnZVxuICogLSBNZW1vcnkgZm9vdHByaW50OiB+MTBLQiBwZXIgY2FjaGVkIG1vbnRoIChuZWdsaWdpYmxlKVxuICogXG4gKiBNZW1vcnkgc2FmZXR5ICh2My45LjIpOlxuICogLSBNQVhfQ0FDSEVfRU5UUklFUyBwcmV2ZW50cyB1bmJvdW5kZWQgZ3Jvd3RoIGluIGxvbmctcnVubmluZyBzZXNzaW9uc1xuICogLSBDcml0aWNhbCBmb3I6IEVSUCwgQkkgZGFzaGJvYXJkcywgaG90ZWwgcmVzZXJ2YXRpb24gc3lzdGVtc1xuICogLSBGSUZPIGV2aWN0aW9uIHdoZW4gbGltaXQgZXhjZWVkZWRcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYWxlbmRhckdyaWRGYWN0b3J5IH0gZnJvbSAnLi9jYWxlbmRhci1ncmlkLmZhY3RvcnknO1xuaW1wb3J0IHsgQ2FsZW5kYXJHcmlkLCBDYWxlbmRhckdyaWRDYWNoZUtleSB9IGZyb20gJy4vY2FsZW5kYXItZ3JpZC50eXBlcyc7XG5pbXBvcnQgeyBNQVhfQ0FDSEVfRU5UUklFUyB9IGZyb20gJy4vY2FjaGUuY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckdyaWRDYWNoZSB7XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FsZW5kYXJHcmlkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heFNpemU6IG51bWJlciA9IE1BWF9DQUNIRV9FTlRSSUVTO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmFjdG9yeTogQ2FsZW5kYXJHcmlkRmFjdG9yeSkge31cblxuICAvKipcbiAgICogR2V0IG9yIGNyZWF0ZSBhIGNhbGVuZGFyIGdyaWRcbiAgICpcbiAgICogQHBhcmFtIG1vbnRoRGF0ZSAtIEFueSBkYXRlIHdpdGhpbiB0aGUgdGFyZ2V0IG1vbnRoXG4gICAqIEBwYXJhbSB3ZWVrU3RhcnQgLSBGaXJzdCBkYXkgb2Ygd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAgICogQHBhcmFtIGxvY2FsZSAtIExvY2FsZSBpZGVudGlmaWVyIChvcHRpb25hbClcbiAgICogQHJldHVybnMgQ2FsZW5kYXJHcmlkIC0gY2FjaGVkIG9yIG5ld2x5IGNyZWF0ZWRcbiAgICovXG4gIGdldChtb250aERhdGU6IERhdGUsIHdlZWtTdGFydDogbnVtYmVyID0gMCwgbG9jYWxlPzogc3RyaW5nKTogQ2FsZW5kYXJHcmlkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkS2V5KG1vbnRoRGF0ZSwgd2Vla1N0YXJ0LCBsb2NhbGUpO1xuXG4gICAgLy8gQ2hlY2sgY2FjaGVcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIC8vIE1vdmUgdG8gZW5kIChMUlUpXG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCBjYWNoZWQpO1xuICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBuZXcgZ3JpZFxuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmZhY3RvcnkuY3JlYXRlR3JpZChtb250aERhdGUsIHdlZWtTdGFydCwgbG9jYWxlKTtcblxuICAgIC8vIFN0b3JlIGluIGNhY2hlXG4gICAgdGhpcy5jYWNoZS5zZXQoa2V5LCBncmlkKTtcblxuICAgIC8vIEV2aWN0IG9sZGVzdCBpZiBvdmVyIGxpbWl0IChMUlUpXG4gICAgaWYgKHRoaXMuY2FjaGUuc2l6ZSA+IHRoaXMubWF4U2l6ZSkge1xuICAgICAgY29uc3QgZmlyc3RLZXkgPSB0aGlzLmNhY2hlLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyaWQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgY2FjaGUga2V5IGZyb20gbW9udGggcGFyYW1ldGVyc1xuICAgKlxuICAgKiBGb3JtYXQ6IFwieWVhci1tb250aC13ZWVrU3RhcnQtbG9jYWxlXCJcbiAgICogRXhhbXBsZTogXCIyMDI2LTEtMC1lblwiIChGZWIgMjAyNiwgU3VuZGF5IHN0YXJ0LCBFbmdsaXNoKVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEtleShtb250aERhdGU6IERhdGUsIHdlZWtTdGFydDogbnVtYmVyLCBsb2NhbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHllYXIgPSBtb250aERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IG1vbnRoRGF0ZS5nZXRNb250aCgpO1xuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke3dlZWtTdGFydH0ke2xvY2FsZSA/ICctJyArIGxvY2FsZSA6ICcnfWA7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgZW50aXJlIGNhY2hlIChmb3IgdGVzdGluZyBvciBtYW51YWwgcmVzZXQpXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNhY2hlIHNpemUgKGZvciBkZWJ1Z2dpbmcvdGVzdGluZylcbiAgICovXG4gIHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgc3BlY2lmaWMgbW9udGggaXMgY2FjaGVkXG4gICAqL1xuICBoYXMobW9udGhEYXRlOiBEYXRlLCB3ZWVrU3RhcnQ6IG51bWJlciA9IDAsIGxvY2FsZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRLZXkobW9udGhEYXRlLCB3ZWVrU3RhcnQsIGxvY2FsZSk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuaGFzKGtleSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -17,6 +17,11 @@
|
|
|
17
17
|
* - Render only visible weeks (configurable window)
|
|
18
18
|
* - ~50% reduction in DOM nodes with windowSize=3
|
|
19
19
|
*
|
|
20
|
+
* v3.9.2: Cache Bounds (Memory Safety)
|
|
21
|
+
* - MAX_CACHE_ENTRIES = 48 prevents unbounded growth
|
|
22
|
+
* - FIFO eviction for long-running sessions
|
|
23
|
+
* - Critical for ERP, BI, hotel systems
|
|
24
|
+
*
|
|
20
25
|
* Usage:
|
|
21
26
|
* ```typescript
|
|
22
27
|
* constructor(
|
|
@@ -48,4 +53,5 @@ export * from './range-highlighter';
|
|
|
48
53
|
export * from './range-highlighter.cache';
|
|
49
54
|
export * from './virtual-weeks.types';
|
|
50
55
|
export * from './virtual-weeks.logic';
|
|
51
|
-
|
|
56
|
+
export * from './cache.config';
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9jYWxlbmRhci1ncmlkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOENHO0FBRUgsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENhbGVuZGFyIEdyaWQgTW9kdWxlXG4gKlxuICogUGVyZm9ybWFuY2Utb3B0aW1pemVkIGNhbGVuZGFyIG1vbnRoIGdyaWQgZ2VuZXJhdGlvbiB3aXRoIG1lbW9pemF0aW9uLlxuICpcbiAqIHYzLjcuMDogR3JpZCBTdHJ1Y3R1cmUgQ2FjaGVcbiAqIC0gQ2FsZW5kYXJHcmlkRmFjdG9yeSBmb3IgZGV0ZXJtaW5pc3RpYyA0Mi1jZWxsIGdyaWRzXG4gKiAtIENhbGVuZGFyR3JpZENhY2hlIHdpdGggTFJVICgyNCBtb250aHMpXG4gKiBcbiAqIHYzLjguMDogUmFuZ2UgSGlnaGxpZ2h0IENhY2hlXG4gKiAtIFJhbmdlSGlnaGxpZ2h0ZXIgZm9yIGRlY29yYXRpb24gbG9naWNcbiAqIC0gUmFuZ2VIaWdobGlnaHRlckNhY2hlIHdpdGggTFJVICg0OCBncmlkcylcbiAqIC0gU2VwYXJhdGVzIGdyaWQgc3RydWN0dXJlIGZyb20gZGVjb3JhdGlvbnNcbiAqIFxuICogdjMuOS4wOiBWaXJ0dWFsIFdlZWtzIChXaW5kb3dlZCBSZW5kZXJpbmcpXG4gKiAtIFZpcnR1YWwtd2Vla3MgbG9naWMgZm9yIHJlZHVjZWQgRE9NIGNvbXBsZXhpdHlcbiAqIC0gUmVuZGVyIG9ubHkgdmlzaWJsZSB3ZWVrcyAoY29uZmlndXJhYmxlIHdpbmRvdylcbiAqIC0gfjUwJSByZWR1Y3Rpb24gaW4gRE9NIG5vZGVzIHdpdGggd2luZG93U2l6ZT0zXG4gKiBcbiAqIHYzLjkuMjogQ2FjaGUgQm91bmRzIChNZW1vcnkgU2FmZXR5KVxuICogLSBNQVhfQ0FDSEVfRU5UUklFUyA9IDQ4IHByZXZlbnRzIHVuYm91bmRlZCBncm93dGhcbiAqIC0gRklGTyBldmljdGlvbiBmb3IgbG9uZy1ydW5uaW5nIHNlc3Npb25zXG4gKiAtIENyaXRpY2FsIGZvciBFUlAsIEJJLCBob3RlbCBzeXN0ZW1zXG4gKlxuICogVXNhZ2U6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdHJ1Y3RvcihcbiAqICAgcHJpdmF0ZSBncmlkQ2FjaGU6IENhbGVuZGFyR3JpZENhY2hlLFxuICogICBwcml2YXRlIGhpZ2hsaWdodGVyQ2FjaGU6IFJhbmdlSGlnaGxpZ2h0ZXJDYWNoZVxuICogKSB7fVxuICpcbiAqIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRDYWNoZS5nZXQobW9udGhEYXRlLCB3ZWVrU3RhcnQpO1xuICogY29uc3QgZGVjb3JhdGVkID0gdGhpcy5oaWdobGlnaHRlckNhY2hlLmdldChncmlkLCB7XG4gKiAgIHN0YXJ0LCBlbmQsIGhvdmVyRGF0ZSwgZGlzYWJsZWREYXRlc1xuICogfSk7XG4gKiBcbiAqIC8vIE9wdGlvbmFsOiBXaW5kb3dlZCByZW5kZXJpbmcgKHYzLjkuMCspXG4gKiBjb25zdCB3aW5kb3dTaXplID0gMzsgLy8gUmVuZGVyIG9ubHkgMyB3ZWVrc1xuICogY29uc3QgdmlzaWJsZVdlZWtzID0gZ2V0VmlzaWJsZVdlZWtzKFxuICogICBkZWNvcmF0ZWQud2Vla3MsIFxuICogICB3ZWVrU3RhcnRJbmRleCwgXG4gKiAgIHdpbmRvd1NpemVcbiAqICk7XG4gKiAvLyBkZWNvcmF0ZWQuY2VsbHNbMF0uaXNvID0+ICcyMDI2LTAyLTAxJ1xuICogLy8gZGVjb3JhdGVkLmNlbGxzWzBdLmlzSW5SYW5nZSA9PiB0cnVlXG4gKiBgYGBcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2NhbGVuZGFyLWdyaWQudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jYWxlbmRhci1ncmlkLmZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9jYWxlbmRhci1ncmlkLmNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vcmFuZ2UtaGlnaGxpZ2h0ZXIudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9yYW5nZS1oaWdobGlnaHRlcic7XG5leHBvcnQgKiBmcm9tICcuL3JhbmdlLWhpZ2hsaWdodGVyLmNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vdmlydHVhbC13ZWVrcy50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZpcnR1YWwtd2Vla3MubG9naWMnO1xuZXhwb3J0ICogZnJvbSAnLi9jYWNoZS5jb25maWcnO1xuIl19
|
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
* Eliminates redundant decoration computations when range/constraints don't change.
|
|
6
6
|
*
|
|
7
7
|
* @module core/calendar-grid/range-highlighter.cache
|
|
8
|
-
* @version 3.
|
|
8
|
+
* @version 3.9.2
|
|
9
9
|
*/
|
|
10
10
|
import { Injectable, Inject } from '@angular/core';
|
|
11
11
|
import { DATE_ADAPTER } from '../date-adapter';
|
|
12
|
+
import { MAX_CACHE_ENTRIES } from './cache.config';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
import * as i1 from "./range-highlighter";
|
|
14
15
|
/**
|
|
@@ -18,7 +19,7 @@ import * as i1 from "./range-highlighter";
|
|
|
18
19
|
*
|
|
19
20
|
* Cache strategy:
|
|
20
21
|
* - LRU eviction (Map preserves insertion order)
|
|
21
|
-
* - Max 48 entries (
|
|
22
|
+
* - Max 48 entries (v3.9.2: Memory safety for long-running sessions)
|
|
22
23
|
* - Key: month + start + end + hover + disabled signature
|
|
23
24
|
*
|
|
24
25
|
* Performance:
|
|
@@ -26,10 +27,11 @@ import * as i1 from "./range-highlighter";
|
|
|
26
27
|
* - Cache miss: ~1ms (decoration + store)
|
|
27
28
|
* - Hit rate: Expected >80% in typical usage
|
|
28
29
|
*
|
|
29
|
-
* Memory:
|
|
30
|
-
* -
|
|
31
|
-
* -
|
|
32
|
-
* -
|
|
30
|
+
* Memory safety (v3.9.2):
|
|
31
|
+
* - MAX_CACHE_ENTRIES prevents unbounded growth
|
|
32
|
+
* - Critical for: ERP, BI dashboards, hotel systems
|
|
33
|
+
* - FIFO eviction when limit exceeded
|
|
34
|
+
* - ~720KB max memory footprint
|
|
33
35
|
*
|
|
34
36
|
* Edge cases handled:
|
|
35
37
|
* - Function predicates: Not cacheable (recompute every time)
|
|
@@ -53,7 +55,7 @@ export class RangeHighlighterCache {
|
|
|
53
55
|
highlighter;
|
|
54
56
|
adapter;
|
|
55
57
|
cache = new Map();
|
|
56
|
-
maxSize =
|
|
58
|
+
maxSize = MAX_CACHE_ENTRIES;
|
|
57
59
|
constructor(highlighter, adapter) {
|
|
58
60
|
this.highlighter = highlighter;
|
|
59
61
|
this.adapter = adapter;
|
|
@@ -195,4 +197,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
195
197
|
type: Inject,
|
|
196
198
|
args: [DATE_ADAPTER]
|
|
197
199
|
}] }] });
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtaGlnaGxpZ2h0ZXIuY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9jYWxlbmRhci1ncmlkL3JhbmdlLWhpZ2hsaWdodGVyLmNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFLNUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBS3RCO0lBQ3NCO0lBTHhCLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUN6QyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsZ0NBQWdDO0lBRXRELFlBQ1UsV0FBNkIsRUFDUCxPQUFvQjtRQUQxQyxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDUCxZQUFPLEdBQVAsT0FBTyxDQUFhO0lBQ2pELENBQUM7SUFFSjs7Ozs7Ozs7O09BU0c7SUFDSCxHQUFHLENBQ0QsSUFBa0IsRUFDbEIsTUFBNkI7UUFFN0Isa0JBQWtCO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTdDLDZEQUE2RDtRQUM3RCxNQUFNLFdBQVcsR0FBRyxPQUFPLE1BQU0sQ0FBQyxhQUFhLEtBQUssVUFBVSxDQUFDO1FBQy9ELElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEQsa0NBQWtDO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUUsQ0FBQztZ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LENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQzt3R0FuS1UscUJBQXFCLGtEQU10QixZQUFZOzRHQU5YLHFCQUFxQixjQURSLE1BQU07OzRGQUNuQixxQkFBcUI7a0JBRGpDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFPN0IsTUFBTTsyQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSYW5nZSBIaWdobGlnaHRlciBDYWNoZVxuICogXG4gKiBMUlUgY2FjaGUgZm9yIGRlY29yYXRlZCBjYWxlbmRhciBncmlkcy5cbiAqIEVsaW1pbmF0ZXMgcmVkdW5kYW50IGRlY29yYXRpb24gY29tcHV0YXRpb25zIHdoZW4gcmFuZ2UvY29uc3RyYWludHMgZG9uJ3QgY2hhbmdlLlxuICogXG4gKiBAbW9kdWxlIGNvcmUvY2FsZW5kYXItZ3JpZC9yYW5nZS1oaWdobGlnaHRlci5jYWNoZVxuICogQHZlcnNpb24gMy44LjBcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBEQVRFX0FEQVBURVIgfSBmcm9tICcuLi9kYXRlLWFkYXB0ZXInO1xuaW1wb3J0IHsgQ2FsZW5kYXJHcmlkIH0gZnJvbSAnLi9jYWxlbmRhci1ncmlkLnR5cGVzJztcbmltcG9ydCB7IERlY29yYXRlZEdyaWQsIFJhbmdlRGVjb3JhdGlvblBhcmFtcywgRGVjb3JhdGVkR3JpZENhY2hlS2V5IH0gZnJvbSAnLi9yYW5nZS1oaWdobGlnaHRlci50eXBlcyc7XG5pbXBvcnQgeyBSYW5nZUhpZ2hsaWdodGVyIH0gZnJvbSAnLi9yYW5nZS1oaWdobGlnaHRlcic7XG5cbi8qKlxuICogUmFuZ2UgSGlnaGxpZ2h0ZXIgQ2FjaGVcbiAqIFxuICogTWVtb2l6ZXMgZGVjb3JhdGVkIGdyaWRzIHRvIGF2b2lkIHJlY29tcHV0aW5nIGRlY29yYXRpb25zLlxuICogXG4gKiBDYWNoZSBzdHJhdGVneTpcbiAqIC0gTFJVIGV2aWN0aW9uIChNYXAgcHJlc2VydmVzIGluc2VydGlvbiBvcmRlcilcbiAqIC0gTWF4IDQ4IGVudHJpZXMgKH4xLTIgeWVhcnMgb2YgZGVjb3JhdGVkIGdyaWRzKVxuICogLSBLZXk6IG1vbnRoICsgc3RhcnQgKyBlbmQgKyBob3ZlciArIGRpc2FibGVkIHNpZ25hdHVyZVxuICogXG4gKiBQZXJmb3JtYW5jZTpcbiAqIC0gQ2FjaGUgaGl0OiB+MC4xbXMgKG9iamVjdCBsb29rdXApXG4gKiAtIENhY2hlIG1pc3M6IH4xbXMgKGRlY29yYXRpb24gKyBzdG9yZSlcbiAqIC0gSGl0IHJhdGU6IEV4cGVjdGVkID44MCUgaW4gdHlwaWNhbCB1c2FnZVxuICogXG4gKiBNZW1vcnk6XG4gKiAtIH4xNUtCIHBlciBkZWNvcmF0ZWQgZ3JpZFxuICogLSBNYXggNDggZ3JpZHMgPSB+NzIwS0JcbiAqIC0gQXV0by1ldmljdGlvbiBwcmV2ZW50cyBsZWFrc1xuICogXG4gKiBFZGdlIGNhc2VzIGhhbmRsZWQ6XG4gKiAtIEZ1bmN0aW9uIHByZWRpY2F0ZXM6IE5vdCBjYWNoZWFibGUgKHJlY29tcHV0ZSBldmVyeSB0aW1lKVxuICogLSBMYXJnZSBkaXNhYmxlZCBhcnJheXM6IFNvcnRlZCArIGpvaW5lZCBmb3Igc3RhYmxlIGtleVxuICogLSBIb3ZlciBjaGFuZ2VzOiBTZXBhcmF0ZSBjYWNoZSBlbnRyaWVzXG4gKiAtIE11bHRpLXJhbmdlIG1vZGU6IEluY2x1ZGVkIGluIGtleVxuICogXG4gKiBVc2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGdyaWQgPSBjYWxlbmRhckdyaWRDYWNoZS5nZXQobW9udGhEYXRlLCAwKTtcbiAqIGNvbnN0IGRlY29yYXRlZCA9IHJhbmdlSGlnaGxpZ2h0ZXJDYWNoZS5nZXQoZ3JpZCwge1xuICogICBzdGFydDogc3RhcnREYXRlLFxuICogICBlbmQ6IGVuZERhdGUsXG4gKiAgIGhvdmVyRGF0ZTogJzIwMjYtMDEtMjAnLFxuICogICBkaXNhYmxlZERhdGVzOiBbLi4uXVxuICogfSk7XG4gKiAvLyBTYW1lIHBhcmFtcyA9IHNhbWUgb2JqZWN0IHJlZmVyZW5jZSAoPT09KVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmFuZ2VIaWdobGlnaHRlckNhY2hlIHtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBEZWNvcmF0ZWRHcmlkPigpO1xuICBwcml2YXRlIG1heFNpemUgPSA0ODsgLy8gfjEtMiB5ZWFycyBvZiBkZWNvcmF0ZWQgZ3JpZHNcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhpZ2hsaWdodGVyOiBSYW5nZUhpZ2hsaWdodGVyLFxuICAgIEBJbmplY3QoREFURV9BREFQVEVSKSBwcml2YXRlIGFkYXB0ZXI6IERhdGVBZGFwdGVyXG4gICkge31cblxuICAvKipcbiAgICogR2V0IGRlY29yYXRlZCBncmlkIChjYWNoZWQgb3IgY29tcHV0ZWQpXG4gICAqIFxuICAgKiBJZiBjYWNoZSBoaXQ6IFJldHVybnMgZXhpc3RpbmcgRGVjb3JhdGVkR3JpZCAoc2FtZSBvYmplY3QgcmVmZXJlbmNlKVxuICAgKiBJZiBjYWNoZSBtaXNzOiBDb21wdXRlcyBkZWNvcmF0aW9ucywgc3RvcmVzIGluIGNhY2hlLCByZXR1cm5zIG5ldyBncmlkXG4gICAqIFxuICAgKiBAcGFyYW0gZ3JpZCBCYXNlIGNhbGVuZGFyIGdyaWQgKGZyb20gQ2FsZW5kYXJHcmlkQ2FjaGUpXG4gICAqIEBwYXJhbSBwYXJhbXMgRGVjb3JhdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEByZXR1cm5zIERlY29yYXRlZCBncmlkIHdpdGggcmFuZ2UgaGlnaGxpZ2h0c1xuICAgKi9cbiAgZ2V0KFxuICAgIGdyaWQ6IENhbGVuZGFyR3JpZCxcbiAgICBwYXJhbXM6IFJhbmdlRGVjb3JhdGlvblBhcmFtc1xuICApOiBEZWNvcmF0ZWRHcmlkIHtcbiAgICAvLyBCdWlsZCBjYWNoZSBrZXlcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuYnVpbGRLZXkoZ3JpZCwgcGFyYW1zKTtcblxuICAgIC8vIENoZWNrIGNhY2hlIChmdW5jdGlvbiBwcmVkaWNhdGVzIGNhbid0IGJlIGNhY2hlZCByZWxpYWJseSlcbiAgICBjb25zdCBoYXNGdW5jdGlvbiA9IHR5cGVvZiBwYXJhbXMuZGlzYWJsZWREYXRlcyA9PT0gJ2Z1bmN0aW9uJztcbiAgICBpZiAoIWhhc0Z1bmN0aW9uICYmIHRoaXMuY2FjaGUuaGFzKGNhY2hlS2V5LmZ1bGwpKSB7XG4gICAgICAvLyBDYWNoZSBoaXQ6IFJldHVybiBleGlzdGluZyBncmlkXG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleS5mdWxsKSE7XG4gICAgICBcbiAgICAgIC8vIExSVSB1cGRhdGU6IERlbGV0ZSBhbmQgcmUtaW5zZXJ0IChtb3ZlcyB0byBlbmQpXG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShjYWNoZUtleS5mdWxsKTtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KGNhY2hlS2V5LmZ1bGwsIGNhY2hlZCk7XG4gICAgICBcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgLy8gQ2FjaGUgbWlzczogQ29tcHV0ZSBkZWNvcmF0aW9uc1xuICAgIGNvbnN0IGRlY29yYXRlZCA9IHRoaXMuaGlnaGxpZ2h0ZXIuZGVjb3JhdGUoZ3JpZCwgcGFyYW1zKTtcblxuICAgIC8vIFN0b3JlIGluIGNhY2hlIChvbmx5IGlmIG5vdCB1c2luZyBmdW5jdGlvbiBwcmVkaWNhdGUpXG4gICAgaWYgKCFoYXNGdW5jdGlvbikge1xuICAgICAgdGhpcy5jYWNoZS5zZXQoY2FjaGVLZXkuZnVsbCwgZGVjb3JhdGVkKTtcblxuICAgICAgLy8gRXZpY3Qgb2xkZXN0IGlmIG92ZXIgbGltaXRcbiAgICAgIGlmICh0aGlzLmNhY2hlLnNpemUgPiB0aGlzLm1heFNpemUpIHtcbiAgICAgICAgY29uc3Qgb2xkZXN0S2V5ID0gdGhpcy5jYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShvbGRlc3RLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWNvcmF0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgY2FjaGUga2V5IGZyb20gZ3JpZCBhbmQgcGFyYW1zXG4gICAqIFxuICAgKiBLZXkgc3RydWN0dXJlOlxuICAgKiBgJHttb250aEtleX18JHtzdGFydElTT318JHtlbmRJU099fCR7bWluSVNPfXwke21heElTT318JHtob3ZlcklTT318JHtkaXNhYmxlZFNpZ31gXG4gICAqIFxuICAgKiBFeGFtcGxlOlxuICAgKiBcIjIwMjYtMS0wLXwyMDI2LTAxLTE1fDIwMjYtMDEtMjV8bnVsbHxudWxsfDIwMjYtMDEtMjB8MjAyNi0wMS0xMCwyMDI2LTAxLTExXCJcbiAgICogXG4gICAqIEBwYXJhbSBncmlkIEJhc2UgY2FsZW5kYXIgZ3JpZFxuICAgKiBAcGFyYW0gcGFyYW1zIERlY29yYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcmV0dXJucyBDYWNoZSBrZXkgY29tcG9uZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEtleShcbiAgICBncmlkOiBDYWxlbmRhckdyaWQsXG4gICAgcGFyYW1zOiBSYW5nZURlY29yYXRpb25QYXJhbXNcbiAgKTogRGVjb3JhdGVkR3JpZENhY2hlS2V5IHtcbiAgICAvLyBNb250aCBrZXkgKGZyb20gYmFzZSBncmlkKVxuICAgIGNvbnN0IG1vbnRoS2V5ID0gYCR7Z3JpZC5tb250aC55ZWFyfS0ke2dyaWQubW9udGgubW9udGh9LSR7Z3JpZC53ZWVrU3RhcnR9LSR7Z3JpZC5sb2NhbGUgfHwgJyd9YDtcblxuICAgIC8vIERhdGUgSVNPcyAobnVsbCBpZiBub3QgcHJvdmlkZWQpXG4gICAgY29uc3Qgc3RhcnRJU08gPSBwYXJhbXMuc3RhcnQgPyB0aGlzLmFkYXB0ZXIudG9JU09EYXRlKHBhcmFtcy5zdGFydCkgOiAnbnVsbCc7XG4gICAgY29uc3QgZW5kSVNPID0gcGFyYW1zLmVuZCA/IHRoaXMuYWRhcHRlci50b0lTT0RhdGUocGFyYW1zLmVuZCkgOiAnbnVsbCc7XG4gICAgY29uc3QgbWluSVNPID0gcGFyYW1zLm1pbkRhdGUgPyB0aGlzLmFkYXB0ZXIudG9JU09EYXRlKHBhcmFtcy5taW5EYXRlKSA6ICdudWxsJztcbiAgICBjb25zdCBtYXhJU08gPSBwYXJhbXMubWF4RGF0ZSA/IHRoaXMuYWRhcHRlci50b0lTT0RhdGUocGFyYW1zLm1heERhdGUpIDogJ251bGwnO1xuICAgIGNvbnN0IGhvdmVySVNPID0gcGFyYW1zLmhvdmVyRGF0ZSB8fCAnbnVsbCc7XG5cbiAgICAvLyBEaXNhYmxlZCBkYXRlcyBzaWduYXR1cmVcbiAgICBjb25zdCBkaXNhYmxlZFNpZ25hdHVyZSA9IHRoaXMuYnVpbGREaXNhYmxlZFNpZ25hdHVyZShwYXJhbXMuZGlzYWJsZWREYXRlcyk7XG5cbiAgICAvLyBNdWx0aS1yYW5nZSBmbGFnIChhZmZlY3RzIGhvdmVyIGJlaGF2aW9yKVxuICAgIGNvbnN0IG11bHRpUmFuZ2VGbGFnID0gcGFyYW1zLm11bHRpUmFuZ2UgPyAnMScgOiAnMCc7XG4gICAgY29uc3Qgc2VsZWN0aW5nU3RhcnRGbGFnID0gcGFyYW1zLnNlbGVjdGluZ1N0YXJ0RGF0ZSA/ICcxJyA6ICcwJztcblxuICAgIC8vIEZ1bGwga2V5IChwaXBlLXNlcGFyYXRlZCBmb3IgcmVhZGFiaWxpdHkpXG4gICAgY29uc3QgZnVsbCA9IGAke21vbnRoS2V5fXwke3N0YXJ0SVNPfXwke2VuZElTT318JHttaW5JU099fCR7bWF4SVNPfXwke2hvdmVySVNPfXwke2Rpc2FibGVkU2lnbmF0dXJlfXwke211bHRpUmFuZ2VGbGFnfXwke3NlbGVjdGluZ1N0YXJ0RmxhZ31gO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vbnRoS2V5LFxuICAgICAgc3RhcnRJU08sXG4gICAgICBlbmRJU08sXG4gICAgICBtaW5JU08sXG4gICAgICBtYXhJU08sXG4gICAgICBob3ZlcklTTyxcbiAgICAgIGRpc2FibGVkU2lnbmF0dXJlLFxuICAgICAgZnVsbFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgc2lnbmF0dXJlIGZvciBkaXNhYmxlZCBkYXRlc1xuICAgKiBcbiAgICogU3RyYXRlZ2llczpcbiAgICogLSBudWxsL3VuZGVmaW5lZDogJ25vbmUnXG4gICAqIC0gRnVuY3Rpb246ICdmdW5jdGlvbicgKG5vdCBjYWNoZWFibGUpXG4gICAqIC0gQXJyYXk6IFNvcnRlZCBJU08gZGF0ZXMgam9pbmVkIHdpdGggY29tbWFzXG4gICAqIFxuICAgKiBAcGFyYW0gZGlzYWJsZWREYXRlcyBEaXNhYmxlZCBkYXRlcyBzcGVjaWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIFNpZ25hdHVyZSBzdHJpbmcgZm9yIGNhY2hlIGtleVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZERpc2FibGVkU2lnbmF0dXJlKFxuICAgIGRpc2FibGVkRGF0ZXM/OiBEYXRlW10gfCAoKGRhdGU6IERhdGUpID0+IGJvb2xlYW4pIHwgbnVsbFxuICApOiBzdHJpbmcge1xuICAgIGlmICghZGlzYWJsZWREYXRlcykgcmV0dXJuICdub25lJztcblxuICAgIGlmICh0eXBlb2YgZGlzYWJsZWREYXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGlzYWJsZWREYXRlcykpIHtcbiAgICAgIGlmIChkaXNhYmxlZERhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdub25lJztcblxuICAgICAgLy8gQ29udmVydCB0byBJU08gZGF0ZXMsIHNvcnQsIGpvaW5cbiAgICAgIGNvbnN0IGlzb0FycmF5ID0gZGlzYWJsZWREYXRlc1xuICAgICAgICAubWFwKGRhdGUgPT4gdGhpcy5hZGFwdGVyLnRvSVNPRGF0ZShkYXRlKSlcbiAgICAgICAgLnNvcnQoKTtcblxuICAgICAgcmV0dXJuIGlzb0FycmF5LmpvaW4oJywnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ25vbmUnO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjYWNoZWQgZ3JpZHNcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBjYWNoZSBzaXplXG4gICAqL1xuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBrZXkgaXMgY2FjaGVkXG4gICAqIFxuICAgKiBAcGFyYW0gZ3JpZCBCYXNlIGNhbGVuZGFyIGdyaWRcbiAgICogQHBhcmFtIHBhcmFtcyBEZWNvcmF0aW9uIHBhcmFtZXRlcnNcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGlzIGdyaWQrcGFyYW1zIGlzIGNhY2hlZFxuICAgKi9cbiAgaGFzKGdyaWQ6IENhbGVuZGFyR3JpZCwgcGFyYW1zOiBSYW5nZURlY29yYXRpb25QYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkS2V5KGdyaWQsIHBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuaGFzKGtleS5mdWxsKTtcbiAgfVxufVxuIl19
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtaGlnaGxpZ2h0ZXIuY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9jYWxlbmRhci1ncmlkL3JhbmdlLWhpZ2hsaWdodGVyLmNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NHO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQUt0QjtJQUNzQjtJQUx4QixLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDekMsT0FBTyxHQUFHLGlCQUFpQixDQUFDO0lBRXBDLFlBQ1UsV0FBNkIsRUFDUCxPQUFvQjtRQUQxQyxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDUCxZQUFPLEdBQVAsT0FBTyxDQUFhO0lBQ2pELENBQUM7SUFFSjs7Ozs7Ozs7O09BU0c7SUFDSCxHQUFHLENBQ0QsSUFBa0IsRUFDbEIsTUFBNkI7UUFFN0Isa0JBQWtCO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTdDLDZEQUE2RDtRQUM3RCxNQUFNLFdBQVcsR0FBRyxPQUFPLE1BQU0sQ0FBQyxhQUFhLEtBQUssVUFBVSxDQUFDO1FBQy9ELElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEQsa0NBQWtDO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMs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LEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQzt3R0FuS1UscUJBQXFCLGtEQU10QixZQUFZOzRHQU5YLHFCQUFxQixjQURSLE1BQU07OzRGQUNuQixxQkFBcUI7a0JBRGpDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFPN0IsTUFBTTsyQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSYW5nZSBIaWdobGlnaHRlciBDYWNoZVxuICogXG4gKiBMUlUgY2FjaGUgZm9yIGRlY29yYXRlZCBjYWxlbmRhciBncmlkcy5cbiAqIEVsaW1pbmF0ZXMgcmVkdW5kYW50IGRlY29yYXRpb24gY29tcHV0YXRpb25zIHdoZW4gcmFuZ2UvY29uc3RyYWludHMgZG9uJ3QgY2hhbmdlLlxuICogXG4gKiBAbW9kdWxlIGNvcmUvY2FsZW5kYXItZ3JpZC9yYW5nZS1oaWdobGlnaHRlci5jYWNoZVxuICogQHZlcnNpb24gMy45LjJcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBEQVRFX0FEQVBURVIgfSBmcm9tICcuLi9kYXRlLWFkYXB0ZXInO1xuaW1wb3J0IHsgQ2FsZW5kYXJHcmlkIH0gZnJvbSAnLi9jYWxlbmRhci1ncmlkLnR5cGVzJztcbmltcG9ydCB7IERlY29yYXRlZEdyaWQsIFJhbmdlRGVjb3JhdGlvblBhcmFtcywgRGVjb3JhdGVkR3JpZENhY2hlS2V5IH0gZnJvbSAnLi9yYW5nZS1oaWdobGlnaHRlci50eXBlcyc7XG5pbXBvcnQgeyBSYW5nZUhpZ2hsaWdodGVyIH0gZnJvbSAnLi9yYW5nZS1oaWdobGlnaHRlcic7XG5pbXBvcnQgeyBNQVhfQ0FDSEVfRU5UUklFUyB9IGZyb20gJy4vY2FjaGUuY29uZmlnJztcblxuLyoqXG4gKiBSYW5nZSBIaWdobGlnaHRlciBDYWNoZVxuICogXG4gKiBNZW1vaXplcyBkZWNvcmF0ZWQgZ3JpZHMgdG8gYXZvaWQgcmVjb21wdXRpbmcgZGVjb3JhdGlvbnMuXG4gKiBcbiAqIENhY2hlIHN0cmF0ZWd5OlxuICogLSBMUlUgZXZpY3Rpb24gKE1hcCBwcmVzZXJ2ZXMgaW5zZXJ0aW9uIG9yZGVyKVxuICogLSBNYXggNDggZW50cmllcyAodjMuOS4yOiBNZW1vcnkgc2FmZXR5IGZvciBsb25nLXJ1bm5pbmcgc2Vzc2lvbnMpXG4gKiAtIEtleTogbW9udGggKyBzdGFydCArIGVuZCArIGhvdmVyICsgZGlzYWJsZWQgc2lnbmF0dXJlXG4gKiBcbiAqIFBlcmZvcm1hbmNlOlxuICogLSBDYWNoZSBoaXQ6IH4wLjFtcyAob2JqZWN0IGxvb2t1cClcbiAqIC0gQ2FjaGUgbWlzczogfjFtcyAoZGVjb3JhdGlvbiArIHN0b3JlKVxuICogLSBIaXQgcmF0ZTogRXhwZWN0ZWQgPjgwJSBpbiB0eXBpY2FsIHVzYWdlXG4gKiBcbiAqIE1lbW9yeSBzYWZldHkgKHYzLjkuMik6XG4gKiAtIE1BWF9DQUNIRV9FTlRSSUVTIHByZXZlbnRzIHVuYm91bmRlZCBncm93dGhcbiAqIC0gQ3JpdGljYWwgZm9yOiBFUlAsIEJJIGRhc2hib2FyZHMsIGhvdGVsIHN5c3RlbXNcbiAqIC0gRklGTyBldmljdGlvbiB3aGVuIGxpbWl0IGV4Y2VlZGVkXG4gKiAtIH43MjBLQiBtYXggbWVtb3J5IGZvb3RwcmludFxuICogXG4gKiBFZGdlIGNhc2VzIGhhbmRsZWQ6XG4gKiAtIEZ1bmN0aW9uIHByZWRpY2F0ZXM6IE5vdCBjYWNoZWFibGUgKHJlY29tcHV0ZSBldmVyeSB0aW1lKVxuICogLSBMYXJnZSBkaXNhYmxlZCBhcnJheXM6IFNvcnRlZCArIGpvaW5lZCBmb3Igc3RhYmxlIGtleVxuICogLSBIb3ZlciBjaGFuZ2VzOiBTZXBhcmF0ZSBjYWNoZSBlbnRyaWVzXG4gKiAtIE11bHRpLXJhbmdlIG1vZGU6IEluY2x1ZGVkIGluIGtleVxuICogXG4gKiBVc2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGdyaWQgPSBjYWxlbmRhckdyaWRDYWNoZS5nZXQobW9udGhEYXRlLCAwKTtcbiAqIGNvbnN0IGRlY29yYXRlZCA9IHJhbmdlSGlnaGxpZ2h0ZXJDYWNoZS5nZXQoZ3JpZCwge1xuICogICBzdGFydDogc3RhcnREYXRlLFxuICogICBlbmQ6IGVuZERhdGUsXG4gKiAgIGhvdmVyRGF0ZTogJzIwMjYtMDEtMjAnLFxuICogICBkaXNhYmxlZERhdGVzOiBbLi4uXVxuICogfSk7XG4gKiAvLyBTYW1lIHBhcmFtcyA9IHNhbWUgb2JqZWN0IHJlZmVyZW5jZSAoPT09KVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmFuZ2VIaWdobGlnaHRlckNhY2hlIHtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBEZWNvcmF0ZWRHcmlkPigpO1xuICBwcml2YXRlIG1heFNpemUgPSBNQVhfQ0FDSEVfRU5UUklFUztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhpZ2hsaWdodGVyOiBSYW5nZUhpZ2hsaWdodGVyLFxuICAgIEBJbmplY3QoREFURV9BREFQVEVSKSBwcml2YXRlIGFkYXB0ZXI6IERhdGVBZGFwdGVyXG4gICkge31cblxuICAvKipcbiAgICogR2V0IGRlY29yYXRlZCBncmlkIChjYWNoZWQgb3IgY29tcHV0ZWQpXG4gICAqIFxuICAgKiBJZiBjYWNoZSBoaXQ6IFJldHVybnMgZXhpc3RpbmcgRGVjb3JhdGVkR3JpZCAoc2FtZSBvYmplY3QgcmVmZXJlbmNlKVxuICAgKiBJZiBjYWNoZSBtaXNzOiBDb21wdXRlcyBkZWNvcmF0aW9ucywgc3RvcmVzIGluIGNhY2hlLCByZXR1cm5zIG5ldyBncmlkXG4gICAqIFxuICAgKiBAcGFyYW0gZ3JpZCBCYXNlIGNhbGVuZGFyIGdyaWQgKGZyb20gQ2FsZW5kYXJHcmlkQ2FjaGUpXG4gICAqIEBwYXJhbSBwYXJhbXMgRGVjb3JhdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEByZXR1cm5zIERlY29yYXRlZCBncmlkIHdpdGggcmFuZ2UgaGlnaGxpZ2h0c1xuICAgKi9cbiAgZ2V0KFxuICAgIGdyaWQ6IENhbGVuZGFyR3JpZCxcbiAgICBwYXJhbXM6IFJhbmdlRGVjb3JhdGlvblBhcmFtc1xuICApOiBEZWNvcmF0ZWRHcmlkIHtcbiAgICAvLyBCdWlsZCBjYWNoZSBrZXlcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuYnVpbGRLZXkoZ3JpZCwgcGFyYW1zKTtcblxuICAgIC8vIENoZWNrIGNhY2hlIChmdW5jdGlvbiBwcmVkaWNhdGVzIGNhbid0IGJlIGNhY2hlZCByZWxpYWJseSlcbiAgICBjb25zdCBoYXNGdW5jdGlvbiA9IHR5cGVvZiBwYXJhbXMuZGlzYWJsZWREYXRlcyA9PT0gJ2Z1bmN0aW9uJztcbiAgICBpZiAoIWhhc0Z1bmN0aW9uICYmIHRoaXMuY2FjaGUuaGFzKGNhY2hlS2V5LmZ1bGwpKSB7XG4gICAgICAvLyBDYWNoZSBoaXQ6IFJldHVybiBleGlzdGluZyBncmlkXG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleS5mdWxsKSE7XG4gICAgICBcbiAgICAgIC8vIExSVSB1cGRhdGU6IERlbGV0ZSBhbmQgcmUtaW5zZXJ0IChtb3ZlcyB0byBlbmQpXG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShjYWNoZUtleS5mdWxsKTtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KGNhY2hlS2V5LmZ1bGwsIGNhY2hlZCk7XG4gICAgICBcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgLy8gQ2FjaGUgbWlzczogQ29tcHV0ZSBkZWNvcmF0aW9uc1xuICAgIGNvbnN0IGRlY29yYXRlZCA9IHRoaXMuaGlnaGxpZ2h0ZXIuZGVjb3JhdGUoZ3JpZCwgcGFyYW1zKTtcblxuICAgIC8vIFN0b3JlIGluIGNhY2hlIChvbmx5IGlmIG5vdCB1c2luZyBmdW5jdGlvbiBwcmVkaWNhdGUpXG4gICAgaWYgKCFoYXNGdW5jdGlvbikge1xuICAgICAgdGhpcy5jYWNoZS5zZXQoY2FjaGVLZXkuZnVsbCwgZGVjb3JhdGVkKTtcblxuICAgICAgLy8gRXZpY3Qgb2xkZXN0IGlmIG92ZXIgbGltaXRcbiAgICAgIGlmICh0aGlzLmNhY2hlLnNpemUgPiB0aGlzLm1heFNpemUpIHtcbiAgICAgICAgY29uc3Qgb2xkZXN0S2V5ID0gdGhpcy5jYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShvbGRlc3RLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWNvcmF0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgY2FjaGUga2V5IGZyb20gZ3JpZCBhbmQgcGFyYW1zXG4gICAqIFxuICAgKiBLZXkgc3RydWN0dXJlOlxuICAgKiBgJHttb250aEtleX18JHtzdGFydElTT318JHtlbmRJU099fCR7bWluSVNPfXwke21heElTT318JHtob3ZlcklTT318JHtkaXNhYmxlZFNpZ31gXG4gICAqIFxuICAgKiBFeGFtcGxlOlxuICAgKiBcIjIwMjYtMS0wLXwyMDI2LTAxLTE1fDIwMjYtMDEtMjV8bnVsbHxudWxsfDIwMjYtMDEtMjB8MjAyNi0wMS0xMCwyMDI2LTAxLTExXCJcbiAgICogXG4gICAqIEBwYXJhbSBncmlkIEJhc2UgY2FsZW5kYXIgZ3JpZFxuICAgKiBAcGFyYW0gcGFyYW1zIERlY29yYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcmV0dXJucyBDYWNoZSBrZXkgY29tcG9uZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEtleShcbiAgICBncmlkOiBDYWxlbmRhckdyaWQsXG4gICAgcGFyYW1zOiBSYW5nZURlY29yYXRpb25QYXJhbXNcbiAgKTogRGVjb3JhdGVkR3JpZENhY2hlS2V5IHtcbiAgICAvLyBNb250aCBrZXkgKGZyb20gYmFzZSBncmlkKVxuICAgIGNvbnN0IG1vbnRoS2V5ID0gYCR7Z3JpZC5tb250aC55ZWFyfS0ke2dyaWQubW9udGgubW9udGh9LSR7Z3JpZC53ZWVrU3RhcnR9LSR7Z3JpZC5sb2NhbGUgfHwgJyd9YDtcblxuICAgIC8vIERhdGUgSVNPcyAobnVsbCBpZiBub3QgcHJvdmlkZWQpXG4gICAgY29uc3Qgc3RhcnRJU08gPSBwYXJhbXMuc3RhcnQgPyB0aGlzLmFkYXB0ZXIudG9JU09EYXRlKHBhcmFtcy5zdGFydCkgOiAnbnVsbCc7XG4gICAgY29uc3QgZW5kSVNPID0gcGFyYW1zLmVuZCA/IHRoaXMuYWRhcHRlci50b0lTT0RhdGUocGFyYW1zLmVuZCkgOiAnbnVsbCc7XG4gICAgY29uc3QgbWluSVNPID0gcGFyYW1zLm1pbkRhdGUgPyB0aGlzLmFkYXB0ZXIudG9JU09EYXRlKHBhcmFtcy5taW5EYXRlKSA6ICdudWxsJztcbiAgICBjb25zdCBtYXhJU08gPSBwYXJhbXMubWF4RGF0ZSA/IHRoaXMuYWRhcHRlci50b0lTT0RhdGUocGFyYW1zLm1heERhdGUpIDogJ251bGwnO1xuICAgIGNvbnN0IGhvdmVySVNPID0gcGFyYW1zLmhvdmVyRGF0ZSB8fCAnbnVsbCc7XG5cbiAgICAvLyBEaXNhYmxlZCBkYXRlcyBzaWduYXR1cmVcbiAgICBjb25zdCBkaXNhYmxlZFNpZ25hdHVyZSA9IHRoaXMuYnVpbGREaXNhYmxlZFNpZ25hdHVyZShwYXJhbXMuZGlzYWJsZWREYXRlcyk7XG5cbiAgICAvLyBNdWx0aS1yYW5nZSBmbGFnIChhZmZlY3RzIGhvdmVyIGJlaGF2aW9yKVxuICAgIGNvbnN0IG11bHRpUmFuZ2VGbGFnID0gcGFyYW1zLm11bHRpUmFuZ2UgPyAnMScgOiAnMCc7XG4gICAgY29uc3Qgc2VsZWN0aW5nU3RhcnRGbGFnID0gcGFyYW1zLnNlbGVjdGluZ1N0YXJ0RGF0ZSA/ICcxJyA6ICcwJztcblxuICAgIC8vIEZ1bGwga2V5IChwaXBlLXNlcGFyYXRlZCBmb3IgcmVhZGFiaWxpdHkpXG4gICAgY29uc3QgZnVsbCA9IGAke21vbnRoS2V5fXwke3N0YXJ0SVNPfXwke2VuZElTT318JHttaW5JU099fCR7bWF4SVNPfXwke2hvdmVySVNPfXwke2Rpc2FibGVkU2lnbmF0dXJlfXwke211bHRpUmFuZ2VGbGFnfXwke3NlbGVjdGluZ1N0YXJ0RmxhZ31gO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vbnRoS2V5LFxuICAgICAgc3RhcnRJU08sXG4gICAgICBlbmRJU08sXG4gICAgICBtaW5JU08sXG4gICAgICBtYXhJU08sXG4gICAgICBob3ZlcklTTyxcbiAgICAgIGRpc2FibGVkU2lnbmF0dXJlLFxuICAgICAgZnVsbFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgc2lnbmF0dXJlIGZvciBkaXNhYmxlZCBkYXRlc1xuICAgKiBcbiAgICogU3RyYXRlZ2llczpcbiAgICogLSBudWxsL3VuZGVmaW5lZDogJ25vbmUnXG4gICAqIC0gRnVuY3Rpb246ICdmdW5jdGlvbicgKG5vdCBjYWNoZWFibGUpXG4gICAqIC0gQXJyYXk6IFNvcnRlZCBJU08gZGF0ZXMgam9pbmVkIHdpdGggY29tbWFzXG4gICAqIFxuICAgKiBAcGFyYW0gZGlzYWJsZWREYXRlcyBEaXNhYmxlZCBkYXRlcyBzcGVjaWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIFNpZ25hdHVyZSBzdHJpbmcgZm9yIGNhY2hlIGtleVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZERpc2FibGVkU2lnbmF0dXJlKFxuICAgIGRpc2FibGVkRGF0ZXM/OiBEYXRlW10gfCAoKGRhdGU6IERhdGUpID0+IGJvb2xlYW4pIHwgbnVsbFxuICApOiBzdHJpbmcge1xuICAgIGlmICghZGlzYWJsZWREYXRlcykgcmV0dXJuICdub25lJztcblxuICAgIGlmICh0eXBlb2YgZGlzYWJsZWREYXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGlzYWJsZWREYXRlcykpIHtcbiAgICAgIGlmIChkaXNhYmxlZERhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdub25lJztcblxuICAgICAgLy8gQ29udmVydCB0byBJU08gZGF0ZXMsIHNvcnQsIGpvaW5cbiAgICAgIGNvbnN0IGlzb0FycmF5ID0gZGlzYWJsZWREYXRlc1xuICAgICAgICAubWFwKGRhdGUgPT4gdGhpcy5hZGFwdGVyLnRvSVNPRGF0ZShkYXRlKSlcbiAgICAgICAgLnNvcnQoKTtcblxuICAgICAgcmV0dXJuIGlzb0FycmF5LmpvaW4oJywnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ25vbmUnO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjYWNoZWQgZ3JpZHNcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBjYWNoZSBzaXplXG4gICAqL1xuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBrZXkgaXMgY2FjaGVkXG4gICAqIFxuICAgKiBAcGFyYW0gZ3JpZCBCYXNlIGNhbGVuZGFyIGdyaWRcbiAgICogQHBhcmFtIHBhcmFtcyBEZWNvcmF0aW9uIHBhcmFtZXRlcnNcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGlzIGdyaWQrcGFyYW1zIGlzIGNhY2hlZFxuICAgKi9cbiAgaGFzKGdyaWQ6IENhbGVuZGFyR3JpZCwgcGFyYW1zOiBSYW5nZURlY29yYXRpb25QYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkS2V5KGdyaWQsIHBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuaGFzKGtleS5mdWxsKTtcbiAgfVxufVxuIl19
|
|
@@ -1917,6 +1917,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1917
1917
|
args: [DATE_ADAPTER]
|
|
1918
1918
|
}] }] });
|
|
1919
1919
|
|
|
1920
|
+
/**
|
|
1921
|
+
* Cache Configuration
|
|
1922
|
+
*
|
|
1923
|
+
* Centralized cache limits for memory safety.
|
|
1924
|
+
*
|
|
1925
|
+
* @module core/calendar-grid/cache.config
|
|
1926
|
+
* @version 3.9.2
|
|
1927
|
+
*/
|
|
1928
|
+
/**
|
|
1929
|
+
* Maximum cache entries before FIFO eviction
|
|
1930
|
+
*
|
|
1931
|
+
* Applied to both:
|
|
1932
|
+
* - CalendarGridCache: Raw month grids
|
|
1933
|
+
* - RangeHighlighterCache: Decorated grids
|
|
1934
|
+
*
|
|
1935
|
+
* Memory footprint:
|
|
1936
|
+
* - CalendarGrid (raw): ~10KB each
|
|
1937
|
+
* - DecoratedGrid: ~15KB each
|
|
1938
|
+
* - Total worst case: (10KB + 15KB) × 48 = ~1.2MB
|
|
1939
|
+
*
|
|
1940
|
+
* Coverage:
|
|
1941
|
+
* - 48 months = 4 years of navigation
|
|
1942
|
+
* - Sufficient for long-running sessions
|
|
1943
|
+
*
|
|
1944
|
+
* Critical for:
|
|
1945
|
+
* - ERP systems (invoice date selection)
|
|
1946
|
+
* - BI dashboards (date range filters)
|
|
1947
|
+
* - Hotel reservation systems (availability calendars)
|
|
1948
|
+
* - Point-of-sale systems (report generation)
|
|
1949
|
+
*
|
|
1950
|
+
* @constant
|
|
1951
|
+
* @since v3.9.2
|
|
1952
|
+
*/
|
|
1953
|
+
const MAX_CACHE_ENTRIES = 48;
|
|
1954
|
+
|
|
1920
1955
|
/**
|
|
1921
1956
|
* Calendar Grid Cache
|
|
1922
1957
|
*
|
|
@@ -1926,16 +1961,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1926
1961
|
* Strategy:
|
|
1927
1962
|
* - Key: year-month-weekStart-locale
|
|
1928
1963
|
* - LRU eviction (least recently used) when limit is reached
|
|
1929
|
-
* - Default limit:
|
|
1964
|
+
* - Default limit: 48 months (covers 2 years of navigation)
|
|
1930
1965
|
*
|
|
1931
1966
|
* Performance impact:
|
|
1932
1967
|
* - Eliminates ~90% of grid recalculations in typical usage
|
|
1933
1968
|
* - Memory footprint: ~10KB per cached month (negligible)
|
|
1969
|
+
*
|
|
1970
|
+
* Memory safety (v3.9.2):
|
|
1971
|
+
* - MAX_CACHE_ENTRIES prevents unbounded growth in long-running sessions
|
|
1972
|
+
* - Critical for: ERP, BI dashboards, hotel reservation systems
|
|
1973
|
+
* - FIFO eviction when limit exceeded
|
|
1934
1974
|
*/
|
|
1935
1975
|
class CalendarGridCache {
|
|
1936
1976
|
factory;
|
|
1937
1977
|
cache = new Map();
|
|
1938
|
-
maxSize =
|
|
1978
|
+
maxSize = MAX_CACHE_ENTRIES;
|
|
1939
1979
|
constructor(factory) {
|
|
1940
1980
|
this.factory = factory;
|
|
1941
1981
|
}
|
|
@@ -2205,7 +2245,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
2205
2245
|
* Eliminates redundant decoration computations when range/constraints don't change.
|
|
2206
2246
|
*
|
|
2207
2247
|
* @module core/calendar-grid/range-highlighter.cache
|
|
2208
|
-
* @version 3.
|
|
2248
|
+
* @version 3.9.2
|
|
2209
2249
|
*/
|
|
2210
2250
|
/**
|
|
2211
2251
|
* Range Highlighter Cache
|
|
@@ -2214,7 +2254,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
2214
2254
|
*
|
|
2215
2255
|
* Cache strategy:
|
|
2216
2256
|
* - LRU eviction (Map preserves insertion order)
|
|
2217
|
-
* - Max 48 entries (
|
|
2257
|
+
* - Max 48 entries (v3.9.2: Memory safety for long-running sessions)
|
|
2218
2258
|
* - Key: month + start + end + hover + disabled signature
|
|
2219
2259
|
*
|
|
2220
2260
|
* Performance:
|
|
@@ -2222,10 +2262,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
2222
2262
|
* - Cache miss: ~1ms (decoration + store)
|
|
2223
2263
|
* - Hit rate: Expected >80% in typical usage
|
|
2224
2264
|
*
|
|
2225
|
-
* Memory:
|
|
2226
|
-
* -
|
|
2227
|
-
* -
|
|
2228
|
-
* -
|
|
2265
|
+
* Memory safety (v3.9.2):
|
|
2266
|
+
* - MAX_CACHE_ENTRIES prevents unbounded growth
|
|
2267
|
+
* - Critical for: ERP, BI dashboards, hotel systems
|
|
2268
|
+
* - FIFO eviction when limit exceeded
|
|
2269
|
+
* - ~720KB max memory footprint
|
|
2229
2270
|
*
|
|
2230
2271
|
* Edge cases handled:
|
|
2231
2272
|
* - Function predicates: Not cacheable (recompute every time)
|
|
@@ -2249,7 +2290,7 @@ class RangeHighlighterCache {
|
|
|
2249
2290
|
highlighter;
|
|
2250
2291
|
adapter;
|
|
2251
2292
|
cache = new Map();
|
|
2252
|
-
maxSize =
|
|
2293
|
+
maxSize = MAX_CACHE_ENTRIES;
|
|
2253
2294
|
constructor(highlighter, adapter) {
|
|
2254
2295
|
this.highlighter = highlighter;
|
|
2255
2296
|
this.adapter = adapter;
|
|
@@ -2570,6 +2611,11 @@ function isVirtualWeeksEnabled(windowSize, totalWeeks) {
|
|
|
2570
2611
|
* - Render only visible weeks (configurable window)
|
|
2571
2612
|
* - ~50% reduction in DOM nodes with windowSize=3
|
|
2572
2613
|
*
|
|
2614
|
+
* v3.9.2: Cache Bounds (Memory Safety)
|
|
2615
|
+
* - MAX_CACHE_ENTRIES = 48 prevents unbounded growth
|
|
2616
|
+
* - FIFO eviction for long-running sessions
|
|
2617
|
+
* - Critical for ERP, BI, hotel systems
|
|
2618
|
+
*
|
|
2573
2619
|
* Usage:
|
|
2574
2620
|
* ```typescript
|
|
2575
2621
|
* constructor(
|
|
@@ -4441,5 +4487,5 @@ function providePresetPackage(packageName, presets) {
|
|
|
4441
4487
|
* Generated bundle index. Do not edit.
|
|
4442
4488
|
*/
|
|
4443
4489
|
|
|
4444
|
-
export { BUILT_IN_PRESETS, CalendarGridCache, CalendarGridFactory, CommonPresets, DATE_ADAPTER$1 as DATE_ADAPTER, DATE_CLOCK, DateAdapter, DualDateRangeStore, DualDatepickerComponent, LAST_14_DAYS_PRESET, LAST_30_DAYS_PRESET, LAST_60_DAYS_PRESET, LAST_7_DAYS_PRESET, LAST_90_DAYS_PRESET, LAST_MONTH_PRESET, LAST_QUARTER_PRESET, LAST_WEEK_PRESET, LAST_YEAR_PRESET, MONTH_TO_DATE_PRESET, NativeDateAdapter$1 as NativeDateAdapter, PresetEngine, PresetRegistry, QUARTER_TO_DATE_PRESET, RangeHighlighter, RangeHighlighterCache, SystemClock, THIS_MONTH_PRESET, THIS_QUARTER_PRESET, THIS_WEEK_PRESET, THIS_YEAR_PRESET, TODAY_PRESET, YEAR_TO_DATE_PRESET, YESTERDAY_PRESET, applyBounds, clampWeekStart, createPreset, formatISODate, getLastMonth, getLastNDays, getLastNMonths, getLastNYears, getLastQuarter, getLastWeek, getLastYear, getMonthToDate, getQuarterToDate, getThisMonth, getThisQuarter, getThisWeek, getThisYear, getToday, getVirtualWeekWindow, getVisibleWeeks, getYearToDate, getYesterday, isDateDisabled, isRangePresetPlugin, isVirtualWeeksEnabled, navigateWeekWindow, parseISODate, presetEngine, provideBuiltInPresets, provideCustomPresets, providePresetPackage, validateDateBounds, validateRangeBounds, validateRangeOrder };
|
|
4490
|
+
export { BUILT_IN_PRESETS, CalendarGridCache, CalendarGridFactory, CommonPresets, DATE_ADAPTER$1 as DATE_ADAPTER, DATE_CLOCK, DateAdapter, DualDateRangeStore, DualDatepickerComponent, LAST_14_DAYS_PRESET, LAST_30_DAYS_PRESET, LAST_60_DAYS_PRESET, LAST_7_DAYS_PRESET, LAST_90_DAYS_PRESET, LAST_MONTH_PRESET, LAST_QUARTER_PRESET, LAST_WEEK_PRESET, LAST_YEAR_PRESET, MAX_CACHE_ENTRIES, MONTH_TO_DATE_PRESET, NativeDateAdapter$1 as NativeDateAdapter, PresetEngine, PresetRegistry, QUARTER_TO_DATE_PRESET, RangeHighlighter, RangeHighlighterCache, SystemClock, THIS_MONTH_PRESET, THIS_QUARTER_PRESET, THIS_WEEK_PRESET, THIS_YEAR_PRESET, TODAY_PRESET, YEAR_TO_DATE_PRESET, YESTERDAY_PRESET, applyBounds, clampWeekStart, createPreset, formatISODate, getLastMonth, getLastNDays, getLastNMonths, getLastNYears, getLastQuarter, getLastWeek, getLastYear, getMonthToDate, getQuarterToDate, getThisMonth, getThisQuarter, getThisWeek, getThisYear, getToday, getVirtualWeekWindow, getVisibleWeeks, getYearToDate, getYesterday, isDateDisabled, isRangePresetPlugin, isVirtualWeeksEnabled, navigateWeekWindow, parseISODate, presetEngine, provideBuiltInPresets, provideCustomPresets, providePresetPackage, validateDateBounds, validateRangeBounds, validateRangeOrder };
|
|
4445
4491
|
//# sourceMappingURL=oneluiz-dual-datepicker.mjs.map
|