@zengrid/shared 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/README.md +4 -0
  2. package/dist/README.md +48 -0
  3. package/dist/index.cjs.default.js +1 -0
  4. package/dist/index.cjs.js +8696 -0
  5. package/dist/index.cjs.mjs +2 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.esm.js +8640 -0
  8. package/dist/package.json +54 -0
  9. package/dist/src/algorithms/filter/bloom-filter.d.ts +120 -0
  10. package/dist/src/algorithms/filter/bloom-filter.d.ts.map +1 -0
  11. package/dist/src/algorithms/filter/index.d.ts +7 -0
  12. package/dist/src/algorithms/filter/index.d.ts.map +1 -0
  13. package/dist/src/algorithms/graph/bfs.d.ts +71 -0
  14. package/dist/src/algorithms/graph/bfs.d.ts.map +1 -0
  15. package/dist/src/algorithms/graph/dfs.d.ts +62 -0
  16. package/dist/src/algorithms/graph/dfs.d.ts.map +1 -0
  17. package/dist/src/algorithms/graph/graph.interface.d.ts +63 -0
  18. package/dist/src/algorithms/graph/graph.interface.d.ts.map +1 -0
  19. package/dist/src/algorithms/graph/index.d.ts +9 -0
  20. package/dist/src/algorithms/graph/index.d.ts.map +1 -0
  21. package/dist/src/algorithms/index.d.ts +11 -0
  22. package/dist/src/algorithms/index.d.ts.map +1 -0
  23. package/dist/src/algorithms/pattern/index.d.ts +8 -0
  24. package/dist/src/algorithms/pattern/index.d.ts.map +1 -0
  25. package/dist/src/algorithms/pattern/sequence-detector.d.ts +62 -0
  26. package/dist/src/algorithms/pattern/sequence-detector.d.ts.map +1 -0
  27. package/dist/src/algorithms/search/binary-search.d.ts +86 -0
  28. package/dist/src/algorithms/search/binary-search.d.ts.map +1 -0
  29. package/dist/src/algorithms/search/index.d.ts +6 -0
  30. package/dist/src/algorithms/search/index.d.ts.map +1 -0
  31. package/dist/src/algorithms/sorting/comparators.d.ts +126 -0
  32. package/dist/src/algorithms/sorting/comparators.d.ts.map +1 -0
  33. package/dist/src/algorithms/sorting/index.d.ts +9 -0
  34. package/dist/src/algorithms/sorting/index.d.ts.map +1 -0
  35. package/dist/src/algorithms/sorting/sorting.interface.d.ts +38 -0
  36. package/dist/src/algorithms/sorting/sorting.interface.d.ts.map +1 -0
  37. package/dist/src/algorithms/sorting/timsort-gallop.d.ts +21 -0
  38. package/dist/src/algorithms/sorting/timsort-gallop.d.ts.map +1 -0
  39. package/dist/src/algorithms/sorting/timsort-merge.d.ts +6 -0
  40. package/dist/src/algorithms/sorting/timsort-merge.d.ts.map +1 -0
  41. package/dist/src/algorithms/sorting/timsort-run.d.ts +38 -0
  42. package/dist/src/algorithms/sorting/timsort-run.d.ts.map +1 -0
  43. package/dist/src/algorithms/sorting/timsort.d.ts +55 -0
  44. package/dist/src/algorithms/sorting/timsort.d.ts.map +1 -0
  45. package/dist/src/algorithms/sorting/timsort.interface.d.ts +32 -0
  46. package/dist/src/algorithms/sorting/timsort.interface.d.ts.map +1 -0
  47. package/dist/src/data-structures/column-store/column-store.d.ts +52 -0
  48. package/dist/src/data-structures/column-store/column-store.d.ts.map +1 -0
  49. package/dist/src/data-structures/column-store/column-store.interface.d.ts +155 -0
  50. package/dist/src/data-structures/column-store/column-store.interface.d.ts.map +1 -0
  51. package/dist/src/data-structures/column-store/index.d.ts +6 -0
  52. package/dist/src/data-structures/column-store/index.d.ts.map +1 -0
  53. package/dist/src/data-structures/command-stack/command-stack.d.ts +61 -0
  54. package/dist/src/data-structures/command-stack/command-stack.d.ts.map +1 -0
  55. package/dist/src/data-structures/command-stack/command-stack.interface.d.ts +80 -0
  56. package/dist/src/data-structures/command-stack/command-stack.interface.d.ts.map +1 -0
  57. package/dist/src/data-structures/command-stack/index.d.ts +3 -0
  58. package/dist/src/data-structures/command-stack/index.d.ts.map +1 -0
  59. package/dist/src/data-structures/dependency-graph/dependency-graph.d.ts +147 -0
  60. package/dist/src/data-structures/dependency-graph/dependency-graph.d.ts.map +1 -0
  61. package/dist/src/data-structures/dependency-graph/dependency-graph.interface.d.ts +161 -0
  62. package/dist/src/data-structures/dependency-graph/dependency-graph.interface.d.ts.map +1 -0
  63. package/dist/src/data-structures/dependency-graph/index.d.ts +8 -0
  64. package/dist/src/data-structures/dependency-graph/index.d.ts.map +1 -0
  65. package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts +84 -0
  66. package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts.map +1 -0
  67. package/dist/src/data-structures/disjoint-set/disjoint-set.interface.d.ts +185 -0
  68. package/dist/src/data-structures/disjoint-set/disjoint-set.interface.d.ts.map +1 -0
  69. package/dist/src/data-structures/disjoint-set/index.d.ts +7 -0
  70. package/dist/src/data-structures/disjoint-set/index.d.ts.map +1 -0
  71. package/dist/src/data-structures/index-map/index-map.d.ts +150 -0
  72. package/dist/src/data-structures/index-map/index-map.d.ts.map +1 -0
  73. package/dist/src/data-structures/index-map/index-map.interface.d.ts +186 -0
  74. package/dist/src/data-structures/index-map/index-map.interface.d.ts.map +1 -0
  75. package/dist/src/data-structures/index-map/index.d.ts +6 -0
  76. package/dist/src/data-structures/index-map/index.d.ts.map +1 -0
  77. package/dist/src/data-structures/index.d.ts +36 -0
  78. package/dist/src/data-structures/index.d.ts.map +1 -0
  79. package/dist/src/data-structures/interval-tree/index.d.ts +7 -0
  80. package/dist/src/data-structures/interval-tree/index.d.ts.map +1 -0
  81. package/dist/src/data-structures/interval-tree/interval-tree.d.ts +58 -0
  82. package/dist/src/data-structures/interval-tree/interval-tree.d.ts.map +1 -0
  83. package/dist/src/data-structures/interval-tree/interval-tree.interface.d.ts +212 -0
  84. package/dist/src/data-structures/interval-tree/interval-tree.interface.d.ts.map +1 -0
  85. package/dist/src/data-structures/interval-tree/node.d.ts +34 -0
  86. package/dist/src/data-structures/interval-tree/node.d.ts.map +1 -0
  87. package/dist/src/data-structures/interval-tree/operations/balance.d.ts +34 -0
  88. package/dist/src/data-structures/interval-tree/operations/balance.d.ts.map +1 -0
  89. package/dist/src/data-structures/interval-tree/operations/delete.d.ts +26 -0
  90. package/dist/src/data-structures/interval-tree/operations/delete.d.ts.map +1 -0
  91. package/dist/src/data-structures/interval-tree/operations/insert.d.ts +19 -0
  92. package/dist/src/data-structures/interval-tree/operations/insert.d.ts.map +1 -0
  93. package/dist/src/data-structures/interval-tree/operations/search.d.ts +46 -0
  94. package/dist/src/data-structures/interval-tree/operations/search.d.ts.map +1 -0
  95. package/dist/src/data-structures/interval-tree/operations/traversal.d.ts +29 -0
  96. package/dist/src/data-structures/interval-tree/operations/traversal.d.ts.map +1 -0
  97. package/dist/src/data-structures/interval-tree/operations/utilities.d.ts +30 -0
  98. package/dist/src/data-structures/interval-tree/operations/utilities.d.ts.map +1 -0
  99. package/dist/src/data-structures/lru-cache/index.d.ts +3 -0
  100. package/dist/src/data-structures/lru-cache/index.d.ts.map +1 -0
  101. package/dist/src/data-structures/lru-cache/lru-cache.d.ts +134 -0
  102. package/dist/src/data-structures/lru-cache/lru-cache.d.ts.map +1 -0
  103. package/dist/src/data-structures/lru-cache/lru-cache.interface.d.ts +173 -0
  104. package/dist/src/data-structures/lru-cache/lru-cache.interface.d.ts.map +1 -0
  105. package/dist/src/data-structures/prefix-sum-array/index.d.ts +6 -0
  106. package/dist/src/data-structures/prefix-sum-array/index.d.ts.map +1 -0
  107. package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts +63 -0
  108. package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts.map +1 -0
  109. package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts +80 -0
  110. package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts.map +1 -0
  111. package/dist/src/data-structures/ring-buffer.d.ts +96 -0
  112. package/dist/src/data-structures/ring-buffer.d.ts.map +1 -0
  113. package/dist/src/data-structures/rtree/index.d.ts +8 -0
  114. package/dist/src/data-structures/rtree/index.d.ts.map +1 -0
  115. package/dist/src/data-structures/rtree/rtree.d.ts +81 -0
  116. package/dist/src/data-structures/rtree/rtree.d.ts.map +1 -0
  117. package/dist/src/data-structures/rtree/rtree.interface.d.ts +143 -0
  118. package/dist/src/data-structures/rtree/rtree.interface.d.ts.map +1 -0
  119. package/dist/src/data-structures/segment-tree/aggregation-config.d.ts +6 -0
  120. package/dist/src/data-structures/segment-tree/aggregation-config.d.ts.map +1 -0
  121. package/dist/src/data-structures/segment-tree/index.d.ts +4 -0
  122. package/dist/src/data-structures/segment-tree/index.d.ts.map +1 -0
  123. package/dist/src/data-structures/segment-tree/lazy-propagation.d.ts +5 -0
  124. package/dist/src/data-structures/segment-tree/lazy-propagation.d.ts.map +1 -0
  125. package/dist/src/data-structures/segment-tree/segment-tree.d.ts +30 -0
  126. package/dist/src/data-structures/segment-tree/segment-tree.d.ts.map +1 -0
  127. package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts +202 -0
  128. package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts.map +1 -0
  129. package/dist/src/data-structures/segment-tree/tree-builder.d.ts +3 -0
  130. package/dist/src/data-structures/segment-tree/tree-builder.d.ts.map +1 -0
  131. package/dist/src/data-structures/segment-tree/tree-query.d.ts +3 -0
  132. package/dist/src/data-structures/segment-tree/tree-query.d.ts.map +1 -0
  133. package/dist/src/data-structures/segment-tree/tree-search.d.ts +2 -0
  134. package/dist/src/data-structures/segment-tree/tree-search.d.ts.map +1 -0
  135. package/dist/src/data-structures/segment-tree/tree-update.d.ts +4 -0
  136. package/dist/src/data-structures/segment-tree/tree-update.d.ts.map +1 -0
  137. package/dist/src/data-structures/segment-tree/tree-validation.d.ts +3 -0
  138. package/dist/src/data-structures/segment-tree/tree-validation.d.ts.map +1 -0
  139. package/dist/src/data-structures/skip-list/index.d.ts +4 -0
  140. package/dist/src/data-structures/skip-list/index.d.ts.map +1 -0
  141. package/dist/src/data-structures/skip-list/skip-list.d.ts +137 -0
  142. package/dist/src/data-structures/skip-list/skip-list.d.ts.map +1 -0
  143. package/dist/src/data-structures/skip-list/skip-list.interface.d.ts +223 -0
  144. package/dist/src/data-structures/skip-list/skip-list.interface.d.ts.map +1 -0
  145. package/dist/src/data-structures/sparse-matrix/index.d.ts +6 -0
  146. package/dist/src/data-structures/sparse-matrix/index.d.ts.map +1 -0
  147. package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts +44 -0
  148. package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts.map +1 -0
  149. package/dist/src/data-structures/sparse-matrix/sparse-matrix.interface.d.ts +105 -0
  150. package/dist/src/data-structures/sparse-matrix/sparse-matrix.interface.d.ts.map +1 -0
  151. package/dist/src/data-structures/suffix-array/index.d.ts +3 -0
  152. package/dist/src/data-structures/suffix-array/index.d.ts.map +1 -0
  153. package/dist/src/data-structures/suffix-array/suffix-array.d.ts +102 -0
  154. package/dist/src/data-structures/suffix-array/suffix-array.d.ts.map +1 -0
  155. package/dist/src/data-structures/suffix-array/suffix-array.interface.d.ts +117 -0
  156. package/dist/src/data-structures/suffix-array/suffix-array.interface.d.ts.map +1 -0
  157. package/dist/src/data-structures/trie/index.d.ts +8 -0
  158. package/dist/src/data-structures/trie/index.d.ts.map +1 -0
  159. package/dist/src/data-structures/trie/trie.d.ts +205 -0
  160. package/dist/src/data-structures/trie/trie.d.ts.map +1 -0
  161. package/dist/src/data-structures/trie/trie.interface.d.ts +117 -0
  162. package/dist/src/data-structures/trie/trie.interface.d.ts.map +1 -0
  163. package/dist/src/index.d.ts +54 -0
  164. package/dist/src/index.d.ts.map +1 -0
  165. package/dist/src/patterns/coordinator.d.ts +90 -0
  166. package/dist/src/patterns/coordinator.d.ts.map +1 -0
  167. package/dist/src/patterns/event-emitter.d.ts +106 -0
  168. package/dist/src/patterns/event-emitter.d.ts.map +1 -0
  169. package/dist/src/patterns/factory.d.ts +120 -0
  170. package/dist/src/patterns/factory.d.ts.map +1 -0
  171. package/dist/src/patterns/index.d.ts +21 -0
  172. package/dist/src/patterns/index.d.ts.map +1 -0
  173. package/dist/src/patterns/mediator.d.ts +116 -0
  174. package/dist/src/patterns/mediator.d.ts.map +1 -0
  175. package/dist/src/patterns/object-pool.d.ts +178 -0
  176. package/dist/src/patterns/object-pool.d.ts.map +1 -0
  177. package/dist/src/patterns/observer.d.ts +89 -0
  178. package/dist/src/patterns/observer.d.ts.map +1 -0
  179. package/dist/src/patterns/operation-mode.d.ts +75 -0
  180. package/dist/src/patterns/operation-mode.d.ts.map +1 -0
  181. package/dist/src/patterns/state-machine.d.ts +122 -0
  182. package/dist/src/patterns/state-machine.d.ts.map +1 -0
  183. package/dist/src/reactive/batch-processor.d.ts +80 -0
  184. package/dist/src/reactive/batch-processor.d.ts.map +1 -0
  185. package/dist/src/reactive/core/batch-manager.d.ts +48 -0
  186. package/dist/src/reactive/core/batch-manager.d.ts.map +1 -0
  187. package/dist/src/reactive/core/batch-queue.d.ts +39 -0
  188. package/dist/src/reactive/core/batch-queue.d.ts.map +1 -0
  189. package/dist/src/reactive/core/event-handler-registry.d.ts +52 -0
  190. package/dist/src/reactive/core/event-handler-registry.d.ts.map +1 -0
  191. package/dist/src/reactive/core/event-mapper.d.ts +37 -0
  192. package/dist/src/reactive/core/event-mapper.d.ts.map +1 -0
  193. package/dist/src/reactive/core/pool-stats.d.ts +47 -0
  194. package/dist/src/reactive/core/pool-stats.d.ts.map +1 -0
  195. package/dist/src/reactive/core/subscription-manager.d.ts +46 -0
  196. package/dist/src/reactive/core/subscription-manager.d.ts.map +1 -0
  197. package/dist/src/reactive/event-delegator.d.ts +84 -0
  198. package/dist/src/reactive/event-delegator.d.ts.map +1 -0
  199. package/dist/src/reactive/index.d.ts +61 -0
  200. package/dist/src/reactive/index.d.ts.map +1 -0
  201. package/dist/src/reactive/interfaces.d.ts +207 -0
  202. package/dist/src/reactive/interfaces.d.ts.map +1 -0
  203. package/dist/src/reactive/object-pool.d.ts +97 -0
  204. package/dist/src/reactive/object-pool.d.ts.map +1 -0
  205. package/dist/src/reactive/reactive-state.d.ts +132 -0
  206. package/dist/src/reactive/reactive-state.d.ts.map +1 -0
  207. package/dist/src/types/common.d.ts +56 -0
  208. package/dist/src/types/common.d.ts.map +1 -0
  209. package/dist/src/types/index.d.ts +5 -0
  210. package/dist/src/types/index.d.ts.map +1 -0
  211. package/dist/src/utils/index.d.ts +7 -0
  212. package/dist/src/utils/index.d.ts.map +1 -0
  213. package/dist/src/utils/timing.d.ts +104 -0
  214. package/dist/src/utils/timing.d.ts.map +1 -0
  215. package/dist/src/utils/timing.interface.d.ts +96 -0
  216. package/dist/src/utils/timing.interface.d.ts.map +1 -0
  217. package/package.json +52 -52
@@ -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/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;IAOxC;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAe7B;;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;IASxC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAsB7B,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/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,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG7F,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,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrF,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,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/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/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/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/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"}