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/decode.mjs
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// decode.ts
|
|
2
|
+
import assert from "node:assert";
|
|
3
|
+
import { DATA_TYPE, EMPTY_BUFFER, MAGIC, OFFSETS } from "./constants.mjs";
|
|
4
|
+
import { allocateBuffer } from "./buffers.mjs";
|
|
5
|
+
var Decoder = class {
|
|
6
|
+
#consumer;
|
|
7
|
+
#header = Buffer.allocUnsafeSlow(24);
|
|
8
|
+
#body;
|
|
9
|
+
#pos = 0;
|
|
10
|
+
constructor(consumer) {
|
|
11
|
+
this.#consumer = consumer;
|
|
12
|
+
}
|
|
13
|
+
append(buffer, start, end) {
|
|
14
|
+
const header = this.#header;
|
|
15
|
+
while (start < end) {
|
|
16
|
+
if (this.#pos < 24) {
|
|
17
|
+
const copied = buffer.copy(header, this.#pos, start, end);
|
|
18
|
+
this.#pos += copied;
|
|
19
|
+
start += copied;
|
|
20
|
+
}
|
|
21
|
+
if (this.#pos < 24)
|
|
22
|
+
return;
|
|
23
|
+
let extras = EMPTY_BUFFER;
|
|
24
|
+
let key = EMPTY_BUFFER;
|
|
25
|
+
let value = EMPTY_BUFFER;
|
|
26
|
+
let recycle = () => void 0;
|
|
27
|
+
const bodyLength = header.readUInt32BE(OFFSETS.BODY_LENGTH_$32);
|
|
28
|
+
if (bodyLength) {
|
|
29
|
+
const body = this.#body || (this.#body = allocateBuffer(bodyLength));
|
|
30
|
+
const copied = buffer.copy(body, this.#pos - 24, start, end);
|
|
31
|
+
this.#pos += copied;
|
|
32
|
+
start += copied;
|
|
33
|
+
if (this.#pos - 24 < body.length)
|
|
34
|
+
return;
|
|
35
|
+
const keyLength = header.readUInt16BE(OFFSETS.KEY_LENGTH_$16);
|
|
36
|
+
const extrasLength = header.readUInt8(OFFSETS.EXTRAS_LENGTH_$8);
|
|
37
|
+
const valueLength = bodyLength - keyLength - extrasLength;
|
|
38
|
+
key = keyLength ? body.subarray(extrasLength, extrasLength + keyLength) : EMPTY_BUFFER;
|
|
39
|
+
value = valueLength ? body.subarray(extrasLength + keyLength) : EMPTY_BUFFER;
|
|
40
|
+
extras = extrasLength ? body.subarray(0, extrasLength) : EMPTY_BUFFER;
|
|
41
|
+
recycle = () => void body.recycle();
|
|
42
|
+
}
|
|
43
|
+
const packet = {
|
|
44
|
+
opcode: header.readUInt8(OFFSETS.OPCODE_$8),
|
|
45
|
+
status: header.readUInt16BE(OFFSETS.STATUS_$16),
|
|
46
|
+
sequence: header.readUInt32BE(OFFSETS.SEQUENCE_$32),
|
|
47
|
+
cas: header.readBigUInt64BE(OFFSETS.CAS_$64),
|
|
48
|
+
extras,
|
|
49
|
+
key,
|
|
50
|
+
value,
|
|
51
|
+
recycle
|
|
52
|
+
};
|
|
53
|
+
const magic = header.readUInt8(OFFSETS.MAGIC_$8);
|
|
54
|
+
const dataType = header.readUInt8(OFFSETS.DATA_TYPE_$8);
|
|
55
|
+
assert.equal(magic, MAGIC.RESPONSE, "Invalid magic in header");
|
|
56
|
+
assert.equal(dataType, DATA_TYPE.RAW, "Invalid data type in header");
|
|
57
|
+
this.#pos = 0;
|
|
58
|
+
this.#body = void 0;
|
|
59
|
+
this.#consumer(packet);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
export {
|
|
64
|
+
Decoder
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=decode.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/decode.ts"],
|
|
4
|
+
"mappings": ";AAAA,OAAO,YAAY;AAEnB,SAAS,WAAW,cAAc,OAAO,eAAe;AACxD,SAAS,sBAAsB;AA0BxB,IAAM,UAAN,MAAc;AAAA,EACnB;AAAA,EACA,UAAU,OAAO,gBAAgB,EAAE;AAAA,EACnC;AAAA,EACA,OAAO;AAAA,EAEP,YAAY,UAA+C;AACzD,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,OAAO,QAAgB,OAAe,KAAmB;AACvD,UAAM,SAAS,KAAK;AAEpB,WAAO,QAAQ,KAAK;AAClB,UAAI,KAAK,OAAO,IAAI;AAClB,cAAM,SAAS,OAAO,KAAK,QAAQ,KAAK,MAAM,OAAO,GAAG;AACxD,aAAK,QAAQ;AACb,iBAAS;AAAA,MACX;AAEA,UAAI,KAAK,OAAO;AAAI;AAEpB,UAAI,SAAS;AACb,UAAI,MAAM;AACV,UAAI,QAAQ;AACZ,UAAI,UAAU,MAAM;AAEpB,YAAM,aAAa,OAAO,aAAa,QAAQ,eAAe;AAC9D,UAAI,YAAY;AACd,cAAM,OAAO,KAAK,UAAU,KAAK,QAAQ,eAAe,UAAU;AAElE,cAAM,SAAS,OAAO,KAAK,MAAM,KAAK,OAAO,IAAI,OAAO,GAAG;AAC3D,aAAK,QAAQ;AACb,iBAAS;AAET,YAAI,KAAK,OAAO,KAAK,KAAK;AAAQ;AAElC,cAAM,YAAY,OAAO,aAAa,QAAQ,cAAc;AAC5D,cAAM,eAAe,OAAO,UAAU,QAAQ,gBAAgB;AAC9D,cAAM,cAAc,aAAa,YAAY;AAE7C,cAAM,YAAY,KAAK,SAAS,cAAc,eAAe,SAAS,IAAI;AAC1E,gBAAQ,cAAc,KAAK,SAAS,eAAe,SAAS,IAAI;AAChE,iBAAS,eAAe,KAAK,SAAS,GAAG,YAAY,IAAI;AACzD,kBAAU,MAAM,KAAK,KAAK,QAAQ;AAAA,MACpC;AAEA,YAAM,SAA4B;AAAA,QAChC,QAAQ,OAAO,UAAU,QAAQ,SAAS;AAAA,QAC1C,QAAQ,OAAO,aAAa,QAAQ,UAAU;AAAA,QAC9C,UAAU,OAAO,aAAa,QAAQ,YAAY;AAAA,QAClD,KAAK,OAAO,gBAAgB,QAAQ,OAAO;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,QAAQ,OAAO,UAAU,QAAQ,QAAQ;AAC/C,YAAM,WAAW,OAAO,UAAU,QAAQ,YAAY;AACtD,aAAO,MAAM,OAAO,MAAM,UAAU,yBAAyB;AAC7D,aAAO,MAAM,UAAU,UAAU,KAAK,6BAA6B;AAEnE,WAAK,OAAO;AACZ,WAAK,QAAQ;AACb,WAAK,UAAU,MAAM;AAAA,IACvB;AAAA,EACF;AACF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/dist/encode.cjs
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// encode.ts
|
|
21
|
+
var encode_exports = {};
|
|
22
|
+
__export(encode_exports, {
|
|
23
|
+
Encoder: () => Encoder
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(encode_exports);
|
|
26
|
+
var import_buffers = require("./buffers.cjs");
|
|
27
|
+
var import_constants = require("./constants.cjs");
|
|
28
|
+
var Encoder = class {
|
|
29
|
+
encode(packet, seq = 0) {
|
|
30
|
+
const {
|
|
31
|
+
opcode,
|
|
32
|
+
sequence = seq,
|
|
33
|
+
cas = 0n,
|
|
34
|
+
extras = import_constants.EMPTY_BUFFER,
|
|
35
|
+
extrasOffset = 0,
|
|
36
|
+
extrasLength = extras.length,
|
|
37
|
+
key = import_constants.EMPTY_BUFFER,
|
|
38
|
+
keyOffset = 0,
|
|
39
|
+
keyLength = key.length,
|
|
40
|
+
value = import_constants.EMPTY_BUFFER,
|
|
41
|
+
valueOffset = 0,
|
|
42
|
+
valueLength = value.length
|
|
43
|
+
} = packet;
|
|
44
|
+
const bodyLength = extrasLength + keyLength + valueLength;
|
|
45
|
+
const length = bodyLength + 24 /* HEADER_SIZE */;
|
|
46
|
+
const buffer = (0, import_buffers.allocateBuffer)(length);
|
|
47
|
+
buffer.writeUInt8(import_constants.MAGIC.REQUEST, import_constants.OFFSETS.MAGIC_$8);
|
|
48
|
+
buffer.writeUInt8(opcode, import_constants.OFFSETS.OPCODE_$8);
|
|
49
|
+
buffer.writeUInt16BE(keyLength, import_constants.OFFSETS.KEY_LENGTH_$16);
|
|
50
|
+
buffer.writeUInt8(extrasLength, import_constants.OFFSETS.EXTRAS_LENGTH_$8);
|
|
51
|
+
buffer.writeUInt8(import_constants.DATA_TYPE.RAW, import_constants.OFFSETS.DATA_TYPE_$8);
|
|
52
|
+
buffer.writeUInt16BE(import_constants.VBUCKET.NIL, import_constants.OFFSETS.STATUS_$16);
|
|
53
|
+
buffer.writeUInt32BE(bodyLength, import_constants.OFFSETS.BODY_LENGTH_$32);
|
|
54
|
+
buffer.writeUInt32BE(sequence, import_constants.OFFSETS.SEQUENCE_$32);
|
|
55
|
+
buffer.writeBigUInt64BE(cas, import_constants.OFFSETS.CAS_$64);
|
|
56
|
+
let pos = 24;
|
|
57
|
+
if (extrasLength)
|
|
58
|
+
pos += extras.copy(buffer, pos, extrasOffset, extrasOffset + extrasLength);
|
|
59
|
+
if (keyLength)
|
|
60
|
+
pos += key.copy(buffer, pos, keyOffset, keyOffset + keyLength);
|
|
61
|
+
if (valueLength)
|
|
62
|
+
pos += value.copy(buffer, pos, valueOffset, valueOffset + valueLength);
|
|
63
|
+
return buffer;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
67
|
+
0 && (module.exports = {
|
|
68
|
+
Encoder
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=encode.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/encode.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA+B;AAC/B,uBAAiE;AAuC1D,IAAM,UAAN,MAAc;AAAA,EACnB,OAAO,QAA2B,MAAc,GAAqB;AACnE,UAAM;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,MACX,MAAM;AAAA,MAEN,SAAS;AAAA,MACT,eAAe;AAAA,MACf,eAAe,OAAO;AAAA,MAEtB,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,YAAY,IAAI;AAAA,MAEhB,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,cAAc,MAAM;AAAA,IACtB,IAAI;AAEJ,UAAM,aAAa,eAAe,YAAY;AAC9C,UAAM,SAAS,aAAa;AAE5B,UAAM,aAAS,+BAAe,MAAM;AAEpC,WAAO,WAAW,uBAAM,SAAS,yBAAQ,QAAQ;AACjD,WAAO,WAAW,QAAQ,yBAAQ,SAAS;AAC3C,WAAO,cAAc,WAAW,yBAAQ,cAAc;AACtD,WAAO,WAAW,cAAc,yBAAQ,gBAAgB;AACxD,WAAO,WAAW,2BAAU,KAAK,yBAAQ,YAAY;AACrD,WAAO,cAAc,yBAAQ,KAAK,yBAAQ,UAAU;AACpD,WAAO,cAAc,YAAY,yBAAQ,eAAe;AACxD,WAAO,cAAc,UAAU,yBAAQ,YAAY;AACnD,WAAO,iBAAiB,KAAK,yBAAQ,OAAO;AAE5C,QAAI,MAAM;AACV,QAAI;AAAc,aAAO,OAAO,KAAK,QAAQ,KAAK,cAAc,eAAe,YAAY;AAC3F,QAAI;AAAW,aAAO,IAAI,KAAK,QAAQ,KAAK,WAAW,YAAY,SAAS;AAC5E,QAAI;AAAa,aAAO,MAAM,KAAK,QAAQ,KAAK,aAAa,cAAc,WAAW;AAGtF,WAAO;AAAA,EACT;AACF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/dist/encode.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { RecyclableBuffer } from './buffers';
|
|
3
|
+
import type { OPCODE } from './constants';
|
|
4
|
+
export interface RawOutgoingPacket {
|
|
5
|
+
readonly opcode: OPCODE;
|
|
6
|
+
readonly sequence?: number;
|
|
7
|
+
readonly cas?: bigint;
|
|
8
|
+
readonly extras?: Buffer;
|
|
9
|
+
readonly extrasOffset?: number;
|
|
10
|
+
readonly extrasLength?: number;
|
|
11
|
+
readonly key?: Buffer;
|
|
12
|
+
readonly keyOffset?: number;
|
|
13
|
+
readonly keyLength?: number;
|
|
14
|
+
readonly value?: Buffer;
|
|
15
|
+
readonly valueOffset?: number;
|
|
16
|
+
readonly valueLength?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class Encoder {
|
|
19
|
+
encode(packet: RawOutgoingPacket, seq?: number): RecyclableBuffer;
|
|
20
|
+
}
|
package/dist/encode.mjs
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// encode.ts
|
|
2
|
+
import { allocateBuffer } from "./buffers.mjs";
|
|
3
|
+
import { DATA_TYPE, EMPTY_BUFFER, MAGIC, VBUCKET, OFFSETS } from "./constants.mjs";
|
|
4
|
+
var Encoder = class {
|
|
5
|
+
encode(packet, seq = 0) {
|
|
6
|
+
const {
|
|
7
|
+
opcode,
|
|
8
|
+
sequence = seq,
|
|
9
|
+
cas = 0n,
|
|
10
|
+
extras = EMPTY_BUFFER,
|
|
11
|
+
extrasOffset = 0,
|
|
12
|
+
extrasLength = extras.length,
|
|
13
|
+
key = EMPTY_BUFFER,
|
|
14
|
+
keyOffset = 0,
|
|
15
|
+
keyLength = key.length,
|
|
16
|
+
value = EMPTY_BUFFER,
|
|
17
|
+
valueOffset = 0,
|
|
18
|
+
valueLength = value.length
|
|
19
|
+
} = packet;
|
|
20
|
+
const bodyLength = extrasLength + keyLength + valueLength;
|
|
21
|
+
const length = bodyLength + 24 /* HEADER_SIZE */;
|
|
22
|
+
const buffer = allocateBuffer(length);
|
|
23
|
+
buffer.writeUInt8(MAGIC.REQUEST, OFFSETS.MAGIC_$8);
|
|
24
|
+
buffer.writeUInt8(opcode, OFFSETS.OPCODE_$8);
|
|
25
|
+
buffer.writeUInt16BE(keyLength, OFFSETS.KEY_LENGTH_$16);
|
|
26
|
+
buffer.writeUInt8(extrasLength, OFFSETS.EXTRAS_LENGTH_$8);
|
|
27
|
+
buffer.writeUInt8(DATA_TYPE.RAW, OFFSETS.DATA_TYPE_$8);
|
|
28
|
+
buffer.writeUInt16BE(VBUCKET.NIL, OFFSETS.STATUS_$16);
|
|
29
|
+
buffer.writeUInt32BE(bodyLength, OFFSETS.BODY_LENGTH_$32);
|
|
30
|
+
buffer.writeUInt32BE(sequence, OFFSETS.SEQUENCE_$32);
|
|
31
|
+
buffer.writeBigUInt64BE(cas, OFFSETS.CAS_$64);
|
|
32
|
+
let pos = 24;
|
|
33
|
+
if (extrasLength)
|
|
34
|
+
pos += extras.copy(buffer, pos, extrasOffset, extrasOffset + extrasLength);
|
|
35
|
+
if (keyLength)
|
|
36
|
+
pos += key.copy(buffer, pos, keyOffset, keyOffset + keyLength);
|
|
37
|
+
if (valueLength)
|
|
38
|
+
pos += value.copy(buffer, pos, valueOffset, valueOffset + valueLength);
|
|
39
|
+
return buffer;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
export {
|
|
43
|
+
Encoder
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=encode.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/encode.ts"],
|
|
4
|
+
"mappings": ";AAAA,SAAS,sBAAsB;AAC/B,SAAS,WAAW,cAAc,OAAO,SAAS,eAAe;AAuC1D,IAAM,UAAN,MAAc;AAAA,EACnB,OAAO,QAA2B,MAAc,GAAqB;AACnE,UAAM;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,MACX,MAAM;AAAA,MAEN,SAAS;AAAA,MACT,eAAe;AAAA,MACf,eAAe,OAAO;AAAA,MAEtB,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,YAAY,IAAI;AAAA,MAEhB,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,cAAc,MAAM;AAAA,IACtB,IAAI;AAEJ,UAAM,aAAa,eAAe,YAAY;AAC9C,UAAM,SAAS,aAAa;AAE5B,UAAM,SAAS,eAAe,MAAM;AAEpC,WAAO,WAAW,MAAM,SAAS,QAAQ,QAAQ;AACjD,WAAO,WAAW,QAAQ,QAAQ,SAAS;AAC3C,WAAO,cAAc,WAAW,QAAQ,cAAc;AACtD,WAAO,WAAW,cAAc,QAAQ,gBAAgB;AACxD,WAAO,WAAW,UAAU,KAAK,QAAQ,YAAY;AACrD,WAAO,cAAc,QAAQ,KAAK,QAAQ,UAAU;AACpD,WAAO,cAAc,YAAY,QAAQ,eAAe;AACxD,WAAO,cAAc,UAAU,QAAQ,YAAY;AACnD,WAAO,iBAAiB,KAAK,QAAQ,OAAO;AAE5C,QAAI,MAAM;AACV,QAAI;AAAc,aAAO,OAAO,KAAK,QAAQ,KAAK,cAAc,eAAe,YAAY;AAC3F,QAAI;AAAW,aAAO,IAAI,KAAK,QAAQ,KAAK,WAAW,YAAY,SAAS;AAC5E,QAAI;AAAa,aAAO,MAAM,KAAK,QAAQ,KAAK,aAAa,cAAc,WAAW;AAGtF,WAAO;AAAA,EACT;AACF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/dist/fake.cjs
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// fake.ts
|
|
21
|
+
var fake_exports = {};
|
|
22
|
+
__export(fake_exports, {
|
|
23
|
+
FakeAdapter: () => FakeAdapter,
|
|
24
|
+
MemxFakeClient: () => MemxFakeClient
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(fake_exports);
|
|
27
|
+
var import_client = require("./client.cjs");
|
|
28
|
+
function toExp(ttl = 0) {
|
|
29
|
+
if (ttl === 0)
|
|
30
|
+
return Number.MAX_SAFE_INTEGER;
|
|
31
|
+
return Date.now() + ttl * 1e3;
|
|
32
|
+
}
|
|
33
|
+
var FakeAdapter = class {
|
|
34
|
+
#cache = /* @__PURE__ */ new Map();
|
|
35
|
+
#cas = 1n;
|
|
36
|
+
ttl = 0;
|
|
37
|
+
#get(key) {
|
|
38
|
+
if (key.length > 250)
|
|
39
|
+
throw new TypeError(`Key too long (len=${key.length})`);
|
|
40
|
+
const entry = this.#cache.get(key);
|
|
41
|
+
if (!entry)
|
|
42
|
+
return;
|
|
43
|
+
if (Date.now() > entry.exp) {
|
|
44
|
+
this.#cache.delete(key);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
return entry;
|
|
48
|
+
}
|
|
49
|
+
#set(key, value, flags, ttl) {
|
|
50
|
+
this.#cache.set(key, {
|
|
51
|
+
value,
|
|
52
|
+
flags: flags || 0,
|
|
53
|
+
cas: ++this.#cas,
|
|
54
|
+
exp: toExp(ttl)
|
|
55
|
+
});
|
|
56
|
+
return this.#cas;
|
|
57
|
+
}
|
|
58
|
+
async get(key) {
|
|
59
|
+
const entry = this.#get(key);
|
|
60
|
+
if (!entry)
|
|
61
|
+
return;
|
|
62
|
+
return {
|
|
63
|
+
value: entry.value,
|
|
64
|
+
flags: entry.flags,
|
|
65
|
+
cas: entry.cas,
|
|
66
|
+
recycle: () => void 0
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async gat(key, ttl) {
|
|
70
|
+
const entry = this.#get(key);
|
|
71
|
+
if (!entry)
|
|
72
|
+
return;
|
|
73
|
+
entry.exp = toExp(ttl);
|
|
74
|
+
return {
|
|
75
|
+
value: entry.value,
|
|
76
|
+
flags: entry.flags,
|
|
77
|
+
cas: entry.cas,
|
|
78
|
+
recycle: () => void 0
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async touch(key, ttl) {
|
|
82
|
+
const entry = this.#get(key);
|
|
83
|
+
if (entry)
|
|
84
|
+
entry.exp = toExp(ttl);
|
|
85
|
+
return !!entry;
|
|
86
|
+
}
|
|
87
|
+
async set(key, value, options = {}) {
|
|
88
|
+
const entry = this.#get(key);
|
|
89
|
+
if (entry && options.cas !== void 0 && entry.cas !== options.cas) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
return this.#set(key, value, options.flags, options.ttl);
|
|
93
|
+
}
|
|
94
|
+
async add(key, value, options = {}) {
|
|
95
|
+
if (this.#get(key))
|
|
96
|
+
return;
|
|
97
|
+
return this.#set(key, value, options.flags, options.ttl);
|
|
98
|
+
}
|
|
99
|
+
async replace(key, value, options = {}) {
|
|
100
|
+
if (!this.#get(key))
|
|
101
|
+
return;
|
|
102
|
+
return this.#set(key, value, options.flags, options.ttl);
|
|
103
|
+
}
|
|
104
|
+
async append(key, value, options = {}) {
|
|
105
|
+
const entry = this.#get(key);
|
|
106
|
+
if (!entry)
|
|
107
|
+
return false;
|
|
108
|
+
if (options.cas !== void 0 && options.cas !== entry.cas)
|
|
109
|
+
return false;
|
|
110
|
+
entry.value = Buffer.concat([entry.value, value]);
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
async prepend(key, value, options = {}) {
|
|
114
|
+
const entry = this.#get(key);
|
|
115
|
+
if (!entry)
|
|
116
|
+
return false;
|
|
117
|
+
if (options.cas !== void 0 && options.cas !== entry.cas)
|
|
118
|
+
return false;
|
|
119
|
+
entry.value = Buffer.concat([value, entry.value]);
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
async #counter(key, delta, options) {
|
|
123
|
+
const entry = this.#get(key);
|
|
124
|
+
if (!entry) {
|
|
125
|
+
if (options.initial !== void 0) {
|
|
126
|
+
const value = Buffer.from(options.initial.toString());
|
|
127
|
+
this.#set(key, value, void 0, options.ttl);
|
|
128
|
+
return { value: BigInt(options.initial), cas: this.#cas };
|
|
129
|
+
} else {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (options.cas !== void 0 && options.cas !== entry.cas)
|
|
134
|
+
return;
|
|
135
|
+
try {
|
|
136
|
+
const value = BigInt(entry.value.toString("utf-8")) + BigInt(delta);
|
|
137
|
+
this.#set(key, Buffer.from(value.toString()), void 0, options.ttl);
|
|
138
|
+
return { value, cas: this.#cas };
|
|
139
|
+
} catch (error) {
|
|
140
|
+
throw new TypeError(`${error.message} (status=NON_NUMERIC_VALUE, key=${key})`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
increment(key, delta = 1n, options = {}) {
|
|
144
|
+
return this.#counter(key, delta, options);
|
|
145
|
+
}
|
|
146
|
+
decrement(key, delta = 1n, options = {}) {
|
|
147
|
+
return this.#counter(key, -delta, options);
|
|
148
|
+
}
|
|
149
|
+
async delete(key, options = {}) {
|
|
150
|
+
const entry = this.#get(key);
|
|
151
|
+
if (entry && options.cas !== void 0 && entry.cas !== options.cas) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
return this.#cache.delete(key);
|
|
155
|
+
}
|
|
156
|
+
async flush(ttl) {
|
|
157
|
+
if (!ttl)
|
|
158
|
+
return this.#cache.clear();
|
|
159
|
+
const wait = toExp(ttl) - Date.now();
|
|
160
|
+
setTimeout(() => this.#cache.clear(), wait);
|
|
161
|
+
}
|
|
162
|
+
async noop() {
|
|
163
|
+
}
|
|
164
|
+
async quit() {
|
|
165
|
+
}
|
|
166
|
+
async version() {
|
|
167
|
+
return { fake: "0.0.0-fake" };
|
|
168
|
+
}
|
|
169
|
+
async stats() {
|
|
170
|
+
return { fake: { version: "0.0.0-fake" } };
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
var MemxFakeClient = class extends import_client.MemxClient {
|
|
174
|
+
constructor() {
|
|
175
|
+
super(new FakeAdapter());
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
179
|
+
0 && (module.exports = {
|
|
180
|
+
FakeAdapter,
|
|
181
|
+
MemxFakeClient
|
|
182
|
+
});
|
|
183
|
+
//# sourceMappingURL=fake.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/fake.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/dist/fake.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { MemxClient } from './client';
|
|
3
|
+
import type { Adapter, AdapterResult, Counter, Stats } from './types';
|
|
4
|
+
export declare class FakeAdapter implements Adapter {
|
|
5
|
+
#private;
|
|
6
|
+
readonly ttl = 0;
|
|
7
|
+
get(key: string): Promise<AdapterResult | undefined>;
|
|
8
|
+
gat(key: string, ttl: number): Promise<AdapterResult | undefined>;
|
|
9
|
+
touch(key: string, ttl: number): Promise<boolean>;
|
|
10
|
+
set(key: string, value: Buffer, options?: {
|
|
11
|
+
flags?: number;
|
|
12
|
+
cas?: bigint;
|
|
13
|
+
ttl?: number;
|
|
14
|
+
}): Promise<bigint | undefined>;
|
|
15
|
+
add(key: string, value: Buffer, options?: {
|
|
16
|
+
flags?: number;
|
|
17
|
+
ttl?: number;
|
|
18
|
+
}): Promise<bigint | undefined>;
|
|
19
|
+
replace(key: string, value: Buffer, options?: {
|
|
20
|
+
flags?: number;
|
|
21
|
+
cas?: bigint;
|
|
22
|
+
ttl?: number;
|
|
23
|
+
}): Promise<bigint | undefined>;
|
|
24
|
+
append(key: string, value: Buffer, options?: {
|
|
25
|
+
cas?: bigint;
|
|
26
|
+
}): Promise<boolean>;
|
|
27
|
+
prepend(key: string, value: Buffer, options?: {
|
|
28
|
+
cas?: bigint;
|
|
29
|
+
}): Promise<boolean>;
|
|
30
|
+
increment(key: string, delta?: number | bigint, options?: {
|
|
31
|
+
initial?: number | bigint;
|
|
32
|
+
cas?: bigint;
|
|
33
|
+
ttl?: number;
|
|
34
|
+
create?: boolean;
|
|
35
|
+
}): Promise<Counter | undefined>;
|
|
36
|
+
decrement(key: string, delta?: number | bigint, options?: {
|
|
37
|
+
initial?: number | bigint;
|
|
38
|
+
cas?: bigint;
|
|
39
|
+
ttl?: number;
|
|
40
|
+
create?: boolean;
|
|
41
|
+
}): Promise<Counter | undefined>;
|
|
42
|
+
delete(key: string, options?: {
|
|
43
|
+
cas?: bigint;
|
|
44
|
+
}): Promise<boolean>;
|
|
45
|
+
flush(ttl?: number): Promise<void>;
|
|
46
|
+
noop(): Promise<void>;
|
|
47
|
+
quit(): Promise<void>;
|
|
48
|
+
version(): Promise<Record<string, string>>;
|
|
49
|
+
stats(): Promise<Record<string, Stats>>;
|
|
50
|
+
}
|
|
51
|
+
export declare class MemxFakeClient extends MemxClient {
|
|
52
|
+
constructor();
|
|
53
|
+
}
|
package/dist/fake.mjs
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// fake.ts
|
|
2
|
+
import { MemxClient } from "./client.mjs";
|
|
3
|
+
function toExp(ttl = 0) {
|
|
4
|
+
if (ttl === 0)
|
|
5
|
+
return Number.MAX_SAFE_INTEGER;
|
|
6
|
+
return Date.now() + ttl * 1e3;
|
|
7
|
+
}
|
|
8
|
+
var FakeAdapter = class {
|
|
9
|
+
#cache = /* @__PURE__ */ new Map();
|
|
10
|
+
#cas = 1n;
|
|
11
|
+
ttl = 0;
|
|
12
|
+
#get(key) {
|
|
13
|
+
if (key.length > 250)
|
|
14
|
+
throw new TypeError(`Key too long (len=${key.length})`);
|
|
15
|
+
const entry = this.#cache.get(key);
|
|
16
|
+
if (!entry)
|
|
17
|
+
return;
|
|
18
|
+
if (Date.now() > entry.exp) {
|
|
19
|
+
this.#cache.delete(key);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
return entry;
|
|
23
|
+
}
|
|
24
|
+
#set(key, value, flags, ttl) {
|
|
25
|
+
this.#cache.set(key, {
|
|
26
|
+
value,
|
|
27
|
+
flags: flags || 0,
|
|
28
|
+
cas: ++this.#cas,
|
|
29
|
+
exp: toExp(ttl)
|
|
30
|
+
});
|
|
31
|
+
return this.#cas;
|
|
32
|
+
}
|
|
33
|
+
async get(key) {
|
|
34
|
+
const entry = this.#get(key);
|
|
35
|
+
if (!entry)
|
|
36
|
+
return;
|
|
37
|
+
return {
|
|
38
|
+
value: entry.value,
|
|
39
|
+
flags: entry.flags,
|
|
40
|
+
cas: entry.cas,
|
|
41
|
+
recycle: () => void 0
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async gat(key, ttl) {
|
|
45
|
+
const entry = this.#get(key);
|
|
46
|
+
if (!entry)
|
|
47
|
+
return;
|
|
48
|
+
entry.exp = toExp(ttl);
|
|
49
|
+
return {
|
|
50
|
+
value: entry.value,
|
|
51
|
+
flags: entry.flags,
|
|
52
|
+
cas: entry.cas,
|
|
53
|
+
recycle: () => void 0
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async touch(key, ttl) {
|
|
57
|
+
const entry = this.#get(key);
|
|
58
|
+
if (entry)
|
|
59
|
+
entry.exp = toExp(ttl);
|
|
60
|
+
return !!entry;
|
|
61
|
+
}
|
|
62
|
+
async set(key, value, options = {}) {
|
|
63
|
+
const entry = this.#get(key);
|
|
64
|
+
if (entry && options.cas !== void 0 && entry.cas !== options.cas) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
return this.#set(key, value, options.flags, options.ttl);
|
|
68
|
+
}
|
|
69
|
+
async add(key, value, options = {}) {
|
|
70
|
+
if (this.#get(key))
|
|
71
|
+
return;
|
|
72
|
+
return this.#set(key, value, options.flags, options.ttl);
|
|
73
|
+
}
|
|
74
|
+
async replace(key, value, options = {}) {
|
|
75
|
+
if (!this.#get(key))
|
|
76
|
+
return;
|
|
77
|
+
return this.#set(key, value, options.flags, options.ttl);
|
|
78
|
+
}
|
|
79
|
+
async append(key, value, options = {}) {
|
|
80
|
+
const entry = this.#get(key);
|
|
81
|
+
if (!entry)
|
|
82
|
+
return false;
|
|
83
|
+
if (options.cas !== void 0 && options.cas !== entry.cas)
|
|
84
|
+
return false;
|
|
85
|
+
entry.value = Buffer.concat([entry.value, value]);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
async prepend(key, value, options = {}) {
|
|
89
|
+
const entry = this.#get(key);
|
|
90
|
+
if (!entry)
|
|
91
|
+
return false;
|
|
92
|
+
if (options.cas !== void 0 && options.cas !== entry.cas)
|
|
93
|
+
return false;
|
|
94
|
+
entry.value = Buffer.concat([value, entry.value]);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
async #counter(key, delta, options) {
|
|
98
|
+
const entry = this.#get(key);
|
|
99
|
+
if (!entry) {
|
|
100
|
+
if (options.initial !== void 0) {
|
|
101
|
+
const value = Buffer.from(options.initial.toString());
|
|
102
|
+
this.#set(key, value, void 0, options.ttl);
|
|
103
|
+
return { value: BigInt(options.initial), cas: this.#cas };
|
|
104
|
+
} else {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (options.cas !== void 0 && options.cas !== entry.cas)
|
|
109
|
+
return;
|
|
110
|
+
try {
|
|
111
|
+
const value = BigInt(entry.value.toString("utf-8")) + BigInt(delta);
|
|
112
|
+
this.#set(key, Buffer.from(value.toString()), void 0, options.ttl);
|
|
113
|
+
return { value, cas: this.#cas };
|
|
114
|
+
} catch (error) {
|
|
115
|
+
throw new TypeError(`${error.message} (status=NON_NUMERIC_VALUE, key=${key})`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
increment(key, delta = 1n, options = {}) {
|
|
119
|
+
return this.#counter(key, delta, options);
|
|
120
|
+
}
|
|
121
|
+
decrement(key, delta = 1n, options = {}) {
|
|
122
|
+
return this.#counter(key, -delta, options);
|
|
123
|
+
}
|
|
124
|
+
async delete(key, options = {}) {
|
|
125
|
+
const entry = this.#get(key);
|
|
126
|
+
if (entry && options.cas !== void 0 && entry.cas !== options.cas) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
return this.#cache.delete(key);
|
|
130
|
+
}
|
|
131
|
+
async flush(ttl) {
|
|
132
|
+
if (!ttl)
|
|
133
|
+
return this.#cache.clear();
|
|
134
|
+
const wait = toExp(ttl) - Date.now();
|
|
135
|
+
setTimeout(() => this.#cache.clear(), wait);
|
|
136
|
+
}
|
|
137
|
+
async noop() {
|
|
138
|
+
}
|
|
139
|
+
async quit() {
|
|
140
|
+
}
|
|
141
|
+
async version() {
|
|
142
|
+
return { fake: "0.0.0-fake" };
|
|
143
|
+
}
|
|
144
|
+
async stats() {
|
|
145
|
+
return { fake: { version: "0.0.0-fake" } };
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
var MemxFakeClient = class extends MemxClient {
|
|
149
|
+
constructor() {
|
|
150
|
+
super(new FakeAdapter());
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
export {
|
|
154
|
+
FakeAdapter,
|
|
155
|
+
MemxFakeClient
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=fake.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/fake.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|