@zengrid/shared 1.0.3 → 1.1.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 +48 -0
- package/dist/index.cjs.default.js +1 -0
- package/dist/index.cjs.js +8696 -0
- package/dist/index.cjs.mjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +8640 -0
- package/dist/package.json +54 -0
- package/dist/src/algorithms/filter/bloom-filter.d.ts +120 -0
- package/dist/src/algorithms/filter/bloom-filter.d.ts.map +1 -0
- package/dist/src/algorithms/filter/index.d.ts +7 -0
- package/dist/src/algorithms/filter/index.d.ts.map +1 -0
- package/dist/src/algorithms/graph/bfs.d.ts +71 -0
- package/dist/src/algorithms/graph/bfs.d.ts.map +1 -0
- package/dist/src/algorithms/graph/dfs.d.ts +62 -0
- package/dist/src/algorithms/graph/dfs.d.ts.map +1 -0
- package/dist/src/algorithms/graph/graph.interface.d.ts +63 -0
- package/dist/src/algorithms/graph/graph.interface.d.ts.map +1 -0
- package/dist/src/algorithms/graph/index.d.ts +9 -0
- package/dist/src/algorithms/graph/index.d.ts.map +1 -0
- package/dist/src/algorithms/index.d.ts +11 -0
- package/dist/src/algorithms/index.d.ts.map +1 -0
- package/dist/src/algorithms/pattern/index.d.ts +8 -0
- package/dist/src/algorithms/pattern/index.d.ts.map +1 -0
- package/dist/src/algorithms/pattern/sequence-detector.d.ts +62 -0
- package/dist/src/algorithms/pattern/sequence-detector.d.ts.map +1 -0
- package/dist/src/algorithms/search/binary-search.d.ts +86 -0
- package/dist/src/algorithms/search/binary-search.d.ts.map +1 -0
- package/dist/src/algorithms/search/index.d.ts +6 -0
- package/dist/src/algorithms/search/index.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/comparators.d.ts +126 -0
- package/dist/src/algorithms/sorting/comparators.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/index.d.ts +9 -0
- package/dist/src/algorithms/sorting/index.d.ts.map +1 -0
- package/dist/src/algorithms/sorting/sorting.interface.d.ts +38 -0
- package/dist/src/algorithms/sorting/sorting.interface.d.ts.map +1 -0
- 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 +55 -0
- package/dist/src/algorithms/sorting/timsort.d.ts.map +1 -0
- 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 +52 -0
- package/dist/src/data-structures/column-store/column-store.d.ts.map +1 -0
- package/dist/src/data-structures/column-store/column-store.interface.d.ts +155 -0
- package/dist/src/data-structures/column-store/column-store.interface.d.ts.map +1 -0
- package/dist/src/data-structures/column-store/index.d.ts +6 -0
- package/dist/src/data-structures/column-store/index.d.ts.map +1 -0
- package/dist/src/data-structures/command-stack/command-stack.d.ts +61 -0
- package/dist/src/data-structures/command-stack/command-stack.d.ts.map +1 -0
- package/dist/src/data-structures/command-stack/command-stack.interface.d.ts +80 -0
- package/dist/src/data-structures/command-stack/command-stack.interface.d.ts.map +1 -0
- package/dist/src/data-structures/command-stack/index.d.ts +3 -0
- package/dist/src/data-structures/command-stack/index.d.ts.map +1 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.d.ts +147 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.d.ts.map +1 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.interface.d.ts +161 -0
- package/dist/src/data-structures/dependency-graph/dependency-graph.interface.d.ts.map +1 -0
- package/dist/src/data-structures/dependency-graph/index.d.ts +8 -0
- package/dist/src/data-structures/dependency-graph/index.d.ts.map +1 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts +84 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts.map +1 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.interface.d.ts +185 -0
- package/dist/src/data-structures/disjoint-set/disjoint-set.interface.d.ts.map +1 -0
- package/dist/src/data-structures/disjoint-set/index.d.ts +7 -0
- package/dist/src/data-structures/disjoint-set/index.d.ts.map +1 -0
- package/dist/src/data-structures/index-map/index-map.d.ts +150 -0
- package/dist/src/data-structures/index-map/index-map.d.ts.map +1 -0
- package/dist/src/data-structures/index-map/index-map.interface.d.ts +186 -0
- package/dist/src/data-structures/index-map/index-map.interface.d.ts.map +1 -0
- package/dist/src/data-structures/index-map/index.d.ts +6 -0
- package/dist/src/data-structures/index-map/index.d.ts.map +1 -0
- package/dist/src/data-structures/index.d.ts +36 -0
- package/dist/src/data-structures/index.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/index.d.ts +7 -0
- package/dist/src/data-structures/interval-tree/index.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/interval-tree.d.ts +58 -0
- package/dist/src/data-structures/interval-tree/interval-tree.d.ts.map +1 -0
- package/dist/src/data-structures/interval-tree/interval-tree.interface.d.ts +212 -0
- package/dist/src/data-structures/interval-tree/interval-tree.interface.d.ts.map +1 -0
- 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 +3 -0
- package/dist/src/data-structures/lru-cache/index.d.ts.map +1 -0
- package/dist/src/data-structures/lru-cache/lru-cache.d.ts +134 -0
- package/dist/src/data-structures/lru-cache/lru-cache.d.ts.map +1 -0
- package/dist/src/data-structures/lru-cache/lru-cache.interface.d.ts +173 -0
- package/dist/src/data-structures/lru-cache/lru-cache.interface.d.ts.map +1 -0
- package/dist/src/data-structures/prefix-sum-array/index.d.ts +6 -0
- package/dist/src/data-structures/prefix-sum-array/index.d.ts.map +1 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts +63 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts.map +1 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts +80 -0
- package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts.map +1 -0
- 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/index.d.ts +8 -0
- package/dist/src/data-structures/rtree/index.d.ts.map +1 -0
- package/dist/src/data-structures/rtree/rtree.d.ts +81 -0
- package/dist/src/data-structures/rtree/rtree.d.ts.map +1 -0
- package/dist/src/data-structures/rtree/rtree.interface.d.ts +143 -0
- package/dist/src/data-structures/rtree/rtree.interface.d.ts.map +1 -0
- 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 +4 -0
- package/dist/src/data-structures/segment-tree/index.d.ts.map +1 -0
- 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 +30 -0
- package/dist/src/data-structures/segment-tree/segment-tree.d.ts.map +1 -0
- package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts +202 -0
- package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts.map +1 -0
- 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/index.d.ts +4 -0
- package/dist/src/data-structures/skip-list/index.d.ts.map +1 -0
- package/dist/src/data-structures/skip-list/skip-list.d.ts +137 -0
- package/dist/src/data-structures/skip-list/skip-list.d.ts.map +1 -0
- package/dist/src/data-structures/skip-list/skip-list.interface.d.ts +223 -0
- package/dist/src/data-structures/skip-list/skip-list.interface.d.ts.map +1 -0
- package/dist/src/data-structures/sparse-matrix/index.d.ts +6 -0
- package/dist/src/data-structures/sparse-matrix/index.d.ts.map +1 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts +44 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts.map +1 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.interface.d.ts +105 -0
- package/dist/src/data-structures/sparse-matrix/sparse-matrix.interface.d.ts.map +1 -0
- package/dist/src/data-structures/suffix-array/index.d.ts +3 -0
- package/dist/src/data-structures/suffix-array/index.d.ts.map +1 -0
- package/dist/src/data-structures/suffix-array/suffix-array.d.ts +102 -0
- package/dist/src/data-structures/suffix-array/suffix-array.d.ts.map +1 -0
- package/dist/src/data-structures/suffix-array/suffix-array.interface.d.ts +117 -0
- package/dist/src/data-structures/suffix-array/suffix-array.interface.d.ts.map +1 -0
- package/dist/src/data-structures/trie/index.d.ts +8 -0
- package/dist/src/data-structures/trie/index.d.ts.map +1 -0
- package/dist/src/data-structures/trie/trie.d.ts +205 -0
- package/dist/src/data-structures/trie/trie.d.ts.map +1 -0
- package/dist/src/data-structures/trie/trie.interface.d.ts +117 -0
- package/dist/src/data-structures/trie/trie.interface.d.ts.map +1 -0
- package/dist/src/index.d.ts +54 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/patterns/coordinator.d.ts +90 -0
- package/dist/src/patterns/coordinator.d.ts.map +1 -0
- package/dist/src/patterns/event-emitter.d.ts +106 -0
- package/dist/src/patterns/event-emitter.d.ts.map +1 -0
- package/dist/src/patterns/factory.d.ts +120 -0
- package/dist/src/patterns/factory.d.ts.map +1 -0
- package/dist/src/patterns/index.d.ts +21 -0
- package/dist/src/patterns/index.d.ts.map +1 -0
- package/dist/src/patterns/mediator.d.ts +116 -0
- package/dist/src/patterns/mediator.d.ts.map +1 -0
- package/dist/src/patterns/object-pool.d.ts +178 -0
- package/dist/src/patterns/object-pool.d.ts.map +1 -0
- package/dist/src/patterns/observer.d.ts +89 -0
- package/dist/src/patterns/observer.d.ts.map +1 -0
- package/dist/src/patterns/operation-mode.d.ts +75 -0
- package/dist/src/patterns/operation-mode.d.ts.map +1 -0
- package/dist/src/patterns/state-machine.d.ts +122 -0
- package/dist/src/patterns/state-machine.d.ts.map +1 -0
- 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/dist/src/types/common.d.ts +56 -0
- package/dist/src/types/common.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +5 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/utils/index.d.ts +7 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/timing.d.ts +104 -0
- package/dist/src/utils/timing.d.ts.map +1 -0
- package/dist/src/utils/timing.interface.d.ts +96 -0
- package/dist/src/utils/timing.interface.d.ts.map +1 -0
- package/package.json +52 -52
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;CACnC;AAMD;;;;;GAKG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,EAAE,CAAC;IAClC;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAEpE;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAExD;;OAEG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAExC;;OAEG;IACH,wBAAwB,IAAI,MAAM,CAAC;IAEnC;;OAEG;IACH,eAAe,IAAI,CAAC,EAAE,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IAElC;;OAEG;IACH,iBAAiB,IAAI,IAAI,CAAC;IAE1B;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;IAIhB,OAAO,CAAC,EAAE,CAAC,CAAC;CACb;AAMD;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IACpE,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IACxD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACvC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACjD,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3C,wBAAwB,IAAI,MAAM,CAAC;IACnC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,KAAK,IAAI,IAAI,CAAC;CACf;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,UAAU,IAAI,OAAO,CAAC;IACtB,UAAU,IAAI,IAAI,CAAC;IACnB,SAAS,IAAI,IAAI,CAAC;IAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACtC,WAAW,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAChD,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7E,KAAK,IAAI,IAAI,CAAC;CACf;AAMD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC1E,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzF,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,mBAAmB,IAAI,MAAM,EAAE,CAAC;IAChC,kBAAkB,IAAI,MAAM,CAAC;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,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;IAEjB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC,CAAC;IACb,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IAChC,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IAChC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,IAAI,MAAM,CAAC;IACf,QAAQ,IAAI,gBAAgB,CAAC;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;CACjB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACnB,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,MAAM,CAAC;IACf,MAAM,IAAI,OAAO,CAAC;IAClB,OAAO,IAAI,IAAI,CAAC;CACjB;AAMD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACnE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACjF,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAC;IAC1D,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,qBAAqB,GACvC,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtC,IAAI,IAAI,MAAM,CAAC;IACf,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common types used across ZenGrid algorithms and data structures
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Comparator function for sorting and ordering
|
|
6
|
+
* @returns Negative if a < b, zero if a === b, positive if a > b
|
|
7
|
+
*/
|
|
8
|
+
export type Comparator<T> = (a: T, b: T) => number;
|
|
9
|
+
/**
|
|
10
|
+
* Predicate function for filtering
|
|
11
|
+
* @returns true if the value matches the condition
|
|
12
|
+
*/
|
|
13
|
+
export type Predicate<T> = (value: T) => boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Equality function for comparing values
|
|
16
|
+
* @returns true if values are equal
|
|
17
|
+
*/
|
|
18
|
+
export type EqualityFn<T> = (a: T, b: T) => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Hash function for creating keys from values
|
|
21
|
+
* @returns string representation of the value
|
|
22
|
+
*/
|
|
23
|
+
export type HashFn<T> = (value: T) => string;
|
|
24
|
+
/**
|
|
25
|
+
* Generic range interface
|
|
26
|
+
*/
|
|
27
|
+
export interface Range {
|
|
28
|
+
start: number;
|
|
29
|
+
end: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 2D rectangle interface
|
|
33
|
+
*/
|
|
34
|
+
export interface Rectangle {
|
|
35
|
+
x: number;
|
|
36
|
+
y: number;
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 2D point interface
|
|
42
|
+
*/
|
|
43
|
+
export interface Point {
|
|
44
|
+
x: number;
|
|
45
|
+
y: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Bounding box interface
|
|
49
|
+
*/
|
|
50
|
+
export interface BoundingBox {
|
|
51
|
+
minX: number;
|
|
52
|
+
minY: number;
|
|
53
|
+
maxX: number;
|
|
54
|
+
maxY: number;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/types/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;AAEnD;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,MAAM,EACN,KAAK,EACL,SAAS,EACT,KAAK,EACL,WAAW,GACZ,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Timing utilities for performance optimization
|
|
3
|
+
* @module @zengrid/shared/utils/timing
|
|
4
|
+
*/
|
|
5
|
+
import type { DebounceOptions, DebouncedFunction, ThrottleOptions, ThrottledFunction, RAFBatchScheduler } from './timing.interface';
|
|
6
|
+
/**
|
|
7
|
+
* Creates a debounced function that delays invoking func until after wait milliseconds
|
|
8
|
+
* have elapsed since the last time the debounced function was invoked.
|
|
9
|
+
*
|
|
10
|
+
* @param func - The function to debounce
|
|
11
|
+
* @param wait - The number of milliseconds to delay
|
|
12
|
+
* @param options - Options object
|
|
13
|
+
* @returns Debounced function with cancel and flush methods
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const handleResize = debounce(() => {
|
|
18
|
+
* console.log('Window resized');
|
|
19
|
+
* }, 250);
|
|
20
|
+
*
|
|
21
|
+
* window.addEventListener('resize', handleResize);
|
|
22
|
+
*
|
|
23
|
+
* // Cancel pending invocations
|
|
24
|
+
* handleResize.cancel();
|
|
25
|
+
*
|
|
26
|
+
* // Immediately invoke
|
|
27
|
+
* handleResize.flush();
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number, options?: DebounceOptions): DebouncedFunction<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a throttled function that only invokes func at most once per every wait milliseconds.
|
|
33
|
+
*
|
|
34
|
+
* @param func - The function to throttle
|
|
35
|
+
* @param wait - The number of milliseconds to throttle invocations to
|
|
36
|
+
* @param options - Options object
|
|
37
|
+
* @returns Throttled function with cancel method
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const handleScroll = throttle(() => {
|
|
42
|
+
* console.log('Scrolling');
|
|
43
|
+
* }, 100);
|
|
44
|
+
*
|
|
45
|
+
* window.addEventListener('scroll', handleScroll);
|
|
46
|
+
*
|
|
47
|
+
* // Cancel pending invocation
|
|
48
|
+
* handleScroll.cancel();
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function throttle<T extends (...args: any[]) => any>(func: T, wait: number, options?: ThrottleOptions): ThrottledFunction<T>;
|
|
52
|
+
/**
|
|
53
|
+
* Creates a RAF (RequestAnimationFrame) batch scheduler that coalesces multiple
|
|
54
|
+
* updates into a single animation frame.
|
|
55
|
+
*
|
|
56
|
+
* Useful for optimizing frequent DOM updates by batching them together.
|
|
57
|
+
*
|
|
58
|
+
* @returns RAF batch scheduler
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const scheduler = createRAFBatchScheduler();
|
|
63
|
+
*
|
|
64
|
+
* // Multiple calls in same frame will be batched
|
|
65
|
+
* scheduler.schedule(() => console.log('Update 1'));
|
|
66
|
+
* scheduler.schedule(() => console.log('Update 2'));
|
|
67
|
+
* scheduler.schedule(() => console.log('Update 3'));
|
|
68
|
+
* // All three will run in the same animation frame
|
|
69
|
+
*
|
|
70
|
+
* // Cancel all pending
|
|
71
|
+
* scheduler.cancelAll();
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function createRAFBatchScheduler(): RAFBatchScheduler;
|
|
75
|
+
/**
|
|
76
|
+
* Delays execution for specified milliseconds. Returns a promise.
|
|
77
|
+
*
|
|
78
|
+
* @param ms - Milliseconds to delay
|
|
79
|
+
* @returns Promise that resolves after delay
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* await delay(1000); // Wait 1 second
|
|
84
|
+
* console.log('1 second later');
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export declare function delay(ms: number): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Creates a timeout promise that rejects after specified milliseconds
|
|
90
|
+
*
|
|
91
|
+
* @param ms - Milliseconds before timeout
|
|
92
|
+
* @param message - Error message
|
|
93
|
+
* @returns Promise that rejects after timeout
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const result = await Promise.race([
|
|
98
|
+
* fetchData(),
|
|
99
|
+
* timeout(5000, 'Request timeout')
|
|
100
|
+
* ]);
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export declare function timeout(ms: number, message?: string): Promise<never>;
|
|
104
|
+
//# sourceMappingURL=timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../../src/utils/timing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,iBAAiB,CAAC,CAAC,CAAC,CA0HtB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,iBAAiB,CAAC,CAAC,CAAC,CAQtB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAoD3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAIvE"}
|