@zengrid/shared 1.0.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/README.md +4 -0
- package/dist/index.cjs.js +3085 -1783
- package/dist/index.esm.js +3080 -1783
- package/dist/package.json +1 -1
- package/dist/src/algorithms/graph/bfs.d.ts.map +1 -1
- package/dist/src/algorithms/graph/dfs.d.ts.map +1 -1
- package/dist/src/algorithms/graph/index.d.ts +1 -1
- package/dist/src/algorithms/graph/index.d.ts.map +1 -1
- package/dist/src/algorithms/index.d.ts +5 -5
- package/dist/src/algorithms/index.d.ts.map +1 -1
- package/dist/src/algorithms/pattern/index.d.ts +2 -2
- package/dist/src/algorithms/pattern/index.d.ts.map +1 -1
- package/dist/src/algorithms/pattern/sequence-detector.d.ts.map +1 -1
- package/dist/src/algorithms/search/index.d.ts +2 -2
- package/dist/src/algorithms/search/index.d.ts.map +1 -1
- package/dist/src/algorithms/sorting/comparators.d.ts.map +1 -1
- package/dist/src/algorithms/sorting/index.d.ts +1 -1
- package/dist/src/algorithms/sorting/index.d.ts.map +1 -1
- package/dist/src/algorithms/sorting/timsort-gallop.d.ts +21 -0
- package/dist/src/algorithms/sorting/timsort-gallop.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/timsort-merge.d.ts +6 -0
- package/dist/src/algorithms/sorting/timsort-merge.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/timsort-run.d.ts +38 -0
- package/dist/src/algorithms/sorting/timsort-run.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/timsort.d.ts.map +1 -1
- package/dist/src/algorithms/sorting/timsort.interface.d.ts +32 -0
- package/dist/src/algorithms/sorting/timsort.interface.d.ts.map +1 -0
- package/dist/src/data-structures/column-store/column-store.d.ts.map +1 -1
- package/dist/src/data-structures/column-store/column-store.interface.d.ts.map +1 -1
- package/dist/src/data-structures/command-stack/command-stack.d.ts.map +1 -1
- package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts.map +1 -1
- package/dist/src/data-structures/disjoint-set/index.d.ts +1 -1
- package/dist/src/data-structures/disjoint-set/index.d.ts.map +1 -1
- package/dist/src/data-structures/index-map/index-map.d.ts.map +1 -1
- package/dist/src/data-structures/index-map/index.d.ts +1 -1
- package/dist/src/data-structures/index-map/index.d.ts.map +1 -1
- package/dist/src/data-structures/index.d.ts +8 -8
- package/dist/src/data-structures/index.d.ts.map +1 -1
- package/dist/src/data-structures/interval-tree/interval-tree.d.ts +0 -83
- package/dist/src/data-structures/interval-tree/interval-tree.d.ts.map +1 -1
- package/dist/src/data-structures/interval-tree/node.d.ts +34 -0
- package/dist/src/data-structures/interval-tree/node.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/balance.d.ts +34 -0
- package/dist/src/data-structures/interval-tree/operations/balance.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/delete.d.ts +26 -0
- package/dist/src/data-structures/interval-tree/operations/delete.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/insert.d.ts +19 -0
- package/dist/src/data-structures/interval-tree/operations/insert.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/search.d.ts +46 -0
- package/dist/src/data-structures/interval-tree/operations/search.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/traversal.d.ts +29 -0
- package/dist/src/data-structures/interval-tree/operations/traversal.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/operations/utilities.d.ts +30 -0
- package/dist/src/data-structures/interval-tree/operations/utilities.d.ts.map +1 -0
- package/dist/src/data-structures/lru-cache/index.d.ts +1 -1
- package/dist/src/data-structures/lru-cache/index.d.ts.map +1 -1
- package/dist/src/data-structures/lru-cache/lru-cache.d.ts.map +1 -1
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts.map +1 -1
- package/dist/src/data-structures/ring-buffer.d.ts +96 -0
- package/dist/src/data-structures/ring-buffer.d.ts.map +1 -0
- package/dist/src/data-structures/rtree/rtree.d.ts.map +1 -1
- package/dist/src/data-structures/segment-tree/aggregation-config.d.ts +6 -0
- package/dist/src/data-structures/segment-tree/aggregation-config.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/index.d.ts +1 -1
- package/dist/src/data-structures/segment-tree/index.d.ts.map +1 -1
- package/dist/src/data-structures/segment-tree/lazy-propagation.d.ts +5 -0
- package/dist/src/data-structures/segment-tree/lazy-propagation.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/segment-tree.d.ts +1 -105
- package/dist/src/data-structures/segment-tree/segment-tree.d.ts.map +1 -1
- package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts.map +1 -1
- package/dist/src/data-structures/segment-tree/tree-builder.d.ts +3 -0
- package/dist/src/data-structures/segment-tree/tree-builder.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/tree-query.d.ts +3 -0
- package/dist/src/data-structures/segment-tree/tree-query.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/tree-search.d.ts +2 -0
- package/dist/src/data-structures/segment-tree/tree-search.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/tree-update.d.ts +4 -0
- package/dist/src/data-structures/segment-tree/tree-update.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/tree-validation.d.ts +3 -0
- package/dist/src/data-structures/segment-tree/tree-validation.d.ts.map +1 -0
- package/dist/src/data-structures/skip-list/skip-list.d.ts.map +1 -1
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts.map +1 -1
- package/dist/src/data-structures/suffix-array/suffix-array.d.ts.map +1 -1
- package/dist/src/data-structures/trie/index.d.ts +1 -1
- package/dist/src/data-structures/trie/index.d.ts.map +1 -1
- package/dist/src/data-structures/trie/trie.d.ts.map +1 -1
- package/dist/src/index.d.ts +13 -10
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/patterns/coordinator.d.ts.map +1 -1
- package/dist/src/patterns/event-emitter.d.ts.map +1 -1
- package/dist/src/patterns/factory.d.ts.map +1 -1
- package/dist/src/patterns/index.d.ts +4 -4
- package/dist/src/patterns/index.d.ts.map +1 -1
- package/dist/src/patterns/state-machine.d.ts.map +1 -1
- package/dist/src/reactive/batch-processor.d.ts +80 -0
- package/dist/src/reactive/batch-processor.d.ts.map +1 -0
- package/dist/src/reactive/core/batch-manager.d.ts +48 -0
- package/dist/src/reactive/core/batch-manager.d.ts.map +1 -0
- package/dist/src/reactive/core/batch-queue.d.ts +39 -0
- package/dist/src/reactive/core/batch-queue.d.ts.map +1 -0
- package/dist/src/reactive/core/event-handler-registry.d.ts +52 -0
- package/dist/src/reactive/core/event-handler-registry.d.ts.map +1 -0
- package/dist/src/reactive/core/event-mapper.d.ts +37 -0
- package/dist/src/reactive/core/event-mapper.d.ts.map +1 -0
- package/dist/src/reactive/core/pool-stats.d.ts +47 -0
- package/dist/src/reactive/core/pool-stats.d.ts.map +1 -0
- package/dist/src/reactive/core/subscription-manager.d.ts +46 -0
- package/dist/src/reactive/core/subscription-manager.d.ts.map +1 -0
- package/dist/src/reactive/event-delegator.d.ts +84 -0
- package/dist/src/reactive/event-delegator.d.ts.map +1 -0
- package/dist/src/reactive/index.d.ts +61 -0
- package/dist/src/reactive/index.d.ts.map +1 -0
- package/dist/src/reactive/interfaces.d.ts +207 -0
- package/dist/src/reactive/interfaces.d.ts.map +1 -0
- package/dist/src/reactive/object-pool.d.ts +97 -0
- package/dist/src/reactive/object-pool.d.ts.map +1 -0
- package/dist/src/reactive/reactive-state.d.ts +132 -0
- package/dist/src/reactive/reactive-state.d.ts.map +1 -0
- package/package.json +52 -52
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module reactive
|
|
3
|
+
*
|
|
4
|
+
* Reusable reactive primitives for high-performance grid features
|
|
5
|
+
*
|
|
6
|
+
* @description
|
|
7
|
+
* This module provides scalable patterns for building features with
|
|
8
|
+
* thousands of interactive elements (cells, rows, columns) without
|
|
9
|
+
* performance degradation.
|
|
10
|
+
*
|
|
11
|
+
* Now with:
|
|
12
|
+
* - Interface abstractions for loose coupling
|
|
13
|
+
* - Dependency injection support
|
|
14
|
+
* - Exposed helpers for composition
|
|
15
|
+
* - Event history for debugging
|
|
16
|
+
*
|
|
17
|
+
* @performance
|
|
18
|
+
* Designed for grids with 1000+ cells:
|
|
19
|
+
* - Event listeners: O(1) not O(n)
|
|
20
|
+
* - Notifications: Targeted, not broadcast
|
|
21
|
+
* - Memory: Constant overhead, pooled resources
|
|
22
|
+
* - GC pressure: Minimal (object reuse)
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import {
|
|
27
|
+
* ReactiveState,
|
|
28
|
+
* EventDelegator,
|
|
29
|
+
* ObjectPool,
|
|
30
|
+
* BatchProcessor
|
|
31
|
+
* } from '@zengrid/shared/reactive';
|
|
32
|
+
*
|
|
33
|
+
* // 1. Reactive state with event history (new!)
|
|
34
|
+
* const state = new ReactiveState(undefined, undefined, 100); // 100 event history
|
|
35
|
+
*
|
|
36
|
+
* // 2. Composition with interfaces (new!)
|
|
37
|
+
* class ColumnModel {
|
|
38
|
+
* constructor(private state: IReactiveState<ColumnState, ColumnEvent>) {}
|
|
39
|
+
* }
|
|
40
|
+
*
|
|
41
|
+
* // 3. Use exposed helpers directly (new!)
|
|
42
|
+
* import { SubscriptionManager } from '@zengrid/shared/reactive';
|
|
43
|
+
* const subs = new SubscriptionManager();
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @packageDocumentation
|
|
47
|
+
*/
|
|
48
|
+
export type { ISubscriber, IReactiveState, ISubscriptionManager, IBatchManager, IEventDelegator, IElementEventHandlers, IEventDelegatorOptions, IObjectPool, IObjectPoolOptions, IObjectPoolStats, IBatchProcessor, IBatchProcessorOptions, IEventHandlerRegistry, } from './interfaces';
|
|
49
|
+
export { ReactiveState, type StateSubscriber, } from './reactive-state';
|
|
50
|
+
export { EventDelegator, type ElementEventHandlers, // Backward compatible
|
|
51
|
+
type EventDelegatorOptions, } from './event-delegator';
|
|
52
|
+
export { ObjectPool, type ObjectPoolOptions, // Backward compatible
|
|
53
|
+
type ObjectPoolStats, } from './object-pool';
|
|
54
|
+
export { BatchProcessor, type BatchProcessorOptions, } from './batch-processor';
|
|
55
|
+
export { SubscriptionManager } from './core/subscription-manager';
|
|
56
|
+
export { BatchManager } from './core/batch-manager';
|
|
57
|
+
export { EventHandlerRegistry } from './core/event-handler-registry';
|
|
58
|
+
export { EventMapper } from './core/event-mapper';
|
|
59
|
+
export { PoolStatsTracker } from './core/pool-stats';
|
|
60
|
+
export { BatchQueue } from './core/batch-queue';
|
|
61
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reactive/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAMH,YAAY,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAMtB,OAAO,EACL,aAAa,EACb,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EAAE,sBAAsB;AACjD,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EAAE,sBAAsB;AAC9C,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reactive Primitives - Interface Abstractions
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Interface-based abstractions for loose coupling and testability.
|
|
6
|
+
* Enables dependency injection, mocking, and composition.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Use interfaces for loose coupling
|
|
11
|
+
* class ColumnModel {
|
|
12
|
+
* constructor(private state: IReactiveState<ColumnState, ColumnEvent>) {}
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* // Can inject real or mock implementation
|
|
16
|
+
* const model = new ColumnModel(new ReactiveState());
|
|
17
|
+
* const testModel = new ColumnModel(new MockReactiveState());
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Subscriber for state changes
|
|
22
|
+
*/
|
|
23
|
+
export interface ISubscriber<E> {
|
|
24
|
+
onChange(event: E): void;
|
|
25
|
+
onBatchChange?(events: E[]): void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Reactive state container with targeted subscriptions
|
|
29
|
+
*
|
|
30
|
+
* @template T - State value type (not exposed in interface, used internally)
|
|
31
|
+
* @template E - Event type (used in subscriptions)
|
|
32
|
+
*/
|
|
33
|
+
export interface IReactiveState<T, E> {
|
|
34
|
+
/**
|
|
35
|
+
* Subscribe to specific key changes (targeted O(m))
|
|
36
|
+
*/
|
|
37
|
+
subscribeToKey(key: string, subscriber: ISubscriber<E>): () => void;
|
|
38
|
+
/**
|
|
39
|
+
* Subscribe to all state changes (global observer)
|
|
40
|
+
*/
|
|
41
|
+
subscribeGlobal(subscriber: ISubscriber<E>): () => void;
|
|
42
|
+
/**
|
|
43
|
+
* Get subscriber count for debugging
|
|
44
|
+
*/
|
|
45
|
+
getSubscriberCount(key: string): number;
|
|
46
|
+
/**
|
|
47
|
+
* Get global subscriber count
|
|
48
|
+
*/
|
|
49
|
+
getGlobalSubscriberCount(): number;
|
|
50
|
+
/**
|
|
51
|
+
* Get event history (if enabled)
|
|
52
|
+
*/
|
|
53
|
+
getEventHistory(): E[];
|
|
54
|
+
/**
|
|
55
|
+
* Get last N events from history
|
|
56
|
+
*/
|
|
57
|
+
getLastEvents(count: number): E[];
|
|
58
|
+
/**
|
|
59
|
+
* Clear event history
|
|
60
|
+
*/
|
|
61
|
+
clearEventHistory(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Cleanup
|
|
64
|
+
*/
|
|
65
|
+
destroy(): void;
|
|
66
|
+
__state?: T;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Manages subscriptions and notifications
|
|
70
|
+
*/
|
|
71
|
+
export interface ISubscriptionManager<E> {
|
|
72
|
+
subscribeToKey(key: string, subscriber: ISubscriber<E>): () => void;
|
|
73
|
+
subscribeGlobal(subscriber: ISubscriber<E>): () => void;
|
|
74
|
+
notifyKey(key: string, event: E): void;
|
|
75
|
+
notifyBatch(eventsByKey: Map<string, E[]>): void;
|
|
76
|
+
getKeySubscriberCount(key: string): number;
|
|
77
|
+
getGlobalSubscriberCount(): number;
|
|
78
|
+
hasKeySubscribers(key: string): boolean;
|
|
79
|
+
clear(): void;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Manages batch mode and event queuing
|
|
83
|
+
*/
|
|
84
|
+
export interface IBatchManager<E> {
|
|
85
|
+
isBatching(): boolean;
|
|
86
|
+
enterBatch(): void;
|
|
87
|
+
exitBatch(): void;
|
|
88
|
+
addEvent(key: string, event: E): void;
|
|
89
|
+
flushEvents(): Array<{
|
|
90
|
+
key: string;
|
|
91
|
+
event: E;
|
|
92
|
+
}>;
|
|
93
|
+
groupEventsByKey(events: Array<{
|
|
94
|
+
key: string;
|
|
95
|
+
event: E;
|
|
96
|
+
}>): Map<string, E[]>;
|
|
97
|
+
clear(): void;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Event handler types
|
|
101
|
+
*/
|
|
102
|
+
export interface IElementEventHandlers {
|
|
103
|
+
onClick?: (event: MouseEvent) => void;
|
|
104
|
+
onDblClick?: (event: MouseEvent) => void;
|
|
105
|
+
onMouseDown?: (event: MouseEvent) => void;
|
|
106
|
+
onMouseUp?: (event: MouseEvent) => void;
|
|
107
|
+
onMouseEnter?: (event: MouseEvent) => void;
|
|
108
|
+
onMouseLeave?: (event: MouseEvent) => void;
|
|
109
|
+
onContextMenu?: (event: MouseEvent) => void;
|
|
110
|
+
onFocus?: (event: FocusEvent) => void;
|
|
111
|
+
onBlur?: (event: FocusEvent) => void;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Event delegator options
|
|
115
|
+
*/
|
|
116
|
+
export interface IEventDelegatorOptions {
|
|
117
|
+
idAttribute?: string;
|
|
118
|
+
customEvents?: Record<string, {
|
|
119
|
+
domEvent: string;
|
|
120
|
+
useCapture: boolean;
|
|
121
|
+
}>;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Event delegation for thousands of elements
|
|
125
|
+
*/
|
|
126
|
+
export interface IEventDelegator {
|
|
127
|
+
registerElement(elementId: string, handlers: IElementEventHandlers): void;
|
|
128
|
+
unregisterElement(elementId: string): void;
|
|
129
|
+
updateElement(elementId: string, handlers: IElementEventHandlers, merge?: boolean): void;
|
|
130
|
+
isRegistered(elementId: string): boolean;
|
|
131
|
+
getAllRegisteredIds(): string[];
|
|
132
|
+
getRegisteredCount(): number;
|
|
133
|
+
destroy(): void;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Object pool options
|
|
137
|
+
*/
|
|
138
|
+
export interface IObjectPoolOptions<T> {
|
|
139
|
+
factory: () => T;
|
|
140
|
+
reset?: (obj: T) => void;
|
|
141
|
+
validate?: (obj: T) => boolean;
|
|
142
|
+
initialSize?: number;
|
|
143
|
+
maxSize?: number;
|
|
144
|
+
onAcquire?: (obj: T) => void;
|
|
145
|
+
onRelease?: (obj: T) => void;
|
|
146
|
+
onEvict?: (obj: T) => void;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Object pool statistics
|
|
150
|
+
*/
|
|
151
|
+
export interface IObjectPoolStats {
|
|
152
|
+
available: number;
|
|
153
|
+
created: number;
|
|
154
|
+
acquired: number;
|
|
155
|
+
released: number;
|
|
156
|
+
hitRate: number;
|
|
157
|
+
maxSize: number;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Object pooling for virtual rendering
|
|
161
|
+
*/
|
|
162
|
+
export interface IObjectPool<T> {
|
|
163
|
+
acquire(): T;
|
|
164
|
+
release(obj: T): void;
|
|
165
|
+
acquireMany(count: number): T[];
|
|
166
|
+
releaseMany(objects: T[]): void;
|
|
167
|
+
prewarm(count: number): void;
|
|
168
|
+
size(): number;
|
|
169
|
+
getStats(): IObjectPoolStats;
|
|
170
|
+
shrink(targetSize: number): void;
|
|
171
|
+
clear(): void;
|
|
172
|
+
destroy(): void;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Batch processor options
|
|
176
|
+
*/
|
|
177
|
+
export interface IBatchProcessorOptions<T> {
|
|
178
|
+
process: (items: T[]) => void;
|
|
179
|
+
delay?: number;
|
|
180
|
+
maxBatchSize?: number;
|
|
181
|
+
deduplicate?: (items: T[]) => T[];
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Batch processing for grouped operations
|
|
185
|
+
*/
|
|
186
|
+
export interface IBatchProcessor<T> {
|
|
187
|
+
add(item: T): void;
|
|
188
|
+
addMany(items: T[]): void;
|
|
189
|
+
flush(): void;
|
|
190
|
+
clear(): void;
|
|
191
|
+
size(): number;
|
|
192
|
+
isIdle(): boolean;
|
|
193
|
+
destroy(): void;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Event handler storage and lookup
|
|
197
|
+
*/
|
|
198
|
+
export interface IEventHandlerRegistry {
|
|
199
|
+
register(elementId: string, handlers: IElementEventHandlers): void;
|
|
200
|
+
unregister(elementId: string): void;
|
|
201
|
+
update(elementId: string, handlers: IElementEventHandlers, merge: boolean): void;
|
|
202
|
+
get(elementId: string): IElementEventHandlers | undefined;
|
|
203
|
+
getHandler(elementId: string, handlerName: keyof IElementEventHandlers): ((event: any) => void) | undefined;
|
|
204
|
+
size(): number;
|
|
205
|
+
clear(): void;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/reactive/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectPool - Object pooling for virtual rendering
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Reuses objects instead of creating/destroying (10x faster scroll).
|
|
6
|
+
* Uses PoolStatsTracker for monitoring.
|
|
7
|
+
*
|
|
8
|
+
* @performance
|
|
9
|
+
* - Traditional: User scrolls → destroy 50 cells → create 50 new (10-15ms)
|
|
10
|
+
* - Pooling: User scrolls → release 50 → acquire 50 from pool (1-2ms)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const cellPool = new ObjectPool({
|
|
15
|
+
* factory: () => document.createElement('div'),
|
|
16
|
+
* reset: (div) => div.innerHTML = '',
|
|
17
|
+
* initialSize: 50,
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* const cell = cellPool.acquire();
|
|
21
|
+
* cell.textContent = 'Cell content';
|
|
22
|
+
* document.body.appendChild(cell);
|
|
23
|
+
*
|
|
24
|
+
* // Later: release back to pool
|
|
25
|
+
* document.body.removeChild(cell);
|
|
26
|
+
* cellPool.release(cell);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
import { type ObjectPoolStats } from './core/pool-stats';
|
|
30
|
+
export type { ObjectPoolStats };
|
|
31
|
+
export interface ObjectPoolOptions<T> {
|
|
32
|
+
factory: () => T;
|
|
33
|
+
reset?: (obj: T) => void;
|
|
34
|
+
validate?: (obj: T) => boolean;
|
|
35
|
+
initialSize?: number;
|
|
36
|
+
maxSize?: number;
|
|
37
|
+
}
|
|
38
|
+
export declare class ObjectPool<T> {
|
|
39
|
+
private pool;
|
|
40
|
+
private factory;
|
|
41
|
+
private reset?;
|
|
42
|
+
private validate?;
|
|
43
|
+
private maxSize;
|
|
44
|
+
private stats;
|
|
45
|
+
constructor(options: ObjectPoolOptions<T>);
|
|
46
|
+
/**
|
|
47
|
+
* Acquire object from pool (reuse or create)
|
|
48
|
+
*
|
|
49
|
+
* @performance O(1) - pop from array
|
|
50
|
+
*/
|
|
51
|
+
acquire(): T;
|
|
52
|
+
/**
|
|
53
|
+
* Release object back to pool
|
|
54
|
+
*
|
|
55
|
+
* @performance O(1) - push to array + O(reset)
|
|
56
|
+
*/
|
|
57
|
+
release(obj: T): void;
|
|
58
|
+
/**
|
|
59
|
+
* Create new object
|
|
60
|
+
*
|
|
61
|
+
* @private
|
|
62
|
+
*/
|
|
63
|
+
private createNew;
|
|
64
|
+
/**
|
|
65
|
+
* Acquire multiple objects from pool
|
|
66
|
+
*/
|
|
67
|
+
acquireMany(count: number): T[];
|
|
68
|
+
/**
|
|
69
|
+
* Release multiple objects back to pool
|
|
70
|
+
*/
|
|
71
|
+
releaseMany(objects: T[]): void;
|
|
72
|
+
/**
|
|
73
|
+
* Prewarm pool with objects
|
|
74
|
+
*/
|
|
75
|
+
prewarm(count: number): void;
|
|
76
|
+
/**
|
|
77
|
+
* Get current pool size
|
|
78
|
+
*/
|
|
79
|
+
size(): number;
|
|
80
|
+
/**
|
|
81
|
+
* Get pool statistics
|
|
82
|
+
*/
|
|
83
|
+
getStats(): ObjectPoolStats;
|
|
84
|
+
/**
|
|
85
|
+
* Shrink pool to target size
|
|
86
|
+
*/
|
|
87
|
+
shrink(targetSize: number): void;
|
|
88
|
+
/**
|
|
89
|
+
* Clear pool
|
|
90
|
+
*/
|
|
91
|
+
clear(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Destroy pool
|
|
94
|
+
*/
|
|
95
|
+
destroy(): void;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=object-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-pool.d.ts","sourceRoot":"","sources":["../../../src/reactive/object-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG3E,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAC,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAsB;IACvC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA0B;gBAE3B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAWzC;;;;OAIG;IACH,OAAO,IAAI,CAAC;IAqBZ;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAqBrB;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;IAQ/B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI;IAI/B;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAU5B;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,QAAQ,IAAI,eAAe;IAI3B;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMhC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReactiveState - Generic reactive state container
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Observable state with targeted subscriptions (O(m) vs O(n)).
|
|
6
|
+
* Supports dependency injection for testing and customization.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Inheritance (backward compatible)
|
|
11
|
+
* class ColumnModel extends ReactiveState<ColumnState, ColumnEvent> {
|
|
12
|
+
* setWidth(id: string, width: number): void {
|
|
13
|
+
* this.setState(id, { ...state, width }, event);
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* // Composition with DI (new, flexible)
|
|
18
|
+
* class ColumnModel {
|
|
19
|
+
* constructor(private state: IReactiveState<ColumnState, ColumnEvent>) {}
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* // Can inject custom implementation
|
|
23
|
+
* const model = new ColumnModel(new ReactiveState());
|
|
24
|
+
* const testModel = new ColumnModel(mockState);
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @template T - State value type
|
|
28
|
+
* @template E - Event type
|
|
29
|
+
*/
|
|
30
|
+
import type { IReactiveState, ISubscriber, ISubscriptionManager, IBatchManager } from './interfaces';
|
|
31
|
+
export declare class ReactiveState<T, E> implements IReactiveState<T, E> {
|
|
32
|
+
private state;
|
|
33
|
+
private subscriptions;
|
|
34
|
+
private batching;
|
|
35
|
+
private eventHistory?;
|
|
36
|
+
/**
|
|
37
|
+
* Create ReactiveState with optional dependency injection
|
|
38
|
+
*
|
|
39
|
+
* @param subscriptions - Custom subscription manager (default: SubscriptionManager)
|
|
40
|
+
* @param batching - Custom batch manager (default: BatchManager)
|
|
41
|
+
* @param historySize - Event history size for debugging (default: 0, disabled)
|
|
42
|
+
*/
|
|
43
|
+
constructor(subscriptions?: ISubscriptionManager<E>, batching?: IBatchManager<E>, historySize?: number);
|
|
44
|
+
/**
|
|
45
|
+
* Subscribe to specific key changes (targeted O(m))
|
|
46
|
+
*/
|
|
47
|
+
subscribeToKey(key: string, subscriber: ISubscriber<E>): () => void;
|
|
48
|
+
/**
|
|
49
|
+
* Subscribe to all state changes (global observer)
|
|
50
|
+
*/
|
|
51
|
+
subscribeGlobal(subscriber: ISubscriber<E>): () => void;
|
|
52
|
+
/**
|
|
53
|
+
* Update state and notify subscribers
|
|
54
|
+
*
|
|
55
|
+
* @protected - For subclass use
|
|
56
|
+
*/
|
|
57
|
+
protected setState(key: string, value: T, event: E): void;
|
|
58
|
+
/**
|
|
59
|
+
* Batch multiple updates (single notification)
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* columnModel.batch(() => {
|
|
64
|
+
* columnModel.setWidth('col-0', 150);
|
|
65
|
+
* columnModel.setWidth('col-1', 200);
|
|
66
|
+
* columnModel.setWidth('col-2', 180);
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
protected batch(updates: () => void): void;
|
|
71
|
+
/**
|
|
72
|
+
* Flush batched events
|
|
73
|
+
*
|
|
74
|
+
* @private
|
|
75
|
+
*/
|
|
76
|
+
private flushBatch;
|
|
77
|
+
/**
|
|
78
|
+
* Get state for key
|
|
79
|
+
*/
|
|
80
|
+
protected getState(key: string): T | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* Get all state
|
|
83
|
+
*/
|
|
84
|
+
protected getAllState(): Map<string, T>;
|
|
85
|
+
/**
|
|
86
|
+
* Check if key has state
|
|
87
|
+
*/
|
|
88
|
+
protected hasState(key: string): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Delete state for key and optionally notify
|
|
91
|
+
*/
|
|
92
|
+
protected deleteState(key: string, event?: E): void;
|
|
93
|
+
/**
|
|
94
|
+
* Get all state keys
|
|
95
|
+
*/
|
|
96
|
+
protected getKeys(): string[];
|
|
97
|
+
/**
|
|
98
|
+
* Get subscriber count for key
|
|
99
|
+
*/
|
|
100
|
+
getSubscriberCount(key: string): number;
|
|
101
|
+
/**
|
|
102
|
+
* Get global subscriber count
|
|
103
|
+
*/
|
|
104
|
+
getGlobalSubscriberCount(): number;
|
|
105
|
+
/**
|
|
106
|
+
* Get event history (if enabled)
|
|
107
|
+
* Returns [oldest, ..., newest]
|
|
108
|
+
*/
|
|
109
|
+
getEventHistory(): E[];
|
|
110
|
+
/**
|
|
111
|
+
* Get last N events from history
|
|
112
|
+
*/
|
|
113
|
+
getLastEvents(count: number): E[];
|
|
114
|
+
/**
|
|
115
|
+
* Clear event history
|
|
116
|
+
*/
|
|
117
|
+
clearEventHistory(): void;
|
|
118
|
+
/**
|
|
119
|
+
* Clear all state and subscribers
|
|
120
|
+
*/
|
|
121
|
+
destroy(): void;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Subscriber interface (backward compatible)
|
|
125
|
+
* @deprecated Use ISubscriber from interfaces.ts
|
|
126
|
+
*/
|
|
127
|
+
export interface StateSubscriber<E> {
|
|
128
|
+
onChange(event: E): void;
|
|
129
|
+
onBatchChange?(events: E[]): void;
|
|
130
|
+
}
|
|
131
|
+
export type { ISubscriber, IReactiveState } from './interfaces';
|
|
132
|
+
//# sourceMappingURL=reactive-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactive-state.d.ts","sourceRoot":"","sources":["../../../src/reactive/reactive-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,aAAa,EACd,MAAM,cAAc,CAAC;AAKtB,qBAAa,aAAa,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,YAAY,CAAC,CAAgB;IAErC;;;;;;OAMG;gBAED,aAAa,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,EACvC,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAC3B,WAAW,GAAE,MAAU;IAUzB;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAInE;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAIvD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAezD;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAiB1C;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI9C;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAIvC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI;IASnD;;OAEG;IACH,SAAS,CAAC,OAAO,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACH,wBAAwB,IAAI,MAAM;IAIlC;;;OAGG;IACH,eAAe,IAAI,CAAC,EAAE;IAItB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;IAKjC;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;CACnC;AAGD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@zengrid/shared",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"description": "14 advanced data structures and algorithms for high-performance grids",
|
|
5
|
-
"main": "./dist/index.cjs",
|
|
6
|
-
"module": "./dist/index.esm.js",
|
|
7
|
-
"types": "./dist/index.d.ts",
|
|
8
|
-
"sideEffects": false,
|
|
9
|
-
"exports": {
|
|
10
|
-
".": {
|
|
11
|
-
"types": "./dist/index.d.ts",
|
|
12
|
-
"import": "./dist/index.esm.js",
|
|
13
|
-
"require": "./dist/index.cjs"
|
|
14
|
-
},
|
|
15
|
-
"./algorithms/*": {
|
|
16
|
-
"types": "./dist/algorithms/*/index.d.ts",
|
|
17
|
-
"import": "./dist/algorithms/*/index.esm.js",
|
|
18
|
-
"require": "./dist/algorithms/*/index.cjs"
|
|
19
|
-
},
|
|
20
|
-
"./data-structures/*": {
|
|
21
|
-
"types": "./dist/data-structures/*/index.d.ts",
|
|
22
|
-
"import": "./dist/data-structures/*/index.esm.js",
|
|
23
|
-
"require": "./dist/data-structures/*/index.cjs"
|
|
24
|
-
},
|
|
25
|
-
"./types": {
|
|
26
|
-
"types": "./dist/types/index.d.ts",
|
|
27
|
-
"import": "./dist/types/index.esm.js",
|
|
28
|
-
"require": "./dist/types/index.cjs"
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
"files": [
|
|
32
|
-
"dist",
|
|
33
|
-
"README.md"
|
|
34
|
-
],
|
|
35
|
-
"keywords": [
|
|
36
|
-
"algorithms",
|
|
37
|
-
"data-structures",
|
|
38
|
-
"grid",
|
|
39
|
-
"utilities"
|
|
40
|
-
],
|
|
41
|
-
"author": "ZenGrid Team",
|
|
42
|
-
"license": "MIT",
|
|
43
|
-
"repository": {
|
|
44
|
-
"type": "git",
|
|
45
|
-
"url": "https://github.com/zengrid-dev/zengrid.git",
|
|
46
|
-
"directory": "packages/shared"
|
|
47
|
-
},
|
|
48
|
-
"bugs": {
|
|
49
|
-
"url": "https://github.com/zengrid-dev/zengrid/issues"
|
|
50
|
-
},
|
|
51
|
-
"homepage": "https://github.com/zengrid-dev/zengrid#readme"
|
|
52
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@zengrid/shared",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "14 advanced data structures and algorithms for high-performance grids",
|
|
5
|
+
"main": "./dist/index.cjs",
|
|
6
|
+
"module": "./dist/index.esm.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.esm.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./algorithms/*": {
|
|
16
|
+
"types": "./dist/algorithms/*/index.d.ts",
|
|
17
|
+
"import": "./dist/algorithms/*/index.esm.js",
|
|
18
|
+
"require": "./dist/algorithms/*/index.cjs"
|
|
19
|
+
},
|
|
20
|
+
"./data-structures/*": {
|
|
21
|
+
"types": "./dist/data-structures/*/index.d.ts",
|
|
22
|
+
"import": "./dist/data-structures/*/index.esm.js",
|
|
23
|
+
"require": "./dist/data-structures/*/index.cjs"
|
|
24
|
+
},
|
|
25
|
+
"./types": {
|
|
26
|
+
"types": "./dist/types/index.d.ts",
|
|
27
|
+
"import": "./dist/types/index.esm.js",
|
|
28
|
+
"require": "./dist/types/index.cjs"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"README.md"
|
|
34
|
+
],
|
|
35
|
+
"keywords": [
|
|
36
|
+
"algorithms",
|
|
37
|
+
"data-structures",
|
|
38
|
+
"grid",
|
|
39
|
+
"utilities"
|
|
40
|
+
],
|
|
41
|
+
"author": "ZenGrid Team",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"repository": {
|
|
44
|
+
"type": "git",
|
|
45
|
+
"url": "https://github.com/zengrid-dev/zengrid.git",
|
|
46
|
+
"directory": "packages/shared"
|
|
47
|
+
},
|
|
48
|
+
"bugs": {
|
|
49
|
+
"url": "https://github.com/zengrid-dev/zengrid/issues"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/zengrid-dev/zengrid#readme"
|
|
52
|
+
}
|