@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.
@@ -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 (~1-2 years of decorated grids)
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
- * - ~15KB per decorated grid
23
- * - Max 48 grids = ~720KB
24
- * - Auto-eviction prevents leaks
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: 24 months (covers 1 year forward + 1 year back)
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 = 24;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZ3JpZC5jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL2NhbGVuZGFyLWdyaWQvY2FsZW5kYXItZ3JpZC5jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUszQyxNQUFNLE9BQU8saUJBQWlCO0lBSVI7SUFIWixLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFDL0IsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUV0QyxZQUFvQixPQUE0QjtRQUE1QixZQUFPLEdBQVAsT0FBTyxDQUFxQjtJQUFHLENBQUM7SUFFcEQ7Ozs7Ozs7T0FPRztJQUNILEdBQUcsQ0FBQyxTQUFlLEVBQUUsWUFBb0IsQ0FBQyxFQUFFLE1BQWU7UUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhELGNBQWM7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbkUsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxQixtQ0FBbUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssUUFBUSxDQUFDLFNBQWUsRUFBRSxTQUFpQixFQUFFLE1BQWU7UUFDbEUsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLENBQUMsU0FBZSxFQUFFLFlBQW9CLENBQUMsRUFBRSxNQUFlO1FBQ3pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7d0dBekVVLGlCQUFpQjs0R0FBakIsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENhbGVuZGFyIEdyaWQgQ2FjaGVcbiAqXG4gKiBMUlUgY2FjaGUgZm9yIGNhbGVuZGFyIG1vbnRoIGdyaWRzIHRvIGF2b2lkIHJlY29tcHV0aW5nIHRoZSBzYW1lIG1vbnRoIGdyaWRcbiAqIG11bHRpcGxlIHRpbWVzIHdoZW4gb25seSBkZWNvcmF0aW9ucyAoc2VsZWN0ZWQgZGF0ZXMsIGhvdmVyLCBldGMuKSBjaGFuZ2UuXG4gKlxuICogU3RyYXRlZ3k6XG4gKiAtIEtleTogeWVhci1tb250aC13ZWVrU3RhcnQtbG9jYWxlXG4gKiAtIExSVSBldmljdGlvbiAobGVhc3QgcmVjZW50bHkgdXNlZCkgd2hlbiBsaW1pdCBpcyByZWFjaGVkXG4gKiAtIERlZmF1bHQgbGltaXQ6IDI0IG1vbnRocyAoY292ZXJzIDEgeWVhciBmb3J3YXJkICsgMSB5ZWFyIGJhY2spXG4gKlxuICogUGVyZm9ybWFuY2UgaW1wYWN0OlxuICogLSBFbGltaW5hdGVzIH45MCUgb2YgZ3JpZCByZWNhbGN1bGF0aW9ucyBpbiB0eXBpY2FsIHVzYWdlXG4gKiAtIE1lbW9yeSBmb290cHJpbnQ6IH4xMEtCIHBlciBjYWNoZWQgbW9udGggKG5lZ2xpZ2libGUpXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FsZW5kYXJHcmlkRmFjdG9yeSB9IGZyb20gJy4vY2FsZW5kYXItZ3JpZC5mYWN0b3J5JztcbmltcG9ydCB7IENhbGVuZGFyR3JpZCwgQ2FsZW5kYXJHcmlkQ2FjaGVLZXkgfSBmcm9tICcuL2NhbGVuZGFyLWdyaWQudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyR3JpZENhY2hlIHtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDYWxlbmRhckdyaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4U2l6ZTogbnVtYmVyID0gMjQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYWN0b3J5OiBDYWxlbmRhckdyaWRGYWN0b3J5KSB7fVxuXG4gIC8qKlxuICAgKiBHZXQgb3IgY3JlYXRlIGEgY2FsZW5kYXIgZ3JpZFxuICAgKlxuICAgKiBAcGFyYW0gbW9udGhEYXRlIC0gQW55IGRhdGUgd2l0aGluIHRoZSB0YXJnZXQgbW9udGhcbiAgICogQHBhcmFtIHdlZWtTdGFydCAtIEZpcnN0IGRheSBvZiB3ZWVrICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCBldGMuKVxuICAgKiBAcGFyYW0gbG9jYWxlIC0gTG9jYWxlIGlkZW50aWZpZXIgKG9wdGlvbmFsKVxuICAgKiBAcmV0dXJucyBDYWxlbmRhckdyaWQgLSBjYWNoZWQgb3IgbmV3bHkgY3JlYXRlZFxuICAgKi9cbiAgZ2V0KG1vbnRoRGF0ZTogRGF0ZSwgd2Vla1N0YXJ0OiBudW1iZXIgPSAwLCBsb2NhbGU/OiBzdHJpbmcpOiBDYWxlbmRhckdyaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRLZXkobW9udGhEYXRlLCB3ZWVrU3RhcnQsIGxvY2FsZSk7XG5cbiAgICAvLyBDaGVjayBjYWNoZVxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGUuZ2V0KGtleSk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgLy8gTW92ZSB0byBlbmQgKExSVSlcbiAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICB0aGlzLmNhY2hlLnNldChrZXksIGNhY2hlZCk7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIG5ldyBncmlkXG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuZmFjdG9yeS5jcmVhdGVHcmlkKG1vbnRoRGF0ZSwgd2Vla1N0YXJ0LCBsb2NhbGUpO1xuXG4gICAgLy8gU3RvcmUgaW4gY2FjaGVcbiAgICB0aGlzLmNhY2hlLnNldChrZXksIGdyaWQpO1xuXG4gICAgLy8gRXZpY3Qgb2xkZXN0IGlmIG92ZXIgbGltaXQgKExSVSlcbiAgICBpZiAodGhpcy5jYWNoZS5zaXplID4gdGhpcy5tYXhTaXplKSB7XG4gICAgICBjb25zdCBmaXJzdEtleSA9IHRoaXMuY2FjaGUua2V5cygpLm5leHQoKS52YWx1ZTtcbiAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGZpcnN0S2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBjYWNoZSBrZXkgZnJvbSBtb250aCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEZvcm1hdDogXCJ5ZWFyLW1vbnRoLXdlZWtTdGFydC1sb2NhbGVcIlxuICAgKiBFeGFtcGxlOiBcIjIwMjYtMS0wLWVuXCIgKEZlYiAyMDI2LCBTdW5kYXkgc3RhcnQsIEVuZ2xpc2gpXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkS2V5KG1vbnRoRGF0ZTogRGF0ZSwgd2Vla1N0YXJ0OiBudW1iZXIsIGxvY2FsZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgeWVhciA9IG1vbnRoRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IG1vbnRoID0gbW9udGhEYXRlLmdldE1vbnRoKCk7XG4gICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7d2Vla1N0YXJ0fSR7bG9jYWxlID8gJy0nICsgbG9jYWxlIDogJyd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBlbnRpcmUgY2FjaGUgKGZvciB0ZXN0aW5nIG9yIG1hbnVhbCByZXNldClcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgc2l6ZSAoZm9yIGRlYnVnZ2luZy90ZXN0aW5nKVxuICAgKi9cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBzcGVjaWZpYyBtb250aCBpcyBjYWNoZWRcbiAgICovXG4gIGhhcyhtb250aERhdGU6IERhdGUsIHdlZWtTdGFydDogbnVtYmVyID0gMCwgbG9jYWxlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5idWlsZEtleShtb250aERhdGUsIHdlZWtTdGFydCwgbG9jYWxlKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTtcbiAgfVxufVxuIl19
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9jYWxlbmRhci1ncmlkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlDRztBQUVILGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FsZW5kYXIgR3JpZCBNb2R1bGVcbiAqXG4gKiBQZXJmb3JtYW5jZS1vcHRpbWl6ZWQgY2FsZW5kYXIgbW9udGggZ3JpZCBnZW5lcmF0aW9uIHdpdGggbWVtb2l6YXRpb24uXG4gKlxuICogdjMuNy4wOiBHcmlkIFN0cnVjdHVyZSBDYWNoZVxuICogLSBDYWxlbmRhckdyaWRGYWN0b3J5IGZvciBkZXRlcm1pbmlzdGljIDQyLWNlbGwgZ3JpZHNcbiAqIC0gQ2FsZW5kYXJHcmlkQ2FjaGUgd2l0aCBMUlUgKDI0IG1vbnRocylcbiAqIFxuICogdjMuOC4wOiBSYW5nZSBIaWdobGlnaHQgQ2FjaGVcbiAqIC0gUmFuZ2VIaWdobGlnaHRlciBmb3IgZGVjb3JhdGlvbiBsb2dpY1xuICogLSBSYW5nZUhpZ2hsaWdodGVyQ2FjaGUgd2l0aCBMUlUgKDQ4IGdyaWRzKVxuICogLSBTZXBhcmF0ZXMgZ3JpZCBzdHJ1Y3R1cmUgZnJvbSBkZWNvcmF0aW9uc1xuICogXG4gKiB2My45LjA6IFZpcnR1YWwgV2Vla3MgKFdpbmRvd2VkIFJlbmRlcmluZylcbiAqIC0gVmlydHVhbC13ZWVrcyBsb2dpYyBmb3IgcmVkdWNlZCBET00gY29tcGxleGl0eVxuICogLSBSZW5kZXIgb25seSB2aXNpYmxlIHdlZWtzIChjb25maWd1cmFibGUgd2luZG93KVxuICogLSB+NTAlIHJlZHVjdGlvbiBpbiBET00gbm9kZXMgd2l0aCB3aW5kb3dTaXplPTNcbiAqXG4gKiBVc2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0cnVjdG9yKFxuICogICBwcml2YXRlIGdyaWRDYWNoZTogQ2FsZW5kYXJHcmlkQ2FjaGUsXG4gKiAgIHByaXZhdGUgaGlnaGxpZ2h0ZXJDYWNoZTogUmFuZ2VIaWdobGlnaHRlckNhY2hlXG4gKiApIHt9XG4gKlxuICogY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZENhY2hlLmdldChtb250aERhdGUsIHdlZWtTdGFydCk7XG4gKiBjb25zdCBkZWNvcmF0ZWQgPSB0aGlzLmhpZ2hsaWdodGVyQ2FjaGUuZ2V0KGdyaWQsIHtcbiAqICAgc3RhcnQsIGVuZCwgaG92ZXJEYXRlLCBkaXNhYmxlZERhdGVzXG4gKiB9KTtcbiAqIFxuICogLy8gT3B0aW9uYWw6IFdpbmRvd2VkIHJlbmRlcmluZyAodjMuOS4wKylcbiAqIGNvbnN0IHdpbmRvd1NpemUgPSAzOyAvLyBSZW5kZXIgb25seSAzIHdlZWtzXG4gKiBjb25zdCB2aXNpYmxlV2Vla3MgPSBnZXRWaXNpYmxlV2Vla3MoXG4gKiAgIGRlY29yYXRlZC53ZWVrcywgXG4gKiAgIHdlZWtTdGFydEluZGV4LCBcbiAqICAgd2luZG93U2l6ZVxuICogKTtcbiAqIC8vIGRlY29yYXRlZC5jZWxsc1swXS5pc28gPT4gJzIwMjYtMDItMDEnXG4gKiAvLyBkZWNvcmF0ZWQuY2VsbHNbMF0uaXNJblJhbmdlID0+IHRydWVcbiAqIGBgYFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vY2FsZW5kYXItZ3JpZC50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NhbGVuZGFyLWdyaWQuZmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL2NhbGVuZGFyLWdyaWQuY2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9yYW5nZS1oaWdobGlnaHRlci50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3JhbmdlLWhpZ2hsaWdodGVyJztcbmV4cG9ydCAqIGZyb20gJy4vcmFuZ2UtaGlnaGxpZ2h0ZXIuY2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi92aXJ0dWFsLXdlZWtzLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdmlydHVhbC13ZWVrcy5sb2dpYyc7XG4iXX0=
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.0
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 (~1-2 years of decorated grids)
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
- * - ~15KB per decorated grid
31
- * - Max 48 grids = ~720KB
32
- * - Auto-eviction prevents leaks
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 = 48; // ~1-2 years of decorated grids
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: 24 months (covers 1 year forward + 1 year back)
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 = 24;
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.8.0
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 (~1-2 years of decorated grids)
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
- * - ~15KB per decorated grid
2227
- * - Max 48 grids = ~720KB
2228
- * - Auto-eviction prevents leaks
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 = 48; // ~1-2 years of decorated grids
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