memx 0.0.7 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/buffers.cjs +50 -0
- package/dist/buffers.cjs.map +6 -0
- package/dist/buffers.d.ts +14 -0
- package/dist/buffers.mjs +25 -0
- package/dist/buffers.mjs.map +6 -0
- package/dist/client.cjs +251 -0
- package/dist/client.cjs.map +6 -0
- package/dist/client.d.ts +76 -0
- package/dist/client.mjs +216 -0
- package/dist/client.mjs.map +6 -0
- package/dist/cluster.cjs +147 -0
- package/dist/cluster.cjs.map +6 -0
- package/dist/cluster.d.ts +60 -0
- package/dist/cluster.mjs +112 -0
- package/dist/cluster.mjs.map +6 -0
- package/dist/connection.cjs +186 -0
- package/dist/connection.cjs.map +6 -0
- package/dist/connection.d.ts +18 -0
- package/dist/connection.mjs +151 -0
- package/dist/connection.mjs.map +6 -0
- package/dist/constants.cjs +140 -0
- package/dist/constants.cjs.map +6 -0
- package/dist/constants.d.ts +87 -0
- package/dist/constants.mjs +107 -0
- package/dist/constants.mjs.map +6 -0
- package/dist/decode.cjs +101 -0
- package/dist/decode.cjs.map +6 -0
- package/dist/decode.d.ts +16 -0
- package/dist/decode.mjs +66 -0
- package/dist/decode.mjs.map +6 -0
- package/dist/encode.cjs +70 -0
- package/dist/encode.cjs.map +6 -0
- package/dist/encode.d.ts +20 -0
- package/dist/encode.mjs +45 -0
- package/dist/encode.mjs.map +6 -0
- package/dist/fake.cjs +183 -0
- package/dist/fake.cjs.map +6 -0
- package/dist/fake.d.ts +53 -0
- package/dist/fake.mjs +157 -0
- package/dist/fake.mjs.map +6 -0
- package/dist/index.cjs +57 -0
- package/dist/index.cjs.map +6 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.mjs +15 -1460
- package/dist/index.mjs.map +2 -2
- package/dist/internals.cjs +58 -0
- package/dist/internals.cjs.map +6 -0
- package/dist/internals.d.ts +7 -0
- package/dist/internals.mjs +21 -0
- package/dist/internals.mjs.map +6 -0
- package/dist/server.cjs +468 -0
- package/dist/server.cjs.map +6 -0
- package/dist/server.d.ts +59 -0
- package/dist/server.mjs +443 -0
- package/dist/server.mjs.map +6 -0
- package/dist/types.cjs +19 -0
- package/dist/types.cjs.map +6 -0
- package/dist/types.d.ts +239 -0
- package/dist/types.mjs +1 -0
- package/dist/types.mjs.map +6 -0
- package/dist/utils.cjs +182 -0
- package/dist/utils.cjs.map +6 -0
- package/dist/utils.d.ts +22 -0
- package/dist/utils.mjs +145 -0
- package/dist/utils.mjs.map +6 -0
- package/package.json +29 -27
- package/src/client.ts +25 -23
- package/src/cluster.ts +6 -3
- package/src/connection.ts +8 -4
- package/src/decode.ts +5 -2
- package/src/encode.ts +5 -2
- package/src/fake.ts +34 -33
- package/src/internals.ts +7 -7
- package/src/server.ts +47 -45
- package/src/utils.ts +7 -4
- package/dist/index.js +0 -1496
- package/dist/index.js.map +0 -6
- package/index.d.ts +0 -710
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export interface AdapterResult {
|
|
3
|
+
value: Buffer;
|
|
4
|
+
flags: number;
|
|
5
|
+
cas: bigint;
|
|
6
|
+
recycle: () => void;
|
|
7
|
+
}
|
|
8
|
+
export interface Counter {
|
|
9
|
+
value: bigint;
|
|
10
|
+
cas: bigint;
|
|
11
|
+
}
|
|
12
|
+
export interface Stats {
|
|
13
|
+
/** Process id of this server process (32u) */
|
|
14
|
+
pid: number;
|
|
15
|
+
/** Number of secs since the server started (32u) */
|
|
16
|
+
uptime: number;
|
|
17
|
+
/** current UNIX time according to the server (32u) */
|
|
18
|
+
time: number;
|
|
19
|
+
/** Version string of this server (string) */
|
|
20
|
+
version: string;
|
|
21
|
+
/** Default size of pointers on the host OS (generally 32 or 64) (32) */
|
|
22
|
+
pointer_size: number;
|
|
23
|
+
/** Accumulated user time for this process (microseconds) (32u.32u) */
|
|
24
|
+
rusage_user: bigint;
|
|
25
|
+
/** Accumulated system time for this process (microseconds) (32u.32u) */
|
|
26
|
+
rusage_system: bigint;
|
|
27
|
+
/** Current number of items stored (64u) */
|
|
28
|
+
curr_items: bigint;
|
|
29
|
+
/** Total number of items stored since the server started (64u) */
|
|
30
|
+
total_items: bigint;
|
|
31
|
+
/** Current number of bytes used to store items (64u) */
|
|
32
|
+
bytes: bigint;
|
|
33
|
+
/** Max number of simultaneous connections (32u) */
|
|
34
|
+
max_connections: number;
|
|
35
|
+
/** Number of open connections (32u) */
|
|
36
|
+
curr_connections: number;
|
|
37
|
+
/** Total number of connections opened since the server started running (32u) */
|
|
38
|
+
total_connections: number;
|
|
39
|
+
/** Conns rejected in maxconns_fast mode (64u) */
|
|
40
|
+
rejected_connections: bigint;
|
|
41
|
+
/** Number of connection structures allocated by the server (32u) */
|
|
42
|
+
connection_structures: number;
|
|
43
|
+
/** Connections closed by lack of memory (64u) */
|
|
44
|
+
response_obj_oom: bigint;
|
|
45
|
+
/** Total response objects in use (64u) */
|
|
46
|
+
response_obj_count: bigint;
|
|
47
|
+
/** Total bytes used for resp. objects. is a subset of bytes from read_buf_bytes (64u) */
|
|
48
|
+
response_obj_bytes: bigint;
|
|
49
|
+
/** Total read/resp buffers allocated (64u) */
|
|
50
|
+
read_buf_count: bigint;
|
|
51
|
+
/** Total read/resp buffer bytes allocated (64u) */
|
|
52
|
+
read_buf_bytes: bigint;
|
|
53
|
+
/** Total read/resp buffer bytes cached (64u) */
|
|
54
|
+
read_buf_bytes_free: bigint;
|
|
55
|
+
/** Connections closed by lack of memory (64u) */
|
|
56
|
+
read_buf_oom: bigint;
|
|
57
|
+
/** Number of misc fds used internally (32u) */
|
|
58
|
+
reserved_fds: number;
|
|
59
|
+
/** Cumulative number of retrieval reqs (64u) */
|
|
60
|
+
cmd_get: bigint;
|
|
61
|
+
/** Cumulative number of storage reqs (64u) */
|
|
62
|
+
cmd_set: bigint;
|
|
63
|
+
/** Cumulative number of flush reqs (64u) */
|
|
64
|
+
cmd_flush: bigint;
|
|
65
|
+
/** Cumulative number of touch reqs (64u) */
|
|
66
|
+
cmd_touch: bigint;
|
|
67
|
+
/** Number of keys that have been requested and found present (64u) */
|
|
68
|
+
get_hits: bigint;
|
|
69
|
+
/** Number of items that have been requested and not found (64u) */
|
|
70
|
+
get_misses: bigint;
|
|
71
|
+
/** Number of items that have been requested but had already expired (64u) */
|
|
72
|
+
get_expired: bigint;
|
|
73
|
+
/** Number of items that have been requested but have been flushed via flush_all (64u) */
|
|
74
|
+
get_flushed: bigint;
|
|
75
|
+
/** Number of deletions reqs for missing keys (64u) */
|
|
76
|
+
delete_misses: bigint;
|
|
77
|
+
/** Number of deletion reqs resulting in an item being removed (64u) */
|
|
78
|
+
delete_hits: bigint;
|
|
79
|
+
/** Number of incr reqs against missing keys (64u) */
|
|
80
|
+
incr_misses: bigint;
|
|
81
|
+
/** Number of successful incr reqs (64u) */
|
|
82
|
+
incr_hits: bigint;
|
|
83
|
+
/** Number of decr reqs against missing keys (64u) */
|
|
84
|
+
decr_misses: bigint;
|
|
85
|
+
/** Number of successful decr reqs (64u) */
|
|
86
|
+
decr_hits: bigint;
|
|
87
|
+
/** Number of CAS reqs against missing keys (64u) */
|
|
88
|
+
cas_misses: bigint;
|
|
89
|
+
/** Number of successful CAS reqs (64u) */
|
|
90
|
+
cas_hits: bigint;
|
|
91
|
+
/** Number of CAS reqs for which a key was found, but the CAS value did not match (64u) */
|
|
92
|
+
cas_badval: bigint;
|
|
93
|
+
/** Number of keys that have been touched with a new expiration time (64u) */
|
|
94
|
+
touch_hits: bigint;
|
|
95
|
+
/** Number of items that have been touched and not found (64u) */
|
|
96
|
+
touch_misses: bigint;
|
|
97
|
+
/** Number of rejected storage requests caused by attempting to write a value larger than the -I limit (64u) */
|
|
98
|
+
store_too_large: bigint;
|
|
99
|
+
/** Number of rejected storage requests caused by exhaustion of the -m memory limit (relevant when -M is used) (64u) */
|
|
100
|
+
store_no_memory: bigint;
|
|
101
|
+
/** Number of authentication commands handled, success or failure (64u) */
|
|
102
|
+
auth_cmds: bigint;
|
|
103
|
+
/** Number of failed authentications (64u) */
|
|
104
|
+
auth_errors: bigint;
|
|
105
|
+
/** Number of connections closed due to reaching their idle timeout (64u) */
|
|
106
|
+
idle_kicks: bigint;
|
|
107
|
+
/** Number of valid items removed from cache to free memory for new items (64u) */
|
|
108
|
+
evictions: bigint;
|
|
109
|
+
/** Number of times an entry was stored using memory from an expired entry (64u) */
|
|
110
|
+
reclaimed: bigint;
|
|
111
|
+
/** Total number of bytes read by this server from network (64u) */
|
|
112
|
+
bytes_read: bigint;
|
|
113
|
+
/** Total number of bytes sent by this server to network (64u) */
|
|
114
|
+
bytes_written: bigint;
|
|
115
|
+
/** Number of bytes this server is allowed to use for storage (size_t) */
|
|
116
|
+
limit_maxbytes: bigint;
|
|
117
|
+
/** Whether or not server is accepting conns (bool) */
|
|
118
|
+
accepting_conns: boolean;
|
|
119
|
+
/** Number of times server has stopped accepting new connections (maxconns) (64u) */
|
|
120
|
+
listen_disabled_num: bigint;
|
|
121
|
+
/** Number of microseconds in maxconns (64u) */
|
|
122
|
+
time_in_listen_disabled_us: bigint;
|
|
123
|
+
/** Number of worker threads requested (see doc/threads.txt) (32u) */
|
|
124
|
+
threads: number;
|
|
125
|
+
/** Number of times any connection yielded to another due to hitting the -R limit (64u) */
|
|
126
|
+
conn_yields: bigint;
|
|
127
|
+
/** Current size multiplier for hash table (32u) */
|
|
128
|
+
hash_power_level: number;
|
|
129
|
+
/** Bytes currently used by hash tables (64u) */
|
|
130
|
+
hash_bytes: bigint;
|
|
131
|
+
/** Indicates if the hash table is being grown to a new size (bool) */
|
|
132
|
+
hash_is_expanding: boolean;
|
|
133
|
+
/** Items pulled from LRU that were never touched by get/incr/append/etc before expiring (64u) */
|
|
134
|
+
expired_unfetched: bigint;
|
|
135
|
+
/** Items evicted from LRU that were never touched by get/incr/append/etc (64u) */
|
|
136
|
+
evicted_unfetched: bigint;
|
|
137
|
+
/** Items evicted from LRU that had been hit recently but did not jump to top of LRU (64u) */
|
|
138
|
+
evicted_active: bigint;
|
|
139
|
+
/** If a slab page is being moved (bool) */
|
|
140
|
+
slab_reassign_running: boolean;
|
|
141
|
+
/** Total slab pages moved (64u) */
|
|
142
|
+
slabs_moved: bigint;
|
|
143
|
+
/** Total items freed by LRU Crawler (64u) */
|
|
144
|
+
crawler_reclaimed: bigint;
|
|
145
|
+
/** Total items examined by LRU Crawler (64u) */
|
|
146
|
+
crawler_items_checked: bigint;
|
|
147
|
+
/** Times LRU tail was found with active ref. Items can be evicted to avoid OOM errors (64u) */
|
|
148
|
+
lrutail_reflocked: bigint;
|
|
149
|
+
/** Items moved from HOT/WARM to COLD LRU's (64u) */
|
|
150
|
+
moves_to_cold: bigint;
|
|
151
|
+
/** Items moved from COLD to WARM LRU (64u) */
|
|
152
|
+
moves_to_warm: bigint;
|
|
153
|
+
/** Items reshuffled within HOT or WARM LRU's (64u) */
|
|
154
|
+
moves_within_lru: bigint;
|
|
155
|
+
/** Times worker threads had to directly reclaim or evict items (64u) */
|
|
156
|
+
direct_reclaims: bigint;
|
|
157
|
+
/** Number of LRU crawlers running (64u) */
|
|
158
|
+
lru_crawler_running: bigint;
|
|
159
|
+
/** Times an LRU crawler was started (64u) */
|
|
160
|
+
lru_crawler_starts: bigint;
|
|
161
|
+
/** Number of times the LRU bg thread woke up (64u) */
|
|
162
|
+
lru_maintainer_juggles: bigint;
|
|
163
|
+
/** Slab pages returned to global pool for reassignment to other slab classes (32u) */
|
|
164
|
+
slab_global_page_pool: number;
|
|
165
|
+
/** Items rescued from eviction in page move (64u) */
|
|
166
|
+
slab_reassign_rescues: bigint;
|
|
167
|
+
/** Valid items evicted during a page move (due to no free memory in slab) (64u) */
|
|
168
|
+
slab_reassign_evictions_nomem: bigint;
|
|
169
|
+
/** Individual sections of an item rescued during a page move (64u) */
|
|
170
|
+
slab_reassign_chunk_rescues: bigint;
|
|
171
|
+
/** Internal stat counter for when the page mover clears memory from the chunk freelist when it wasn't expecting to (64u) */
|
|
172
|
+
slab_reassign_inline_reclaim: bigint;
|
|
173
|
+
/** Items busy during page move, requiring a retry before page can be moved (64u) */
|
|
174
|
+
slab_reassign_busy_items: bigint;
|
|
175
|
+
/** Items busy during page move, requiring deletion before page can be moved (64u) */
|
|
176
|
+
slab_reassign_busy_deletes: bigint;
|
|
177
|
+
/** Logs a worker never wrote due to full buf (64u) */
|
|
178
|
+
log_worker_dropped: bigint;
|
|
179
|
+
/** Logs written by a worker, to be picked up (64u) */
|
|
180
|
+
log_worker_written: bigint;
|
|
181
|
+
/** Logs not sent to slow watchers (64u) */
|
|
182
|
+
log_watcher_skipped: bigint;
|
|
183
|
+
/** Logs written to watchers (64u) */
|
|
184
|
+
log_watcher_sent: bigint;
|
|
185
|
+
/** Number of currently active watchers (64u) */
|
|
186
|
+
log_watchers: bigint;
|
|
187
|
+
/** Number of times an unexpected napi id is is received. See doc/napi_ids.txt (64u) */
|
|
188
|
+
unexpected_napi_ids: bigint;
|
|
189
|
+
/** Number of times napi id of 0 is received resulting in fallback to round robin thread selection. See doc/napi_ids.txt (64u) */
|
|
190
|
+
round_robin_fallback: bigint;
|
|
191
|
+
/** Nuumber of times `malloc` failed (64u) */
|
|
192
|
+
malloc_fails: bigint;
|
|
193
|
+
}
|
|
194
|
+
export interface Adapter {
|
|
195
|
+
readonly ttl: number;
|
|
196
|
+
get(key: string): Promise<AdapterResult | undefined>;
|
|
197
|
+
gat(key: string, ttl: number): Promise<AdapterResult | undefined>;
|
|
198
|
+
touch(key: string, ttl?: number): Promise<boolean>;
|
|
199
|
+
set(key: string, value: Buffer, options?: {
|
|
200
|
+
flags?: number;
|
|
201
|
+
cas?: bigint;
|
|
202
|
+
ttl?: number;
|
|
203
|
+
}): Promise<bigint | undefined>;
|
|
204
|
+
add(key: string, value: Buffer, options?: {
|
|
205
|
+
flags?: number;
|
|
206
|
+
ttl?: number;
|
|
207
|
+
}): Promise<bigint | undefined>;
|
|
208
|
+
replace(key: string, value: Buffer, options?: {
|
|
209
|
+
flags?: number;
|
|
210
|
+
cas?: bigint;
|
|
211
|
+
ttl?: number;
|
|
212
|
+
}): Promise<bigint | undefined>;
|
|
213
|
+
append(key: string, value: Buffer, options?: {
|
|
214
|
+
cas?: bigint;
|
|
215
|
+
}): Promise<boolean>;
|
|
216
|
+
prepend(key: string, value: Buffer, options?: {
|
|
217
|
+
cas?: bigint;
|
|
218
|
+
}): Promise<boolean>;
|
|
219
|
+
increment(key: string, delta?: bigint | number, options?: {
|
|
220
|
+
initial?: bigint | number;
|
|
221
|
+
cas?: bigint;
|
|
222
|
+
ttl?: number;
|
|
223
|
+
create?: boolean;
|
|
224
|
+
}): Promise<Counter | undefined>;
|
|
225
|
+
decrement(key: string, delta?: bigint | number, options?: {
|
|
226
|
+
initial?: bigint | number;
|
|
227
|
+
cas?: bigint;
|
|
228
|
+
ttl?: number;
|
|
229
|
+
create?: boolean;
|
|
230
|
+
}): Promise<Counter | undefined>;
|
|
231
|
+
delete(key: string, options?: {
|
|
232
|
+
cas?: bigint;
|
|
233
|
+
}): Promise<boolean>;
|
|
234
|
+
flush(ttl?: number): Promise<void>;
|
|
235
|
+
noop(): Promise<void>;
|
|
236
|
+
quit(): Promise<void>;
|
|
237
|
+
version(): Promise<Record<string, string>>;
|
|
238
|
+
stats(): Promise<Record<string, Stats>>;
|
|
239
|
+
}
|
package/dist/types.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.mjs.map
|
package/dist/utils.cjs
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// utils.ts
|
|
31
|
+
var utils_exports = {};
|
|
32
|
+
__export(utils_exports, {
|
|
33
|
+
Bundle: () => Bundle,
|
|
34
|
+
Factory: () => Factory,
|
|
35
|
+
PoorManLock: () => PoorManLock
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(utils_exports);
|
|
38
|
+
var import_node_assert = __toESM(require("node:assert"));
|
|
39
|
+
var import_internals = require("./internals.cjs");
|
|
40
|
+
var Factory = class {
|
|
41
|
+
#factory;
|
|
42
|
+
#client;
|
|
43
|
+
#ttl;
|
|
44
|
+
constructor(client, factory, ttl) {
|
|
45
|
+
(0, import_node_assert.default)(typeof factory === "function", "Invalid or no factory specified");
|
|
46
|
+
(0, import_node_assert.default)(client, "No client specified");
|
|
47
|
+
this.#factory = factory;
|
|
48
|
+
this.#client = client;
|
|
49
|
+
this.#ttl = ttl;
|
|
50
|
+
}
|
|
51
|
+
async get(key) {
|
|
52
|
+
const cached = await this.#client.getc(key);
|
|
53
|
+
if (cached) {
|
|
54
|
+
void (0, import_internals.logPromiseError)(
|
|
55
|
+
this.#client.touch(key),
|
|
56
|
+
`Factory error touching key "${this.#client.prefix}${key}"`
|
|
57
|
+
);
|
|
58
|
+
return cached.value;
|
|
59
|
+
}
|
|
60
|
+
const created = await this.#factory(key);
|
|
61
|
+
if (created) {
|
|
62
|
+
void (0, import_internals.logPromiseError)(
|
|
63
|
+
this.#client.set(key, created, { ttl: this.#ttl }),
|
|
64
|
+
`Factory error setting key "${this.#client.prefix}${key}"`
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
return created;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
var Bundle = class {
|
|
71
|
+
#client;
|
|
72
|
+
#name;
|
|
73
|
+
#ttl;
|
|
74
|
+
constructor(client, name, ttl) {
|
|
75
|
+
(0, import_node_assert.default)(client, "No client specified");
|
|
76
|
+
(0, import_node_assert.default)(name, "No bundle name specified");
|
|
77
|
+
this.#client = client;
|
|
78
|
+
this.#name = name;
|
|
79
|
+
this.#ttl = ttl || 0;
|
|
80
|
+
}
|
|
81
|
+
async #appendKey(key) {
|
|
82
|
+
await (0, import_internals.logPromiseError)((async () => {
|
|
83
|
+
const added = await this.#client.add(this.#name, key, { ttl: this.#ttl });
|
|
84
|
+
if (!added) {
|
|
85
|
+
await this.#client.append(this.#name, `\0${key}`);
|
|
86
|
+
await this.#client.touch(this.#name, this.#ttl);
|
|
87
|
+
}
|
|
88
|
+
})(), `Bundle "${this.#client.prefix}${this.#name}" error recording key "${key}"`);
|
|
89
|
+
}
|
|
90
|
+
async #removeKey(key) {
|
|
91
|
+
await (0, import_internals.logPromiseError)((async () => {
|
|
92
|
+
const result = await this.#client.getc(this.#name);
|
|
93
|
+
if (!result)
|
|
94
|
+
return;
|
|
95
|
+
const keys = result.value.split("\0").filter((k) => k !== key).join("\0");
|
|
96
|
+
await this.#client.set(this.#name, keys, { cas: result.cas, ttl: this.#ttl });
|
|
97
|
+
})(), `Bundle "${this.#client.prefix}${this.#name}" error clearing key "${key}"`);
|
|
98
|
+
}
|
|
99
|
+
async add(key, value) {
|
|
100
|
+
await this.#client.set(`${this.#name}:${key}`, value, { ttl: this.#ttl });
|
|
101
|
+
await this.#appendKey(key);
|
|
102
|
+
}
|
|
103
|
+
async get(key) {
|
|
104
|
+
const result = await this.#client.getc(`${this.#name}:${key}`);
|
|
105
|
+
if (result)
|
|
106
|
+
return result.value;
|
|
107
|
+
await this.#removeKey(key);
|
|
108
|
+
return void 0;
|
|
109
|
+
}
|
|
110
|
+
async delete(key) {
|
|
111
|
+
await this.#client.delete(`${this.#name}:${key}`);
|
|
112
|
+
await this.#removeKey(key);
|
|
113
|
+
}
|
|
114
|
+
async list() {
|
|
115
|
+
const result = await this.#client.getc(this.#name);
|
|
116
|
+
if (!result)
|
|
117
|
+
return {};
|
|
118
|
+
const results = {};
|
|
119
|
+
const promises = [];
|
|
120
|
+
for (const key of new Set(result.value.split("\0"))) {
|
|
121
|
+
promises.push(this.#client.getc(`${this.#name}:${key}`).then((result2) => {
|
|
122
|
+
if (result2)
|
|
123
|
+
results[key] = result2.value;
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
await Promise.all(promises);
|
|
127
|
+
await (0, import_internals.logPromiseError)(
|
|
128
|
+
this.#client.set(this.#name, Object.keys(results).join("\0"), { cas: result.cas, ttl: this.#ttl }),
|
|
129
|
+
`Bundle "${this.#client.prefix}${this.#name}" error compacting keys`
|
|
130
|
+
);
|
|
131
|
+
return results;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
var PoorManLock = class {
|
|
135
|
+
#client;
|
|
136
|
+
#name;
|
|
137
|
+
constructor(client, name) {
|
|
138
|
+
(0, import_node_assert.default)(client, "No client specified");
|
|
139
|
+
(0, import_node_assert.default)(name, "No lock name specified");
|
|
140
|
+
this.#client = client;
|
|
141
|
+
this.#name = name;
|
|
142
|
+
}
|
|
143
|
+
async execute(executor, options) {
|
|
144
|
+
const { timeout = 5e3, owner = false } = options || {};
|
|
145
|
+
const end = Date.now() + timeout;
|
|
146
|
+
let cas;
|
|
147
|
+
do {
|
|
148
|
+
cas = await this.#client.add(this.#name, owner, { ttl: 2 });
|
|
149
|
+
if (cas !== void 0)
|
|
150
|
+
break;
|
|
151
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
152
|
+
} while (Date.now() < end);
|
|
153
|
+
if (cas === void 0) {
|
|
154
|
+
const other = await this.#client.getc(this.#name);
|
|
155
|
+
const owner2 = other && other.value ? `"${other.value}"` : "anonymous";
|
|
156
|
+
throw new Error(`Lock "${this.#client.prefix}${this.#name}" timeout (owner=${owner2})`);
|
|
157
|
+
}
|
|
158
|
+
const interval = setInterval(() => {
|
|
159
|
+
void (0, import_internals.logPromiseError)((async () => {
|
|
160
|
+
const replaced = await this.#client.replace(this.#name, owner, { ttl: 2, cas });
|
|
161
|
+
(0, import_node_assert.default)(replaced !== void 0, `Lock "${this.#client.prefix}${this.#name}" not replaced`);
|
|
162
|
+
cas = replaced;
|
|
163
|
+
})(), `Error extending lock "${this.#client.prefix}${this.#name}"`);
|
|
164
|
+
}, 100);
|
|
165
|
+
try {
|
|
166
|
+
return await executor();
|
|
167
|
+
} finally {
|
|
168
|
+
clearInterval(interval);
|
|
169
|
+
await (0, import_internals.logPromiseError)(
|
|
170
|
+
this.#client.delete(this.#name, { cas }),
|
|
171
|
+
`Error deleting lock "${this.#client.prefix}${this.#name}"`
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
177
|
+
0 && (module.exports = {
|
|
178
|
+
Bundle,
|
|
179
|
+
Factory,
|
|
180
|
+
PoorManLock
|
|
181
|
+
});
|
|
182
|
+
//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["assert", "result", "owner"]
|
|
6
|
+
}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { MemxClient, Serializable } from './client';
|
|
2
|
+
export declare class Factory<T extends Serializable> {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(client: MemxClient, factory: (key: string) => T | Promise<T>, ttl?: number);
|
|
5
|
+
get(key: string): Promise<T>;
|
|
6
|
+
}
|
|
7
|
+
export declare class Bundle<T extends Serializable = Serializable> {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(client: MemxClient, name: string, ttl?: number);
|
|
10
|
+
add(key: string, value: T): Promise<void>;
|
|
11
|
+
get(key: string): Promise<T | undefined>;
|
|
12
|
+
delete(key: string): Promise<void>;
|
|
13
|
+
list(): Promise<Record<string, T>>;
|
|
14
|
+
}
|
|
15
|
+
export declare class PoorManLock {
|
|
16
|
+
#private;
|
|
17
|
+
constructor(client: MemxClient, name: string);
|
|
18
|
+
execute<T>(executor: () => T | Promise<T>, options?: {
|
|
19
|
+
timeout?: number;
|
|
20
|
+
owner?: string;
|
|
21
|
+
}): Promise<T>;
|
|
22
|
+
}
|
package/dist/utils.mjs
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// utils.ts
|
|
2
|
+
import assert from "node:assert";
|
|
3
|
+
import { logPromiseError } from "./internals.mjs";
|
|
4
|
+
var Factory = class {
|
|
5
|
+
#factory;
|
|
6
|
+
#client;
|
|
7
|
+
#ttl;
|
|
8
|
+
constructor(client, factory, ttl) {
|
|
9
|
+
assert(typeof factory === "function", "Invalid or no factory specified");
|
|
10
|
+
assert(client, "No client specified");
|
|
11
|
+
this.#factory = factory;
|
|
12
|
+
this.#client = client;
|
|
13
|
+
this.#ttl = ttl;
|
|
14
|
+
}
|
|
15
|
+
async get(key) {
|
|
16
|
+
const cached = await this.#client.getc(key);
|
|
17
|
+
if (cached) {
|
|
18
|
+
void logPromiseError(
|
|
19
|
+
this.#client.touch(key),
|
|
20
|
+
`Factory error touching key "${this.#client.prefix}${key}"`
|
|
21
|
+
);
|
|
22
|
+
return cached.value;
|
|
23
|
+
}
|
|
24
|
+
const created = await this.#factory(key);
|
|
25
|
+
if (created) {
|
|
26
|
+
void logPromiseError(
|
|
27
|
+
this.#client.set(key, created, { ttl: this.#ttl }),
|
|
28
|
+
`Factory error setting key "${this.#client.prefix}${key}"`
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
return created;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
var Bundle = class {
|
|
35
|
+
#client;
|
|
36
|
+
#name;
|
|
37
|
+
#ttl;
|
|
38
|
+
constructor(client, name, ttl) {
|
|
39
|
+
assert(client, "No client specified");
|
|
40
|
+
assert(name, "No bundle name specified");
|
|
41
|
+
this.#client = client;
|
|
42
|
+
this.#name = name;
|
|
43
|
+
this.#ttl = ttl || 0;
|
|
44
|
+
}
|
|
45
|
+
async #appendKey(key) {
|
|
46
|
+
await logPromiseError((async () => {
|
|
47
|
+
const added = await this.#client.add(this.#name, key, { ttl: this.#ttl });
|
|
48
|
+
if (!added) {
|
|
49
|
+
await this.#client.append(this.#name, `\0${key}`);
|
|
50
|
+
await this.#client.touch(this.#name, this.#ttl);
|
|
51
|
+
}
|
|
52
|
+
})(), `Bundle "${this.#client.prefix}${this.#name}" error recording key "${key}"`);
|
|
53
|
+
}
|
|
54
|
+
async #removeKey(key) {
|
|
55
|
+
await logPromiseError((async () => {
|
|
56
|
+
const result = await this.#client.getc(this.#name);
|
|
57
|
+
if (!result)
|
|
58
|
+
return;
|
|
59
|
+
const keys = result.value.split("\0").filter((k) => k !== key).join("\0");
|
|
60
|
+
await this.#client.set(this.#name, keys, { cas: result.cas, ttl: this.#ttl });
|
|
61
|
+
})(), `Bundle "${this.#client.prefix}${this.#name}" error clearing key "${key}"`);
|
|
62
|
+
}
|
|
63
|
+
async add(key, value) {
|
|
64
|
+
await this.#client.set(`${this.#name}:${key}`, value, { ttl: this.#ttl });
|
|
65
|
+
await this.#appendKey(key);
|
|
66
|
+
}
|
|
67
|
+
async get(key) {
|
|
68
|
+
const result = await this.#client.getc(`${this.#name}:${key}`);
|
|
69
|
+
if (result)
|
|
70
|
+
return result.value;
|
|
71
|
+
await this.#removeKey(key);
|
|
72
|
+
return void 0;
|
|
73
|
+
}
|
|
74
|
+
async delete(key) {
|
|
75
|
+
await this.#client.delete(`${this.#name}:${key}`);
|
|
76
|
+
await this.#removeKey(key);
|
|
77
|
+
}
|
|
78
|
+
async list() {
|
|
79
|
+
const result = await this.#client.getc(this.#name);
|
|
80
|
+
if (!result)
|
|
81
|
+
return {};
|
|
82
|
+
const results = {};
|
|
83
|
+
const promises = [];
|
|
84
|
+
for (const key of new Set(result.value.split("\0"))) {
|
|
85
|
+
promises.push(this.#client.getc(`${this.#name}:${key}`).then((result2) => {
|
|
86
|
+
if (result2)
|
|
87
|
+
results[key] = result2.value;
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
await Promise.all(promises);
|
|
91
|
+
await logPromiseError(
|
|
92
|
+
this.#client.set(this.#name, Object.keys(results).join("\0"), { cas: result.cas, ttl: this.#ttl }),
|
|
93
|
+
`Bundle "${this.#client.prefix}${this.#name}" error compacting keys`
|
|
94
|
+
);
|
|
95
|
+
return results;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
var PoorManLock = class {
|
|
99
|
+
#client;
|
|
100
|
+
#name;
|
|
101
|
+
constructor(client, name) {
|
|
102
|
+
assert(client, "No client specified");
|
|
103
|
+
assert(name, "No lock name specified");
|
|
104
|
+
this.#client = client;
|
|
105
|
+
this.#name = name;
|
|
106
|
+
}
|
|
107
|
+
async execute(executor, options) {
|
|
108
|
+
const { timeout = 5e3, owner = false } = options || {};
|
|
109
|
+
const end = Date.now() + timeout;
|
|
110
|
+
let cas;
|
|
111
|
+
do {
|
|
112
|
+
cas = await this.#client.add(this.#name, owner, { ttl: 2 });
|
|
113
|
+
if (cas !== void 0)
|
|
114
|
+
break;
|
|
115
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
116
|
+
} while (Date.now() < end);
|
|
117
|
+
if (cas === void 0) {
|
|
118
|
+
const other = await this.#client.getc(this.#name);
|
|
119
|
+
const owner2 = other && other.value ? `"${other.value}"` : "anonymous";
|
|
120
|
+
throw new Error(`Lock "${this.#client.prefix}${this.#name}" timeout (owner=${owner2})`);
|
|
121
|
+
}
|
|
122
|
+
const interval = setInterval(() => {
|
|
123
|
+
void logPromiseError((async () => {
|
|
124
|
+
const replaced = await this.#client.replace(this.#name, owner, { ttl: 2, cas });
|
|
125
|
+
assert(replaced !== void 0, `Lock "${this.#client.prefix}${this.#name}" not replaced`);
|
|
126
|
+
cas = replaced;
|
|
127
|
+
})(), `Error extending lock "${this.#client.prefix}${this.#name}"`);
|
|
128
|
+
}, 100);
|
|
129
|
+
try {
|
|
130
|
+
return await executor();
|
|
131
|
+
} finally {
|
|
132
|
+
clearInterval(interval);
|
|
133
|
+
await logPromiseError(
|
|
134
|
+
this.#client.delete(this.#name, { cas }),
|
|
135
|
+
`Error deleting lock "${this.#client.prefix}${this.#name}"`
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
export {
|
|
141
|
+
Bundle,
|
|
142
|
+
Factory,
|
|
143
|
+
PoorManLock
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["result", "owner"]
|
|
6
|
+
}
|