@procedures/collections 0.0.0-stage → 0.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 (205) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +21 -0
  3. package/README.md +394 -2
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/async/async-queue.d.ts +155 -0
  6. package/dist/async/async-queue.d.ts.map +1 -0
  7. package/dist/async/async-queue.js +342 -0
  8. package/dist/async/async-queue.js.map +1 -0
  9. package/dist/async/channels.d.ts +188 -0
  10. package/dist/async/channels.d.ts.map +1 -0
  11. package/dist/async/channels.js +314 -0
  12. package/dist/async/channels.js.map +1 -0
  13. package/dist/behaviors/bounded.d.ts +79 -0
  14. package/dist/behaviors/bounded.d.ts.map +1 -0
  15. package/dist/behaviors/bounded.js +384 -0
  16. package/dist/behaviors/bounded.js.map +1 -0
  17. package/dist/behaviors/composite.d.ts +17 -0
  18. package/dist/behaviors/composite.d.ts.map +1 -0
  19. package/dist/behaviors/composite.js +93 -0
  20. package/dist/behaviors/composite.js.map +1 -0
  21. package/dist/behaviors/evented.d.ts +154 -0
  22. package/dist/behaviors/evented.d.ts.map +1 -0
  23. package/dist/behaviors/evented.js +299 -0
  24. package/dist/behaviors/evented.js.map +1 -0
  25. package/dist/behaviors/lru.d.ts +84 -0
  26. package/dist/behaviors/lru.d.ts.map +1 -0
  27. package/dist/behaviors/lru.js +376 -0
  28. package/dist/behaviors/lru.js.map +1 -0
  29. package/dist/behaviors/readonly.d.ts +73 -0
  30. package/dist/behaviors/readonly.d.ts.map +1 -0
  31. package/dist/behaviors/readonly.js +177 -0
  32. package/dist/behaviors/readonly.js.map +1 -0
  33. package/dist/behaviors/safe.d.ts +163 -0
  34. package/dist/behaviors/safe.d.ts.map +1 -0
  35. package/dist/behaviors/safe.js +176 -0
  36. package/dist/behaviors/safe.js.map +1 -0
  37. package/dist/behaviors/synchronized.d.ts +88 -0
  38. package/dist/behaviors/synchronized.d.ts.map +1 -0
  39. package/dist/behaviors/synchronized.js +285 -0
  40. package/dist/behaviors/synchronized.js.map +1 -0
  41. package/dist/behaviors/ttl.d.ts +118 -0
  42. package/dist/behaviors/ttl.d.ts.map +1 -0
  43. package/dist/behaviors/ttl.js +354 -0
  44. package/dist/behaviors/ttl.js.map +1 -0
  45. package/dist/contracts/model.d.ts +29 -0
  46. package/dist/contracts/model.d.ts.map +1 -0
  47. package/dist/contracts/model.js +26 -0
  48. package/dist/contracts/model.js.map +1 -0
  49. package/dist/core/effects.d.ts +176 -0
  50. package/dist/core/effects.d.ts.map +1 -0
  51. package/dist/core/effects.js +180 -0
  52. package/dist/core/effects.js.map +1 -0
  53. package/dist/core/events.d.ts +192 -0
  54. package/dist/core/events.d.ts.map +1 -0
  55. package/dist/core/events.js +291 -0
  56. package/dist/core/events.js.map +1 -0
  57. package/dist/core/middleware.d.ts +231 -0
  58. package/dist/core/middleware.d.ts.map +1 -0
  59. package/dist/core/middleware.js +161 -0
  60. package/dist/core/middleware.js.map +1 -0
  61. package/dist/core/policies.d.ts +220 -0
  62. package/dist/core/policies.d.ts.map +1 -0
  63. package/dist/core/policies.js +48 -0
  64. package/dist/core/policies.js.map +1 -0
  65. package/dist/core/traits.d.ts +142 -0
  66. package/dist/core/traits.d.ts.map +1 -0
  67. package/dist/core/traits.js +8 -0
  68. package/dist/core/traits.js.map +1 -0
  69. package/dist/fx/collectors.d.ts +193 -0
  70. package/dist/fx/collectors.d.ts.map +1 -0
  71. package/dist/fx/collectors.js +375 -0
  72. package/dist/fx/collectors.js.map +1 -0
  73. package/dist/fx/iter.d.ts +166 -0
  74. package/dist/fx/iter.d.ts.map +1 -0
  75. package/dist/fx/iter.js +421 -0
  76. package/dist/fx/iter.js.map +1 -0
  77. package/dist/impl/array-deque.d.ts +112 -0
  78. package/dist/impl/array-deque.d.ts.map +1 -0
  79. package/dist/impl/array-deque.js +380 -0
  80. package/dist/impl/array-deque.js.map +1 -0
  81. package/dist/impl/array-list.d.ts +101 -0
  82. package/dist/impl/array-list.d.ts.map +1 -0
  83. package/dist/impl/array-list.js +387 -0
  84. package/dist/impl/array-list.js.map +1 -0
  85. package/dist/impl/hash-map.d.ts +149 -0
  86. package/dist/impl/hash-map.d.ts.map +1 -0
  87. package/dist/impl/hash-map.js +473 -0
  88. package/dist/impl/hash-map.js.map +1 -0
  89. package/dist/impl/hash-set.d.ts +125 -0
  90. package/dist/impl/hash-set.d.ts.map +1 -0
  91. package/dist/impl/hash-set.js +264 -0
  92. package/dist/impl/hash-set.js.map +1 -0
  93. package/dist/impl/linked-hash-map.d.ts +141 -0
  94. package/dist/impl/linked-hash-map.d.ts.map +1 -0
  95. package/dist/impl/linked-hash-map.js +442 -0
  96. package/dist/impl/linked-hash-map.js.map +1 -0
  97. package/dist/impl/linked-list.d.ts +109 -0
  98. package/dist/impl/linked-list.d.ts.map +1 -0
  99. package/dist/impl/linked-list.js +494 -0
  100. package/dist/impl/linked-list.js.map +1 -0
  101. package/dist/impl/priority-queue.d.ts +139 -0
  102. package/dist/impl/priority-queue.d.ts.map +1 -0
  103. package/dist/impl/priority-queue.js +343 -0
  104. package/dist/impl/priority-queue.js.map +1 -0
  105. package/dist/impl/tree-map.d.ts +153 -0
  106. package/dist/impl/tree-map.d.ts.map +1 -0
  107. package/dist/impl/tree-map.js +788 -0
  108. package/dist/impl/tree-map.js.map +1 -0
  109. package/dist/impl/tree-set.d.ts +112 -0
  110. package/dist/impl/tree-set.d.ts.map +1 -0
  111. package/dist/impl/tree-set.js +374 -0
  112. package/dist/impl/tree-set.js.map +1 -0
  113. package/dist/index.d.ts +106 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +139 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/interfaces/collection.d.ts +119 -0
  118. package/dist/interfaces/collection.d.ts.map +1 -0
  119. package/dist/interfaces/collection.js +8 -0
  120. package/dist/interfaces/collection.js.map +1 -0
  121. package/dist/interfaces/list.d.ts +247 -0
  122. package/dist/interfaces/list.d.ts.map +1 -0
  123. package/dist/interfaces/list.js +8 -0
  124. package/dist/interfaces/list.js.map +1 -0
  125. package/dist/interfaces/map.d.ts +344 -0
  126. package/dist/interfaces/map.d.ts.map +1 -0
  127. package/dist/interfaces/map.js +8 -0
  128. package/dist/interfaces/map.js.map +1 -0
  129. package/dist/interfaces/queue.d.ts +304 -0
  130. package/dist/interfaces/queue.d.ts.map +1 -0
  131. package/dist/interfaces/queue.js +8 -0
  132. package/dist/interfaces/queue.js.map +1 -0
  133. package/dist/interfaces/set.d.ts +137 -0
  134. package/dist/interfaces/set.d.ts.map +1 -0
  135. package/dist/interfaces/set.js +8 -0
  136. package/dist/interfaces/set.js.map +1 -0
  137. package/dist/register.d.ts +8 -0
  138. package/dist/register.d.ts.map +1 -0
  139. package/dist/register.js +8 -0
  140. package/dist/register.js.map +1 -0
  141. package/dist/storage/index.d.ts +15 -0
  142. package/dist/storage/index.d.ts.map +1 -0
  143. package/dist/storage/index.js +14 -0
  144. package/dist/storage/index.js.map +1 -0
  145. package/dist/storage/interface.d.ts +141 -0
  146. package/dist/storage/interface.d.ts.map +1 -0
  147. package/dist/storage/interface.js +23 -0
  148. package/dist/storage/interface.js.map +1 -0
  149. package/dist/storage/memory.d.ts +68 -0
  150. package/dist/storage/memory.d.ts.map +1 -0
  151. package/dist/storage/memory.js +154 -0
  152. package/dist/storage/memory.js.map +1 -0
  153. package/dist/utils/defaults.d.ts +135 -0
  154. package/dist/utils/defaults.d.ts.map +1 -0
  155. package/dist/utils/defaults.js +322 -0
  156. package/dist/utils/defaults.js.map +1 -0
  157. package/dist/utils/factories.d.ts +144 -0
  158. package/dist/utils/factories.d.ts.map +1 -0
  159. package/dist/utils/factories.js +293 -0
  160. package/dist/utils/factories.js.map +1 -0
  161. package/dist/utils/helpers.d.ts +137 -0
  162. package/dist/utils/helpers.d.ts.map +1 -0
  163. package/dist/utils/helpers.js +221 -0
  164. package/dist/utils/helpers.js.map +1 -0
  165. package/package.json +68 -3
  166. package/src/async/async-queue.ts +417 -0
  167. package/src/async/channels.ts +374 -0
  168. package/src/behaviors/bounded.ts +477 -0
  169. package/src/behaviors/composite.ts +99 -0
  170. package/src/behaviors/evented.ts +464 -0
  171. package/src/behaviors/lru.ts +447 -0
  172. package/src/behaviors/readonly.ts +224 -0
  173. package/src/behaviors/safe.ts +372 -0
  174. package/src/behaviors/synchronized.ts +316 -0
  175. package/src/behaviors/ttl.ts +462 -0
  176. package/src/contracts/model.ts +44 -0
  177. package/src/core/effects.ts +323 -0
  178. package/src/core/events.ts +356 -0
  179. package/src/core/middleware.ts +415 -0
  180. package/src/core/policies.ts +316 -0
  181. package/src/core/traits.ts +164 -0
  182. package/src/fx/collectors.ts +500 -0
  183. package/src/fx/iter.ts +536 -0
  184. package/src/impl/array-deque.ts +463 -0
  185. package/src/impl/array-list.ts +490 -0
  186. package/src/impl/hash-map.ts +623 -0
  187. package/src/impl/hash-set.ts +342 -0
  188. package/src/impl/linked-hash-map.ts +572 -0
  189. package/src/impl/linked-list.ts +606 -0
  190. package/src/impl/priority-queue.ts +448 -0
  191. package/src/impl/tree-map.ts +912 -0
  192. package/src/impl/tree-set.ts +469 -0
  193. package/src/index.ts +277 -0
  194. package/src/interfaces/collection.ts +141 -0
  195. package/src/interfaces/list.ts +281 -0
  196. package/src/interfaces/map.ts +405 -0
  197. package/src/interfaces/queue.ts +353 -0
  198. package/src/interfaces/set.ts +158 -0
  199. package/src/register.ts +8 -0
  200. package/src/storage/index.ts +16 -0
  201. package/src/storage/interface.ts +179 -0
  202. package/src/storage/memory.ts +180 -0
  203. package/src/utils/defaults.ts +345 -0
  204. package/src/utils/factories.ts +357 -0
  205. package/src/utils/helpers.ts +248 -0
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Policy types for configurable collection behaviors.
3
+ *
4
+ * Policies define how collections handle edge cases like overflow,
5
+ * underflow, and eviction. These are used by behavior decorators
6
+ * to provide flexible, composable behavior.
7
+ */
8
+ // ============================================================================
9
+ // Default policies
10
+ // ============================================================================
11
+ /**
12
+ * Default overflow policy: throw an error.
13
+ */
14
+ export const DEFAULT_OVERFLOW_POLICY = "throw";
15
+ /**
16
+ * Default underflow policy: throw an error.
17
+ */
18
+ export const DEFAULT_UNDERFLOW_POLICY = "throw";
19
+ /**
20
+ * Default eviction policy: FIFO (oldest first).
21
+ */
22
+ export const DEFAULT_EVICTION_POLICY = "fifo";
23
+ /**
24
+ * Default retry policy: 3 attempts with exponential backoff.
25
+ */
26
+ export const DEFAULT_RETRY_POLICY = {
27
+ maxAttempts: 3,
28
+ initialDelay: 100,
29
+ backoff: "exponential",
30
+ maxDelay: 5000,
31
+ jitter: true,
32
+ };
33
+ /**
34
+ * Default conflict resolution: last write wins.
35
+ */
36
+ export const DEFAULT_CONFLICT_POLICY = "last-write-wins";
37
+ /**
38
+ * Default growth policy: double capacity.
39
+ */
40
+ export const DEFAULT_GROWTH_POLICY = {
41
+ strategy: "double",
42
+ maxCapacity: Number.MAX_SAFE_INTEGER,
43
+ };
44
+ /**
45
+ * Default validation policy: throw on invalid.
46
+ */
47
+ export const DEFAULT_VALIDATION_POLICY = "throw";
48
+ //# sourceMappingURL=policies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policies.js","sourceRoot":"","sources":["../../src/core/policies.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsQH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmB,OAAO,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAoB,OAAO,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmB,MAAM,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,GAAG;IACjB,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAClC,iBAAiB,CAAC;AAEpB;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,MAAM,CAAC,gBAAgB;CACrC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAqB,OAAO,CAAC"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Core traits and capability interfaces for the collections framework.
3
+ *
4
+ * These traits define fundamental capabilities that collections can have,
5
+ * following the Interface Segregation Principle (SOLID).
6
+ */
7
+ /**
8
+ * Equality comparison function.
9
+ * Returns true if two values are considered equal.
10
+ *
11
+ * @example
12
+ * const primitiveEq: Eq<number> = (a, b) => a === b
13
+ * const objectEq: Eq<Person> = (a, b) => a.id === b.id
14
+ */
15
+ export type Eq<T> = (a: T, b: T) => boolean;
16
+ /**
17
+ * Hash function for creating hash codes.
18
+ * Returns a 32-bit integer hash of the value.
19
+ *
20
+ * Must satisfy: if eq(a, b) === true, then hash(a) === hash(b)
21
+ *
22
+ * @example
23
+ * const stringHash: Hash<string> = (s) => {
24
+ * let h = 0;
25
+ * for (let i = 0; i < s.length; i++) {
26
+ * h = ((h << 5) - h) + s.charCodeAt(i);
27
+ * h = h & h; // Convert to 32-bit integer
28
+ * }
29
+ * return h;
30
+ * }
31
+ */
32
+ export type Hash<T> = (value: T) => number;
33
+ /**
34
+ * Comparison function for ordering values.
35
+ * Returns:
36
+ * - negative number if a < b
37
+ * - zero if a === b
38
+ * - positive number if a > b
39
+ *
40
+ * Must be transitive and consistent with equality.
41
+ *
42
+ * @example
43
+ * const numberCompare: Compare<number> = (a, b) => a - b
44
+ * const reverseCompare = <T>(cmp: Compare<T>): Compare<T> => (a, b) => cmp(b, a)
45
+ */
46
+ export type Compare<T> = (a: T, b: T) => number;
47
+ /**
48
+ * Capability: Has a size property.
49
+ */
50
+ export interface Sized {
51
+ /** The number of elements in the collection. */
52
+ readonly size: number;
53
+ }
54
+ /**
55
+ * Capability: Can be cleared (all elements removed).
56
+ */
57
+ export interface Clearable {
58
+ /** Removes all elements from the collection. */
59
+ clear(): void;
60
+ }
61
+ /**
62
+ * Capability: Can check if empty.
63
+ */
64
+ export interface Emptiable {
65
+ /** Returns true if the collection contains no elements. */
66
+ readonly isEmpty: boolean;
67
+ }
68
+ /**
69
+ * Capability: Can be cloned.
70
+ */
71
+ export interface Cloneable<T> {
72
+ /** Creates a shallow copy of the collection. */
73
+ clone(): T;
74
+ }
75
+ /**
76
+ * Capability: Can be converted to an array.
77
+ */
78
+ export interface ArrayConvertible<T> {
79
+ /** Returns an array containing all elements in the collection. */
80
+ toArray(): T[];
81
+ }
82
+ /**
83
+ * Base read-only collection capabilities.
84
+ * Combines common traits that most collections share.
85
+ */
86
+ export interface ReadonlyCollectionBase<T> extends Sized, Emptiable, Iterable<T>, ArrayConvertible<T> {
87
+ }
88
+ /**
89
+ * Base mutable collection capabilities.
90
+ * Adds mutation operations to readonly base.
91
+ */
92
+ export interface MutableCollectionBase<T> extends ReadonlyCollectionBase<T>, Clearable {
93
+ }
94
+ /**
95
+ * Equality provider - allows collections to specify custom equality.
96
+ */
97
+ export interface EqualityProvider<T> {
98
+ /** The equality function used by this collection. */
99
+ readonly eq: Eq<T>;
100
+ }
101
+ /**
102
+ * Hash provider - allows collections to specify custom hashing.
103
+ */
104
+ export interface HashProvider<T> {
105
+ /** The hash function used by this collection. */
106
+ readonly hash: Hash<T>;
107
+ }
108
+ /**
109
+ * Comparison provider - allows collections to specify custom ordering.
110
+ */
111
+ export interface ComparisonProvider<T> {
112
+ /** The comparison function used by this collection. */
113
+ readonly compare: Compare<T>;
114
+ }
115
+ /**
116
+ * Bounded collection - has a maximum capacity.
117
+ */
118
+ export interface Bounded {
119
+ /** The maximum number of elements this collection can hold. */
120
+ readonly capacity: number;
121
+ /** Returns true if the collection is at capacity. */
122
+ readonly isFull: boolean;
123
+ /** Returns the number of additional elements that can be added. */
124
+ readonly remainingCapacity: number;
125
+ }
126
+ /**
127
+ * Disposable resource - can be explicitly cleaned up.
128
+ */
129
+ export interface Disposable {
130
+ /** Releases any resources held by this collection. */
131
+ dispose(): void;
132
+ }
133
+ /**
134
+ * Freezable collection - can be made immutable.
135
+ */
136
+ export interface Freezable<T> {
137
+ /** Makes this collection immutable. Returns self for chaining. */
138
+ freeze(): T;
139
+ /** Returns true if this collection is frozen. */
140
+ readonly isFrozen: boolean;
141
+ }
142
+ //# sourceMappingURL=traits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["../../src/core/traits.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AAE5C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;AAE3C;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,gDAAgD;IAChD,KAAK,IAAI,CAAC,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,kEAAkE;IAClE,OAAO,IAAI,CAAC,EAAE,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,CACvC,SAAQ,KAAK,EACX,SAAS,EACT,QAAQ,CAAC,CAAC,CAAC,EACX,gBAAgB,CAAC,CAAC,CAAC;CAAG;AAE1B;;;GAGG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC,CACtC,SAAQ,sBAAsB,CAAC,CAAC,CAAC,EAC/B,SAAS;CAAG;AAEhB;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,mEAAmE;IACnE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sDAAsD;IACtD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,kEAAkE;IAClE,MAAM,IAAI,CAAC,CAAC;IAEZ,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Core traits and capability interfaces for the collections framework.
3
+ *
4
+ * These traits define fundamental capabilities that collections can have,
5
+ * following the Interface Segregation Principle (SOLID).
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=traits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traits.js","sourceRoot":"","sources":["../../src/core/traits.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Collectors for Stream-style collection operations.
3
+ *
4
+ * Provides Java Stream API-style collectors for transforming iterables
5
+ * into various collection types. Inspired by java.util.stream.Collectors.
6
+ *
7
+ * @example
8
+ * import { collect, toList, groupingBy } from './collectors'
9
+ *
10
+ * const grouped = collect(users, groupingBy(u => u.age))
11
+ */
12
+ import { type ArrayList } from "../impl/array-list.js";
13
+ import { type HashMap } from "../impl/hash-map.js";
14
+ import { type HashSet } from "../impl/hash-set.js";
15
+ /**
16
+ * A Collector represents a mutable reduction operation.
17
+ *
18
+ * @template T - The type of input elements
19
+ * @template A - The mutable accumulation type
20
+ * @template R - The final result type
21
+ */
22
+ export interface Collector<T, A, R> {
23
+ /**
24
+ * Creates the initial accumulator.
25
+ */
26
+ supplier: () => A;
27
+ /**
28
+ * Incorporates an element into the accumulator and returns the next accumulator. A mutable
29
+ * accumulator (a list, a map) returns itself. An immutable one (a count, a sum) returns the
30
+ * new value. (Before, the result was ignored, so every immutable collector - counting,
31
+ * summing, minBy, maxBy, reducing, first, last - returned its seed: BUGS-2026-07 C12.)
32
+ */
33
+ accumulator: (acc: A, element: T) => A;
34
+ /**
35
+ * Combines two accumulators (for parallel streams).
36
+ */
37
+ combiner?: (acc1: A, acc2: A) => A;
38
+ /**
39
+ * Transforms the accumulator into the final result.
40
+ */
41
+ finisher: (acc: A) => R;
42
+ }
43
+ /**
44
+ * Collects elements using a collector.
45
+ *
46
+ * @example
47
+ * const list = collect([1, 2, 3], toList())
48
+ * const set = collect([1, 2, 2, 3], toSet())
49
+ */
50
+ export declare function collect<T, A, R>(iterable: Iterable<T>, collector: Collector<T, A, R>): R;
51
+ /**
52
+ * Collects elements into an ArrayList.
53
+ */
54
+ export declare function toList<T>(): Collector<T, ArrayList<T>, ArrayList<T>>;
55
+ /**
56
+ * Collects elements into a HashSet.
57
+ */
58
+ export declare function toSet<T>(): Collector<T, HashSet<T>, HashSet<T>>;
59
+ /**
60
+ * Collects elements into a native Array.
61
+ */
62
+ export declare function toArray<T>(): Collector<T, T[], T[]>;
63
+ /**
64
+ * Collects elements into a HashMap using key and value extractors.
65
+ */
66
+ export declare function toMap<T, K, V>(keyExtractor: (element: T) => K, valueExtractor: (element: T) => V): Collector<T, HashMap<K, V>, HashMap<K, V>>;
67
+ /**
68
+ * Groups elements by a classifier function.
69
+ *
70
+ * @example
71
+ * const byAge = collect(users, groupingBy(u => u.age))
72
+ * // Map<number, ArrayList<User>>
73
+ */
74
+ export declare function groupingBy<T, K>(classifier: (element: T) => K): Collector<T, HashMap<K, ArrayList<T>>, HashMap<K, ArrayList<T>>>;
75
+ /**
76
+ * Groups and transforms with a downstream collector.
77
+ *
78
+ * @example
79
+ * const countByAge = collect(
80
+ * users,
81
+ * groupingBy(u => u.age, counting())
82
+ * )
83
+ * // Map<number, number>
84
+ */
85
+ export declare function groupingByWith<T, K, A, D>(classifier: (element: T) => K, downstream: Collector<T, A, D>): Collector<T, HashMap<K, A>, HashMap<K, D>>;
86
+ /**
87
+ * Partitions elements into two groups based on a predicate.
88
+ *
89
+ * @example
90
+ * const partitioned = collect(
91
+ * numbers,
92
+ * partitioningBy(n => n % 2 === 0)
93
+ * )
94
+ * // Map<boolean, ArrayList<number>>
95
+ */
96
+ export declare function partitioningBy<T>(predicate: (element: T) => boolean): Collector<T, HashMap<boolean, ArrayList<T>>, HashMap<boolean, ArrayList<T>>>;
97
+ /**
98
+ * Counts the number of elements.
99
+ */
100
+ export declare function counting<T>(): Collector<T, number, number>;
101
+ /**
102
+ * Sums numeric elements.
103
+ */
104
+ export declare function summingNumber<T>(mapper: (element: T) => number): Collector<T, number, number>;
105
+ /**
106
+ * Averages numeric elements.
107
+ */
108
+ export declare function averagingNumber<T>(mapper: (element: T) => number): Collector<T, {
109
+ sum: number;
110
+ count: number;
111
+ }, number>;
112
+ /**
113
+ * Finds the minimum element.
114
+ */
115
+ export declare function minBy<T>(comparator: (a: T, b: T) => number): Collector<T, T | undefined, T | undefined>;
116
+ /**
117
+ * Finds the maximum element.
118
+ */
119
+ export declare function maxBy<T>(comparator: (a: T, b: T) => number): Collector<T, T | undefined, T | undefined>;
120
+ /**
121
+ * Joins elements into a string.
122
+ *
123
+ * @example
124
+ * const csv = collect(['a', 'b', 'c'], joining(', '))
125
+ * // "a, b, c"
126
+ *
127
+ * const bracketed = collect(
128
+ * ['a', 'b', 'c'],
129
+ * joining(', ', '[', ']')
130
+ * )
131
+ * // "[a, b, c]"
132
+ */
133
+ export declare function joining<T>(delimiter?: string, prefix?: string, suffix?: string): Collector<T, string[], string>;
134
+ /**
135
+ * Applies a mapping function before collecting.
136
+ *
137
+ * @example
138
+ * const names = collect(
139
+ * users,
140
+ * mapping(u => u.name, toList())
141
+ * )
142
+ */
143
+ export declare function mapping<T, U, A, R>(mapper: (element: T) => U, downstream: Collector<U, A, R>): Collector<T, A, R>;
144
+ /**
145
+ * Filters elements before collecting.
146
+ */
147
+ export declare function filtering<T, A, R>(predicate: (element: T) => boolean, downstream: Collector<T, A, R>): Collector<T, A, R>;
148
+ /**
149
+ * FlatMaps elements before collecting.
150
+ */
151
+ export declare function flatMapping<T, U, A, R>(mapper: (element: T) => Iterable<U>, downstream: Collector<U, A, R>): Collector<T, A, R>;
152
+ /**
153
+ * General reduction collector.
154
+ */
155
+ export declare function reducing<T>(identity: T, reducer: (acc: T, element: T) => T): Collector<T, T, T>;
156
+ /**
157
+ * Reducing with mapper.
158
+ */
159
+ export declare function reducingWith<T, U>(identity: U, mapper: (element: T) => U, reducer: (acc: U, mapped: U) => U): Collector<T, U, U>;
160
+ /**
161
+ * Collects with two collectors and combines results.
162
+ *
163
+ * @example
164
+ * const stats = collect(
165
+ * numbers,
166
+ * teeing(
167
+ * summingNumber(n => n),
168
+ * counting(),
169
+ * (sum, count) => ({ sum, count, avg: sum / count })
170
+ * )
171
+ * )
172
+ */
173
+ export declare function teeing<T, A1, A2, R1, R2, R>(collector1: Collector<T, A1, R1>, collector2: Collector<T, A2, R2>, combiner: (r1: R1, r2: R2) => R): Collector<T, [A1, A2], R>;
174
+ /**
175
+ * Collects the first element.
176
+ */
177
+ export declare function first<T>(): Collector<T, T | undefined, T | undefined>;
178
+ /**
179
+ * Collects the last element.
180
+ */
181
+ export declare function last<T>(): Collector<T, T | undefined, T | undefined>;
182
+ /**
183
+ * Creates summary statistics.
184
+ */
185
+ export interface SummaryStatistics {
186
+ count: number;
187
+ sum: number;
188
+ min: number;
189
+ max: number;
190
+ average: number;
191
+ }
192
+ export declare function summarizingNumber<T>(mapper: (element: T) => number): Collector<T, Partial<SummaryStatistics>, SummaryStatistics>;
193
+ //# sourceMappingURL=collectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectors.d.ts","sourceRoot":"","sources":["../../src/fx/collectors.ts"],"names":[],"mappings":"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"}