@katlux/providers 0.1.1-alpha.100 → 0.1.1-alpha.102
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/dist/index.cjs +1800 -984
- package/dist/index.d.cts +246 -128
- package/dist/index.d.mts +246 -128
- package/dist/index.d.ts +246 -128
- package/dist/index.mjs +1756 -943
- package/package.json +1 -20
- package/dist/nuxtAppCompat.cjs +0 -35
- package/dist/nuxtAppCompat.d.cts +0 -21
- package/dist/nuxtAppCompat.d.mts +0 -21
- package/dist/nuxtAppCompat.d.ts +0 -21
- package/dist/nuxtAppCompat.mjs +0 -27
- package/dist/nuxtAppCompat.server.cjs +0 -45
- package/dist/nuxtAppCompat.server.d.cts +0 -21
- package/dist/nuxtAppCompat.server.d.mts +0 -21
- package/dist/nuxtAppCompat.server.d.ts +0 -21
- package/dist/nuxtAppCompat.server.mjs +0 -37
- package/dist/shared/providers.C8C1HrDy.mjs +0 -228
- package/dist/shared/providers.CxZeMH3Y.cjs +0 -241
package/dist/index.d.cts
CHANGED
|
@@ -47,7 +47,8 @@ declare enum EDataFilterOperator {
|
|
|
47
47
|
}
|
|
48
48
|
declare enum ECacheStrategy {
|
|
49
49
|
Application = "Application",
|
|
50
|
-
|
|
50
|
+
ServerSession = "ServerSession",
|
|
51
|
+
BrowserSession = "BrowserSession",
|
|
51
52
|
Memory = "Memory",
|
|
52
53
|
LocalStorage = "LocalStorage",
|
|
53
54
|
IndexedDB = "IndexedDB",
|
|
@@ -69,14 +70,13 @@ interface IRequestOptions {
|
|
|
69
70
|
query?: Record<string, any>;
|
|
70
71
|
deduplicate?: boolean;
|
|
71
72
|
context?: any;
|
|
72
|
-
/** @deprecated Use `context` instead */
|
|
73
|
-
nuxtApp?: any;
|
|
74
73
|
disableCache?: boolean;
|
|
75
74
|
queue?: boolean;
|
|
76
75
|
queueLabel?: string;
|
|
77
76
|
label?: string;
|
|
78
77
|
tags?: string[];
|
|
79
78
|
signal?: AbortSignal;
|
|
79
|
+
_generation?: number;
|
|
80
80
|
}
|
|
81
81
|
/** Queue persistence backend with automatic fallback: IndexedDB → LocalStorage → Memory */
|
|
82
82
|
declare enum EQueueStorage {
|
|
@@ -122,19 +122,20 @@ type TDataRow = {
|
|
|
122
122
|
interface IDataFilter {
|
|
123
123
|
operator: EDataFilterOperator;
|
|
124
124
|
field: TDataRow | IDataFilter[];
|
|
125
|
-
active:
|
|
125
|
+
active: boolean;
|
|
126
126
|
}
|
|
127
127
|
interface IDataSort {
|
|
128
128
|
field: string;
|
|
129
129
|
direction: 'asc' | 'desc';
|
|
130
130
|
}
|
|
131
|
-
interface IDataResult {
|
|
131
|
+
interface IDataResult<TRow = TDataRow> {
|
|
132
132
|
rowCount: number;
|
|
133
|
-
rows:
|
|
133
|
+
rows: TRow[];
|
|
134
134
|
}
|
|
135
|
-
type TPageDataHandler = (currentPage: number, pageSize: number, filter: IDataFilter, sortList: IDataSort[], options?: {
|
|
135
|
+
type TPageDataHandler<TRow = TDataRow> = (currentPage: number, pageSize: number, filter: IDataFilter, sortList: IDataSort[], options?: {
|
|
136
136
|
disableCache?: boolean;
|
|
137
|
-
|
|
137
|
+
signal?: AbortSignal;
|
|
138
|
+
}) => IDataResult<TRow> | Promise<IDataResult<TRow>>;
|
|
138
139
|
interface IDataProviderOptions {
|
|
139
140
|
idKey?: string;
|
|
140
141
|
filter?: IDataFilter;
|
|
@@ -147,29 +148,56 @@ interface IDataProviderOptions {
|
|
|
147
148
|
cacheLifetime?: number;
|
|
148
149
|
deduplicate?: boolean;
|
|
149
150
|
context?: any;
|
|
150
|
-
|
|
151
|
-
nuxtApp?: any;
|
|
151
|
+
contextKey?: string;
|
|
152
152
|
urlPageParam?: string;
|
|
153
153
|
refreshOnMutation?: boolean;
|
|
154
|
+
filterDebounce?: number;
|
|
155
|
+
sortDebounce?: number;
|
|
154
156
|
}
|
|
155
157
|
|
|
156
|
-
interface ITreeNode {
|
|
157
|
-
data:
|
|
158
|
+
interface ITreeNode<TRow = TDataRow> {
|
|
159
|
+
data: TRow;
|
|
158
160
|
id: string | number;
|
|
159
161
|
parentId: string | number | null;
|
|
160
162
|
depth: number;
|
|
161
163
|
hasChildren: boolean;
|
|
162
164
|
isExpanded: boolean;
|
|
163
165
|
}
|
|
164
|
-
interface ITreeNodeStatic {
|
|
165
|
-
data:
|
|
166
|
+
interface ITreeNodeStatic<TRow = TDataRow> {
|
|
167
|
+
data: TRow;
|
|
166
168
|
id: string | number;
|
|
167
169
|
parentId: string | number | null;
|
|
168
170
|
depth: number;
|
|
169
171
|
hasChildren: boolean;
|
|
170
172
|
childIds?: (string | number)[];
|
|
171
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* A row enriched with tree metadata by a tree data provider
|
|
176
|
+
*/
|
|
177
|
+
type TTreeRow<TRow = TDataRow> = TRow & {
|
|
178
|
+
id?: string | number;
|
|
179
|
+
__treeNode?: ITreeNode<TRow>;
|
|
180
|
+
depth?: number;
|
|
181
|
+
hasChildren?: boolean;
|
|
182
|
+
isExpanded?: boolean;
|
|
183
|
+
parentId?: string | number | null;
|
|
184
|
+
};
|
|
172
185
|
type TreePaginationMode = 'all' | 'root';
|
|
186
|
+
/**
|
|
187
|
+
* Interface describing a DataProvider with hierarchical tree capabilities
|
|
188
|
+
*/
|
|
189
|
+
interface ITreeDataProvider<TRow = TDataRow> {
|
|
190
|
+
toggleNode(id: string | number): void;
|
|
191
|
+
expandedNodes: Set<string | number> | {
|
|
192
|
+
value: Set<string | number>;
|
|
193
|
+
};
|
|
194
|
+
parentKey?: string;
|
|
195
|
+
expandedByDefault?: boolean;
|
|
196
|
+
paginateBy?: TreePaginationMode;
|
|
197
|
+
collapseAll?(): void;
|
|
198
|
+
expandAll?(): void;
|
|
199
|
+
isExpanded?(id: string | number): boolean;
|
|
200
|
+
}
|
|
173
201
|
interface ITreeDataProviderOptions extends IDataProviderOptions {
|
|
174
202
|
parentKey?: string;
|
|
175
203
|
idKey?: string;
|
|
@@ -180,7 +208,7 @@ interface ITreeDataProviderOptions extends IDataProviderOptions {
|
|
|
180
208
|
* Tree-specific page data handler that includes tree parameters
|
|
181
209
|
* Server handles tree building, visibility, and pagination
|
|
182
210
|
*/
|
|
183
|
-
type TTreePageDataHandler = (currentPage: number, pageSize: number, filter: IDataFilter, sortList: IDataSort[], treeParams: {
|
|
211
|
+
type TTreePageDataHandler<TRow = TDataRow> = (currentPage: number, pageSize: number, filter: IDataFilter, sortList: IDataSort[], treeParams: {
|
|
184
212
|
expandedNodes: (string | number)[] | Set<string | number>;
|
|
185
213
|
parentKey: string;
|
|
186
214
|
idKey: string;
|
|
@@ -188,7 +216,7 @@ type TTreePageDataHandler = (currentPage: number, pageSize: number, filter: IDat
|
|
|
188
216
|
expandedByDefault: boolean;
|
|
189
217
|
}, options?: {
|
|
190
218
|
disableCache?: boolean;
|
|
191
|
-
}) => IDataResult | Promise<IDataResult
|
|
219
|
+
}) => IDataResult<TRow> | Promise<IDataResult<TRow>>;
|
|
192
220
|
interface KProductItemData {
|
|
193
221
|
id: string | number;
|
|
194
222
|
title: string;
|
|
@@ -205,21 +233,31 @@ interface KProductRowAction {
|
|
|
205
233
|
color?: 'primary' | 'danger' | 'success' | 'warning' | 'info' | 'light' | 'dark' | 'default';
|
|
206
234
|
}
|
|
207
235
|
|
|
208
|
-
declare abstract class ADataProvider {
|
|
236
|
+
declare abstract class ADataProvider<TRow = TDataRow> {
|
|
209
237
|
idKey: string;
|
|
210
|
-
pageData:
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
238
|
+
pageData: TRow[];
|
|
239
|
+
protected _rowCount: number;
|
|
240
|
+
get rowCount(): number;
|
|
241
|
+
set rowCount(val: number);
|
|
242
|
+
protected _loading: boolean;
|
|
243
|
+
get loading(): boolean;
|
|
244
|
+
set loading(val: boolean);
|
|
245
|
+
protected _initialLoad: boolean;
|
|
246
|
+
get initialLoad(): boolean;
|
|
247
|
+
set initialLoad(val: boolean);
|
|
248
|
+
protected _error: any;
|
|
249
|
+
get error(): any;
|
|
250
|
+
set error(val: any);
|
|
215
251
|
SSR: boolean;
|
|
216
252
|
deduplicate: boolean;
|
|
217
253
|
context: any;
|
|
218
|
-
get nuxtApp(): any;
|
|
219
|
-
set nuxtApp(val: any);
|
|
220
254
|
urlPageParam: string;
|
|
221
|
-
|
|
222
|
-
|
|
255
|
+
protected _selectedRows: TRow[];
|
|
256
|
+
get selectedRows(): TRow[];
|
|
257
|
+
set selectedRows(val: TRow[]);
|
|
258
|
+
protected _selectAll: boolean;
|
|
259
|
+
get selectAll(): boolean;
|
|
260
|
+
set selectAll(val: boolean);
|
|
223
261
|
protected _currentPage: number;
|
|
224
262
|
protected _pageSize: number;
|
|
225
263
|
protected _filter: IDataFilter | null;
|
|
@@ -234,11 +272,19 @@ declare abstract class ADataProvider {
|
|
|
234
272
|
set sortList(s: IDataSort[]);
|
|
235
273
|
private _listeners;
|
|
236
274
|
private _debouncedFilterLoad;
|
|
275
|
+
private _debouncedSortLoad;
|
|
237
276
|
constructor(options?: IDataProviderOptions);
|
|
277
|
+
private _batchDepth;
|
|
278
|
+
private _pendingNotify;
|
|
279
|
+
private _isNotifying;
|
|
280
|
+
/**
|
|
281
|
+
* Batches multiple state updates so notify() fires exactly once upon completion.
|
|
282
|
+
*/
|
|
283
|
+
batchUpdates<R>(fn: () => R): R;
|
|
238
284
|
subscribe(listener: TDataProviderListener<this>): TUnsubscribe;
|
|
239
285
|
notify(): void;
|
|
240
286
|
getState(): {
|
|
241
|
-
pageData:
|
|
287
|
+
pageData: TRow[];
|
|
242
288
|
rowCount: number;
|
|
243
289
|
currentPage: number;
|
|
244
290
|
pageSize: number;
|
|
@@ -247,27 +293,40 @@ declare abstract class ADataProvider {
|
|
|
247
293
|
error: any;
|
|
248
294
|
filter: IDataFilter | null;
|
|
249
295
|
sortList: IDataSort[];
|
|
250
|
-
selectedRows:
|
|
296
|
+
selectedRows: TRow[];
|
|
251
297
|
selectAll: boolean;
|
|
252
298
|
};
|
|
253
|
-
setFilter(filter: IDataFilter | null): void;
|
|
254
|
-
setSortList(sortList: IDataSort[]): void;
|
|
299
|
+
setFilter(filter: IDataFilter | null, immediate?: boolean): void;
|
|
300
|
+
setSortList(sortList: IDataSort[], immediate?: boolean): void;
|
|
255
301
|
setCurrentPage(currentPage: number): void;
|
|
256
302
|
setPageSize(pageSize: number): void;
|
|
257
|
-
setSelectedRows(rows:
|
|
303
|
+
setSelectedRows(rows: TRow[]): void;
|
|
258
304
|
setSelectAll(val: boolean): void;
|
|
259
305
|
abstract loadPageData(options?: {
|
|
260
306
|
disableCache?: boolean;
|
|
261
307
|
signal?: AbortSignal;
|
|
262
308
|
}): void | Promise<void>;
|
|
263
309
|
refresh(hardRefresh?: boolean): Promise<void>;
|
|
310
|
+
cancelPending(): void;
|
|
264
311
|
}
|
|
265
312
|
|
|
266
|
-
declare class CFlatClientDataProvider extends ADataProvider {
|
|
267
|
-
|
|
268
|
-
filteredData:
|
|
313
|
+
declare class CFlatClientDataProvider<TRow = TDataRow> extends ADataProvider<TRow> {
|
|
314
|
+
private _allData;
|
|
315
|
+
filteredData: TRow[];
|
|
316
|
+
private _rowMap;
|
|
317
|
+
private _filterDirty;
|
|
318
|
+
private _sortDirty;
|
|
269
319
|
constructor(options?: IDataProviderOptions);
|
|
270
|
-
|
|
320
|
+
get allData(): TRow[];
|
|
321
|
+
set allData(data: TRow[]);
|
|
322
|
+
get rowMap(): readonly TRow[];
|
|
323
|
+
setData(data: TRow[]): void;
|
|
324
|
+
setFilter(filter: IDataFilter | null, immediate?: boolean): void;
|
|
325
|
+
setSortList(sortList: IDataSort[], immediate?: boolean): void;
|
|
326
|
+
/**
|
|
327
|
+
* Explicitly rebuilds the reference map array if row properties inside allData were mutated in-place.
|
|
328
|
+
*/
|
|
329
|
+
updateMap(): void;
|
|
271
330
|
refreshData(options?: {
|
|
272
331
|
disableCache?: boolean;
|
|
273
332
|
}): Promise<void>;
|
|
@@ -277,12 +336,12 @@ declare class CFlatClientDataProvider extends ADataProvider {
|
|
|
277
336
|
|
|
278
337
|
declare abstract class ACacheProvider {
|
|
279
338
|
constructor();
|
|
280
|
-
abstract getKeyList(
|
|
281
|
-
abstract get<T>(key: string,
|
|
282
|
-
abstract set<T>(key: string, data: T, lifetime: number,
|
|
283
|
-
abstract remove(key: string,
|
|
284
|
-
abstract removeByPrefix(prefix: string,
|
|
285
|
-
abstract getRemainingTime(key: string,
|
|
339
|
+
abstract getKeyList(context?: any): Array<string> | Promise<Array<string>>;
|
|
340
|
+
abstract get<T>(key: string, context?: any): Promise<T | null>;
|
|
341
|
+
abstract set<T>(key: string, data: T, lifetime: number, context?: any): Promise<void>;
|
|
342
|
+
abstract remove(key: string, context?: any): Promise<void>;
|
|
343
|
+
abstract removeByPrefix(prefix: string, context?: any): Promise<void>;
|
|
344
|
+
abstract getRemainingTime(key: string, context?: any): Promise<number | null>;
|
|
286
345
|
abstract cleanupExpired(): Promise<void>;
|
|
287
346
|
}
|
|
288
347
|
|
|
@@ -306,12 +365,16 @@ declare class RequestProvider {
|
|
|
306
365
|
setCacheProvider(provider?: ACacheProvider | ECacheStrategy): void;
|
|
307
366
|
setCacheLifetime(lifetime: number): void;
|
|
308
367
|
setDeduplicate(deduplicate: boolean): void;
|
|
309
|
-
onDataReceived(callback: (data: any) => void): void;
|
|
368
|
+
onDataReceived(callback: (data: any, generation?: number) => void): void;
|
|
369
|
+
private invokeDataReceivedCallback;
|
|
310
370
|
hasLastUrl(): boolean;
|
|
311
371
|
refresh(hardRefresh?: boolean): Promise<any>;
|
|
372
|
+
private resolveContext;
|
|
373
|
+
private getInFlightMap;
|
|
312
374
|
private getUniqueKey;
|
|
313
375
|
registerRequest<T>(url: string, options?: IRequestOptions): Promise<T>;
|
|
314
376
|
static executeAll(): void;
|
|
377
|
+
private isSameOriginUrl;
|
|
315
378
|
request<T>(url: string, options?: IRequestOptions): Promise<T>;
|
|
316
379
|
}
|
|
317
380
|
|
|
@@ -328,7 +391,7 @@ declare abstract class AAPIDataProvider {
|
|
|
328
391
|
abstract delete(items: any[]): Promise<void>;
|
|
329
392
|
}
|
|
330
393
|
|
|
331
|
-
declare class CAPIFlatClientDataProvider extends CFlatClientDataProvider implements AAPIDataProvider {
|
|
394
|
+
declare class CAPIFlatClientDataProvider<TRow = TDataRow> extends CFlatClientDataProvider<TRow> implements AAPIDataProvider {
|
|
332
395
|
apiUrl: string;
|
|
333
396
|
contextKey: string;
|
|
334
397
|
requestProvider: RequestProvider;
|
|
@@ -337,25 +400,25 @@ declare class CAPIFlatClientDataProvider extends CFlatClientDataProvider impleme
|
|
|
337
400
|
refreshOnMutation: boolean | undefined;
|
|
338
401
|
constructor(options?: IDataProviderOptions);
|
|
339
402
|
setContextKey(key: string): void;
|
|
340
|
-
|
|
403
|
+
setCacheStrategy(strategy: ECacheStrategy): void;
|
|
404
|
+
setCacheLifetime(lifetime: number): void;
|
|
341
405
|
refreshData(options?: {
|
|
342
406
|
disableCache?: boolean;
|
|
343
407
|
}): Promise<void>;
|
|
344
|
-
private _initialFetch;
|
|
345
408
|
setAPIUrl(url: string): Promise<void>;
|
|
346
409
|
create(item: any): Promise<void>;
|
|
347
410
|
update(item: any): Promise<void>;
|
|
348
411
|
delete(items: any[]): Promise<void>;
|
|
349
412
|
}
|
|
350
413
|
|
|
351
|
-
declare class CFlatServerDataProvider extends ADataProvider {
|
|
352
|
-
pageDataHandler: TPageDataHandler
|
|
414
|
+
declare class CFlatServerDataProvider<TRow = TDataRow> extends ADataProvider<TRow> {
|
|
415
|
+
pageDataHandler: TPageDataHandler<TRow>;
|
|
353
416
|
contextKey: string;
|
|
354
417
|
private latestRequestId;
|
|
355
418
|
private abortController;
|
|
356
419
|
constructor(options?: IDataProviderOptions);
|
|
357
420
|
setContextKey(key: string): void;
|
|
358
|
-
setPageDataHandler(handler: TPageDataHandler): Promise<void>;
|
|
421
|
+
setPageDataHandler(handler: TPageDataHandler<TRow>): Promise<void>;
|
|
359
422
|
loadPageData(options?: {
|
|
360
423
|
disableCache?: boolean;
|
|
361
424
|
signal?: AbortSignal;
|
|
@@ -363,12 +426,14 @@ declare class CFlatServerDataProvider extends ADataProvider {
|
|
|
363
426
|
refresh(hardRefresh?: boolean): Promise<void>;
|
|
364
427
|
}
|
|
365
428
|
|
|
366
|
-
declare class CAPIFlatServerDataProvider extends CFlatServerDataProvider implements AAPIDataProvider {
|
|
429
|
+
declare class CAPIFlatServerDataProvider<TRow = TDataRow> extends CFlatServerDataProvider<TRow> implements AAPIDataProvider {
|
|
367
430
|
apiUrl: string;
|
|
368
431
|
requestProvider: RequestProvider;
|
|
369
432
|
cacheStrategy: ECacheStrategy | null;
|
|
370
433
|
cacheLifetime: number;
|
|
371
434
|
refreshOnMutation: boolean | undefined;
|
|
435
|
+
/** Incremented on every new request; stale onDataReceived callbacks are discarded. */
|
|
436
|
+
private _requestGeneration;
|
|
372
437
|
constructor(options?: IDataProviderOptions);
|
|
373
438
|
refresh(hardRefresh?: boolean): Promise<void>;
|
|
374
439
|
refreshData(options?: {
|
|
@@ -380,7 +445,7 @@ declare class CAPIFlatServerDataProvider extends CFlatServerDataProvider impleme
|
|
|
380
445
|
update(item: any): Promise<void>;
|
|
381
446
|
}
|
|
382
447
|
|
|
383
|
-
declare class CTreeClientDataProvider extends CFlatClientDataProvider {
|
|
448
|
+
declare class CTreeClientDataProvider<TRow extends TDataRow = TDataRow> extends CFlatClientDataProvider<TRow> implements ITreeDataProvider<TRow> {
|
|
384
449
|
parentKey: string;
|
|
385
450
|
idKey: string;
|
|
386
451
|
expandedByDefault: boolean;
|
|
@@ -389,22 +454,24 @@ declare class CTreeClientDataProvider extends CFlatClientDataProvider {
|
|
|
389
454
|
private _staticNodesCache;
|
|
390
455
|
private _nodeMapCache;
|
|
391
456
|
private _sortedNodeIdsCache;
|
|
457
|
+
private _filteredNodesCache;
|
|
392
458
|
invalidateStaticCache(): void;
|
|
459
|
+
setFilter(filter: IDataFilter | null, immediate?: boolean): void;
|
|
393
460
|
private get _staticNodes();
|
|
394
461
|
private get _nodeMap();
|
|
395
462
|
private get _sortedNodeIds();
|
|
396
463
|
constructor(options?: ITreeDataProviderOptions);
|
|
397
|
-
setData(data:
|
|
464
|
+
setData(data: TRow[]): void;
|
|
398
465
|
private buildStaticNodes;
|
|
399
466
|
private computeSortedIds;
|
|
400
467
|
private isNodeVisible;
|
|
401
468
|
private paginateNodes;
|
|
402
469
|
private updatePageData;
|
|
403
470
|
loadPageData(): Promise<void>;
|
|
404
|
-
get treeNodes(): ITreeNode[];
|
|
405
|
-
get visibleRows(): ITreeNode[];
|
|
406
|
-
getAllNodes(): ITreeNode[];
|
|
407
|
-
getFlatNodes(): ITreeNode[];
|
|
471
|
+
get treeNodes(): ITreeNode<TRow>[];
|
|
472
|
+
get visibleRows(): ITreeNode<TRow>[];
|
|
473
|
+
getAllNodes(): ITreeNode<TRow>[];
|
|
474
|
+
getFlatNodes(): ITreeNode<TRow>[];
|
|
408
475
|
toggleNode(nodeId: string | number): void;
|
|
409
476
|
expand(nodeId: string | number): void;
|
|
410
477
|
collapse(nodeId: string | number): void;
|
|
@@ -412,12 +479,12 @@ declare class CTreeClientDataProvider extends CFlatClientDataProvider {
|
|
|
412
479
|
collapseNode(nodeId: string | number): void;
|
|
413
480
|
expandAll(): void;
|
|
414
481
|
collapseAll(): void;
|
|
415
|
-
getNode(nodeId: string | number): ITreeNode | undefined;
|
|
416
|
-
getChildren(nodeId: string | number): ITreeNode[];
|
|
417
|
-
getParent(nodeId: string | number): ITreeNode | undefined;
|
|
482
|
+
getNode(nodeId: string | number): ITreeNode<TRow> | undefined;
|
|
483
|
+
getChildren(nodeId: string | number): ITreeNode<TRow>[];
|
|
484
|
+
getParent(nodeId: string | number): ITreeNode<TRow> | undefined;
|
|
418
485
|
}
|
|
419
486
|
|
|
420
|
-
declare class CAPITreeClientDataProvider extends CTreeClientDataProvider implements AAPIDataProvider {
|
|
487
|
+
declare class CAPITreeClientDataProvider<TRow extends TDataRow = TDataRow> extends CTreeClientDataProvider<TRow> implements AAPIDataProvider {
|
|
421
488
|
apiUrl: string;
|
|
422
489
|
contextKey: string;
|
|
423
490
|
requestProvider: RequestProvider;
|
|
@@ -446,17 +513,17 @@ declare class CAPITreeClientDataProvider extends CTreeClientDataProvider impleme
|
|
|
446
513
|
* - Server returns already-paginated visible rows with __treeNode metadata
|
|
447
514
|
* - No allData - server handles everything
|
|
448
515
|
*/
|
|
449
|
-
declare class CTreeServerDataProvider extends ADataProvider {
|
|
516
|
+
declare class CTreeServerDataProvider<TRow = TDataRow> extends ADataProvider<TRow> implements ITreeDataProvider<TRow> {
|
|
450
517
|
parentKey: string;
|
|
451
518
|
idKey: string;
|
|
452
519
|
expandedByDefault: boolean;
|
|
453
520
|
paginateBy: TreePaginationMode;
|
|
454
521
|
expandedNodes: Set<string | number>;
|
|
455
|
-
pageDataHandler: TTreePageDataHandler | null;
|
|
522
|
+
pageDataHandler: TTreePageDataHandler<TRow> | null;
|
|
456
523
|
contextKey: string;
|
|
457
524
|
constructor(options?: ITreeDataProviderOptions);
|
|
458
525
|
setContextKey(key: string): void;
|
|
459
|
-
setPageDataHandler(handler: TTreePageDataHandler): Promise<void>;
|
|
526
|
+
setPageDataHandler(handler: TTreePageDataHandler<TRow>): Promise<void>;
|
|
460
527
|
private latestRequestId;
|
|
461
528
|
private abortController;
|
|
462
529
|
/**
|
|
@@ -483,12 +550,14 @@ declare class CTreeServerDataProvider extends ADataProvider {
|
|
|
483
550
|
* - Request management (caching, deduplication)
|
|
484
551
|
* - Automatic tree parameter serialization in query
|
|
485
552
|
*/
|
|
486
|
-
declare class CAPITreeServerDataProvider extends CTreeServerDataProvider implements AAPIDataProvider {
|
|
553
|
+
declare class CAPITreeServerDataProvider<TRow = TDataRow> extends CTreeServerDataProvider<TRow> implements AAPIDataProvider {
|
|
487
554
|
apiUrl: string;
|
|
488
555
|
requestProvider: RequestProvider;
|
|
489
556
|
cacheStrategy: ECacheStrategy | null;
|
|
490
557
|
cacheLifetime: number;
|
|
491
558
|
refreshOnMutation: boolean | undefined;
|
|
559
|
+
/** Incremented on every new request; stale onDataReceived callbacks are discarded. */
|
|
560
|
+
private _requestGeneration;
|
|
492
561
|
constructor(options?: ITreeDataProviderOptions);
|
|
493
562
|
refresh(hardRefresh?: boolean): Promise<void>;
|
|
494
563
|
refreshData(options?: {
|
|
@@ -525,6 +594,7 @@ declare class KatluxIndexedDB {
|
|
|
525
594
|
* Safe to call multiple times — always resolves to the same instance.
|
|
526
595
|
*/
|
|
527
596
|
static open(): Promise<IDBDatabase>;
|
|
597
|
+
private static upgradeToVersion;
|
|
528
598
|
/**
|
|
529
599
|
* Dynamically ensures that an object store exists in the database.
|
|
530
600
|
* If not present, performs a database version bump and creates the store.
|
|
@@ -569,15 +639,18 @@ declare class CacheProviderFactory {
|
|
|
569
639
|
static clearInstances(): void;
|
|
570
640
|
}
|
|
571
641
|
|
|
572
|
-
declare class
|
|
642
|
+
declare class CServerSessionCache extends ACacheProvider {
|
|
573
643
|
private static instance;
|
|
574
|
-
static getInstance():
|
|
644
|
+
static getInstance(): CServerSessionCache;
|
|
575
645
|
static get storage(): Map<string, Map<string, ICacheEntry<any>>>;
|
|
576
646
|
static getSnapshot(): Map<string, Map<string, ICacheEntry<any>>>;
|
|
577
|
-
|
|
578
|
-
|
|
647
|
+
static MAX_SERVER_SESSIONS: number;
|
|
648
|
+
/**
|
|
649
|
+
* Purges expired entries across all server sessions synchronously when the storage
|
|
650
|
+
* exceeds MAX_SERVER_SESSIONS. Avoids persistent background setInterval timers on Node.js/SSR.
|
|
651
|
+
*/
|
|
652
|
+
static purgeExpiredServerSessions(): void;
|
|
579
653
|
private sessionIdCache;
|
|
580
|
-
private sessionId;
|
|
581
654
|
private readonly SESSION_ID_KEY;
|
|
582
655
|
constructor();
|
|
583
656
|
/**
|
|
@@ -585,18 +658,43 @@ declare class CSessionCache extends ACacheProvider {
|
|
|
585
658
|
*/
|
|
586
659
|
private generateSessionId;
|
|
587
660
|
/**
|
|
588
|
-
* Get or create sessionId
|
|
661
|
+
* Get or create sessionId — server-only path.
|
|
662
|
+
* Returns '__no_session__' sentinel when no isolatable H3 event context is available.
|
|
589
663
|
*/
|
|
590
664
|
private getSessionId;
|
|
591
|
-
getKeyList(
|
|
592
|
-
get<T>(key: string,
|
|
593
|
-
set<T>(key: string, data: T, lifetime: number,
|
|
594
|
-
remove(key: string,
|
|
595
|
-
removeByPrefix(prefix: string,
|
|
596
|
-
getRemainingTime(key: string,
|
|
665
|
+
getKeyList(context?: any): Promise<Array<string>>;
|
|
666
|
+
get<T>(key: string, context?: any): Promise<T | null>;
|
|
667
|
+
set<T>(key: string, data: T, lifetime: number, context?: any): Promise<void>;
|
|
668
|
+
remove(key: string, context?: any): Promise<void>;
|
|
669
|
+
removeByPrefix(prefix: string, context?: any): Promise<void>;
|
|
670
|
+
getRemainingTime(key: string, context?: any): Promise<number | null>;
|
|
597
671
|
cleanupExpired(): Promise<void>;
|
|
598
672
|
}
|
|
599
673
|
|
|
674
|
+
/**
|
|
675
|
+
* CBrowserSessionCache — client-side tab-lifetime cache backed by window.sessionStorage.
|
|
676
|
+
*
|
|
677
|
+
* - Server-side: all write operations store only into the SSR context payload for hydration
|
|
678
|
+
* transfer to the client. No server memory is allocated.
|
|
679
|
+
* - Client-side: reads and writes use window.sessionStorage exclusively.
|
|
680
|
+
* - Hydration: on the first client-side get() miss, checks the SSR payload and promotes
|
|
681
|
+
* the entry into sessionStorage for subsequent reads.
|
|
682
|
+
*
|
|
683
|
+
* Storage key prefix: 'bscache:' (distinct from the server session 'cache:' prefix)
|
|
684
|
+
*/
|
|
685
|
+
declare class CBrowserSessionCache extends ACacheProvider {
|
|
686
|
+
private static instance;
|
|
687
|
+
static getInstance(): CBrowserSessionCache;
|
|
688
|
+
private readonly PREFIX;
|
|
689
|
+
getKeyList(_context?: any): Promise<string[]>;
|
|
690
|
+
get<T>(key: string, context?: any): Promise<T | null>;
|
|
691
|
+
set<T>(key: string, data: T, lifetime: number, context?: any): Promise<void>;
|
|
692
|
+
remove(key: string, _context?: any): Promise<void>;
|
|
693
|
+
removeByPrefix(prefix: string, _context?: any): Promise<void>;
|
|
694
|
+
getRemainingTime(key: string, _context?: any): Promise<number | null>;
|
|
695
|
+
cleanupExpired(_context?: any): Promise<void>;
|
|
696
|
+
}
|
|
697
|
+
|
|
600
698
|
declare class CCookieCache extends ACacheProvider {
|
|
601
699
|
private static instance;
|
|
602
700
|
static getInstance(): CCookieCache;
|
|
@@ -605,12 +703,12 @@ declare class CCookieCache extends ACacheProvider {
|
|
|
605
703
|
private getCookieKey;
|
|
606
704
|
private parseKeyFromCookieName;
|
|
607
705
|
private isClient;
|
|
608
|
-
getKeyList(
|
|
609
|
-
get<T>(key: string,
|
|
610
|
-
set<T>(key: string, data: T, lifetime: number,
|
|
611
|
-
remove(key: string,
|
|
612
|
-
removeByPrefix(prefix: string,
|
|
613
|
-
getRemainingTime(key: string,
|
|
706
|
+
getKeyList(context?: any): Promise<Array<string>>;
|
|
707
|
+
get<T>(key: string, context?: any): Promise<T | null>;
|
|
708
|
+
set<T>(key: string, data: T, lifetime: number, context?: any): Promise<void>;
|
|
709
|
+
remove(key: string, context?: any): Promise<void>;
|
|
710
|
+
removeByPrefix(prefix: string, context?: any): Promise<void>;
|
|
711
|
+
getRemainingTime(key: string, context?: any): Promise<number | null>;
|
|
614
712
|
cleanupExpired(): Promise<void>;
|
|
615
713
|
}
|
|
616
714
|
|
|
@@ -620,27 +718,29 @@ declare class CLocalStorageCache extends ACacheProvider {
|
|
|
620
718
|
type: string;
|
|
621
719
|
private constructor();
|
|
622
720
|
private _hydrateFromPayload;
|
|
623
|
-
getKeyList(
|
|
624
|
-
get<T>(key: string,
|
|
625
|
-
set<T>(key: string, data: T, lifetime: number,
|
|
626
|
-
remove(key: string,
|
|
627
|
-
removeByPrefix(prefix: string,
|
|
628
|
-
getRemainingTime(key: string,
|
|
721
|
+
getKeyList(context?: any): Promise<Array<string>>;
|
|
722
|
+
get<T>(key: string, context?: any): Promise<T | null>;
|
|
723
|
+
set<T>(key: string, data: T, lifetime: number, context?: any): Promise<void>;
|
|
724
|
+
remove(key: string, context?: any): Promise<void>;
|
|
725
|
+
removeByPrefix(prefix: string, context?: any): Promise<void>;
|
|
726
|
+
getRemainingTime(key: string, context?: any): Promise<number | null>;
|
|
629
727
|
cleanupExpired(): Promise<void>;
|
|
630
728
|
}
|
|
631
729
|
|
|
632
730
|
declare class CIndexedDBCache extends ACacheProvider {
|
|
633
731
|
private static instance;
|
|
634
|
-
static
|
|
635
|
-
|
|
732
|
+
private static instances;
|
|
733
|
+
readonly storeName: string;
|
|
734
|
+
static getInstance(storeName?: string): CIndexedDBCache;
|
|
735
|
+
constructor(storeName?: string);
|
|
636
736
|
private _hydrateFromPayload;
|
|
637
737
|
private getStore;
|
|
638
|
-
getKeyList(
|
|
639
|
-
get<T>(key: string,
|
|
640
|
-
set<T>(key: string, data: T, lifetime: number,
|
|
641
|
-
remove(key: string,
|
|
642
|
-
removeByPrefix(prefix: string,
|
|
643
|
-
getRemainingTime(key: string,
|
|
738
|
+
getKeyList(context?: any): Promise<Array<string>>;
|
|
739
|
+
get<T>(key: string, context?: any): Promise<T | null>;
|
|
740
|
+
set<T>(key: string, data: T, lifetime: number, context?: any): Promise<void>;
|
|
741
|
+
remove(key: string, context?: any): Promise<void>;
|
|
742
|
+
removeByPrefix(prefix: string, context?: any): Promise<void>;
|
|
743
|
+
getRemainingTime(key: string, context?: any): Promise<number | null>;
|
|
644
744
|
cleanupExpired(): Promise<void>;
|
|
645
745
|
}
|
|
646
746
|
|
|
@@ -651,12 +751,13 @@ declare class CMemoryCache extends ACacheProvider {
|
|
|
651
751
|
static getInstance(): CMemoryCache;
|
|
652
752
|
private constructor();
|
|
653
753
|
private _hydrateFromPayload;
|
|
654
|
-
getKeyList(
|
|
655
|
-
get<T>(key: string,
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
754
|
+
getKeyList(context?: any): Promise<Array<string>>;
|
|
755
|
+
get<T>(key: string, context?: any): Promise<T | null>;
|
|
756
|
+
private isServer;
|
|
757
|
+
set<T>(key: string, data: T, lifetime: number, context?: any): Promise<void>;
|
|
758
|
+
remove(key: string, context?: any): Promise<void>;
|
|
759
|
+
removeByPrefix(prefix: string, context?: any): Promise<void>;
|
|
760
|
+
getRemainingTime(key: string, context?: any): Promise<number | null>;
|
|
660
761
|
cleanupExpired(): Promise<void>;
|
|
661
762
|
}
|
|
662
763
|
|
|
@@ -665,15 +766,26 @@ declare class CApplicationCache extends ACacheProvider {
|
|
|
665
766
|
private static _storage;
|
|
666
767
|
private static get storage();
|
|
667
768
|
static getInstance(): CApplicationCache;
|
|
769
|
+
static readonly MAX_ENTRIES = 10000;
|
|
668
770
|
static getSnapshot(): Map<string, ICacheEntry<any>>;
|
|
771
|
+
/**
|
|
772
|
+
* Purges expired entries when storage size reaches MAX_ENTRIES watermark.
|
|
773
|
+
* Avoids persistent background setInterval timers on Node.js/SSR.
|
|
774
|
+
*/
|
|
775
|
+
static purgeExpiredEntries(): void;
|
|
776
|
+
/**
|
|
777
|
+
* Clears all cached entries (used for test isolation).
|
|
778
|
+
*/
|
|
779
|
+
static clear(): void;
|
|
669
780
|
private constructor();
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
781
|
+
private isServer;
|
|
782
|
+
getKeyList(context?: any): Promise<Array<string>>;
|
|
783
|
+
get<T>(key: string, context?: any): Promise<T | null>;
|
|
784
|
+
set<T>(key: string, data: T, lifetime: number, context?: any): Promise<void>;
|
|
785
|
+
remove(key: string, context?: any): Promise<void>;
|
|
786
|
+
removeByPrefix(prefix: string, context?: any): Promise<void>;
|
|
787
|
+
getRemainingTime(key: string, context?: any): Promise<number | null>;
|
|
788
|
+
cleanupExpired(context?: any): Promise<void>;
|
|
677
789
|
}
|
|
678
790
|
|
|
679
791
|
interface IRegistryEntry {
|
|
@@ -707,6 +819,8 @@ declare class RequestProviderRegistry {
|
|
|
707
819
|
/**
|
|
708
820
|
* Register a provider with one or more tags.
|
|
709
821
|
* If the provider is already registered, its tags are updated.
|
|
822
|
+
* In SSR (Node.js), registration is skipped to prevent process-global memory leaks
|
|
823
|
+
* and cross-user multi-tenant invalidation.
|
|
710
824
|
*/
|
|
711
825
|
static register(provider: RequestProvider, tags: string[]): void;
|
|
712
826
|
/**
|
|
@@ -738,6 +852,7 @@ declare class RequestProviderRegistry {
|
|
|
738
852
|
static clear(): void;
|
|
739
853
|
}
|
|
740
854
|
|
|
855
|
+
declare const SENSITIVE_HEADER_KEYS: string[];
|
|
741
856
|
/**
|
|
742
857
|
* RequestQueue
|
|
743
858
|
*
|
|
@@ -766,11 +881,25 @@ declare class RequestQueue {
|
|
|
766
881
|
static queue: IQueuedOperation[];
|
|
767
882
|
static deadLetterQueue: IDeadLetterItem[];
|
|
768
883
|
static isFlushing: boolean;
|
|
884
|
+
private static MAX_PAYLOAD_SIZE_BYTES;
|
|
885
|
+
private static MAX_QUEUE_SIZE;
|
|
886
|
+
private static MAX_DEAD_LETTER_SIZE;
|
|
887
|
+
static setMaxPayloadSize(bytes: number): void;
|
|
888
|
+
static setMaxQueueSize(limit: number): void;
|
|
889
|
+
static setMaxDeadLetterSize(limit: number): void;
|
|
890
|
+
/**
|
|
891
|
+
* Strips sensitive headers (e.g., authorization, cookie, x-csrf-token) before persisting
|
|
892
|
+
* request options to persistent storage (IndexedDB / LocalStorage).
|
|
893
|
+
* Sensitive credentials must never be stored in plaintext in browser storage, and are
|
|
894
|
+
* instead regenerated dynamically at execution time.
|
|
895
|
+
*/
|
|
896
|
+
private static sanitizeOptions;
|
|
769
897
|
private static _subscribers;
|
|
770
898
|
static subscribe(listener: () => void): () => void;
|
|
771
899
|
static notify(): void;
|
|
772
900
|
private static adapter;
|
|
773
901
|
private static initialized;
|
|
902
|
+
private static initPromise;
|
|
774
903
|
private static _onDeadLetter;
|
|
775
904
|
private static _onFlushComplete;
|
|
776
905
|
private static _onNetworkError;
|
|
@@ -820,6 +949,7 @@ declare class RequestQueue {
|
|
|
820
949
|
* Fully permissive — causal ordering is the app's responsibility.
|
|
821
950
|
*/
|
|
822
951
|
static reorder(ids: string[]): void;
|
|
952
|
+
private static regenerateHeaders;
|
|
823
953
|
private static executeRequest;
|
|
824
954
|
private static moveToDeadLetter;
|
|
825
955
|
private static persistQueue;
|
|
@@ -895,11 +1025,12 @@ declare const useSortLogic: () => {
|
|
|
895
1025
|
sortData: (sortList: IDataSort[], rows: TDataRow[]) => TDataRow[];
|
|
896
1026
|
};
|
|
897
1027
|
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
declare const
|
|
1028
|
+
interface IDebouncedFunction<T extends (...args: any[]) => any> {
|
|
1029
|
+
(...args: Parameters<T>): void;
|
|
1030
|
+
cancel: () => void;
|
|
1031
|
+
}
|
|
1032
|
+
declare const useDebounce: <T extends (...args: any[]) => any>(callback: T, delay: number) => IDebouncedFunction<T>;
|
|
1033
|
+
declare const debounce: <T extends (...args: any[]) => any>(callback: T, delay: number) => IDebouncedFunction<T>;
|
|
903
1034
|
|
|
904
1035
|
/**
|
|
905
1036
|
* defaultAdapter.ts — Framework-agnostic default implementation of ISSRHydrationAdapter.
|
|
@@ -913,19 +1044,6 @@ declare class DefaultHydrationAdapter implements ISSRHydrationAdapter {
|
|
|
913
1044
|
getSSRPayload(context?: any): Record<string, any> | null;
|
|
914
1045
|
}
|
|
915
1046
|
|
|
916
|
-
/**
|
|
917
|
-
* nuxtAdapter.ts — Nuxt 3 implementation of ISSRHydrationAdapter.
|
|
918
|
-
* Bridges to Nuxt 3's useNuxtData, useAsyncData, and useNuxtApp when running in Nuxt.
|
|
919
|
-
*/
|
|
920
|
-
|
|
921
|
-
declare class NuxtHydrationAdapter implements ISSRHydrationAdapter {
|
|
922
|
-
private fallback;
|
|
923
|
-
getSSRData<T>(key: string, context?: any): T | null;
|
|
924
|
-
fetchWithSSR<T>(key: string, fetcher: () => Promise<T>, context?: any): Promise<T | null>;
|
|
925
|
-
clearSSRData(key: string, context?: any): void;
|
|
926
|
-
getSSRPayload(context?: any): Record<string, any> | null;
|
|
927
|
-
}
|
|
928
|
-
|
|
929
1047
|
/**
|
|
930
1048
|
* index.ts — Framework-agnostic hydration and platform bridge.
|
|
931
1049
|
* Provides unified, safe methods for SSR hydration, routing, and lifecycle hooks.
|
|
@@ -969,5 +1087,5 @@ declare function getAppRouter(): any;
|
|
|
969
1087
|
*/
|
|
970
1088
|
declare function onPlatformReady(cb: () => void): void;
|
|
971
1089
|
|
|
972
|
-
export { AAPIDataProvider, ADataProvider, CAPIFlatClientDataProvider, CAPIFlatServerDataProvider, CAPITreeClientDataProvider, CAPITreeServerDataProvider, CApplicationCache, CCookieCache, CFlatClientDataProvider, CFlatServerDataProvider, CIndexedDBCache, CLocalStorageCache, CMemoryCache,
|
|
973
|
-
export type { CacheDriverLoader, ICacheEntry, IDataFilter, IDataProviderOptions, IDataResult, IDataSort, IDeadLetterItem, IFlushOptions, IKDatatableAction, IPlatformRouter, IQueueStorageAdapter, IQueuedOperation, IRequestOptions, ISSRHydrationAdapter, ITreeDataProviderOptions, ITreeNode, ITreeNodeStatic, KProductItemData, KProductRowAction, TDataProviderListener, TDataRow, TKatluxStore, TPageDataHandler, TQueueItemStatus, TTreePageDataHandler, TUnsubscribe, TreePaginationMode };
|
|
1090
|
+
export { AAPIDataProvider, ADataProvider, CAPIFlatClientDataProvider, CAPIFlatServerDataProvider, CAPITreeClientDataProvider, CAPITreeServerDataProvider, CApplicationCache, CBrowserSessionCache, CCookieCache, CFlatClientDataProvider, CFlatServerDataProvider, CIndexedDBCache, CLocalStorageCache, CMemoryCache, CServerSessionCache, CTreeClientDataProvider, CTreeServerDataProvider, CacheProviderFactory, DefaultHydrationAdapter, ECacheStrategy, EDataFilterOperator, EQueueStorage, KatluxIndexedDB, QueueStorageFactory, RequestProvider, RequestProviderRegistry, RequestQueue, SENSITIVE_HEADER_KEYS, applyOperator, clearSSRData, compareAnd, compareEqual, compareIn, compareOr, compareValues, debounce, evaluateFilter, fetchWithSSR, filterData, filterTreeData, getAppRoute, getAppRouter, getHydrationAdapter, getPlatformApp, getSSRData, getSSRPayload, onPlatformReady, setHydrationAdapter, sortData, useDebounce, useFilterLogic, useSortLogic };
|
|
1091
|
+
export type { CacheDriverLoader, ICacheEntry, IDataFilter, IDataProviderOptions, IDataResult, IDataSort, IDeadLetterItem, IDebouncedFunction, IFlushOptions, IKDatatableAction, IPlatformRouter, IQueueStorageAdapter, IQueuedOperation, IRequestOptions, ISSRHydrationAdapter, ITreeDataProvider, ITreeDataProviderOptions, ITreeNode, ITreeNodeStatic, KProductItemData, KProductRowAction, TDataProviderListener, TDataRow, TKatluxStore, TPageDataHandler, TQueueItemStatus, TTreePageDataHandler, TTreeRow, TUnsubscribe, TreePaginationMode };
|