@voidhash/mimic-effect 1.0.0-beta.1 → 1.0.0-beta.2
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 +99 -57
- package/dist/DocumentManager.cjs +109 -39
- package/dist/DocumentManager.d.cts +12 -4
- package/dist/DocumentManager.d.cts.map +1 -1
- package/dist/DocumentManager.d.mts +12 -4
- package/dist/DocumentManager.d.mts.map +1 -1
- package/dist/DocumentManager.mjs +110 -40
- package/dist/DocumentManager.mjs.map +1 -1
- package/dist/Errors.cjs +10 -1
- package/dist/Errors.d.cts +18 -3
- package/dist/Errors.d.cts.map +1 -1
- package/dist/Errors.d.mts +18 -3
- package/dist/Errors.d.mts.map +1 -1
- package/dist/Errors.mjs +9 -1
- package/dist/Errors.mjs.map +1 -1
- package/dist/HotStorage.cjs +23 -0
- package/dist/HotStorage.d.cts +17 -1
- package/dist/HotStorage.d.cts.map +1 -1
- package/dist/HotStorage.d.mts +17 -1
- package/dist/HotStorage.d.mts.map +1 -1
- package/dist/HotStorage.mjs +23 -0
- package/dist/HotStorage.mjs.map +1 -1
- package/dist/Metrics.cjs +23 -1
- package/dist/Metrics.d.cts +4 -0
- package/dist/Metrics.d.cts.map +1 -1
- package/dist/Metrics.d.mts +4 -0
- package/dist/Metrics.d.mts.map +1 -1
- package/dist/Metrics.mjs +21 -1
- package/dist/Metrics.mjs.map +1 -1
- package/dist/MimicClusterServerEngine.cjs +114 -36
- package/dist/MimicClusterServerEngine.d.cts.map +1 -1
- package/dist/MimicClusterServerEngine.d.mts +1 -1
- package/dist/MimicClusterServerEngine.d.mts.map +1 -1
- package/dist/MimicClusterServerEngine.mjs +119 -41
- package/dist/MimicClusterServerEngine.mjs.map +1 -1
- package/dist/MimicServer.cjs +1 -1
- package/dist/MimicServer.d.cts +1 -1
- package/dist/MimicServer.d.cts.map +1 -1
- package/dist/MimicServer.d.mts +1 -1
- package/dist/MimicServer.d.mts.map +1 -1
- package/dist/MimicServer.mjs +1 -1
- package/dist/MimicServerEngine.d.cts +7 -4
- package/dist/MimicServerEngine.d.cts.map +1 -1
- package/dist/MimicServerEngine.d.mts +7 -4
- package/dist/MimicServerEngine.d.mts.map +1 -1
- package/dist/MimicServerEngine.mjs.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/testing/ColdStorageTestSuite.cjs +508 -0
- package/dist/testing/ColdStorageTestSuite.d.cts +36 -0
- package/dist/testing/ColdStorageTestSuite.d.cts.map +1 -0
- package/dist/testing/ColdStorageTestSuite.d.mts +36 -0
- package/dist/testing/ColdStorageTestSuite.d.mts.map +1 -0
- package/dist/testing/ColdStorageTestSuite.mjs +508 -0
- package/dist/testing/ColdStorageTestSuite.mjs.map +1 -0
- package/dist/testing/FailingStorage.cjs +135 -0
- package/dist/testing/FailingStorage.d.cts +43 -0
- package/dist/testing/FailingStorage.d.cts.map +1 -0
- package/dist/testing/FailingStorage.d.mts +43 -0
- package/dist/testing/FailingStorage.d.mts.map +1 -0
- package/dist/testing/FailingStorage.mjs +136 -0
- package/dist/testing/FailingStorage.mjs.map +1 -0
- package/dist/testing/HotStorageTestSuite.cjs +585 -0
- package/dist/testing/HotStorageTestSuite.d.cts +40 -0
- package/dist/testing/HotStorageTestSuite.d.cts.map +1 -0
- package/dist/testing/HotStorageTestSuite.d.mts +40 -0
- package/dist/testing/HotStorageTestSuite.d.mts.map +1 -0
- package/dist/testing/HotStorageTestSuite.mjs +585 -0
- package/dist/testing/HotStorageTestSuite.mjs.map +1 -0
- package/dist/testing/StorageIntegrationTestSuite.cjs +349 -0
- package/dist/testing/StorageIntegrationTestSuite.d.cts +35 -0
- package/dist/testing/StorageIntegrationTestSuite.d.cts.map +1 -0
- package/dist/testing/StorageIntegrationTestSuite.d.mts +35 -0
- package/dist/testing/StorageIntegrationTestSuite.d.mts.map +1 -0
- package/dist/testing/StorageIntegrationTestSuite.mjs +349 -0
- package/dist/testing/StorageIntegrationTestSuite.mjs.map +1 -0
- package/dist/testing/assertions.cjs +114 -0
- package/dist/testing/assertions.mjs +109 -0
- package/dist/testing/assertions.mjs.map +1 -0
- package/dist/testing/index.cjs +14 -0
- package/dist/testing/index.d.cts +6 -0
- package/dist/testing/index.d.mts +6 -0
- package/dist/testing/index.mjs +7 -0
- package/dist/testing/types.cjs +15 -0
- package/dist/testing/types.d.cts +90 -0
- package/dist/testing/types.d.cts.map +1 -0
- package/dist/testing/types.d.mts +90 -0
- package/dist/testing/types.d.mts.map +1 -0
- package/dist/testing/types.mjs +16 -0
- package/dist/testing/types.mjs.map +1 -0
- package/package.json +8 -3
- package/src/DocumentManager.ts +195 -87
- package/src/Errors.ts +15 -1
- package/src/HotStorage.ts +75 -1
- package/src/Metrics.ts +24 -0
- package/src/MimicClusterServerEngine.ts +178 -56
- package/src/MimicServerEngine.ts +7 -3
- package/src/testing/ColdStorageTestSuite.ts +589 -0
- package/src/testing/FailingStorage.ts +286 -0
- package/src/testing/HotStorageTestSuite.ts +762 -0
- package/src/testing/StorageIntegrationTestSuite.ts +504 -0
- package/src/testing/assertions.ts +181 -0
- package/src/testing/index.ts +83 -0
- package/src/testing/types.ts +100 -0
- package/tests/ColdStorage.test.ts +8 -120
- package/tests/HotStorage.test.ts +7 -126
- package/tests/StorageIntegration.test.ts +259 -0
- package/tsdown.config.ts +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,112 +1,154 @@
|
|
|
1
1
|
|
|
2
|
-
> @voidhash/mimic-effect@1.0.0-beta.
|
|
2
|
+
> @voidhash/mimic-effect@1.0.0-beta.2 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
|
|
6
6
|
[34mℹ[39m config file: [4m/home/runner/work/mimic/mimic/packages/mimic-effect/tsdown.config.ts[24m
|
|
7
|
-
[34mℹ[39m entry: [34msrc/index.ts[39m
|
|
7
|
+
[34mℹ[39m entry: [34msrc/index.ts, src/testing/index.ts[39m
|
|
8
8
|
[34mℹ[39m target: [34mes2017[39m
|
|
9
9
|
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
10
10
|
[34mℹ[39m Build start
|
|
11
11
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[1mindex.cjs[22m [2m 2.37 kB[22m [2m│ gzip: 0.49 kB[22m
|
|
12
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
12
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[1mtesting/index.cjs[22m [2m 0.95 kB[22m [2m│ gzip: 0.22 kB[22m
|
|
13
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/HotStorageTestSuite.cjs [2m26.32 kB[22m [2m│ gzip: 3.90 kB[22m
|
|
14
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicClusterServerEngine.cjs [2m21.55 kB[22m [2m│ gzip: 4.91 kB[22m
|
|
15
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/ColdStorageTestSuite.cjs [2m18.14 kB[22m [2m│ gzip: 3.22 kB[22m
|
|
16
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.cjs [2m13.93 kB[22m [2m│ gzip: 2.58 kB[22m
|
|
17
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mDocumentManager.cjs [2m12.28 kB[22m [2m│ gzip: 2.97 kB[22m
|
|
13
18
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServer.cjs [2m10.10 kB[22m [2m│ gzip: 2.74 kB[22m
|
|
14
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
19
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/FailingStorage.cjs [2m 5.77 kB[22m [2m│ gzip: 1.30 kB[22m
|
|
20
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMetrics.cjs [2m 4.26 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
15
21
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServerEngine.cjs [2m 4.23 kB[22m [2m│ gzip: 1.34 kB[22m
|
|
16
22
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mProtocol.cjs [2m 3.78 kB[22m [2m│ gzip: 1.14 kB[22m
|
|
17
23
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mPresenceManager.cjs [2m 3.72 kB[22m [2m│ gzip: 1.00 kB[22m
|
|
18
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
19
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
24
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mHotStorage.cjs [2m 3.64 kB[22m [2m│ gzip: 1.21 kB[22m
|
|
25
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/assertions.cjs [2m 3.43 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
20
26
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicAuthService.cjs [2m 2.27 kB[22m [2m│ gzip: 0.88 kB[22m
|
|
27
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mErrors.cjs [2m 1.98 kB[22m [2m│ gzip: 0.61 kB[22m
|
|
21
28
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mColdStorage.cjs [2m 1.91 kB[22m [2m│ gzip: 0.77 kB[22m
|
|
22
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22mErrors.cjs [2m 1.63 kB[22m [2m│ gzip: 0.49 kB[22m
|
|
23
29
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.cjs [2m 0.95 kB[22m [2m│ gzip: 0.43 kB[22m
|
|
24
30
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.cjs [2m 0.53 kB[22m [2m│ gzip: 0.29 kB[22m
|
|
25
31
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.cjs [2m 0.52 kB[22m [2m│ gzip: 0.32 kB[22m
|
|
26
32
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.cjs [2m 0.40 kB[22m [2m│ gzip: 0.24 kB[22m
|
|
27
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
|
|
28
34
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m_virtual/rolldown_runtime.cjs [2m 0.36 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
29
|
-
[34mℹ[39m [33m[CJS][39m
|
|
30
|
-
[34mℹ[39m [33m[CJS][39m
|
|
31
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
32
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
33
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
34
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22mColdStorage.d.cts.map
|
|
35
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
36
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
37
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
38
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
39
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
40
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
41
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
42
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
43
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
44
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
45
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
46
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
47
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[
|
|
48
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[
|
|
49
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[
|
|
50
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[
|
|
51
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[
|
|
52
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[
|
|
53
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[
|
|
54
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[
|
|
55
|
-
[34mℹ[39m [33m[CJS][39m
|
|
56
|
-
[
|
|
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: 144.08 kB
|
|
37
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mProtocol.d.cts.map [2m1.57 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
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/[22mMimicServerEngine.d.cts.map [2m1.09 kB[22m [2m│ gzip: 0.50 kB[22m
|
|
40
|
+
[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
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mHotStorage.d.cts.map [2m0.67 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
43
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicAuthService.d.cts.map [2m0.61 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
44
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mErrors.d.cts.map [2m0.60 kB[22m [2m│ gzip: 0.32 kB[22m
|
|
45
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/HotStorageTestSuite.d.cts.map [2m0.48 kB[22m [2m│ gzip: 0.29 kB[22m
|
|
46
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mPresenceManager.d.cts.map [2m0.45 kB[22m [2m│ gzip: 0.27 kB[22m
|
|
47
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/types.d.cts.map [2m0.38 kB[22m [2m│ gzip: 0.23 kB[22m
|
|
48
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/ColdStorageTestSuite.d.cts.map [2m0.35 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
49
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.d.cts.map [2m0.31 kB[22m [2m│ gzip: 0.21 kB[22m
|
|
50
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/FailingStorage.d.cts.map [2m0.26 kB[22m [2m│ gzip: 0.18 kB[22m
|
|
51
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicClusterServerEngine.d.cts.map [2m0.25 kB[22m [2m│ gzip: 0.19 kB[22m
|
|
52
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServer.d.cts.map [2m0.22 kB[22m [2m│ gzip: 0.16 kB[22m
|
|
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.23 kB[22m [2m│ gzip: 0.56 kB[22m
|
|
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.86 kB[22m [2m│ gzip: 1.34 kB[22m
|
|
57
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mTypes.d.cts[39m [2m5.47 kB[22m [2m│ gzip: 1.54 kB[22m
|
|
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.42 kB[22m [2m│ gzip: 1.06 kB[22m
|
|
60
|
+
[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
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mHotStorage.d.cts[39m [2m2.72 kB[22m [2m│ gzip: 1.08 kB[22m
|
|
63
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMimicAuthService.d.cts[39m [2m2.70 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
64
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mtesting/HotStorageTestSuite.d.cts[39m [2m1.82 kB[22m [2m│ gzip: 0.56 kB[22m
|
|
65
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mColdStorage.d.cts[39m [2m1.74 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
66
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mPresenceManager.d.cts[39m [2m1.60 kB[22m [2m│ gzip: 0.63 kB[22m
|
|
67
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMetrics.d.cts[39m [2m1.59 kB[22m [2m│ gzip: 0.39 kB[22m
|
|
68
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mtesting/ColdStorageTestSuite.d.cts[39m [2m1.55 kB[22m [2m│ gzip: 0.50 kB[22m
|
|
69
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mtesting/FailingStorage.d.cts[39m [2m1.44 kB[22m [2m│ gzip: 0.46 kB[22m
|
|
70
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mtesting/StorageIntegrationTestSuite.d.cts[39m [2m1.31 kB[22m [2m│ gzip: 0.53 kB[22m
|
|
71
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMimicClusterServerEngine.d.cts[39m [2m0.82 kB[22m [2m│ gzip: 0.33 kB[22m
|
|
72
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMimicServer.d.cts[39m [2m0.74 kB[22m [2m│ gzip: 0.32 kB[22m
|
|
73
|
+
[34mℹ[39m [33m[CJS][39m 36 files, total: 56.45 kB
|
|
74
|
+
[32m✔[39m Build complete in [32m5943ms[39m
|
|
57
75
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[1mindex.mjs[22m [2m 1.34 kB[22m [2m│ gzip: 0.34 kB[22m
|
|
58
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
59
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
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 [2m44.92 kB[22m [2m│ gzip: 6.52 kB[22m
|
|
78
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicClusterServerEngine.mjs.map [2m42.30 kB[22m [2m│ gzip: 9.99 kB[22m
|
|
79
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/ColdStorageTestSuite.mjs.map [2m31.92 kB[22m [2m│ gzip: 5.21 kB[22m
|
|
80
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mDocumentManager.mjs.map [2m28.52 kB[22m [2m│ gzip: 6.84 kB[22m
|
|
81
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.mjs.map [2m24.17 kB[22m [2m│ gzip: 4.50 kB[22m
|
|
82
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/HotStorageTestSuite.mjs [2m23.90 kB[22m [2m│ gzip: 3.87 kB[22m
|
|
60
83
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServer.mjs.map [2m20.88 kB[22m [2m│ gzip: 5.46 kB[22m
|
|
61
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicClusterServerEngine.mjs [
|
|
62
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
84
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicClusterServerEngine.mjs [2m20.10 kB[22m [2m│ gzip: 4.94 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/[22mtesting/FailingStorage.mjs.map [2m12.93 kB[22m [2m│ gzip: 2.55 kB[22m
|
|
87
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.mjs [2m12.56 kB[22m [2m│ gzip: 2.56 kB[22m
|
|
88
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mDocumentManager.mjs [2m11.59 kB[22m [2m│ gzip: 3.00 kB[22m
|
|
89
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.mjs.map [2m10.05 kB[22m [2m│ gzip: 2.85 kB[22m
|
|
90
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServerEngine.mjs.map [2m10.01 kB[22m [2m│ gzip: 2.73 kB[22m
|
|
63
91
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServer.mjs [2m 9.63 kB[22m [2m│ gzip: 2.78 kB[22m
|
|
64
92
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.mjs.map [2m 9.18 kB[22m [2m│ gzip: 2.15 kB[22m
|
|
65
93
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs.map [2m 9.11 kB[22m [2m│ gzip: 2.27 kB[22m
|
|
66
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
67
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
94
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs.map [2m 6.69 kB[22m [2m│ gzip: 1.78 kB[22m
|
|
95
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMetrics.mjs.map [2m 6.13 kB[22m [2m│ gzip: 1.43 kB[22m
|
|
68
96
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.mjs.map [2m 6.09 kB[22m [2m│ gzip: 1.85 kB[22m
|
|
69
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
97
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/FailingStorage.mjs [2m 5.41 kB[22m [2m│ gzip: 1.30 kB[22m
|
|
70
98
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.mjs.map [2m 4.90 kB[22m [2m│ gzip: 1.52 kB[22m
|
|
71
99
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServerEngine.mjs [2m 4.10 kB[22m [2m│ gzip: 1.35 kB[22m
|
|
72
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.mjs.map [2m
|
|
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/[22mMetrics.mjs [2m 3.63 kB[22m [2m│ gzip: 1.01 kB[22m
|
|
102
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.mjs [2m 3.52 kB[22m [2m│ gzip: 1.22 kB[22m
|
|
73
103
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs [2m 3.39 kB[22m [2m│ gzip: 1.01 kB[22m
|
|
74
104
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.mjs [2m 3.35 kB[22m [2m│ gzip: 1.06 kB[22m
|
|
75
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
76
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
105
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/types.mjs.map [2m 3.22 kB[22m [2m│ gzip: 1.15 kB[22m
|
|
106
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs [2m 3.14 kB[22m [2m│ gzip: 1.03 kB[22m
|
|
77
107
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.mjs [2m 2.23 kB[22m [2m│ gzip: 0.88 kB[22m
|
|
78
108
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.mjs [2m 1.85 kB[22m [2m│ gzip: 0.79 kB[22m
|
|
109
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.mjs [2m 1.73 kB[22m [2m│ gzip: 0.61 kB[22m
|
|
79
110
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.d.mts.map [2m 1.57 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
80
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.mjs [2m 1.42 kB[22m [2m│ gzip: 0.50 kB[22m
|
|
81
111
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mTypes.d.mts.map [2m 1.41 kB[22m [2m│ gzip: 0.65 kB[22m
|
|
82
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServerEngine.d.mts.map [2m 1.
|
|
112
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServerEngine.d.mts.map [2m 1.09 kB[22m [2m│ gzip: 0.50 kB[22m
|
|
83
113
|
[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
|
|
84
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.d.mts.map [2m 0.72 kB[22m [2m│ gzip: 0.34 kB[22m
|
|
85
114
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.d.mts.map [2m 0.70 kB[22m [2m│ gzip: 0.37 kB[22m
|
|
86
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
115
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mDocumentManager.d.mts.map [2m 0.69 kB[22m [2m│ gzip: 0.38 kB[22m
|
|
116
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.d.mts.map [2m 0.67 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
87
117
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.d.mts.map [2m 0.61 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
88
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
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
|
|
89
120
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m_virtual/rolldown_runtime.mjs [2m 0.47 kB[22m [2m│ gzip: 0.30 kB[22m
|
|
90
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
|
|
91
122
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.d.mts.map [2m 0.45 kB[22m [2m│ gzip: 0.27 kB[22m
|
|
92
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
|
|
93
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.31 kB[22m [2m│ gzip: 0.21 kB[22m
|
|
94
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
|
|
95
131
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicClusterServerEngine.d.mts.map [2m 0.25 kB[22m [2m│ gzip: 0.19 kB[22m
|
|
96
132
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServer.d.mts.map [2m 0.22 kB[22m [2m│ gzip: 0.16 kB[22m
|
|
97
133
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMetrics.d.mts.map [2m 0.12 kB[22m [2m│ gzip: 0.12 kB[22m
|
|
98
134
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32m[1mindex.d.mts[22m[39m [2m 2.23 kB[22m [2m│ gzip: 0.56 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
|
|
99
136
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mProtocol.d.mts[39m [2m 5.86 kB[22m [2m│ gzip: 1.34 kB[22m
|
|
100
137
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mTypes.d.mts[39m [2m 5.47 kB[22m [2m│ gzip: 1.54 kB[22m
|
|
101
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mErrors.d.mts[39m [2m 4.
|
|
102
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicServerEngine.d.mts[39m [2m 3.
|
|
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.42 kB[22m [2m│ gzip: 1.06 kB[22m
|
|
140
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/types.d.mts[39m [2m 2.76 kB[22m [2m│ gzip: 1.15 kB[22m
|
|
141
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mDocumentManager.d.mts[39m [2m 2.74 kB[22m [2m│ gzip: 0.84 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
|
|
103
143
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicAuthService.d.mts[39m [2m 2.70 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
104
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[
|
|
105
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mHotStorage.d.mts[39m [2m 1.95 kB[22m [2m│ gzip: 0.83 kB[22m
|
|
144
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/HotStorageTestSuite.d.mts[39m [2m 1.82 kB[22m [2m│ gzip: 0.56 kB[22m
|
|
106
145
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mColdStorage.d.mts[39m [2m 1.74 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
107
146
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mPresenceManager.d.mts[39m [2m 1.60 kB[22m [2m│ gzip: 0.63 kB[22m
|
|
108
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMetrics.d.mts[39m [2m 1.
|
|
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.31 kB[22m [2m│ gzip: 0.53 kB[22m
|
|
109
151
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicClusterServerEngine.d.mts[39m [2m 0.82 kB[22m [2m│ gzip: 0.33 kB[22m
|
|
110
152
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicServer.d.mts[39m [2m 0.74 kB[22m [2m│ gzip: 0.31 kB[22m
|
|
111
|
-
[34mℹ[39m [34m[ESM][39m
|
|
112
|
-
[32m✔[39m Build complete in [
|
|
153
|
+
[34mℹ[39m [34m[ESM][39m 78 files, total: 463.31 kB
|
|
154
|
+
[32m✔[39m Build complete in [32m5961ms[39m
|
package/dist/DocumentManager.cjs
CHANGED
|
@@ -2,6 +2,7 @@ const require_ColdStorage = require('./ColdStorage.cjs');
|
|
|
2
2
|
const require_HotStorage = require('./HotStorage.cjs');
|
|
3
3
|
const require_Metrics = require('./Metrics.cjs');
|
|
4
4
|
let effect = require("effect");
|
|
5
|
+
let _voidhash_mimic = require("@voidhash/mimic");
|
|
5
6
|
let _voidhash_mimic_server = require("@voidhash/mimic/server");
|
|
6
7
|
|
|
7
8
|
//#region src/DocumentManager.ts
|
|
@@ -45,7 +46,7 @@ const layer = effect.Layer.scoped(DocumentManagerTag, effect.Effect.gen(function
|
|
|
45
46
|
* Restore a document from storage
|
|
46
47
|
*/
|
|
47
48
|
const restoreDocument = (documentId) => effect.Effect.gen(function* () {
|
|
48
|
-
const storedDoc = yield*
|
|
49
|
+
const storedDoc = yield* coldStorage.load(documentId);
|
|
49
50
|
let initialState;
|
|
50
51
|
let initialVersion = 0;
|
|
51
52
|
if (storedDoc) {
|
|
@@ -77,7 +78,29 @@ const layer = effect.Layer.scoped(DocumentManagerTag, effect.Effect.gen(function
|
|
|
77
78
|
}));
|
|
78
79
|
}
|
|
79
80
|
});
|
|
80
|
-
const walEntries = yield*
|
|
81
|
+
const walEntries = yield* hotStorage.getEntries(documentId, initialVersion);
|
|
82
|
+
if (walEntries.length > 0) {
|
|
83
|
+
const firstWalVersion = walEntries[0].version;
|
|
84
|
+
const expectedFirst = initialVersion + 1;
|
|
85
|
+
if (firstWalVersion !== expectedFirst) {
|
|
86
|
+
yield* effect.Effect.logWarning("WAL version gap detected", {
|
|
87
|
+
documentId,
|
|
88
|
+
snapshotVersion: initialVersion,
|
|
89
|
+
firstWalVersion,
|
|
90
|
+
expectedFirst
|
|
91
|
+
});
|
|
92
|
+
yield* effect.Metric.increment(require_Metrics.storageVersionGaps);
|
|
93
|
+
}
|
|
94
|
+
for (let i = 1; i < walEntries.length; i++) {
|
|
95
|
+
const prev = walEntries[i - 1].version;
|
|
96
|
+
const curr = walEntries[i].version;
|
|
97
|
+
if (curr !== prev + 1) yield* effect.Effect.logWarning("WAL internal gap detected", {
|
|
98
|
+
documentId,
|
|
99
|
+
previousVersion: prev,
|
|
100
|
+
currentVersion: curr
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
81
104
|
for (const entry of walEntries) {
|
|
82
105
|
const result = document.submit(entry.transaction);
|
|
83
106
|
if (!result.success) yield* effect.Effect.logWarning("Skipping corrupted WAL entry", {
|
|
@@ -114,33 +137,47 @@ const layer = effect.Layer.scoped(DocumentManagerTag, effect.Effect.gen(function
|
|
|
114
137
|
return instance;
|
|
115
138
|
});
|
|
116
139
|
/**
|
|
117
|
-
* Save a snapshot to ColdStorage
|
|
140
|
+
* Save a snapshot to ColdStorage derived from WAL entries.
|
|
141
|
+
* This ensures snapshots are always based on durable WAL data.
|
|
142
|
+
* Idempotent: skips save if already snapshotted at target version.
|
|
143
|
+
* Truncate failures are non-fatal and will be retried on next snapshot.
|
|
118
144
|
*/
|
|
119
|
-
const saveSnapshot = (documentId, instance) => effect.Effect.gen(function* () {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
145
|
+
const saveSnapshot = (documentId, instance, targetVersion) => effect.Effect.gen(function* () {
|
|
146
|
+
var _baseSnapshot$version;
|
|
147
|
+
if (targetVersion <= (yield* effect.Ref.get(instance.lastSnapshotVersion))) return;
|
|
148
|
+
const snapshotStartTime = Date.now();
|
|
149
|
+
const baseSnapshot = yield* coldStorage.load(documentId);
|
|
150
|
+
const baseVersion = (_baseSnapshot$version = baseSnapshot === null || baseSnapshot === void 0 ? void 0 : baseSnapshot.version) !== null && _baseSnapshot$version !== void 0 ? _baseSnapshot$version : 0;
|
|
151
|
+
const baseState = baseSnapshot === null || baseSnapshot === void 0 ? void 0 : baseSnapshot.state;
|
|
152
|
+
const relevantEntries = (yield* hotStorage.getEntries(documentId, baseVersion)).filter((e) => e.version <= targetVersion);
|
|
153
|
+
if (relevantEntries.length === 0 && !baseSnapshot) return;
|
|
154
|
+
let snapshotState = baseState;
|
|
155
|
+
for (const entry of relevantEntries) {
|
|
156
|
+
const tempDoc = _voidhash_mimic.Document.make(config.schema, { initialState: snapshotState });
|
|
157
|
+
tempDoc.apply(entry.transaction.ops);
|
|
158
|
+
snapshotState = tempDoc.get();
|
|
159
|
+
}
|
|
160
|
+
if (snapshotState === void 0) return;
|
|
161
|
+
const snapshotVersion = relevantEntries.length > 0 ? relevantEntries[relevantEntries.length - 1].version : baseVersion;
|
|
162
|
+
if (snapshotVersion <= (yield* effect.Ref.get(instance.lastSnapshotVersion))) return;
|
|
123
163
|
const storedDoc = {
|
|
124
|
-
state,
|
|
125
|
-
version,
|
|
164
|
+
state: snapshotState,
|
|
165
|
+
version: snapshotVersion,
|
|
126
166
|
schemaVersion: SCHEMA_VERSION,
|
|
127
167
|
savedAt: Date.now()
|
|
128
168
|
};
|
|
129
|
-
|
|
130
|
-
yield* effect.Effect.catchAll(coldStorage.save(documentId, storedDoc), (e) => effect.Effect.logError("Failed to save snapshot", {
|
|
131
|
-
documentId,
|
|
132
|
-
error: e
|
|
133
|
-
}));
|
|
169
|
+
yield* coldStorage.save(documentId, storedDoc);
|
|
134
170
|
const snapshotDuration = Date.now() - snapshotStartTime;
|
|
135
171
|
yield* effect.Metric.increment(require_Metrics.storageSnapshots);
|
|
136
172
|
yield* effect.Metric.update(require_Metrics.storageSnapshotLatency, snapshotDuration);
|
|
137
|
-
yield* effect.
|
|
173
|
+
yield* effect.Ref.set(instance.lastSnapshotVersion, snapshotVersion);
|
|
174
|
+
yield* effect.Ref.set(instance.lastSnapshotTime, Date.now());
|
|
175
|
+
yield* effect.Ref.set(instance.transactionsSinceSnapshot, 0);
|
|
176
|
+
yield* effect.Effect.catchAll(hotStorage.truncate(documentId, snapshotVersion), (e) => effect.Effect.logWarning("WAL truncate failed - will retry on next snapshot", {
|
|
138
177
|
documentId,
|
|
178
|
+
version: snapshotVersion,
|
|
139
179
|
error: e
|
|
140
180
|
}));
|
|
141
|
-
yield* effect.Ref.set(instance.lastSnapshotVersion, version);
|
|
142
|
-
yield* effect.Ref.set(instance.lastSnapshotTime, Date.now());
|
|
143
|
-
yield* effect.Ref.set(instance.transactionsSinceSnapshot, 0);
|
|
144
181
|
});
|
|
145
182
|
/**
|
|
146
183
|
* Check if snapshot should be triggered
|
|
@@ -149,13 +186,14 @@ const layer = effect.Layer.scoped(DocumentManagerTag, effect.Effect.gen(function
|
|
|
149
186
|
const txCount = yield* effect.Ref.get(instance.transactionsSinceSnapshot);
|
|
150
187
|
const lastTime = yield* effect.Ref.get(instance.lastSnapshotTime);
|
|
151
188
|
const now = Date.now();
|
|
189
|
+
const currentVersion = instance.document.getVersion();
|
|
152
190
|
const intervalMs = effect.Duration.toMillis(config.snapshot.interval);
|
|
153
191
|
if (txCount >= config.snapshot.transactionThreshold) {
|
|
154
|
-
yield* saveSnapshot(documentId, instance);
|
|
192
|
+
yield* saveSnapshot(documentId, instance, currentVersion);
|
|
155
193
|
return;
|
|
156
194
|
}
|
|
157
195
|
if (now - lastTime >= intervalMs) {
|
|
158
|
-
yield* saveSnapshot(documentId, instance);
|
|
196
|
+
yield* saveSnapshot(documentId, instance, currentVersion);
|
|
159
197
|
return;
|
|
160
198
|
}
|
|
161
199
|
});
|
|
@@ -165,7 +203,11 @@ const layer = effect.Layer.scoped(DocumentManagerTag, effect.Effect.gen(function
|
|
|
165
203
|
const now = Date.now();
|
|
166
204
|
const maxIdleMs = effect.Duration.toMillis(config.maxIdleTime);
|
|
167
205
|
for (const [documentId, instance] of current) if (now - (yield* effect.Ref.get(instance.lastActivityTime)) >= maxIdleMs) {
|
|
168
|
-
|
|
206
|
+
const currentVersion = instance.document.getVersion();
|
|
207
|
+
yield* effect.Effect.catchAll(saveSnapshot(documentId, instance, currentVersion), (e) => effect.Effect.logError("Failed to save snapshot during eviction", {
|
|
208
|
+
documentId,
|
|
209
|
+
error: e
|
|
210
|
+
}));
|
|
169
211
|
yield* effect.Ref.update(store, (map) => effect.HashMap.remove(map, documentId));
|
|
170
212
|
yield* effect.Metric.increment(require_Metrics.documentsEvicted);
|
|
171
213
|
yield* effect.Metric.incrementBy(require_Metrics.documentsActive, -1);
|
|
@@ -175,32 +217,60 @@ const layer = effect.Layer.scoped(DocumentManagerTag, effect.Effect.gen(function
|
|
|
175
217
|
});
|
|
176
218
|
yield* effect.Effect.addFinalizer(() => effect.Effect.gen(function* () {
|
|
177
219
|
const current = yield* effect.Ref.get(store);
|
|
178
|
-
for (const [documentId, instance] of current)
|
|
220
|
+
for (const [documentId, instance] of current) {
|
|
221
|
+
const currentVersion = instance.document.getVersion();
|
|
222
|
+
yield* effect.Effect.catchAll(saveSnapshot(documentId, instance, currentVersion), (e) => effect.Effect.logError("Failed to save snapshot during shutdown", {
|
|
223
|
+
documentId,
|
|
224
|
+
error: e
|
|
225
|
+
}));
|
|
226
|
+
}
|
|
179
227
|
yield* effect.Effect.logInfo("DocumentManager shutdown complete");
|
|
180
228
|
}));
|
|
181
229
|
return {
|
|
182
230
|
submit: (documentId, transaction) => effect.Effect.gen(function* () {
|
|
183
231
|
const instance = yield* getOrCreateDocument(documentId);
|
|
184
232
|
const submitStartTime = Date.now();
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
yield* effect.Metric.
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
timestamp: Date.now()
|
|
233
|
+
const validation = instance.document.validate(transaction);
|
|
234
|
+
if (!validation.valid) {
|
|
235
|
+
yield* effect.Metric.increment(require_Metrics.transactionsRejected);
|
|
236
|
+
const latency$1 = Date.now() - submitStartTime;
|
|
237
|
+
yield* effect.Metric.update(require_Metrics.transactionsLatency, latency$1);
|
|
238
|
+
return {
|
|
239
|
+
success: false,
|
|
240
|
+
reason: validation.reason
|
|
194
241
|
};
|
|
195
|
-
|
|
242
|
+
}
|
|
243
|
+
const walEntry = {
|
|
244
|
+
transaction,
|
|
245
|
+
version: validation.nextVersion,
|
|
246
|
+
timestamp: Date.now()
|
|
247
|
+
};
|
|
248
|
+
const appendResult = yield* effect.Effect.either(hotStorage.appendWithCheck(documentId, walEntry, validation.nextVersion));
|
|
249
|
+
if (appendResult._tag === "Left") {
|
|
250
|
+
yield* effect.Effect.logError("WAL append failed", {
|
|
196
251
|
documentId,
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
yield* effect.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
252
|
+
version: validation.nextVersion,
|
|
253
|
+
error: appendResult.left
|
|
254
|
+
});
|
|
255
|
+
yield* effect.Metric.increment(require_Metrics.walAppendFailures);
|
|
256
|
+
const latency$1 = Date.now() - submitStartTime;
|
|
257
|
+
yield* effect.Metric.update(require_Metrics.transactionsLatency, latency$1);
|
|
258
|
+
return {
|
|
259
|
+
success: false,
|
|
260
|
+
reason: "Storage unavailable. Please retry."
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
instance.document.apply(transaction);
|
|
264
|
+
const latency = Date.now() - submitStartTime;
|
|
265
|
+
yield* effect.Metric.update(require_Metrics.transactionsLatency, latency);
|
|
266
|
+
yield* effect.Metric.increment(require_Metrics.transactionsProcessed);
|
|
267
|
+
yield* effect.Metric.increment(require_Metrics.storageWalAppends);
|
|
268
|
+
yield* effect.Ref.update(instance.transactionsSinceSnapshot, (n) => n + 1);
|
|
269
|
+
yield* checkSnapshotTriggers(documentId, instance);
|
|
270
|
+
return {
|
|
271
|
+
success: true,
|
|
272
|
+
version: validation.nextVersion
|
|
273
|
+
};
|
|
204
274
|
}),
|
|
205
275
|
getSnapshot: (documentId) => effect.Effect.gen(function* () {
|
|
206
276
|
return (yield* getOrCreateDocument(documentId)).document.getSnapshot();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ResolvedConfig } from "./Types.cjs";
|
|
2
|
+
import { ColdStorageError, HotStorageError } from "./Errors.cjs";
|
|
2
3
|
import { ServerBroadcast, SnapshotMessage } from "./Protocol.cjs";
|
|
3
4
|
import { ColdStorageTag } from "./ColdStorage.cjs";
|
|
4
5
|
import { HotStorageTag } from "./HotStorage.cjs";
|
|
@@ -17,22 +18,29 @@ type SubmitResult = {
|
|
|
17
18
|
readonly success: false;
|
|
18
19
|
readonly reason: string;
|
|
19
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* Error type for DocumentManager operations
|
|
23
|
+
*/
|
|
24
|
+
type DocumentManagerError = ColdStorageError | HotStorageError;
|
|
20
25
|
/**
|
|
21
26
|
* Internal service for managing document lifecycle.
|
|
22
27
|
*/
|
|
23
28
|
interface DocumentManager {
|
|
24
29
|
/**
|
|
25
30
|
* Submit a transaction to a document.
|
|
31
|
+
* May fail with ColdStorageError or HotStorageError if storage is unavailable.
|
|
26
32
|
*/
|
|
27
|
-
readonly submit: (documentId: string, transaction: Transaction.Transaction) => Effect.Effect<SubmitResult>;
|
|
33
|
+
readonly submit: (documentId: string, transaction: Transaction.Transaction) => Effect.Effect<SubmitResult, DocumentManagerError>;
|
|
28
34
|
/**
|
|
29
35
|
* Get a snapshot of a document.
|
|
36
|
+
* May fail with ColdStorageError or HotStorageError if storage is unavailable.
|
|
30
37
|
*/
|
|
31
|
-
readonly getSnapshot: (documentId: string) => Effect.Effect<SnapshotMessage>;
|
|
38
|
+
readonly getSnapshot: (documentId: string) => Effect.Effect<SnapshotMessage, DocumentManagerError>;
|
|
32
39
|
/**
|
|
33
40
|
* Subscribe to broadcasts for a document.
|
|
41
|
+
* May fail with ColdStorageError or HotStorageError if storage is unavailable.
|
|
34
42
|
*/
|
|
35
|
-
readonly subscribe: (documentId: string) => Effect.Effect<Stream.Stream<ServerBroadcast>,
|
|
43
|
+
readonly subscribe: (documentId: string) => Effect.Effect<Stream.Stream<ServerBroadcast>, DocumentManagerError, Scope.Scope>;
|
|
36
44
|
/**
|
|
37
45
|
* Touch a document to update its last activity time.
|
|
38
46
|
* Call this on any client activity to prevent idle GC.
|
|
@@ -55,5 +63,5 @@ declare const DocumentManager: {
|
|
|
55
63
|
layer: Layer.Layer<DocumentManagerTag, never, ColdStorageTag | HotStorageTag | DocumentManagerConfigTag>;
|
|
56
64
|
};
|
|
57
65
|
//#endregion
|
|
58
|
-
export { DocumentManager, DocumentManagerConfigTag, DocumentManagerTag, SubmitResult };
|
|
66
|
+
export { DocumentManager, DocumentManagerConfigTag, DocumentManagerError, DocumentManagerTag, SubmitResult };
|
|
59
67
|
//# sourceMappingURL=DocumentManager.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentManager.d.cts","names":[],"sources":["../src/DocumentManager.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DocumentManager.d.cts","names":[],"sources":["../src/DocumentManager.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AAiFqB,KAtCT,YAAA,GAsCgB;EAAyB,SAAA,OAAA,EAAA,IAAA;EAAsB,SAAM,OAAA,EAAA,MAAA;CAA1E,GAAA;EAMmC,SAAO,OAAA,EAAA,KAAA;EAAM,SAAA,MAAA,EAAA,MAAA;AACtD,CAAA;;;;KAlCW,oBAAA,GAAuB,mBAAmB;AA2CtD;AAE2C;;UAxC1B,eAAA;;;;AAuEjB;EA+da,SAAA,MAAA,EAAA,CAIZ,UAAA,EAAA,MAAA,EAAA,WAAA,EAniBgB,WAAA,CAAY,WAmiB5B,EAAA,GAliBM,MAAA,CAAO,MAkiBb,CAliBoB,YAkiBpB,EAliBkC,oBAkiBlC,CAAA;;;;;gDA5hB+C,MAAA,CAAO,OAAO,iBAAiB;;;;;8CAQxE,MAAA,CAAO,OAAO,MAAA,CAAO,OAAO,kBAAkB,sBAAsB,KAAA,CAAM;;;;;0CAMvC,MAAA,CAAO;;cAChD;;;;cASY,kBAAA,SAA2B,uBAAA;cAEG;;;;cA+B9B,wBAAA,SAAiC,6BAAA;cA+djC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ResolvedConfig } from "./Types.mjs";
|
|
2
|
+
import { ColdStorageError, HotStorageError } from "./Errors.mjs";
|
|
2
3
|
import { ServerBroadcast, SnapshotMessage } from "./Protocol.mjs";
|
|
3
4
|
import { ColdStorageTag } from "./ColdStorage.mjs";
|
|
4
5
|
import { HotStorageTag } from "./HotStorage.mjs";
|
|
@@ -17,22 +18,29 @@ type SubmitResult = {
|
|
|
17
18
|
readonly success: false;
|
|
18
19
|
readonly reason: string;
|
|
19
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* Error type for DocumentManager operations
|
|
23
|
+
*/
|
|
24
|
+
type DocumentManagerError = ColdStorageError | HotStorageError;
|
|
20
25
|
/**
|
|
21
26
|
* Internal service for managing document lifecycle.
|
|
22
27
|
*/
|
|
23
28
|
interface DocumentManager {
|
|
24
29
|
/**
|
|
25
30
|
* Submit a transaction to a document.
|
|
31
|
+
* May fail with ColdStorageError or HotStorageError if storage is unavailable.
|
|
26
32
|
*/
|
|
27
|
-
readonly submit: (documentId: string, transaction: Transaction.Transaction) => Effect.Effect<SubmitResult>;
|
|
33
|
+
readonly submit: (documentId: string, transaction: Transaction.Transaction) => Effect.Effect<SubmitResult, DocumentManagerError>;
|
|
28
34
|
/**
|
|
29
35
|
* Get a snapshot of a document.
|
|
36
|
+
* May fail with ColdStorageError or HotStorageError if storage is unavailable.
|
|
30
37
|
*/
|
|
31
|
-
readonly getSnapshot: (documentId: string) => Effect.Effect<SnapshotMessage>;
|
|
38
|
+
readonly getSnapshot: (documentId: string) => Effect.Effect<SnapshotMessage, DocumentManagerError>;
|
|
32
39
|
/**
|
|
33
40
|
* Subscribe to broadcasts for a document.
|
|
41
|
+
* May fail with ColdStorageError or HotStorageError if storage is unavailable.
|
|
34
42
|
*/
|
|
35
|
-
readonly subscribe: (documentId: string) => Effect.Effect<Stream.Stream<ServerBroadcast>,
|
|
43
|
+
readonly subscribe: (documentId: string) => Effect.Effect<Stream.Stream<ServerBroadcast>, DocumentManagerError, Scope.Scope>;
|
|
36
44
|
/**
|
|
37
45
|
* Touch a document to update its last activity time.
|
|
38
46
|
* Call this on any client activity to prevent idle GC.
|
|
@@ -55,5 +63,5 @@ declare const DocumentManager: {
|
|
|
55
63
|
layer: Layer.Layer<DocumentManagerTag, never, ColdStorageTag | HotStorageTag | DocumentManagerConfigTag>;
|
|
56
64
|
};
|
|
57
65
|
//#endregion
|
|
58
|
-
export { DocumentManager, DocumentManagerConfigTag, DocumentManagerTag, SubmitResult };
|
|
66
|
+
export { DocumentManager, DocumentManagerConfigTag, DocumentManagerError, DocumentManagerTag, SubmitResult };
|
|
59
67
|
//# sourceMappingURL=DocumentManager.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentManager.d.mts","names":[],"sources":["../src/DocumentManager.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DocumentManager.d.mts","names":[],"sources":["../src/DocumentManager.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AAiFqB,KAtCT,YAAA,GAsCgB;EAAyB,SAAA,OAAA,EAAA,IAAA;EAAsB,SAAM,OAAA,EAAA,MAAA;CAA1E,GAAA;EAMmC,SAAO,OAAA,EAAA,KAAA;EAAM,SAAA,MAAA,EAAA,MAAA;AACtD,CAAA;;;;KAlCW,oBAAA,GAAuB,mBAAmB;AA2CtD;AAE2C;;UAxC1B,eAAA;;;;AAuEjB;EA+da,SAAA,MAAA,EAAA,CAIZ,UAAA,EAAA,MAAA,EAAA,WAAA,EAniBgB,WAAA,CAAY,WAmiB5B,EAAA,GAliBM,MAAA,CAAO,MAkiBb,CAliBoB,YAkiBpB,EAliBkC,oBAkiBlC,CAAA;;;;;gDA5hB+C,MAAA,CAAO,OAAO,iBAAiB;;;;;8CAQxE,MAAA,CAAO,OAAO,MAAA,CAAO,OAAO,kBAAkB,sBAAsB,KAAA,CAAM;;;;;0CAMvC,MAAA,CAAO;;cAChD;;;;cASY,kBAAA,SAA2B,uBAAA;cAEG;;;;cA+B9B,wBAAA,SAAiC,6BAAA;cA+djC"}
|