@zengrid/core 1.0.1 → 1.0.4
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 +5 -5
- 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 +47 -47
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column Store interfaces for ZenGrid
|
|
3
|
+
* Column-oriented storage using typed arrays for performance
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Supported column data types
|
|
7
|
+
*/
|
|
8
|
+
export type ColumnType = 'int32' | 'float64' | 'string' | 'boolean';
|
|
9
|
+
/**
|
|
10
|
+
* Aggregation operations
|
|
11
|
+
*/
|
|
12
|
+
export type AggregateOperation = 'sum' | 'avg' | 'min' | 'max' | 'count';
|
|
13
|
+
/**
|
|
14
|
+
* Column definition
|
|
15
|
+
*/
|
|
16
|
+
export interface ColumnDefinition {
|
|
17
|
+
/** Column name/identifier */
|
|
18
|
+
name: string;
|
|
19
|
+
/** Data type */
|
|
20
|
+
type: ColumnType;
|
|
21
|
+
/** Default value for new rows */
|
|
22
|
+
defaultValue?: any;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Aggregation result
|
|
26
|
+
*/
|
|
27
|
+
export interface AggregationResult {
|
|
28
|
+
operation: AggregateOperation;
|
|
29
|
+
column: string;
|
|
30
|
+
value: number;
|
|
31
|
+
count: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Column Store interface
|
|
35
|
+
*
|
|
36
|
+
* Column-oriented storage for dense grid data.
|
|
37
|
+
* Uses typed arrays (Float64Array, Int32Array) for numeric columns for better performance.
|
|
38
|
+
*/
|
|
39
|
+
export interface ColumnStore {
|
|
40
|
+
/**
|
|
41
|
+
* Add a new column
|
|
42
|
+
* @param definition - Column definition
|
|
43
|
+
* @complexity O(n) where n = rowCount
|
|
44
|
+
*/
|
|
45
|
+
addColumn(definition: ColumnDefinition): void;
|
|
46
|
+
/**
|
|
47
|
+
* Remove a column
|
|
48
|
+
* @param columnName - Column to remove
|
|
49
|
+
* @returns true if column existed and was removed
|
|
50
|
+
* @complexity O(1)
|
|
51
|
+
*/
|
|
52
|
+
removeColumn(columnName: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Check if column exists
|
|
55
|
+
* @param columnName - Column name
|
|
56
|
+
* @complexity O(1)
|
|
57
|
+
*/
|
|
58
|
+
hasColumn(columnName: string): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Get value at (row, column)
|
|
61
|
+
* @param row - Row index
|
|
62
|
+
* @param columnName - Column name
|
|
63
|
+
* @returns Value or undefined if out of bounds
|
|
64
|
+
* @complexity O(1)
|
|
65
|
+
*/
|
|
66
|
+
getValue(row: number, columnName: string): any;
|
|
67
|
+
/**
|
|
68
|
+
* Set value at (row, column)
|
|
69
|
+
* @param row - Row index
|
|
70
|
+
* @param columnName - Column name
|
|
71
|
+
* @param value - Value to set
|
|
72
|
+
* @complexity O(1)
|
|
73
|
+
*/
|
|
74
|
+
setValue(row: number, columnName: string, value: any): void;
|
|
75
|
+
/**
|
|
76
|
+
* Get entire row as object
|
|
77
|
+
* @param row - Row index
|
|
78
|
+
* @returns Object with column names as keys
|
|
79
|
+
* @complexity O(c) where c = number of columns
|
|
80
|
+
*/
|
|
81
|
+
getRow(row: number): Record<string, any>;
|
|
82
|
+
/**
|
|
83
|
+
* Set multiple values in a row
|
|
84
|
+
* @param row - Row index
|
|
85
|
+
* @param values - Object with column names and values
|
|
86
|
+
* @complexity O(k) where k = Object.keys(values).length
|
|
87
|
+
*/
|
|
88
|
+
setRow(row: number, values: Record<string, any>): void;
|
|
89
|
+
/**
|
|
90
|
+
* Get entire column as array
|
|
91
|
+
* @param columnName - Column name
|
|
92
|
+
* @returns Copy of column data
|
|
93
|
+
* @complexity O(n) where n = rowCount
|
|
94
|
+
*/
|
|
95
|
+
getColumn(columnName: string): any[];
|
|
96
|
+
/**
|
|
97
|
+
* Set entire column
|
|
98
|
+
* @param columnName - Column name
|
|
99
|
+
* @param values - Array of values (length must match rowCount)
|
|
100
|
+
* @complexity O(n)
|
|
101
|
+
*/
|
|
102
|
+
setColumn(columnName: string, values: any[]): void;
|
|
103
|
+
/**
|
|
104
|
+
* Perform aggregation on a column
|
|
105
|
+
* @param columnName - Column to aggregate
|
|
106
|
+
* @param operation - Aggregation operation
|
|
107
|
+
* @returns Aggregation result
|
|
108
|
+
* @complexity O(n)
|
|
109
|
+
*/
|
|
110
|
+
aggregate(columnName: string, operation: AggregateOperation): AggregationResult;
|
|
111
|
+
/**
|
|
112
|
+
* Add new rows (expand capacity)
|
|
113
|
+
* @param count - Number of rows to add
|
|
114
|
+
* @complexity O(n * c) where n = count, c = columns
|
|
115
|
+
*/
|
|
116
|
+
addRows(count: number): void;
|
|
117
|
+
/**
|
|
118
|
+
* Clear all data but keep column definitions
|
|
119
|
+
* @complexity O(c) where c = number of columns
|
|
120
|
+
*/
|
|
121
|
+
clear(): void;
|
|
122
|
+
/**
|
|
123
|
+
* Number of rows
|
|
124
|
+
*/
|
|
125
|
+
readonly rowCount: number;
|
|
126
|
+
/**
|
|
127
|
+
* Number of columns
|
|
128
|
+
*/
|
|
129
|
+
readonly columnCount: number;
|
|
130
|
+
/**
|
|
131
|
+
* Column names
|
|
132
|
+
*/
|
|
133
|
+
readonly columns: ReadonlyArray<string>;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Options for creating a ColumnStore
|
|
137
|
+
*/
|
|
138
|
+
export interface ColumnStoreOptions {
|
|
139
|
+
/**
|
|
140
|
+
* Initial row count
|
|
141
|
+
* @default 0
|
|
142
|
+
*/
|
|
143
|
+
rowCount?: number;
|
|
144
|
+
/**
|
|
145
|
+
* Column definitions
|
|
146
|
+
* @default []
|
|
147
|
+
*/
|
|
148
|
+
columns?: ColumnDefinition[];
|
|
149
|
+
/**
|
|
150
|
+
* Whether to grow automatically when accessing rows beyond rowCount
|
|
151
|
+
* @default false
|
|
152
|
+
*/
|
|
153
|
+
autoGrow?: boolean;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=column-store.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-store.interface.d.ts","sourceRoot":"","sources":["../../../../../src/shared/data-structures/column-store/column-store.interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB,iCAAiC;IACjC,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAE9C;;;;;OAKG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAE1C;;;;OAIG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvC;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC;IAE/C;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAE5D;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEzC;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAEvD;;;;;OAKG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;IAErC;;;;;OAKG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEnD;;;;;;OAMG;IACH,SAAS,CACP,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,kBAAkB,GAC5B,iBAAiB,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;OAGG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column Store - Column-oriented storage with typed arrays
|
|
3
|
+
*/
|
|
4
|
+
export { ColumnStore } from './column-store';
|
|
5
|
+
export type { ColumnStore as IColumnStore, ColumnStoreOptions, ColumnDefinition, ColumnType, AggregateOperation, AggregationResult, } from './column-store.interface';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/data-structures/column-store/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EACV,WAAW,IAAI,YAAY,EAC3B,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ICommand, ICommandStack, ICommandStackOptions } from './command-stack.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Implementation of a command stack for undo/redo functionality.
|
|
4
|
+
*
|
|
5
|
+
* Time Complexity:
|
|
6
|
+
* - execute: O(1)
|
|
7
|
+
* - undo: O(1)
|
|
8
|
+
* - redo: O(1)
|
|
9
|
+
* - canUndo/canRedo: O(1)
|
|
10
|
+
* - clear: O(1)
|
|
11
|
+
*
|
|
12
|
+
* Space Complexity: O(n) where n is the number of commands (up to maxSize)
|
|
13
|
+
*/
|
|
14
|
+
export declare class CommandStack implements ICommandStack {
|
|
15
|
+
private undoStack;
|
|
16
|
+
private redoStack;
|
|
17
|
+
private readonly maxSize;
|
|
18
|
+
constructor(options?: ICommandStackOptions);
|
|
19
|
+
/**
|
|
20
|
+
* Executes a command and adds it to the undo stack.
|
|
21
|
+
* Clears the redo stack as new actions invalidate the redo history.
|
|
22
|
+
*/
|
|
23
|
+
execute(command: ICommand): void;
|
|
24
|
+
/**
|
|
25
|
+
* Undoes the last executed command.
|
|
26
|
+
*/
|
|
27
|
+
undo(): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Redoes the last undone command.
|
|
30
|
+
*/
|
|
31
|
+
redo(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Checks if there are commands that can be undone.
|
|
34
|
+
*/
|
|
35
|
+
canUndo(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Checks if there are commands that can be redone.
|
|
38
|
+
*/
|
|
39
|
+
canRedo(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Clears all commands from both stacks.
|
|
42
|
+
*/
|
|
43
|
+
clear(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Gets the number of commands in the undo stack.
|
|
46
|
+
*/
|
|
47
|
+
getUndoCount(): number;
|
|
48
|
+
/**
|
|
49
|
+
* Gets the number of commands in the redo stack.
|
|
50
|
+
*/
|
|
51
|
+
getRedoCount(): number;
|
|
52
|
+
/**
|
|
53
|
+
* Gets the descriptions of all commands in the undo stack.
|
|
54
|
+
*/
|
|
55
|
+
getUndoHistory(): string[];
|
|
56
|
+
/**
|
|
57
|
+
* Gets the descriptions of all commands in the redo stack.
|
|
58
|
+
*/
|
|
59
|
+
getRedoHistory(): string[];
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=command-stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-stack.d.ts","sourceRoot":"","sources":["../../../../../src/shared/data-structures/command-stack/command-stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAEnC;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,GAAE,oBAAyB;IAQ9C;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAehC;;OAEG;IACH,IAAI,IAAI,OAAO;IAYf;;OAEG;IACH,IAAI,IAAI,OAAO;IAmBf;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;IAM1B;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;CAK3B"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a command that can be executed, undone, and redone.
|
|
3
|
+
*/
|
|
4
|
+
export interface ICommand {
|
|
5
|
+
/**
|
|
6
|
+
* Executes the command.
|
|
7
|
+
*/
|
|
8
|
+
execute(): void;
|
|
9
|
+
/**
|
|
10
|
+
* Undoes the command.
|
|
11
|
+
*/
|
|
12
|
+
undo(): void;
|
|
13
|
+
/**
|
|
14
|
+
* Redoes the command (default implementation calls execute).
|
|
15
|
+
*/
|
|
16
|
+
redo?(): void;
|
|
17
|
+
/**
|
|
18
|
+
* Optional description of the command for debugging.
|
|
19
|
+
*/
|
|
20
|
+
description?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Configuration options for CommandStack.
|
|
24
|
+
*/
|
|
25
|
+
export interface ICommandStackOptions {
|
|
26
|
+
/**
|
|
27
|
+
* Maximum number of commands to keep in history.
|
|
28
|
+
* @default 100
|
|
29
|
+
*/
|
|
30
|
+
maxSize?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Interface for a command stack that supports undo/redo operations.
|
|
34
|
+
*/
|
|
35
|
+
export interface ICommandStack {
|
|
36
|
+
/**
|
|
37
|
+
* Executes a command and adds it to the undo stack.
|
|
38
|
+
* Clears the redo stack.
|
|
39
|
+
*/
|
|
40
|
+
execute(command: ICommand): void;
|
|
41
|
+
/**
|
|
42
|
+
* Undoes the last executed command.
|
|
43
|
+
* @returns true if a command was undone, false otherwise
|
|
44
|
+
*/
|
|
45
|
+
undo(): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Redoes the last undone command.
|
|
48
|
+
* @returns true if a command was redone, false otherwise
|
|
49
|
+
*/
|
|
50
|
+
redo(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Checks if there are commands that can be undone.
|
|
53
|
+
*/
|
|
54
|
+
canUndo(): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Checks if there are commands that can be redone.
|
|
57
|
+
*/
|
|
58
|
+
canRedo(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Clears all commands from the stack.
|
|
61
|
+
*/
|
|
62
|
+
clear(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Gets the number of commands in the undo stack.
|
|
65
|
+
*/
|
|
66
|
+
getUndoCount(): number;
|
|
67
|
+
/**
|
|
68
|
+
* Gets the number of commands in the redo stack.
|
|
69
|
+
*/
|
|
70
|
+
getRedoCount(): number;
|
|
71
|
+
/**
|
|
72
|
+
* Gets the descriptions of all commands in the undo stack.
|
|
73
|
+
*/
|
|
74
|
+
getUndoHistory(): string[];
|
|
75
|
+
/**
|
|
76
|
+
* Gets the descriptions of all commands in the redo stack.
|
|
77
|
+
*/
|
|
78
|
+
getRedoHistory(): string[];
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=command-stack.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-stack.interface.d.ts","sourceRoot":"","sources":["../../../../../src/shared/data-structures/command-stack/command-stack.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;OAEG;IACH,IAAI,CAAC,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IAEjC;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC;IAEhB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC;IAEhB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC;IAEnB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC;IAEnB;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC;IAEvB;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC;IAEvB;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE,CAAC;IAE3B;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/data-structures/command-stack/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import type { IDependencyGraph, NodeId, DependencyGraphOptions, TopologicalSortResult, GraphStats } from './dependency-graph.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Dependency Graph (Directed Acyclic Graph)
|
|
4
|
+
*
|
|
5
|
+
* A graph structure for tracking dependencies between nodes.
|
|
6
|
+
* Optimized for formula calculation order and cycle detection.
|
|
7
|
+
*
|
|
8
|
+
* **Time Complexity:**
|
|
9
|
+
* - Add node: O(1)
|
|
10
|
+
* - Add edge: O(1) without cycle check, O(V + E) with cycle check
|
|
11
|
+
* - Remove node: O(E) where E = edges connected to node
|
|
12
|
+
* - Topological sort: O(V + E) using Kahn's algorithm
|
|
13
|
+
* - Cycle detection: O(V + E) using DFS
|
|
14
|
+
*
|
|
15
|
+
* **Space Complexity:** O(V + E)
|
|
16
|
+
*
|
|
17
|
+
* **Use Cases:**
|
|
18
|
+
* - Formula dependencies: =SUM(A1:A10) depends on cells A1 through A10
|
|
19
|
+
* - Calculation order: Calculate dependencies before dependents
|
|
20
|
+
* - Circular reference detection: =A1 in cell A1 is invalid
|
|
21
|
+
* - Dirty cell propagation: When B1 changes, recalculate all cells that depend on B1
|
|
22
|
+
*
|
|
23
|
+
* @example Basic Formula Dependencies
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const graph = new DependencyGraph();
|
|
26
|
+
*
|
|
27
|
+
* // Cell A3 contains formula =A1+A2
|
|
28
|
+
* graph.addDependency('A3', 'A1'); // A3 depends on A1
|
|
29
|
+
* graph.addDependency('A3', 'A2'); // A3 depends on A2
|
|
30
|
+
*
|
|
31
|
+
* // Cell A4 contains formula =A3*2
|
|
32
|
+
* graph.addDependency('A4', 'A3'); // A4 depends on A3
|
|
33
|
+
*
|
|
34
|
+
* // Get calculation order
|
|
35
|
+
* const { order } = graph.topologicalSort();
|
|
36
|
+
* // order: ['A1', 'A2', 'A3', 'A4']
|
|
37
|
+
*
|
|
38
|
+
* // Detect circular reference
|
|
39
|
+
* const wouldCycle = graph.wouldCreateCycle('A1', 'A4');
|
|
40
|
+
* // wouldCycle: true (A4→A3→A1→A4 creates a cycle)
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example Incremental Recalculation
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // User changes cell B1
|
|
46
|
+
* const affectedCells = graph.getCalculationOrder(['B1']);
|
|
47
|
+
* // Returns: ['B1', 'C1', 'D1', ...] (all cells that transitively depend on B1)
|
|
48
|
+
*
|
|
49
|
+
* // Recalculate only affected cells in correct order
|
|
50
|
+
* affectedCells.forEach(cellId => {
|
|
51
|
+
* calculateCell(cellId);
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare class DependencyGraph implements IDependencyGraph {
|
|
56
|
+
/** Map of node → nodes it depends on */
|
|
57
|
+
private dependencies;
|
|
58
|
+
/** Map of node → nodes that depend on it */
|
|
59
|
+
private dependents;
|
|
60
|
+
private options;
|
|
61
|
+
constructor(options?: DependencyGraphOptions);
|
|
62
|
+
/**
|
|
63
|
+
* Add a node to the graph
|
|
64
|
+
*/
|
|
65
|
+
addNode(id: NodeId): void;
|
|
66
|
+
/**
|
|
67
|
+
* Add a dependency edge (from depends on to)
|
|
68
|
+
*
|
|
69
|
+
* @param from - Dependent node
|
|
70
|
+
* @param to - Dependency node
|
|
71
|
+
* @returns true if edge was added, false if it would create a cycle
|
|
72
|
+
*/
|
|
73
|
+
addDependency(from: NodeId, to: NodeId): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Remove a node and all its dependencies
|
|
76
|
+
*/
|
|
77
|
+
removeNode(id: NodeId): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Remove a specific dependency
|
|
80
|
+
*/
|
|
81
|
+
removeDependency(from: NodeId, to: NodeId): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Check if a node exists
|
|
84
|
+
*/
|
|
85
|
+
hasNode(id: NodeId): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Check if a dependency exists
|
|
88
|
+
*/
|
|
89
|
+
hasDependency(from: NodeId, to: NodeId): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Get direct dependencies of a node (what it depends on)
|
|
92
|
+
*/
|
|
93
|
+
getDependencies(id: NodeId): NodeId[];
|
|
94
|
+
/**
|
|
95
|
+
* Get direct dependents of a node (what depends on it)
|
|
96
|
+
*/
|
|
97
|
+
getDependents(id: NodeId): NodeId[];
|
|
98
|
+
/**
|
|
99
|
+
* Get all transitive dependencies (recursive)
|
|
100
|
+
*/
|
|
101
|
+
getTransitiveDependencies(id: NodeId): NodeId[];
|
|
102
|
+
/**
|
|
103
|
+
* Get all transitive dependents (recursive)
|
|
104
|
+
*/
|
|
105
|
+
getTransitiveDependents(id: NodeId): NodeId[];
|
|
106
|
+
/**
|
|
107
|
+
* Check if adding a dependency would create a cycle
|
|
108
|
+
*
|
|
109
|
+
* Uses DFS to detect if there's a path from 'to' back to 'from'
|
|
110
|
+
*/
|
|
111
|
+
wouldCreateCycle(from: NodeId, to: NodeId): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Detect all cycles in the graph using DFS
|
|
114
|
+
*/
|
|
115
|
+
detectCycles(): NodeId[][];
|
|
116
|
+
/**
|
|
117
|
+
* Perform topological sort using Kahn's algorithm
|
|
118
|
+
*
|
|
119
|
+
* Returns nodes in dependency order (dependencies before dependents)
|
|
120
|
+
*/
|
|
121
|
+
topologicalSort(): TopologicalSortResult;
|
|
122
|
+
/**
|
|
123
|
+
* Get calculation order for incremental updates
|
|
124
|
+
*
|
|
125
|
+
* Returns all nodes that need to be recalculated when the given nodes change,
|
|
126
|
+
* in the correct calculation order.
|
|
127
|
+
*/
|
|
128
|
+
getCalculationOrder(changedNodes: NodeId[]): NodeId[];
|
|
129
|
+
/**
|
|
130
|
+
* Clear all nodes and edges
|
|
131
|
+
*/
|
|
132
|
+
clear(): void;
|
|
133
|
+
/**
|
|
134
|
+
* Get all nodes
|
|
135
|
+
*/
|
|
136
|
+
getAllNodes(): NodeId[];
|
|
137
|
+
/**
|
|
138
|
+
* Get statistics about the graph
|
|
139
|
+
*/
|
|
140
|
+
getStats(): GraphStats;
|
|
141
|
+
/**
|
|
142
|
+
* Clone the graph
|
|
143
|
+
*/
|
|
144
|
+
clone(): IDependencyGraph;
|
|
145
|
+
private calculateDepth;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=dependency-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../../../../src/shared/data-structures/dependency-graph/dependency-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,MAAM,EACN,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,EACX,MAAM,8BAA8B,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,wCAAwC;IACxC,OAAO,CAAC,YAAY,CAAuC;IAE3D,4CAA4C;IAC5C,OAAO,CAAC,UAAU,CAAuC;IAEzD,OAAO,CAAC,OAAO,CAAmC;gBAEtC,OAAO,GAAE,sBAA2B;IAOhD;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOzB;;;;;;OAMG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IA4BhD;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAsB/B;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IASnD;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IAIhD;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAIrC;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAInC;;OAEG;IACH,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAqB/C;;OAEG;IACH,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAqB7C;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IA0BnD;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE,EAAE;IAsC1B;;;;OAIG;IACH,eAAe,IAAI,qBAAqB;IAuDxC;;;;;OAKG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAmCrD;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,QAAQ,IAAI,UAAU;IA+BtB;;OAEG;IACH,KAAK,IAAI,gBAAgB;IAoBzB,OAAO,CAAC,cAAc;CAoBvB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Graph (DAG) Interface
|
|
3
|
+
*
|
|
4
|
+
* Used for:
|
|
5
|
+
* - Formula dependency tracking (cell A1 depends on B1, C1)
|
|
6
|
+
* - Topological sorting for calculation order
|
|
7
|
+
* - Cycle detection to prevent circular references
|
|
8
|
+
* - Dirty cell tracking for incremental recalculation
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Graph node identifier
|
|
12
|
+
*/
|
|
13
|
+
export type NodeId = string | number;
|
|
14
|
+
/**
|
|
15
|
+
* Dependency relationship
|
|
16
|
+
*/
|
|
17
|
+
export interface Dependency {
|
|
18
|
+
/**
|
|
19
|
+
* Source node (dependent)
|
|
20
|
+
*/
|
|
21
|
+
from: NodeId;
|
|
22
|
+
/**
|
|
23
|
+
* Target node (dependency)
|
|
24
|
+
*/
|
|
25
|
+
to: NodeId;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Topological sort result
|
|
29
|
+
*/
|
|
30
|
+
export interface TopologicalSortResult {
|
|
31
|
+
/**
|
|
32
|
+
* Sorted nodes in dependency order
|
|
33
|
+
*/
|
|
34
|
+
order: NodeId[];
|
|
35
|
+
/**
|
|
36
|
+
* Whether the graph has cycles
|
|
37
|
+
*/
|
|
38
|
+
hasCycle: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Nodes involved in cycles (if any)
|
|
41
|
+
*/
|
|
42
|
+
cycleNodes: NodeId[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Graph statistics
|
|
46
|
+
*/
|
|
47
|
+
export interface GraphStats {
|
|
48
|
+
/**
|
|
49
|
+
* Total number of nodes
|
|
50
|
+
*/
|
|
51
|
+
nodeCount: number;
|
|
52
|
+
/**
|
|
53
|
+
* Total number of edges (dependencies)
|
|
54
|
+
*/
|
|
55
|
+
edgeCount: number;
|
|
56
|
+
/**
|
|
57
|
+
* Nodes with no dependencies (sources)
|
|
58
|
+
*/
|
|
59
|
+
sourceCount: number;
|
|
60
|
+
/**
|
|
61
|
+
* Nodes with no dependents (sinks)
|
|
62
|
+
*/
|
|
63
|
+
sinkCount: number;
|
|
64
|
+
/**
|
|
65
|
+
* Maximum dependency chain length
|
|
66
|
+
*/
|
|
67
|
+
maxDepth: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Dependency Graph options
|
|
71
|
+
*/
|
|
72
|
+
export interface DependencyGraphOptions {
|
|
73
|
+
/**
|
|
74
|
+
* Allow self-loops (node depending on itself)
|
|
75
|
+
* @default false
|
|
76
|
+
*/
|
|
77
|
+
allowSelfLoops?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Throw error on cycle detection
|
|
80
|
+
* @default false
|
|
81
|
+
*/
|
|
82
|
+
throwOnCycle?: boolean;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Dependency Graph interface
|
|
86
|
+
*/
|
|
87
|
+
export interface IDependencyGraph {
|
|
88
|
+
/**
|
|
89
|
+
* Add a node to the graph
|
|
90
|
+
*/
|
|
91
|
+
addNode(id: NodeId): void;
|
|
92
|
+
/**
|
|
93
|
+
* Add a dependency edge (from depends on to)
|
|
94
|
+
*/
|
|
95
|
+
addDependency(from: NodeId, to: NodeId): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Remove a node and all its dependencies
|
|
98
|
+
*/
|
|
99
|
+
removeNode(id: NodeId): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Remove a specific dependency
|
|
102
|
+
*/
|
|
103
|
+
removeDependency(from: NodeId, to: NodeId): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Check if a node exists
|
|
106
|
+
*/
|
|
107
|
+
hasNode(id: NodeId): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Check if a dependency exists
|
|
110
|
+
*/
|
|
111
|
+
hasDependency(from: NodeId, to: NodeId): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Get all dependencies of a node (what it depends on)
|
|
114
|
+
*/
|
|
115
|
+
getDependencies(id: NodeId): NodeId[];
|
|
116
|
+
/**
|
|
117
|
+
* Get all dependents of a node (what depends on it)
|
|
118
|
+
*/
|
|
119
|
+
getDependents(id: NodeId): NodeId[];
|
|
120
|
+
/**
|
|
121
|
+
* Get all transitive dependencies (recursive)
|
|
122
|
+
*/
|
|
123
|
+
getTransitiveDependencies(id: NodeId): NodeId[];
|
|
124
|
+
/**
|
|
125
|
+
* Get all transitive dependents (recursive)
|
|
126
|
+
*/
|
|
127
|
+
getTransitiveDependents(id: NodeId): NodeId[];
|
|
128
|
+
/**
|
|
129
|
+
* Detect if adding a dependency would create a cycle
|
|
130
|
+
*/
|
|
131
|
+
wouldCreateCycle(from: NodeId, to: NodeId): boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Detect all cycles in the graph
|
|
134
|
+
*/
|
|
135
|
+
detectCycles(): NodeId[][];
|
|
136
|
+
/**
|
|
137
|
+
* Perform topological sort
|
|
138
|
+
*/
|
|
139
|
+
topologicalSort(): TopologicalSortResult;
|
|
140
|
+
/**
|
|
141
|
+
* Get calculation order for incremental updates
|
|
142
|
+
*/
|
|
143
|
+
getCalculationOrder(changedNodes: NodeId[]): NodeId[];
|
|
144
|
+
/**
|
|
145
|
+
* Clear all nodes and edges
|
|
146
|
+
*/
|
|
147
|
+
clear(): void;
|
|
148
|
+
/**
|
|
149
|
+
* Get all nodes
|
|
150
|
+
*/
|
|
151
|
+
getAllNodes(): NodeId[];
|
|
152
|
+
/**
|
|
153
|
+
* Get statistics about the graph
|
|
154
|
+
*/
|
|
155
|
+
getStats(): GraphStats;
|
|
156
|
+
/**
|
|
157
|
+
* Clone the graph
|
|
158
|
+
*/
|
|
159
|
+
clone(): IDependencyGraph;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=dependency-graph.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-graph.interface.d.ts","sourceRoot":"","sources":["../../../../../src/shared/data-structures/dependency-graph/dependency-graph.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAEjD;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpD;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAE7B;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAEjD;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEtC;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEpC;;OAEG;IACH,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEhD;;OAEG;IACH,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE9C;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpD;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE,EAAE,CAAC;IAE3B;;OAEG;IACH,eAAe,IAAI,qBAAqB,CAAC;IAEzC;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAEtD;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE,CAAC;IAExB;;OAEG;IACH,QAAQ,IAAI,UAAU,CAAC;IAEvB;;OAEG;IACH,KAAK,IAAI,gBAAgB,CAAC;CAC3B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Graph (DAG) data structure
|
|
3
|
+
*
|
|
4
|
+
* Used for formula dependency tracking, cycle detection, and calculation ordering.
|
|
5
|
+
*/
|
|
6
|
+
export { DependencyGraph } from './dependency-graph';
|
|
7
|
+
export type { IDependencyGraph, NodeId, Dependency, DependencyGraphOptions, TopologicalSortResult, GraphStats, } from './dependency-graph.interface';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/data-structures/dependency-graph/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EACV,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,GACX,MAAM,8BAA8B,CAAC"}
|