@zengrid/core 1.0.2 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +43 -55
- package/dist/index.esm.js +2 -14
- package/dist/package.json +3 -2
- package/dist/src/a11y/aria-manager.d.ts.map +1 -1
- package/dist/src/a11y/focus-manager.d.ts.map +1 -1
- package/dist/src/a11y/index.d.ts.map +1 -1
- package/dist/src/data/data-accessor/array-accessor.d.ts.map +1 -1
- package/dist/src/data/data-accessor/column-store-accessor.d.ts.map +1 -1
- package/dist/src/data/data-accessor/data-accessor.interface.d.ts.map +1 -1
- package/dist/src/data/data-accessor/index.d.ts.map +1 -1
- package/dist/src/data/data-accessor/sparse-matrix-accessor.d.ts.map +1 -1
- package/dist/src/data/data-manager.d.ts.map +1 -1
- package/dist/src/data/data-source.interface.d.ts.map +1 -1
- package/dist/src/data/grid-data-model.d.ts +2 -2
- package/dist/src/data/grid-data-model.d.ts.map +1 -1
- package/dist/src/data/index-map/index-map.d.ts.map +1 -1
- package/dist/src/data/index-map/index-map.interface.d.ts.map +1 -1
- package/dist/src/data/index-map/index.d.ts.map +1 -1
- package/dist/src/data/index.d.ts.map +1 -1
- package/dist/src/editing/cell-editor.interface.d.ts.map +1 -1
- package/dist/src/editing/date-editor.d.ts.map +1 -1
- package/dist/src/editing/editor-manager.d.ts.map +1 -1
- package/dist/src/editing/index.d.ts.map +1 -1
- package/dist/src/editing/number-editor.d.ts.map +1 -1
- package/dist/src/editing/select-editor.d.ts.map +1 -1
- package/dist/src/editing/text-editor.d.ts.map +1 -1
- package/dist/src/events/event-emitter.d.ts.map +1 -1
- package/dist/src/events/grid-events.d.ts.map +1 -1
- package/dist/src/events/index.d.ts.map +1 -1
- package/dist/src/features/autofill/autofill-manager.d.ts +1 -1
- package/dist/src/features/autofill/autofill-manager.d.ts.map +1 -1
- package/dist/src/features/autofill/index.d.ts.map +1 -1
- package/dist/src/features/column-resize/auto-fit-calculator.d.ts.map +1 -1
- package/dist/src/features/column-resize/column-resize-manager.d.ts.map +1 -1
- package/dist/src/features/column-resize/column-resize-manager.interface.d.ts.map +1 -1
- package/dist/src/features/column-resize/index.d.ts.map +1 -1
- package/dist/src/features/column-resize/resize-constraint-manager.d.ts.map +1 -1
- package/dist/src/features/column-resize/resize-handle-renderer.d.ts.map +1 -1
- package/dist/src/features/column-resize/resize-preview.d.ts.map +1 -1
- package/dist/src/features/column-resize/resize-state-manager.d.ts.map +1 -1
- package/dist/src/features/column-resize/resize-strategies.d.ts.map +1 -1
- package/dist/src/features/column-resize/resize-test-helper.d.ts.map +1 -1
- package/dist/src/features/column-resize/resize-zone-detector.d.ts.map +1 -1
- package/dist/src/features/copy-paste/clipboard-manager.d.ts.map +1 -1
- package/dist/src/features/copy-paste/index.d.ts.map +1 -1
- package/dist/src/features/filtering/adapters/adapter.interface.d.ts.map +1 -1
- package/dist/src/features/filtering/adapters/graphql-adapter.d.ts.map +1 -1
- package/dist/src/features/filtering/adapters/index.d.ts.map +1 -1
- package/dist/src/features/filtering/adapters/rest-adapter.d.ts.map +1 -1
- package/dist/src/features/filtering/adapters/sql-adapter.d.ts.map +1 -1
- package/dist/src/features/filtering/adapters/types.d.ts.map +1 -1
- package/dist/src/features/filtering/column-filter.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-autocomplete.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-cache.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-compiler.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-export-manager.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-index-manager.d.ts +1 -1
- package/dist/src/features/filtering/filter-index-manager.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-manager.d.ts +1 -1
- package/dist/src/features/filtering/filter-manager.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-optimizer.d.ts.map +1 -1
- package/dist/src/features/filtering/filter-query-parser.d.ts.map +1 -1
- package/dist/src/features/filtering/index.d.ts.map +1 -1
- package/dist/src/features/filtering/range-filter-optimizer.d.ts.map +1 -1
- package/dist/src/features/filtering/substring-filter.d.ts.map +1 -1
- package/dist/src/features/filtering/types.d.ts.map +1 -1
- package/dist/src/features/formulas/formula-calculator.d.ts.map +1 -1
- package/dist/src/features/formulas/index.d.ts.map +1 -1
- package/dist/src/features/hit-testing/index.d.ts.map +1 -1
- package/dist/src/features/hit-testing/spatial-hit-tester.d.ts +1 -1
- package/dist/src/features/hit-testing/spatial-hit-tester.d.ts.map +1 -1
- package/dist/src/features/loading/index.d.ts.map +1 -1
- package/dist/src/features/loading/loading-indicator.d.ts.map +1 -1
- package/dist/src/features/pagination/index.d.ts.map +1 -1
- package/dist/src/features/pagination/paginator.d.ts.map +1 -1
- package/dist/src/features/selection/index.d.ts.map +1 -1
- package/dist/src/features/selection/selection-manager.d.ts.map +1 -1
- package/dist/src/features/sorting/index.d.ts.map +1 -1
- package/dist/src/features/sorting/row-sorter.interface.d.ts.map +1 -1
- package/dist/src/features/sorting/single-column-sorter.d.ts.map +1 -1
- package/dist/src/features/sorting/sort-manager.d.ts.map +1 -1
- package/dist/src/features/undo-redo/index.d.ts.map +1 -1
- package/dist/src/features/undo-redo/undo-redo-manager.d.ts.map +1 -1
- package/dist/src/grid.d.ts.map +1 -1
- package/dist/src/i18n/index.d.ts.map +1 -1
- package/dist/src/i18n/locale-manager.d.ts.map +1 -1
- package/dist/src/i18n/rtl-support.d.ts.map +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/keyboard/index.d.ts.map +1 -1
- package/dist/src/keyboard/keyboard-navigator.d.ts.map +1 -1
- package/dist/src/rendering/cache/index.d.ts.map +1 -1
- package/dist/src/rendering/cache/renderer-cache.d.ts.map +1 -1
- package/dist/src/rendering/cache/renderer-cache.interface.d.ts.map +1 -1
- package/dist/src/rendering/cell-pool/cell-pool.d.ts.map +1 -1
- package/dist/src/rendering/cell-pool/cell-pool.interface.d.ts.map +1 -1
- package/dist/src/rendering/cell-pool/index.d.ts.map +1 -1
- package/dist/src/rendering/cell-positioner/cell-positioner.d.ts.map +1 -1
- package/dist/src/rendering/cell-positioner/cell-positioner.interface.d.ts.map +1 -1
- package/dist/src/rendering/cell-positioner/index.d.ts.map +1 -1
- package/dist/src/rendering/height-provider/height-provider.interface.d.ts.map +1 -1
- package/dist/src/rendering/height-provider/index.d.ts.map +1 -1
- package/dist/src/rendering/height-provider/uniform-height-provider.d.ts.map +1 -1
- package/dist/src/rendering/height-provider/variable-height-provider.d.ts.map +1 -1
- package/dist/src/rendering/renderers/advanced-cell-renderer.d.ts.map +1 -1
- package/dist/src/rendering/renderers/image-renderer.d.ts.map +1 -1
- package/dist/src/rendering/renderers/index.d.ts.map +1 -1
- package/dist/src/rendering/renderers/number-renderer.d.ts.map +1 -1
- package/dist/src/rendering/renderers/renderer-registry.d.ts.map +1 -1
- package/dist/src/rendering/renderers/renderer.interface.d.ts.map +1 -1
- package/dist/src/rendering/renderers/text-renderer.d.ts.map +1 -1
- package/dist/src/rendering/spatial-hit-tester.d.ts +1 -1
- package/dist/src/rendering/spatial-hit-tester.d.ts.map +1 -1
- package/dist/src/rendering/virtual-scroller/index.d.ts.map +1 -1
- package/dist/src/rendering/virtual-scroller/virtual-scroller.d.ts.map +1 -1
- package/dist/src/rendering/virtual-scroller/virtual-scroller.interface.d.ts.map +1 -1
- package/dist/src/rendering/width-provider/index.d.ts.map +1 -1
- package/dist/src/rendering/width-provider/uniform-width-provider.d.ts.map +1 -1
- package/dist/src/rendering/width-provider/variable-width-provider.d.ts.map +1 -1
- package/dist/src/rendering/width-provider/width-provider.interface.d.ts.map +1 -1
- package/dist/src/selection/hit-tester.d.ts.map +1 -1
- package/dist/src/selection/hit-tester.interface.d.ts.map +1 -1
- package/dist/src/selection/index.d.ts.map +1 -1
- package/dist/src/selection/range-utils.d.ts.map +1 -1
- package/dist/src/selection/range-utils.interface.d.ts.map +1 -1
- package/dist/src/shared/algorithms/filter/bloom-filter.d.ts +120 -0
- package/dist/src/shared/algorithms/filter/bloom-filter.d.ts.map +1 -0
- package/dist/src/shared/algorithms/filter/index.d.ts +7 -0
- package/dist/src/shared/algorithms/filter/index.d.ts.map +1 -0
- package/dist/src/shared/algorithms/graph/bfs.d.ts +71 -0
- package/dist/src/shared/algorithms/graph/bfs.d.ts.map +1 -0
- package/dist/src/shared/algorithms/graph/dfs.d.ts +62 -0
- package/dist/src/shared/algorithms/graph/dfs.d.ts.map +1 -0
- package/dist/src/shared/algorithms/graph/graph.interface.d.ts +63 -0
- package/dist/src/shared/algorithms/graph/graph.interface.d.ts.map +1 -0
- package/dist/src/shared/algorithms/graph/index.d.ts +9 -0
- package/dist/src/shared/algorithms/graph/index.d.ts.map +1 -0
- package/dist/src/shared/algorithms/index.d.ts +11 -0
- package/dist/src/shared/algorithms/index.d.ts.map +1 -0
- package/dist/src/shared/algorithms/pattern/index.d.ts +8 -0
- package/dist/src/shared/algorithms/pattern/index.d.ts.map +1 -0
- package/dist/src/shared/algorithms/pattern/sequence-detector.d.ts +62 -0
- package/dist/src/shared/algorithms/pattern/sequence-detector.d.ts.map +1 -0
- package/dist/src/shared/algorithms/search/binary-search.d.ts +86 -0
- package/dist/src/shared/algorithms/search/binary-search.d.ts.map +1 -0
- package/dist/src/shared/algorithms/search/index.d.ts +6 -0
- package/dist/src/shared/algorithms/search/index.d.ts.map +1 -0
- package/dist/src/shared/algorithms/sorting/comparators.d.ts +126 -0
- package/dist/src/shared/algorithms/sorting/comparators.d.ts.map +1 -0
- package/dist/src/shared/algorithms/sorting/index.d.ts +9 -0
- package/dist/src/shared/algorithms/sorting/index.d.ts.map +1 -0
- package/dist/src/shared/algorithms/sorting/sorting.interface.d.ts +38 -0
- package/dist/src/shared/algorithms/sorting/sorting.interface.d.ts.map +1 -0
- package/dist/src/shared/algorithms/sorting/timsort.d.ts +55 -0
- package/dist/src/shared/algorithms/sorting/timsort.d.ts.map +1 -0
- package/dist/src/shared/data-structures/column-store/column-store.d.ts +52 -0
- package/dist/src/shared/data-structures/column-store/column-store.d.ts.map +1 -0
- package/dist/src/shared/data-structures/column-store/column-store.interface.d.ts +155 -0
- package/dist/src/shared/data-structures/column-store/column-store.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/column-store/index.d.ts +6 -0
- package/dist/src/shared/data-structures/column-store/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/command-stack/command-stack.d.ts +61 -0
- package/dist/src/shared/data-structures/command-stack/command-stack.d.ts.map +1 -0
- package/dist/src/shared/data-structures/command-stack/command-stack.interface.d.ts +80 -0
- package/dist/src/shared/data-structures/command-stack/command-stack.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/command-stack/index.d.ts +3 -0
- package/dist/src/shared/data-structures/command-stack/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/dependency-graph/dependency-graph.d.ts +147 -0
- package/dist/src/shared/data-structures/dependency-graph/dependency-graph.d.ts.map +1 -0
- package/dist/src/shared/data-structures/dependency-graph/dependency-graph.interface.d.ts +161 -0
- package/dist/src/shared/data-structures/dependency-graph/dependency-graph.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/dependency-graph/index.d.ts +8 -0
- package/dist/src/shared/data-structures/dependency-graph/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/disjoint-set/disjoint-set.d.ts +84 -0
- package/dist/src/shared/data-structures/disjoint-set/disjoint-set.d.ts.map +1 -0
- package/dist/src/shared/data-structures/disjoint-set/disjoint-set.interface.d.ts +185 -0
- package/dist/src/shared/data-structures/disjoint-set/disjoint-set.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/disjoint-set/index.d.ts +7 -0
- package/dist/src/shared/data-structures/disjoint-set/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/index-map/index-map.d.ts +150 -0
- package/dist/src/shared/data-structures/index-map/index-map.d.ts.map +1 -0
- package/dist/src/shared/data-structures/index-map/index-map.interface.d.ts +186 -0
- package/dist/src/shared/data-structures/index-map/index-map.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/index-map/index.d.ts +6 -0
- package/dist/src/shared/data-structures/index-map/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/index.d.ts +36 -0
- package/dist/src/shared/data-structures/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/interval-tree/index.d.ts +7 -0
- package/dist/src/shared/data-structures/interval-tree/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/interval-tree/interval-tree.d.ts +141 -0
- package/dist/src/shared/data-structures/interval-tree/interval-tree.d.ts.map +1 -0
- package/dist/src/shared/data-structures/interval-tree/interval-tree.interface.d.ts +212 -0
- package/dist/src/shared/data-structures/interval-tree/interval-tree.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/lru-cache/index.d.ts +3 -0
- package/dist/src/shared/data-structures/lru-cache/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/lru-cache/lru-cache.d.ts +134 -0
- package/dist/src/shared/data-structures/lru-cache/lru-cache.d.ts.map +1 -0
- package/dist/src/shared/data-structures/lru-cache/lru-cache.interface.d.ts +173 -0
- package/dist/src/shared/data-structures/lru-cache/lru-cache.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/prefix-sum-array/index.d.ts +6 -0
- package/dist/src/shared/data-structures/prefix-sum-array/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/prefix-sum-array/prefix-sum-array.d.ts +63 -0
- package/dist/src/shared/data-structures/prefix-sum-array/prefix-sum-array.d.ts.map +1 -0
- package/dist/src/shared/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts +80 -0
- package/dist/src/shared/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/rtree/index.d.ts +8 -0
- package/dist/src/shared/data-structures/rtree/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/rtree/rtree.d.ts +81 -0
- package/dist/src/shared/data-structures/rtree/rtree.d.ts.map +1 -0
- package/dist/src/shared/data-structures/rtree/rtree.interface.d.ts +143 -0
- package/dist/src/shared/data-structures/rtree/rtree.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/segment-tree/index.d.ts +4 -0
- package/dist/src/shared/data-structures/segment-tree/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/segment-tree/segment-tree.d.ts +134 -0
- package/dist/src/shared/data-structures/segment-tree/segment-tree.d.ts.map +1 -0
- package/dist/src/shared/data-structures/segment-tree/segment-tree.interface.d.ts +202 -0
- package/dist/src/shared/data-structures/segment-tree/segment-tree.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/skip-list/index.d.ts +4 -0
- package/dist/src/shared/data-structures/skip-list/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/skip-list/skip-list.d.ts +137 -0
- package/dist/src/shared/data-structures/skip-list/skip-list.d.ts.map +1 -0
- package/dist/src/shared/data-structures/skip-list/skip-list.interface.d.ts +223 -0
- package/dist/src/shared/data-structures/skip-list/skip-list.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/sparse-matrix/index.d.ts +6 -0
- package/dist/src/shared/data-structures/sparse-matrix/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/sparse-matrix/sparse-matrix.d.ts +44 -0
- package/dist/src/shared/data-structures/sparse-matrix/sparse-matrix.d.ts.map +1 -0
- package/dist/src/shared/data-structures/sparse-matrix/sparse-matrix.interface.d.ts +105 -0
- package/dist/src/shared/data-structures/sparse-matrix/sparse-matrix.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/suffix-array/index.d.ts +3 -0
- package/dist/src/shared/data-structures/suffix-array/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/suffix-array/suffix-array.d.ts +102 -0
- package/dist/src/shared/data-structures/suffix-array/suffix-array.d.ts.map +1 -0
- package/dist/src/shared/data-structures/suffix-array/suffix-array.interface.d.ts +117 -0
- package/dist/src/shared/data-structures/suffix-array/suffix-array.interface.d.ts.map +1 -0
- package/dist/src/shared/data-structures/trie/index.d.ts +8 -0
- package/dist/src/shared/data-structures/trie/index.d.ts.map +1 -0
- package/dist/src/shared/data-structures/trie/trie.d.ts +205 -0
- package/dist/src/shared/data-structures/trie/trie.d.ts.map +1 -0
- package/dist/src/shared/data-structures/trie/trie.interface.d.ts +117 -0
- package/dist/src/shared/data-structures/trie/trie.interface.d.ts.map +1 -0
- package/dist/src/shared/index.d.ts +47 -0
- package/dist/src/shared/index.d.ts.map +1 -0
- package/dist/src/shared/patterns/coordinator.d.ts +90 -0
- package/dist/src/shared/patterns/coordinator.d.ts.map +1 -0
- package/dist/src/shared/patterns/event-emitter.d.ts +106 -0
- package/dist/src/shared/patterns/event-emitter.d.ts.map +1 -0
- package/dist/src/shared/patterns/factory.d.ts +120 -0
- package/dist/src/shared/patterns/factory.d.ts.map +1 -0
- package/dist/src/shared/patterns/index.d.ts +21 -0
- package/dist/src/shared/patterns/index.d.ts.map +1 -0
- package/dist/src/shared/patterns/mediator.d.ts +116 -0
- package/dist/src/shared/patterns/mediator.d.ts.map +1 -0
- package/dist/src/shared/patterns/object-pool.d.ts +178 -0
- package/dist/src/shared/patterns/object-pool.d.ts.map +1 -0
- package/dist/src/shared/patterns/observer.d.ts +89 -0
- package/dist/src/shared/patterns/observer.d.ts.map +1 -0
- package/dist/src/shared/patterns/operation-mode.d.ts +75 -0
- package/dist/src/shared/patterns/operation-mode.d.ts.map +1 -0
- package/dist/src/shared/patterns/state-machine.d.ts +122 -0
- package/dist/src/shared/patterns/state-machine.d.ts.map +1 -0
- package/dist/src/shared/types/common.d.ts +56 -0
- package/dist/src/shared/types/common.d.ts.map +1 -0
- package/dist/src/shared/types/index.d.ts +5 -0
- package/dist/src/shared/types/index.d.ts.map +1 -0
- package/dist/src/shared/utils/index.d.ts +7 -0
- package/dist/src/shared/utils/index.d.ts.map +1 -0
- package/dist/src/shared/utils/timing.d.ts +104 -0
- package/dist/src/shared/utils/timing.d.ts.map +1 -0
- package/dist/src/shared/utils/timing.interface.d.ts +96 -0
- package/dist/src/shared/utils/timing.interface.d.ts.map +1 -0
- package/dist/src/touch/index.d.ts.map +1 -1
- package/dist/src/touch/touch-handler.d.ts.map +1 -1
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory Pattern
|
|
3
|
+
*
|
|
4
|
+
* Provides an interface for creating objects, allowing subclasses
|
|
5
|
+
* to decide which class to instantiate.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* interface Renderer {
|
|
10
|
+
* render(value: any): string;
|
|
11
|
+
* }
|
|
12
|
+
*
|
|
13
|
+
* const rendererFactory = new Factory<Renderer>();
|
|
14
|
+
*
|
|
15
|
+
* // Register factories
|
|
16
|
+
* rendererFactory.register('text', () => ({
|
|
17
|
+
* render: (v) => String(v)
|
|
18
|
+
* }));
|
|
19
|
+
*
|
|
20
|
+
* rendererFactory.register('number', () => ({
|
|
21
|
+
* render: (v) => v.toLocaleString()
|
|
22
|
+
* }));
|
|
23
|
+
*
|
|
24
|
+
* // Create instances
|
|
25
|
+
* const textRenderer = rendererFactory.create('text');
|
|
26
|
+
* const numberRenderer = rendererFactory.create('number');
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export interface IFactory<T, K = string> {
|
|
30
|
+
/** Register a creator function for a key */
|
|
31
|
+
register(key: K, creator: () => T): void;
|
|
32
|
+
/** Create an instance using the registered creator */
|
|
33
|
+
create(key: K): T | undefined;
|
|
34
|
+
/** Check if a creator is registered */
|
|
35
|
+
has(key: K): boolean;
|
|
36
|
+
/** Unregister a creator */
|
|
37
|
+
unregister(key: K): boolean;
|
|
38
|
+
/** Get all registered keys */
|
|
39
|
+
keys(): K[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Factory implementation
|
|
43
|
+
*
|
|
44
|
+
* @typeParam T - The type of objects to create
|
|
45
|
+
* @typeParam K - The type of keys (defaults to string)
|
|
46
|
+
*/
|
|
47
|
+
export declare class Factory<T, K = string> implements IFactory<T, K> {
|
|
48
|
+
private creators;
|
|
49
|
+
/**
|
|
50
|
+
* Register a creator function
|
|
51
|
+
*
|
|
52
|
+
* @param key - Unique identifier for this creator
|
|
53
|
+
* @param creator - Function that creates instances
|
|
54
|
+
*/
|
|
55
|
+
register(key: K, creator: () => T): void;
|
|
56
|
+
/**
|
|
57
|
+
* Create an instance
|
|
58
|
+
*
|
|
59
|
+
* @param key - The key of the creator to use
|
|
60
|
+
* @returns A new instance, or undefined if key not found
|
|
61
|
+
*/
|
|
62
|
+
create(key: K): T | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Check if a creator is registered
|
|
65
|
+
*/
|
|
66
|
+
has(key: K): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Unregister a creator
|
|
69
|
+
*
|
|
70
|
+
* @returns true if the creator was removed, false if it didn't exist
|
|
71
|
+
*/
|
|
72
|
+
unregister(key: K): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Get all registered keys
|
|
75
|
+
*/
|
|
76
|
+
keys(): K[];
|
|
77
|
+
/**
|
|
78
|
+
* Clear all registered creators
|
|
79
|
+
*/
|
|
80
|
+
clear(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Get the number of registered creators
|
|
83
|
+
*/
|
|
84
|
+
get size(): number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Singleton Factory
|
|
88
|
+
*
|
|
89
|
+
* Creates a single instance per key and reuses it on subsequent calls.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* const singletonFactory = new SingletonFactory<Renderer>();
|
|
94
|
+
*
|
|
95
|
+
* singletonFactory.register('text', () => new TextRenderer());
|
|
96
|
+
*
|
|
97
|
+
* const r1 = singletonFactory.create('text');
|
|
98
|
+
* const r2 = singletonFactory.create('text');
|
|
99
|
+
* console.log(r1 === r2); // true - same instance
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export declare class SingletonFactory<T, K = string> implements IFactory<T, K> {
|
|
103
|
+
private creators;
|
|
104
|
+
private instances;
|
|
105
|
+
register(key: K, creator: () => T): void;
|
|
106
|
+
create(key: K): T | undefined;
|
|
107
|
+
has(key: K): boolean;
|
|
108
|
+
unregister(key: K): boolean;
|
|
109
|
+
keys(): K[];
|
|
110
|
+
/**
|
|
111
|
+
* Clear all instances but keep creators
|
|
112
|
+
*/
|
|
113
|
+
clearInstances(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Clear everything
|
|
116
|
+
*/
|
|
117
|
+
clear(): void;
|
|
118
|
+
get size(): number;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/shared/patterns/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,WAAW,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM;IACrC,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAEzC,sDAAsD;IACtD,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAE9B,uCAAuC;IACvC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IAErB,2BAA2B;IAC3B,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IAE5B,8BAA8B;IAC9B,IAAI,IAAI,CAAC,EAAE,CAAC;CACb;AAED;;;;;GAKG;AACH,qBAAa,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAE,YAAW,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,QAAQ,CAAyB;IAEzC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI;IASxC;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAkB7B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAI3B;;OAEG;IACH,IAAI,IAAI,CAAC,EAAE;IAIX;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAE,YAAW,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,SAAS,CAAmB;IAEpC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI;IAWxC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IA2B7B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAK3B,IAAI,IAAI,CAAC,EAAE;IAIX;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common design patterns
|
|
3
|
+
* @packageDocumentation
|
|
4
|
+
*/
|
|
5
|
+
export { EventEmitter } from './event-emitter';
|
|
6
|
+
export type { IEventEmitter } from './event-emitter';
|
|
7
|
+
export { Subject } from './observer';
|
|
8
|
+
export type { IObserver, ISubject } from './observer';
|
|
9
|
+
export { StateMachine } from './state-machine';
|
|
10
|
+
export type { IStateMachine, StateMachineOptions, TransitionHandler, } from './state-machine';
|
|
11
|
+
export { BaseCoordinator } from './coordinator';
|
|
12
|
+
export type { ICoordinator } from './coordinator';
|
|
13
|
+
export { Factory, SingletonFactory } from './factory';
|
|
14
|
+
export type { IFactory } from './factory';
|
|
15
|
+
export { Mediator, MediatedComponent, EventMediator } from './mediator';
|
|
16
|
+
export type { IMediator } from './mediator';
|
|
17
|
+
export { ObjectPool, KeyedObjectPool } from './object-pool';
|
|
18
|
+
export type { IObjectPool, ObjectPoolOptions, ObjectPoolStats, } from './object-pool';
|
|
19
|
+
export { resolveOperationMode, OperationModeManager, } from './operation-mode';
|
|
20
|
+
export type { OperationMode, ResolvedOperationMode, OperationModeConfig, } from './operation-mode';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/patterns/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mediator Pattern
|
|
3
|
+
*
|
|
4
|
+
* Defines an object that encapsulates how a set of objects interact.
|
|
5
|
+
* Promotes loose coupling by keeping objects from referring to each other explicitly.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* class GridMediator extends Mediator {
|
|
10
|
+
* constructor(
|
|
11
|
+
* private viewport: ViewportManager,
|
|
12
|
+
* private renderer: RenderCoordinator,
|
|
13
|
+
* private sortManager: SortManager
|
|
14
|
+
* ) {
|
|
15
|
+
* super();
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* notify(sender: any, event: string, data?: any): void {
|
|
19
|
+
* if (sender === this.viewport && event === 'scroll') {
|
|
20
|
+
* // Viewport scrolled -> update renderer
|
|
21
|
+
* this.renderer.update(data);
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* if (sender === this.sortManager && event === 'sorted') {
|
|
25
|
+
* // Data sorted -> refresh renderer
|
|
26
|
+
* this.renderer.refresh();
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
*
|
|
31
|
+
* // Components notify mediator instead of each other
|
|
32
|
+
* viewport.setMediator(mediator);
|
|
33
|
+
* sortManager.setMediator(mediator);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export interface IMediator {
|
|
37
|
+
/**
|
|
38
|
+
* Handle notifications from components
|
|
39
|
+
*
|
|
40
|
+
* @param sender - The component sending the notification
|
|
41
|
+
* @param event - The event name
|
|
42
|
+
* @param data - Optional event data
|
|
43
|
+
*/
|
|
44
|
+
notify(sender: any, event: string, data?: any): void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Base mediator class
|
|
48
|
+
*/
|
|
49
|
+
export declare abstract class Mediator implements IMediator {
|
|
50
|
+
/**
|
|
51
|
+
* Handle component notifications
|
|
52
|
+
*
|
|
53
|
+
* Subclasses should override this to implement mediation logic.
|
|
54
|
+
*/
|
|
55
|
+
abstract notify(sender: any, event: string, data?: any): void;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Component that can interact with a mediator
|
|
59
|
+
*/
|
|
60
|
+
export declare abstract class MediatedComponent {
|
|
61
|
+
protected mediator?: IMediator;
|
|
62
|
+
/**
|
|
63
|
+
* Set the mediator for this component
|
|
64
|
+
*/
|
|
65
|
+
setMediator(mediator: IMediator | undefined): void;
|
|
66
|
+
/**
|
|
67
|
+
* Notify the mediator of an event
|
|
68
|
+
*/
|
|
69
|
+
protected notifyMediator(event: string, data?: any): void;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Event-based mediator
|
|
73
|
+
*
|
|
74
|
+
* Routes events between components without them knowing about each other.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const mediator = new EventMediator();
|
|
79
|
+
*
|
|
80
|
+
* // Register handlers
|
|
81
|
+
* mediator.on('scroll', (data) => {
|
|
82
|
+
* console.log('Scroll event:', data);
|
|
83
|
+
* });
|
|
84
|
+
*
|
|
85
|
+
* // Send events
|
|
86
|
+
* mediator.notify(viewport, 'scroll', { top: 100 });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export declare class EventMediator extends Mediator {
|
|
90
|
+
private handlers;
|
|
91
|
+
/**
|
|
92
|
+
* Register an event handler
|
|
93
|
+
*
|
|
94
|
+
* @param event - Event name to listen for
|
|
95
|
+
* @param handler - Handler function
|
|
96
|
+
* @returns Unsubscribe function
|
|
97
|
+
*/
|
|
98
|
+
on(event: string, handler: (data?: any) => void): () => void;
|
|
99
|
+
/**
|
|
100
|
+
* Unregister an event handler
|
|
101
|
+
*/
|
|
102
|
+
off(event: string, handler: (data?: any) => void): void;
|
|
103
|
+
/**
|
|
104
|
+
* Notify all handlers for an event
|
|
105
|
+
*/
|
|
106
|
+
notify(_sender: any, event: string, data?: any): void;
|
|
107
|
+
/**
|
|
108
|
+
* Clear all handlers
|
|
109
|
+
*/
|
|
110
|
+
clear(): void;
|
|
111
|
+
/**
|
|
112
|
+
* Clear handlers for a specific event
|
|
113
|
+
*/
|
|
114
|
+
clearEvent(event: string): void;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=mediator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediator.d.ts","sourceRoot":"","sources":["../../../../src/shared/patterns/mediator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,WAAW,SAAS;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CACtD;AAED;;GAEG;AACH,8BAAsB,QAAS,YAAW,SAAS;IACjD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;CAC9D;AAED;;GAEG;AACH,8BAAsB,iBAAiB;IACrC,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAE/B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAIlD;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;CAG1D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,aAAc,SAAQ,QAAQ;IACzC,OAAO,CAAC,QAAQ,CAAgD;IAEhE;;;;;;OAMG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI;IAU5D;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAIvD;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAarD;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAGhC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Object Pooling Pattern
|
|
3
|
+
*
|
|
4
|
+
* Maintains a pool of reusable objects to avoid expensive creation/destruction.
|
|
5
|
+
* Useful for any frequently created/destroyed objects (DOM elements, data structures, etc.)
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Example 1: DOM Element Pool
|
|
10
|
+
* const divPool = new ObjectPool(
|
|
11
|
+
* () => document.createElement('div'),
|
|
12
|
+
* (div) => {
|
|
13
|
+
* div.innerHTML = '';
|
|
14
|
+
* div.className = '';
|
|
15
|
+
* div.removeAttribute('style');
|
|
16
|
+
* },
|
|
17
|
+
* { initialSize: 50, maxSize: 200 }
|
|
18
|
+
* );
|
|
19
|
+
*
|
|
20
|
+
* const div = divPool.acquire();
|
|
21
|
+
* div.textContent = 'Hello';
|
|
22
|
+
* // ... use div ...
|
|
23
|
+
* divPool.release(div);
|
|
24
|
+
*
|
|
25
|
+
* // Example 2: Data Structure Pool
|
|
26
|
+
* const arrayPool = new ObjectPool(
|
|
27
|
+
* () => [],
|
|
28
|
+
* (arr) => arr.length = 0, // Reset
|
|
29
|
+
* { initialSize: 10, maxSize: 100 }
|
|
30
|
+
* );
|
|
31
|
+
*
|
|
32
|
+
* const arr = arrayPool.acquire();
|
|
33
|
+
* arr.push(1, 2, 3);
|
|
34
|
+
* // ... use arr ...
|
|
35
|
+
* arrayPool.release(arr);
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export interface ObjectPoolOptions {
|
|
39
|
+
/** Initial number of objects to create */
|
|
40
|
+
initialSize?: number;
|
|
41
|
+
/** Maximum number of objects to keep in pool */
|
|
42
|
+
maxSize?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface ObjectPoolStats {
|
|
45
|
+
/** Number of objects currently in use */
|
|
46
|
+
active: number;
|
|
47
|
+
/** Number of objects available in pool */
|
|
48
|
+
available: number;
|
|
49
|
+
/** Total objects created (active + available) */
|
|
50
|
+
total: number;
|
|
51
|
+
/** Maximum pool size */
|
|
52
|
+
maxSize: number;
|
|
53
|
+
}
|
|
54
|
+
export interface IObjectPool<T> {
|
|
55
|
+
/** Acquire an object from the pool */
|
|
56
|
+
acquire(): T;
|
|
57
|
+
/** Release an object back to the pool */
|
|
58
|
+
release(obj: T): void;
|
|
59
|
+
/** Release all objects back to the pool */
|
|
60
|
+
releaseAll(): void;
|
|
61
|
+
/** Clear the pool and destroy all objects */
|
|
62
|
+
clear(): void;
|
|
63
|
+
/** Get pool statistics */
|
|
64
|
+
readonly stats: ObjectPoolStats;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Generic object pool implementation
|
|
68
|
+
*
|
|
69
|
+
* @typeParam T - The type of objects to pool
|
|
70
|
+
*/
|
|
71
|
+
export declare class ObjectPool<T> implements IObjectPool<T> {
|
|
72
|
+
private available;
|
|
73
|
+
private active;
|
|
74
|
+
private readonly maxSize;
|
|
75
|
+
private readonly factory;
|
|
76
|
+
private readonly reset;
|
|
77
|
+
private readonly destroy?;
|
|
78
|
+
/**
|
|
79
|
+
* Create a new object pool
|
|
80
|
+
*
|
|
81
|
+
* @param factory - Function to create new objects
|
|
82
|
+
* @param reset - Function to reset objects before releasing back to pool
|
|
83
|
+
* @param options - Pool configuration options
|
|
84
|
+
* @param destroy - Optional function to clean up objects when pool is cleared
|
|
85
|
+
*/
|
|
86
|
+
constructor(factory: () => T, reset: (obj: T) => void, options?: ObjectPoolOptions, destroy?: (obj: T) => void);
|
|
87
|
+
/**
|
|
88
|
+
* Acquire an object from the pool
|
|
89
|
+
*
|
|
90
|
+
* If the pool is empty, a new object will be created.
|
|
91
|
+
*
|
|
92
|
+
* @returns An object from the pool
|
|
93
|
+
*/
|
|
94
|
+
acquire(): T;
|
|
95
|
+
/**
|
|
96
|
+
* Release an object back to the pool
|
|
97
|
+
*
|
|
98
|
+
* The object will be reset before being returned to the pool.
|
|
99
|
+
* If the pool is at max capacity, the object will be destroyed.
|
|
100
|
+
*
|
|
101
|
+
* @param obj - The object to release
|
|
102
|
+
*/
|
|
103
|
+
release(obj: T): void;
|
|
104
|
+
/**
|
|
105
|
+
* Release all active objects back to the pool
|
|
106
|
+
*/
|
|
107
|
+
releaseAll(): void;
|
|
108
|
+
/**
|
|
109
|
+
* Clear the pool and destroy all objects
|
|
110
|
+
*/
|
|
111
|
+
clear(): void;
|
|
112
|
+
/**
|
|
113
|
+
* Get pool statistics
|
|
114
|
+
*/
|
|
115
|
+
get stats(): ObjectPoolStats;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Keyed object pool - maintains mapping of keys to pooled objects
|
|
119
|
+
*
|
|
120
|
+
* Useful when you need to track objects by a unique identifier.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const cellPool = new KeyedObjectPool(
|
|
125
|
+
* () => document.createElement('div'),
|
|
126
|
+
* (div) => { div.innerHTML = ''; },
|
|
127
|
+
* { maxSize: 200 }
|
|
128
|
+
* );
|
|
129
|
+
*
|
|
130
|
+
* const cell = cellPool.acquire('cell-0-0');
|
|
131
|
+
* // ... use cell ...
|
|
132
|
+
* cellPool.release('cell-0-0');
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
export declare class KeyedObjectPool<T, K = string> {
|
|
136
|
+
private pool;
|
|
137
|
+
private keyMap;
|
|
138
|
+
constructor(factory: () => T, reset: (obj: T) => void, options?: ObjectPoolOptions, destroy?: (obj: T) => void);
|
|
139
|
+
/**
|
|
140
|
+
* Acquire an object by key
|
|
141
|
+
*
|
|
142
|
+
* If an object with this key already exists, it will be returned.
|
|
143
|
+
* Otherwise, a new object will be acquired from the pool.
|
|
144
|
+
*
|
|
145
|
+
* @param key - Unique identifier for the object
|
|
146
|
+
* @returns The object associated with this key
|
|
147
|
+
*/
|
|
148
|
+
acquire(key: K): T;
|
|
149
|
+
/**
|
|
150
|
+
* Release an object by key
|
|
151
|
+
*
|
|
152
|
+
* @param key - The key of the object to release
|
|
153
|
+
*/
|
|
154
|
+
release(key: K): void;
|
|
155
|
+
/**
|
|
156
|
+
* Release all objects except those with the specified keys
|
|
157
|
+
*
|
|
158
|
+
* @param activeKeys - Set of keys to keep active
|
|
159
|
+
*/
|
|
160
|
+
releaseExcept(activeKeys: Set<K>): void;
|
|
161
|
+
/**
|
|
162
|
+
* Check if a key exists in the active set
|
|
163
|
+
*/
|
|
164
|
+
has(key: K): boolean;
|
|
165
|
+
/**
|
|
166
|
+
* Get an object by key without acquiring
|
|
167
|
+
*/
|
|
168
|
+
get(key: K): T | undefined;
|
|
169
|
+
/**
|
|
170
|
+
* Get pool statistics
|
|
171
|
+
*/
|
|
172
|
+
get stats(): ObjectPoolStats;
|
|
173
|
+
/**
|
|
174
|
+
* Clear the pool
|
|
175
|
+
*/
|
|
176
|
+
clear(): void;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=object-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-pool.d.ts","sourceRoot":"","sources":["../../../../src/shared/patterns/object-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,sCAAsC;IACtC,OAAO,IAAI,CAAC,CAAC;IACb,yCAAyC;IACzC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,2CAA2C;IAC3C,UAAU,IAAI,IAAI,CAAC;IACnB,6CAA6C;IAC7C,KAAK,IAAI,IAAI,CAAC;IACd,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;CACjC;AAED;;;;GAIG;AACH,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAmB;IAE5C;;;;;;;OAOG;gBAED,OAAO,EAAE,MAAM,CAAC,EAChB,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EACvB,OAAO,GAAE,iBAAsB,EAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI;IAc5B;;;;;;OAMG;IACH,OAAO,IAAI,CAAC;IAWZ;;;;;;;OAOG;IACH,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAoBrB;;OAEG;IACH,UAAU,IAAI,IAAI;IAOlB;;OAEG;IACH,KAAK,IAAI,IAAI;IAcb;;OAEG;IACH,IAAI,KAAK,IAAI,eAAe,CAO3B;CACF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,eAAe,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM;IACxC,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAmB;gBAG/B,OAAO,EAAE,MAAM,CAAC,EAChB,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EACvB,OAAO,GAAE,iBAAsB,EAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI;IAK5B;;;;;;;;OAQG;IACH,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;IAYlB;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAQrB;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;IAcvC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAI1B;;OAEG;IACH,IAAI,KAAK,IAAI,eAAe,CAE3B;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observer Pattern
|
|
3
|
+
*
|
|
4
|
+
* Defines a one-to-many dependency between objects so that when one object changes state,
|
|
5
|
+
* all its dependents are notified and updated automatically.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* interface DataUpdate {
|
|
10
|
+
* type: 'add' | 'update' | 'delete';
|
|
11
|
+
* data: any;
|
|
12
|
+
* }
|
|
13
|
+
*
|
|
14
|
+
* // Create a subject
|
|
15
|
+
* class DataModel extends Subject<DataUpdate> {
|
|
16
|
+
* updateData(data: any): void {
|
|
17
|
+
* // Update internal state
|
|
18
|
+
* // Notify observers
|
|
19
|
+
* this.notify({ type: 'update', data });
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* // Create an observer
|
|
24
|
+
* class DataView implements IObserver<DataUpdate> {
|
|
25
|
+
* update(data: DataUpdate): void {
|
|
26
|
+
* console.log('Data changed:', data);
|
|
27
|
+
* // Update UI
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
*
|
|
31
|
+
* // Use it
|
|
32
|
+
* const model = new DataModel();
|
|
33
|
+
* const view = new DataView();
|
|
34
|
+
*
|
|
35
|
+
* model.attach(view);
|
|
36
|
+
* model.updateData({ id: 1, name: 'Test' }); // view.update() is called
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export interface IObserver<T> {
|
|
40
|
+
/**
|
|
41
|
+
* Called when the subject's state changes
|
|
42
|
+
* @param data - The data from the subject
|
|
43
|
+
*/
|
|
44
|
+
update(data: T): void;
|
|
45
|
+
}
|
|
46
|
+
export interface ISubject<T> {
|
|
47
|
+
/**
|
|
48
|
+
* Attach an observer to this subject
|
|
49
|
+
* @param observer - The observer to attach
|
|
50
|
+
*/
|
|
51
|
+
attach(observer: IObserver<T>): void;
|
|
52
|
+
/**
|
|
53
|
+
* Detach an observer from this subject
|
|
54
|
+
* @param observer - The observer to detach
|
|
55
|
+
*/
|
|
56
|
+
detach(observer: IObserver<T>): void;
|
|
57
|
+
/**
|
|
58
|
+
* Notify all attached observers
|
|
59
|
+
* @param data - The data to send to observers
|
|
60
|
+
*/
|
|
61
|
+
notify(data: T): void;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Base implementation of the Subject interface
|
|
65
|
+
*/
|
|
66
|
+
export declare class Subject<T> implements ISubject<T> {
|
|
67
|
+
private observers;
|
|
68
|
+
/**
|
|
69
|
+
* Attach an observer to this subject
|
|
70
|
+
*/
|
|
71
|
+
attach(observer: IObserver<T>): void;
|
|
72
|
+
/**
|
|
73
|
+
* Detach an observer from this subject
|
|
74
|
+
*/
|
|
75
|
+
detach(observer: IObserver<T>): void;
|
|
76
|
+
/**
|
|
77
|
+
* Notify all attached observers
|
|
78
|
+
*/
|
|
79
|
+
notify(data: T): void;
|
|
80
|
+
/**
|
|
81
|
+
* Get the number of attached observers
|
|
82
|
+
*/
|
|
83
|
+
protected getObserverCount(): number;
|
|
84
|
+
/**
|
|
85
|
+
* Clear all observers
|
|
86
|
+
*/
|
|
87
|
+
protected clearObservers(): void;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../../src/shared/patterns/observer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAErC;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAErC;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,OAAO,CAAC,CAAC,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,SAAS,CAA2B;IAE5C;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAIpC;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAIpC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAUrB;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAIpC;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;CAGjC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operation Mode Pattern
|
|
3
|
+
*
|
|
4
|
+
* Shared pattern for frontend/backend operation modes across grid features.
|
|
5
|
+
* Used for data loading, sorting, filtering, and other operations that can
|
|
6
|
+
* be executed either in-memory (frontend) or delegated to server (backend).
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Operation mode type
|
|
10
|
+
* - 'frontend': Execute operation in-memory (fast, suitable for loaded data)
|
|
11
|
+
* - 'backend': Delegate operation to server (ideal for large datasets, pagination)
|
|
12
|
+
* - 'auto': Automatically choose based on callback presence
|
|
13
|
+
*/
|
|
14
|
+
export type OperationMode = 'frontend' | 'backend' | 'auto';
|
|
15
|
+
/**
|
|
16
|
+
* Resolved operation mode (auto is resolved to frontend or backend)
|
|
17
|
+
*/
|
|
18
|
+
export type ResolvedOperationMode = 'frontend' | 'backend';
|
|
19
|
+
/**
|
|
20
|
+
* Operation mode configuration
|
|
21
|
+
*/
|
|
22
|
+
export interface OperationModeConfig<TCallback = any> {
|
|
23
|
+
/**
|
|
24
|
+
* Operation mode
|
|
25
|
+
* @default 'frontend'
|
|
26
|
+
*/
|
|
27
|
+
mode?: OperationMode;
|
|
28
|
+
/**
|
|
29
|
+
* Callback for backend operations
|
|
30
|
+
* If provided with mode='auto', backend mode is used
|
|
31
|
+
*/
|
|
32
|
+
callback?: TCallback;
|
|
33
|
+
/**
|
|
34
|
+
* Threshold for auto mode decision (optional)
|
|
35
|
+
* E.g., if rowCount > threshold, use backend mode
|
|
36
|
+
*/
|
|
37
|
+
autoThreshold?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Resolve operation mode from configuration
|
|
41
|
+
*
|
|
42
|
+
* @param config - Operation mode configuration
|
|
43
|
+
* @param context - Optional context for auto mode decisions (e.g., rowCount)
|
|
44
|
+
* @returns Resolved mode ('frontend' or 'backend')
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveOperationMode<TCallback = any>(config: OperationModeConfig<TCallback>, context?: {
|
|
47
|
+
rowCount?: number;
|
|
48
|
+
}): ResolvedOperationMode;
|
|
49
|
+
/**
|
|
50
|
+
* Operation mode manager - Base class for feature-specific managers
|
|
51
|
+
*/
|
|
52
|
+
export declare abstract class OperationModeManager<TCallback = any> {
|
|
53
|
+
protected mode: ResolvedOperationMode;
|
|
54
|
+
protected callback?: TCallback;
|
|
55
|
+
constructor(config: OperationModeConfig<TCallback>, context?: {
|
|
56
|
+
rowCount?: number;
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* Get current operation mode
|
|
60
|
+
*/
|
|
61
|
+
getMode(): ResolvedOperationMode;
|
|
62
|
+
/**
|
|
63
|
+
* Check if in frontend mode
|
|
64
|
+
*/
|
|
65
|
+
isFrontendMode(): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Check if in backend mode
|
|
68
|
+
*/
|
|
69
|
+
isBackendMode(): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Execute operation based on mode
|
|
72
|
+
*/
|
|
73
|
+
protected executeOperation<TResult>(frontendOperation: () => TResult | Promise<TResult>, backendOperation: () => TResult | Promise<TResult>): Promise<TResult>;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=operation-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-mode.d.ts","sourceRoot":"","sources":["../../../../src/shared/patterns/operation-mode.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,SAAS,GAAG,GAAG;IAClD;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,GAAG,GAAG,EAClD,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,EACtC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,qBAAqB,CAmBvB;AAED;;GAEG;AACH,8BAAsB,oBAAoB,CAAC,SAAS,GAAG,GAAG;IACxD,SAAS,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;gBAEnB,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAKnF;;OAEG;IACH,OAAO,IAAI,qBAAqB;IAIhC;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;cACa,gBAAgB,CAAC,OAAO,EACtC,iBAAiB,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EACnD,gBAAgB,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GACjD,OAAO,CAAC,OAAO,CAAC;CAOpB"}
|