@procedures/client 0.2.0 → 0.2.1

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 (236) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +4 -4
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/browser.d.ts +1 -1
  5. package/dist/browser.d.ts.map +1 -1
  6. package/dist/browser.js.map +1 -1
  7. package/dist/procedures/invoke.d.ts +6 -1
  8. package/dist/procedures/invoke.d.ts.map +1 -1
  9. package/dist/procedures/invoke.js +2 -2
  10. package/dist/procedures/invoke.js.map +1 -1
  11. package/dist/server/host-policy.d.ts +3 -3
  12. package/dist/server/host-policy.d.ts.map +1 -1
  13. package/dist/server/procedure-server.d.ts +2 -2
  14. package/dist/server/procedure-server.d.ts.map +1 -1
  15. package/dist/server/procedure-server.js.map +1 -1
  16. package/package.json +1 -1
  17. package/src/browser.ts +1 -0
  18. package/src/procedures/invoke.ts +10 -4
  19. package/src/server/host-policy.ts +3 -3
  20. package/src/server/procedure-server.ts +2 -2
  21. package/dist/client/middleware/batching.d.ts +0 -102
  22. package/dist/client/middleware/batching.d.ts.map +0 -1
  23. package/dist/client/middleware/batching.js +0 -245
  24. package/dist/client/middleware/batching.js.map +0 -1
  25. package/dist/collections/async/async-queue.d.ts +0 -144
  26. package/dist/collections/async/async-queue.d.ts.map +0 -1
  27. package/dist/collections/async/async-queue.js +0 -347
  28. package/dist/collections/async/async-queue.js.map +0 -1
  29. package/dist/collections/async/channels.d.ts +0 -188
  30. package/dist/collections/async/channels.d.ts.map +0 -1
  31. package/dist/collections/async/channels.js +0 -312
  32. package/dist/collections/async/channels.js.map +0 -1
  33. package/dist/collections/behaviors/bounded.d.ts +0 -79
  34. package/dist/collections/behaviors/bounded.d.ts.map +0 -1
  35. package/dist/collections/behaviors/bounded.js +0 -384
  36. package/dist/collections/behaviors/bounded.js.map +0 -1
  37. package/dist/collections/behaviors/evented.d.ts +0 -154
  38. package/dist/collections/behaviors/evented.d.ts.map +0 -1
  39. package/dist/collections/behaviors/evented.js +0 -299
  40. package/dist/collections/behaviors/evented.js.map +0 -1
  41. package/dist/collections/behaviors/lru.d.ts +0 -84
  42. package/dist/collections/behaviors/lru.d.ts.map +0 -1
  43. package/dist/collections/behaviors/lru.js +0 -330
  44. package/dist/collections/behaviors/lru.js.map +0 -1
  45. package/dist/collections/behaviors/readonly.d.ts +0 -73
  46. package/dist/collections/behaviors/readonly.d.ts.map +0 -1
  47. package/dist/collections/behaviors/readonly.js +0 -158
  48. package/dist/collections/behaviors/readonly.js.map +0 -1
  49. package/dist/collections/behaviors/safe.d.ts +0 -163
  50. package/dist/collections/behaviors/safe.d.ts.map +0 -1
  51. package/dist/collections/behaviors/safe.js +0 -172
  52. package/dist/collections/behaviors/safe.js.map +0 -1
  53. package/dist/collections/behaviors/synchronized.d.ts +0 -88
  54. package/dist/collections/behaviors/synchronized.d.ts.map +0 -1
  55. package/dist/collections/behaviors/synchronized.js +0 -294
  56. package/dist/collections/behaviors/synchronized.js.map +0 -1
  57. package/dist/collections/behaviors/ttl.d.ts +0 -118
  58. package/dist/collections/behaviors/ttl.d.ts.map +0 -1
  59. package/dist/collections/behaviors/ttl.js +0 -338
  60. package/dist/collections/behaviors/ttl.js.map +0 -1
  61. package/dist/collections/core/effects.d.ts +0 -176
  62. package/dist/collections/core/effects.d.ts.map +0 -1
  63. package/dist/collections/core/effects.js +0 -180
  64. package/dist/collections/core/effects.js.map +0 -1
  65. package/dist/collections/core/events.d.ts +0 -192
  66. package/dist/collections/core/events.d.ts.map +0 -1
  67. package/dist/collections/core/events.js +0 -291
  68. package/dist/collections/core/events.js.map +0 -1
  69. package/dist/collections/core/middleware.d.ts +0 -231
  70. package/dist/collections/core/middleware.d.ts.map +0 -1
  71. package/dist/collections/core/middleware.js +0 -161
  72. package/dist/collections/core/middleware.js.map +0 -1
  73. package/dist/collections/core/policies.d.ts +0 -220
  74. package/dist/collections/core/policies.d.ts.map +0 -1
  75. package/dist/collections/core/policies.js +0 -48
  76. package/dist/collections/core/policies.js.map +0 -1
  77. package/dist/collections/core/traits.d.ts +0 -142
  78. package/dist/collections/core/traits.d.ts.map +0 -1
  79. package/dist/collections/core/traits.js +0 -8
  80. package/dist/collections/core/traits.js.map +0 -1
  81. package/dist/collections/examples.d.ts +0 -13
  82. package/dist/collections/examples.d.ts.map +0 -1
  83. package/dist/collections/examples.js +0 -302
  84. package/dist/collections/examples.js.map +0 -1
  85. package/dist/collections/fx/collectors.d.ts +0 -190
  86. package/dist/collections/fx/collectors.d.ts.map +0 -1
  87. package/dist/collections/fx/collectors.js +0 -369
  88. package/dist/collections/fx/collectors.js.map +0 -1
  89. package/dist/collections/fx/iter.d.ts +0 -166
  90. package/dist/collections/fx/iter.d.ts.map +0 -1
  91. package/dist/collections/fx/iter.js +0 -421
  92. package/dist/collections/fx/iter.js.map +0 -1
  93. package/dist/collections/impl/array-deque.d.ts +0 -107
  94. package/dist/collections/impl/array-deque.d.ts.map +0 -1
  95. package/dist/collections/impl/array-deque.js +0 -381
  96. package/dist/collections/impl/array-deque.js.map +0 -1
  97. package/dist/collections/impl/array-list.d.ts +0 -101
  98. package/dist/collections/impl/array-list.d.ts.map +0 -1
  99. package/dist/collections/impl/array-list.js +0 -387
  100. package/dist/collections/impl/array-list.js.map +0 -1
  101. package/dist/collections/impl/hash-map.d.ts +0 -141
  102. package/dist/collections/impl/hash-map.d.ts.map +0 -1
  103. package/dist/collections/impl/hash-map.js +0 -450
  104. package/dist/collections/impl/hash-map.js.map +0 -1
  105. package/dist/collections/impl/hash-set.d.ts +0 -125
  106. package/dist/collections/impl/hash-set.d.ts.map +0 -1
  107. package/dist/collections/impl/hash-set.js +0 -264
  108. package/dist/collections/impl/hash-set.js.map +0 -1
  109. package/dist/collections/impl/linked-hash-map.d.ts +0 -141
  110. package/dist/collections/impl/linked-hash-map.d.ts.map +0 -1
  111. package/dist/collections/impl/linked-hash-map.js +0 -472
  112. package/dist/collections/impl/linked-hash-map.js.map +0 -1
  113. package/dist/collections/impl/linked-list.d.ts +0 -109
  114. package/dist/collections/impl/linked-list.d.ts.map +0 -1
  115. package/dist/collections/impl/linked-list.js +0 -491
  116. package/dist/collections/impl/linked-list.js.map +0 -1
  117. package/dist/collections/impl/priority-queue.d.ts +0 -134
  118. package/dist/collections/impl/priority-queue.d.ts.map +0 -1
  119. package/dist/collections/impl/priority-queue.js +0 -336
  120. package/dist/collections/impl/priority-queue.js.map +0 -1
  121. package/dist/collections/impl/tree-map.d.ts +0 -146
  122. package/dist/collections/impl/tree-map.d.ts.map +0 -1
  123. package/dist/collections/impl/tree-map.js +0 -781
  124. package/dist/collections/impl/tree-map.js.map +0 -1
  125. package/dist/collections/impl/tree-set.d.ts +0 -112
  126. package/dist/collections/impl/tree-set.d.ts.map +0 -1
  127. package/dist/collections/impl/tree-set.js +0 -374
  128. package/dist/collections/impl/tree-set.js.map +0 -1
  129. package/dist/collections/index.d.ts +0 -105
  130. package/dist/collections/index.d.ts.map +0 -1
  131. package/dist/collections/index.js +0 -135
  132. package/dist/collections/index.js.map +0 -1
  133. package/dist/collections/interfaces/collection.d.ts +0 -119
  134. package/dist/collections/interfaces/collection.d.ts.map +0 -1
  135. package/dist/collections/interfaces/collection.js +0 -8
  136. package/dist/collections/interfaces/collection.js.map +0 -1
  137. package/dist/collections/interfaces/list.d.ts +0 -247
  138. package/dist/collections/interfaces/list.d.ts.map +0 -1
  139. package/dist/collections/interfaces/list.js +0 -8
  140. package/dist/collections/interfaces/list.js.map +0 -1
  141. package/dist/collections/interfaces/map.d.ts +0 -344
  142. package/dist/collections/interfaces/map.d.ts.map +0 -1
  143. package/dist/collections/interfaces/map.js +0 -8
  144. package/dist/collections/interfaces/map.js.map +0 -1
  145. package/dist/collections/interfaces/queue.d.ts +0 -304
  146. package/dist/collections/interfaces/queue.d.ts.map +0 -1
  147. package/dist/collections/interfaces/queue.js +0 -8
  148. package/dist/collections/interfaces/queue.js.map +0 -1
  149. package/dist/collections/interfaces/set.d.ts +0 -137
  150. package/dist/collections/interfaces/set.d.ts.map +0 -1
  151. package/dist/collections/interfaces/set.js +0 -8
  152. package/dist/collections/interfaces/set.js.map +0 -1
  153. package/dist/collections/storage/api.d.ts +0 -109
  154. package/dist/collections/storage/api.d.ts.map +0 -1
  155. package/dist/collections/storage/api.js +0 -182
  156. package/dist/collections/storage/api.js.map +0 -1
  157. package/dist/collections/storage/hybrid.d.ts +0 -164
  158. package/dist/collections/storage/hybrid.d.ts.map +0 -1
  159. package/dist/collections/storage/hybrid.js +0 -416
  160. package/dist/collections/storage/hybrid.js.map +0 -1
  161. package/dist/collections/storage/index.d.ts +0 -16
  162. package/dist/collections/storage/index.d.ts.map +0 -1
  163. package/dist/collections/storage/index.js +0 -13
  164. package/dist/collections/storage/index.js.map +0 -1
  165. package/dist/collections/storage/interface.d.ts +0 -141
  166. package/dist/collections/storage/interface.d.ts.map +0 -1
  167. package/dist/collections/storage/interface.js +0 -23
  168. package/dist/collections/storage/interface.js.map +0 -1
  169. package/dist/collections/storage/memory.d.ts +0 -68
  170. package/dist/collections/storage/memory.d.ts.map +0 -1
  171. package/dist/collections/storage/memory.js +0 -154
  172. package/dist/collections/storage/memory.js.map +0 -1
  173. package/dist/collections/utils/defaults.d.ts +0 -135
  174. package/dist/collections/utils/defaults.d.ts.map +0 -1
  175. package/dist/collections/utils/defaults.js +0 -322
  176. package/dist/collections/utils/defaults.js.map +0 -1
  177. package/dist/collections/utils/factories.d.ts +0 -144
  178. package/dist/collections/utils/factories.d.ts.map +0 -1
  179. package/dist/collections/utils/factories.js +0 -293
  180. package/dist/collections/utils/factories.js.map +0 -1
  181. package/dist/collections/utils/helpers.d.ts +0 -137
  182. package/dist/collections/utils/helpers.d.ts.map +0 -1
  183. package/dist/collections/utils/helpers.js +0 -221
  184. package/dist/collections/utils/helpers.js.map +0 -1
  185. package/dist/collections.d.ts +0 -12
  186. package/dist/collections.d.ts.map +0 -1
  187. package/dist/collections.js +0 -10
  188. package/dist/collections.js.map +0 -1
  189. package/dist/components/define.d.ts +0 -134
  190. package/dist/components/define.d.ts.map +0 -1
  191. package/dist/components/define.js +0 -486
  192. package/dist/components/define.js.map +0 -1
  193. package/dist/components/index.d.ts +0 -39
  194. package/dist/components/index.d.ts.map +0 -1
  195. package/dist/components/index.js +0 -38
  196. package/dist/components/index.js.map +0 -1
  197. package/dist/components/types.d.ts +0 -264
  198. package/dist/components/types.d.ts.map +0 -1
  199. package/dist/components/types.js +0 -46
  200. package/dist/components/types.js.map +0 -1
  201. package/dist/procedures/storage/adapter.d.ts +0 -148
  202. package/dist/procedures/storage/adapter.d.ts.map +0 -1
  203. package/dist/procedures/storage/adapter.js +0 -214
  204. package/dist/procedures/storage/adapter.js.map +0 -1
  205. package/dist/procedures/storage/api.d.ts +0 -125
  206. package/dist/procedures/storage/api.d.ts.map +0 -1
  207. package/dist/procedures/storage/api.js +0 -220
  208. package/dist/procedures/storage/api.js.map +0 -1
  209. package/dist/procedures/storage/factory.d.ts +0 -134
  210. package/dist/procedures/storage/factory.d.ts.map +0 -1
  211. package/dist/procedures/storage/factory.js +0 -166
  212. package/dist/procedures/storage/factory.js.map +0 -1
  213. package/dist/procedures/storage/hybrid.d.ts +0 -193
  214. package/dist/procedures/storage/hybrid.d.ts.map +0 -1
  215. package/dist/procedures/storage/hybrid.js +0 -519
  216. package/dist/procedures/storage/hybrid.js.map +0 -1
  217. package/dist/procedures/storage/index.d.ts +0 -17
  218. package/dist/procedures/storage/index.d.ts.map +0 -1
  219. package/dist/procedures/storage/index.js +0 -17
  220. package/dist/procedures/storage/index.js.map +0 -1
  221. package/dist/procedures/storage/procedures.d.ts +0 -39
  222. package/dist/procedures/storage/procedures.d.ts.map +0 -1
  223. package/dist/procedures/storage/procedures.js +0 -261
  224. package/dist/procedures/storage/procedures.js.map +0 -1
  225. package/dist/procedures/storage/serialization.d.ts +0 -123
  226. package/dist/procedures/storage/serialization.d.ts.map +0 -1
  227. package/dist/procedures/storage/serialization.js +0 -216
  228. package/dist/procedures/storage/serialization.js.map +0 -1
  229. package/dist/procedures/storage/synced-registry.d.ts +0 -246
  230. package/dist/procedures/storage/synced-registry.d.ts.map +0 -1
  231. package/dist/procedures/storage/synced-registry.js +0 -575
  232. package/dist/procedures/storage/synced-registry.js.map +0 -1
  233. package/dist/procedures/storage/types.d.ts +0 -130
  234. package/dist/procedures/storage/types.d.ts.map +0 -1
  235. package/dist/procedures/storage/types.js +0 -8
  236. package/dist/procedures/storage/types.js.map +0 -1
@@ -1,450 +0,0 @@
1
- /**
2
- * HashMap implementation - A hash table with custom equality and hashing.
3
- *
4
- * Provides O(1) average case lookup, insertion, and deletion.
5
- * Supports custom equality and hash functions for keys.
6
- * Mirrors java.util.HashMap.
7
- *
8
- * @example
9
- * const map = hashMap<string, number>()
10
- * map.set('one', 1)
11
- * map.set('two', 2)
12
- * console.log(map.get('one')) // 1
13
- *
14
- * // Custom equality for object keys
15
- * const userMap = hashMap<User, Data>({
16
- * keyEq: (a, b) => a.id === b.id,
17
- * keyHash: (u) => hashString(u.id)
18
- * })
19
- */
20
- import { defaultEq, defaultHash } from "../utils/defaults.js";
21
- /**
22
- * HashMap<K, V> - Hash table implementation with custom equality/hashing.
23
- *
24
- * Uses separate chaining for collision resolution.
25
- * Automatically resizes when load factor is exceeded.
26
- *
27
- * Not thread-safe. Use synchronized() behavior for concurrent access.
28
- */
29
- export class HashMap {
30
- _buckets;
31
- _size;
32
- _loadFactor;
33
- _keyEq;
34
- _keyHash;
35
- _valueEq;
36
- _threshold;
37
- constructor(options = {}) {
38
- const { initialCapacity = 16, loadFactor = 0.75, keyEq = defaultEq, keyHash = defaultHash, valueEq = defaultEq, } = options;
39
- const capacity = this.nextPowerOfTwo(Math.max(4, initialCapacity));
40
- this._buckets = new Array(capacity).fill(null);
41
- this._size = 0;
42
- this._loadFactor = loadFactor;
43
- this._keyEq = keyEq;
44
- this._keyHash = keyHash;
45
- this._valueEq = valueEq;
46
- this._threshold = Math.floor(capacity * loadFactor);
47
- }
48
- // ========================================================================
49
- // Size
50
- // ========================================================================
51
- get size() {
52
- return this._size;
53
- }
54
- get isEmpty() {
55
- return this._size === 0;
56
- }
57
- get keyEq() {
58
- return this._keyEq;
59
- }
60
- get valueEq() {
61
- return this._valueEq;
62
- }
63
- // ========================================================================
64
- // Lookup
65
- // ========================================================================
66
- has(key) {
67
- const hash = this._keyHash(key);
68
- const index = this.bucketIndex(hash);
69
- let node = this._buckets[index] ?? null;
70
- while (node !== null) {
71
- if (node.hash === hash && this._keyEq(node.key, key)) {
72
- return true;
73
- }
74
- node = node.next;
75
- }
76
- return false;
77
- }
78
- get(key) {
79
- const value = this.getOrUndefined(key);
80
- if (value === undefined) {
81
- throw new Error(`Key not found: ${key}`);
82
- }
83
- return value;
84
- }
85
- getOrUndefined(key) {
86
- const hash = this._keyHash(key);
87
- const index = this.bucketIndex(hash);
88
- let node = this._buckets[index] ?? null;
89
- while (node !== null) {
90
- if (node.hash === hash && this._keyEq(node.key, key)) {
91
- return node.value;
92
- }
93
- node = node.next;
94
- }
95
- return undefined;
96
- }
97
- getOrDefault(key, defaultValue) {
98
- const value = this.getOrUndefined(key);
99
- return value !== undefined ? value : defaultValue;
100
- }
101
- containsValue(value) {
102
- for (const bucket of this._buckets) {
103
- let node = bucket;
104
- while (node !== null) {
105
- if (this._valueEq(node.value, value)) {
106
- return true;
107
- }
108
- node = node.next;
109
- }
110
- }
111
- return false;
112
- }
113
- // ========================================================================
114
- // Modification
115
- // ========================================================================
116
- set(key, value) {
117
- const hash = this._keyHash(key);
118
- const index = this.bucketIndex(hash);
119
- let node = this._buckets[index] ?? null;
120
- // Check if key already exists
121
- while (node !== null) {
122
- if (node.hash === hash && this._keyEq(node.key, key)) {
123
- const oldValue = node.value;
124
- node.value = value;
125
- return oldValue;
126
- }
127
- node = node.next;
128
- }
129
- // Key doesn't exist, add new entry
130
- const newNode = {
131
- key,
132
- value,
133
- hash,
134
- next: this._buckets[index] ?? null,
135
- };
136
- this._buckets[index] = newNode;
137
- this._size++;
138
- // Check if resize is needed
139
- if (this._size > this._threshold) {
140
- this.resize();
141
- }
142
- return undefined;
143
- }
144
- setIfAbsent(key, value) {
145
- const existing = this.getOrUndefined(key);
146
- if (existing !== undefined) {
147
- return existing;
148
- }
149
- this.set(key, value);
150
- return value;
151
- }
152
- delete(key) {
153
- const hash = this._keyHash(key);
154
- const index = this.bucketIndex(hash);
155
- let node = this._buckets[index] ?? null;
156
- let prev = null;
157
- while (node !== null) {
158
- if (node.hash === hash && this._keyEq(node.key, key)) {
159
- // Found the node to delete
160
- if (prev === null) {
161
- // Node is at head of bucket
162
- this._buckets[index] = node.next;
163
- }
164
- else {
165
- // Node is in middle or end
166
- prev.next = node.next;
167
- }
168
- this._size--;
169
- return node.value;
170
- }
171
- prev = node;
172
- node = node.next;
173
- }
174
- return undefined;
175
- }
176
- deleteEntry(key, value) {
177
- const hash = this._keyHash(key);
178
- const index = this.bucketIndex(hash);
179
- let node = this._buckets[index] ?? null;
180
- let prev = null;
181
- while (node !== null) {
182
- if (node.hash === hash &&
183
- this._keyEq(node.key, key) &&
184
- this._valueEq(node.value, value)) {
185
- // Found the entry to delete
186
- if (prev === null) {
187
- this._buckets[index] = node.next;
188
- }
189
- else {
190
- prev.next = node.next;
191
- }
192
- this._size--;
193
- return true;
194
- }
195
- prev = node;
196
- node = node.next;
197
- }
198
- return false;
199
- }
200
- replace(key, value) {
201
- const hash = this._keyHash(key);
202
- const index = this.bucketIndex(hash);
203
- let node = this._buckets[index] ?? null;
204
- while (node !== null) {
205
- if (node.hash === hash && this._keyEq(node.key, key)) {
206
- const oldValue = node.value;
207
- node.value = value;
208
- return oldValue;
209
- }
210
- node = node.next;
211
- }
212
- return undefined;
213
- }
214
- replaceEntry(key, oldValue, newValue) {
215
- const hash = this._keyHash(key);
216
- const index = this.bucketIndex(hash);
217
- let node = this._buckets[index] ?? null;
218
- while (node !== null) {
219
- if (node.hash === hash &&
220
- this._keyEq(node.key, key) &&
221
- this._valueEq(node.value, oldValue)) {
222
- node.value = newValue;
223
- return true;
224
- }
225
- node = node.next;
226
- }
227
- return false;
228
- }
229
- // ========================================================================
230
- // Compute operations
231
- // ========================================================================
232
- computeIfAbsent(key, mappingFunction) {
233
- const existing = this.getOrUndefined(key);
234
- if (existing !== undefined) {
235
- return existing;
236
- }
237
- const newValue = mappingFunction(key);
238
- this.set(key, newValue);
239
- return newValue;
240
- }
241
- computeIfPresent(key, remappingFunction) {
242
- const existing = this.getOrUndefined(key);
243
- if (existing === undefined) {
244
- return undefined;
245
- }
246
- const newValue = remappingFunction(key, existing);
247
- if (newValue === undefined) {
248
- this.delete(key);
249
- return undefined;
250
- }
251
- this.set(key, newValue);
252
- return newValue;
253
- }
254
- compute(key, remappingFunction) {
255
- const existing = this.getOrUndefined(key);
256
- const newValue = remappingFunction(key, existing);
257
- if (newValue === undefined) {
258
- if (existing !== undefined) {
259
- this.delete(key);
260
- }
261
- return undefined;
262
- }
263
- this.set(key, newValue);
264
- return newValue;
265
- }
266
- merge(key, value, remappingFunction) {
267
- const existing = this.getOrUndefined(key);
268
- if (existing === undefined) {
269
- this.set(key, value);
270
- return value;
271
- }
272
- const merged = remappingFunction(existing, value);
273
- if (merged === undefined) {
274
- this.delete(key);
275
- return undefined;
276
- }
277
- this.set(key, merged);
278
- return merged;
279
- }
280
- // ========================================================================
281
- // Bulk operations
282
- // ========================================================================
283
- putAll(other) {
284
- for (const entry of other) {
285
- this.set(entry.key, entry.value);
286
- }
287
- }
288
- clear() {
289
- this._buckets.fill(null);
290
- this._size = 0;
291
- }
292
- // ========================================================================
293
- // Views
294
- // ========================================================================
295
- *keys() {
296
- for (const bucket of this._buckets) {
297
- let node = bucket;
298
- while (node !== null) {
299
- yield node.key;
300
- node = node.next;
301
- }
302
- }
303
- }
304
- *values() {
305
- for (const bucket of this._buckets) {
306
- let node = bucket;
307
- while (node !== null) {
308
- yield node.value;
309
- node = node.next;
310
- }
311
- }
312
- }
313
- *entries() {
314
- for (const bucket of this._buckets) {
315
- let node = bucket;
316
- while (node !== null) {
317
- yield { key: node.key, value: node.value };
318
- node = node.next;
319
- }
320
- }
321
- }
322
- // ========================================================================
323
- // Iteration
324
- // ========================================================================
325
- *[Symbol.iterator]() {
326
- yield* this.entries();
327
- }
328
- forEach(action) {
329
- for (const entry of this.entries()) {
330
- action(entry.value, entry.key, this);
331
- }
332
- }
333
- // ========================================================================
334
- // Internal helpers
335
- // ========================================================================
336
- /**
337
- * Returns the bucket index for a given hash.
338
- */
339
- bucketIndex(hash) {
340
- // Use bitwise AND with (length - 1) for efficient modulo
341
- // This works because length is always a power of 2
342
- return hash & (this._buckets.length - 1);
343
- }
344
- /**
345
- * Resizes the hash table to double its current capacity.
346
- */
347
- resize() {
348
- const oldBuckets = this._buckets;
349
- const newCapacity = oldBuckets.length << 1; // Double capacity
350
- if (newCapacity < 0) {
351
- throw new Error("Map too large");
352
- }
353
- this._buckets = new Array(newCapacity).fill(null);
354
- this._threshold = Math.floor(newCapacity * this._loadFactor);
355
- // Rehash all entries
356
- for (const bucket of oldBuckets) {
357
- let node = bucket;
358
- while (node !== null) {
359
- const next = node.next;
360
- const index = this.bucketIndex(node.hash);
361
- node.next = this._buckets[index] ?? null;
362
- this._buckets[index] = node;
363
- node = next;
364
- }
365
- }
366
- }
367
- /**
368
- * Returns the next power of 2 >= n.
369
- */
370
- nextPowerOfTwo(n) {
371
- if (n <= 0)
372
- return 1;
373
- n--;
374
- n |= n >> 1;
375
- n |= n >> 2;
376
- n |= n >> 4;
377
- n |= n >> 8;
378
- n |= n >> 16;
379
- return n + 1;
380
- }
381
- // ========================================================================
382
- // Inspection
383
- // ========================================================================
384
- /**
385
- * Returns the current number of buckets.
386
- */
387
- get capacity() {
388
- return this._buckets.length;
389
- }
390
- /**
391
- * Returns the current load factor (size / capacity).
392
- */
393
- get loadFactor() {
394
- return this._size / this._buckets.length;
395
- }
396
- /**
397
- * Returns statistics about bucket distribution (for debugging).
398
- */
399
- getStats() {
400
- let maxChainLength = 0;
401
- let totalChainLength = 0;
402
- let emptyBuckets = 0;
403
- for (const bucket of this._buckets) {
404
- if (bucket === null) {
405
- emptyBuckets++;
406
- }
407
- else {
408
- let length = 0;
409
- let node = bucket;
410
- while (node !== null) {
411
- length++;
412
- node = node.next;
413
- }
414
- totalChainLength += length;
415
- maxChainLength = Math.max(maxChainLength, length);
416
- }
417
- }
418
- return {
419
- size: this._size,
420
- capacity: this._buckets.length,
421
- loadFactor: this.loadFactor,
422
- avgChainLength: this._size > 0 ? totalChainLength / (this._buckets.length - emptyBuckets) : 0,
423
- maxChainLength,
424
- emptyBuckets,
425
- };
426
- }
427
- }
428
- /**
429
- * Factory function to create a HashMap.
430
- *
431
- * @example
432
- * const map = hashMap<string, number>()
433
- * const mapWithOptions = hashMap<User, Data>({
434
- * keyEq: (a, b) => a.id === b.id,
435
- * keyHash: (u) => hashString(u.id)
436
- * })
437
- * const mapFromEntries = hashMap([['a', 1], ['b', 2]])
438
- */
439
- export function hashMap(optionsOrEntries) {
440
- // Check if it's an iterable of entries
441
- if (optionsOrEntries && Symbol.iterator in optionsOrEntries) {
442
- const map = new HashMap();
443
- for (const [key, value] of optionsOrEntries) {
444
- map.set(key, value);
445
- }
446
- return map;
447
- }
448
- return new HashMap(optionsOrEntries);
449
- }
450
- //# sourceMappingURL=hash-map.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hash-map.js","sourceRoot":"","sources":["../../../src/collections/impl/hash-map.ts"],"names":[],"mappings":"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"}
@@ -1,125 +0,0 @@
1
- /**
2
- * HashSet implementation - A set backed by a HashMap.
3
- *
4
- * Provides O(1) average case for add, remove, and contains operations.
5
- * Elements are unique based on custom equality and hash functions.
6
- * Mirrors java.util.HashSet.
7
- *
8
- * @example
9
- * const set = hashSet<number>()
10
- * set.add(1)
11
- * set.add(2)
12
- * set.add(1) // Returns false, already present
13
- * set.size // 2
14
- */
15
- import type { Set } from "../interfaces/set.js";
16
- import type { Eq, Hash } from "../core/traits.js";
17
- import { HashMap } from "./hash-map.js";
18
- /**
19
- * Options for creating a HashSet.
20
- */
21
- export interface HashSetOptions<T> {
22
- /**
23
- * Initial capacity.
24
- * @default 16
25
- */
26
- initialCapacity?: number;
27
- /**
28
- * Load factor threshold for resizing.
29
- * @default 0.75
30
- */
31
- loadFactor?: number;
32
- /**
33
- * Equality function for elements.
34
- * @default defaultEq (===)
35
- */
36
- eq?: Eq<T>;
37
- /**
38
- * Hash function for elements.
39
- * @default defaultHash
40
- */
41
- hash?: Hash<T>;
42
- }
43
- /**
44
- * HashSet<T> - Hash table implementation of the Set interface.
45
- *
46
- * Backed by a HashMap where values are a dummy constant.
47
- * Provides constant-time performance for basic operations.
48
- *
49
- * Not thread-safe. Use synchronized() behavior for concurrent access.
50
- */
51
- export declare class HashSet<T> implements Set<T> {
52
- private readonly _map;
53
- private readonly _eq;
54
- constructor(options?: HashSetOptions<T>);
55
- get size(): number;
56
- get isEmpty(): boolean;
57
- get eq(): Eq<T>;
58
- add(element: T): boolean;
59
- remove(element: T): boolean;
60
- contains(element: T): boolean;
61
- addAll(other: Iterable<T>): boolean;
62
- removeAll(other: Iterable<T>): boolean;
63
- retainAll(other: Iterable<T>): boolean;
64
- containsAll(other: Iterable<T>): boolean;
65
- clear(): void;
66
- /**
67
- * Returns a new set that is the union of this set and the other set.
68
- * Contains all elements from both sets.
69
- */
70
- union(other: Iterable<T>): HashSet<T>;
71
- /**
72
- * Returns a new set that is the intersection of this set and the other set.
73
- * Contains only elements present in both sets.
74
- */
75
- intersection(other: Iterable<T>): HashSet<T>;
76
- /**
77
- * Returns a new set that is the difference of this set and the other set.
78
- * Contains elements in this set but not in the other set.
79
- */
80
- difference(other: Iterable<T>): HashSet<T>;
81
- /**
82
- * Returns a new set that is the symmetric difference of this set and the other set.
83
- * Contains elements in either set but not in both.
84
- */
85
- symmetricDifference(other: Iterable<T>): HashSet<T>;
86
- /**
87
- * Returns true if this set is a subset of the other set.
88
- * All elements in this set are also in the other set.
89
- */
90
- isSubsetOf(other: Iterable<T>): boolean;
91
- /**
92
- * Returns true if this set is a superset of the other set.
93
- * All elements in the other set are also in this set.
94
- */
95
- isSupersetOf(other: Iterable<T>): boolean;
96
- /**
97
- * Returns true if this set and the other set have no elements in common.
98
- */
99
- isDisjointFrom(other: Iterable<T>): boolean;
100
- [Symbol.iterator](): Iterator<T>;
101
- forEach(action: (element: T, index: number) => void): void;
102
- toArray(): T[];
103
- /**
104
- * Creates a shallow copy of this set.
105
- */
106
- clone(): HashSet<T>;
107
- /**
108
- * Returns statistics about the underlying hash table.
109
- */
110
- getStats(): ReturnType<HashMap<T, symbol>["getStats"]>;
111
- /**
112
- * Returns a string representation for debugging.
113
- */
114
- toString(): string;
115
- }
116
- /**
117
- * Factory function to create a HashSet.
118
- *
119
- * @example
120
- * const set = hashSet<number>()
121
- * const setFromArray = hashSet([1, 2, 3, 2, 1]) // {1, 2, 3}
122
- * const setWithOptions = hashSet<string>({ initialCapacity: 32 })
123
- */
124
- export declare function hashSet<T>(optionsOrElements?: HashSetOptions<T> | Iterable<T>): HashSet<T>;
125
- //# sourceMappingURL=hash-set.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hash-set.d.ts","sourceRoot":"","sources":["../../../src/collections/impl/hash-set.ts"],"names":[],"mappings":"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"}