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.
Files changed (78) hide show
  1. package/dist/buffers.cjs +50 -0
  2. package/dist/buffers.cjs.map +6 -0
  3. package/dist/buffers.d.ts +14 -0
  4. package/dist/buffers.mjs +25 -0
  5. package/dist/buffers.mjs.map +6 -0
  6. package/dist/client.cjs +251 -0
  7. package/dist/client.cjs.map +6 -0
  8. package/dist/client.d.ts +76 -0
  9. package/dist/client.mjs +216 -0
  10. package/dist/client.mjs.map +6 -0
  11. package/dist/cluster.cjs +147 -0
  12. package/dist/cluster.cjs.map +6 -0
  13. package/dist/cluster.d.ts +60 -0
  14. package/dist/cluster.mjs +112 -0
  15. package/dist/cluster.mjs.map +6 -0
  16. package/dist/connection.cjs +186 -0
  17. package/dist/connection.cjs.map +6 -0
  18. package/dist/connection.d.ts +18 -0
  19. package/dist/connection.mjs +151 -0
  20. package/dist/connection.mjs.map +6 -0
  21. package/dist/constants.cjs +140 -0
  22. package/dist/constants.cjs.map +6 -0
  23. package/dist/constants.d.ts +87 -0
  24. package/dist/constants.mjs +107 -0
  25. package/dist/constants.mjs.map +6 -0
  26. package/dist/decode.cjs +101 -0
  27. package/dist/decode.cjs.map +6 -0
  28. package/dist/decode.d.ts +16 -0
  29. package/dist/decode.mjs +66 -0
  30. package/dist/decode.mjs.map +6 -0
  31. package/dist/encode.cjs +70 -0
  32. package/dist/encode.cjs.map +6 -0
  33. package/dist/encode.d.ts +20 -0
  34. package/dist/encode.mjs +45 -0
  35. package/dist/encode.mjs.map +6 -0
  36. package/dist/fake.cjs +183 -0
  37. package/dist/fake.cjs.map +6 -0
  38. package/dist/fake.d.ts +53 -0
  39. package/dist/fake.mjs +157 -0
  40. package/dist/fake.mjs.map +6 -0
  41. package/dist/index.cjs +57 -0
  42. package/dist/index.cjs.map +6 -0
  43. package/dist/index.d.ts +12 -0
  44. package/dist/index.mjs +15 -1460
  45. package/dist/index.mjs.map +2 -2
  46. package/dist/internals.cjs +58 -0
  47. package/dist/internals.cjs.map +6 -0
  48. package/dist/internals.d.ts +7 -0
  49. package/dist/internals.mjs +21 -0
  50. package/dist/internals.mjs.map +6 -0
  51. package/dist/server.cjs +468 -0
  52. package/dist/server.cjs.map +6 -0
  53. package/dist/server.d.ts +59 -0
  54. package/dist/server.mjs +443 -0
  55. package/dist/server.mjs.map +6 -0
  56. package/dist/types.cjs +19 -0
  57. package/dist/types.cjs.map +6 -0
  58. package/dist/types.d.ts +239 -0
  59. package/dist/types.mjs +1 -0
  60. package/dist/types.mjs.map +6 -0
  61. package/dist/utils.cjs +182 -0
  62. package/dist/utils.cjs.map +6 -0
  63. package/dist/utils.d.ts +22 -0
  64. package/dist/utils.mjs +145 -0
  65. package/dist/utils.mjs.map +6 -0
  66. package/package.json +29 -27
  67. package/src/client.ts +25 -23
  68. package/src/cluster.ts +6 -3
  69. package/src/connection.ts +8 -4
  70. package/src/decode.ts +5 -2
  71. package/src/encode.ts +5 -2
  72. package/src/fake.ts +34 -33
  73. package/src/internals.ts +7 -7
  74. package/src/server.ts +47 -45
  75. package/src/utils.ts +7 -4
  76. package/dist/index.js +0 -1496
  77. package/dist/index.js.map +0 -6
  78. package/index.d.ts +0 -710
@@ -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
+ }
@@ -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
+ }
@@ -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
+ }
@@ -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
+ }