@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,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Machine Pattern
|
|
3
|
+
*
|
|
4
|
+
* Manages state transitions in a predictable way, ensuring
|
|
5
|
+
* only valid state transitions occur.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* type GridState = 'idle' | 'loading' | 'scrolling' | 'editing';
|
|
10
|
+
* type GridEvent = 'load' | 'scroll' | 'edit' | 'done';
|
|
11
|
+
*
|
|
12
|
+
* const machine = new StateMachine<GridState, GridEvent>('idle');
|
|
13
|
+
*
|
|
14
|
+
* // Define valid transitions
|
|
15
|
+
* machine.addTransition('idle', 'load', 'loading');
|
|
16
|
+
* machine.addTransition('loading', 'done', 'idle');
|
|
17
|
+
* machine.addTransition('idle', 'scroll', 'scrolling');
|
|
18
|
+
* machine.addTransition('scrolling', 'done', 'idle');
|
|
19
|
+
* machine.addTransition('idle', 'edit', 'editing');
|
|
20
|
+
* machine.addTransition('editing', 'done', 'idle');
|
|
21
|
+
*
|
|
22
|
+
* // Listen to state changes
|
|
23
|
+
* machine.onTransition((from, event, to) => {
|
|
24
|
+
* console.log(`${from} --[${event}]--> ${to}`);
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // Trigger transitions
|
|
28
|
+
* machine.transition('load'); // idle -> loading
|
|
29
|
+
* machine.transition('done'); // loading -> idle
|
|
30
|
+
* machine.transition('invalid'); // Error: no valid transition
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export interface StateMachineOptions {
|
|
34
|
+
/** Enable strict mode (throw errors on invalid transitions) */
|
|
35
|
+
strict?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface TransitionHandler<S, E> {
|
|
38
|
+
(from: S, event: E, to: S): void;
|
|
39
|
+
}
|
|
40
|
+
export interface IStateMachine<S, E> {
|
|
41
|
+
/** Get the current state */
|
|
42
|
+
readonly state: S;
|
|
43
|
+
/** Attempt a state transition */
|
|
44
|
+
transition(event: E): boolean;
|
|
45
|
+
/** Check if a state is the current state */
|
|
46
|
+
is(state: S): boolean;
|
|
47
|
+
/** Check if a transition is valid from the current state */
|
|
48
|
+
can(event: E): boolean;
|
|
49
|
+
/** Add a valid transition */
|
|
50
|
+
addTransition(from: S, event: E, to: S): void;
|
|
51
|
+
/** Remove a transition */
|
|
52
|
+
removeTransition(from: S, event: E): void;
|
|
53
|
+
/** Register a transition handler */
|
|
54
|
+
onTransition(handler: TransitionHandler<S, E>): () => void;
|
|
55
|
+
/** Reset to initial state */
|
|
56
|
+
reset(): void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* State machine implementation
|
|
60
|
+
*
|
|
61
|
+
* @typeParam S - State type (string literal union recommended)
|
|
62
|
+
* @typeParam E - Event type (string literal union recommended)
|
|
63
|
+
*/
|
|
64
|
+
export declare class StateMachine<S extends string = string, E extends string = string> implements IStateMachine<S, E> {
|
|
65
|
+
private currentState;
|
|
66
|
+
private readonly initialState;
|
|
67
|
+
private transitions;
|
|
68
|
+
private handlers;
|
|
69
|
+
private readonly strict;
|
|
70
|
+
constructor(initialState: S, options?: StateMachineOptions);
|
|
71
|
+
/**
|
|
72
|
+
* Get the current state
|
|
73
|
+
*/
|
|
74
|
+
get state(): S;
|
|
75
|
+
/**
|
|
76
|
+
* Add a valid transition
|
|
77
|
+
*
|
|
78
|
+
* @param from - The state to transition from
|
|
79
|
+
* @param event - The event that triggers the transition
|
|
80
|
+
* @param to - The state to transition to
|
|
81
|
+
*/
|
|
82
|
+
addTransition(from: S, event: E, to: S): void;
|
|
83
|
+
/**
|
|
84
|
+
* Remove a transition
|
|
85
|
+
*/
|
|
86
|
+
removeTransition(from: S, event: E): void;
|
|
87
|
+
/**
|
|
88
|
+
* Attempt a state transition
|
|
89
|
+
*
|
|
90
|
+
* @param event - The event to trigger
|
|
91
|
+
* @returns true if the transition was successful, false otherwise
|
|
92
|
+
*/
|
|
93
|
+
transition(event: E): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Check if the current state matches
|
|
96
|
+
*/
|
|
97
|
+
is(state: S): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Check if a transition is valid from the current state
|
|
100
|
+
*/
|
|
101
|
+
can(event: E): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Register a transition handler
|
|
104
|
+
*
|
|
105
|
+
* @param handler - Function called on each transition
|
|
106
|
+
* @returns Unsubscribe function
|
|
107
|
+
*/
|
|
108
|
+
onTransition(handler: TransitionHandler<S, E>): () => void;
|
|
109
|
+
/**
|
|
110
|
+
* Reset to initial state
|
|
111
|
+
*/
|
|
112
|
+
reset(): void;
|
|
113
|
+
/**
|
|
114
|
+
* Get all possible transitions from the current state
|
|
115
|
+
*/
|
|
116
|
+
getAvailableTransitions(): E[];
|
|
117
|
+
/**
|
|
118
|
+
* Get a visual representation of the state machine
|
|
119
|
+
*/
|
|
120
|
+
toGraphviz(): string;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=state-machine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../../../src/patterns/state-machine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IACjC,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAElB,iCAAiC;IACjC,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IAE9B,4CAA4C;IAC5C,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IAEtB,4DAA4D;IAC5D,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IAEvB,6BAA6B;IAC7B,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;IAE9C,0BAA0B;IAC1B,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAE1C,oCAAoC;IACpC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAE3D,6BAA6B;IAC7B,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;GAKG;AACH,qBAAa,YAAY,CACvB,CAAC,SAAS,MAAM,GAAG,MAAM,EACzB,CAAC,SAAS,MAAM,GAAG,MAAM,CACzB,YAAW,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAI;IACjC,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAErB,YAAY,EAAE,CAAC,EAAE,OAAO,GAAE,mBAAwB;IAM9D;;OAEG;IACH,IAAI,KAAK,IAAI,CAAC,CAEb;IAED;;;;;;OAMG;IACH,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI;IAO7C;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAIzC;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IA2B7B;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAIrB;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAItB;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI;IAK1D;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,uBAAuB,IAAI,CAAC,EAAE;IAK9B;;OAEG;IACH,UAAU,IAAI,MAAM;CAYrB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BatchProcessor - Batch processing for grouped operations
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Groups operations for single repaint (N updates = 1 repaint, 10x faster).
|
|
6
|
+
* Uses BatchQueue for queue management.
|
|
7
|
+
*
|
|
8
|
+
* @performance
|
|
9
|
+
* - Without: 100 column resizes = 100 reflows = 500ms
|
|
10
|
+
* - With: 100 column resizes = 1 reflow = 50ms (10x faster!)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const columnBatch = new BatchProcessor({
|
|
15
|
+
* process: (updates) => {
|
|
16
|
+
* updates.forEach(({ columnId, width }) => {
|
|
17
|
+
* updateColumnWidthInDOM(columnId, width);
|
|
18
|
+
* });
|
|
19
|
+
* },
|
|
20
|
+
* delay: 16, // One frame
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* // Queue multiple updates
|
|
24
|
+
* columnBatch.add({ columnId: 'col-1', width: 150 });
|
|
25
|
+
* columnBatch.add({ columnId: 'col-2', width: 200 });
|
|
26
|
+
* columnBatch.add({ columnId: 'col-3', width: 180 });
|
|
27
|
+
*
|
|
28
|
+
* // All processed together after 16ms
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export interface BatchProcessorOptions<T> {
|
|
32
|
+
process: (items: T[]) => void;
|
|
33
|
+
delay?: number;
|
|
34
|
+
maxBatchSize?: number;
|
|
35
|
+
deduplicate?: (items: T[]) => T[];
|
|
36
|
+
}
|
|
37
|
+
export declare class BatchProcessor<T> {
|
|
38
|
+
private queue;
|
|
39
|
+
private processor;
|
|
40
|
+
private delay;
|
|
41
|
+
private maxBatchSize?;
|
|
42
|
+
private timerId;
|
|
43
|
+
private isProcessing;
|
|
44
|
+
constructor(options: BatchProcessorOptions<T>);
|
|
45
|
+
/**
|
|
46
|
+
* Add item to batch queue
|
|
47
|
+
*/
|
|
48
|
+
add(item: T): void;
|
|
49
|
+
/**
|
|
50
|
+
* Add multiple items to batch queue
|
|
51
|
+
*/
|
|
52
|
+
addMany(items: T[]): void;
|
|
53
|
+
/**
|
|
54
|
+
* Schedule flush after delay
|
|
55
|
+
*
|
|
56
|
+
* @private
|
|
57
|
+
*/
|
|
58
|
+
private scheduleFlush;
|
|
59
|
+
/**
|
|
60
|
+
* Flush queue immediately
|
|
61
|
+
*/
|
|
62
|
+
flush(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Clear queue without processing
|
|
65
|
+
*/
|
|
66
|
+
clear(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Get current queue size
|
|
69
|
+
*/
|
|
70
|
+
size(): number;
|
|
71
|
+
/**
|
|
72
|
+
* Check if processor is idle
|
|
73
|
+
*/
|
|
74
|
+
isIdle(): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Destroy batch processor
|
|
77
|
+
*/
|
|
78
|
+
destroy(): void;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=batch-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-processor.d.ts","sourceRoot":"","sources":["../../../src/reactive/batch-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,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,qBAAa,cAAc,CAAC,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAO7C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAWlB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI;IAUzB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,KAAK,IAAI,IAAI;IA6Bb;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BatchManager - Batch event handling
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Manages batching mode and event queuing.
|
|
6
|
+
* Extracted from ReactiveState for modularity.
|
|
7
|
+
* Implements IBatchManager for loose coupling.
|
|
8
|
+
*/
|
|
9
|
+
import type { IBatchManager } from '../interfaces';
|
|
10
|
+
export declare class BatchManager<E> implements IBatchManager<E> {
|
|
11
|
+
private batchMode;
|
|
12
|
+
private batchedEvents;
|
|
13
|
+
/**
|
|
14
|
+
* Check if currently in batch mode
|
|
15
|
+
*/
|
|
16
|
+
isBatching(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Enter batch mode
|
|
19
|
+
*/
|
|
20
|
+
enterBatch(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Exit batch mode
|
|
23
|
+
*/
|
|
24
|
+
exitBatch(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Add event to batch queue
|
|
27
|
+
*/
|
|
28
|
+
addEvent(key: string, event: E): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get and clear batched events
|
|
31
|
+
*/
|
|
32
|
+
flushEvents(): Array<{
|
|
33
|
+
key: string;
|
|
34
|
+
event: E;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* Group events by key
|
|
38
|
+
*/
|
|
39
|
+
groupEventsByKey(events: Array<{
|
|
40
|
+
key: string;
|
|
41
|
+
event: E;
|
|
42
|
+
}>): Map<string, E[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Clear all batched events
|
|
45
|
+
*/
|
|
46
|
+
clear(): void;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=batch-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-manager.d.ts","sourceRoot":"","sources":["../../../../src/reactive/core/batch-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAwC;IAE7D;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAIrC;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC;IAM/C;;OAEG;IACH,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;IAa5E;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BatchQueue - Manages batching queue and deduplication
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Handles queueing items and optional deduplication.
|
|
6
|
+
* Extracted from BatchProcessor for modularity.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare class BatchQueue<T> {
|
|
11
|
+
private queue;
|
|
12
|
+
private deduplicate?;
|
|
13
|
+
constructor(deduplicate?: (items: T[]) => T[]);
|
|
14
|
+
/**
|
|
15
|
+
* Add item to queue
|
|
16
|
+
*/
|
|
17
|
+
add(item: T): void;
|
|
18
|
+
/**
|
|
19
|
+
* Add multiple items to queue
|
|
20
|
+
*/
|
|
21
|
+
addMany(items: T[]): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get queue size
|
|
24
|
+
*/
|
|
25
|
+
size(): number;
|
|
26
|
+
/**
|
|
27
|
+
* Check if queue is empty
|
|
28
|
+
*/
|
|
29
|
+
isEmpty(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Clear queue
|
|
32
|
+
*/
|
|
33
|
+
clear(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Flush queue (get and clear items)
|
|
36
|
+
*/
|
|
37
|
+
flush(): T[];
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=batch-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-queue.d.ts","sourceRoot":"","sources":["../../../../src/reactive/core/batch-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,WAAW,CAAC,CAAsB;gBAE9B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;IAI7C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAIlB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI;IAIzB;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,KAAK,IAAI,CAAC,EAAE;CAWb"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventHandlerRegistry - Manages element event handlers
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Storage and lookup for element event handlers.
|
|
6
|
+
* Extracted from EventDelegator for modularity.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export interface ElementEventHandlers {
|
|
11
|
+
onClick?: (event: MouseEvent) => void;
|
|
12
|
+
onDblClick?: (event: MouseEvent) => void;
|
|
13
|
+
onMouseDown?: (event: MouseEvent) => void;
|
|
14
|
+
onMouseUp?: (event: MouseEvent) => void;
|
|
15
|
+
onMouseEnter?: (event: MouseEvent) => void;
|
|
16
|
+
onMouseLeave?: (event: MouseEvent) => void;
|
|
17
|
+
onContextMenu?: (event: MouseEvent) => void;
|
|
18
|
+
onFocus?: (event: FocusEvent) => void;
|
|
19
|
+
onBlur?: (event: FocusEvent) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare class EventHandlerRegistry {
|
|
22
|
+
private handlers;
|
|
23
|
+
/**
|
|
24
|
+
* Register handlers for element
|
|
25
|
+
*/
|
|
26
|
+
register(elementId: string, handlers: ElementEventHandlers): void;
|
|
27
|
+
/**
|
|
28
|
+
* Unregister element handlers
|
|
29
|
+
*/
|
|
30
|
+
unregister(elementId: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Update element handlers
|
|
33
|
+
*/
|
|
34
|
+
update(elementId: string, handlers: ElementEventHandlers, merge: boolean): void;
|
|
35
|
+
/**
|
|
36
|
+
* Get handlers for element
|
|
37
|
+
*/
|
|
38
|
+
get(elementId: string): ElementEventHandlers | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Get handler for specific event type
|
|
41
|
+
*/
|
|
42
|
+
getHandler(elementId: string, handlerName: keyof ElementEventHandlers): ((event: any) => void) | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Get registry size (for monitoring)
|
|
45
|
+
*/
|
|
46
|
+
size(): number;
|
|
47
|
+
/**
|
|
48
|
+
* Clear all handlers
|
|
49
|
+
*/
|
|
50
|
+
clear(): void;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=event-handler-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-handler-registry.d.ts","sourceRoot":"","sources":["../../../../src/reactive/core/event-handler-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,oBAAoB;IACnC,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,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAA2C;IAE3D;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIjE;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAInC;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAS/E;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAIxD;;OAEG;IACH,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,oBAAoB,GACtC,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,SAAS;IAKrC;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventMapper - Maps handler names to DOM event names
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Utility for converting handler names (onClick) to DOM events (click).
|
|
6
|
+
* Extracted from EventDelegator for modularity.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
import type { ElementEventHandlers } from './event-handler-registry';
|
|
11
|
+
/**
|
|
12
|
+
* Event configuration
|
|
13
|
+
*/
|
|
14
|
+
interface EventConfig {
|
|
15
|
+
domEvent: string;
|
|
16
|
+
useCapture: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class EventMapper {
|
|
19
|
+
/**
|
|
20
|
+
* Get all supported handler names
|
|
21
|
+
*/
|
|
22
|
+
static getHandlerNames(): Array<keyof ElementEventHandlers>;
|
|
23
|
+
/**
|
|
24
|
+
* Get DOM event name from handler name
|
|
25
|
+
*/
|
|
26
|
+
static getDomEventName(handlerName: keyof ElementEventHandlers): string;
|
|
27
|
+
/**
|
|
28
|
+
* Check if event should use capture phase
|
|
29
|
+
*/
|
|
30
|
+
static shouldUseCapture(handlerName: keyof ElementEventHandlers): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Get event config
|
|
33
|
+
*/
|
|
34
|
+
static getEventConfig(handlerName: keyof ElementEventHandlers): EventConfig;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=event-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-mapper.d.ts","sourceRoot":"","sources":["../../../../src/reactive/core/event-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE;;GAEG;AACH,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAiBD,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,oBAAoB,CAAC;IAI3D;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,oBAAoB,GAAG,MAAM;IAIvE;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,oBAAoB,GAAG,OAAO;IAIzE;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,oBAAoB,GAAG,WAAW;CAG5E"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PoolStats - Object pool statistics tracking
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Tracks pool performance metrics.
|
|
6
|
+
* Extracted from ObjectPool for modularity.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export interface ObjectPoolStats {
|
|
11
|
+
available: number;
|
|
12
|
+
created: number;
|
|
13
|
+
acquired: number;
|
|
14
|
+
released: number;
|
|
15
|
+
hitRate: number;
|
|
16
|
+
maxSize: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class PoolStatsTracker {
|
|
19
|
+
private createdCount;
|
|
20
|
+
private acquireCount;
|
|
21
|
+
private releaseCount;
|
|
22
|
+
/**
|
|
23
|
+
* Increment created count
|
|
24
|
+
*/
|
|
25
|
+
incrementCreated(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Increment acquired count
|
|
28
|
+
*/
|
|
29
|
+
incrementAcquired(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Increment released count
|
|
32
|
+
*/
|
|
33
|
+
incrementReleased(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Calculate hit rate (% of acquires from pool vs created)
|
|
36
|
+
*/
|
|
37
|
+
calculateHitRate(): number;
|
|
38
|
+
/**
|
|
39
|
+
* Get statistics snapshot
|
|
40
|
+
*/
|
|
41
|
+
getStats(availableCount: number, maxSize: number): ObjectPoolStats;
|
|
42
|
+
/**
|
|
43
|
+
* Reset all counters
|
|
44
|
+
*/
|
|
45
|
+
reset(): void;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=pool-stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-stats.d.ts","sourceRoot":"","sources":["../../../../src/reactive/core/pool-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,eAAe;IAC9B,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,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;IAEzB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAQ1B;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe;IAWlE;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SubscriptionManager - Manages targeted and global subscriptions
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Handles subscriber registration and notification with O(m) targeted approach.
|
|
6
|
+
* Extracted from ReactiveState for modularity.
|
|
7
|
+
* Implements ISubscriptionManager for loose coupling.
|
|
8
|
+
*/
|
|
9
|
+
import type { ISubscriptionManager, ISubscriber } from '../interfaces';
|
|
10
|
+
export declare class SubscriptionManager<E> implements ISubscriptionManager<E> {
|
|
11
|
+
private keySubscribers;
|
|
12
|
+
private globalSubscribers;
|
|
13
|
+
/**
|
|
14
|
+
* Subscribe to specific key
|
|
15
|
+
*/
|
|
16
|
+
subscribeToKey(key: string, subscriber: ISubscriber<E>): () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Subscribe to all changes
|
|
19
|
+
*/
|
|
20
|
+
subscribeGlobal(subscriber: ISubscriber<E>): () => void;
|
|
21
|
+
/**
|
|
22
|
+
* Notify subscribers for key (immediate)
|
|
23
|
+
*/
|
|
24
|
+
notifyKey(key: string, event: E): void;
|
|
25
|
+
/**
|
|
26
|
+
* Notify subscribers with batched events
|
|
27
|
+
*/
|
|
28
|
+
notifyBatch(eventsByKey: Map<string, E[]>): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get subscriber count for key
|
|
31
|
+
*/
|
|
32
|
+
getKeySubscriberCount(key: string): number;
|
|
33
|
+
/**
|
|
34
|
+
* Get global subscriber count
|
|
35
|
+
*/
|
|
36
|
+
getGlobalSubscriberCount(): number;
|
|
37
|
+
/**
|
|
38
|
+
* Check if key has subscribers
|
|
39
|
+
*/
|
|
40
|
+
hasKeySubscribers(key: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Clear all subscribers
|
|
43
|
+
*/
|
|
44
|
+
clear(): void;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=subscription-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription-manager.d.ts","sourceRoot":"","sources":["../../../../src/reactive/core/subscription-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEvE,qBAAa,mBAAmB,CAAC,CAAC,CAAE,YAAW,oBAAoB,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,iBAAiB,CAA6B;IAEtD;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAkBnE;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAKvD;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAuBtC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI;IAoChD;;OAEG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI1C;;OAEG;IACH,wBAAwB,IAAI,MAAM;IAIlC;;OAEG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKvC;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventDelegator - Event delegation for thousands of elements
|
|
3
|
+
*
|
|
4
|
+
* @description
|
|
5
|
+
* Single parent listener instead of per-element listeners (8 vs 8,000).
|
|
6
|
+
* Uses EventHandlerRegistry and EventMapper helpers.
|
|
7
|
+
*
|
|
8
|
+
* @performance
|
|
9
|
+
* - Traditional: 1000 cells × 8 events = 8,000 listeners
|
|
10
|
+
* - Delegation: 1 parent × 8 events = 8 listeners (1000x fewer!)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const delegator = new EventDelegator(gridContainer);
|
|
15
|
+
*
|
|
16
|
+
* // Register handlers (NO DOM listeners attached!)
|
|
17
|
+
* delegator.registerElement('cell-0-0', {
|
|
18
|
+
* onClick: () => selectCell(0, 0),
|
|
19
|
+
* onDblClick: () => startEditing(0, 0),
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Instant cleanup
|
|
23
|
+
* delegator.unregisterElement('cell-0-0');
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { type ElementEventHandlers } from './core/event-handler-registry';
|
|
27
|
+
export interface EventDelegatorOptions {
|
|
28
|
+
idAttribute?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare class EventDelegator {
|
|
31
|
+
private container;
|
|
32
|
+
private registry;
|
|
33
|
+
private boundListeners;
|
|
34
|
+
private idAttribute;
|
|
35
|
+
constructor(container: HTMLElement, options?: EventDelegatorOptions);
|
|
36
|
+
/**
|
|
37
|
+
* Register element handlers (O(1), no DOM listeners)
|
|
38
|
+
*/
|
|
39
|
+
registerElement(elementId: string, handlers: ElementEventHandlers): void;
|
|
40
|
+
/**
|
|
41
|
+
* Unregister element (O(1), instant cleanup)
|
|
42
|
+
*/
|
|
43
|
+
unregisterElement(elementId: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Update element handlers
|
|
46
|
+
*/
|
|
47
|
+
updateElement(elementId: string, handlers: ElementEventHandlers, merge?: boolean): void;
|
|
48
|
+
/**
|
|
49
|
+
* Attach delegated listeners to container
|
|
50
|
+
*
|
|
51
|
+
* @private
|
|
52
|
+
*/
|
|
53
|
+
private attachDelegatedListeners;
|
|
54
|
+
/**
|
|
55
|
+
* Handle delegated event
|
|
56
|
+
*
|
|
57
|
+
* @private
|
|
58
|
+
*/
|
|
59
|
+
private handleEvent;
|
|
60
|
+
/**
|
|
61
|
+
* Find element ID by bubbling up DOM tree
|
|
62
|
+
*
|
|
63
|
+
* @private
|
|
64
|
+
*/
|
|
65
|
+
private findElementId;
|
|
66
|
+
/**
|
|
67
|
+
* Check if element is registered
|
|
68
|
+
*/
|
|
69
|
+
isRegistered(elementId: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Get all registered element IDs
|
|
72
|
+
*/
|
|
73
|
+
getAllRegisteredIds(): string[];
|
|
74
|
+
/**
|
|
75
|
+
* Get number of registered elements
|
|
76
|
+
*/
|
|
77
|
+
getRegisteredCount(): number;
|
|
78
|
+
/**
|
|
79
|
+
* Cleanup all listeners and handlers
|
|
80
|
+
*/
|
|
81
|
+
destroy(): void;
|
|
82
|
+
}
|
|
83
|
+
export type { ElementEventHandlers };
|
|
84
|
+
//# sourceMappingURL=event-delegator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-delegator.d.ts","sourceRoot":"","sources":["../../../src/reactive/event-delegator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGhG,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,WAAW,CAAS;gBAEhB,SAAS,EAAE,WAAW,EAAE,OAAO,GAAE,qBAA0B;IAMvE;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIxE;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,UAAO,GAAG,IAAI;IAIpF;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAcnB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAO/B;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,OAAO,IAAI,IAAI;CAUhB;AAGD,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -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"}
|