@voidhash/mimic-effect 0.0.8 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/.turbo/turbo-build.log +93 -89
  2. package/README.md +385 -0
  3. package/dist/ColdStorage.cjs +60 -0
  4. package/dist/ColdStorage.d.cts +53 -0
  5. package/dist/ColdStorage.d.cts.map +1 -0
  6. package/dist/ColdStorage.d.mts +53 -0
  7. package/dist/ColdStorage.d.mts.map +1 -0
  8. package/dist/ColdStorage.mjs +60 -0
  9. package/dist/ColdStorage.mjs.map +1 -0
  10. package/dist/DocumentManager.cjs +193 -82
  11. package/dist/DocumentManager.d.cts +33 -19
  12. package/dist/DocumentManager.d.cts.map +1 -1
  13. package/dist/DocumentManager.d.mts +33 -19
  14. package/dist/DocumentManager.d.mts.map +1 -1
  15. package/dist/DocumentManager.mjs +189 -67
  16. package/dist/DocumentManager.mjs.map +1 -1
  17. package/dist/Errors.cjs +45 -0
  18. package/dist/Errors.d.cts +81 -0
  19. package/dist/Errors.d.cts.map +1 -0
  20. package/dist/Errors.d.mts +81 -0
  21. package/dist/Errors.d.mts.map +1 -0
  22. package/dist/Errors.mjs +40 -0
  23. package/dist/Errors.mjs.map +1 -0
  24. package/dist/HotStorage.cjs +77 -0
  25. package/dist/HotStorage.d.cts +54 -0
  26. package/dist/HotStorage.d.cts.map +1 -0
  27. package/dist/HotStorage.d.mts +54 -0
  28. package/dist/HotStorage.d.mts.map +1 -0
  29. package/dist/HotStorage.mjs +77 -0
  30. package/dist/HotStorage.mjs.map +1 -0
  31. package/dist/Metrics.cjs +121 -0
  32. package/dist/Metrics.d.cts +27 -0
  33. package/dist/Metrics.d.cts.map +1 -0
  34. package/dist/Metrics.d.mts +27 -0
  35. package/dist/Metrics.d.mts.map +1 -0
  36. package/dist/Metrics.mjs +106 -0
  37. package/dist/Metrics.mjs.map +1 -0
  38. package/dist/MimicAuthService.cjs +61 -45
  39. package/dist/MimicAuthService.d.cts +61 -48
  40. package/dist/MimicAuthService.d.cts.map +1 -1
  41. package/dist/MimicAuthService.d.mts +61 -48
  42. package/dist/MimicAuthService.d.mts.map +1 -1
  43. package/dist/MimicAuthService.mjs +60 -36
  44. package/dist/MimicAuthService.mjs.map +1 -1
  45. package/dist/MimicClusterServerEngine.cjs +443 -0
  46. package/dist/MimicClusterServerEngine.d.cts +17 -0
  47. package/dist/MimicClusterServerEngine.d.cts.map +1 -0
  48. package/dist/MimicClusterServerEngine.d.mts +17 -0
  49. package/dist/MimicClusterServerEngine.d.mts.map +1 -0
  50. package/dist/MimicClusterServerEngine.mjs +445 -0
  51. package/dist/MimicClusterServerEngine.mjs.map +1 -0
  52. package/dist/MimicServer.cjs +205 -96
  53. package/dist/MimicServer.d.cts +9 -110
  54. package/dist/MimicServer.d.cts.map +1 -1
  55. package/dist/MimicServer.d.mts +9 -110
  56. package/dist/MimicServer.d.mts.map +1 -1
  57. package/dist/MimicServer.mjs +206 -90
  58. package/dist/MimicServer.mjs.map +1 -1
  59. package/dist/MimicServerEngine.cjs +97 -0
  60. package/dist/MimicServerEngine.d.cts +75 -0
  61. package/dist/MimicServerEngine.d.cts.map +1 -0
  62. package/dist/MimicServerEngine.d.mts +75 -0
  63. package/dist/MimicServerEngine.d.mts.map +1 -0
  64. package/dist/MimicServerEngine.mjs +97 -0
  65. package/dist/MimicServerEngine.mjs.map +1 -0
  66. package/dist/PresenceManager.cjs +75 -91
  67. package/dist/PresenceManager.d.cts +17 -66
  68. package/dist/PresenceManager.d.cts.map +1 -1
  69. package/dist/PresenceManager.d.mts +17 -66
  70. package/dist/PresenceManager.d.mts.map +1 -1
  71. package/dist/PresenceManager.mjs +74 -78
  72. package/dist/PresenceManager.mjs.map +1 -1
  73. package/dist/Protocol.cjs +146 -0
  74. package/dist/Protocol.d.cts +203 -0
  75. package/dist/Protocol.d.cts.map +1 -0
  76. package/dist/Protocol.d.mts +203 -0
  77. package/dist/Protocol.d.mts.map +1 -0
  78. package/dist/Protocol.mjs +132 -0
  79. package/dist/Protocol.mjs.map +1 -0
  80. package/dist/Types.d.cts +172 -0
  81. package/dist/Types.d.cts.map +1 -0
  82. package/dist/Types.d.mts +172 -0
  83. package/dist/Types.d.mts.map +1 -0
  84. package/dist/_virtual/rolldown_runtime.cjs +1 -25
  85. package/dist/_virtual/rolldown_runtime.mjs +4 -1
  86. package/dist/index.cjs +37 -75
  87. package/dist/index.d.cts +13 -12
  88. package/dist/index.d.mts +13 -12
  89. package/dist/index.mjs +12 -12
  90. package/package.json +14 -6
  91. package/src/ColdStorage.ts +136 -0
  92. package/src/DocumentManager.ts +445 -193
  93. package/src/Errors.ts +100 -0
  94. package/src/HotStorage.ts +165 -0
  95. package/src/Metrics.ts +163 -0
  96. package/src/MimicAuthService.ts +126 -64
  97. package/src/MimicClusterServerEngine.ts +824 -0
  98. package/src/MimicServer.ts +448 -195
  99. package/src/MimicServerEngine.ts +272 -0
  100. package/src/PresenceManager.ts +169 -240
  101. package/src/Protocol.ts +350 -0
  102. package/src/Types.ts +231 -0
  103. package/src/index.ts +57 -23
  104. package/tests/ColdStorage.test.ts +136 -0
  105. package/tests/DocumentManager.test.ts +158 -287
  106. package/tests/HotStorage.test.ts +143 -0
  107. package/tests/MimicAuthService.test.ts +102 -134
  108. package/tests/MimicClusterServerEngine.test.ts +587 -0
  109. package/tests/MimicServer.test.ts +90 -226
  110. package/tests/MimicServerEngine.test.ts +521 -0
  111. package/tests/PresenceManager.test.ts +22 -63
  112. package/tests/Protocol.test.ts +190 -0
  113. package/tsconfig.json +1 -1
  114. package/dist/DocumentProtocol.cjs +0 -94
  115. package/dist/DocumentProtocol.d.cts +0 -113
  116. package/dist/DocumentProtocol.d.cts.map +0 -1
  117. package/dist/DocumentProtocol.d.mts +0 -113
  118. package/dist/DocumentProtocol.d.mts.map +0 -1
  119. package/dist/DocumentProtocol.mjs +0 -89
  120. package/dist/DocumentProtocol.mjs.map +0 -1
  121. package/dist/MimicConfig.cjs +0 -60
  122. package/dist/MimicConfig.d.cts +0 -141
  123. package/dist/MimicConfig.d.cts.map +0 -1
  124. package/dist/MimicConfig.d.mts +0 -141
  125. package/dist/MimicConfig.d.mts.map +0 -1
  126. package/dist/MimicConfig.mjs +0 -50
  127. package/dist/MimicConfig.mjs.map +0 -1
  128. package/dist/MimicDataStorage.cjs +0 -83
  129. package/dist/MimicDataStorage.d.cts +0 -113
  130. package/dist/MimicDataStorage.d.cts.map +0 -1
  131. package/dist/MimicDataStorage.d.mts +0 -113
  132. package/dist/MimicDataStorage.d.mts.map +0 -1
  133. package/dist/MimicDataStorage.mjs +0 -74
  134. package/dist/MimicDataStorage.mjs.map +0 -1
  135. package/dist/WebSocketHandler.cjs +0 -365
  136. package/dist/WebSocketHandler.d.cts +0 -34
  137. package/dist/WebSocketHandler.d.cts.map +0 -1
  138. package/dist/WebSocketHandler.d.mts +0 -34
  139. package/dist/WebSocketHandler.d.mts.map +0 -1
  140. package/dist/WebSocketHandler.mjs +0 -355
  141. package/dist/WebSocketHandler.mjs.map +0 -1
  142. package/dist/auth/NoAuth.cjs +0 -43
  143. package/dist/auth/NoAuth.d.cts +0 -22
  144. package/dist/auth/NoAuth.d.cts.map +0 -1
  145. package/dist/auth/NoAuth.d.mts +0 -22
  146. package/dist/auth/NoAuth.d.mts.map +0 -1
  147. package/dist/auth/NoAuth.mjs +0 -36
  148. package/dist/auth/NoAuth.mjs.map +0 -1
  149. package/dist/errors.cjs +0 -74
  150. package/dist/errors.d.cts +0 -89
  151. package/dist/errors.d.cts.map +0 -1
  152. package/dist/errors.d.mts +0 -89
  153. package/dist/errors.d.mts.map +0 -1
  154. package/dist/errors.mjs +0 -67
  155. package/dist/errors.mjs.map +0 -1
  156. package/dist/storage/InMemoryDataStorage.cjs +0 -57
  157. package/dist/storage/InMemoryDataStorage.d.cts +0 -19
  158. package/dist/storage/InMemoryDataStorage.d.cts.map +0 -1
  159. package/dist/storage/InMemoryDataStorage.d.mts +0 -19
  160. package/dist/storage/InMemoryDataStorage.d.mts.map +0 -1
  161. package/dist/storage/InMemoryDataStorage.mjs +0 -48
  162. package/dist/storage/InMemoryDataStorage.mjs.map +0 -1
  163. package/src/DocumentProtocol.ts +0 -112
  164. package/src/MimicConfig.ts +0 -211
  165. package/src/MimicDataStorage.ts +0 -157
  166. package/src/WebSocketHandler.ts +0 -735
  167. package/src/auth/NoAuth.ts +0 -46
  168. package/src/errors.ts +0 -113
  169. package/src/storage/InMemoryDataStorage.ts +0 -66
  170. package/tests/DocumentProtocol.test.ts +0 -113
  171. package/tests/InMemoryDataStorage.test.ts +0 -190
  172. package/tests/MimicConfig.test.ts +0 -290
  173. package/tests/MimicDataStorage.test.ts +0 -190
  174. package/tests/NoAuth.test.ts +0 -94
  175. package/tests/WebSocketHandler.test.ts +0 -321
  176. package/tests/errors.test.ts +0 -77
@@ -0,0 +1,60 @@
1
+ let effect = require("effect");
2
+
3
+ //#region src/ColdStorage.ts
4
+ /**
5
+ * @voidhash/mimic-effect - ColdStorage
6
+ *
7
+ * Interface and implementations for document snapshot storage.
8
+ */
9
+ /**
10
+ * Context tag for ColdStorage service
11
+ */
12
+ var ColdStorageTag = class extends effect.Context.Tag("@voidhash/mimic-effect/ColdStorage")() {};
13
+ /**
14
+ * Create a ColdStorage layer from an Effect that produces a ColdStorage service.
15
+ *
16
+ * This allows you to access other Effect services when implementing custom storage.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const Cold = ColdStorage.make(
21
+ * Effect.gen(function*() {
22
+ * const redis = yield* RedisService
23
+ *
24
+ * return {
25
+ * load: (documentId) => redis.get(`doc:${documentId}`).pipe(
26
+ * Effect.map(data => data ? JSON.parse(data) : undefined)
27
+ * ),
28
+ * save: (documentId, document) =>
29
+ * redis.set(`doc:${documentId}`, JSON.stringify(document)),
30
+ * delete: (documentId) => redis.del(`doc:${documentId}`),
31
+ * }
32
+ * })
33
+ * )
34
+ * ```
35
+ */
36
+ const make = (effect$1) => effect.Layer.effect(ColdStorageTag, effect$1);
37
+ let InMemory;
38
+ (function(_InMemory) {
39
+ _InMemory.make = () => effect.Layer.effect(ColdStorageTag, effect.Effect.gen(function* () {
40
+ const store = yield* effect.Ref.make(effect.HashMap.empty());
41
+ return {
42
+ load: (documentId) => effect.Effect.gen(function* () {
43
+ const current = yield* effect.Ref.get(store);
44
+ const result = effect.HashMap.get(current, documentId);
45
+ return result._tag === "Some" ? result.value : void 0;
46
+ }),
47
+ save: (documentId, document) => effect.Ref.update(store, (map) => effect.HashMap.set(map, documentId, document)),
48
+ delete: (documentId) => effect.Ref.update(store, (map) => effect.HashMap.remove(map, documentId))
49
+ };
50
+ }));
51
+ })(InMemory || (InMemory = {}));
52
+ const ColdStorage = {
53
+ Tag: ColdStorageTag,
54
+ make,
55
+ InMemory
56
+ };
57
+
58
+ //#endregion
59
+ exports.ColdStorage = ColdStorage;
60
+ exports.ColdStorageTag = ColdStorageTag;
@@ -0,0 +1,53 @@
1
+ import { StoredDocument } from "./Types.cjs";
2
+ import { ColdStorageError } from "./Errors.cjs";
3
+ import { Context, Effect, Layer } from "effect";
4
+
5
+ //#region src/ColdStorage.d.ts
6
+
7
+ /**
8
+ * ColdStorage interface for storing document snapshots.
9
+ *
10
+ * This is the "cold" tier of the two-tier storage system.
11
+ * It stores complete document snapshots less frequently (on periodic intervals
12
+ * or after a threshold of transactions).
13
+ */
14
+ interface ColdStorage {
15
+ /**
16
+ * Load a document snapshot.
17
+ * Returns undefined if the document doesn't exist.
18
+ */
19
+ readonly load: (documentId: string) => Effect.Effect<StoredDocument | undefined, ColdStorageError>;
20
+ /**
21
+ * Save a document snapshot.
22
+ */
23
+ readonly save: (documentId: string, document: StoredDocument) => Effect.Effect<void, ColdStorageError>;
24
+ /**
25
+ * Delete a document snapshot.
26
+ */
27
+ readonly delete: (documentId: string) => Effect.Effect<void, ColdStorageError>;
28
+ }
29
+ declare const ColdStorageTag_base: Context.TagClass<ColdStorageTag, "@voidhash/mimic-effect/ColdStorage", ColdStorage>;
30
+ /**
31
+ * Context tag for ColdStorage service
32
+ */
33
+ declare class ColdStorageTag extends ColdStorageTag_base {}
34
+ /**
35
+ * In-memory ColdStorage implementation.
36
+ *
37
+ * Useful for testing and development. Not suitable for production
38
+ * as data is lost when the process restarts.
39
+ */
40
+ declare namespace InMemory {
41
+ /**
42
+ * Create an in-memory ColdStorage layer.
43
+ */
44
+ const make: () => Layer.Layer<ColdStorageTag>;
45
+ }
46
+ declare const ColdStorage: {
47
+ Tag: typeof ColdStorageTag;
48
+ make: <E, R>(effect: Effect.Effect<ColdStorage, E, R>) => Layer.Layer<ColdStorageTag, E, R>;
49
+ InMemory: typeof InMemory;
50
+ };
51
+ //#endregion
52
+ export { ColdStorage, ColdStorageTag };
53
+ //# sourceMappingURL=ColdStorage.d.cts.map
@@ -0,0 +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;AAgCjB;;EA9CwB,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;;cA4BzB;;uBA9CH,MAAA,CAAO,OAAO,aAAa,GAAG,OACrC,KAAA,CAAM,MAAM,gBAAgB,GAAG"}
@@ -0,0 +1,53 @@
1
+ import { StoredDocument } from "./Types.mjs";
2
+ import { ColdStorageError } from "./Errors.mjs";
3
+ import { Context, Effect, Layer } from "effect";
4
+
5
+ //#region src/ColdStorage.d.ts
6
+
7
+ /**
8
+ * ColdStorage interface for storing document snapshots.
9
+ *
10
+ * This is the "cold" tier of the two-tier storage system.
11
+ * It stores complete document snapshots less frequently (on periodic intervals
12
+ * or after a threshold of transactions).
13
+ */
14
+ interface ColdStorage {
15
+ /**
16
+ * Load a document snapshot.
17
+ * Returns undefined if the document doesn't exist.
18
+ */
19
+ readonly load: (documentId: string) => Effect.Effect<StoredDocument | undefined, ColdStorageError>;
20
+ /**
21
+ * Save a document snapshot.
22
+ */
23
+ readonly save: (documentId: string, document: StoredDocument) => Effect.Effect<void, ColdStorageError>;
24
+ /**
25
+ * Delete a document snapshot.
26
+ */
27
+ readonly delete: (documentId: string) => Effect.Effect<void, ColdStorageError>;
28
+ }
29
+ declare const ColdStorageTag_base: Context.TagClass<ColdStorageTag, "@voidhash/mimic-effect/ColdStorage", ColdStorage>;
30
+ /**
31
+ * Context tag for ColdStorage service
32
+ */
33
+ declare class ColdStorageTag extends ColdStorageTag_base {}
34
+ /**
35
+ * In-memory ColdStorage implementation.
36
+ *
37
+ * Useful for testing and development. Not suitable for production
38
+ * as data is lost when the process restarts.
39
+ */
40
+ declare namespace InMemory {
41
+ /**
42
+ * Create an in-memory ColdStorage layer.
43
+ */
44
+ const make: () => Layer.Layer<ColdStorageTag>;
45
+ }
46
+ declare const ColdStorage: {
47
+ Tag: typeof ColdStorageTag;
48
+ make: <E, R>(effect: Effect.Effect<ColdStorage, E, R>) => Layer.Layer<ColdStorageTag, E, R>;
49
+ InMemory: typeof InMemory;
50
+ };
51
+ //#endregion
52
+ export { ColdStorage, ColdStorageTag };
53
+ //# sourceMappingURL=ColdStorage.d.mts.map
@@ -0,0 +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;AAgCjB;;EA9CwB,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;;cA4BzB;;uBA9CH,MAAA,CAAO,OAAO,aAAa,GAAG,OACrC,KAAA,CAAM,MAAM,gBAAgB,GAAG"}
@@ -0,0 +1,60 @@
1
+ import { Context, Effect, HashMap, Layer, Ref } from "effect";
2
+
3
+ //#region src/ColdStorage.ts
4
+ /**
5
+ * @voidhash/mimic-effect - ColdStorage
6
+ *
7
+ * Interface and implementations for document snapshot storage.
8
+ */
9
+ /**
10
+ * Context tag for ColdStorage service
11
+ */
12
+ var ColdStorageTag = class extends Context.Tag("@voidhash/mimic-effect/ColdStorage")() {};
13
+ /**
14
+ * Create a ColdStorage layer from an Effect that produces a ColdStorage service.
15
+ *
16
+ * This allows you to access other Effect services when implementing custom storage.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const Cold = ColdStorage.make(
21
+ * Effect.gen(function*() {
22
+ * const redis = yield* RedisService
23
+ *
24
+ * return {
25
+ * load: (documentId) => redis.get(`doc:${documentId}`).pipe(
26
+ * Effect.map(data => data ? JSON.parse(data) : undefined)
27
+ * ),
28
+ * save: (documentId, document) =>
29
+ * redis.set(`doc:${documentId}`, JSON.stringify(document)),
30
+ * delete: (documentId) => redis.del(`doc:${documentId}`),
31
+ * }
32
+ * })
33
+ * )
34
+ * ```
35
+ */
36
+ const make = (effect) => Layer.effect(ColdStorageTag, effect);
37
+ let InMemory;
38
+ (function(_InMemory) {
39
+ _InMemory.make = () => Layer.effect(ColdStorageTag, Effect.gen(function* () {
40
+ const store = yield* Ref.make(HashMap.empty());
41
+ return {
42
+ load: (documentId) => Effect.gen(function* () {
43
+ const current = yield* Ref.get(store);
44
+ const result = HashMap.get(current, documentId);
45
+ return result._tag === "Some" ? result.value : void 0;
46
+ }),
47
+ save: (documentId, document) => Ref.update(store, (map) => HashMap.set(map, documentId, document)),
48
+ delete: (documentId) => Ref.update(store, (map) => HashMap.remove(map, documentId))
49
+ };
50
+ }));
51
+ })(InMemory || (InMemory = {}));
52
+ const ColdStorage = {
53
+ Tag: ColdStorageTag,
54
+ make,
55
+ InMemory
56
+ };
57
+
58
+ //#endregion
59
+ export { ColdStorage, ColdStorageTag };
60
+ //# sourceMappingURL=ColdStorage.mjs.map
@@ -0,0 +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.gen(function* () {\n const store = yield* Ref.make(HashMap.empty<string, StoredDocument>());\n\n return {\n load: (documentId) =>\n Effect.gen(function* () {\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: (documentId, document) =>\n Ref.update(store, (map) => HashMap.set(map, documentId, document)),\n\n delete: (documentId) =>\n Ref.update(store, (map) => HashMap.remove(map, documentId)),\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,IAAI,aAAa;EACtB,MAAM,QAAQ,OAAO,IAAI,KAAK,QAAQ,OAA+B,CAAC;AAEtE,SAAO;GACL,OAAO,eACL,OAAO,IAAI,aAAa;IACtB,MAAM,UAAU,OAAO,IAAI,IAAI,MAAM;IACrC,MAAM,SAAS,QAAQ,IAAI,SAAS,WAAW;AAC/C,WAAO,OAAO,SAAS,SAAS,OAAO,QAAQ;KAC/C;GAEJ,OAAO,YAAY,aACjB,IAAI,OAAO,QAAQ,QAAQ,QAAQ,IAAI,KAAK,YAAY,SAAS,CAAC;GAEpE,SAAS,eACP,IAAI,OAAO,QAAQ,QAAQ,QAAQ,OAAO,KAAK,WAAW,CAAC;GAC9D;GACD,CACH;;AAOL,MAAa,cAAc;CACzB,KAAK;CACL;CACA;CACD"}
@@ -1,118 +1,229 @@
1
- const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
- const require_MimicConfig = require('./MimicConfig.cjs');
3
- const require_MimicDataStorage = require('./MimicDataStorage.cjs');
4
- let effect_Effect = require("effect/Effect");
5
- effect_Effect = require_rolldown_runtime.__toESM(effect_Effect);
6
- let effect_Layer = require("effect/Layer");
7
- effect_Layer = require_rolldown_runtime.__toESM(effect_Layer);
8
- let effect_PubSub = require("effect/PubSub");
9
- effect_PubSub = require_rolldown_runtime.__toESM(effect_PubSub);
10
- let effect_Ref = require("effect/Ref");
11
- effect_Ref = require_rolldown_runtime.__toESM(effect_Ref);
12
- let effect_HashMap = require("effect/HashMap");
13
- effect_HashMap = require_rolldown_runtime.__toESM(effect_HashMap);
14
- let effect_Context = require("effect/Context");
15
- effect_Context = require_rolldown_runtime.__toESM(effect_Context);
16
- let effect_Stream = require("effect/Stream");
17
- effect_Stream = require_rolldown_runtime.__toESM(effect_Stream);
1
+ const require_ColdStorage = require('./ColdStorage.cjs');
2
+ const require_HotStorage = require('./HotStorage.cjs');
3
+ const require_Metrics = require('./Metrics.cjs');
4
+ let effect = require("effect");
18
5
  let _voidhash_mimic_server = require("@voidhash/mimic/server");
19
6
 
20
7
  //#region src/DocumentManager.ts
21
8
  /**
22
- * @since 0.0.1
23
- * Document manager that handles multiple document instances.
9
+ * @voidhash/mimic-effect - DocumentManager
10
+ *
11
+ * Internal service for managing document lifecycle, including:
12
+ * - Document creation and restoration
13
+ * - Transaction processing
14
+ * - WAL management
15
+ * - Snapshot scheduling
16
+ * - Idle document GC
24
17
  */
25
- var DocumentManager_exports = /* @__PURE__ */ require_rolldown_runtime.__export({
26
- DocumentManagerTag: () => DocumentManagerTag,
27
- layer: () => layer
28
- });
29
18
  /**
30
- * Context tag for DocumentManager.
19
+ * Context tag for DocumentManager service
31
20
  */
32
- var DocumentManagerTag = class extends effect_Context.Tag("@voidhash/mimic-server-effect/DocumentManager")() {};
21
+ var DocumentManagerTag = class extends effect.Context.Tag("@voidhash/mimic-effect/DocumentManager")() {};
33
22
  /**
34
- * Create the DocumentManager service.
23
+ * Context tag for DocumentManager configuration
35
24
  */
36
- const makeDocumentManager = effect_Effect.gen(function* () {
37
- const config = yield* require_MimicConfig.MimicServerConfigTag;
38
- const storage = yield* require_MimicDataStorage.MimicDataStorageTag;
39
- const documents = yield* effect_Ref.make(effect_HashMap.empty());
40
- const getOrCreateDocument = (documentId) => effect_Effect.gen(function* () {
41
- const current = yield* effect_Ref.get(documents);
42
- const existing = effect_HashMap.get(current, documentId);
43
- if (existing._tag === "Some") {
44
- yield* effect_Ref.update(existing.value.refCount, (n) => n + 1);
45
- return existing.value;
46
- }
47
- const rawState = yield* effect_Effect.catchAll(storage.load(documentId), () => effect_Effect.succeed(void 0));
48
- const initialState = rawState !== void 0 ? yield* storage.onLoad(rawState) : config.initial !== void 0 ? yield* config.initial({ documentId }) : void 0;
49
- const pubsub = yield* effect_PubSub.unbounded();
50
- const serverDocument = _voidhash_mimic_server.ServerDocument.make({
25
+ var DocumentManagerConfigTag = class extends effect.Context.Tag("@voidhash/mimic-effect/DocumentManagerConfig")() {};
26
+ /**
27
+ * Create the DocumentManager layer.
28
+ * Requires ColdStorage, HotStorage, and DocumentManagerConfig.
29
+ */
30
+ const layer = effect.Layer.scoped(DocumentManagerTag, effect.Effect.gen(function* () {
31
+ const coldStorage = yield* require_ColdStorage.ColdStorageTag;
32
+ const hotStorage = yield* require_HotStorage.HotStorageTag;
33
+ const config = yield* DocumentManagerConfigTag;
34
+ const store = yield* effect.Ref.make(effect.HashMap.empty());
35
+ const SCHEMA_VERSION = 1;
36
+ /**
37
+ * Compute initial state for a new document
38
+ */
39
+ const computeInitialState = (documentId) => {
40
+ if (config.initial === void 0) return effect.Effect.succeed(void 0);
41
+ if (typeof config.initial === "function") return config.initial({ documentId });
42
+ return effect.Effect.succeed(config.initial);
43
+ };
44
+ /**
45
+ * Restore a document from storage
46
+ */
47
+ const restoreDocument = (documentId) => effect.Effect.gen(function* () {
48
+ const storedDoc = yield* effect.Effect.catchAll(coldStorage.load(documentId), () => effect.Effect.succeed(void 0));
49
+ let initialState;
50
+ let initialVersion = 0;
51
+ if (storedDoc) {
52
+ initialState = storedDoc.state;
53
+ initialVersion = storedDoc.version;
54
+ } else initialState = yield* computeInitialState(documentId);
55
+ const pubsub = yield* effect.PubSub.unbounded();
56
+ const lastSnapshotVersion = yield* effect.Ref.make(initialVersion);
57
+ const lastSnapshotTime = yield* effect.Ref.make(Date.now());
58
+ const transactionsSinceSnapshot = yield* effect.Ref.make(0);
59
+ const lastActivityTime = yield* effect.Ref.make(Date.now());
60
+ const document = _voidhash_mimic_server.ServerDocument.make({
51
61
  schema: config.schema,
52
62
  initialState,
63
+ initialVersion,
53
64
  maxTransactionHistory: config.maxTransactionHistory,
54
- onBroadcast: (transactionMessage) => {
55
- const currentState = serverDocument.get();
56
- effect_Effect.runFork(effect_Effect.gen(function* () {
57
- if (currentState !== void 0) {
58
- const transformedState = yield* storage.onSave(currentState);
59
- yield* effect_Effect.catchAll(storage.save(documentId, transformedState), (error) => effect_Effect.logError("Failed to save document", error));
60
- }
61
- }));
62
- effect_Effect.runSync(effect_PubSub.publish(pubsub, {
65
+ onBroadcast: (message) => {
66
+ effect.Effect.runSync(effect.PubSub.publish(pubsub, {
63
67
  type: "transaction",
64
- transaction: transactionMessage.transaction,
65
- version: transactionMessage.version
68
+ transaction: message.transaction,
69
+ version: message.version
66
70
  }));
67
71
  },
68
72
  onRejection: (transactionId, reason) => {
69
- effect_Effect.runSync(effect_PubSub.publish(pubsub, {
73
+ effect.Effect.runSync(effect.PubSub.publish(pubsub, {
70
74
  type: "error",
71
75
  transactionId,
72
76
  reason
73
77
  }));
74
78
  }
75
79
  });
80
+ const walEntries = yield* effect.Effect.catchAll(hotStorage.getEntries(documentId, initialVersion), () => effect.Effect.succeed([]));
81
+ for (const entry of walEntries) {
82
+ const result = document.submit(entry.transaction);
83
+ if (!result.success) yield* effect.Effect.logWarning("Skipping corrupted WAL entry", {
84
+ documentId,
85
+ version: entry.version,
86
+ reason: result.reason
87
+ });
88
+ }
76
89
  const instance = {
77
- document: serverDocument,
90
+ document,
78
91
  pubsub,
79
- refCount: yield* effect_Ref.make(1)
92
+ lastSnapshotVersion,
93
+ lastSnapshotTime,
94
+ transactionsSinceSnapshot,
95
+ lastActivityTime
80
96
  };
81
- yield* effect_Ref.update(documents, (map) => effect_HashMap.set(map, documentId, instance));
97
+ if (storedDoc) yield* effect.Metric.increment(require_Metrics.documentsRestored);
98
+ else yield* effect.Metric.increment(require_Metrics.documentsCreated);
99
+ yield* effect.Metric.incrementBy(require_Metrics.documentsActive, 1);
82
100
  return instance;
83
101
  });
84
- const submit = (documentId, transaction) => effect_Effect.gen(function* () {
85
- return (yield* getOrCreateDocument(documentId)).document.submit(transaction);
86
- });
87
- const getSnapshot = (documentId) => effect_Effect.gen(function* () {
88
- return (yield* getOrCreateDocument(documentId)).document.getSnapshot();
102
+ /**
103
+ * Get or create a document instance
104
+ */
105
+ const getOrCreateDocument = (documentId) => effect.Effect.gen(function* () {
106
+ const current = yield* effect.Ref.get(store);
107
+ const existing = effect.HashMap.get(current, documentId);
108
+ if (existing._tag === "Some") {
109
+ yield* effect.Ref.set(existing.value.lastActivityTime, Date.now());
110
+ return existing.value;
111
+ }
112
+ const instance = yield* restoreDocument(documentId);
113
+ yield* effect.Ref.update(store, (map) => effect.HashMap.set(map, documentId, instance));
114
+ return instance;
89
115
  });
90
- const subscribe = (documentId) => effect_Effect.gen(function* () {
91
- const instance = yield* getOrCreateDocument(documentId);
92
- const queue = yield* effect_PubSub.subscribe(instance.pubsub);
93
- yield* effect_Effect.addFinalizer(() => effect_Effect.gen(function* () {
94
- yield* effect_Ref.updateAndGet(instance.refCount, (n) => n - 1);
116
+ /**
117
+ * Save a snapshot to ColdStorage and truncate WAL
118
+ */
119
+ const saveSnapshot = (documentId, instance) => effect.Effect.gen(function* () {
120
+ const state = instance.document.get();
121
+ const version = instance.document.getVersion();
122
+ if (state === void 0) return;
123
+ const storedDoc = {
124
+ state,
125
+ version,
126
+ schemaVersion: SCHEMA_VERSION,
127
+ savedAt: Date.now()
128
+ };
129
+ const snapshotStartTime = Date.now();
130
+ yield* effect.Effect.catchAll(coldStorage.save(documentId, storedDoc), (e) => effect.Effect.logError("Failed to save snapshot", {
131
+ documentId,
132
+ error: e
133
+ }));
134
+ const snapshotDuration = Date.now() - snapshotStartTime;
135
+ yield* effect.Metric.increment(require_Metrics.storageSnapshots);
136
+ yield* effect.Metric.update(require_Metrics.storageSnapshotLatency, snapshotDuration);
137
+ yield* effect.Effect.catchAll(hotStorage.truncate(documentId, version), (e) => effect.Effect.logError("Failed to truncate WAL", {
138
+ documentId,
139
+ error: e
95
140
  }));
96
- return effect_Stream.fromQueue(queue);
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
+ });
145
+ /**
146
+ * Check if snapshot should be triggered
147
+ */
148
+ const checkSnapshotTriggers = (documentId, instance) => effect.Effect.gen(function* () {
149
+ const txCount = yield* effect.Ref.get(instance.transactionsSinceSnapshot);
150
+ const lastTime = yield* effect.Ref.get(instance.lastSnapshotTime);
151
+ const now = Date.now();
152
+ const intervalMs = effect.Duration.toMillis(config.snapshot.interval);
153
+ if (txCount >= config.snapshot.transactionThreshold) {
154
+ yield* saveSnapshot(documentId, instance);
155
+ return;
156
+ }
157
+ if (now - lastTime >= intervalMs) {
158
+ yield* saveSnapshot(documentId, instance);
159
+ return;
160
+ }
97
161
  });
162
+ yield* effect.Effect.gen(function* () {
163
+ yield* effect.Effect.gen(function* () {
164
+ const current = yield* effect.Ref.get(store);
165
+ const now = Date.now();
166
+ const maxIdleMs = effect.Duration.toMillis(config.maxIdleTime);
167
+ for (const [documentId, instance] of current) if (now - (yield* effect.Ref.get(instance.lastActivityTime)) >= maxIdleMs) {
168
+ yield* saveSnapshot(documentId, instance);
169
+ yield* effect.Ref.update(store, (map) => effect.HashMap.remove(map, documentId));
170
+ yield* effect.Metric.increment(require_Metrics.documentsEvicted);
171
+ yield* effect.Metric.incrementBy(require_Metrics.documentsActive, -1);
172
+ yield* effect.Effect.logInfo("Document evicted due to idle timeout", { documentId });
173
+ }
174
+ }).pipe(effect.Effect.repeat(effect.Schedule.spaced("1 minute")), effect.Effect.fork);
175
+ });
176
+ yield* effect.Effect.addFinalizer(() => effect.Effect.gen(function* () {
177
+ const current = yield* effect.Ref.get(store);
178
+ for (const [documentId, instance] of current) yield* saveSnapshot(documentId, instance);
179
+ yield* effect.Effect.logInfo("DocumentManager shutdown complete");
180
+ }));
98
181
  return {
99
- submit,
100
- getSnapshot,
101
- subscribe
182
+ submit: (documentId, transaction) => effect.Effect.gen(function* () {
183
+ const instance = yield* getOrCreateDocument(documentId);
184
+ const submitStartTime = Date.now();
185
+ const result = instance.document.submit(transaction);
186
+ const latency = Date.now() - submitStartTime;
187
+ yield* effect.Metric.update(require_Metrics.transactionsLatency, latency);
188
+ if (result.success) {
189
+ yield* effect.Metric.increment(require_Metrics.transactionsProcessed);
190
+ const walEntry = {
191
+ transaction,
192
+ version: result.version,
193
+ timestamp: Date.now()
194
+ };
195
+ yield* effect.Effect.catchAll(hotStorage.append(documentId, walEntry), (e) => effect.Effect.logError("Failed to append to WAL", {
196
+ documentId,
197
+ error: e
198
+ }));
199
+ yield* effect.Metric.increment(require_Metrics.storageWalAppends);
200
+ yield* effect.Ref.update(instance.transactionsSinceSnapshot, (n) => n + 1);
201
+ yield* checkSnapshotTriggers(documentId, instance);
202
+ } else yield* effect.Metric.increment(require_Metrics.transactionsRejected);
203
+ return result;
204
+ }),
205
+ getSnapshot: (documentId) => effect.Effect.gen(function* () {
206
+ return (yield* getOrCreateDocument(documentId)).document.getSnapshot();
207
+ }),
208
+ subscribe: (documentId) => effect.Effect.gen(function* () {
209
+ const instance = yield* getOrCreateDocument(documentId);
210
+ return effect.Stream.fromPubSub(instance.pubsub);
211
+ }),
212
+ touch: (documentId) => effect.Effect.gen(function* () {
213
+ const current = yield* effect.Ref.get(store);
214
+ const existing = effect.HashMap.get(current, documentId);
215
+ if (existing._tag === "Some") yield* effect.Ref.set(existing.value.lastActivityTime, Date.now());
216
+ })
102
217
  };
103
- });
104
- /**
105
- * Layer that provides DocumentManager.
106
- * Requires MimicServerConfigTag and MimicDataStorageTag.
107
- */
108
- const layer = effect_Layer.effect(DocumentManagerTag, makeDocumentManager);
218
+ }));
219
+ const DocumentManager = {
220
+ Tag: DocumentManagerTag,
221
+ ConfigTag: DocumentManagerConfigTag,
222
+ layer
223
+ };
109
224
 
110
225
  //#endregion
226
+ exports.DocumentManager = DocumentManager;
227
+ exports.DocumentManagerConfigTag = DocumentManagerConfigTag;
111
228
  exports.DocumentManagerTag = DocumentManagerTag;
112
- Object.defineProperty(exports, 'DocumentManager_exports', {
113
- enumerable: true,
114
- get: function () {
115
- return DocumentManager_exports;
116
- }
117
- });
118
229
  exports.layer = layer;
@@ -1,19 +1,24 @@
1
- import { ServerBroadcast, SnapshotMessage, SubmitResult } from "./DocumentProtocol.cjs";
2
- import { MimicServerConfigTag } from "./MimicConfig.cjs";
3
- import { MimicDataStorageTag } from "./MimicDataStorage.cjs";
4
- import * as Effect from "effect/Effect";
5
- import * as Layer from "effect/Layer";
1
+ import { ResolvedConfig } from "./Types.cjs";
2
+ import { ServerBroadcast, SnapshotMessage } from "./Protocol.cjs";
3
+ import { ColdStorageTag } from "./ColdStorage.cjs";
4
+ import { HotStorageTag } from "./HotStorage.cjs";
5
+ import { Context, Effect, Layer, Scope, Stream } from "effect";
6
6
  import { Transaction } from "@voidhash/mimic";
7
- import * as Context from "effect/Context";
8
- import * as Scope from "effect/Scope";
9
- import * as Stream from "effect/Stream";
10
7
 
11
8
  //#region src/DocumentManager.d.ts
12
- declare namespace DocumentManager_d_exports {
13
- export { DocumentManager, DocumentManagerTag, layer };
14
- }
9
+
10
+ /**
11
+ * Result of submitting a transaction
12
+ */
13
+ type SubmitResult = {
14
+ readonly success: true;
15
+ readonly version: number;
16
+ } | {
17
+ readonly success: false;
18
+ readonly reason: string;
19
+ };
15
20
  /**
16
- * Service interface for the DocumentManager.
21
+ * Internal service for managing document lifecycle.
17
22
  */
18
23
  interface DocumentManager {
19
24
  /**
@@ -26,20 +31,29 @@ interface DocumentManager {
26
31
  readonly getSnapshot: (documentId: string) => Effect.Effect<SnapshotMessage>;
27
32
  /**
28
33
  * Subscribe to broadcasts for a document.
29
- * Returns a Stream of server broadcasts.
30
34
  */
31
35
  readonly subscribe: (documentId: string) => Effect.Effect<Stream.Stream<ServerBroadcast>, never, Scope.Scope>;
36
+ /**
37
+ * Touch a document to update its last activity time.
38
+ * Call this on any client activity to prevent idle GC.
39
+ */
40
+ readonly touch: (documentId: string) => Effect.Effect<void>;
32
41
  }
33
- declare const DocumentManagerTag_base: Context.TagClass<DocumentManagerTag, "@voidhash/mimic-server-effect/DocumentManager", DocumentManager>;
42
+ declare const DocumentManagerTag_base: Context.TagClass<DocumentManagerTag, "@voidhash/mimic-effect/DocumentManager", DocumentManager>;
34
43
  /**
35
- * Context tag for DocumentManager.
44
+ * Context tag for DocumentManager service
36
45
  */
37
46
  declare class DocumentManagerTag extends DocumentManagerTag_base {}
47
+ declare const DocumentManagerConfigTag_base: Context.TagClass<DocumentManagerConfigTag, "@voidhash/mimic-effect/DocumentManagerConfig", ResolvedConfig<Primitive.AnyPrimitive>>;
38
48
  /**
39
- * Layer that provides DocumentManager.
40
- * Requires MimicServerConfigTag and MimicDataStorageTag.
49
+ * Context tag for DocumentManager configuration
41
50
  */
42
- declare const layer: Layer.Layer<DocumentManagerTag, never, MimicServerConfigTag | MimicDataStorageTag>;
51
+ declare class DocumentManagerConfigTag extends DocumentManagerConfigTag_base {}
52
+ declare const DocumentManager: {
53
+ Tag: typeof DocumentManagerTag;
54
+ ConfigTag: typeof DocumentManagerConfigTag;
55
+ layer: Layer.Layer<DocumentManagerTag, never, ColdStorageTag | HotStorageTag | DocumentManagerConfigTag>;
56
+ };
43
57
  //#endregion
44
- export { DocumentManagerTag, DocumentManager_d_exports };
58
+ export { DocumentManager, DocumentManagerConfigTag, DocumentManagerTag, SubmitResult };
45
59
  //# sourceMappingURL=DocumentManager.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentManager.d.cts","names":[],"sources":["../src/DocumentManager.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;UA2CiB,eAAA;EAAA;;;EAOV,SAAO,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EADG,WAAA,CAAY,WACf,EAAA,GAAP,MAAA,CAAO,MAAA,CAAO,YAAP,CAAA;EAOO;;;EASjB,SAAO,WAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,GATJ,MAAA,CAAO,MASH,CATU,eASV,CAAA;EAEP;;;AAEH;8CALM,MAAA,CAAO,OACV,MAAA,CAAO,OAAO,yBAEd,KAAA,CAAM;;cAET;;AAKD;AA8KA;AACE,cA/KW,kBAAA,SAA2B,uBAAA,CA+KtC;;;;;cADW,OAAO,KAAA,CAAM,MACxB,2BAEA,uBAAuB"}
1
+ {"version":3,"file":"DocumentManager.d.cts","names":[],"sources":["../src/DocumentManager.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;AAgF0C,KApC9B,YAAA,GAoCqC;EAAM,SAAA,OAAA,EAAA,IAAA;EACtD,SAAA,OAAA,EAAA,MAAA;;;;;AASD;AAE2C;;UArC1B,eAAA;;;;EAoEJ,SAAA,MAAA,EAAA,CAAA,UAAyB,EAAA,MAAA,EAAA,WAAQ,EA9D7B,WAAA,CAAY,WAgEwC,EAAA,GA/D9D,MAAA,CAAO,MA+DuD,CA/DhD,YA+DgD,CAAA;EAwXxD;;;gDAlbmC,MAAA,CAAO,OAAO;;;;8CAOvD,MAAA,CAAO,OAAO,MAAA,CAAO,OAAO,yBAAyB,KAAA,CAAM;;;;;0CAMxB,MAAA,CAAO;;cAChD;;;;cASY,kBAAA,SAA2B,uBAAA;cAEG;;;;cA+B9B,wBAAA,SAAiC,6BAAA;cA0XjC"}