@voidhash/mimic-effect 0.0.8 → 1.0.0-beta.1
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/.turbo/turbo-build.log +93 -89
- package/README.md +385 -0
- package/dist/ColdStorage.cjs +60 -0
- package/dist/ColdStorage.d.cts +53 -0
- package/dist/ColdStorage.d.cts.map +1 -0
- package/dist/ColdStorage.d.mts +53 -0
- package/dist/ColdStorage.d.mts.map +1 -0
- package/dist/ColdStorage.mjs +60 -0
- package/dist/ColdStorage.mjs.map +1 -0
- package/dist/DocumentManager.cjs +193 -82
- package/dist/DocumentManager.d.cts +33 -19
- package/dist/DocumentManager.d.cts.map +1 -1
- package/dist/DocumentManager.d.mts +33 -19
- package/dist/DocumentManager.d.mts.map +1 -1
- package/dist/DocumentManager.mjs +189 -67
- package/dist/DocumentManager.mjs.map +1 -1
- package/dist/Errors.cjs +45 -0
- package/dist/Errors.d.cts +81 -0
- package/dist/Errors.d.cts.map +1 -0
- package/dist/Errors.d.mts +81 -0
- package/dist/Errors.d.mts.map +1 -0
- package/dist/Errors.mjs +40 -0
- package/dist/Errors.mjs.map +1 -0
- package/dist/HotStorage.cjs +77 -0
- package/dist/HotStorage.d.cts +54 -0
- package/dist/HotStorage.d.cts.map +1 -0
- package/dist/HotStorage.d.mts +54 -0
- package/dist/HotStorage.d.mts.map +1 -0
- package/dist/HotStorage.mjs +77 -0
- package/dist/HotStorage.mjs.map +1 -0
- package/dist/Metrics.cjs +121 -0
- package/dist/Metrics.d.cts +27 -0
- package/dist/Metrics.d.cts.map +1 -0
- package/dist/Metrics.d.mts +27 -0
- package/dist/Metrics.d.mts.map +1 -0
- package/dist/Metrics.mjs +106 -0
- package/dist/Metrics.mjs.map +1 -0
- package/dist/MimicAuthService.cjs +61 -45
- package/dist/MimicAuthService.d.cts +61 -48
- package/dist/MimicAuthService.d.cts.map +1 -1
- package/dist/MimicAuthService.d.mts +61 -48
- package/dist/MimicAuthService.d.mts.map +1 -1
- package/dist/MimicAuthService.mjs +60 -36
- package/dist/MimicAuthService.mjs.map +1 -1
- package/dist/MimicClusterServerEngine.cjs +443 -0
- package/dist/MimicClusterServerEngine.d.cts +17 -0
- package/dist/MimicClusterServerEngine.d.cts.map +1 -0
- package/dist/MimicClusterServerEngine.d.mts +17 -0
- package/dist/MimicClusterServerEngine.d.mts.map +1 -0
- package/dist/MimicClusterServerEngine.mjs +445 -0
- package/dist/MimicClusterServerEngine.mjs.map +1 -0
- package/dist/MimicServer.cjs +205 -96
- package/dist/MimicServer.d.cts +9 -110
- package/dist/MimicServer.d.cts.map +1 -1
- package/dist/MimicServer.d.mts +9 -110
- package/dist/MimicServer.d.mts.map +1 -1
- package/dist/MimicServer.mjs +206 -90
- package/dist/MimicServer.mjs.map +1 -1
- package/dist/MimicServerEngine.cjs +97 -0
- package/dist/MimicServerEngine.d.cts +75 -0
- package/dist/MimicServerEngine.d.cts.map +1 -0
- package/dist/MimicServerEngine.d.mts +75 -0
- package/dist/MimicServerEngine.d.mts.map +1 -0
- package/dist/MimicServerEngine.mjs +97 -0
- package/dist/MimicServerEngine.mjs.map +1 -0
- package/dist/PresenceManager.cjs +75 -91
- package/dist/PresenceManager.d.cts +17 -66
- package/dist/PresenceManager.d.cts.map +1 -1
- package/dist/PresenceManager.d.mts +17 -66
- package/dist/PresenceManager.d.mts.map +1 -1
- package/dist/PresenceManager.mjs +74 -78
- package/dist/PresenceManager.mjs.map +1 -1
- package/dist/Protocol.cjs +146 -0
- package/dist/Protocol.d.cts +203 -0
- package/dist/Protocol.d.cts.map +1 -0
- package/dist/Protocol.d.mts +203 -0
- package/dist/Protocol.d.mts.map +1 -0
- package/dist/Protocol.mjs +132 -0
- package/dist/Protocol.mjs.map +1 -0
- package/dist/Types.d.cts +172 -0
- package/dist/Types.d.cts.map +1 -0
- package/dist/Types.d.mts +172 -0
- package/dist/Types.d.mts.map +1 -0
- package/dist/_virtual/rolldown_runtime.cjs +1 -25
- package/dist/_virtual/rolldown_runtime.mjs +4 -1
- package/dist/index.cjs +37 -75
- package/dist/index.d.cts +13 -12
- package/dist/index.d.mts +13 -12
- package/dist/index.mjs +12 -12
- package/package.json +14 -6
- package/src/ColdStorage.ts +136 -0
- package/src/DocumentManager.ts +445 -193
- package/src/Errors.ts +100 -0
- package/src/HotStorage.ts +165 -0
- package/src/Metrics.ts +163 -0
- package/src/MimicAuthService.ts +126 -64
- package/src/MimicClusterServerEngine.ts +824 -0
- package/src/MimicServer.ts +448 -195
- package/src/MimicServerEngine.ts +272 -0
- package/src/PresenceManager.ts +169 -240
- package/src/Protocol.ts +350 -0
- package/src/Types.ts +231 -0
- package/src/index.ts +57 -23
- package/tests/ColdStorage.test.ts +136 -0
- package/tests/DocumentManager.test.ts +158 -287
- package/tests/HotStorage.test.ts +143 -0
- package/tests/MimicAuthService.test.ts +102 -134
- package/tests/MimicClusterServerEngine.test.ts +587 -0
- package/tests/MimicServer.test.ts +90 -226
- package/tests/MimicServerEngine.test.ts +521 -0
- package/tests/PresenceManager.test.ts +22 -63
- package/tests/Protocol.test.ts +190 -0
- package/tsconfig.json +1 -1
- package/dist/DocumentProtocol.cjs +0 -94
- package/dist/DocumentProtocol.d.cts +0 -113
- package/dist/DocumentProtocol.d.cts.map +0 -1
- package/dist/DocumentProtocol.d.mts +0 -113
- package/dist/DocumentProtocol.d.mts.map +0 -1
- package/dist/DocumentProtocol.mjs +0 -89
- package/dist/DocumentProtocol.mjs.map +0 -1
- package/dist/MimicConfig.cjs +0 -60
- package/dist/MimicConfig.d.cts +0 -141
- package/dist/MimicConfig.d.cts.map +0 -1
- package/dist/MimicConfig.d.mts +0 -141
- package/dist/MimicConfig.d.mts.map +0 -1
- package/dist/MimicConfig.mjs +0 -50
- package/dist/MimicConfig.mjs.map +0 -1
- package/dist/MimicDataStorage.cjs +0 -83
- package/dist/MimicDataStorage.d.cts +0 -113
- package/dist/MimicDataStorage.d.cts.map +0 -1
- package/dist/MimicDataStorage.d.mts +0 -113
- package/dist/MimicDataStorage.d.mts.map +0 -1
- package/dist/MimicDataStorage.mjs +0 -74
- package/dist/MimicDataStorage.mjs.map +0 -1
- package/dist/WebSocketHandler.cjs +0 -365
- package/dist/WebSocketHandler.d.cts +0 -34
- package/dist/WebSocketHandler.d.cts.map +0 -1
- package/dist/WebSocketHandler.d.mts +0 -34
- package/dist/WebSocketHandler.d.mts.map +0 -1
- package/dist/WebSocketHandler.mjs +0 -355
- package/dist/WebSocketHandler.mjs.map +0 -1
- package/dist/auth/NoAuth.cjs +0 -43
- package/dist/auth/NoAuth.d.cts +0 -22
- package/dist/auth/NoAuth.d.cts.map +0 -1
- package/dist/auth/NoAuth.d.mts +0 -22
- package/dist/auth/NoAuth.d.mts.map +0 -1
- package/dist/auth/NoAuth.mjs +0 -36
- package/dist/auth/NoAuth.mjs.map +0 -1
- package/dist/errors.cjs +0 -74
- package/dist/errors.d.cts +0 -89
- package/dist/errors.d.cts.map +0 -1
- package/dist/errors.d.mts +0 -89
- package/dist/errors.d.mts.map +0 -1
- package/dist/errors.mjs +0 -67
- package/dist/errors.mjs.map +0 -1
- package/dist/storage/InMemoryDataStorage.cjs +0 -57
- package/dist/storage/InMemoryDataStorage.d.cts +0 -19
- package/dist/storage/InMemoryDataStorage.d.cts.map +0 -1
- package/dist/storage/InMemoryDataStorage.d.mts +0 -19
- package/dist/storage/InMemoryDataStorage.d.mts.map +0 -1
- package/dist/storage/InMemoryDataStorage.mjs +0 -48
- package/dist/storage/InMemoryDataStorage.mjs.map +0 -1
- package/src/DocumentProtocol.ts +0 -112
- package/src/MimicConfig.ts +0 -211
- package/src/MimicDataStorage.ts +0 -157
- package/src/WebSocketHandler.ts +0 -735
- package/src/auth/NoAuth.ts +0 -46
- package/src/errors.ts +0 -113
- package/src/storage/InMemoryDataStorage.ts +0 -66
- package/tests/DocumentProtocol.test.ts +0 -113
- package/tests/InMemoryDataStorage.test.ts +0 -190
- package/tests/MimicConfig.test.ts +0 -290
- package/tests/MimicDataStorage.test.ts +0 -190
- package/tests/NoAuth.test.ts +0 -94
- package/tests/WebSocketHandler.test.ts +0 -321
- package/tests/errors.test.ts +0 -77
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { Effect, Layer } from "effect";
|
|
3
|
+
import { ColdStorage, ColdStorageTag } from "../src/ColdStorage";
|
|
4
|
+
import type { StoredDocument } from "../src/Types";
|
|
5
|
+
|
|
6
|
+
describe("ColdStorage", () => {
|
|
7
|
+
describe("InMemory", () => {
|
|
8
|
+
const layer = ColdStorage.InMemory.make();
|
|
9
|
+
|
|
10
|
+
it("should return undefined for missing document", async () => {
|
|
11
|
+
const result = await Effect.runPromise(
|
|
12
|
+
Effect.gen(function* () {
|
|
13
|
+
const storage = yield* ColdStorageTag;
|
|
14
|
+
return yield* storage.load("non-existent");
|
|
15
|
+
}).pipe(Effect.provide(layer))
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
expect(result).toBeUndefined();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it("should save and load document", async () => {
|
|
22
|
+
const doc: StoredDocument = {
|
|
23
|
+
state: { title: "Test", count: 42 },
|
|
24
|
+
version: 5,
|
|
25
|
+
schemaVersion: 1,
|
|
26
|
+
savedAt: Date.now(),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const result = await Effect.runPromise(
|
|
30
|
+
Effect.gen(function* () {
|
|
31
|
+
const storage = yield* ColdStorageTag;
|
|
32
|
+
yield* storage.save("doc-1", doc);
|
|
33
|
+
return yield* storage.load("doc-1");
|
|
34
|
+
}).pipe(Effect.provide(layer))
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
expect(result).toEqual(doc);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("should update existing document", async () => {
|
|
41
|
+
const doc1: StoredDocument = {
|
|
42
|
+
state: { title: "First" },
|
|
43
|
+
version: 1,
|
|
44
|
+
schemaVersion: 1,
|
|
45
|
+
savedAt: Date.now(),
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const doc2: StoredDocument = {
|
|
49
|
+
state: { title: "Second" },
|
|
50
|
+
version: 2,
|
|
51
|
+
schemaVersion: 1,
|
|
52
|
+
savedAt: Date.now(),
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const result = await Effect.runPromise(
|
|
56
|
+
Effect.gen(function* () {
|
|
57
|
+
const storage = yield* ColdStorageTag;
|
|
58
|
+
yield* storage.save("doc-1", doc1);
|
|
59
|
+
yield* storage.save("doc-1", doc2);
|
|
60
|
+
return yield* storage.load("doc-1");
|
|
61
|
+
}).pipe(Effect.provide(layer))
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
expect(result).toEqual(doc2);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("should delete document", async () => {
|
|
68
|
+
const doc: StoredDocument = {
|
|
69
|
+
state: { title: "To Delete" },
|
|
70
|
+
version: 1,
|
|
71
|
+
schemaVersion: 1,
|
|
72
|
+
savedAt: Date.now(),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const result = await Effect.runPromise(
|
|
76
|
+
Effect.gen(function* () {
|
|
77
|
+
const storage = yield* ColdStorageTag;
|
|
78
|
+
yield* storage.save("doc-1", doc);
|
|
79
|
+
yield* storage.delete("doc-1");
|
|
80
|
+
return yield* storage.load("doc-1");
|
|
81
|
+
}).pipe(Effect.provide(layer))
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
expect(result).toBeUndefined();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it("should handle multiple documents independently", async () => {
|
|
88
|
+
const doc1: StoredDocument = {
|
|
89
|
+
state: { title: "Doc 1" },
|
|
90
|
+
version: 1,
|
|
91
|
+
schemaVersion: 1,
|
|
92
|
+
savedAt: Date.now(),
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const doc2: StoredDocument = {
|
|
96
|
+
state: { title: "Doc 2" },
|
|
97
|
+
version: 2,
|
|
98
|
+
schemaVersion: 1,
|
|
99
|
+
savedAt: Date.now(),
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const result = await Effect.runPromise(
|
|
103
|
+
Effect.gen(function* () {
|
|
104
|
+
const storage = yield* ColdStorageTag;
|
|
105
|
+
yield* storage.save("doc-1", doc1);
|
|
106
|
+
yield* storage.save("doc-2", doc2);
|
|
107
|
+
|
|
108
|
+
const loaded1 = yield* storage.load("doc-1");
|
|
109
|
+
const loaded2 = yield* storage.load("doc-2");
|
|
110
|
+
|
|
111
|
+
return { loaded1, loaded2 };
|
|
112
|
+
}).pipe(Effect.provide(layer))
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
expect(result.loaded1).toEqual(doc1);
|
|
116
|
+
expect(result.loaded2).toEqual(doc2);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it("should not error when deleting non-existent document", async () => {
|
|
120
|
+
await expect(
|
|
121
|
+
Effect.runPromise(
|
|
122
|
+
Effect.gen(function* () {
|
|
123
|
+
const storage = yield* ColdStorageTag;
|
|
124
|
+
yield* storage.delete("non-existent");
|
|
125
|
+
}).pipe(Effect.provide(layer))
|
|
126
|
+
)
|
|
127
|
+
).resolves.toBeUndefined();
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
describe("Tag", () => {
|
|
132
|
+
it("should have correct identifier", () => {
|
|
133
|
+
expect(ColdStorageTag.key).toBe("@voidhash/mimic-effect/ColdStorage");
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
});
|