@voidhash/mimic-effect 1.0.0-beta.6 → 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 +41 -41
- package/dist/ColdStorage.cjs +9 -5
- package/dist/ColdStorage.d.cts.map +1 -1
- package/dist/ColdStorage.d.mts.map +1 -1
- package/dist/ColdStorage.mjs +9 -5
- package/dist/ColdStorage.mjs.map +1 -1
- 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/HotStorage.cjs +17 -13
- package/dist/HotStorage.d.cts.map +1 -1
- package/dist/HotStorage.d.mts.map +1 -1
- package/dist/HotStorage.mjs +17 -13
- package/dist/HotStorage.mjs.map +1 -1
- package/dist/MimicClusterServerEngine.cjs +31 -215
- package/dist/MimicClusterServerEngine.d.cts.map +1 -1
- package/dist/MimicClusterServerEngine.d.mts.map +1 -1
- package/dist/MimicClusterServerEngine.mjs +36 -220
- package/dist/MimicClusterServerEngine.mjs.map +1 -1
- package/dist/MimicServer.cjs +19 -19
- package/dist/MimicServer.d.cts.map +1 -1
- package/dist/MimicServer.d.mts.map +1 -1
- package/dist/MimicServer.mjs +19 -19
- package/dist/MimicServer.mjs.map +1 -1
- package/dist/MimicServerEngine.cjs +71 -9
- 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 +73 -11
- package/dist/MimicServerEngine.mjs.map +1 -1
- package/dist/PresenceManager.cjs +5 -5
- package/dist/PresenceManager.d.cts.map +1 -1
- package/dist/PresenceManager.d.mts.map +1 -1
- package/dist/PresenceManager.mjs +5 -5
- package/dist/PresenceManager.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/dist/testing/types.d.cts +3 -3
- package/package.json +3 -3
- package/src/ColdStorage.ts +21 -12
- package/src/DocumentInstance.ts +510 -0
- package/src/HotStorage.ts +75 -58
- package/src/MimicClusterServerEngine.ts +93 -398
- package/src/MimicServer.ts +83 -75
- package/src/MimicServerEngine.ts +170 -34
- package/src/PresenceManager.ts +44 -34
- 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 -614
- 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,24 +8,24 @@
|
|
|
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.55 kB[22m [2m│ gzip: 4.91 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/[
|
|
18
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServer.cjs [2m10.
|
|
16
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicClusterServerEngine.cjs [2m14.18 kB[22m [2m│ gzip: 3.37 kB[22m
|
|
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/[
|
|
22
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mHotStorage.cjs [2m 3.86 kB[22m [2m│ gzip: 1.27 kB[22m
|
|
23
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mPresenceManager.cjs [2m 3.81 kB[22m [2m│ gzip: 1.03 kB[22m
|
|
22
24
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mProtocol.cjs [2m 3.78 kB[22m [2m│ gzip: 1.14 kB[22m
|
|
23
25
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/assertions.cjs [2m 3.74 kB[22m [2m│ gzip: 1.16 kB[22m
|
|
24
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22mPresenceManager.cjs [2m 3.72 kB[22m [2m│ gzip: 1.00 kB[22m
|
|
25
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22mHotStorage.cjs [2m 3.64 kB[22m [2m│ gzip: 1.21 kB[22m
|
|
26
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/[22mColdStorage.cjs [2m 2.09 kB[22m [2m│ gzip: 0.82 kB[22m
|
|
27
28
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mErrors.cjs [2m 1.98 kB[22m [2m│ gzip: 0.61 kB[22m
|
|
28
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22mColdStorage.cjs [2m 1.91 kB[22m [2m│ gzip: 0.77 kB[22m
|
|
29
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
|
|
30
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
|
|
31
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
|
|
@@ -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,49 +70,49 @@
|
|
|
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.
|
|
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
76
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[1mtesting/index.mjs[22m [2m 0.60 kB[22m [2m│ gzip: 0.19 kB[22m
|
|
77
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/[22mMimicClusterServerEngine.mjs.map [2m42.30 kB[22m [2m│ gzip: 9.99 kB[22m
|
|
79
78
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.mjs.map [2m35.60 kB[22m [2m│ gzip: 6.44 kB[22m
|
|
80
79
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/HotStorageTestSuite.mjs [2m34.21 kB[22m [2m│ gzip: 5.06 kB[22m
|
|
81
80
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/ColdStorageTestSuite.mjs.map [2m31.92 kB[22m [2m│ gzip: 5.21 kB[22m
|
|
82
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
83
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
84
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
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
|
|
85
84
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/StorageIntegrationTestSuite.mjs [2m18.49 kB[22m [2m│ gzip: 3.63 kB[22m
|
|
86
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
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/[
|
|
89
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.mjs.map [2m10.
|
|
90
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
91
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[
|
|
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
|
|
92
93
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.mjs.map [2m 9.18 kB[22m [2m│ gzip: 2.15 kB[22m
|
|
93
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs.map [2m 9.11 kB[22m [2m│ gzip: 2.27 kB[22m
|
|
94
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
|
|
95
96
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/FailingStorage.mjs [2m 6.49 kB[22m [2m│ gzip: 1.52 kB[22m
|
|
96
97
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMetrics.mjs.map [2m 6.13 kB[22m [2m│ gzip: 1.43 kB[22m
|
|
97
98
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.mjs.map [2m 6.09 kB[22m [2m│ gzip: 1.85 kB[22m
|
|
98
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.mjs.map [2m
|
|
99
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServerEngine.mjs [2m 4.10 kB[22m [2m│ gzip: 1.35 kB[22m
|
|
99
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.mjs.map [2m 5.35 kB[22m [2m│ gzip: 1.64 kB[22m
|
|
100
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
|
|
101
102
|
[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/[
|
|
103
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs [2m 3.48 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
103
104
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs [2m 3.46 kB[22m [2m│ gzip: 1.15 kB[22m
|
|
104
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs [2m 3.39 kB[22m [2m│ gzip: 1.01 kB[22m
|
|
105
105
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.mjs [2m 3.35 kB[22m [2m│ gzip: 1.06 kB[22m
|
|
106
106
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/types.mjs.map [2m 3.22 kB[22m [2m│ gzip: 1.15 kB[22m
|
|
107
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
|
|
108
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.mjs [2m 2.01 kB[22m [2m│ gzip: 0.83 kB[22m
|
|
109
109
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.mjs [2m 1.73 kB[22m [2m│ gzip: 0.61 kB[22m
|
|
110
110
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.d.mts.map [2m 1.57 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
111
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/[
|
|
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
|
|
113
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
|
|
114
115
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.d.mts.map [2m 0.70 kB[22m [2m│ gzip: 0.37 kB[22m
|
|
115
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mDocumentManager.d.mts.map [2m 0.69 kB[22m [2m│ gzip: 0.38 kB[22m
|
|
116
116
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.d.mts.map [2m 0.67 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
117
117
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.d.mts.map [2m 0.61 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
118
118
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.d.mts.map [2m 0.60 kB[22m [2m│ gzip: 0.32 kB[22m
|
|
@@ -131,14 +131,14 @@
|
|
|
131
131
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicClusterServerEngine.d.mts.map [2m 0.25 kB[22m [2m│ gzip: 0.19 kB[22m
|
|
132
132
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServer.d.mts.map [2m 0.22 kB[22m [2m│ gzip: 0.16 kB[22m
|
|
133
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.
|
|
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
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.
|
|
136
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mProtocol.d.mts[39m [2m 5.84 kB[22m [2m│ gzip: 1.34 kB[22m
|
|
137
137
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mTypes.d.mts[39m [2m 5.47 kB[22m [2m│ gzip: 1.54 kB[22m
|
|
138
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.
|
|
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
|
|
140
141
|
[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
142
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mHotStorage.d.mts[39m [2m 2.72 kB[22m [2m│ gzip: 1.08 kB[22m
|
|
143
143
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicAuthService.d.mts[39m [2m 2.70 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
144
144
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/HotStorageTestSuite.d.mts[39m [2m 1.93 kB[22m [2m│ gzip: 0.57 kB[22m
|
|
@@ -150,5 +150,5 @@
|
|
|
150
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
151
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicClusterServerEngine.d.mts[39m [2m 0.82 kB[22m [2m│ gzip: 0.33 kB[22m
|
|
152
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:
|
|
154
|
-
[32m✔[39m Build complete in [
|
|
153
|
+
[34mℹ[39m [34m[ESM][39m 78 files, total: 497.18 kB
|
|
154
|
+
[32m✔[39m Build complete in [32m6572ms[39m
|
package/dist/ColdStorage.cjs
CHANGED
|
@@ -36,18 +36,22 @@ var ColdStorageTag = class extends effect.Context.Tag("@voidhash/mimic-effect/Co
|
|
|
36
36
|
const make = (effect$1) => effect.Layer.effect(ColdStorageTag, effect$1);
|
|
37
37
|
let InMemory;
|
|
38
38
|
(function(_InMemory) {
|
|
39
|
-
_InMemory.make = () => effect.Layer.effect(ColdStorageTag, effect.Effect.
|
|
39
|
+
_InMemory.make = () => effect.Layer.effect(ColdStorageTag, effect.Effect.fn("cold-storage.in-memory.create")(function* () {
|
|
40
40
|
const store = yield* effect.Ref.make(effect.HashMap.empty());
|
|
41
41
|
return {
|
|
42
|
-
load:
|
|
42
|
+
load: effect.Effect.fn("cold-storage.load")(function* (documentId) {
|
|
43
43
|
const current = yield* effect.Ref.get(store);
|
|
44
44
|
const result = effect.HashMap.get(current, documentId);
|
|
45
45
|
return result._tag === "Some" ? result.value : void 0;
|
|
46
46
|
}),
|
|
47
|
-
save:
|
|
48
|
-
|
|
47
|
+
save: effect.Effect.fn("cold-storage.save")(function* (documentId, document) {
|
|
48
|
+
yield* effect.Ref.update(store, (map) => effect.HashMap.set(map, documentId, document));
|
|
49
|
+
}),
|
|
50
|
+
delete: effect.Effect.fn("cold-storage.delete")(function* (documentId) {
|
|
51
|
+
yield* effect.Ref.update(store, (map) => effect.HashMap.remove(map, documentId));
|
|
52
|
+
})
|
|
49
53
|
};
|
|
50
|
-
}));
|
|
54
|
+
})());
|
|
51
55
|
})(InMemory || (InMemory = {}));
|
|
52
56
|
const ColdStorage = {
|
|
53
57
|
Tag: ColdStorageTag,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColdStorage.d.cts","names":[],"sources":["../src/ColdStorage.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AA2CC,UAvBgB,WAAA,CAuBhB;;;;;EASY,SAAA,IAAA,EAAA,CAAA,UAAe,EAAA,MAAQ,EAAA,GAzB7B,MAAA,CAAO,MA4BX,CA5BkB,cA4BlB,GAAA,SAAA,EA5B8C,gBA4B9C,CAAA;EA4Cc;
|
|
1
|
+
{"version":3,"file":"ColdStorage.d.cts","names":[],"sources":["../src/ColdStorage.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AA2CC,UAvBgB,WAAA,CAuBhB;;;;;EASY,SAAA,IAAA,EAAA,CAAA,UAAe,EAAA,MAAQ,EAAA,GAzB7B,MAAA,CAAO,MA4BX,CA5BkB,cA4BlB,GAAA,SAAA,EA5B8C,gBA4B9C,CAAA;EA4Cc;AAyCjB;;EAvDwB,SAAA,IAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAnDV,cAmDU,EAAA,GAlDjB,MAAA,CAAO,MAkDU,CAAA,IAAA,EAlDG,gBAkDH,CAAA;EAAa;;;EACtB,SAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,GA5CR,MAAA,CAAO,MA4CC,CAAA,IAAA,EA5CY,gBA4CZ,CAAA;;cA3Cd,mBA2CiC,kBAAA,eAAA,EAAA,oCAAA,aAAA,CAAA;;;;cAlCrB,cAAA,SAAuB,mBAAA;;;;;;;kBA+CnB,QAAA;;;;oBAIS,KAAA,CAAM,MAAM;;cAqCzB;;uBAvDH,MAAA,CAAO,OAAO,aAAa,GAAG,OACrC,KAAA,CAAM,MAAM,gBAAgB,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColdStorage.d.mts","names":[],"sources":["../src/ColdStorage.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AA2CC,UAvBgB,WAAA,CAuBhB;;;;;EASY,SAAA,IAAA,EAAA,CAAA,UAAe,EAAA,MAAQ,EAAA,GAzB7B,MAAA,CAAO,MA4BX,CA5BkB,cA4BlB,GAAA,SAAA,EA5B8C,gBA4B9C,CAAA;EA4Cc;
|
|
1
|
+
{"version":3,"file":"ColdStorage.d.mts","names":[],"sources":["../src/ColdStorage.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AA2CC,UAvBgB,WAAA,CAuBhB;;;;;EASY,SAAA,IAAA,EAAA,CAAA,UAAe,EAAA,MAAQ,EAAA,GAzB7B,MAAA,CAAO,MA4BX,CA5BkB,cA4BlB,GAAA,SAAA,EA5B8C,gBA4B9C,CAAA;EA4Cc;AAyCjB;;EAvDwB,SAAA,IAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAnDV,cAmDU,EAAA,GAlDjB,MAAA,CAAO,MAkDU,CAAA,IAAA,EAlDG,gBAkDH,CAAA;EAAa;;;EACtB,SAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,GA5CR,MAAA,CAAO,MA4CC,CAAA,IAAA,EA5CY,gBA4CZ,CAAA;;cA3Cd,mBA2CiC,kBAAA,eAAA,EAAA,oCAAA,aAAA,CAAA;;;;cAlCrB,cAAA,SAAuB,mBAAA;;;;;;;kBA+CnB,QAAA;;;;oBAIS,KAAA,CAAM,MAAM;;cAqCzB;;uBAvDH,MAAA,CAAO,OAAO,aAAa,GAAG,OACrC,KAAA,CAAM,MAAM,gBAAgB,GAAG"}
|
package/dist/ColdStorage.mjs
CHANGED
|
@@ -36,18 +36,22 @@ var ColdStorageTag = class extends Context.Tag("@voidhash/mimic-effect/ColdStora
|
|
|
36
36
|
const make = (effect) => Layer.effect(ColdStorageTag, effect);
|
|
37
37
|
let InMemory;
|
|
38
38
|
(function(_InMemory) {
|
|
39
|
-
_InMemory.make = () => Layer.effect(ColdStorageTag, Effect.
|
|
39
|
+
_InMemory.make = () => Layer.effect(ColdStorageTag, Effect.fn("cold-storage.in-memory.create")(function* () {
|
|
40
40
|
const store = yield* Ref.make(HashMap.empty());
|
|
41
41
|
return {
|
|
42
|
-
load:
|
|
42
|
+
load: Effect.fn("cold-storage.load")(function* (documentId) {
|
|
43
43
|
const current = yield* Ref.get(store);
|
|
44
44
|
const result = HashMap.get(current, documentId);
|
|
45
45
|
return result._tag === "Some" ? result.value : void 0;
|
|
46
46
|
}),
|
|
47
|
-
save: (
|
|
48
|
-
|
|
47
|
+
save: Effect.fn("cold-storage.save")(function* (documentId, document) {
|
|
48
|
+
yield* Ref.update(store, (map) => HashMap.set(map, documentId, document));
|
|
49
|
+
}),
|
|
50
|
+
delete: Effect.fn("cold-storage.delete")(function* (documentId) {
|
|
51
|
+
yield* Ref.update(store, (map) => HashMap.remove(map, documentId));
|
|
52
|
+
})
|
|
49
53
|
};
|
|
50
|
-
}));
|
|
54
|
+
})());
|
|
51
55
|
})(InMemory || (InMemory = {}));
|
|
52
56
|
const ColdStorage = {
|
|
53
57
|
Tag: ColdStorageTag,
|
package/dist/ColdStorage.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColdStorage.mjs","names":[],"sources":["../src/ColdStorage.ts"],"sourcesContent":["/**\n * @voidhash/mimic-effect - ColdStorage\n *\n * Interface and implementations for document snapshot storage.\n */\nimport { Context, Effect, HashMap, Layer, Ref } from \"effect\";\nimport type { StoredDocument } from \"./Types\";\nimport { ColdStorageError } from \"./Errors\";\n\n// =============================================================================\n// ColdStorage Interface\n// =============================================================================\n\n/**\n * ColdStorage interface for storing document snapshots.\n *\n * This is the \"cold\" tier of the two-tier storage system.\n * It stores complete document snapshots less frequently (on periodic intervals\n * or after a threshold of transactions).\n */\nexport interface ColdStorage {\n /**\n * Load a document snapshot.\n * Returns undefined if the document doesn't exist.\n */\n readonly load: (\n documentId: string\n ) => Effect.Effect<StoredDocument | undefined, ColdStorageError>;\n\n /**\n * Save a document snapshot.\n */\n readonly save: (\n documentId: string,\n document: StoredDocument\n ) => Effect.Effect<void, ColdStorageError>;\n\n /**\n * Delete a document snapshot.\n */\n readonly delete: (\n documentId: string\n ) => Effect.Effect<void, ColdStorageError>;\n}\n\n// =============================================================================\n// Context Tag\n// =============================================================================\n\n/**\n * Context tag for ColdStorage service\n */\nexport class ColdStorageTag extends Context.Tag(\"@voidhash/mimic-effect/ColdStorage\")<\n ColdStorageTag,\n ColdStorage\n>() {}\n\n// =============================================================================\n// Factory\n// =============================================================================\n\n/**\n * Create a ColdStorage layer from an Effect that produces a ColdStorage service.\n *\n * This allows you to access other Effect services when implementing custom storage.\n *\n * @example\n * ```typescript\n * const Cold = ColdStorage.make(\n * Effect.gen(function*() {\n * const redis = yield* RedisService\n *\n * return {\n * load: (documentId) => redis.get(`doc:${documentId}`).pipe(\n * Effect.map(data => data ? JSON.parse(data) : undefined)\n * ),\n * save: (documentId, document) =>\n * redis.set(`doc:${documentId}`, JSON.stringify(document)),\n * delete: (documentId) => redis.del(`doc:${documentId}`),\n * }\n * })\n * )\n * ```\n */\nexport const make = <E, R>(\n effect: Effect.Effect<ColdStorage, E, R>\n): Layer.Layer<ColdStorageTag, E, R> =>\n Layer.effect(ColdStorageTag, effect);\n\n// =============================================================================\n// InMemory Implementation\n// =============================================================================\n\n/**\n * In-memory ColdStorage implementation.\n *\n * Useful for testing and development. Not suitable for production\n * as data is lost when the process restarts.\n */\nexport namespace InMemory {\n /**\n * Create an in-memory ColdStorage layer.\n */\n export const make = (): Layer.Layer<ColdStorageTag> =>\n Layer.effect(\n ColdStorageTag,\n Effect.
|
|
1
|
+
{"version":3,"file":"ColdStorage.mjs","names":[],"sources":["../src/ColdStorage.ts"],"sourcesContent":["/**\n * @voidhash/mimic-effect - ColdStorage\n *\n * Interface and implementations for document snapshot storage.\n */\nimport { Context, Effect, HashMap, Layer, Ref } from \"effect\";\nimport type { StoredDocument } from \"./Types\";\nimport { ColdStorageError } from \"./Errors\";\n\n// =============================================================================\n// ColdStorage Interface\n// =============================================================================\n\n/**\n * ColdStorage interface for storing document snapshots.\n *\n * This is the \"cold\" tier of the two-tier storage system.\n * It stores complete document snapshots less frequently (on periodic intervals\n * or after a threshold of transactions).\n */\nexport interface ColdStorage {\n /**\n * Load a document snapshot.\n * Returns undefined if the document doesn't exist.\n */\n readonly load: (\n documentId: string\n ) => Effect.Effect<StoredDocument | undefined, ColdStorageError>;\n\n /**\n * Save a document snapshot.\n */\n readonly save: (\n documentId: string,\n document: StoredDocument\n ) => Effect.Effect<void, ColdStorageError>;\n\n /**\n * Delete a document snapshot.\n */\n readonly delete: (\n documentId: string\n ) => Effect.Effect<void, ColdStorageError>;\n}\n\n// =============================================================================\n// Context Tag\n// =============================================================================\n\n/**\n * Context tag for ColdStorage service\n */\nexport class ColdStorageTag extends Context.Tag(\"@voidhash/mimic-effect/ColdStorage\")<\n ColdStorageTag,\n ColdStorage\n>() {}\n\n// =============================================================================\n// Factory\n// =============================================================================\n\n/**\n * Create a ColdStorage layer from an Effect that produces a ColdStorage service.\n *\n * This allows you to access other Effect services when implementing custom storage.\n *\n * @example\n * ```typescript\n * const Cold = ColdStorage.make(\n * Effect.gen(function*() {\n * const redis = yield* RedisService\n *\n * return {\n * load: (documentId) => redis.get(`doc:${documentId}`).pipe(\n * Effect.map(data => data ? JSON.parse(data) : undefined)\n * ),\n * save: (documentId, document) =>\n * redis.set(`doc:${documentId}`, JSON.stringify(document)),\n * delete: (documentId) => redis.del(`doc:${documentId}`),\n * }\n * })\n * )\n * ```\n */\nexport const make = <E, R>(\n effect: Effect.Effect<ColdStorage, E, R>\n): Layer.Layer<ColdStorageTag, E, R> =>\n Layer.effect(ColdStorageTag, effect);\n\n// =============================================================================\n// InMemory Implementation\n// =============================================================================\n\n/**\n * In-memory ColdStorage implementation.\n *\n * Useful for testing and development. Not suitable for production\n * as data is lost when the process restarts.\n */\nexport namespace InMemory {\n /**\n * Create an in-memory ColdStorage layer.\n */\n export const make = (): Layer.Layer<ColdStorageTag> =>\n Layer.effect(\n ColdStorageTag,\n Effect.fn(\"cold-storage.in-memory.create\")(function* () {\n const store = yield* Ref.make(HashMap.empty<string, StoredDocument>());\n\n return {\n load: Effect.fn(\"cold-storage.load\")(function* (documentId: string) {\n const current = yield* Ref.get(store);\n const result = HashMap.get(current, documentId);\n return result._tag === \"Some\" ? result.value : undefined;\n }),\n\n save: Effect.fn(\"cold-storage.save\")(\n function* (documentId: string, document: StoredDocument) {\n yield* Ref.update(store, (map) =>\n HashMap.set(map, documentId, document)\n );\n }\n ),\n\n delete: Effect.fn(\"cold-storage.delete\")(\n function* (documentId: string) {\n yield* Ref.update(store, (map) =>\n HashMap.remove(map, documentId)\n );\n }\n ),\n };\n })()\n );\n}\n\n// =============================================================================\n// Re-export namespace\n// =============================================================================\n\nexport const ColdStorage = {\n Tag: ColdStorageTag,\n make,\n InMemory,\n};\n"],"mappings":";;;;;;;;;;;AAoDA,IAAa,iBAAb,cAAoC,QAAQ,IAAI,qCAAqC,EAGlF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AA6BJ,MAAa,QACX,WAEA,MAAM,OAAO,gBAAgB,OAAO;;;wBAiBlC,MAAM,OACJ,gBACA,OAAO,GAAG,gCAAgC,CAAC,aAAa;EACtD,MAAM,QAAQ,OAAO,IAAI,KAAK,QAAQ,OAA+B,CAAC;AAEtE,SAAO;GACL,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,YAAoB;IAClE,MAAM,UAAU,OAAO,IAAI,IAAI,MAAM;IACrC,MAAM,SAAS,QAAQ,IAAI,SAAS,WAAW;AAC/C,WAAO,OAAO,SAAS,SAAS,OAAO,QAAQ;KAC/C;GAEF,MAAM,OAAO,GAAG,oBAAoB,CAClC,WAAW,YAAoB,UAA0B;AACvD,WAAO,IAAI,OAAO,QAAQ,QACxB,QAAQ,IAAI,KAAK,YAAY,SAAS,CACvC;KAEJ;GAED,QAAQ,OAAO,GAAG,sBAAsB,CACtC,WAAW,YAAoB;AAC7B,WAAO,IAAI,OAAO,QAAQ,QACxB,QAAQ,OAAO,KAAK,WAAW,CAChC;KAEJ;GACF;GACD,EAAE,CACL;;AAOL,MAAa,cAAc;CACzB,KAAK;CACL;CACA;CACD"}
|
|
@@ -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"}
|