@procedures/client 0.2.0 → 0.2.2

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 (241) hide show
  1. package/CHANGELOG.md +12 -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/procedures/schema.d.ts +4 -1
  12. package/dist/procedures/schema.d.ts.map +1 -1
  13. package/dist/procedures/schema.js +27 -2
  14. package/dist/procedures/schema.js.map +1 -1
  15. package/dist/server/host-policy.d.ts +3 -3
  16. package/dist/server/host-policy.d.ts.map +1 -1
  17. package/dist/server/procedure-server.d.ts +2 -2
  18. package/dist/server/procedure-server.d.ts.map +1 -1
  19. package/dist/server/procedure-server.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/browser.ts +1 -0
  22. package/src/procedures/invoke.ts +10 -4
  23. package/src/procedures/schema.ts +27 -2
  24. package/src/server/host-policy.ts +3 -3
  25. package/src/server/procedure-server.ts +2 -2
  26. package/dist/client/middleware/batching.d.ts +0 -102
  27. package/dist/client/middleware/batching.d.ts.map +0 -1
  28. package/dist/client/middleware/batching.js +0 -245
  29. package/dist/client/middleware/batching.js.map +0 -1
  30. package/dist/collections/async/async-queue.d.ts +0 -144
  31. package/dist/collections/async/async-queue.d.ts.map +0 -1
  32. package/dist/collections/async/async-queue.js +0 -347
  33. package/dist/collections/async/async-queue.js.map +0 -1
  34. package/dist/collections/async/channels.d.ts +0 -188
  35. package/dist/collections/async/channels.d.ts.map +0 -1
  36. package/dist/collections/async/channels.js +0 -312
  37. package/dist/collections/async/channels.js.map +0 -1
  38. package/dist/collections/behaviors/bounded.d.ts +0 -79
  39. package/dist/collections/behaviors/bounded.d.ts.map +0 -1
  40. package/dist/collections/behaviors/bounded.js +0 -384
  41. package/dist/collections/behaviors/bounded.js.map +0 -1
  42. package/dist/collections/behaviors/evented.d.ts +0 -154
  43. package/dist/collections/behaviors/evented.d.ts.map +0 -1
  44. package/dist/collections/behaviors/evented.js +0 -299
  45. package/dist/collections/behaviors/evented.js.map +0 -1
  46. package/dist/collections/behaviors/lru.d.ts +0 -84
  47. package/dist/collections/behaviors/lru.d.ts.map +0 -1
  48. package/dist/collections/behaviors/lru.js +0 -330
  49. package/dist/collections/behaviors/lru.js.map +0 -1
  50. package/dist/collections/behaviors/readonly.d.ts +0 -73
  51. package/dist/collections/behaviors/readonly.d.ts.map +0 -1
  52. package/dist/collections/behaviors/readonly.js +0 -158
  53. package/dist/collections/behaviors/readonly.js.map +0 -1
  54. package/dist/collections/behaviors/safe.d.ts +0 -163
  55. package/dist/collections/behaviors/safe.d.ts.map +0 -1
  56. package/dist/collections/behaviors/safe.js +0 -172
  57. package/dist/collections/behaviors/safe.js.map +0 -1
  58. package/dist/collections/behaviors/synchronized.d.ts +0 -88
  59. package/dist/collections/behaviors/synchronized.d.ts.map +0 -1
  60. package/dist/collections/behaviors/synchronized.js +0 -294
  61. package/dist/collections/behaviors/synchronized.js.map +0 -1
  62. package/dist/collections/behaviors/ttl.d.ts +0 -118
  63. package/dist/collections/behaviors/ttl.d.ts.map +0 -1
  64. package/dist/collections/behaviors/ttl.js +0 -338
  65. package/dist/collections/behaviors/ttl.js.map +0 -1
  66. package/dist/collections/core/effects.d.ts +0 -176
  67. package/dist/collections/core/effects.d.ts.map +0 -1
  68. package/dist/collections/core/effects.js +0 -180
  69. package/dist/collections/core/effects.js.map +0 -1
  70. package/dist/collections/core/events.d.ts +0 -192
  71. package/dist/collections/core/events.d.ts.map +0 -1
  72. package/dist/collections/core/events.js +0 -291
  73. package/dist/collections/core/events.js.map +0 -1
  74. package/dist/collections/core/middleware.d.ts +0 -231
  75. package/dist/collections/core/middleware.d.ts.map +0 -1
  76. package/dist/collections/core/middleware.js +0 -161
  77. package/dist/collections/core/middleware.js.map +0 -1
  78. package/dist/collections/core/policies.d.ts +0 -220
  79. package/dist/collections/core/policies.d.ts.map +0 -1
  80. package/dist/collections/core/policies.js +0 -48
  81. package/dist/collections/core/policies.js.map +0 -1
  82. package/dist/collections/core/traits.d.ts +0 -142
  83. package/dist/collections/core/traits.d.ts.map +0 -1
  84. package/dist/collections/core/traits.js +0 -8
  85. package/dist/collections/core/traits.js.map +0 -1
  86. package/dist/collections/examples.d.ts +0 -13
  87. package/dist/collections/examples.d.ts.map +0 -1
  88. package/dist/collections/examples.js +0 -302
  89. package/dist/collections/examples.js.map +0 -1
  90. package/dist/collections/fx/collectors.d.ts +0 -190
  91. package/dist/collections/fx/collectors.d.ts.map +0 -1
  92. package/dist/collections/fx/collectors.js +0 -369
  93. package/dist/collections/fx/collectors.js.map +0 -1
  94. package/dist/collections/fx/iter.d.ts +0 -166
  95. package/dist/collections/fx/iter.d.ts.map +0 -1
  96. package/dist/collections/fx/iter.js +0 -421
  97. package/dist/collections/fx/iter.js.map +0 -1
  98. package/dist/collections/impl/array-deque.d.ts +0 -107
  99. package/dist/collections/impl/array-deque.d.ts.map +0 -1
  100. package/dist/collections/impl/array-deque.js +0 -381
  101. package/dist/collections/impl/array-deque.js.map +0 -1
  102. package/dist/collections/impl/array-list.d.ts +0 -101
  103. package/dist/collections/impl/array-list.d.ts.map +0 -1
  104. package/dist/collections/impl/array-list.js +0 -387
  105. package/dist/collections/impl/array-list.js.map +0 -1
  106. package/dist/collections/impl/hash-map.d.ts +0 -141
  107. package/dist/collections/impl/hash-map.d.ts.map +0 -1
  108. package/dist/collections/impl/hash-map.js +0 -450
  109. package/dist/collections/impl/hash-map.js.map +0 -1
  110. package/dist/collections/impl/hash-set.d.ts +0 -125
  111. package/dist/collections/impl/hash-set.d.ts.map +0 -1
  112. package/dist/collections/impl/hash-set.js +0 -264
  113. package/dist/collections/impl/hash-set.js.map +0 -1
  114. package/dist/collections/impl/linked-hash-map.d.ts +0 -141
  115. package/dist/collections/impl/linked-hash-map.d.ts.map +0 -1
  116. package/dist/collections/impl/linked-hash-map.js +0 -472
  117. package/dist/collections/impl/linked-hash-map.js.map +0 -1
  118. package/dist/collections/impl/linked-list.d.ts +0 -109
  119. package/dist/collections/impl/linked-list.d.ts.map +0 -1
  120. package/dist/collections/impl/linked-list.js +0 -491
  121. package/dist/collections/impl/linked-list.js.map +0 -1
  122. package/dist/collections/impl/priority-queue.d.ts +0 -134
  123. package/dist/collections/impl/priority-queue.d.ts.map +0 -1
  124. package/dist/collections/impl/priority-queue.js +0 -336
  125. package/dist/collections/impl/priority-queue.js.map +0 -1
  126. package/dist/collections/impl/tree-map.d.ts +0 -146
  127. package/dist/collections/impl/tree-map.d.ts.map +0 -1
  128. package/dist/collections/impl/tree-map.js +0 -781
  129. package/dist/collections/impl/tree-map.js.map +0 -1
  130. package/dist/collections/impl/tree-set.d.ts +0 -112
  131. package/dist/collections/impl/tree-set.d.ts.map +0 -1
  132. package/dist/collections/impl/tree-set.js +0 -374
  133. package/dist/collections/impl/tree-set.js.map +0 -1
  134. package/dist/collections/index.d.ts +0 -105
  135. package/dist/collections/index.d.ts.map +0 -1
  136. package/dist/collections/index.js +0 -135
  137. package/dist/collections/index.js.map +0 -1
  138. package/dist/collections/interfaces/collection.d.ts +0 -119
  139. package/dist/collections/interfaces/collection.d.ts.map +0 -1
  140. package/dist/collections/interfaces/collection.js +0 -8
  141. package/dist/collections/interfaces/collection.js.map +0 -1
  142. package/dist/collections/interfaces/list.d.ts +0 -247
  143. package/dist/collections/interfaces/list.d.ts.map +0 -1
  144. package/dist/collections/interfaces/list.js +0 -8
  145. package/dist/collections/interfaces/list.js.map +0 -1
  146. package/dist/collections/interfaces/map.d.ts +0 -344
  147. package/dist/collections/interfaces/map.d.ts.map +0 -1
  148. package/dist/collections/interfaces/map.js +0 -8
  149. package/dist/collections/interfaces/map.js.map +0 -1
  150. package/dist/collections/interfaces/queue.d.ts +0 -304
  151. package/dist/collections/interfaces/queue.d.ts.map +0 -1
  152. package/dist/collections/interfaces/queue.js +0 -8
  153. package/dist/collections/interfaces/queue.js.map +0 -1
  154. package/dist/collections/interfaces/set.d.ts +0 -137
  155. package/dist/collections/interfaces/set.d.ts.map +0 -1
  156. package/dist/collections/interfaces/set.js +0 -8
  157. package/dist/collections/interfaces/set.js.map +0 -1
  158. package/dist/collections/storage/api.d.ts +0 -109
  159. package/dist/collections/storage/api.d.ts.map +0 -1
  160. package/dist/collections/storage/api.js +0 -182
  161. package/dist/collections/storage/api.js.map +0 -1
  162. package/dist/collections/storage/hybrid.d.ts +0 -164
  163. package/dist/collections/storage/hybrid.d.ts.map +0 -1
  164. package/dist/collections/storage/hybrid.js +0 -416
  165. package/dist/collections/storage/hybrid.js.map +0 -1
  166. package/dist/collections/storage/index.d.ts +0 -16
  167. package/dist/collections/storage/index.d.ts.map +0 -1
  168. package/dist/collections/storage/index.js +0 -13
  169. package/dist/collections/storage/index.js.map +0 -1
  170. package/dist/collections/storage/interface.d.ts +0 -141
  171. package/dist/collections/storage/interface.d.ts.map +0 -1
  172. package/dist/collections/storage/interface.js +0 -23
  173. package/dist/collections/storage/interface.js.map +0 -1
  174. package/dist/collections/storage/memory.d.ts +0 -68
  175. package/dist/collections/storage/memory.d.ts.map +0 -1
  176. package/dist/collections/storage/memory.js +0 -154
  177. package/dist/collections/storage/memory.js.map +0 -1
  178. package/dist/collections/utils/defaults.d.ts +0 -135
  179. package/dist/collections/utils/defaults.d.ts.map +0 -1
  180. package/dist/collections/utils/defaults.js +0 -322
  181. package/dist/collections/utils/defaults.js.map +0 -1
  182. package/dist/collections/utils/factories.d.ts +0 -144
  183. package/dist/collections/utils/factories.d.ts.map +0 -1
  184. package/dist/collections/utils/factories.js +0 -293
  185. package/dist/collections/utils/factories.js.map +0 -1
  186. package/dist/collections/utils/helpers.d.ts +0 -137
  187. package/dist/collections/utils/helpers.d.ts.map +0 -1
  188. package/dist/collections/utils/helpers.js +0 -221
  189. package/dist/collections/utils/helpers.js.map +0 -1
  190. package/dist/collections.d.ts +0 -12
  191. package/dist/collections.d.ts.map +0 -1
  192. package/dist/collections.js +0 -10
  193. package/dist/collections.js.map +0 -1
  194. package/dist/components/define.d.ts +0 -134
  195. package/dist/components/define.d.ts.map +0 -1
  196. package/dist/components/define.js +0 -486
  197. package/dist/components/define.js.map +0 -1
  198. package/dist/components/index.d.ts +0 -39
  199. package/dist/components/index.d.ts.map +0 -1
  200. package/dist/components/index.js +0 -38
  201. package/dist/components/index.js.map +0 -1
  202. package/dist/components/types.d.ts +0 -264
  203. package/dist/components/types.d.ts.map +0 -1
  204. package/dist/components/types.js +0 -46
  205. package/dist/components/types.js.map +0 -1
  206. package/dist/procedures/storage/adapter.d.ts +0 -148
  207. package/dist/procedures/storage/adapter.d.ts.map +0 -1
  208. package/dist/procedures/storage/adapter.js +0 -214
  209. package/dist/procedures/storage/adapter.js.map +0 -1
  210. package/dist/procedures/storage/api.d.ts +0 -125
  211. package/dist/procedures/storage/api.d.ts.map +0 -1
  212. package/dist/procedures/storage/api.js +0 -220
  213. package/dist/procedures/storage/api.js.map +0 -1
  214. package/dist/procedures/storage/factory.d.ts +0 -134
  215. package/dist/procedures/storage/factory.d.ts.map +0 -1
  216. package/dist/procedures/storage/factory.js +0 -166
  217. package/dist/procedures/storage/factory.js.map +0 -1
  218. package/dist/procedures/storage/hybrid.d.ts +0 -193
  219. package/dist/procedures/storage/hybrid.d.ts.map +0 -1
  220. package/dist/procedures/storage/hybrid.js +0 -519
  221. package/dist/procedures/storage/hybrid.js.map +0 -1
  222. package/dist/procedures/storage/index.d.ts +0 -17
  223. package/dist/procedures/storage/index.d.ts.map +0 -1
  224. package/dist/procedures/storage/index.js +0 -17
  225. package/dist/procedures/storage/index.js.map +0 -1
  226. package/dist/procedures/storage/procedures.d.ts +0 -39
  227. package/dist/procedures/storage/procedures.d.ts.map +0 -1
  228. package/dist/procedures/storage/procedures.js +0 -261
  229. package/dist/procedures/storage/procedures.js.map +0 -1
  230. package/dist/procedures/storage/serialization.d.ts +0 -123
  231. package/dist/procedures/storage/serialization.d.ts.map +0 -1
  232. package/dist/procedures/storage/serialization.js +0 -216
  233. package/dist/procedures/storage/serialization.js.map +0 -1
  234. package/dist/procedures/storage/synced-registry.d.ts +0 -246
  235. package/dist/procedures/storage/synced-registry.d.ts.map +0 -1
  236. package/dist/procedures/storage/synced-registry.js +0 -575
  237. package/dist/procedures/storage/synced-registry.js.map +0 -1
  238. package/dist/procedures/storage/types.d.ts +0 -130
  239. package/dist/procedures/storage/types.d.ts.map +0 -1
  240. package/dist/procedures/storage/types.js +0 -8
  241. 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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"}