@procedures/collections 0.0.0-stage → 0.2.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.
- package/CHANGELOG.md +9 -0
- package/LICENSE +21 -0
- package/README.md +394 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/async/async-queue.d.ts +155 -0
- package/dist/async/async-queue.d.ts.map +1 -0
- package/dist/async/async-queue.js +342 -0
- package/dist/async/async-queue.js.map +1 -0
- package/dist/async/channels.d.ts +188 -0
- package/dist/async/channels.d.ts.map +1 -0
- package/dist/async/channels.js +314 -0
- package/dist/async/channels.js.map +1 -0
- package/dist/behaviors/bounded.d.ts +79 -0
- package/dist/behaviors/bounded.d.ts.map +1 -0
- package/dist/behaviors/bounded.js +384 -0
- package/dist/behaviors/bounded.js.map +1 -0
- package/dist/behaviors/composite.d.ts +17 -0
- package/dist/behaviors/composite.d.ts.map +1 -0
- package/dist/behaviors/composite.js +93 -0
- package/dist/behaviors/composite.js.map +1 -0
- package/dist/behaviors/evented.d.ts +154 -0
- package/dist/behaviors/evented.d.ts.map +1 -0
- package/dist/behaviors/evented.js +299 -0
- package/dist/behaviors/evented.js.map +1 -0
- package/dist/behaviors/lru.d.ts +84 -0
- package/dist/behaviors/lru.d.ts.map +1 -0
- package/dist/behaviors/lru.js +376 -0
- package/dist/behaviors/lru.js.map +1 -0
- package/dist/behaviors/readonly.d.ts +73 -0
- package/dist/behaviors/readonly.d.ts.map +1 -0
- package/dist/behaviors/readonly.js +177 -0
- package/dist/behaviors/readonly.js.map +1 -0
- package/dist/behaviors/safe.d.ts +163 -0
- package/dist/behaviors/safe.d.ts.map +1 -0
- package/dist/behaviors/safe.js +176 -0
- package/dist/behaviors/safe.js.map +1 -0
- package/dist/behaviors/synchronized.d.ts +88 -0
- package/dist/behaviors/synchronized.d.ts.map +1 -0
- package/dist/behaviors/synchronized.js +285 -0
- package/dist/behaviors/synchronized.js.map +1 -0
- package/dist/behaviors/ttl.d.ts +118 -0
- package/dist/behaviors/ttl.d.ts.map +1 -0
- package/dist/behaviors/ttl.js +354 -0
- package/dist/behaviors/ttl.js.map +1 -0
- package/dist/contracts/model.d.ts +29 -0
- package/dist/contracts/model.d.ts.map +1 -0
- package/dist/contracts/model.js +26 -0
- package/dist/contracts/model.js.map +1 -0
- package/dist/core/effects.d.ts +176 -0
- package/dist/core/effects.d.ts.map +1 -0
- package/dist/core/effects.js +180 -0
- package/dist/core/effects.js.map +1 -0
- package/dist/core/events.d.ts +192 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +291 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/middleware.d.ts +231 -0
- package/dist/core/middleware.d.ts.map +1 -0
- package/dist/core/middleware.js +161 -0
- package/dist/core/middleware.js.map +1 -0
- package/dist/core/policies.d.ts +220 -0
- package/dist/core/policies.d.ts.map +1 -0
- package/dist/core/policies.js +48 -0
- package/dist/core/policies.js.map +1 -0
- package/dist/core/traits.d.ts +142 -0
- package/dist/core/traits.d.ts.map +1 -0
- package/dist/core/traits.js +8 -0
- package/dist/core/traits.js.map +1 -0
- package/dist/fx/collectors.d.ts +193 -0
- package/dist/fx/collectors.d.ts.map +1 -0
- package/dist/fx/collectors.js +375 -0
- package/dist/fx/collectors.js.map +1 -0
- package/dist/fx/iter.d.ts +166 -0
- package/dist/fx/iter.d.ts.map +1 -0
- package/dist/fx/iter.js +421 -0
- package/dist/fx/iter.js.map +1 -0
- package/dist/impl/array-deque.d.ts +112 -0
- package/dist/impl/array-deque.d.ts.map +1 -0
- package/dist/impl/array-deque.js +380 -0
- package/dist/impl/array-deque.js.map +1 -0
- package/dist/impl/array-list.d.ts +101 -0
- package/dist/impl/array-list.d.ts.map +1 -0
- package/dist/impl/array-list.js +387 -0
- package/dist/impl/array-list.js.map +1 -0
- package/dist/impl/hash-map.d.ts +149 -0
- package/dist/impl/hash-map.d.ts.map +1 -0
- package/dist/impl/hash-map.js +473 -0
- package/dist/impl/hash-map.js.map +1 -0
- package/dist/impl/hash-set.d.ts +125 -0
- package/dist/impl/hash-set.d.ts.map +1 -0
- package/dist/impl/hash-set.js +264 -0
- package/dist/impl/hash-set.js.map +1 -0
- package/dist/impl/linked-hash-map.d.ts +141 -0
- package/dist/impl/linked-hash-map.d.ts.map +1 -0
- package/dist/impl/linked-hash-map.js +442 -0
- package/dist/impl/linked-hash-map.js.map +1 -0
- package/dist/impl/linked-list.d.ts +109 -0
- package/dist/impl/linked-list.d.ts.map +1 -0
- package/dist/impl/linked-list.js +494 -0
- package/dist/impl/linked-list.js.map +1 -0
- package/dist/impl/priority-queue.d.ts +139 -0
- package/dist/impl/priority-queue.d.ts.map +1 -0
- package/dist/impl/priority-queue.js +343 -0
- package/dist/impl/priority-queue.js.map +1 -0
- package/dist/impl/tree-map.d.ts +153 -0
- package/dist/impl/tree-map.d.ts.map +1 -0
- package/dist/impl/tree-map.js +788 -0
- package/dist/impl/tree-map.js.map +1 -0
- package/dist/impl/tree-set.d.ts +112 -0
- package/dist/impl/tree-set.d.ts.map +1 -0
- package/dist/impl/tree-set.js +374 -0
- package/dist/impl/tree-set.js.map +1 -0
- package/dist/index.d.ts +106 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +139 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/collection.d.ts +119 -0
- package/dist/interfaces/collection.d.ts.map +1 -0
- package/dist/interfaces/collection.js +8 -0
- package/dist/interfaces/collection.js.map +1 -0
- package/dist/interfaces/list.d.ts +247 -0
- package/dist/interfaces/list.d.ts.map +1 -0
- package/dist/interfaces/list.js +8 -0
- package/dist/interfaces/list.js.map +1 -0
- package/dist/interfaces/map.d.ts +344 -0
- package/dist/interfaces/map.d.ts.map +1 -0
- package/dist/interfaces/map.js +8 -0
- package/dist/interfaces/map.js.map +1 -0
- package/dist/interfaces/queue.d.ts +304 -0
- package/dist/interfaces/queue.d.ts.map +1 -0
- package/dist/interfaces/queue.js +8 -0
- package/dist/interfaces/queue.js.map +1 -0
- package/dist/interfaces/set.d.ts +137 -0
- package/dist/interfaces/set.d.ts.map +1 -0
- package/dist/interfaces/set.js +8 -0
- package/dist/interfaces/set.js.map +1 -0
- package/dist/register.d.ts +8 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +8 -0
- package/dist/register.js.map +1 -0
- package/dist/storage/index.d.ts +15 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +14 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/interface.d.ts +141 -0
- package/dist/storage/interface.d.ts.map +1 -0
- package/dist/storage/interface.js +23 -0
- package/dist/storage/interface.js.map +1 -0
- package/dist/storage/memory.d.ts +68 -0
- package/dist/storage/memory.d.ts.map +1 -0
- package/dist/storage/memory.js +154 -0
- package/dist/storage/memory.js.map +1 -0
- package/dist/utils/defaults.d.ts +135 -0
- package/dist/utils/defaults.d.ts.map +1 -0
- package/dist/utils/defaults.js +322 -0
- package/dist/utils/defaults.js.map +1 -0
- package/dist/utils/factories.d.ts +144 -0
- package/dist/utils/factories.d.ts.map +1 -0
- package/dist/utils/factories.js +293 -0
- package/dist/utils/factories.js.map +1 -0
- package/dist/utils/helpers.d.ts +137 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +221 -0
- package/dist/utils/helpers.js.map +1 -0
- package/package.json +68 -3
- package/src/async/async-queue.ts +417 -0
- package/src/async/channels.ts +374 -0
- package/src/behaviors/bounded.ts +477 -0
- package/src/behaviors/composite.ts +99 -0
- package/src/behaviors/evented.ts +464 -0
- package/src/behaviors/lru.ts +447 -0
- package/src/behaviors/readonly.ts +224 -0
- package/src/behaviors/safe.ts +372 -0
- package/src/behaviors/synchronized.ts +316 -0
- package/src/behaviors/ttl.ts +462 -0
- package/src/contracts/model.ts +44 -0
- package/src/core/effects.ts +323 -0
- package/src/core/events.ts +356 -0
- package/src/core/middleware.ts +415 -0
- package/src/core/policies.ts +316 -0
- package/src/core/traits.ts +164 -0
- package/src/fx/collectors.ts +500 -0
- package/src/fx/iter.ts +536 -0
- package/src/impl/array-deque.ts +463 -0
- package/src/impl/array-list.ts +490 -0
- package/src/impl/hash-map.ts +623 -0
- package/src/impl/hash-set.ts +342 -0
- package/src/impl/linked-hash-map.ts +572 -0
- package/src/impl/linked-list.ts +606 -0
- package/src/impl/priority-queue.ts +448 -0
- package/src/impl/tree-map.ts +912 -0
- package/src/impl/tree-set.ts +469 -0
- package/src/index.ts +277 -0
- package/src/interfaces/collection.ts +141 -0
- package/src/interfaces/list.ts +281 -0
- package/src/interfaces/map.ts +405 -0
- package/src/interfaces/queue.ts +353 -0
- package/src/interfaces/set.ts +158 -0
- package/src/register.ts +8 -0
- package/src/storage/index.ts +16 -0
- package/src/storage/interface.ts +179 -0
- package/src/storage/memory.ts +180 -0
- package/src/utils/defaults.ts +345 -0
- package/src/utils/factories.ts +357 -0
- package/src/utils/helpers.ts +248 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set interfaces that mirror Java's Set interface hierarchy.
|
|
3
|
+
*
|
|
4
|
+
* Sets are collections that contain no duplicate elements.
|
|
5
|
+
* They provide efficient membership testing.
|
|
6
|
+
*/
|
|
7
|
+
import type { Collection, ReadonlyCollection } from "./collection.js";
|
|
8
|
+
import type { Compare } from "../core/traits.js";
|
|
9
|
+
/**
|
|
10
|
+
* ReadonlySet<T> - Readonly set with no duplicates.
|
|
11
|
+
*/
|
|
12
|
+
export interface ReadonlySet<T> extends ReadonlyCollection<T> {
|
|
13
|
+
/**
|
|
14
|
+
* Returns true if this set contains the specified element.
|
|
15
|
+
*/
|
|
16
|
+
contains(element: T): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Returns true if this set contains all elements in the specified collection.
|
|
19
|
+
*/
|
|
20
|
+
containsAll(other: Iterable<T>): boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Set<T> - Mutable set with no duplicates.
|
|
24
|
+
*
|
|
25
|
+
* Mirrors java.util.Set.
|
|
26
|
+
* Elements are unique based on the set's equality function.
|
|
27
|
+
*/
|
|
28
|
+
export interface Set<T> extends ReadonlySet<T>, Collection<T> {
|
|
29
|
+
/**
|
|
30
|
+
* Adds the specified element to this set if it is not already present.
|
|
31
|
+
*
|
|
32
|
+
* @returns true if this set did not already contain the element
|
|
33
|
+
*/
|
|
34
|
+
add(element: T): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Removes the specified element from this set if it is present.
|
|
37
|
+
*
|
|
38
|
+
* @returns true if this set contained the element
|
|
39
|
+
*/
|
|
40
|
+
remove(element: T): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Adds all elements in the specified collection to this set.
|
|
43
|
+
* This is a union operation.
|
|
44
|
+
*
|
|
45
|
+
* @returns true if this set changed
|
|
46
|
+
*/
|
|
47
|
+
addAll(other: Iterable<T>): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Removes from this set all of its elements that are contained in the specified collection.
|
|
50
|
+
* This is a difference operation.
|
|
51
|
+
*
|
|
52
|
+
* @returns true if this set changed
|
|
53
|
+
*/
|
|
54
|
+
removeAll(other: Iterable<T>): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Retains only the elements in this set that are contained in the specified collection.
|
|
57
|
+
* This is an intersection operation.
|
|
58
|
+
*
|
|
59
|
+
* @returns true if this set changed
|
|
60
|
+
*/
|
|
61
|
+
retainAll(other: Iterable<T>): boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* SortedSet<T> - Set that maintains elements in sorted order.
|
|
65
|
+
*
|
|
66
|
+
* Mirrors java.util.SortedSet.
|
|
67
|
+
*/
|
|
68
|
+
export interface SortedSet<T> extends Set<T> {
|
|
69
|
+
/**
|
|
70
|
+
* Returns the comparator used to order elements in this set.
|
|
71
|
+
*/
|
|
72
|
+
readonly comparator: Compare<T>;
|
|
73
|
+
/**
|
|
74
|
+
* Returns the first (lowest) element in this set.
|
|
75
|
+
*
|
|
76
|
+
* @throws Error if set is empty
|
|
77
|
+
*/
|
|
78
|
+
first(): T;
|
|
79
|
+
/**
|
|
80
|
+
* Returns the last (highest) element in this set.
|
|
81
|
+
*
|
|
82
|
+
* @throws Error if set is empty
|
|
83
|
+
*/
|
|
84
|
+
last(): T;
|
|
85
|
+
/**
|
|
86
|
+
* Returns a view of the portion of this set whose elements are strictly less than toElement.
|
|
87
|
+
*/
|
|
88
|
+
headSet(toElement: T): SortedSet<T>;
|
|
89
|
+
/**
|
|
90
|
+
* Returns a view of the portion of this set whose elements are greater than or equal to fromElement.
|
|
91
|
+
*/
|
|
92
|
+
tailSet(fromElement: T): SortedSet<T>;
|
|
93
|
+
/**
|
|
94
|
+
* Returns a view of the portion of this set whose elements range from fromElement to toElement.
|
|
95
|
+
*/
|
|
96
|
+
subSet(fromElement: T, toElement: T): SortedSet<T>;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* NavigableSet<T> - Extended sorted set with navigation methods.
|
|
100
|
+
*
|
|
101
|
+
* Mirrors java.util.NavigableSet.
|
|
102
|
+
*/
|
|
103
|
+
export interface NavigableSet<T> extends SortedSet<T> {
|
|
104
|
+
/**
|
|
105
|
+
* Returns the greatest element less than or equal to the given element, or undefined if none.
|
|
106
|
+
*/
|
|
107
|
+
floor(element: T): T | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* Returns the least element greater than or equal to the given element, or undefined if none.
|
|
110
|
+
*/
|
|
111
|
+
ceiling(element: T): T | undefined;
|
|
112
|
+
/**
|
|
113
|
+
* Returns the greatest element strictly less than the given element, or undefined if none.
|
|
114
|
+
*/
|
|
115
|
+
lower(element: T): T | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* Returns the least element strictly greater than the given element, or undefined if none.
|
|
118
|
+
*/
|
|
119
|
+
higher(element: T): T | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* Retrieves and removes the first (lowest) element, or returns undefined if empty.
|
|
122
|
+
*/
|
|
123
|
+
pollFirst(): T | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* Retrieves and removes the last (highest) element, or returns undefined if empty.
|
|
126
|
+
*/
|
|
127
|
+
pollLast(): T | undefined;
|
|
128
|
+
/**
|
|
129
|
+
* Returns a reverse order view of this set.
|
|
130
|
+
*/
|
|
131
|
+
descendingSet(): NavigableSet<T>;
|
|
132
|
+
/**
|
|
133
|
+
* Returns a reverse order iterator over the elements in this set.
|
|
134
|
+
*/
|
|
135
|
+
descendingIterator(): Iterator<T>;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/interfaces/set.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,CAAE,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC3D;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;IAE9B;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;CAC1C;AAED;;;;;GAKG;AACH,MAAM,WAAW,GAAG,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3D;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;IAEzB;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;IAE5B;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAEpC;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAEvC;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAC;IAC1C;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhC;;;;OAIG;IACH,KAAK,IAAI,CAAC,CAAC;IAEX;;;;OAIG;IACH,IAAI,IAAI,CAAC,CAAC;IAEV;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAEpC;;OAEG;IACH,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAEtC;;OAEG;IACH,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;CACpD;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IACnD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAEjC;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAEnC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAEjC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAElC;;OAEG;IACH,SAAS,IAAI,CAAC,GAAG,SAAS,CAAC;IAE3B;;OAEG;IACH,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC;IAE1B;;OAEG;IACH,aAAa,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAEjC;;OAEG;IACH,kBAAkB,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/interfaces/set.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registration Entry Point for client-collections
|
|
3
|
+
*
|
|
4
|
+
* This package provides collection interfaces and storage abstractions.
|
|
5
|
+
* No procedures to register - just re-exports the main module.
|
|
6
|
+
*/
|
|
7
|
+
export * from "./index.js";
|
|
8
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC"}
|
package/dist/register.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registration Entry Point for client-collections
|
|
3
|
+
*
|
|
4
|
+
* This package provides collection interfaces and storage abstractions.
|
|
5
|
+
* No procedures to register - just re-exports the main module.
|
|
6
|
+
*/
|
|
7
|
+
export * from "./index.js";
|
|
8
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Storage Backends
|
|
3
|
+
*
|
|
4
|
+
* Abstract storage layer enabling collections to be backed by:
|
|
5
|
+
* - In-memory (fast, volatile)
|
|
6
|
+
*
|
|
7
|
+
* The backends that need an RPC Client (ApiStorage: remote API, HybridStorage: local
|
|
8
|
+
* cache + remote sync) live in @procedures/client and are exported from
|
|
9
|
+
* "@procedures/client/collections". Keeping them there means this package
|
|
10
|
+
* does not depend on the client package.
|
|
11
|
+
*/
|
|
12
|
+
export type { CollectionStorage, StorageMetadata } from "./interface.js";
|
|
13
|
+
export { normalizeStorageResult } from "./interface.js";
|
|
14
|
+
export { InMemoryStorage } from "./memory.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Storage Backends
|
|
3
|
+
*
|
|
4
|
+
* Abstract storage layer enabling collections to be backed by:
|
|
5
|
+
* - In-memory (fast, volatile)
|
|
6
|
+
*
|
|
7
|
+
* The backends that need an RPC Client (ApiStorage: remote API, HybridStorage: local
|
|
8
|
+
* cache + remote sync) live in @procedures/client and are exported from
|
|
9
|
+
* "@procedures/client/collections". Keeping them there means this package
|
|
10
|
+
* does not depend on the client package.
|
|
11
|
+
*/
|
|
12
|
+
export { normalizeStorageResult } from "./interface.js";
|
|
13
|
+
export { InMemoryStorage } from "./memory.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Storage Interface
|
|
3
|
+
*
|
|
4
|
+
* Abstract storage layer for collections, enabling different backends:
|
|
5
|
+
* - InMemoryStorage: Fast, volatile storage using Map
|
|
6
|
+
* - ApiStorage: Remote persistence via universal client
|
|
7
|
+
* - HybridStorage: Local cache + remote sync with conflict resolution
|
|
8
|
+
* - SyncedStorage: Periodic background sync with offline support
|
|
9
|
+
*
|
|
10
|
+
* IMPORTANT: All methods return Promise to ensure client code is
|
|
11
|
+
* transport-agnostic (cannot distinguish local from remote storage).
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Storage backend interface for collections.
|
|
15
|
+
*
|
|
16
|
+
* All methods return Promise<T> to ensure consistent async behavior.
|
|
17
|
+
* This guarantees client code remains agnostic to the storage backend,
|
|
18
|
+
* enabling seamless switching between local and remote storage.
|
|
19
|
+
*/
|
|
20
|
+
export interface CollectionStorage<T> {
|
|
21
|
+
/**
|
|
22
|
+
* Get item by ID.
|
|
23
|
+
*
|
|
24
|
+
* @param id - Item identifier
|
|
25
|
+
* @returns Promise resolving to item or undefined if not found
|
|
26
|
+
*/
|
|
27
|
+
get(id: string): Promise<T | undefined>;
|
|
28
|
+
/**
|
|
29
|
+
* Get all items in collection.
|
|
30
|
+
*
|
|
31
|
+
* @returns Promise resolving to array of all items
|
|
32
|
+
*/
|
|
33
|
+
getAll(): Promise<T[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Find items matching predicate.
|
|
36
|
+
*
|
|
37
|
+
* @param predicate - Filter function
|
|
38
|
+
* @returns Promise resolving to array of matching items
|
|
39
|
+
*/
|
|
40
|
+
find(predicate: (item: T) => boolean): Promise<T[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Check if item exists.
|
|
43
|
+
*
|
|
44
|
+
* @param id - Item identifier
|
|
45
|
+
* @returns Promise resolving to true if item exists
|
|
46
|
+
*/
|
|
47
|
+
has(id: string): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Get number of items in collection.
|
|
50
|
+
*
|
|
51
|
+
* @returns Promise resolving to count of items
|
|
52
|
+
*/
|
|
53
|
+
size(): Promise<number>;
|
|
54
|
+
/**
|
|
55
|
+
* Set/update item by ID.
|
|
56
|
+
*
|
|
57
|
+
* @param id - Item identifier
|
|
58
|
+
* @param value - Item to store
|
|
59
|
+
* @returns Promise resolving when operation completes
|
|
60
|
+
*/
|
|
61
|
+
set(id: string, value: T): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Delete item by ID.
|
|
64
|
+
*
|
|
65
|
+
* @param id - Item identifier
|
|
66
|
+
* @returns Promise resolving to true if item was deleted, false if not found
|
|
67
|
+
*/
|
|
68
|
+
delete(id: string): Promise<boolean>;
|
|
69
|
+
/**
|
|
70
|
+
* Clear all items from collection.
|
|
71
|
+
*
|
|
72
|
+
* @returns Promise resolving when operation completes
|
|
73
|
+
*/
|
|
74
|
+
clear(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Set multiple items at once (more efficient than individual sets).
|
|
77
|
+
*
|
|
78
|
+
* @param items - Array of [id, value] tuples
|
|
79
|
+
* @returns Promise resolving when operation completes
|
|
80
|
+
*/
|
|
81
|
+
setBatch(items: Array<[string, T]>): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Delete multiple items at once.
|
|
84
|
+
*
|
|
85
|
+
* @param ids - Array of item identifiers
|
|
86
|
+
* @returns Promise resolving to number of items actually deleted
|
|
87
|
+
*/
|
|
88
|
+
deleteBatch(ids: string[]): Promise<number>;
|
|
89
|
+
/**
|
|
90
|
+
* Get multiple items by ID at once.
|
|
91
|
+
*
|
|
92
|
+
* @param ids - Array of item identifiers
|
|
93
|
+
* @returns Promise resolving to Map of found items (missing IDs are omitted)
|
|
94
|
+
*/
|
|
95
|
+
getBatch(ids: string[]): Promise<Map<string, T>>;
|
|
96
|
+
/**
|
|
97
|
+
* Close storage and cleanup resources.
|
|
98
|
+
* Should be called when collection is no longer needed.
|
|
99
|
+
*
|
|
100
|
+
* @returns Promise resolving when cleanup completes
|
|
101
|
+
*/
|
|
102
|
+
close(): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Get storage metadata/stats (optional).
|
|
105
|
+
* Useful for monitoring and debugging.
|
|
106
|
+
*
|
|
107
|
+
* @returns Promise resolving to storage-specific metadata
|
|
108
|
+
*/
|
|
109
|
+
getMetadata?(): Promise<StorageMetadata>;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Optional storage metadata for monitoring.
|
|
113
|
+
*/
|
|
114
|
+
export interface StorageMetadata {
|
|
115
|
+
/** Storage backend type */
|
|
116
|
+
type: "memory" | "api" | "hybrid" | "synced" | "custom";
|
|
117
|
+
/** Number of items */
|
|
118
|
+
size: number;
|
|
119
|
+
/** Storage-specific stats */
|
|
120
|
+
stats?: {
|
|
121
|
+
/** Cache hit rate (for hybrid/synced storage) */
|
|
122
|
+
hitRate?: number;
|
|
123
|
+
/** Last sync timestamp (for synced storage) */
|
|
124
|
+
lastSync?: number;
|
|
125
|
+
/** Pending sync operations (for synced storage) */
|
|
126
|
+
pendingOps?: number;
|
|
127
|
+
/** Memory usage in bytes (for memory storage) */
|
|
128
|
+
memoryUsage?: number;
|
|
129
|
+
/** Custom stats */
|
|
130
|
+
[key: string]: unknown;
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* @deprecated All storage methods now return Promise.
|
|
135
|
+
* This helper is kept for backward compatibility but is no longer needed.
|
|
136
|
+
*
|
|
137
|
+
* @param value - Promise value
|
|
138
|
+
* @returns The same Promise
|
|
139
|
+
*/
|
|
140
|
+
export declare function normalizeStorageResult<T>(value: Promise<T>): Promise<T>;
|
|
141
|
+
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/storage/interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAKlC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAExC;;;;OAIG;IACH,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAEvB;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAEpD;;;;;OAKG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAElC;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAMxB;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAMvB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAMjD;;;;;OAKG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;;;OAKG;IACH,WAAW,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAExD,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,KAAK,CAAC,EAAE;QACN,iDAAiD;QACjD,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB,+CAA+C;QAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;QAElB,mDAAmD;QACnD,UAAU,CAAC,EAAE,MAAM,CAAC;QAEpB,iDAAiD;QACjD,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB,mBAAmB;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Storage Interface
|
|
3
|
+
*
|
|
4
|
+
* Abstract storage layer for collections, enabling different backends:
|
|
5
|
+
* - InMemoryStorage: Fast, volatile storage using Map
|
|
6
|
+
* - ApiStorage: Remote persistence via universal client
|
|
7
|
+
* - HybridStorage: Local cache + remote sync with conflict resolution
|
|
8
|
+
* - SyncedStorage: Periodic background sync with offline support
|
|
9
|
+
*
|
|
10
|
+
* IMPORTANT: All methods return Promise to ensure client code is
|
|
11
|
+
* transport-agnostic (cannot distinguish local from remote storage).
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated All storage methods now return Promise.
|
|
15
|
+
* This helper is kept for backward compatibility but is no longer needed.
|
|
16
|
+
*
|
|
17
|
+
* @param value - Promise value
|
|
18
|
+
* @returns The same Promise
|
|
19
|
+
*/
|
|
20
|
+
export function normalizeStorageResult(value) {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/storage/interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8JH;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAI,KAAiB;IACzD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-Memory Storage Implementation
|
|
3
|
+
*
|
|
4
|
+
* Fast, volatile storage using JavaScript Map.
|
|
5
|
+
* All operations return Promises for interface consistency.
|
|
6
|
+
*/
|
|
7
|
+
import type { CollectionStorage, StorageMetadata } from "./interface.js";
|
|
8
|
+
/**
|
|
9
|
+
* In-memory storage backed by JavaScript Map.
|
|
10
|
+
*
|
|
11
|
+
* Features:
|
|
12
|
+
* - Fast lookups O(1)
|
|
13
|
+
* - No persistence (data lost on restart)
|
|
14
|
+
* - Memory-bound (limited by available RAM)
|
|
15
|
+
* - Returns Promises for API consistency with remote storage
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const storage = new InMemoryStorage<User>();
|
|
20
|
+
* await storage.set("123", { id: "123", name: "John" });
|
|
21
|
+
* const user = await storage.get("123"); // { id: "123", name: "John" }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class InMemoryStorage<T> implements CollectionStorage<T> {
|
|
25
|
+
private data;
|
|
26
|
+
get(id: string): Promise<T | undefined>;
|
|
27
|
+
getAll(): Promise<T[]>;
|
|
28
|
+
find(predicate: (item: T) => boolean): Promise<T[]>;
|
|
29
|
+
has(id: string): Promise<boolean>;
|
|
30
|
+
size(): Promise<number>;
|
|
31
|
+
set(id: string, value: T): Promise<void>;
|
|
32
|
+
delete(id: string): Promise<boolean>;
|
|
33
|
+
clear(): Promise<void>;
|
|
34
|
+
setBatch(items: Array<[string, T]>): Promise<void>;
|
|
35
|
+
deleteBatch(ids: string[]): Promise<number>;
|
|
36
|
+
getBatch(ids: string[]): Promise<Map<string, T>>;
|
|
37
|
+
close(): Promise<void>;
|
|
38
|
+
getMetadata(): Promise<StorageMetadata>;
|
|
39
|
+
/**
|
|
40
|
+
* Get all keys in storage.
|
|
41
|
+
*
|
|
42
|
+
* @returns Iterator of keys
|
|
43
|
+
*/
|
|
44
|
+
keys(): IterableIterator<string>;
|
|
45
|
+
/**
|
|
46
|
+
* Get all values in storage.
|
|
47
|
+
*
|
|
48
|
+
* @returns Iterator of values
|
|
49
|
+
*/
|
|
50
|
+
values(): IterableIterator<T>;
|
|
51
|
+
/**
|
|
52
|
+
* Get all entries in storage.
|
|
53
|
+
*
|
|
54
|
+
* @returns Iterator of [id, value] tuples
|
|
55
|
+
*/
|
|
56
|
+
entries(): IterableIterator<[string, T]>;
|
|
57
|
+
/**
|
|
58
|
+
* Iterate over storage entries.
|
|
59
|
+
*
|
|
60
|
+
* @param callback - Function to call for each entry
|
|
61
|
+
*/
|
|
62
|
+
forEach(callback: (value: T, key: string, map: Map<string, T>) => void): void;
|
|
63
|
+
/**
|
|
64
|
+
* Make storage iterable.
|
|
65
|
+
*/
|
|
66
|
+
[Symbol.iterator](): IterableIterator<[string, T]>;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEzE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAwB;IAMpC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAEtC;IAED,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAErB;IAED,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAQlD;IAED,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEhC;IAED,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAEtB;IAMD,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvC;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnC;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrB;IAMD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjD;IAED,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ1C;IAED,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAS/C;IAMD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAIrB;IAED,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC,CAatC;IAMD;;;;OAIG;IACH,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAE/B;IAED;;;;OAIG;IACH,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAE5B;IAED;;;;OAIG;IACH,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAEvC;IAED;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAE5E;IAED;;OAEG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAEjD;CACF"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-Memory Storage Implementation
|
|
3
|
+
*
|
|
4
|
+
* Fast, volatile storage using JavaScript Map.
|
|
5
|
+
* All operations return Promises for interface consistency.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* In-memory storage backed by JavaScript Map.
|
|
9
|
+
*
|
|
10
|
+
* Features:
|
|
11
|
+
* - Fast lookups O(1)
|
|
12
|
+
* - No persistence (data lost on restart)
|
|
13
|
+
* - Memory-bound (limited by available RAM)
|
|
14
|
+
* - Returns Promises for API consistency with remote storage
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const storage = new InMemoryStorage<User>();
|
|
19
|
+
* await storage.set("123", { id: "123", name: "John" });
|
|
20
|
+
* const user = await storage.get("123"); // { id: "123", name: "John" }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export class InMemoryStorage {
|
|
24
|
+
data = new Map();
|
|
25
|
+
//
|
|
26
|
+
// ═══ Read Operations ═══
|
|
27
|
+
//
|
|
28
|
+
get(id) {
|
|
29
|
+
return Promise.resolve(this.data.get(id));
|
|
30
|
+
}
|
|
31
|
+
getAll() {
|
|
32
|
+
return Promise.resolve(Array.from(this.data.values()));
|
|
33
|
+
}
|
|
34
|
+
find(predicate) {
|
|
35
|
+
const results = [];
|
|
36
|
+
for (const item of this.data.values()) {
|
|
37
|
+
if (predicate(item)) {
|
|
38
|
+
results.push(item);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return Promise.resolve(results);
|
|
42
|
+
}
|
|
43
|
+
has(id) {
|
|
44
|
+
return Promise.resolve(this.data.has(id));
|
|
45
|
+
}
|
|
46
|
+
size() {
|
|
47
|
+
return Promise.resolve(this.data.size);
|
|
48
|
+
}
|
|
49
|
+
//
|
|
50
|
+
// ═══ Write Operations ═══
|
|
51
|
+
//
|
|
52
|
+
set(id, value) {
|
|
53
|
+
this.data.set(id, value);
|
|
54
|
+
return Promise.resolve();
|
|
55
|
+
}
|
|
56
|
+
delete(id) {
|
|
57
|
+
return Promise.resolve(this.data.delete(id));
|
|
58
|
+
}
|
|
59
|
+
clear() {
|
|
60
|
+
this.data.clear();
|
|
61
|
+
return Promise.resolve();
|
|
62
|
+
}
|
|
63
|
+
//
|
|
64
|
+
// ═══ Bulk Operations ═══
|
|
65
|
+
//
|
|
66
|
+
setBatch(items) {
|
|
67
|
+
for (const [id, value] of items) {
|
|
68
|
+
this.data.set(id, value);
|
|
69
|
+
}
|
|
70
|
+
return Promise.resolve();
|
|
71
|
+
}
|
|
72
|
+
deleteBatch(ids) {
|
|
73
|
+
let deleted = 0;
|
|
74
|
+
for (const id of ids) {
|
|
75
|
+
if (this.data.delete(id)) {
|
|
76
|
+
deleted++;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return Promise.resolve(deleted);
|
|
80
|
+
}
|
|
81
|
+
getBatch(ids) {
|
|
82
|
+
const result = new Map();
|
|
83
|
+
for (const id of ids) {
|
|
84
|
+
const value = this.data.get(id);
|
|
85
|
+
if (value !== undefined) {
|
|
86
|
+
result.set(id, value);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return Promise.resolve(result);
|
|
90
|
+
}
|
|
91
|
+
//
|
|
92
|
+
// ═══ Lifecycle & Metadata ═══
|
|
93
|
+
//
|
|
94
|
+
close() {
|
|
95
|
+
// No cleanup needed for in-memory storage
|
|
96
|
+
this.data.clear();
|
|
97
|
+
return Promise.resolve();
|
|
98
|
+
}
|
|
99
|
+
getMetadata() {
|
|
100
|
+
// Rough memory estimation:
|
|
101
|
+
// Each entry has ~overhead of 100 bytes (key string + Map entry overhead)
|
|
102
|
+
const estimatedEntrySize = 100;
|
|
103
|
+
const memoryUsage = this.data.size * estimatedEntrySize;
|
|
104
|
+
return Promise.resolve({
|
|
105
|
+
type: "memory",
|
|
106
|
+
size: this.data.size,
|
|
107
|
+
stats: {
|
|
108
|
+
memoryUsage,
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
//
|
|
113
|
+
// ═══ Additional Methods (Map compatibility) ═══
|
|
114
|
+
//
|
|
115
|
+
/**
|
|
116
|
+
* Get all keys in storage.
|
|
117
|
+
*
|
|
118
|
+
* @returns Iterator of keys
|
|
119
|
+
*/
|
|
120
|
+
keys() {
|
|
121
|
+
return this.data.keys();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get all values in storage.
|
|
125
|
+
*
|
|
126
|
+
* @returns Iterator of values
|
|
127
|
+
*/
|
|
128
|
+
values() {
|
|
129
|
+
return this.data.values();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get all entries in storage.
|
|
133
|
+
*
|
|
134
|
+
* @returns Iterator of [id, value] tuples
|
|
135
|
+
*/
|
|
136
|
+
entries() {
|
|
137
|
+
return this.data.entries();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Iterate over storage entries.
|
|
141
|
+
*
|
|
142
|
+
* @param callback - Function to call for each entry
|
|
143
|
+
*/
|
|
144
|
+
forEach(callback) {
|
|
145
|
+
this.data.forEach(callback);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Make storage iterable.
|
|
149
|
+
*/
|
|
150
|
+
[Symbol.iterator]() {
|
|
151
|
+
return this.data.entries();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"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"}
|