@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.
- package/CHANGELOG.md +12 -0
- package/README.md +4 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/browser.d.ts +1 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/procedures/invoke.d.ts +6 -1
- package/dist/procedures/invoke.d.ts.map +1 -1
- package/dist/procedures/invoke.js +2 -2
- package/dist/procedures/invoke.js.map +1 -1
- package/dist/procedures/schema.d.ts +4 -1
- package/dist/procedures/schema.d.ts.map +1 -1
- package/dist/procedures/schema.js +27 -2
- package/dist/procedures/schema.js.map +1 -1
- package/dist/server/host-policy.d.ts +3 -3
- package/dist/server/host-policy.d.ts.map +1 -1
- package/dist/server/procedure-server.d.ts +2 -2
- package/dist/server/procedure-server.d.ts.map +1 -1
- package/dist/server/procedure-server.js.map +1 -1
- package/package.json +1 -1
- package/src/browser.ts +1 -0
- package/src/procedures/invoke.ts +10 -4
- package/src/procedures/schema.ts +27 -2
- package/src/server/host-policy.ts +3 -3
- package/src/server/procedure-server.ts +2 -2
- package/dist/client/middleware/batching.d.ts +0 -102
- package/dist/client/middleware/batching.d.ts.map +0 -1
- package/dist/client/middleware/batching.js +0 -245
- package/dist/client/middleware/batching.js.map +0 -1
- package/dist/collections/async/async-queue.d.ts +0 -144
- package/dist/collections/async/async-queue.d.ts.map +0 -1
- package/dist/collections/async/async-queue.js +0 -347
- package/dist/collections/async/async-queue.js.map +0 -1
- package/dist/collections/async/channels.d.ts +0 -188
- package/dist/collections/async/channels.d.ts.map +0 -1
- package/dist/collections/async/channels.js +0 -312
- package/dist/collections/async/channels.js.map +0 -1
- package/dist/collections/behaviors/bounded.d.ts +0 -79
- package/dist/collections/behaviors/bounded.d.ts.map +0 -1
- package/dist/collections/behaviors/bounded.js +0 -384
- package/dist/collections/behaviors/bounded.js.map +0 -1
- package/dist/collections/behaviors/evented.d.ts +0 -154
- package/dist/collections/behaviors/evented.d.ts.map +0 -1
- package/dist/collections/behaviors/evented.js +0 -299
- package/dist/collections/behaviors/evented.js.map +0 -1
- package/dist/collections/behaviors/lru.d.ts +0 -84
- package/dist/collections/behaviors/lru.d.ts.map +0 -1
- package/dist/collections/behaviors/lru.js +0 -330
- package/dist/collections/behaviors/lru.js.map +0 -1
- package/dist/collections/behaviors/readonly.d.ts +0 -73
- package/dist/collections/behaviors/readonly.d.ts.map +0 -1
- package/dist/collections/behaviors/readonly.js +0 -158
- package/dist/collections/behaviors/readonly.js.map +0 -1
- package/dist/collections/behaviors/safe.d.ts +0 -163
- package/dist/collections/behaviors/safe.d.ts.map +0 -1
- package/dist/collections/behaviors/safe.js +0 -172
- package/dist/collections/behaviors/safe.js.map +0 -1
- package/dist/collections/behaviors/synchronized.d.ts +0 -88
- package/dist/collections/behaviors/synchronized.d.ts.map +0 -1
- package/dist/collections/behaviors/synchronized.js +0 -294
- package/dist/collections/behaviors/synchronized.js.map +0 -1
- package/dist/collections/behaviors/ttl.d.ts +0 -118
- package/dist/collections/behaviors/ttl.d.ts.map +0 -1
- package/dist/collections/behaviors/ttl.js +0 -338
- package/dist/collections/behaviors/ttl.js.map +0 -1
- package/dist/collections/core/effects.d.ts +0 -176
- package/dist/collections/core/effects.d.ts.map +0 -1
- package/dist/collections/core/effects.js +0 -180
- package/dist/collections/core/effects.js.map +0 -1
- package/dist/collections/core/events.d.ts +0 -192
- package/dist/collections/core/events.d.ts.map +0 -1
- package/dist/collections/core/events.js +0 -291
- package/dist/collections/core/events.js.map +0 -1
- package/dist/collections/core/middleware.d.ts +0 -231
- package/dist/collections/core/middleware.d.ts.map +0 -1
- package/dist/collections/core/middleware.js +0 -161
- package/dist/collections/core/middleware.js.map +0 -1
- package/dist/collections/core/policies.d.ts +0 -220
- package/dist/collections/core/policies.d.ts.map +0 -1
- package/dist/collections/core/policies.js +0 -48
- package/dist/collections/core/policies.js.map +0 -1
- package/dist/collections/core/traits.d.ts +0 -142
- package/dist/collections/core/traits.d.ts.map +0 -1
- package/dist/collections/core/traits.js +0 -8
- package/dist/collections/core/traits.js.map +0 -1
- package/dist/collections/examples.d.ts +0 -13
- package/dist/collections/examples.d.ts.map +0 -1
- package/dist/collections/examples.js +0 -302
- package/dist/collections/examples.js.map +0 -1
- package/dist/collections/fx/collectors.d.ts +0 -190
- package/dist/collections/fx/collectors.d.ts.map +0 -1
- package/dist/collections/fx/collectors.js +0 -369
- package/dist/collections/fx/collectors.js.map +0 -1
- package/dist/collections/fx/iter.d.ts +0 -166
- package/dist/collections/fx/iter.d.ts.map +0 -1
- package/dist/collections/fx/iter.js +0 -421
- package/dist/collections/fx/iter.js.map +0 -1
- package/dist/collections/impl/array-deque.d.ts +0 -107
- package/dist/collections/impl/array-deque.d.ts.map +0 -1
- package/dist/collections/impl/array-deque.js +0 -381
- package/dist/collections/impl/array-deque.js.map +0 -1
- package/dist/collections/impl/array-list.d.ts +0 -101
- package/dist/collections/impl/array-list.d.ts.map +0 -1
- package/dist/collections/impl/array-list.js +0 -387
- package/dist/collections/impl/array-list.js.map +0 -1
- package/dist/collections/impl/hash-map.d.ts +0 -141
- package/dist/collections/impl/hash-map.d.ts.map +0 -1
- package/dist/collections/impl/hash-map.js +0 -450
- package/dist/collections/impl/hash-map.js.map +0 -1
- package/dist/collections/impl/hash-set.d.ts +0 -125
- package/dist/collections/impl/hash-set.d.ts.map +0 -1
- package/dist/collections/impl/hash-set.js +0 -264
- package/dist/collections/impl/hash-set.js.map +0 -1
- package/dist/collections/impl/linked-hash-map.d.ts +0 -141
- package/dist/collections/impl/linked-hash-map.d.ts.map +0 -1
- package/dist/collections/impl/linked-hash-map.js +0 -472
- package/dist/collections/impl/linked-hash-map.js.map +0 -1
- package/dist/collections/impl/linked-list.d.ts +0 -109
- package/dist/collections/impl/linked-list.d.ts.map +0 -1
- package/dist/collections/impl/linked-list.js +0 -491
- package/dist/collections/impl/linked-list.js.map +0 -1
- package/dist/collections/impl/priority-queue.d.ts +0 -134
- package/dist/collections/impl/priority-queue.d.ts.map +0 -1
- package/dist/collections/impl/priority-queue.js +0 -336
- package/dist/collections/impl/priority-queue.js.map +0 -1
- package/dist/collections/impl/tree-map.d.ts +0 -146
- package/dist/collections/impl/tree-map.d.ts.map +0 -1
- package/dist/collections/impl/tree-map.js +0 -781
- package/dist/collections/impl/tree-map.js.map +0 -1
- package/dist/collections/impl/tree-set.d.ts +0 -112
- package/dist/collections/impl/tree-set.d.ts.map +0 -1
- package/dist/collections/impl/tree-set.js +0 -374
- package/dist/collections/impl/tree-set.js.map +0 -1
- package/dist/collections/index.d.ts +0 -105
- package/dist/collections/index.d.ts.map +0 -1
- package/dist/collections/index.js +0 -135
- package/dist/collections/index.js.map +0 -1
- package/dist/collections/interfaces/collection.d.ts +0 -119
- package/dist/collections/interfaces/collection.d.ts.map +0 -1
- package/dist/collections/interfaces/collection.js +0 -8
- package/dist/collections/interfaces/collection.js.map +0 -1
- package/dist/collections/interfaces/list.d.ts +0 -247
- package/dist/collections/interfaces/list.d.ts.map +0 -1
- package/dist/collections/interfaces/list.js +0 -8
- package/dist/collections/interfaces/list.js.map +0 -1
- package/dist/collections/interfaces/map.d.ts +0 -344
- package/dist/collections/interfaces/map.d.ts.map +0 -1
- package/dist/collections/interfaces/map.js +0 -8
- package/dist/collections/interfaces/map.js.map +0 -1
- package/dist/collections/interfaces/queue.d.ts +0 -304
- package/dist/collections/interfaces/queue.d.ts.map +0 -1
- package/dist/collections/interfaces/queue.js +0 -8
- package/dist/collections/interfaces/queue.js.map +0 -1
- package/dist/collections/interfaces/set.d.ts +0 -137
- package/dist/collections/interfaces/set.d.ts.map +0 -1
- package/dist/collections/interfaces/set.js +0 -8
- package/dist/collections/interfaces/set.js.map +0 -1
- package/dist/collections/storage/api.d.ts +0 -109
- package/dist/collections/storage/api.d.ts.map +0 -1
- package/dist/collections/storage/api.js +0 -182
- package/dist/collections/storage/api.js.map +0 -1
- package/dist/collections/storage/hybrid.d.ts +0 -164
- package/dist/collections/storage/hybrid.d.ts.map +0 -1
- package/dist/collections/storage/hybrid.js +0 -416
- package/dist/collections/storage/hybrid.js.map +0 -1
- package/dist/collections/storage/index.d.ts +0 -16
- package/dist/collections/storage/index.d.ts.map +0 -1
- package/dist/collections/storage/index.js +0 -13
- package/dist/collections/storage/index.js.map +0 -1
- package/dist/collections/storage/interface.d.ts +0 -141
- package/dist/collections/storage/interface.d.ts.map +0 -1
- package/dist/collections/storage/interface.js +0 -23
- package/dist/collections/storage/interface.js.map +0 -1
- package/dist/collections/storage/memory.d.ts +0 -68
- package/dist/collections/storage/memory.d.ts.map +0 -1
- package/dist/collections/storage/memory.js +0 -154
- package/dist/collections/storage/memory.js.map +0 -1
- package/dist/collections/utils/defaults.d.ts +0 -135
- package/dist/collections/utils/defaults.d.ts.map +0 -1
- package/dist/collections/utils/defaults.js +0 -322
- package/dist/collections/utils/defaults.js.map +0 -1
- package/dist/collections/utils/factories.d.ts +0 -144
- package/dist/collections/utils/factories.d.ts.map +0 -1
- package/dist/collections/utils/factories.js +0 -293
- package/dist/collections/utils/factories.js.map +0 -1
- package/dist/collections/utils/helpers.d.ts +0 -137
- package/dist/collections/utils/helpers.d.ts.map +0 -1
- package/dist/collections/utils/helpers.js +0 -221
- package/dist/collections/utils/helpers.js.map +0 -1
- package/dist/collections.d.ts +0 -12
- package/dist/collections.d.ts.map +0 -1
- package/dist/collections.js +0 -10
- package/dist/collections.js.map +0 -1
- package/dist/components/define.d.ts +0 -134
- package/dist/components/define.d.ts.map +0 -1
- package/dist/components/define.js +0 -486
- package/dist/components/define.js.map +0 -1
- package/dist/components/index.d.ts +0 -39
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -38
- package/dist/components/index.js.map +0 -1
- package/dist/components/types.d.ts +0 -264
- package/dist/components/types.d.ts.map +0 -1
- package/dist/components/types.js +0 -46
- package/dist/components/types.js.map +0 -1
- package/dist/procedures/storage/adapter.d.ts +0 -148
- package/dist/procedures/storage/adapter.d.ts.map +0 -1
- package/dist/procedures/storage/adapter.js +0 -214
- package/dist/procedures/storage/adapter.js.map +0 -1
- package/dist/procedures/storage/api.d.ts +0 -125
- package/dist/procedures/storage/api.d.ts.map +0 -1
- package/dist/procedures/storage/api.js +0 -220
- package/dist/procedures/storage/api.js.map +0 -1
- package/dist/procedures/storage/factory.d.ts +0 -134
- package/dist/procedures/storage/factory.d.ts.map +0 -1
- package/dist/procedures/storage/factory.js +0 -166
- package/dist/procedures/storage/factory.js.map +0 -1
- package/dist/procedures/storage/hybrid.d.ts +0 -193
- package/dist/procedures/storage/hybrid.d.ts.map +0 -1
- package/dist/procedures/storage/hybrid.js +0 -519
- package/dist/procedures/storage/hybrid.js.map +0 -1
- package/dist/procedures/storage/index.d.ts +0 -17
- package/dist/procedures/storage/index.d.ts.map +0 -1
- package/dist/procedures/storage/index.js +0 -17
- package/dist/procedures/storage/index.js.map +0 -1
- package/dist/procedures/storage/procedures.d.ts +0 -39
- package/dist/procedures/storage/procedures.d.ts.map +0 -1
- package/dist/procedures/storage/procedures.js +0 -261
- package/dist/procedures/storage/procedures.js.map +0 -1
- package/dist/procedures/storage/serialization.d.ts +0 -123
- package/dist/procedures/storage/serialization.d.ts.map +0 -1
- package/dist/procedures/storage/serialization.js +0 -216
- package/dist/procedures/storage/serialization.js.map +0 -1
- package/dist/procedures/storage/synced-registry.d.ts +0 -246
- package/dist/procedures/storage/synced-registry.d.ts.map +0 -1
- package/dist/procedures/storage/synced-registry.js +0 -575
- package/dist/procedures/storage/synced-registry.js.map +0 -1
- package/dist/procedures/storage/types.d.ts +0 -130
- package/dist/procedures/storage/types.d.ts.map +0 -1
- package/dist/procedures/storage/types.js +0 -8
- package/dist/procedures/storage/types.js.map +0 -1
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LRU (Least Recently Used) eviction behavior.
|
|
3
|
-
*
|
|
4
|
-
* Tracks access times and automatically evicts the least recently used
|
|
5
|
-
* elements when capacity is reached. Perfect for caching.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* const cache = compose(
|
|
9
|
-
* lruMap({ capacity: 100 })
|
|
10
|
-
* )(hashMap<string, Data>())
|
|
11
|
-
*
|
|
12
|
-
* cache.set('key1', data1) // Accessed
|
|
13
|
-
* cache.get('key1') // Accessed again (moves to front)
|
|
14
|
-
* // When full, least recently accessed keys are evicted
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* Creates an LRU Map middleware.
|
|
18
|
-
*
|
|
19
|
-
* Maintains a doubly-linked list to track access order.
|
|
20
|
-
* Most recently accessed items are at the head.
|
|
21
|
-
* When capacity is exceeded, items at the tail are evicted.
|
|
22
|
-
*/
|
|
23
|
-
export function lruMap(options) {
|
|
24
|
-
const { capacity, onEvict } = options;
|
|
25
|
-
return (next) => {
|
|
26
|
-
// Doubly-linked list for LRU tracking
|
|
27
|
-
let head = null;
|
|
28
|
-
let tail = null;
|
|
29
|
-
const nodeMap = new Map();
|
|
30
|
-
const moveToHead = (node) => {
|
|
31
|
-
// Remove from current position
|
|
32
|
-
if (node.prev) {
|
|
33
|
-
node.prev.next = node.next;
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
head = node.next;
|
|
37
|
-
}
|
|
38
|
-
if (node.next) {
|
|
39
|
-
node.next.prev = node.prev;
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
tail = node.prev;
|
|
43
|
-
}
|
|
44
|
-
// Add to head
|
|
45
|
-
node.prev = null;
|
|
46
|
-
node.next = head;
|
|
47
|
-
if (head) {
|
|
48
|
-
head.prev = node;
|
|
49
|
-
}
|
|
50
|
-
head = node;
|
|
51
|
-
if (!tail) {
|
|
52
|
-
tail = node;
|
|
53
|
-
}
|
|
54
|
-
node.lastAccessed = Date.now();
|
|
55
|
-
};
|
|
56
|
-
const addNode = (key, value) => {
|
|
57
|
-
const node = {
|
|
58
|
-
key,
|
|
59
|
-
value,
|
|
60
|
-
lastAccessed: Date.now(),
|
|
61
|
-
prev: null,
|
|
62
|
-
next: head,
|
|
63
|
-
};
|
|
64
|
-
if (head) {
|
|
65
|
-
head.prev = node;
|
|
66
|
-
}
|
|
67
|
-
head = node;
|
|
68
|
-
if (!tail) {
|
|
69
|
-
tail = node;
|
|
70
|
-
}
|
|
71
|
-
nodeMap.set(key, node);
|
|
72
|
-
};
|
|
73
|
-
const removeNode = (node) => {
|
|
74
|
-
if (node.prev) {
|
|
75
|
-
node.prev.next = node.next;
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
head = node.next;
|
|
79
|
-
}
|
|
80
|
-
if (node.next) {
|
|
81
|
-
node.next.prev = node.prev;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
tail = node.prev;
|
|
85
|
-
}
|
|
86
|
-
nodeMap.delete(node.key);
|
|
87
|
-
};
|
|
88
|
-
const evictLRU = () => {
|
|
89
|
-
if (!tail)
|
|
90
|
-
return;
|
|
91
|
-
const evicted = tail;
|
|
92
|
-
removeNode(evicted);
|
|
93
|
-
next.delete(evicted.key);
|
|
94
|
-
if (onEvict) {
|
|
95
|
-
onEvict({
|
|
96
|
-
key: evicted.key,
|
|
97
|
-
value: evicted.value,
|
|
98
|
-
timestamp: evicted.lastAccessed,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
return new Proxy(next, {
|
|
103
|
-
get(target, prop, receiver) {
|
|
104
|
-
// Add isFull property
|
|
105
|
-
if (prop === "isFull") {
|
|
106
|
-
return target.size >= capacity;
|
|
107
|
-
}
|
|
108
|
-
const value = Reflect.get(target, prop, receiver);
|
|
109
|
-
if (typeof value === "function") {
|
|
110
|
-
switch (prop) {
|
|
111
|
-
case "get":
|
|
112
|
-
return function (key) {
|
|
113
|
-
const result = value.call(target, key);
|
|
114
|
-
// Update access time
|
|
115
|
-
const node = nodeMap.get(key);
|
|
116
|
-
if (node) {
|
|
117
|
-
moveToHead(node);
|
|
118
|
-
}
|
|
119
|
-
return result;
|
|
120
|
-
};
|
|
121
|
-
case "has":
|
|
122
|
-
return function (key) {
|
|
123
|
-
const result = value.call(target, key);
|
|
124
|
-
// Update access time
|
|
125
|
-
if (result) {
|
|
126
|
-
const node = nodeMap.get(key);
|
|
127
|
-
if (node) {
|
|
128
|
-
moveToHead(node);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return result;
|
|
132
|
-
};
|
|
133
|
-
case "set":
|
|
134
|
-
return function (key, val) {
|
|
135
|
-
const hadKey = target.has(key);
|
|
136
|
-
if (hadKey) {
|
|
137
|
-
// Update existing
|
|
138
|
-
const oldValue = value.call(target, key, val);
|
|
139
|
-
const node = nodeMap.get(key);
|
|
140
|
-
if (node) {
|
|
141
|
-
node.value = val;
|
|
142
|
-
moveToHead(node);
|
|
143
|
-
}
|
|
144
|
-
return oldValue;
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
// Add new
|
|
148
|
-
if (target.size >= capacity) {
|
|
149
|
-
evictLRU();
|
|
150
|
-
}
|
|
151
|
-
const result = value.call(target, key, val);
|
|
152
|
-
addNode(key, val);
|
|
153
|
-
return result;
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
case "delete":
|
|
157
|
-
return function (key) {
|
|
158
|
-
const result = value.call(target, key);
|
|
159
|
-
const node = nodeMap.get(key);
|
|
160
|
-
if (node) {
|
|
161
|
-
removeNode(node);
|
|
162
|
-
}
|
|
163
|
-
return result;
|
|
164
|
-
};
|
|
165
|
-
case "clear":
|
|
166
|
-
return function () {
|
|
167
|
-
value.call(target);
|
|
168
|
-
head = null;
|
|
169
|
-
tail = null;
|
|
170
|
-
nodeMap.clear();
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return value;
|
|
175
|
-
},
|
|
176
|
-
});
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Creates an LRU cache with a simpler API.
|
|
181
|
-
* This is a standalone LRU cache implementation.
|
|
182
|
-
*
|
|
183
|
-
* @example
|
|
184
|
-
* const cache = lruCache<string, Data>(100)
|
|
185
|
-
* cache.set('key', value)
|
|
186
|
-
* cache.get('key') // Moves to front
|
|
187
|
-
*/
|
|
188
|
-
export class LRUCache {
|
|
189
|
-
capacity;
|
|
190
|
-
onEvict;
|
|
191
|
-
map = new Map();
|
|
192
|
-
head = null;
|
|
193
|
-
tail = null;
|
|
194
|
-
constructor(capacity, onEvict) {
|
|
195
|
-
this.capacity = capacity;
|
|
196
|
-
this.onEvict = onEvict;
|
|
197
|
-
}
|
|
198
|
-
get size() {
|
|
199
|
-
return this.map.size;
|
|
200
|
-
}
|
|
201
|
-
get isFull() {
|
|
202
|
-
return this.map.size >= this.capacity;
|
|
203
|
-
}
|
|
204
|
-
get(key) {
|
|
205
|
-
const entry = this.map.get(key);
|
|
206
|
-
if (!entry)
|
|
207
|
-
return undefined;
|
|
208
|
-
this.moveToHead(entry.node);
|
|
209
|
-
return entry.value;
|
|
210
|
-
}
|
|
211
|
-
set(key, value) {
|
|
212
|
-
const entry = this.map.get(key);
|
|
213
|
-
if (entry) {
|
|
214
|
-
// Update existing
|
|
215
|
-
entry.value = value;
|
|
216
|
-
entry.node.value = value;
|
|
217
|
-
this.moveToHead(entry.node);
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
// Add new
|
|
221
|
-
if (this.map.size >= this.capacity) {
|
|
222
|
-
this.evictLRU();
|
|
223
|
-
}
|
|
224
|
-
const node = {
|
|
225
|
-
key,
|
|
226
|
-
value,
|
|
227
|
-
lastAccessed: Date.now(),
|
|
228
|
-
prev: null,
|
|
229
|
-
next: this.head,
|
|
230
|
-
};
|
|
231
|
-
if (this.head) {
|
|
232
|
-
this.head.prev = node;
|
|
233
|
-
}
|
|
234
|
-
this.head = node;
|
|
235
|
-
if (!this.tail) {
|
|
236
|
-
this.tail = node;
|
|
237
|
-
}
|
|
238
|
-
this.map.set(key, { value, node });
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
has(key) {
|
|
242
|
-
return this.map.has(key);
|
|
243
|
-
}
|
|
244
|
-
delete(key) {
|
|
245
|
-
const entry = this.map.get(key);
|
|
246
|
-
if (!entry)
|
|
247
|
-
return false;
|
|
248
|
-
this.removeNode(entry.node);
|
|
249
|
-
this.map.delete(key);
|
|
250
|
-
return true;
|
|
251
|
-
}
|
|
252
|
-
clear() {
|
|
253
|
-
this.map.clear();
|
|
254
|
-
this.head = null;
|
|
255
|
-
this.tail = null;
|
|
256
|
-
}
|
|
257
|
-
moveToHead(node) {
|
|
258
|
-
if (node === this.head)
|
|
259
|
-
return;
|
|
260
|
-
// Remove from current position
|
|
261
|
-
if (node.prev) {
|
|
262
|
-
node.prev.next = node.next;
|
|
263
|
-
}
|
|
264
|
-
if (node.next) {
|
|
265
|
-
node.next.prev = node.prev;
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
this.tail = node.prev;
|
|
269
|
-
}
|
|
270
|
-
// Add to head
|
|
271
|
-
node.prev = null;
|
|
272
|
-
node.next = this.head;
|
|
273
|
-
if (this.head) {
|
|
274
|
-
this.head.prev = node;
|
|
275
|
-
}
|
|
276
|
-
this.head = node;
|
|
277
|
-
node.lastAccessed = Date.now();
|
|
278
|
-
}
|
|
279
|
-
removeNode(node) {
|
|
280
|
-
if (node.prev) {
|
|
281
|
-
node.prev.next = node.next;
|
|
282
|
-
}
|
|
283
|
-
else {
|
|
284
|
-
this.head = node.next;
|
|
285
|
-
}
|
|
286
|
-
if (node.next) {
|
|
287
|
-
node.next.prev = node.prev;
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
this.tail = node.prev;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
evictLRU() {
|
|
294
|
-
if (!this.tail)
|
|
295
|
-
return;
|
|
296
|
-
const evicted = this.tail;
|
|
297
|
-
this.removeNode(evicted);
|
|
298
|
-
this.map.delete(evicted.key);
|
|
299
|
-
if (this.onEvict) {
|
|
300
|
-
this.onEvict(evicted.key, evicted.value);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Returns keys in LRU order (most recent first).
|
|
305
|
-
*/
|
|
306
|
-
*keys() {
|
|
307
|
-
let node = this.head;
|
|
308
|
-
while (node) {
|
|
309
|
-
yield node.key;
|
|
310
|
-
node = node.next;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Returns entries in LRU order (most recent first).
|
|
315
|
-
*/
|
|
316
|
-
*entries() {
|
|
317
|
-
let node = this.head;
|
|
318
|
-
while (node) {
|
|
319
|
-
yield [node.key, node.value];
|
|
320
|
-
node = node.next;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Factory function to create an LRU cache.
|
|
326
|
-
*/
|
|
327
|
-
export function lruCache(capacity, onEvict) {
|
|
328
|
-
return new LRUCache(capacity, onEvict);
|
|
329
|
-
}
|
|
330
|
-
//# sourceMappingURL=lru.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lru.js","sourceRoot":"","sources":["../../../src/collections/behaviors/lru.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Readonly behavior - Creates immutable views of collections.
|
|
3
|
-
*
|
|
4
|
-
* Wraps collections to prevent modifications by throwing errors
|
|
5
|
-
* on any mutation attempt. Mirrors Java's Collections.unmodifiable*() methods.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* const list = compose(
|
|
9
|
-
* readonlyList()
|
|
10
|
-
* )(arrayList([1, 2, 3]))
|
|
11
|
-
*
|
|
12
|
-
* list.get(0) // OK: 1
|
|
13
|
-
* list.add(4) // Error: Cannot modify readonly list
|
|
14
|
-
*/
|
|
15
|
-
import type { Middleware } from "../core/middleware.js";
|
|
16
|
-
import type { ReadonlyList } from "../interfaces/list.js";
|
|
17
|
-
import type { ReadonlyQueue } from "../interfaces/queue.js";
|
|
18
|
-
import type { ReadonlyMapLike } from "../interfaces/map.js";
|
|
19
|
-
import type { ReadonlyCollection } from "../interfaces/collection.js";
|
|
20
|
-
/**
|
|
21
|
-
* Options for readonly behavior.
|
|
22
|
-
*/
|
|
23
|
-
export interface ReadonlyOptions {
|
|
24
|
-
/**
|
|
25
|
-
* Custom error message to throw on mutation attempts.
|
|
26
|
-
* @default 'Cannot modify readonly collection'
|
|
27
|
-
*/
|
|
28
|
-
errorMessage?: string;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Creates a readonly List middleware.
|
|
32
|
-
*
|
|
33
|
-
* All mutation methods will throw an error.
|
|
34
|
-
* Read operations work normally.
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* const readonlyNumbers = compose(
|
|
38
|
-
* readonlyList()
|
|
39
|
-
* )(arrayList([1, 2, 3]))
|
|
40
|
-
*/
|
|
41
|
-
export declare function readonlyList<T>(options?: ReadonlyOptions): Middleware<ReadonlyList<T>>;
|
|
42
|
-
/**
|
|
43
|
-
* Creates a readonly Queue middleware.
|
|
44
|
-
*/
|
|
45
|
-
export declare function readonlyQueue<T>(options?: ReadonlyOptions): Middleware<ReadonlyQueue<T>>;
|
|
46
|
-
/**
|
|
47
|
-
* Creates a readonly Map middleware.
|
|
48
|
-
*/
|
|
49
|
-
export declare function readonlyMap<K, V>(options?: ReadonlyOptions): Middleware<ReadonlyMapLike<K, V>>;
|
|
50
|
-
/**
|
|
51
|
-
* Creates a readonly Collection middleware.
|
|
52
|
-
*
|
|
53
|
-
* Generic version that works with any collection type.
|
|
54
|
-
*/
|
|
55
|
-
export declare function readonlyCollection<T>(options?: ReadonlyOptions): Middleware<ReadonlyCollection<T>>;
|
|
56
|
-
/**
|
|
57
|
-
* Generic readonly middleware.
|
|
58
|
-
* Alias for readonlyCollection.
|
|
59
|
-
*/
|
|
60
|
-
export declare function readonly<C extends object>(options?: ReadonlyOptions): Middleware<C>;
|
|
61
|
-
/**
|
|
62
|
-
* Alias for Java compatibility: unmodifiableList
|
|
63
|
-
*/
|
|
64
|
-
export declare const unmodifiableList: typeof readonlyList;
|
|
65
|
-
/**
|
|
66
|
-
* Alias for Java compatibility: unmodifiableMap
|
|
67
|
-
*/
|
|
68
|
-
export declare const unmodifiableMap: typeof readonlyMap;
|
|
69
|
-
/**
|
|
70
|
-
* Alias for Java compatibility: unmodifiableCollection
|
|
71
|
-
*/
|
|
72
|
-
export declare const unmodifiableCollection: typeof readonlyCollection;
|
|
73
|
-
//# sourceMappingURL=readonly.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"readonly.d.ts","sourceRoot":"","sources":["../../../src/collections/behaviors/readonly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmGD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,OAAO,GAAE,eAAoB,GAC5B,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAG7B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,OAAO,GAAE,eAAoB,GAC5B,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAG9B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAC9B,OAAO,GAAE,eAAoB,GAC5B,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAGnC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,OAAO,GAAE,eAAoB,GAC5B,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAGnC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EACvC,OAAO,GAAE,eAAoB,GAC5B,UAAU,CAAC,CAAC,CAAC,CAGf;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAG,OAAO,YAA2B,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,eAAe,EAAG,OAAO,WAAyB,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAG,OAAO,kBAAuC,CAAC"}
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Readonly behavior - Creates immutable views of collections.
|
|
3
|
-
*
|
|
4
|
-
* Wraps collections to prevent modifications by throwing errors
|
|
5
|
-
* on any mutation attempt. Mirrors Java's Collections.unmodifiable*() methods.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* const list = compose(
|
|
9
|
-
* readonlyList()
|
|
10
|
-
* )(arrayList([1, 2, 3]))
|
|
11
|
-
*
|
|
12
|
-
* list.get(0) // OK: 1
|
|
13
|
-
* list.add(4) // Error: Cannot modify readonly list
|
|
14
|
-
*/
|
|
15
|
-
/**
|
|
16
|
-
* Set of method names that mutate collections.
|
|
17
|
-
*/
|
|
18
|
-
const MUTATING_METHODS = new Set([
|
|
19
|
-
// Collection mutations
|
|
20
|
-
"add",
|
|
21
|
-
"addAll",
|
|
22
|
-
"remove",
|
|
23
|
-
"removeAll",
|
|
24
|
-
"retainAll",
|
|
25
|
-
"clear",
|
|
26
|
-
// List mutations
|
|
27
|
-
"set",
|
|
28
|
-
"insert",
|
|
29
|
-
"insertAll",
|
|
30
|
-
"removeAt",
|
|
31
|
-
"removeRange",
|
|
32
|
-
"push",
|
|
33
|
-
"pop",
|
|
34
|
-
"shift",
|
|
35
|
-
"unshift",
|
|
36
|
-
"sort",
|
|
37
|
-
"reverse",
|
|
38
|
-
// Queue/Deque mutations
|
|
39
|
-
"offer",
|
|
40
|
-
"offerFirst",
|
|
41
|
-
"offerLast",
|
|
42
|
-
"poll",
|
|
43
|
-
"pollFirst",
|
|
44
|
-
"pollLast",
|
|
45
|
-
"enqueue",
|
|
46
|
-
"dequeue",
|
|
47
|
-
"addFirst",
|
|
48
|
-
"addLast",
|
|
49
|
-
"removeFirst",
|
|
50
|
-
"removeLast",
|
|
51
|
-
// Map mutations
|
|
52
|
-
"set",
|
|
53
|
-
"delete",
|
|
54
|
-
"deleteEntry",
|
|
55
|
-
"replace",
|
|
56
|
-
"replaceEntry",
|
|
57
|
-
"computeIfAbsent",
|
|
58
|
-
"computeIfPresent",
|
|
59
|
-
"compute",
|
|
60
|
-
"merge",
|
|
61
|
-
"putAll",
|
|
62
|
-
]);
|
|
63
|
-
/**
|
|
64
|
-
* Creates a readonly middleware for any collection type.
|
|
65
|
-
*/
|
|
66
|
-
function createReadonly(errorMessage = "Cannot modify readonly collection") {
|
|
67
|
-
return (next) => {
|
|
68
|
-
return new Proxy(next, {
|
|
69
|
-
get(target, prop, receiver) {
|
|
70
|
-
const value = Reflect.get(target, prop, receiver);
|
|
71
|
-
// Block mutating methods
|
|
72
|
-
if (typeof prop === "string" && MUTATING_METHODS.has(prop)) {
|
|
73
|
-
if (typeof value === "function") {
|
|
74
|
-
return () => {
|
|
75
|
-
throw new Error(errorMessage);
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// For functions that return sublists/submaps, wrap them too
|
|
80
|
-
if (typeof value === "function" && (prop === "subList" || prop === "subMap")) {
|
|
81
|
-
return function (...args) {
|
|
82
|
-
const result = value.apply(target, args);
|
|
83
|
-
// Recursively apply readonly to the result
|
|
84
|
-
return createReadonly(errorMessage)(result);
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
return value;
|
|
88
|
-
},
|
|
89
|
-
set(_target, _prop, _value, _receiver) {
|
|
90
|
-
// Block property assignments
|
|
91
|
-
throw new Error(errorMessage);
|
|
92
|
-
},
|
|
93
|
-
deleteProperty(_target, _prop) {
|
|
94
|
-
// Block property deletions
|
|
95
|
-
throw new Error(errorMessage);
|
|
96
|
-
},
|
|
97
|
-
});
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Creates a readonly List middleware.
|
|
102
|
-
*
|
|
103
|
-
* All mutation methods will throw an error.
|
|
104
|
-
* Read operations work normally.
|
|
105
|
-
*
|
|
106
|
-
* @example
|
|
107
|
-
* const readonlyNumbers = compose(
|
|
108
|
-
* readonlyList()
|
|
109
|
-
* )(arrayList([1, 2, 3]))
|
|
110
|
-
*/
|
|
111
|
-
export function readonlyList(options = {}) {
|
|
112
|
-
const errorMessage = options.errorMessage ?? "Cannot modify readonly list";
|
|
113
|
-
return createReadonly(errorMessage);
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Creates a readonly Queue middleware.
|
|
117
|
-
*/
|
|
118
|
-
export function readonlyQueue(options = {}) {
|
|
119
|
-
const errorMessage = options.errorMessage ?? "Cannot modify readonly queue";
|
|
120
|
-
return createReadonly(errorMessage);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Creates a readonly Map middleware.
|
|
124
|
-
*/
|
|
125
|
-
export function readonlyMap(options = {}) {
|
|
126
|
-
const errorMessage = options.errorMessage ?? "Cannot modify readonly map";
|
|
127
|
-
return createReadonly(errorMessage);
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Creates a readonly Collection middleware.
|
|
131
|
-
*
|
|
132
|
-
* Generic version that works with any collection type.
|
|
133
|
-
*/
|
|
134
|
-
export function readonlyCollection(options = {}) {
|
|
135
|
-
const errorMessage = options.errorMessage ?? "Cannot modify readonly collection";
|
|
136
|
-
return createReadonly(errorMessage);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Generic readonly middleware.
|
|
140
|
-
* Alias for readonlyCollection.
|
|
141
|
-
*/
|
|
142
|
-
export function readonly(options = {}) {
|
|
143
|
-
const errorMessage = options.errorMessage ?? "Cannot modify readonly collection";
|
|
144
|
-
return createReadonly(errorMessage);
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Alias for Java compatibility: unmodifiableList
|
|
148
|
-
*/
|
|
149
|
-
export const unmodifiableList = readonlyList;
|
|
150
|
-
/**
|
|
151
|
-
* Alias for Java compatibility: unmodifiableMap
|
|
152
|
-
*/
|
|
153
|
-
export const unmodifiableMap = readonlyMap;
|
|
154
|
-
/**
|
|
155
|
-
* Alias for Java compatibility: unmodifiableCollection
|
|
156
|
-
*/
|
|
157
|
-
export const unmodifiableCollection = readonlyCollection;
|
|
158
|
-
//# sourceMappingURL=readonly.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"readonly.js","sourceRoot":"","sources":["../../../src/collections/behaviors/readonly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAmBH;;GAEG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,uBAAuB;IACvB,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,WAAW;IACX,OAAO;IAEP,iBAAiB;IACjB,KAAK;IACL,QAAQ;IACR,WAAW;IACX,UAAU;IACV,aAAa;IACb,MAAM;IACN,KAAK;IACL,OAAO;IACP,SAAS;IACT,MAAM;IACN,SAAS;IAET,wBAAwB;IACxB,OAAO;IACP,YAAY;IACZ,WAAW;IACX,MAAM;IACN,WAAW;IACX,UAAU;IACV,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,aAAa;IACb,YAAY;IAEZ,gBAAgB;IAChB,KAAK;IACL,QAAQ;IACR,aAAa;IACb,SAAS;IACT,cAAc;IACd,iBAAiB;IACjB,kBAAkB;IAClB,SAAS;IACT,OAAO;IACP,QAAQ;CACT,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,cAAc,CACrB,eAAuB,mCAAmC;IAE1D,OAAO,CAAC,IAAO,EAAK,EAAE;QACpB,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE;YACrB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;gBACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAElD,yBAAyB;gBACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3D,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;wBAChC,OAAO,GAAG,EAAE;4BACV,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;wBAChC,CAAC,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,4DAA4D;gBAC5D,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;oBAC7E,OAAO,UAAqB,GAAG,IAAW;wBACxC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;wBACzC,2CAA2C;wBAC3C,OAAO,cAAc,CAAgB,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC7D,CAAC,CAAC;gBACJ,CAAC;gBAED,OAAO,KAAK,CAAC;YACf,CAAC;YAED,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS;gBACnC,6BAA6B;gBAC7B,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;YAED,cAAc,CAAC,OAAO,EAAE,KAAK;gBAC3B,2BAA2B;gBAC3B,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,UAA2B,EAAE;IAE7B,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,6BAA6B,CAAC;IAC3E,OAAO,cAAc,CAAM,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,UAA2B,EAAE;IAE7B,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,8BAA8B,CAAC;IAC5E,OAAO,cAAc,CAAM,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,UAA2B,EAAE;IAE7B,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,4BAA4B,CAAC;IAC1E,OAAO,cAAc,CAAM,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAA2B,EAAE;IAE7B,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,mCAAmC,CAAC;IACjF,OAAO,cAAc,CAAM,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,UAA2B,EAAE;IAE7B,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,mCAAmC,CAAC;IACjF,OAAO,cAAc,CAAI,YAAY,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAyB,YAAY,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAwB,WAAW,CAAC;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA+B,kBAAkB,CAAC"}
|