@kosdev-code/kos-ui-sdk 0.1.0-dev.5164 → 0.1.0-dev.5168
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/core/decorators/kos-container-aware.d.ts +49 -1
- package/core/core/decorators/kos-container-aware.d.ts.map +1 -1
- package/core/core/kos-container-model.d.ts +159 -0
- package/core/core/kos-container-model.d.ts.map +1 -1
- package/core/core/kos-data-container.d.ts +93 -1
- package/core/core/kos-data-container.d.ts.map +1 -1
- package/index.cjs +78 -78
- package/index.cjs.map +1 -1
- package/index.js +4774 -4418
- package/index.js.map +1 -1
- package/models/utils/openapi-index.d.ts +2 -2
- package/models/utils/services/kos/1.6.5/openapi.d.ts +3809 -0
- package/models/utils/services/kos/1.6.5/service.d.ts +120 -0
- package/models/utils/services/kos/1.6.5/service.d.ts.map +1 -0
- package/models/utils/services/kos/1.8.1/openapi.d.ts +4344 -0
- package/models/utils/services/kos/1.8.1/service.d.ts +120 -0
- package/models/utils/services/kos/1.8.1/service.d.ts.map +1 -0
- package/models/utils/services/vfs/1.6.5/openapi.d.ts +51 -0
- package/models/utils/services/vfs/1.6.5/service.d.ts +120 -0
- package/models/utils/services/vfs/1.6.5/service.d.ts.map +1 -0
- package/models/utils/services/vfs/1.8.1/openapi.d.ts +51 -0
- package/models/utils/services/vfs/1.8.1/service.d.ts +120 -0
- package/models/utils/services/vfs/1.8.1/service.d.ts.map +1 -0
- package/models/utils/services-index.d.ts +4 -0
- package/models/utils/services-index.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -60,7 +60,9 @@ export interface KosContainerAwareOptions<T extends IKosDataModel = IKosDataMode
|
|
|
60
60
|
* active: (device) => device.isOnline
|
|
61
61
|
* },
|
|
62
62
|
* parentId: "custom-parent", // Overrides automatic inference
|
|
63
|
-
* extensionId: "device-manager"
|
|
63
|
+
* extensionId: "device-manager",
|
|
64
|
+
* maxCapacity: 1000, // Safety net for unbounded growth
|
|
65
|
+
* evictionStrategy: "fifo"
|
|
64
66
|
* }
|
|
65
67
|
* })
|
|
66
68
|
* ```
|
|
@@ -92,6 +94,52 @@ export interface KosContainerAwareOptions<T extends IKosDataModel = IKosDataMode
|
|
|
92
94
|
parentId?: string;
|
|
93
95
|
/** Extension identifier for the container */
|
|
94
96
|
extensionId?: string;
|
|
97
|
+
/**
|
|
98
|
+
* SAFETY NET: Maximum number of models this container can hold.
|
|
99
|
+
* When exceeded, models are automatically evicted and destroyed based on evictionStrategy.
|
|
100
|
+
*
|
|
101
|
+
* **Primary use case**: Prevent memory overflow when cleanup handlers are missing or
|
|
102
|
+
* data becomes inconsistent. Set higher than normal usage to catch edge cases.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* containerOptions: {
|
|
107
|
+
* maxCapacity: 10000, // Safety net: expect ~100-1000 normally
|
|
108
|
+
* evictionStrategy: 'fifo'
|
|
109
|
+
* }
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
maxCapacity?: number;
|
|
113
|
+
/**
|
|
114
|
+
* Strategy for selecting which models to evict when maxCapacity is exceeded.
|
|
115
|
+
*
|
|
116
|
+
* - **fifo** (default): Remove oldest models first - best for event streams, logs
|
|
117
|
+
* - **lru**: Remove least recently accessed models - best for caches
|
|
118
|
+
* - **custom**: Use customEvictionFilter to determine eviction candidates
|
|
119
|
+
*
|
|
120
|
+
* @default 'fifo'
|
|
121
|
+
*/
|
|
122
|
+
evictionStrategy?: "fifo" | "lru" | "custom";
|
|
123
|
+
/**
|
|
124
|
+
* Number of models to evict when maxCapacity is exceeded.
|
|
125
|
+
* @default Math.max(10, Math.ceil(maxCapacity * 0.1))
|
|
126
|
+
*/
|
|
127
|
+
evictionBatchSize?: number;
|
|
128
|
+
/**
|
|
129
|
+
* Custom filter function for 'custom' eviction strategy.
|
|
130
|
+
* Should return models that are candidates for eviction.
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* customEvictionFilter: (models) => {
|
|
135
|
+
* return models.filter(m =>
|
|
136
|
+
* m.status === 'resolved' &&
|
|
137
|
+
* Date.now() - m.resolvedAt > 3600000
|
|
138
|
+
* );
|
|
139
|
+
* }
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
customEvictionFilter?: (models: T[]) => T[];
|
|
95
143
|
};
|
|
96
144
|
/**
|
|
97
145
|
* Custom name for the reactive models array getter.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kos-container-aware.d.ts","sourceRoot":"","sources":["../../../../../../../packages/sdk/kos-ui-sdk/src/core/core/decorators/kos-container-aware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACtC;;;;GAIG;AACH,MAAM,WAAW,wBAAwB,CACvC,CAAC,SAAS,aAAa,GAAG,aAAa;IAEvC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB
|
|
1
|
+
{"version":3,"file":"kos-container-aware.d.ts","sourceRoot":"","sources":["../../../../../../../packages/sdk/kos-ui-sdk/src/core/core/decorators/kos-container-aware.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,11 +28,92 @@ export interface IKosModelContainer<T extends IKosDataModel> extends IKosBaseCon
|
|
|
28
28
|
getIndexKeys: (indexName: string) => string[];
|
|
29
29
|
toJSON?: () => object;
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Eviction strategy for container capacity management
|
|
33
|
+
*
|
|
34
|
+
* - **fifo**: First-In-First-Out - removes oldest models first (default for event streams)
|
|
35
|
+
* - **lru**: Least Recently Used - removes models not accessed recently (good for caches)
|
|
36
|
+
* - **custom**: Uses customEvictionFilter function to determine which models to evict
|
|
37
|
+
*
|
|
38
|
+
* @category Container Capacity Management
|
|
39
|
+
* @see {@link ContainerOptions.maxCapacity}
|
|
40
|
+
* @see {@link ContainerOptions.evictionStrategy}
|
|
41
|
+
*/
|
|
42
|
+
export type EvictionStrategy = "fifo" | "lru" | "custom";
|
|
31
43
|
interface ContainerOptions<T extends IKosDataModel> {
|
|
32
44
|
sortKey?: keyof T;
|
|
33
45
|
indexMap?: Record<string, keyof T | IndexMapper<T>>;
|
|
34
46
|
parentId?: string;
|
|
35
47
|
extensionId?: string;
|
|
48
|
+
/**
|
|
49
|
+
* SAFETY NET: Maximum number of models this container can hold.
|
|
50
|
+
* When exceeded, models are automatically evicted and destroyed based on evictionStrategy.
|
|
51
|
+
*
|
|
52
|
+
* **Primary use case**: Prevent memory overflow when cleanup handlers are missing or
|
|
53
|
+
* data becomes inconsistent. Set higher than normal usage to catch edge cases.
|
|
54
|
+
*
|
|
55
|
+
* **Eviction is logged**: All automatic evictions are logged at WARNING level
|
|
56
|
+
* to aid in debugging and identifying data inconsistencies.
|
|
57
|
+
*
|
|
58
|
+
* @category Capacity Management
|
|
59
|
+
* @see {@link EvictionStrategy}
|
|
60
|
+
* @see {@link evictionBatchSize}
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* containerOptions: {
|
|
65
|
+
* maxCapacity: 10000, // Safety net: expect ~100-1000 normally
|
|
66
|
+
* evictionStrategy: 'fifo'
|
|
67
|
+
* }
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
maxCapacity?: number;
|
|
71
|
+
/**
|
|
72
|
+
* Strategy for selecting which models to evict when maxCapacity is exceeded.
|
|
73
|
+
*
|
|
74
|
+
* - **fifo** (default): Remove oldest models first - best for event streams, logs
|
|
75
|
+
* - **lru**: Remove least recently accessed models - best for caches
|
|
76
|
+
* - **custom**: Use customEvictionFilter to determine eviction candidates
|
|
77
|
+
*
|
|
78
|
+
* @category Capacity Management
|
|
79
|
+
* @see {@link EvictionStrategy}
|
|
80
|
+
* @see {@link maxCapacity}
|
|
81
|
+
* @see {@link customEvictionFilter}
|
|
82
|
+
*
|
|
83
|
+
* @default 'fifo'
|
|
84
|
+
*/
|
|
85
|
+
evictionStrategy?: EvictionStrategy;
|
|
86
|
+
/**
|
|
87
|
+
* Number of models to evict when maxCapacity is exceeded.
|
|
88
|
+
* Removing in batches prevents thrashing at the capacity boundary.
|
|
89
|
+
*
|
|
90
|
+
* @category Capacity Management
|
|
91
|
+
* @see {@link maxCapacity}
|
|
92
|
+
*
|
|
93
|
+
* @default Math.max(10, Math.ceil(maxCapacity * 0.1))
|
|
94
|
+
*/
|
|
95
|
+
evictionBatchSize?: number;
|
|
96
|
+
/**
|
|
97
|
+
* Custom filter function for 'custom' eviction strategy.
|
|
98
|
+
* Should return models that are candidates for eviction.
|
|
99
|
+
* The container will evict up to evictionBatchSize models from the returned array.
|
|
100
|
+
*
|
|
101
|
+
* @category Capacity Management
|
|
102
|
+
* @see {@link EvictionStrategy}
|
|
103
|
+
* @see {@link maxCapacity}
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* // Evict resolved troubles older than 1 hour
|
|
108
|
+
* customEvictionFilter: (models) => {
|
|
109
|
+
* return models.filter(m =>
|
|
110
|
+
* m.status === 'resolved' &&
|
|
111
|
+
* Date.now() - m.resolvedAt > 3600000
|
|
112
|
+
* );
|
|
113
|
+
* }
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
customEvictionFilter?: (models: T[]) => T[];
|
|
36
117
|
}
|
|
37
118
|
export declare class KosModelContainer<T extends IKosDataModel> implements IKosModelContainer<T> {
|
|
38
119
|
_data: Map<string, T>;
|
|
@@ -43,6 +124,12 @@ export declare class KosModelContainer<T extends IKosDataModel> implements IKosM
|
|
|
43
124
|
private _disposerMap;
|
|
44
125
|
private _parentId?;
|
|
45
126
|
idx: KosData<Record<string, Record<string, T[]>>>;
|
|
127
|
+
private _maxCapacity?;
|
|
128
|
+
private _evictionStrategy;
|
|
129
|
+
private _evictionBatchSize;
|
|
130
|
+
private _insertionOrder;
|
|
131
|
+
private _accessTimes?;
|
|
132
|
+
private _customEvictionFilter?;
|
|
46
133
|
constructor(options?: ContainerOptions<T>);
|
|
47
134
|
init(): void;
|
|
48
135
|
[Symbol.iterator](): IterableIterator<T>;
|
|
@@ -54,12 +141,84 @@ export declare class KosModelContainer<T extends IKosDataModel> implements IKosM
|
|
|
54
141
|
increment(): void;
|
|
55
142
|
addAll(models: T[]): void;
|
|
56
143
|
removeAll(ids: string[]): void;
|
|
144
|
+
/**
|
|
145
|
+
* Add a model to the container (Zone 2: Workflow orchestration)
|
|
146
|
+
*
|
|
147
|
+
* @param model - The model to add
|
|
148
|
+
* @param defer - If true, skip incrementing revision (for batch operations)
|
|
149
|
+
*/
|
|
57
150
|
addModel(model: T, defer?: boolean): void;
|
|
151
|
+
/**
|
|
152
|
+
* Persist model to container storage (Zone 3)
|
|
153
|
+
* @private
|
|
154
|
+
*/
|
|
155
|
+
private _persistModel;
|
|
156
|
+
/**
|
|
157
|
+
* Track model metadata for capacity management (Zone 3)
|
|
158
|
+
* @private
|
|
159
|
+
*/
|
|
160
|
+
private _trackModelMetadata;
|
|
161
|
+
/**
|
|
162
|
+
* Establish parent-child relationships (Zone 3)
|
|
163
|
+
* @private
|
|
164
|
+
*/
|
|
165
|
+
private _establishModelRelationships;
|
|
166
|
+
/**
|
|
167
|
+
* Enforce capacity limits and trigger eviction if needed (Zone 3)
|
|
168
|
+
* @private
|
|
169
|
+
*/
|
|
170
|
+
private _enforceCapacityLimits;
|
|
171
|
+
/**
|
|
172
|
+
* Configure MobX observers for model property changes (Zone 3)
|
|
173
|
+
* @private
|
|
174
|
+
*/
|
|
175
|
+
private _configureModelMonitoring;
|
|
58
176
|
removeModel(id: string, defer?: boolean): void;
|
|
59
177
|
updateModel(model: T): void;
|
|
60
178
|
getModel(id: string): T | undefined;
|
|
61
179
|
getIndexKeys(indexName: string): string[];
|
|
62
180
|
getIndexByKey(indexName: string, indexKey: string): T[];
|
|
181
|
+
/**
|
|
182
|
+
* SAFETY NET: Evict models when capacity is exceeded (Zone 2: Workflow orchestration)
|
|
183
|
+
* Logs all evictions at WARNING level for debugging.
|
|
184
|
+
* @private
|
|
185
|
+
*/
|
|
186
|
+
private _evictModels;
|
|
187
|
+
/**
|
|
188
|
+
* Log capacity exceeded warning (Zone 3)
|
|
189
|
+
* @private
|
|
190
|
+
*/
|
|
191
|
+
private _logCapacityWarning;
|
|
192
|
+
/**
|
|
193
|
+
* Select models for eviction based on strategy (Zone 3)
|
|
194
|
+
* @private
|
|
195
|
+
*/
|
|
196
|
+
private _selectModelsForEviction;
|
|
197
|
+
/**
|
|
198
|
+
* Select oldest models for FIFO eviction (Zone 3)
|
|
199
|
+
* @private
|
|
200
|
+
*/
|
|
201
|
+
private _selectFifoModels;
|
|
202
|
+
/**
|
|
203
|
+
* Select least recently used models for LRU eviction (Zone 3)
|
|
204
|
+
* @private
|
|
205
|
+
*/
|
|
206
|
+
private _selectLruModels;
|
|
207
|
+
/**
|
|
208
|
+
* Select models using custom filter for eviction (Zone 3)
|
|
209
|
+
* @private
|
|
210
|
+
*/
|
|
211
|
+
private _selectCustomModels;
|
|
212
|
+
/**
|
|
213
|
+
* Remove and destroy evicted models (Zone 3)
|
|
214
|
+
* @private
|
|
215
|
+
*/
|
|
216
|
+
private _removeEvictedModels;
|
|
217
|
+
/**
|
|
218
|
+
* Log eviction completion (Zone 3)
|
|
219
|
+
* @private
|
|
220
|
+
*/
|
|
221
|
+
private _logEvictionComplete;
|
|
63
222
|
clear(): Promise<void>;
|
|
64
223
|
filter<S extends any>(predicate: (value: any, index: number, array: any[]) => value is S, thisArg?: any): T[];
|
|
65
224
|
sort(compareFn?: ((a: any, b: any) => number) | undefined): T[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kos-container-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/sdk/kos-ui-sdk/src/core/core/kos-container-model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kos-container-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/sdk/kos-ui-sdk/src/core/core/kos-container-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IKosIdentifiable } from './types/model';
|
|
2
|
-
import { IKosBaseContainer } from './kos-container-model';
|
|
2
|
+
import { IKosBaseContainer, EvictionStrategy } from './kos-container-model';
|
|
3
3
|
import { IKosContainerIndex, IndexMapper } from './kos-container-index';
|
|
4
4
|
import { KosData } from '../util/observable-proxy-map';
|
|
5
5
|
|
|
@@ -12,6 +12,14 @@ export interface IKosDataContainer<T extends IKosIdentifiable> extends IKosBaseC
|
|
|
12
12
|
interface ContainerOptions<T extends IKosIdentifiable> {
|
|
13
13
|
sortKey?: keyof T;
|
|
14
14
|
indexMap?: Record<string, keyof T | IndexMapper<T>>;
|
|
15
|
+
/** SAFETY NET: Maximum capacity before eviction */
|
|
16
|
+
maxCapacity?: number;
|
|
17
|
+
/** Eviction strategy when maxCapacity is exceeded */
|
|
18
|
+
evictionStrategy?: EvictionStrategy;
|
|
19
|
+
/** Number of items to evict when capacity exceeded */
|
|
20
|
+
evictionBatchSize?: number;
|
|
21
|
+
/** Custom eviction filter for 'custom' strategy */
|
|
22
|
+
customEvictionFilter?: (models: T[]) => T[];
|
|
15
23
|
}
|
|
16
24
|
export declare class KosDataContainer<T extends IKosIdentifiable> implements IKosDataContainer<T> {
|
|
17
25
|
_data: Map<string, T>;
|
|
@@ -21,6 +29,12 @@ export declare class KosDataContainer<T extends IKosIdentifiable> implements IKo
|
|
|
21
29
|
private _optionsMap;
|
|
22
30
|
private _disposerMap;
|
|
23
31
|
idx: KosData<Record<string, Record<string, T[]>>>;
|
|
32
|
+
private _maxCapacity?;
|
|
33
|
+
private _evictionStrategy;
|
|
34
|
+
private _evictionBatchSize;
|
|
35
|
+
private _insertionOrder;
|
|
36
|
+
private _accessTimes?;
|
|
37
|
+
private _customEvictionFilter?;
|
|
24
38
|
constructor(options?: ContainerOptions<T>);
|
|
25
39
|
init(): void;
|
|
26
40
|
[Symbol.iterator](): IterableIterator<T>;
|
|
@@ -32,12 +46,90 @@ export declare class KosDataContainer<T extends IKosIdentifiable> implements IKo
|
|
|
32
46
|
sortFn(a: any, b: any): number;
|
|
33
47
|
get data(): T[];
|
|
34
48
|
increment(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Add a data object to the container (Zone 2: Workflow orchestration)
|
|
51
|
+
*
|
|
52
|
+
* @param model - The data object to add
|
|
53
|
+
* @param defer - If true, skip incrementing revision (for batch operations)
|
|
54
|
+
*/
|
|
35
55
|
addModel(model: T, defer?: boolean): void;
|
|
56
|
+
/**
|
|
57
|
+
* Ensure data is observable (Zone 3)
|
|
58
|
+
* @private
|
|
59
|
+
*/
|
|
60
|
+
private _ensureObservable;
|
|
61
|
+
/**
|
|
62
|
+
* Clean up existing disposer if present (Zone 3)
|
|
63
|
+
* @private
|
|
64
|
+
*/
|
|
65
|
+
private _cleanupExistingDisposer;
|
|
66
|
+
/**
|
|
67
|
+
* Persist data to container storage (Zone 3)
|
|
68
|
+
* @private
|
|
69
|
+
*/
|
|
70
|
+
private _persistData;
|
|
71
|
+
/**
|
|
72
|
+
* Track data metadata for capacity management (Zone 3)
|
|
73
|
+
* @private
|
|
74
|
+
*/
|
|
75
|
+
private _trackDataMetadata;
|
|
76
|
+
/**
|
|
77
|
+
* Enforce capacity limits and trigger eviction if needed (Zone 3)
|
|
78
|
+
* @private
|
|
79
|
+
*/
|
|
80
|
+
private _enforceCapacityLimits;
|
|
81
|
+
/**
|
|
82
|
+
* Configure MobX observers for data property changes (Zone 3)
|
|
83
|
+
* @private
|
|
84
|
+
*/
|
|
85
|
+
private _configureDataMonitoring;
|
|
36
86
|
removeModel(id: string): void;
|
|
37
87
|
updateModel(model: T): void;
|
|
38
88
|
getModel(id: string): T | undefined;
|
|
39
89
|
getIndexKeys(indexName: string): string[];
|
|
40
90
|
getIndexByKey(indexName: string, indexKey: string): T[];
|
|
91
|
+
/**
|
|
92
|
+
* SAFETY NET: Evict data models when capacity is exceeded (Zone 2: Workflow orchestration)
|
|
93
|
+
* Logs all evictions at WARNING level for debugging.
|
|
94
|
+
* Note: Data models are not destroyed (no lifecycle), only removed from container.
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
private _evictModels;
|
|
98
|
+
/**
|
|
99
|
+
* Log capacity exceeded warning for data container (Zone 3)
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
private _logDataCapacityWarning;
|
|
103
|
+
/**
|
|
104
|
+
* Select data for eviction based on strategy (Zone 3)
|
|
105
|
+
* @private
|
|
106
|
+
*/
|
|
107
|
+
private _selectDataForEviction;
|
|
108
|
+
/**
|
|
109
|
+
* Select oldest data IDs for FIFO eviction (Zone 3)
|
|
110
|
+
* @private
|
|
111
|
+
*/
|
|
112
|
+
private _selectFifoData;
|
|
113
|
+
/**
|
|
114
|
+
* Select least recently used data IDs for LRU eviction (Zone 3)
|
|
115
|
+
* @private
|
|
116
|
+
*/
|
|
117
|
+
private _selectLruData;
|
|
118
|
+
/**
|
|
119
|
+
* Select data using custom filter for eviction (Zone 3)
|
|
120
|
+
* @private
|
|
121
|
+
*/
|
|
122
|
+
private _selectCustomData;
|
|
123
|
+
/**
|
|
124
|
+
* Remove evicted data items (Zone 3)
|
|
125
|
+
* @private
|
|
126
|
+
*/
|
|
127
|
+
private _removeEvictedData;
|
|
128
|
+
/**
|
|
129
|
+
* Log eviction completion for data container (Zone 3)
|
|
130
|
+
* @private
|
|
131
|
+
*/
|
|
132
|
+
private _logDataEvictionComplete;
|
|
41
133
|
clear(): Promise<void>;
|
|
42
134
|
filter<S extends any>(predicate: (value: any, index: number, array: any[]) => value is S, thisArg?: any): T[];
|
|
43
135
|
sort(compareFn?: ((a: any, b: any) => number) | undefined): T[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kos-data-container.d.ts","sourceRoot":"","sources":["../../../../../../packages/sdk/kos-ui-sdk/src/core/core/kos-data-container.ts"],"names":[],"mappings":"AAQA,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EACL,kBAAkB,EAClB,WAAW,EAEZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,
|
|
1
|
+
{"version":3,"file":"kos-data-container.d.ts","sourceRoot":"","sources":["../../../../../../packages/sdk/kos-ui-sdk/src/core/core/kos-data-container.ts"],"names":[],"mappings":"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"}
|