@geekmidas/cache 0.0.2 → 0.0.4
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/README.md +512 -0
- package/dist/__tests__/cache.spec.cjs +30 -29
- package/dist/__tests__/cache.spec.d.cts +1 -0
- package/dist/__tests__/cache.spec.d.mts +1 -0
- package/dist/__tests__/cache.spec.mjs +18 -18
- package/dist/__tests__/integration.spec.cjs +45 -44
- package/dist/__tests__/integration.spec.d.cts +1 -0
- package/dist/__tests__/integration.spec.d.mts +1 -0
- package/dist/__tests__/integration.spec.mjs +26 -26
- package/dist/__tests__/memory.spec.cjs +45 -44
- package/dist/__tests__/memory.spec.d.cts +1 -0
- package/dist/__tests__/memory.spec.d.mts +1 -0
- package/dist/__tests__/memory.spec.mjs +23 -23
- package/dist/__tests__/upstash.spec.cjs +50 -49
- package/dist/__tests__/upstash.spec.d.cts +1 -0
- package/dist/__tests__/upstash.spec.d.mts +1 -0
- package/dist/__tests__/upstash.spec.mjs +23 -23
- package/dist/index-BPnJ3lrS.d.mts +25 -0
- package/dist/index-q3xYn8_0.d.cts +25 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.mts +2 -0
- package/dist/memory.d.cts +11 -0
- package/dist/memory.d.mts +11 -0
- package/dist/memory.mjs +1 -1
- package/dist/upstash.d.cts +12 -0
- package/dist/upstash.d.mts +12 -0
- package/dist/upstash.mjs +1 -1
- package/package.json +15 -5
- package/src/memory.ts +1 -1
- package/src/upstash.ts +1 -1
- package/dist/magic-string.es-BvJNBYzY.mjs +0 -1014
- package/dist/magic-string.es-CKiDiYoS.cjs +0 -1015
- package/dist/vi.DgezovHB-McgltIC5.mjs +0 -13079
- package/dist/vi.DgezovHB-NqP74KGR.cjs +0 -13104
- /package/dist/{cache.cjs → index.cjs} +0 -0
- /package/dist/{cache.mjs → index.mjs} +0 -0
- /package/dist/{memory-YteQXj7m.mjs → memory-NQi0XmZ2.mjs} +0 -0
- /package/dist/{upstash-_05vyc5o.mjs → upstash-CTY-M8vR.mjs} +0 -0
- /package/src/{cache.ts → index.ts} +0 -0
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { InMemoryCache } from "../memory-NQi0XmZ2.mjs";
|
|
2
|
+
import { UpstashCache } from "../upstash-CTY-M8vR.mjs";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
4
|
|
|
5
5
|
//#region src/__tests__/cache.spec.ts
|
|
6
6
|
describe("Cache Interface", () => {
|
|
7
7
|
describe("interface compliance", () => {
|
|
8
8
|
it("InMemoryCache should implement Cache interface", () => {
|
|
9
9
|
const cache = new InMemoryCache();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
expect(typeof cache.get).toBe("function");
|
|
11
|
+
expect(typeof cache.set).toBe("function");
|
|
12
|
+
expect(typeof cache.delete).toBe("function");
|
|
13
13
|
});
|
|
14
14
|
it("UpstashCache should implement Cache interface", () => {
|
|
15
15
|
const cache = new UpstashCache("http://localhost:8079", "example_token");
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
expect(typeof cache.get).toBe("function");
|
|
17
|
+
expect(typeof cache.set).toBe("function");
|
|
18
|
+
expect(typeof cache.delete).toBe("function");
|
|
19
19
|
});
|
|
20
20
|
});
|
|
21
21
|
describe("method signatures", () => {
|
|
22
22
|
it("should have correct get method signature", () => {
|
|
23
23
|
const cache = new InMemoryCache();
|
|
24
24
|
const getResult = cache.get("test");
|
|
25
|
-
|
|
25
|
+
expect(getResult).toBeInstanceOf(Promise);
|
|
26
26
|
});
|
|
27
27
|
it("should have correct set method signature", () => {
|
|
28
28
|
const cache = new InMemoryCache();
|
|
29
29
|
const setResult = cache.set("test", "value");
|
|
30
|
-
|
|
30
|
+
expect(setResult).toBeInstanceOf(Promise);
|
|
31
31
|
});
|
|
32
32
|
it("should have correct delete method signature", () => {
|
|
33
33
|
const cache = new InMemoryCache();
|
|
34
34
|
const deleteResult = cache.delete("test");
|
|
35
|
-
|
|
35
|
+
expect(deleteResult).toBeInstanceOf(Promise);
|
|
36
36
|
});
|
|
37
37
|
});
|
|
38
38
|
describe("generic type support", () => {
|
|
@@ -40,13 +40,13 @@ describe("Cache Interface", () => {
|
|
|
40
40
|
const cache = new InMemoryCache();
|
|
41
41
|
await cache.set("key", "value");
|
|
42
42
|
const result = await cache.get("key");
|
|
43
|
-
|
|
43
|
+
expect(typeof result === "string" || result === void 0).toBe(true);
|
|
44
44
|
});
|
|
45
45
|
it("should support number types", async () => {
|
|
46
46
|
const cache = new InMemoryCache();
|
|
47
47
|
await cache.set("key", 42);
|
|
48
48
|
const result = await cache.get("key");
|
|
49
|
-
|
|
49
|
+
expect(typeof result === "number" || result === void 0).toBe(true);
|
|
50
50
|
});
|
|
51
51
|
it("should support object types", async () => {
|
|
52
52
|
const cache = new InMemoryCache();
|
|
@@ -56,7 +56,7 @@ describe("Cache Interface", () => {
|
|
|
56
56
|
};
|
|
57
57
|
await cache.set("user", user);
|
|
58
58
|
const result = await cache.get("user");
|
|
59
|
-
|
|
59
|
+
expect(result === void 0 || typeof result === "object" && "id" in result && "name" in result).toBe(true);
|
|
60
60
|
});
|
|
61
61
|
it("should support union types", async () => {
|
|
62
62
|
const cache = new InMemoryCache();
|
|
@@ -66,9 +66,9 @@ describe("Cache Interface", () => {
|
|
|
66
66
|
const stringResult = await cache.get("string");
|
|
67
67
|
const numberResult = await cache.get("number");
|
|
68
68
|
const booleanResult = await cache.get("boolean");
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
expect(stringResult).toBe("text");
|
|
70
|
+
expect(numberResult).toBe(42);
|
|
71
|
+
expect(booleanResult).toBe(true);
|
|
72
72
|
});
|
|
73
73
|
});
|
|
74
74
|
});
|
|
@@ -1,30 +1,31 @@
|
|
|
1
|
+
const require_chunk = require('../chunk-CUT6urMc.cjs');
|
|
1
2
|
const require_memory = require('../memory-n6Iosq6J.cjs');
|
|
2
|
-
const
|
|
3
|
+
const vitest = require_chunk.__toESM(require("vitest"));
|
|
3
4
|
|
|
4
5
|
//#region src/__tests__/integration.spec.ts
|
|
5
|
-
|
|
6
|
+
(0, vitest.describe)("Cache Integration Tests", () => {
|
|
6
7
|
let memoryCache;
|
|
7
|
-
|
|
8
|
+
(0, vitest.beforeEach)(() => {
|
|
8
9
|
memoryCache = new require_memory.InMemoryCache();
|
|
9
10
|
});
|
|
10
|
-
|
|
11
|
+
(0, vitest.describe)("cross-cache behavior consistency", () => {
|
|
11
12
|
const testCases = [{
|
|
12
13
|
name: "InMemoryCache",
|
|
13
14
|
cache: () => new require_memory.InMemoryCache()
|
|
14
15
|
}];
|
|
15
16
|
testCases.forEach(({ name, cache }) => {
|
|
16
|
-
|
|
17
|
+
(0, vitest.describe)(name, () => {
|
|
17
18
|
let cacheInstance;
|
|
18
|
-
|
|
19
|
+
(0, vitest.beforeEach)(() => {
|
|
19
20
|
cacheInstance = cache();
|
|
20
21
|
});
|
|
21
|
-
|
|
22
|
+
(0, vitest.it)("should handle basic CRUD operations", async () => {
|
|
22
23
|
await cacheInstance.set("user:1", {
|
|
23
24
|
id: 1,
|
|
24
25
|
name: "John"
|
|
25
26
|
});
|
|
26
27
|
const user = await cacheInstance.get("user:1");
|
|
27
|
-
|
|
28
|
+
(0, vitest.expect)(user).toEqual({
|
|
28
29
|
id: 1,
|
|
29
30
|
name: "John"
|
|
30
31
|
});
|
|
@@ -33,15 +34,15 @@ require_vi_DgezovHB.describe("Cache Integration Tests", () => {
|
|
|
33
34
|
name: "Jane"
|
|
34
35
|
});
|
|
35
36
|
const updatedUser = await cacheInstance.get("user:1");
|
|
36
|
-
|
|
37
|
+
(0, vitest.expect)(updatedUser).toEqual({
|
|
37
38
|
id: 1,
|
|
38
39
|
name: "Jane"
|
|
39
40
|
});
|
|
40
41
|
await cacheInstance.delete("user:1");
|
|
41
42
|
const deletedUser = await cacheInstance.get("user:1");
|
|
42
|
-
|
|
43
|
+
(0, vitest.expect)(deletedUser).toBeUndefined();
|
|
43
44
|
});
|
|
44
|
-
|
|
45
|
+
(0, vitest.it)("should handle concurrent operations", async () => {
|
|
45
46
|
const operations = [
|
|
46
47
|
cacheInstance.set("key1", "value1"),
|
|
47
48
|
cacheInstance.set("key2", "value2"),
|
|
@@ -53,13 +54,13 @@ require_vi_DgezovHB.describe("Cache Integration Tests", () => {
|
|
|
53
54
|
cacheInstance.get("key2"),
|
|
54
55
|
cacheInstance.get("key3")
|
|
55
56
|
]);
|
|
56
|
-
|
|
57
|
+
(0, vitest.expect)(results).toEqual([
|
|
57
58
|
"value1",
|
|
58
59
|
"value2",
|
|
59
60
|
"value3"
|
|
60
61
|
]);
|
|
61
62
|
});
|
|
62
|
-
|
|
63
|
+
(0, vitest.it)("should handle data type preservation", async () => {
|
|
63
64
|
const testData = {
|
|
64
65
|
string: "hello",
|
|
65
66
|
number: 42,
|
|
@@ -74,31 +75,31 @@ require_vi_DgezovHB.describe("Cache Integration Tests", () => {
|
|
|
74
75
|
};
|
|
75
76
|
await Promise.all(Object.entries(testData).map(([key, value]) => cacheInstance.set(key, value)));
|
|
76
77
|
const results = await Promise.all(Object.keys(testData).map((key) => cacheInstance.get(key)));
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
(0, vitest.expect)(results[0]).toBe("hello");
|
|
79
|
+
(0, vitest.expect)(results[1]).toBe(42);
|
|
80
|
+
(0, vitest.expect)(results[2]).toBe(true);
|
|
81
|
+
(0, vitest.expect)(results[3]).toEqual({ nested: true });
|
|
82
|
+
(0, vitest.expect)(results[4]).toEqual([
|
|
82
83
|
1,
|
|
83
84
|
2,
|
|
84
85
|
3
|
|
85
86
|
]);
|
|
86
|
-
|
|
87
|
+
(0, vitest.expect)(results[5]).toBeNull();
|
|
87
88
|
});
|
|
88
|
-
|
|
89
|
+
(0, vitest.it)("should handle key isolation", async () => {
|
|
89
90
|
await cacheInstance.set("user:1", "User One");
|
|
90
91
|
await cacheInstance.set("user:2", "User Two");
|
|
91
92
|
await cacheInstance.set("session:1", "Session One");
|
|
92
93
|
await cacheInstance.delete("user:1");
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
(0, vitest.expect)(await cacheInstance.get("user:1")).toBeUndefined();
|
|
95
|
+
(0, vitest.expect)(await cacheInstance.get("user:2")).toBe("User Two");
|
|
96
|
+
(0, vitest.expect)(await cacheInstance.get("session:1")).toBe("Session One");
|
|
96
97
|
});
|
|
97
98
|
});
|
|
98
99
|
});
|
|
99
100
|
});
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
(0, vitest.describe)("cache migration scenarios", () => {
|
|
102
|
+
(0, vitest.it)("should support migrating data between cache implementations", async () => {
|
|
102
103
|
const sourceCache = new require_memory.InMemoryCache();
|
|
103
104
|
const targetCache = new require_memory.InMemoryCache();
|
|
104
105
|
const testData = {
|
|
@@ -123,12 +124,12 @@ require_vi_DgezovHB.describe("Cache Integration Tests", () => {
|
|
|
123
124
|
}
|
|
124
125
|
for (const [key, expectedValue] of Object.entries(testData)) {
|
|
125
126
|
const migratedValue = await targetCache.get(key);
|
|
126
|
-
|
|
127
|
+
(0, vitest.expect)(migratedValue).toEqual(expectedValue);
|
|
127
128
|
}
|
|
128
129
|
});
|
|
129
130
|
});
|
|
130
|
-
|
|
131
|
-
|
|
131
|
+
(0, vitest.describe)("cache abstraction patterns", () => {
|
|
132
|
+
(0, vitest.it)("should support cache factory pattern", async () => {
|
|
132
133
|
const createCache = (type) => {
|
|
133
134
|
switch (type) {
|
|
134
135
|
case "memory": return new require_memory.InMemoryCache();
|
|
@@ -142,13 +143,13 @@ require_vi_DgezovHB.describe("Cache Integration Tests", () => {
|
|
|
142
143
|
name: "John"
|
|
143
144
|
});
|
|
144
145
|
await sessionCache.set("session:abc", "active");
|
|
145
|
-
|
|
146
|
+
(0, vitest.expect)(await userCache.get("user:1")).toEqual({
|
|
146
147
|
id: 1,
|
|
147
148
|
name: "John"
|
|
148
149
|
});
|
|
149
|
-
|
|
150
|
+
(0, vitest.expect)(await sessionCache.get("session:abc")).toBe("active");
|
|
150
151
|
});
|
|
151
|
-
|
|
152
|
+
(0, vitest.it)("should support cache wrapper pattern", async () => {
|
|
152
153
|
class LoggingCache {
|
|
153
154
|
logs = [];
|
|
154
155
|
constructor(underlying) {
|
|
@@ -176,28 +177,28 @@ require_vi_DgezovHB.describe("Cache Integration Tests", () => {
|
|
|
176
177
|
await loggingCache.get("test");
|
|
177
178
|
await loggingCache.delete("test");
|
|
178
179
|
const logs = loggingCache.getLogs();
|
|
179
|
-
|
|
180
|
+
(0, vitest.expect)(logs).toEqual([
|
|
180
181
|
"SET test",
|
|
181
182
|
"GET test",
|
|
182
183
|
"DELETE test"
|
|
183
184
|
]);
|
|
184
185
|
});
|
|
185
186
|
});
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
(0, vitest.describe)("performance and stress tests", () => {
|
|
188
|
+
(0, vitest.it)("should handle large number of operations", async () => {
|
|
188
189
|
const cache = new require_memory.InMemoryCache();
|
|
189
190
|
const operationCount = 1e3;
|
|
190
191
|
const insertPromises = Array.from({ length: operationCount }, (_, i) => cache.set(`key:${i}`, i));
|
|
191
192
|
await Promise.all(insertPromises);
|
|
192
193
|
const readPromises = Array.from({ length: operationCount }, (_, i) => cache.get(`key:${i}`));
|
|
193
194
|
const results = await Promise.all(readPromises);
|
|
194
|
-
for (let i = 0; i < operationCount; i++)
|
|
195
|
+
for (let i = 0; i < operationCount; i++) (0, vitest.expect)(results[i]).toBe(i);
|
|
195
196
|
const deletePromises = Array.from({ length: operationCount }, (_, i) => cache.delete(`key:${i}`));
|
|
196
197
|
await Promise.all(deletePromises);
|
|
197
198
|
const postDeleteRead = await cache.get("key:0");
|
|
198
|
-
|
|
199
|
+
(0, vitest.expect)(postDeleteRead).toBeUndefined();
|
|
199
200
|
});
|
|
200
|
-
|
|
201
|
+
(0, vitest.it)("should handle large objects efficiently", async () => {
|
|
201
202
|
const cache = new require_memory.InMemoryCache();
|
|
202
203
|
const largeObject = {
|
|
203
204
|
id: 1,
|
|
@@ -214,19 +215,19 @@ require_vi_DgezovHB.describe("Cache Integration Tests", () => {
|
|
|
214
215
|
await cache.set("large-object", largeObject);
|
|
215
216
|
const result = await cache.get("large-object");
|
|
216
217
|
const endTime = Date.now();
|
|
217
|
-
|
|
218
|
-
|
|
218
|
+
(0, vitest.expect)(result).toEqual(largeObject);
|
|
219
|
+
(0, vitest.expect)(endTime - startTime).toBeLessThan(100);
|
|
219
220
|
});
|
|
220
221
|
});
|
|
221
|
-
|
|
222
|
-
|
|
222
|
+
(0, vitest.describe)("error scenarios", () => {
|
|
223
|
+
(0, vitest.it)("should handle operations after errors gracefully", async () => {
|
|
223
224
|
const cache = new require_memory.InMemoryCache();
|
|
224
225
|
await cache.set("valid-key", "valid-value");
|
|
225
|
-
|
|
226
|
+
(0, vitest.expect)(await cache.get("valid-key")).toBe("valid-value");
|
|
226
227
|
await cache.set("another-key", "another-value");
|
|
227
|
-
|
|
228
|
+
(0, vitest.expect)(await cache.get("another-key")).toBe("another-value");
|
|
228
229
|
await cache.delete("valid-key");
|
|
229
|
-
|
|
230
|
+
(0, vitest.expect)(await cache.get("valid-key")).toBeUndefined();
|
|
230
231
|
});
|
|
231
232
|
});
|
|
232
233
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { InMemoryCache } from "../memory-NQi0XmZ2.mjs";
|
|
2
|
+
import { beforeEach, describe, expect, it } from "vitest";
|
|
3
3
|
|
|
4
4
|
//#region src/__tests__/integration.spec.ts
|
|
5
5
|
describe("Cache Integration Tests", () => {
|
|
@@ -24,7 +24,7 @@ describe("Cache Integration Tests", () => {
|
|
|
24
24
|
name: "John"
|
|
25
25
|
});
|
|
26
26
|
const user = await cacheInstance.get("user:1");
|
|
27
|
-
|
|
27
|
+
expect(user).toEqual({
|
|
28
28
|
id: 1,
|
|
29
29
|
name: "John"
|
|
30
30
|
});
|
|
@@ -33,13 +33,13 @@ describe("Cache Integration Tests", () => {
|
|
|
33
33
|
name: "Jane"
|
|
34
34
|
});
|
|
35
35
|
const updatedUser = await cacheInstance.get("user:1");
|
|
36
|
-
|
|
36
|
+
expect(updatedUser).toEqual({
|
|
37
37
|
id: 1,
|
|
38
38
|
name: "Jane"
|
|
39
39
|
});
|
|
40
40
|
await cacheInstance.delete("user:1");
|
|
41
41
|
const deletedUser = await cacheInstance.get("user:1");
|
|
42
|
-
|
|
42
|
+
expect(deletedUser).toBeUndefined();
|
|
43
43
|
});
|
|
44
44
|
it("should handle concurrent operations", async () => {
|
|
45
45
|
const operations = [
|
|
@@ -53,7 +53,7 @@ describe("Cache Integration Tests", () => {
|
|
|
53
53
|
cacheInstance.get("key2"),
|
|
54
54
|
cacheInstance.get("key3")
|
|
55
55
|
]);
|
|
56
|
-
|
|
56
|
+
expect(results).toEqual([
|
|
57
57
|
"value1",
|
|
58
58
|
"value2",
|
|
59
59
|
"value3"
|
|
@@ -74,25 +74,25 @@ describe("Cache Integration Tests", () => {
|
|
|
74
74
|
};
|
|
75
75
|
await Promise.all(Object.entries(testData).map(([key, value]) => cacheInstance.set(key, value)));
|
|
76
76
|
const results = await Promise.all(Object.keys(testData).map((key) => cacheInstance.get(key)));
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
77
|
+
expect(results[0]).toBe("hello");
|
|
78
|
+
expect(results[1]).toBe(42);
|
|
79
|
+
expect(results[2]).toBe(true);
|
|
80
|
+
expect(results[3]).toEqual({ nested: true });
|
|
81
|
+
expect(results[4]).toEqual([
|
|
82
82
|
1,
|
|
83
83
|
2,
|
|
84
84
|
3
|
|
85
85
|
]);
|
|
86
|
-
|
|
86
|
+
expect(results[5]).toBeNull();
|
|
87
87
|
});
|
|
88
88
|
it("should handle key isolation", async () => {
|
|
89
89
|
await cacheInstance.set("user:1", "User One");
|
|
90
90
|
await cacheInstance.set("user:2", "User Two");
|
|
91
91
|
await cacheInstance.set("session:1", "Session One");
|
|
92
92
|
await cacheInstance.delete("user:1");
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
expect(await cacheInstance.get("user:1")).toBeUndefined();
|
|
94
|
+
expect(await cacheInstance.get("user:2")).toBe("User Two");
|
|
95
|
+
expect(await cacheInstance.get("session:1")).toBe("Session One");
|
|
96
96
|
});
|
|
97
97
|
});
|
|
98
98
|
});
|
|
@@ -123,7 +123,7 @@ describe("Cache Integration Tests", () => {
|
|
|
123
123
|
}
|
|
124
124
|
for (const [key, expectedValue] of Object.entries(testData)) {
|
|
125
125
|
const migratedValue = await targetCache.get(key);
|
|
126
|
-
|
|
126
|
+
expect(migratedValue).toEqual(expectedValue);
|
|
127
127
|
}
|
|
128
128
|
});
|
|
129
129
|
});
|
|
@@ -142,11 +142,11 @@ describe("Cache Integration Tests", () => {
|
|
|
142
142
|
name: "John"
|
|
143
143
|
});
|
|
144
144
|
await sessionCache.set("session:abc", "active");
|
|
145
|
-
|
|
145
|
+
expect(await userCache.get("user:1")).toEqual({
|
|
146
146
|
id: 1,
|
|
147
147
|
name: "John"
|
|
148
148
|
});
|
|
149
|
-
|
|
149
|
+
expect(await sessionCache.get("session:abc")).toBe("active");
|
|
150
150
|
});
|
|
151
151
|
it("should support cache wrapper pattern", async () => {
|
|
152
152
|
class LoggingCache {
|
|
@@ -176,7 +176,7 @@ describe("Cache Integration Tests", () => {
|
|
|
176
176
|
await loggingCache.get("test");
|
|
177
177
|
await loggingCache.delete("test");
|
|
178
178
|
const logs = loggingCache.getLogs();
|
|
179
|
-
|
|
179
|
+
expect(logs).toEqual([
|
|
180
180
|
"SET test",
|
|
181
181
|
"GET test",
|
|
182
182
|
"DELETE test"
|
|
@@ -191,11 +191,11 @@ describe("Cache Integration Tests", () => {
|
|
|
191
191
|
await Promise.all(insertPromises);
|
|
192
192
|
const readPromises = Array.from({ length: operationCount }, (_, i) => cache.get(`key:${i}`));
|
|
193
193
|
const results = await Promise.all(readPromises);
|
|
194
|
-
for (let i = 0; i < operationCount; i++)
|
|
194
|
+
for (let i = 0; i < operationCount; i++) expect(results[i]).toBe(i);
|
|
195
195
|
const deletePromises = Array.from({ length: operationCount }, (_, i) => cache.delete(`key:${i}`));
|
|
196
196
|
await Promise.all(deletePromises);
|
|
197
197
|
const postDeleteRead = await cache.get("key:0");
|
|
198
|
-
|
|
198
|
+
expect(postDeleteRead).toBeUndefined();
|
|
199
199
|
});
|
|
200
200
|
it("should handle large objects efficiently", async () => {
|
|
201
201
|
const cache = new InMemoryCache();
|
|
@@ -214,19 +214,19 @@ describe("Cache Integration Tests", () => {
|
|
|
214
214
|
await cache.set("large-object", largeObject);
|
|
215
215
|
const result = await cache.get("large-object");
|
|
216
216
|
const endTime = Date.now();
|
|
217
|
-
|
|
218
|
-
|
|
217
|
+
expect(result).toEqual(largeObject);
|
|
218
|
+
expect(endTime - startTime).toBeLessThan(100);
|
|
219
219
|
});
|
|
220
220
|
});
|
|
221
221
|
describe("error scenarios", () => {
|
|
222
222
|
it("should handle operations after errors gracefully", async () => {
|
|
223
223
|
const cache = new InMemoryCache();
|
|
224
224
|
await cache.set("valid-key", "valid-value");
|
|
225
|
-
|
|
225
|
+
expect(await cache.get("valid-key")).toBe("valid-value");
|
|
226
226
|
await cache.set("another-key", "another-value");
|
|
227
|
-
|
|
227
|
+
expect(await cache.get("another-key")).toBe("another-value");
|
|
228
228
|
await cache.delete("valid-key");
|
|
229
|
-
|
|
229
|
+
expect(await cache.get("valid-key")).toBeUndefined();
|
|
230
230
|
});
|
|
231
231
|
});
|
|
232
232
|
});
|
|
@@ -1,23 +1,24 @@
|
|
|
1
|
+
const require_chunk = require('../chunk-CUT6urMc.cjs');
|
|
1
2
|
const require_memory = require('../memory-n6Iosq6J.cjs');
|
|
2
|
-
const
|
|
3
|
+
const vitest = require_chunk.__toESM(require("vitest"));
|
|
3
4
|
|
|
4
5
|
//#region src/__tests__/memory.spec.ts
|
|
5
|
-
|
|
6
|
+
(0, vitest.describe)("InMemoryCache", () => {
|
|
6
7
|
let cache;
|
|
7
|
-
|
|
8
|
+
(0, vitest.beforeEach)(() => {
|
|
8
9
|
cache = new require_memory.InMemoryCache();
|
|
9
10
|
});
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
(0, vitest.describe)("get", () => {
|
|
12
|
+
(0, vitest.it)("should return undefined for non-existent key", async () => {
|
|
12
13
|
const result = await cache.get("non-existent");
|
|
13
|
-
|
|
14
|
+
(0, vitest.expect)(result).toBeUndefined();
|
|
14
15
|
});
|
|
15
|
-
|
|
16
|
+
(0, vitest.it)("should return value for existing key", async () => {
|
|
16
17
|
await cache.set("test-key", "test-value");
|
|
17
18
|
const result = await cache.get("test-key");
|
|
18
|
-
|
|
19
|
+
(0, vitest.expect)(result).toBe("test-value");
|
|
19
20
|
});
|
|
20
|
-
|
|
21
|
+
(0, vitest.it)("should handle different data types", async () => {
|
|
21
22
|
const objectValue = {
|
|
22
23
|
id: 1,
|
|
23
24
|
name: "test"
|
|
@@ -33,91 +34,91 @@ require_vi_DgezovHB.describe("InMemoryCache", () => {
|
|
|
33
34
|
await cache.set("array", arrayValue);
|
|
34
35
|
await cache.set("number", numberValue);
|
|
35
36
|
await cache.set("boolean", booleanValue);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
(0, vitest.expect)(await cache.get("object")).toEqual(objectValue);
|
|
38
|
+
(0, vitest.expect)(await cache.get("array")).toEqual(arrayValue);
|
|
39
|
+
(0, vitest.expect)(await cache.get("number")).toBe(numberValue);
|
|
40
|
+
(0, vitest.expect)(await cache.get("boolean")).toBe(booleanValue);
|
|
40
41
|
});
|
|
41
42
|
});
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
(0, vitest.describe)("set", () => {
|
|
44
|
+
(0, vitest.it)("should store string value", async () => {
|
|
44
45
|
await cache.set("string-key", "string-value");
|
|
45
46
|
const result = await cache.get("string-key");
|
|
46
|
-
|
|
47
|
+
(0, vitest.expect)(result).toBe("string-value");
|
|
47
48
|
});
|
|
48
|
-
|
|
49
|
+
(0, vitest.it)("should store object value", async () => {
|
|
49
50
|
const value = {
|
|
50
51
|
id: 1,
|
|
51
52
|
data: "test"
|
|
52
53
|
};
|
|
53
54
|
await cache.set("object-key", value);
|
|
54
55
|
const result = await cache.get("object-key");
|
|
55
|
-
|
|
56
|
+
(0, vitest.expect)(result).toEqual(value);
|
|
56
57
|
});
|
|
57
|
-
|
|
58
|
+
(0, vitest.it)("should overwrite existing value", async () => {
|
|
58
59
|
await cache.set("key", "initial-value");
|
|
59
60
|
await cache.set("key", "updated-value");
|
|
60
61
|
const result = await cache.get("key");
|
|
61
|
-
|
|
62
|
+
(0, vitest.expect)(result).toBe("updated-value");
|
|
62
63
|
});
|
|
63
|
-
|
|
64
|
+
(0, vitest.it)("should handle null values", async () => {
|
|
64
65
|
await cache.set("null-key", null);
|
|
65
66
|
const result = await cache.get("null-key");
|
|
66
|
-
|
|
67
|
+
(0, vitest.expect)(result).toBeNull();
|
|
67
68
|
});
|
|
68
69
|
});
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
(0, vitest.describe)("delete", () => {
|
|
71
|
+
(0, vitest.it)("should remove existing key", async () => {
|
|
71
72
|
await cache.set("to-delete", "value");
|
|
72
73
|
await cache.delete("to-delete");
|
|
73
74
|
const result = await cache.get("to-delete");
|
|
74
|
-
|
|
75
|
+
(0, vitest.expect)(result).toBeUndefined();
|
|
75
76
|
});
|
|
76
|
-
|
|
77
|
-
await
|
|
77
|
+
(0, vitest.it)("should not throw error for non-existent key", async () => {
|
|
78
|
+
await (0, vitest.expect)(cache.delete("non-existent")).resolves.not.toThrow();
|
|
78
79
|
});
|
|
79
|
-
|
|
80
|
+
(0, vitest.it)("should only delete specified key", async () => {
|
|
80
81
|
await cache.set("key1", "value1");
|
|
81
82
|
await cache.set("key2", "value2");
|
|
82
83
|
await cache.delete("key1");
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
(0, vitest.expect)(await cache.get("key1")).toBeUndefined();
|
|
85
|
+
(0, vitest.expect)(await cache.get("key2")).toBe("value2");
|
|
85
86
|
});
|
|
86
87
|
});
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
(0, vitest.describe)("multiple operations", () => {
|
|
89
|
+
(0, vitest.it)("should handle multiple keys independently", async () => {
|
|
89
90
|
await cache.set("key1", "value1");
|
|
90
91
|
await cache.set("key2", "value2");
|
|
91
92
|
await cache.set("key3", "value3");
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
(0, vitest.expect)(await cache.get("key1")).toBe("value1");
|
|
94
|
+
(0, vitest.expect)(await cache.get("key2")).toBe("value2");
|
|
95
|
+
(0, vitest.expect)(await cache.get("key3")).toBe("value3");
|
|
95
96
|
});
|
|
96
|
-
|
|
97
|
+
(0, vitest.it)("should maintain data integrity across operations", async () => {
|
|
97
98
|
const data = { count: 0 };
|
|
98
99
|
await cache.set("counter", data);
|
|
99
100
|
const retrieved = await cache.get("counter");
|
|
100
101
|
retrieved.count = 5;
|
|
101
102
|
const original = await cache.get("counter");
|
|
102
|
-
|
|
103
|
+
(0, vitest.expect)(original.count).toBe(5);
|
|
103
104
|
});
|
|
104
105
|
});
|
|
105
|
-
|
|
106
|
-
|
|
106
|
+
(0, vitest.describe)("edge cases", () => {
|
|
107
|
+
(0, vitest.it)("should handle empty string as key", async () => {
|
|
107
108
|
await cache.set("", "empty-key-value");
|
|
108
109
|
const result = await cache.get("");
|
|
109
|
-
|
|
110
|
+
(0, vitest.expect)(result).toBe("empty-key-value");
|
|
110
111
|
});
|
|
111
|
-
|
|
112
|
+
(0, vitest.it)("should handle special characters in keys", async () => {
|
|
112
113
|
const specialKey = "key!@#$%^&*()_+{}|:\"<>?[]\\;',./?`~";
|
|
113
114
|
await cache.set(specialKey, "special-value");
|
|
114
115
|
const result = await cache.get(specialKey);
|
|
115
|
-
|
|
116
|
+
(0, vitest.expect)(result).toBe("special-value");
|
|
116
117
|
});
|
|
117
|
-
|
|
118
|
+
(0, vitest.it)("should handle undefined values", async () => {
|
|
118
119
|
await cache.set("undefined-key", void 0);
|
|
119
120
|
const result = await cache.get("undefined-key");
|
|
120
|
-
|
|
121
|
+
(0, vitest.expect)(result).toBeUndefined();
|
|
121
122
|
});
|
|
122
123
|
});
|
|
123
124
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|