@voidhash/mimic-effect 1.0.0-beta.7 → 1.0.0-beta.8
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 +94 -94
- package/dist/DocumentInstance.cjs +255 -0
- package/dist/DocumentInstance.d.cts +74 -0
- package/dist/DocumentInstance.d.cts.map +1 -0
- package/dist/DocumentInstance.d.mts +74 -0
- package/dist/DocumentInstance.d.mts.map +1 -0
- package/dist/DocumentInstance.mjs +256 -0
- package/dist/DocumentInstance.mjs.map +1 -0
- package/dist/MimicClusterServerEngine.cjs +19 -203
- package/dist/MimicClusterServerEngine.d.cts.map +1 -1
- package/dist/MimicClusterServerEngine.d.mts.map +1 -1
- package/dist/MimicClusterServerEngine.mjs +24 -208
- package/dist/MimicClusterServerEngine.mjs.map +1 -1
- package/dist/MimicServerEngine.cjs +72 -10
- package/dist/MimicServerEngine.d.cts +12 -7
- package/dist/MimicServerEngine.d.cts.map +1 -1
- package/dist/MimicServerEngine.d.mts +12 -7
- package/dist/MimicServerEngine.d.mts.map +1 -1
- package/dist/MimicServerEngine.mjs +74 -12
- package/dist/MimicServerEngine.mjs.map +1 -1
- package/dist/Protocol.d.cts +1 -1
- package/dist/Protocol.d.mts +1 -1
- package/dist/index.cjs +2 -4
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +3 -3
- package/src/DocumentInstance.ts +510 -0
- package/src/MimicClusterServerEngine.ts +40 -357
- package/src/MimicServerEngine.ts +172 -36
- package/src/index.ts +3 -4
- package/tests/DocumentInstance.test.ts +669 -0
- package/dist/DocumentManager.cjs +0 -299
- package/dist/DocumentManager.d.cts +0 -67
- package/dist/DocumentManager.d.cts.map +0 -1
- package/dist/DocumentManager.d.mts +0 -67
- package/dist/DocumentManager.d.mts.map +0 -1
- package/dist/DocumentManager.mjs +0 -297
- package/dist/DocumentManager.mjs.map +0 -1
- package/src/DocumentManager.ts +0 -616
- package/tests/DocumentManager.test.ts +0 -335
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @voidhash/mimic-effect@1.0.0-beta.
|
|
2
|
+
> @voidhash/mimic-effect@1.0.0-beta.8 build /home/runner/work/mimic/mimic/packages/mimic-effect
|
|
3
3
|
> tsdown
|
|
4
4
|
|
|
5
5
|
[34mℹ[39m tsdown [2mv0.18.2[22m powered by rolldown [2mv1.0.0-beta.55[22m
|
|
@@ -8,17 +8,17 @@
|
|
|
8
8
|
[34mℹ[39m target: [34mes2017[39m
|
|
9
9
|
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
10
10
|
[34mℹ[39m Build start
|
|
11
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[1mindex.cjs[22m [2m 2.
|
|
11
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[1mindex.cjs[22m [2m 2.28 kB[22m [2m│ gzip: 0.49 kB[22m
|
|
12
12
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[1mtesting/index.cjs[22m [2m 0.95 kB[22m [2m│ gzip: 0.22 kB[22m
|
|
13
13
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/HotStorageTestSuite.cjs [2m38.03 kB[22m [2m│ gzip: 5.13 kB[22m
|
|
14
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicClusterServerEngine.cjs [2m21.95 kB[22m [2m│ gzip: 5.00 kB[22m
|
|
15
14
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.cjs [2m20.68 kB[22m [2m│ gzip: 3.67 kB[22m
|
|
16
15
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/ColdStorageTestSuite.cjs [2m18.14 kB[22m [2m│ gzip: 3.22 kB[22m
|
|
17
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
16
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicClusterServerEngine.cjs [2m14.18 kB[22m [2m│ gzip: 3.37 kB[22m
|
|
18
17
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServer.cjs [2m10.37 kB[22m [2m│ gzip: 2.84 kB[22m
|
|
18
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mDocumentInstance.cjs [2m10.23 kB[22m [2m│ gzip: 2.70 kB[22m
|
|
19
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServerEngine.cjs [2m 7.09 kB[22m [2m│ gzip: 2.03 kB[22m
|
|
19
20
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/FailingStorage.cjs [2m 6.91 kB[22m [2m│ gzip: 1.53 kB[22m
|
|
20
21
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMetrics.cjs [2m 4.26 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
21
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServerEngine.cjs [2m 4.26 kB[22m [2m│ gzip: 1.36 kB[22m
|
|
22
22
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mHotStorage.cjs [2m 3.86 kB[22m [2m│ gzip: 1.27 kB[22m
|
|
23
23
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mPresenceManager.cjs [2m 3.81 kB[22m [2m│ gzip: 1.03 kB[22m
|
|
24
24
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mProtocol.cjs [2m 3.78 kB[22m [2m│ gzip: 1.14 kB[22m
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.cjs [2m 0.37 kB[22m [2m│ gzip: 0.23 kB[22m
|
|
34
34
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m_virtual/rolldown_runtime.cjs [2m 0.36 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
35
35
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/types.cjs [2m 0.34 kB[22m [2m│ gzip: 0.23 kB[22m
|
|
36
|
-
[34mℹ[39m [33m[CJS][39m 25 files, total:
|
|
36
|
+
[34mℹ[39m [33m[CJS][39m 25 files, total: 158.11 kB
|
|
37
37
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mProtocol.d.cts.map [2m1.57 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
38
38
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mTypes.d.cts.map [2m1.41 kB[22m [2m│ gzip: 0.65 kB[22m
|
|
39
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
39
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mDocumentInstance.d.cts.map [2m1.18 kB[22m [2m│ gzip: 0.54 kB[22m
|
|
40
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServerEngine.d.cts.map [2m0.97 kB[22m [2m│ gzip: 0.49 kB[22m
|
|
40
41
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mColdStorage.d.cts.map [2m0.70 kB[22m [2m│ gzip: 0.37 kB[22m
|
|
41
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22mDocumentManager.d.cts.map [2m0.69 kB[22m [2m│ gzip: 0.38 kB[22m
|
|
42
42
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mHotStorage.d.cts.map [2m0.67 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
43
43
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicAuthService.d.cts.map [2m0.61 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
44
44
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mErrors.d.cts.map [2m0.60 kB[22m [2m│ gzip: 0.32 kB[22m
|
|
@@ -51,14 +51,14 @@
|
|
|
51
51
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicClusterServerEngine.d.cts.map [2m0.25 kB[22m [2m│ gzip: 0.19 kB[22m
|
|
52
52
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServer.d.cts.map [2m0.22 kB[22m [2m│ gzip: 0.16 kB[22m
|
|
53
53
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMetrics.d.cts.map [2m0.12 kB[22m [2m│ gzip: 0.12 kB[22m
|
|
54
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32m[1mindex.d.cts[22m[39m [2m2.
|
|
54
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32m[1mindex.d.cts[22m[39m [2m2.14 kB[22m [2m│ gzip: 0.53 kB[22m
|
|
55
55
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32m[1mtesting/index.d.cts[22m[39m [2m0.91 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
56
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mProtocol.d.cts[39m [2m5.
|
|
56
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mProtocol.d.cts[39m [2m5.84 kB[22m [2m│ gzip: 1.34 kB[22m
|
|
57
57
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mTypes.d.cts[39m [2m5.47 kB[22m [2m│ gzip: 1.54 kB[22m
|
|
58
58
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mErrors.d.cts[39m [2m4.86 kB[22m [2m│ gzip: 1.02 kB[22m
|
|
59
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMimicServerEngine.d.cts[39m [2m3.
|
|
59
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMimicServerEngine.d.cts[39m [2m3.60 kB[22m [2m│ gzip: 1.09 kB[22m
|
|
60
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mDocumentInstance.d.cts[39m [2m2.81 kB[22m [2m│ gzip: 0.93 kB[22m
|
|
60
61
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mtesting/types.d.cts[39m [2m2.76 kB[22m [2m│ gzip: 1.15 kB[22m
|
|
61
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mDocumentManager.d.cts[39m [2m2.74 kB[22m [2m│ gzip: 0.84 kB[22m
|
|
62
62
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mHotStorage.d.cts[39m [2m2.72 kB[22m [2m│ gzip: 1.08 kB[22m
|
|
63
63
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMimicAuthService.d.cts[39m [2m2.70 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
64
64
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mtesting/HotStorageTestSuite.d.cts[39m [2m1.93 kB[22m [2m│ gzip: 0.57 kB[22m
|
|
@@ -70,85 +70,85 @@
|
|
|
70
70
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mtesting/StorageIntegrationTestSuite.d.cts[39m [2m1.43 kB[22m [2m│ gzip: 0.57 kB[22m
|
|
71
71
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMimicClusterServerEngine.d.cts[39m [2m0.82 kB[22m [2m│ gzip: 0.33 kB[22m
|
|
72
72
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMimicServer.d.cts[39m [2m0.74 kB[22m [2m│ gzip: 0.31 kB[22m
|
|
73
|
-
[34mℹ[39m [33m[CJS][39m 36 files, total:
|
|
74
|
-
[32m✔[39m Build complete in [
|
|
75
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[1mindex.mjs[22m [2m 1.
|
|
76
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[1mtesting/index.mjs[22m [2m 0.60 kB[22m [2m│ gzip:
|
|
77
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/HotStorageTestSuite.mjs.map [2m63.42 kB[22m [2m│ gzip:
|
|
78
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
79
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/
|
|
80
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/
|
|
81
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
82
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
83
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServer.mjs.map [2m21.35 kB[22m [2m│ gzip:
|
|
84
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
85
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/
|
|
86
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
87
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/FailingStorage.mjs.map [2m15.60 kB[22m [2m│ gzip:
|
|
88
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
89
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.mjs.map [2m10.81 kB[22m [2m│ gzip:
|
|
90
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
91
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
92
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs.map [2m 9.38 kB[22m [2m│ gzip:
|
|
93
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.mjs.map [2m 9.18 kB[22m [2m│ gzip:
|
|
94
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs.map [2m 7.31 kB[22m [2m│ gzip:
|
|
95
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
96
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
97
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
98
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
99
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
100
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.mjs.map [2m 4.00 kB[22m [2m│ gzip:
|
|
101
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.mjs [2m 3.73 kB[22m [2m│ gzip:
|
|
102
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMetrics.mjs [2m 3.63 kB[22m [2m│ gzip:
|
|
103
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs [2m 3.48 kB[22m [2m│ gzip:
|
|
104
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs [2m 3.46 kB[22m [2m│ gzip:
|
|
105
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.mjs [2m 3.35 kB[22m [2m│ gzip:
|
|
106
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/types.mjs.map [2m 3.22 kB[22m [2m│ gzip:
|
|
107
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.mjs [2m 2.23 kB[22m [2m│ gzip:
|
|
108
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.mjs [2m 2.01 kB[22m [2m│ gzip:
|
|
109
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.mjs [2m 1.73 kB[22m [2m│ gzip:
|
|
110
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.d.mts.map [2m 1.57 kB[22m [2m│ gzip:
|
|
111
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mTypes.d.mts.map [2m 1.41 kB[22m [2m│ gzip:
|
|
112
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
113
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
114
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
115
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
116
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.d.mts.map [2m 0.67 kB[22m [2m│ gzip:
|
|
117
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.d.mts.map [2m 0.61 kB[22m [2m│ gzip:
|
|
118
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.d.mts.map [2m 0.60 kB[22m [2m│ gzip:
|
|
119
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/HotStorageTestSuite.d.mts.map [2m 0.48 kB[22m [2m│ gzip:
|
|
120
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/rolldown_runtime.mjs [2m 0.47 kB[22m [2m│ gzip:
|
|
121
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.mjs [2m 0.47 kB[22m [2m│ gzip:
|
|
122
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.d.mts.map [2m 0.45 kB[22m [2m│ gzip:
|
|
123
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.mjs [2m 0.43 kB[22m [2m│ gzip:
|
|
124
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/types.d.mts.map [2m 0.38 kB[22m [2m│ gzip:
|
|
125
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/types.mjs [2m 0.35 kB[22m [2m│ gzip:
|
|
126
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.mjs [2m 0.35 kB[22m [2m│ gzip:
|
|
127
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/ColdStorageTestSuite.d.mts.map [2m 0.35 kB[22m [2m│ gzip:
|
|
128
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.d.mts.map [2m 0.32 kB[22m [2m│ gzip:
|
|
129
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.mjs [2m 0.30 kB[22m [2m│ gzip:
|
|
130
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/FailingStorage.d.mts.map [2m 0.26 kB[22m [2m│ gzip:
|
|
131
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicClusterServerEngine.d.mts.map [2m 0.25 kB[22m [2m│ gzip:
|
|
132
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServer.d.mts.map [2m 0.22 kB[22m [2m│ gzip:
|
|
133
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMetrics.d.mts.map [2m 0.12 kB[22m [2m│ gzip:
|
|
134
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32m[1mindex.d.mts[22m[39m [2m 2.
|
|
135
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32m[1mtesting/index.d.mts[22m[39m [2m 0.91 kB[22m [2m│ gzip:
|
|
136
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mProtocol.d.mts[39m [2m 5.
|
|
137
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mTypes.d.mts[39m [2m 5.47 kB[22m [2m│ gzip:
|
|
138
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mErrors.d.mts[39m [2m 4.86 kB[22m [2m│ gzip:
|
|
139
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicServerEngine.d.mts[39m [2m 3.
|
|
140
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[
|
|
141
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[
|
|
142
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mHotStorage.d.mts[39m [2m 2.72 kB[22m [2m│ gzip:
|
|
143
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicAuthService.d.mts[39m [2m 2.70 kB[22m [2m│ gzip:
|
|
144
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/HotStorageTestSuite.d.mts[39m [2m 1.93 kB[22m [2m│ gzip:
|
|
145
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mColdStorage.d.mts[39m [2m 1.74 kB[22m [2m│ gzip:
|
|
146
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mPresenceManager.d.mts[39m [2m 1.60 kB[22m [2m│ gzip:
|
|
147
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMetrics.d.mts[39m [2m 1.59 kB[22m [2m│ gzip:
|
|
148
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/ColdStorageTestSuite.d.mts[39m [2m 1.55 kB[22m [2m│ gzip:
|
|
149
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/FailingStorage.d.mts[39m [2m 1.44 kB[22m [2m│ gzip:
|
|
150
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/StorageIntegrationTestSuite.d.mts[39m [2m 1.43 kB[22m [2m│ gzip:
|
|
151
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicClusterServerEngine.d.mts[39m [2m 0.82 kB[22m [2m│ gzip:
|
|
152
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicServer.d.mts[39m [2m 0.74 kB[22m [2m│ gzip:
|
|
153
|
-
[34mℹ[39m [34m[ESM][39m 78 files, total:
|
|
154
|
-
[32m✔[39m Build complete in [
|
|
73
|
+
[34mℹ[39m [33m[CJS][39m 36 files, total: 57.19 kB
|
|
74
|
+
[32m✔[39m Build complete in [32m6533ms[39m
|
|
75
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[1mindex.mjs[22m [2m 1.29 kB[22m [2m│ gzip: 0.34 kB[22m
|
|
76
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[1mtesting/index.mjs[22m [2m 0.60 kB[22m [2m│ gzip: 0.19 kB[22m
|
|
77
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/HotStorageTestSuite.mjs.map [2m63.42 kB[22m [2m│ gzip: 8.61 kB[22m
|
|
78
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.mjs.map [2m35.60 kB[22m [2m│ gzip: 6.44 kB[22m
|
|
79
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/HotStorageTestSuite.mjs [2m34.21 kB[22m [2m│ gzip: 5.06 kB[22m
|
|
80
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/ColdStorageTestSuite.mjs.map [2m31.92 kB[22m [2m│ gzip: 5.21 kB[22m
|
|
81
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicClusterServerEngine.mjs.map [2m27.48 kB[22m [2m│ gzip: 6.52 kB[22m
|
|
82
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mDocumentInstance.mjs.map [2m22.64 kB[22m [2m│ gzip: 5.89 kB[22m
|
|
83
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServer.mjs.map [2m21.35 kB[22m [2m│ gzip: 5.64 kB[22m
|
|
84
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.mjs [2m18.49 kB[22m [2m│ gzip: 3.63 kB[22m
|
|
85
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/ColdStorageTestSuite.mjs [2m16.50 kB[22m [2m│ gzip: 3.21 kB[22m
|
|
86
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServerEngine.mjs.map [2m16.45 kB[22m [2m│ gzip: 4.29 kB[22m
|
|
87
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/FailingStorage.mjs.map [2m15.60 kB[22m [2m│ gzip: 3.07 kB[22m
|
|
88
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicClusterServerEngine.mjs [2m13.13 kB[22m [2m│ gzip: 3.38 kB[22m
|
|
89
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.mjs.map [2m10.81 kB[22m [2m│ gzip: 3.04 kB[22m
|
|
90
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServer.mjs [2m 9.90 kB[22m [2m│ gzip: 2.88 kB[22m
|
|
91
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mDocumentInstance.mjs [2m 9.86 kB[22m [2m│ gzip: 2.72 kB[22m
|
|
92
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs.map [2m 9.38 kB[22m [2m│ gzip: 2.38 kB[22m
|
|
93
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.mjs.map [2m 9.18 kB[22m [2m│ gzip: 2.15 kB[22m
|
|
94
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs.map [2m 7.31 kB[22m [2m│ gzip: 2.01 kB[22m
|
|
95
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServerEngine.mjs [2m 6.69 kB[22m [2m│ gzip: 2.04 kB[22m
|
|
96
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/FailingStorage.mjs [2m 6.49 kB[22m [2m│ gzip: 1.52 kB[22m
|
|
97
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMetrics.mjs.map [2m 6.13 kB[22m [2m│ gzip: 1.43 kB[22m
|
|
98
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.mjs.map [2m 6.09 kB[22m [2m│ gzip: 1.85 kB[22m
|
|
99
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.mjs.map [2m 5.35 kB[22m [2m│ gzip: 1.64 kB[22m
|
|
100
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.mjs.map [2m 4.00 kB[22m [2m│ gzip: 1.05 kB[22m
|
|
101
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.mjs [2m 3.73 kB[22m [2m│ gzip: 1.27 kB[22m
|
|
102
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMetrics.mjs [2m 3.63 kB[22m [2m│ gzip: 1.01 kB[22m
|
|
103
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs [2m 3.48 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
104
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs [2m 3.46 kB[22m [2m│ gzip: 1.15 kB[22m
|
|
105
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.mjs [2m 3.35 kB[22m [2m│ gzip: 1.06 kB[22m
|
|
106
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/types.mjs.map [2m 3.22 kB[22m [2m│ gzip: 1.15 kB[22m
|
|
107
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.mjs [2m 2.23 kB[22m [2m│ gzip: 0.88 kB[22m
|
|
108
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.mjs [2m 2.01 kB[22m [2m│ gzip: 0.83 kB[22m
|
|
109
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.mjs [2m 1.73 kB[22m [2m│ gzip: 0.61 kB[22m
|
|
110
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.d.mts.map [2m 1.57 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
111
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mTypes.d.mts.map [2m 1.41 kB[22m [2m│ gzip: 0.65 kB[22m
|
|
112
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mDocumentInstance.d.mts.map [2m 1.18 kB[22m [2m│ gzip: 0.54 kB[22m
|
|
113
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServerEngine.d.mts.map [2m 0.97 kB[22m [2m│ gzip: 0.49 kB[22m
|
|
114
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.mjs [2m 0.90 kB[22m [2m│ gzip: 0.42 kB[22m
|
|
115
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.d.mts.map [2m 0.70 kB[22m [2m│ gzip: 0.37 kB[22m
|
|
116
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.d.mts.map [2m 0.67 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
117
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.d.mts.map [2m 0.61 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
118
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.d.mts.map [2m 0.60 kB[22m [2m│ gzip: 0.32 kB[22m
|
|
119
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/HotStorageTestSuite.d.mts.map [2m 0.48 kB[22m [2m│ gzip: 0.29 kB[22m
|
|
120
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/rolldown_runtime.mjs [2m 0.47 kB[22m [2m│ gzip: 0.30 kB[22m
|
|
121
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.mjs [2m 0.47 kB[22m [2m│ gzip: 0.30 kB[22m
|
|
122
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.d.mts.map [2m 0.45 kB[22m [2m│ gzip: 0.27 kB[22m
|
|
123
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.mjs [2m 0.43 kB[22m [2m│ gzip: 0.24 kB[22m
|
|
124
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/types.d.mts.map [2m 0.38 kB[22m [2m│ gzip: 0.23 kB[22m
|
|
125
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/types.mjs [2m 0.35 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
126
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.mjs [2m 0.35 kB[22m [2m│ gzip: 0.23 kB[22m
|
|
127
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/ColdStorageTestSuite.d.mts.map [2m 0.35 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
128
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.d.mts.map [2m 0.32 kB[22m [2m│ gzip: 0.21 kB[22m
|
|
129
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.mjs [2m 0.30 kB[22m [2m│ gzip: 0.21 kB[22m
|
|
130
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/FailingStorage.d.mts.map [2m 0.26 kB[22m [2m│ gzip: 0.18 kB[22m
|
|
131
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicClusterServerEngine.d.mts.map [2m 0.25 kB[22m [2m│ gzip: 0.19 kB[22m
|
|
132
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServer.d.mts.map [2m 0.22 kB[22m [2m│ gzip: 0.16 kB[22m
|
|
133
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMetrics.d.mts.map [2m 0.12 kB[22m [2m│ gzip: 0.12 kB[22m
|
|
134
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32m[1mindex.d.mts[22m[39m [2m 2.14 kB[22m [2m│ gzip: 0.53 kB[22m
|
|
135
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32m[1mtesting/index.d.mts[22m[39m [2m 0.91 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
136
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mProtocol.d.mts[39m [2m 5.84 kB[22m [2m│ gzip: 1.34 kB[22m
|
|
137
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mTypes.d.mts[39m [2m 5.47 kB[22m [2m│ gzip: 1.54 kB[22m
|
|
138
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mErrors.d.mts[39m [2m 4.86 kB[22m [2m│ gzip: 1.02 kB[22m
|
|
139
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicServerEngine.d.mts[39m [2m 3.60 kB[22m [2m│ gzip: 1.09 kB[22m
|
|
140
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mDocumentInstance.d.mts[39m [2m 2.81 kB[22m [2m│ gzip: 0.93 kB[22m
|
|
141
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/types.d.mts[39m [2m 2.76 kB[22m [2m│ gzip: 1.15 kB[22m
|
|
142
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mHotStorage.d.mts[39m [2m 2.72 kB[22m [2m│ gzip: 1.08 kB[22m
|
|
143
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicAuthService.d.mts[39m [2m 2.70 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
144
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/HotStorageTestSuite.d.mts[39m [2m 1.93 kB[22m [2m│ gzip: 0.57 kB[22m
|
|
145
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mColdStorage.d.mts[39m [2m 1.74 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
146
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mPresenceManager.d.mts[39m [2m 1.60 kB[22m [2m│ gzip: 0.63 kB[22m
|
|
147
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMetrics.d.mts[39m [2m 1.59 kB[22m [2m│ gzip: 0.39 kB[22m
|
|
148
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/ColdStorageTestSuite.d.mts[39m [2m 1.55 kB[22m [2m│ gzip: 0.50 kB[22m
|
|
149
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/FailingStorage.d.mts[39m [2m 1.44 kB[22m [2m│ gzip: 0.46 kB[22m
|
|
150
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/StorageIntegrationTestSuite.d.mts[39m [2m 1.43 kB[22m [2m│ gzip: 0.57 kB[22m
|
|
151
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicClusterServerEngine.d.mts[39m [2m 0.82 kB[22m [2m│ gzip: 0.33 kB[22m
|
|
152
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicServer.d.mts[39m [2m 0.74 kB[22m [2m│ gzip: 0.31 kB[22m
|
|
153
|
+
[34mℹ[39m [34m[ESM][39m 78 files, total: 497.18 kB
|
|
154
|
+
[32m✔[39m Build complete in [32m6572ms[39m
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
const require_Metrics = require('./Metrics.cjs');
|
|
2
|
+
let effect = require("effect");
|
|
3
|
+
let _voidhash_mimic = require("@voidhash/mimic");
|
|
4
|
+
let _voidhash_mimic_server = require("@voidhash/mimic/server");
|
|
5
|
+
|
|
6
|
+
//#region src/DocumentInstance.ts
|
|
7
|
+
/**
|
|
8
|
+
* @voidhash/mimic-effect - DocumentInstance
|
|
9
|
+
*
|
|
10
|
+
* Manages the lifecycle of a single document including:
|
|
11
|
+
* - Restoration from storage (cold storage + WAL replay)
|
|
12
|
+
* - Transaction submission with WAL persistence
|
|
13
|
+
* - Snapshot saving and trigger checking
|
|
14
|
+
*
|
|
15
|
+
* Used by both MimicServerEngine (single-node) and MimicClusterServerEngine (clustered).
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Create a DocumentInstance for a single document.
|
|
19
|
+
*
|
|
20
|
+
* This handles:
|
|
21
|
+
* - Loading from cold storage or computing initial state
|
|
22
|
+
* - Persisting initial state immediately (crash safety)
|
|
23
|
+
* - Replaying WAL entries
|
|
24
|
+
* - Transaction submission with WAL persistence
|
|
25
|
+
* - Snapshot saving
|
|
26
|
+
*/
|
|
27
|
+
const make = (documentId, config, coldStorage, hotStorage) => effect.Effect.gen(function* () {
|
|
28
|
+
const SCHEMA_VERSION = 1;
|
|
29
|
+
const storedDoc = yield* coldStorage.load(documentId);
|
|
30
|
+
let initialState;
|
|
31
|
+
let initialVersion = 0;
|
|
32
|
+
if (storedDoc) {
|
|
33
|
+
initialState = storedDoc.state;
|
|
34
|
+
initialVersion = storedDoc.version;
|
|
35
|
+
} else initialState = yield* computeInitialState(config, documentId);
|
|
36
|
+
const pubsub = yield* effect.PubSub.unbounded();
|
|
37
|
+
const lastSnapshotVersionRef = yield* effect.Ref.make(initialVersion);
|
|
38
|
+
const lastSnapshotTimeRef = yield* effect.Ref.make(Date.now());
|
|
39
|
+
const transactionsSinceSnapshotRef = yield* effect.Ref.make(0);
|
|
40
|
+
const lastActivityTimeRef = yield* effect.Ref.make(Date.now());
|
|
41
|
+
const document = _voidhash_mimic_server.ServerDocument.make({
|
|
42
|
+
schema: config.schema,
|
|
43
|
+
initialState,
|
|
44
|
+
initialVersion,
|
|
45
|
+
maxTransactionHistory: config.maxTransactionHistory,
|
|
46
|
+
onBroadcast: (message) => {
|
|
47
|
+
effect.Effect.runSync(effect.PubSub.publish(pubsub, {
|
|
48
|
+
type: "transaction",
|
|
49
|
+
transaction: message.transaction,
|
|
50
|
+
version: message.version
|
|
51
|
+
}));
|
|
52
|
+
},
|
|
53
|
+
onRejection: (transactionId, reason) => {
|
|
54
|
+
effect.Effect.runSync(effect.PubSub.publish(pubsub, {
|
|
55
|
+
type: "error",
|
|
56
|
+
transactionId,
|
|
57
|
+
reason
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
if (!storedDoc) {
|
|
62
|
+
const initialStoredDoc = createStoredDocument(document.get(), 0, SCHEMA_VERSION);
|
|
63
|
+
yield* coldStorage.save(documentId, initialStoredDoc);
|
|
64
|
+
yield* effect.Effect.logDebug("Initial state persisted to cold storage", { documentId });
|
|
65
|
+
}
|
|
66
|
+
const walEntries = yield* hotStorage.getEntries(documentId, initialVersion);
|
|
67
|
+
yield* verifyWalContinuity(documentId, walEntries, initialVersion);
|
|
68
|
+
yield* replayWalEntries(documentId, document, walEntries);
|
|
69
|
+
if (storedDoc) yield* effect.Metric.increment(require_Metrics.documentsRestored);
|
|
70
|
+
else yield* effect.Metric.increment(require_Metrics.documentsCreated);
|
|
71
|
+
yield* effect.Metric.incrementBy(require_Metrics.documentsActive, 1);
|
|
72
|
+
const getSnapshotTracking = effect.Effect.gen(function* () {
|
|
73
|
+
return {
|
|
74
|
+
lastSnapshotVersion: yield* effect.Ref.get(lastSnapshotVersionRef),
|
|
75
|
+
lastSnapshotTime: yield* effect.Ref.get(lastSnapshotTimeRef),
|
|
76
|
+
transactionsSinceSnapshot: yield* effect.Ref.get(transactionsSinceSnapshotRef)
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
const saveSnapshot = effect.Effect.fn("document.snapshot.save")(function* () {
|
|
80
|
+
var _baseSnapshot$version;
|
|
81
|
+
const targetVersion = document.getVersion();
|
|
82
|
+
if (targetVersion <= (yield* effect.Ref.get(lastSnapshotVersionRef))) return;
|
|
83
|
+
const snapshotStartTime = Date.now();
|
|
84
|
+
const baseSnapshot = yield* coldStorage.load(documentId);
|
|
85
|
+
const baseVersion = (_baseSnapshot$version = baseSnapshot === null || baseSnapshot === void 0 ? void 0 : baseSnapshot.version) !== null && _baseSnapshot$version !== void 0 ? _baseSnapshot$version : 0;
|
|
86
|
+
const baseState = baseSnapshot === null || baseSnapshot === void 0 ? void 0 : baseSnapshot.state;
|
|
87
|
+
const walEntries$1 = yield* hotStorage.getEntries(documentId, baseVersion);
|
|
88
|
+
const snapshotResult = computeSnapshotState(config.schema, baseState, walEntries$1, targetVersion);
|
|
89
|
+
if (!snapshotResult) return;
|
|
90
|
+
const currentLastSnapshot = yield* effect.Ref.get(lastSnapshotVersionRef);
|
|
91
|
+
if (snapshotResult.version <= currentLastSnapshot) return;
|
|
92
|
+
const storedDoc$1 = createStoredDocument(snapshotResult.state, snapshotResult.version, SCHEMA_VERSION);
|
|
93
|
+
yield* coldStorage.save(documentId, storedDoc$1);
|
|
94
|
+
const snapshotDuration = Date.now() - snapshotStartTime;
|
|
95
|
+
yield* effect.Metric.increment(require_Metrics.storageSnapshots);
|
|
96
|
+
yield* effect.Metric.update(require_Metrics.storageSnapshotLatency, snapshotDuration);
|
|
97
|
+
yield* effect.Ref.set(lastSnapshotVersionRef, snapshotResult.version);
|
|
98
|
+
yield* effect.Ref.set(lastSnapshotTimeRef, Date.now());
|
|
99
|
+
yield* effect.Ref.set(transactionsSinceSnapshotRef, 0);
|
|
100
|
+
yield* effect.Effect.catchAll(hotStorage.truncate(documentId, snapshotResult.version), (e) => effect.Effect.logWarning("WAL truncate failed - will retry on next snapshot", {
|
|
101
|
+
documentId,
|
|
102
|
+
version: snapshotResult.version,
|
|
103
|
+
error: e
|
|
104
|
+
}));
|
|
105
|
+
});
|
|
106
|
+
const checkSnapshotTriggers = effect.Effect.fn("document.snapshot.check-triggers")(function* () {
|
|
107
|
+
if (shouldTriggerSnapshot(yield* effect.Ref.get(transactionsSinceSnapshotRef), yield* effect.Ref.get(lastSnapshotTimeRef), config.snapshot)) yield* saveSnapshot();
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
document,
|
|
111
|
+
pubsub,
|
|
112
|
+
getSnapshotTracking,
|
|
113
|
+
submit: effect.Effect.fn("document.transaction.submit")(function* (transaction) {
|
|
114
|
+
const submitStartTime = Date.now();
|
|
115
|
+
yield* effect.Ref.set(lastActivityTimeRef, Date.now());
|
|
116
|
+
const validation = document.validate(transaction);
|
|
117
|
+
if (!validation.valid) {
|
|
118
|
+
yield* effect.Metric.increment(require_Metrics.transactionsRejected);
|
|
119
|
+
const latency$1 = Date.now() - submitStartTime;
|
|
120
|
+
yield* effect.Metric.update(require_Metrics.transactionsLatency, latency$1);
|
|
121
|
+
return {
|
|
122
|
+
success: false,
|
|
123
|
+
reason: validation.reason
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const walEntry = {
|
|
127
|
+
transaction,
|
|
128
|
+
version: validation.nextVersion,
|
|
129
|
+
timestamp: Date.now()
|
|
130
|
+
};
|
|
131
|
+
const appendResult = yield* effect.Effect.either(hotStorage.appendWithCheck(documentId, walEntry, validation.nextVersion));
|
|
132
|
+
if (appendResult._tag === "Left") {
|
|
133
|
+
yield* effect.Effect.logError("WAL append failed", {
|
|
134
|
+
documentId,
|
|
135
|
+
version: validation.nextVersion,
|
|
136
|
+
error: appendResult.left
|
|
137
|
+
});
|
|
138
|
+
yield* effect.Metric.increment(require_Metrics.walAppendFailures);
|
|
139
|
+
const latency$1 = Date.now() - submitStartTime;
|
|
140
|
+
yield* effect.Metric.update(require_Metrics.transactionsLatency, latency$1);
|
|
141
|
+
return {
|
|
142
|
+
success: false,
|
|
143
|
+
reason: "Storage unavailable. Please retry."
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
document.apply(transaction);
|
|
147
|
+
const latency = Date.now() - submitStartTime;
|
|
148
|
+
yield* effect.Metric.update(require_Metrics.transactionsLatency, latency);
|
|
149
|
+
yield* effect.Metric.increment(require_Metrics.transactionsProcessed);
|
|
150
|
+
yield* effect.Metric.increment(require_Metrics.storageWalAppends);
|
|
151
|
+
yield* effect.Ref.update(transactionsSinceSnapshotRef, (n) => n + 1);
|
|
152
|
+
yield* checkSnapshotTriggers();
|
|
153
|
+
return {
|
|
154
|
+
success: true,
|
|
155
|
+
version: validation.nextVersion
|
|
156
|
+
};
|
|
157
|
+
}),
|
|
158
|
+
saveSnapshot,
|
|
159
|
+
checkSnapshotTriggers,
|
|
160
|
+
touch: effect.Effect.fn("document.touch")(function* () {
|
|
161
|
+
yield* effect.Ref.set(lastActivityTimeRef, Date.now());
|
|
162
|
+
}),
|
|
163
|
+
getVersion: () => document.getVersion(),
|
|
164
|
+
getSnapshot: () => document.getSnapshot()
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
/**
|
|
168
|
+
* Compute initial state for a new document.
|
|
169
|
+
*/
|
|
170
|
+
const computeInitialState = (config, documentId) => {
|
|
171
|
+
if (config.initial === void 0) return effect.Effect.succeed(void 0);
|
|
172
|
+
if (typeof config.initial === "function") return config.initial({ documentId });
|
|
173
|
+
return effect.Effect.succeed(config.initial);
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Verify WAL continuity and log warnings for any gaps.
|
|
177
|
+
*/
|
|
178
|
+
const verifyWalContinuity = effect.Effect.fn("document.wal.verify")(function* (documentId, walEntries, baseVersion) {
|
|
179
|
+
if (walEntries.length === 0) return;
|
|
180
|
+
const firstWalVersion = walEntries[0].version;
|
|
181
|
+
const expectedFirst = baseVersion + 1;
|
|
182
|
+
if (firstWalVersion !== expectedFirst) {
|
|
183
|
+
yield* effect.Effect.logWarning("WAL version gap detected", {
|
|
184
|
+
documentId,
|
|
185
|
+
snapshotVersion: baseVersion,
|
|
186
|
+
firstWalVersion,
|
|
187
|
+
expectedFirst
|
|
188
|
+
});
|
|
189
|
+
yield* effect.Metric.increment(require_Metrics.storageVersionGaps);
|
|
190
|
+
}
|
|
191
|
+
for (let i = 1; i < walEntries.length; i++) {
|
|
192
|
+
const prev = walEntries[i - 1].version;
|
|
193
|
+
const curr = walEntries[i].version;
|
|
194
|
+
if (curr !== prev + 1) yield* effect.Effect.logWarning("WAL internal gap detected", {
|
|
195
|
+
documentId,
|
|
196
|
+
previousVersion: prev,
|
|
197
|
+
currentVersion: curr
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
/**
|
|
202
|
+
* Replay WAL entries onto a ServerDocument.
|
|
203
|
+
*/
|
|
204
|
+
const replayWalEntries = effect.Effect.fn("document.wal.replay")(function* (documentId, document, walEntries) {
|
|
205
|
+
for (const entry of walEntries) {
|
|
206
|
+
const result = document.submit(entry.transaction);
|
|
207
|
+
if (!result.success) yield* effect.Effect.logWarning("Skipping corrupted WAL entry", {
|
|
208
|
+
documentId,
|
|
209
|
+
version: entry.version,
|
|
210
|
+
reason: result.reason
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
/**
|
|
215
|
+
* Compute snapshot state by replaying WAL entries on a base state.
|
|
216
|
+
*/
|
|
217
|
+
const computeSnapshotState = (schema, baseState, walEntries, targetVersion) => {
|
|
218
|
+
const relevantEntries = walEntries.filter((e) => e.version <= targetVersion);
|
|
219
|
+
if (relevantEntries.length === 0 && baseState === void 0) return;
|
|
220
|
+
let snapshotState = baseState;
|
|
221
|
+
for (const entry of relevantEntries) {
|
|
222
|
+
const tempDoc = _voidhash_mimic.Document.make(schema, { initialState: snapshotState });
|
|
223
|
+
tempDoc.apply(entry.transaction.ops);
|
|
224
|
+
snapshotState = tempDoc.get();
|
|
225
|
+
}
|
|
226
|
+
if (snapshotState === void 0) return;
|
|
227
|
+
const snapshotVersion = relevantEntries.length > 0 ? relevantEntries[relevantEntries.length - 1].version : 0;
|
|
228
|
+
return {
|
|
229
|
+
state: snapshotState,
|
|
230
|
+
version: snapshotVersion
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* Check if a snapshot should be triggered.
|
|
235
|
+
*/
|
|
236
|
+
const shouldTriggerSnapshot = (transactionsSinceSnapshot, lastSnapshotTime, config) => {
|
|
237
|
+
const now = Date.now();
|
|
238
|
+
const intervalMs = effect.Duration.toMillis(config.interval);
|
|
239
|
+
if (transactionsSinceSnapshot >= config.transactionThreshold) return true;
|
|
240
|
+
if (now - lastSnapshotTime >= intervalMs) return true;
|
|
241
|
+
return false;
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* Create a StoredDocument for persistence.
|
|
245
|
+
*/
|
|
246
|
+
const createStoredDocument = (state, version, schemaVersion) => ({
|
|
247
|
+
state,
|
|
248
|
+
version,
|
|
249
|
+
schemaVersion,
|
|
250
|
+
savedAt: Date.now()
|
|
251
|
+
});
|
|
252
|
+
const DocumentInstance = { make };
|
|
253
|
+
|
|
254
|
+
//#endregion
|
|
255
|
+
exports.DocumentInstance = DocumentInstance;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ColdStorageError, HotStorageError } from "./Errors.cjs";
|
|
2
|
+
import { ServerBroadcast } from "./Protocol.cjs";
|
|
3
|
+
import { ColdStorage } from "./ColdStorage.cjs";
|
|
4
|
+
import { HotStorage } from "./HotStorage.cjs";
|
|
5
|
+
import { Duration, Effect, PubSub } from "effect";
|
|
6
|
+
import { Primitive, Transaction } from "@voidhash/mimic";
|
|
7
|
+
import { ServerDocument } from "@voidhash/mimic/server";
|
|
8
|
+
|
|
9
|
+
//#region src/DocumentInstance.d.ts
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Result of submitting a transaction
|
|
13
|
+
*/
|
|
14
|
+
type SubmitResult = {
|
|
15
|
+
readonly success: true;
|
|
16
|
+
readonly version: number;
|
|
17
|
+
} | {
|
|
18
|
+
readonly success: false;
|
|
19
|
+
readonly reason: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Configuration for a DocumentInstance
|
|
23
|
+
*/
|
|
24
|
+
interface DocumentInstanceConfig<TSchema extends Primitive.AnyPrimitive> {
|
|
25
|
+
readonly schema: TSchema;
|
|
26
|
+
readonly initial?: Primitive.InferSetInput<TSchema> | ((ctx: {
|
|
27
|
+
documentId: string;
|
|
28
|
+
}) => Effect.Effect<Primitive.InferSetInput<TSchema>>);
|
|
29
|
+
readonly maxTransactionHistory: number;
|
|
30
|
+
readonly snapshot: {
|
|
31
|
+
readonly interval: Duration.Duration;
|
|
32
|
+
readonly transactionThreshold: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Snapshot tracking state
|
|
37
|
+
*/
|
|
38
|
+
interface SnapshotTracking {
|
|
39
|
+
readonly lastSnapshotVersion: number;
|
|
40
|
+
readonly lastSnapshotTime: number;
|
|
41
|
+
readonly transactionsSinceSnapshot: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* A DocumentInstance manages a single document's lifecycle
|
|
45
|
+
*/
|
|
46
|
+
interface DocumentInstance<TSchema extends Primitive.AnyPrimitive> {
|
|
47
|
+
/** The underlying ServerDocument */
|
|
48
|
+
readonly document: ServerDocument.ServerDocument<TSchema>;
|
|
49
|
+
/** PubSub for broadcasting messages to subscribers */
|
|
50
|
+
readonly pubsub: PubSub.PubSub<ServerBroadcast>;
|
|
51
|
+
/** Current snapshot tracking state */
|
|
52
|
+
readonly getSnapshotTracking: Effect.Effect<SnapshotTracking>;
|
|
53
|
+
/** Submit a transaction */
|
|
54
|
+
readonly submit: (transaction: Transaction.Transaction) => Effect.Effect<SubmitResult, ColdStorageError | HotStorageError>;
|
|
55
|
+
/** Save a snapshot to cold storage */
|
|
56
|
+
readonly saveSnapshot: () => Effect.Effect<void, ColdStorageError | HotStorageError>;
|
|
57
|
+
/** Check if snapshot should be triggered and save if needed */
|
|
58
|
+
readonly checkSnapshotTriggers: () => Effect.Effect<void, ColdStorageError | HotStorageError>;
|
|
59
|
+
/** Update last activity time (for external tracking) */
|
|
60
|
+
readonly touch: () => Effect.Effect<void>;
|
|
61
|
+
/** Get current document version */
|
|
62
|
+
readonly getVersion: () => number;
|
|
63
|
+
/** Get document snapshot */
|
|
64
|
+
readonly getSnapshot: () => {
|
|
65
|
+
state: unknown;
|
|
66
|
+
version: number;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
declare const DocumentInstance: {
|
|
70
|
+
make: <TSchema extends Primitive.AnyPrimitive>(documentId: string, config: DocumentInstanceConfig<TSchema>, coldStorage: ColdStorage, hotStorage: HotStorage) => Effect.Effect<DocumentInstance<TSchema>, ColdStorageError | HotStorageError>;
|
|
71
|
+
};
|
|
72
|
+
//#endregion
|
|
73
|
+
export { DocumentInstance, SubmitResult };
|
|
74
|
+
//# sourceMappingURL=DocumentInstance.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentInstance.d.cts","names":[],"sources":["../src/DocumentInstance.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;AAkDA;AASiB,KA/BL,YAAA,GA+BqB;EAAiB,SAAU,OAAA,EAAA,IAAA;EAET,SAAA,OAAA,EAAA,MAAA;CAA9B,GAAA;EAEY,SAAA,OAAA,EAAA,KAAA;EAAd,SAAO,MAAA,EAAA,MAAA;CAEoB;;;;AAE2C,UAhCxE,sBAgCwE,CAAA,gBAhCjC,SAAA,CAAU,YAgCuB,CAAA,CAAA;EAAmB,SAAA,MAAA,EA/BzF,OA+ByF;EAA/C,SAAO,OAAA,CAAA,EA7B9D,SAAA,CAAU,aA6BoD,CA7BtC,OA6BsC,CAAA,GAAA,CAAA,CAAA,GAAA,EAAA;IAEjB,UAAA,EAAA,MAAA;EAAmB,CAAA,EAAA,GA9B9B,MAAA,CAAO,MA8BuB,CA9BhB,SAAA,CAAU,aA8BM,CA9BQ,OA8BR,CAAA,CAAA,CAAA;EAAvC,SAAO,qBAAA,EAAA,MAAA;EAEsB,SAAA,QAAA,EAAA;IAAmB,SAAA,QAAA,EA7BxD,QAAA,CAAS,QA6B+C;IAAhC,SAAA,oBAAA,EAAA,MAAA;EAEvB,CAAA;;AAkbxB;;;AA3ZU,UA9CO,gBAAA,CA8CP;EACK,SAAA,mBAAA,EAAA,MAAA;EACD,SAAA,gBAAA,EAAA,MAAA;EACoB,SAAA,yBAAA,EAAA,MAAA;;;;;AAAlB,UAxCC,gBAwCD,CAAA,gBAxCkC,SAAA,CAAU,YAwC5C,CAAA,CAAA;;qBAtCK,cAAA,CAAe,eAAe;;mBAEhC,MAAA,CAAO,OAAO;;gCAED,MAAA,CAAO,OAAO;;iCAEb,WAAA,CAAY,gBAAgB,MAAA,CAAO,OAAO,cAAc,mBAAmB;;+BAE7E,MAAA,CAAO,aAAa,mBAAmB;;wCAE9B,MAAA,CAAO,aAAa,mBAAmB;;wBAEvD,MAAA,CAAO;;;;;;;;;cAkblB;yBA7ZwB,SAAA,CAAU,0CAErC,uBAAuB,uBAClB,yBACD,eACX,MAAA,CAAO,OAAO,iBAAiB,UAAU,mBAAmB"}
|