@powerhousedao/reactor 4.1.0-dev.9 → 4.1.0-dev.91

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 (226) hide show
  1. package/dist/src/cache/buffer/ring-buffer.d.ts +37 -0
  2. package/dist/src/cache/buffer/ring-buffer.d.ts.map +1 -0
  3. package/dist/src/cache/buffer/ring-buffer.js +69 -0
  4. package/dist/src/cache/buffer/ring-buffer.js.map +1 -0
  5. package/dist/src/cache/kysely-write-cache.d.ts +133 -0
  6. package/dist/src/cache/kysely-write-cache.d.ts.map +1 -0
  7. package/dist/src/cache/kysely-write-cache.js +375 -0
  8. package/dist/src/cache/kysely-write-cache.js.map +1 -0
  9. package/dist/src/cache/lru/lru-tracker.d.ts +15 -0
  10. package/dist/src/cache/lru/lru-tracker.d.ts.map +1 -0
  11. package/dist/src/cache/lru/lru-tracker.js +96 -0
  12. package/dist/src/cache/lru/lru-tracker.js.map +1 -0
  13. package/dist/src/cache/types.d.ts +42 -0
  14. package/dist/src/cache/types.d.ts.map +1 -0
  15. package/dist/src/cache/types.js +2 -0
  16. package/dist/src/cache/types.js.map +1 -0
  17. package/dist/src/cache/write/interfaces.d.ts +83 -0
  18. package/dist/src/cache/write/interfaces.d.ts.map +1 -0
  19. package/dist/src/cache/write/interfaces.js +2 -0
  20. package/dist/src/cache/write/interfaces.js.map +1 -0
  21. package/dist/src/client/reactor-client.d.ts +103 -0
  22. package/dist/src/client/reactor-client.d.ts.map +1 -0
  23. package/dist/src/client/reactor-client.js +184 -0
  24. package/dist/src/client/reactor-client.js.map +1 -0
  25. package/dist/src/client/types.d.ts +213 -0
  26. package/dist/src/client/types.d.ts.map +1 -0
  27. package/dist/src/client/types.js +14 -0
  28. package/dist/src/client/types.js.map +1 -0
  29. package/dist/src/core/builder.d.ts +20 -0
  30. package/dist/src/core/builder.d.ts.map +1 -0
  31. package/dist/src/core/builder.js +47 -0
  32. package/dist/src/core/builder.js.map +1 -0
  33. package/dist/src/core/reactor.d.ts +92 -0
  34. package/dist/src/core/reactor.d.ts.map +1 -0
  35. package/dist/src/core/reactor.js +646 -0
  36. package/dist/src/core/reactor.js.map +1 -0
  37. package/dist/src/core/types.d.ts +121 -0
  38. package/dist/src/core/types.d.ts.map +1 -0
  39. package/dist/src/core/types.js +2 -0
  40. package/dist/src/core/types.js.map +1 -0
  41. package/dist/src/core/utils.d.ts +11 -0
  42. package/dist/src/core/utils.d.ts.map +1 -0
  43. package/dist/src/core/utils.js +31 -0
  44. package/dist/src/core/utils.js.map +1 -0
  45. package/dist/src/events/event-bus.d.ts +3 -3
  46. package/dist/src/events/event-bus.d.ts.map +1 -1
  47. package/dist/src/events/event-bus.js.map +1 -1
  48. package/dist/src/events/interfaces.d.ts +1 -1
  49. package/dist/src/events/interfaces.d.ts.map +1 -1
  50. package/dist/src/events/types.d.ts +15 -1
  51. package/dist/src/events/types.d.ts.map +1 -1
  52. package/dist/src/events/types.js +6 -0
  53. package/dist/src/events/types.js.map +1 -1
  54. package/dist/src/executor/interfaces.d.ts +31 -54
  55. package/dist/src/executor/interfaces.d.ts.map +1 -1
  56. package/dist/src/executor/simple-job-executor-manager.d.ts +31 -0
  57. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
  58. package/dist/src/executor/simple-job-executor-manager.js +190 -0
  59. package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
  60. package/dist/src/executor/simple-job-executor.d.ts +48 -0
  61. package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
  62. package/dist/src/executor/simple-job-executor.js +488 -0
  63. package/dist/src/executor/simple-job-executor.js.map +1 -0
  64. package/dist/src/executor/types.d.ts +30 -8
  65. package/dist/src/executor/types.d.ts.map +1 -1
  66. package/dist/src/executor/types.js.map +1 -1
  67. package/dist/src/executor/util.d.ts +47 -0
  68. package/dist/src/executor/util.d.ts.map +1 -0
  69. package/dist/src/executor/util.js +113 -0
  70. package/dist/src/executor/util.js.map +1 -0
  71. package/dist/src/index.d.ts +30 -3
  72. package/dist/src/index.d.ts.map +1 -1
  73. package/dist/src/index.js +36 -2
  74. package/dist/src/index.js.map +1 -1
  75. package/dist/src/job-tracker/in-memory-job-tracker.d.ts +15 -0
  76. package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -0
  77. package/dist/src/job-tracker/in-memory-job-tracker.js +78 -0
  78. package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -0
  79. package/dist/src/job-tracker/index.d.ts +3 -0
  80. package/dist/src/job-tracker/index.d.ts.map +1 -0
  81. package/dist/src/job-tracker/index.js +2 -0
  82. package/dist/src/job-tracker/index.js.map +1 -0
  83. package/dist/src/job-tracker/interfaces.d.ts +41 -0
  84. package/dist/src/job-tracker/interfaces.d.ts.map +1 -0
  85. package/dist/src/job-tracker/interfaces.js +2 -0
  86. package/dist/src/job-tracker/interfaces.js.map +1 -0
  87. package/dist/src/queue/interfaces.d.ts +45 -5
  88. package/dist/src/queue/interfaces.d.ts.map +1 -1
  89. package/dist/src/queue/job-execution-handle.d.ts +24 -0
  90. package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
  91. package/dist/src/queue/job-execution-handle.js +62 -0
  92. package/dist/src/queue/job-execution-handle.js.map +1 -0
  93. package/dist/src/queue/queue.d.ts +54 -5
  94. package/dist/src/queue/queue.d.ts.map +1 -1
  95. package/dist/src/queue/queue.js +272 -36
  96. package/dist/src/queue/queue.js.map +1 -1
  97. package/dist/src/queue/types.d.ts +32 -5
  98. package/dist/src/queue/types.d.ts.map +1 -1
  99. package/dist/src/queue/types.js +12 -0
  100. package/dist/src/queue/types.js.map +1 -1
  101. package/dist/src/read-models/coordinator.d.ts +38 -0
  102. package/dist/src/read-models/coordinator.d.ts.map +1 -0
  103. package/dist/src/read-models/coordinator.js +62 -0
  104. package/dist/src/read-models/coordinator.js.map +1 -0
  105. package/dist/src/read-models/document-view.d.ts +20 -0
  106. package/dist/src/read-models/document-view.d.ts.map +1 -0
  107. package/dist/src/read-models/document-view.js +365 -0
  108. package/dist/src/read-models/document-view.js.map +1 -0
  109. package/dist/src/read-models/interfaces.d.ts +29 -0
  110. package/dist/src/read-models/interfaces.d.ts.map +1 -0
  111. package/dist/src/read-models/interfaces.js +2 -0
  112. package/dist/src/read-models/interfaces.js.map +1 -0
  113. package/dist/src/read-models/types.d.ts +46 -0
  114. package/dist/src/read-models/types.d.ts.map +1 -0
  115. package/dist/src/read-models/types.js +2 -0
  116. package/dist/src/read-models/types.js.map +1 -0
  117. package/dist/src/registry/implementation.d.ts +62 -0
  118. package/dist/src/registry/implementation.d.ts.map +1 -0
  119. package/dist/src/registry/implementation.js +96 -0
  120. package/dist/src/registry/implementation.js.map +1 -0
  121. package/dist/src/registry/index.d.ts +3 -0
  122. package/dist/src/registry/index.d.ts.map +1 -0
  123. package/dist/src/registry/index.js +2 -0
  124. package/dist/src/registry/index.js.map +1 -0
  125. package/dist/src/registry/interfaces.d.ts +39 -0
  126. package/dist/src/registry/interfaces.d.ts.map +1 -0
  127. package/dist/src/registry/interfaces.js +2 -0
  128. package/dist/src/registry/interfaces.js.map +1 -0
  129. package/dist/src/shared/awaiter.d.ts +32 -0
  130. package/dist/src/shared/awaiter.d.ts.map +1 -0
  131. package/dist/src/shared/awaiter.js +132 -0
  132. package/dist/src/shared/awaiter.js.map +1 -0
  133. package/dist/src/shared/errors.d.ts +17 -0
  134. package/dist/src/shared/errors.d.ts.map +1 -0
  135. package/dist/src/shared/errors.js +33 -0
  136. package/dist/src/shared/errors.js.map +1 -0
  137. package/dist/src/shared/factories.d.ts +16 -0
  138. package/dist/src/shared/factories.d.ts.map +1 -0
  139. package/dist/src/shared/factories.js +33 -0
  140. package/dist/src/shared/factories.js.map +1 -0
  141. package/dist/src/shared/types.d.ts +91 -19
  142. package/dist/src/shared/types.d.ts.map +1 -1
  143. package/dist/src/shared/types.js +35 -1
  144. package/dist/src/shared/types.js.map +1 -1
  145. package/dist/src/shared/utils.d.ts +3 -0
  146. package/dist/src/shared/utils.d.ts.map +1 -0
  147. package/dist/src/shared/utils.js +8 -0
  148. package/dist/src/shared/utils.js.map +1 -0
  149. package/dist/src/signer/passthrough-signer.d.ts +6 -0
  150. package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
  151. package/dist/src/signer/passthrough-signer.js +6 -0
  152. package/dist/src/signer/passthrough-signer.js.map +1 -0
  153. package/dist/src/signer/types.d.ts +15 -0
  154. package/dist/src/signer/types.d.ts.map +1 -0
  155. package/dist/src/signer/types.js +2 -0
  156. package/dist/src/signer/types.js.map +1 -0
  157. package/dist/src/storage/interfaces.d.ts +121 -0
  158. package/dist/src/storage/interfaces.d.ts.map +1 -0
  159. package/dist/src/storage/interfaces.js +19 -0
  160. package/dist/src/storage/interfaces.js.map +1 -0
  161. package/dist/src/storage/kysely/keyframe-store.d.ts +15 -0
  162. package/dist/src/storage/kysely/keyframe-store.d.ts.map +1 -0
  163. package/dist/src/storage/kysely/keyframe-store.js +71 -0
  164. package/dist/src/storage/kysely/keyframe-store.js.map +1 -0
  165. package/dist/src/storage/kysely/store.d.ts +15 -0
  166. package/dist/src/storage/kysely/store.d.ts.map +1 -0
  167. package/dist/src/storage/kysely/store.js +196 -0
  168. package/dist/src/storage/kysely/store.js.map +1 -0
  169. package/dist/src/storage/kysely/types.d.ts +39 -0
  170. package/dist/src/storage/kysely/types.d.ts.map +1 -0
  171. package/dist/src/storage/kysely/types.js +2 -0
  172. package/dist/src/storage/kysely/types.js.map +1 -0
  173. package/dist/src/storage/txn.d.ts +15 -0
  174. package/dist/src/storage/txn.d.ts.map +1 -0
  175. package/dist/src/storage/txn.js +41 -0
  176. package/dist/src/storage/txn.js.map +1 -0
  177. package/dist/src/subs/default-error-handler.d.ts +13 -0
  178. package/dist/src/subs/default-error-handler.d.ts.map +1 -0
  179. package/dist/src/subs/default-error-handler.js +27 -0
  180. package/dist/src/subs/default-error-handler.js.map +1 -0
  181. package/dist/src/subs/react-subscription-manager.d.ts +45 -0
  182. package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
  183. package/dist/src/subs/react-subscription-manager.js +185 -0
  184. package/dist/src/subs/react-subscription-manager.js.map +1 -0
  185. package/dist/src/subs/types.d.ts +64 -0
  186. package/dist/src/subs/types.d.ts.map +1 -0
  187. package/dist/src/subs/types.js +2 -0
  188. package/dist/src/subs/types.js.map +1 -0
  189. package/dist/src/utils/reshuffle.d.ts +30 -0
  190. package/dist/src/utils/reshuffle.d.ts.map +1 -0
  191. package/dist/src/utils/reshuffle.js +47 -0
  192. package/dist/src/utils/reshuffle.js.map +1 -0
  193. package/package.json +18 -7
  194. package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
  195. package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
  196. package/dist/bench/end-to-end-flow.bench.js +0 -256
  197. package/dist/bench/end-to-end-flow.bench.js.map +0 -1
  198. package/dist/bench/event-bus.bench.d.ts +0 -2
  199. package/dist/bench/event-bus.bench.d.ts.map +0 -1
  200. package/dist/bench/event-bus.bench.js +0 -238
  201. package/dist/bench/event-bus.bench.js.map +0 -1
  202. package/dist/bench/queue-only.bench.d.ts +0 -2
  203. package/dist/bench/queue-only.bench.d.ts.map +0 -1
  204. package/dist/bench/queue-only.bench.js +0 -40
  205. package/dist/bench/queue-only.bench.js.map +0 -1
  206. package/dist/bench/reactor-throughput.bench.d.ts +0 -2
  207. package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
  208. package/dist/bench/reactor-throughput.bench.js +0 -137
  209. package/dist/bench/reactor-throughput.bench.js.map +0 -1
  210. package/dist/src/executor/job-executor.d.ts +0 -62
  211. package/dist/src/executor/job-executor.d.ts.map +0 -1
  212. package/dist/src/executor/job-executor.js +0 -325
  213. package/dist/src/executor/job-executor.js.map +0 -1
  214. package/dist/test/event-bus.test.d.ts +0 -2
  215. package/dist/test/event-bus.test.d.ts.map +0 -1
  216. package/dist/test/event-bus.test.js +0 -532
  217. package/dist/test/event-bus.test.js.map +0 -1
  218. package/dist/test/job-executor.test.d.ts +0 -2
  219. package/dist/test/job-executor.test.d.ts.map +0 -1
  220. package/dist/test/job-executor.test.js +0 -581
  221. package/dist/test/job-executor.test.js.map +0 -1
  222. package/dist/test/queue.test.d.ts +0 -2
  223. package/dist/test/queue.test.d.ts.map +0 -1
  224. package/dist/test/queue.test.js +0 -396
  225. package/dist/test/queue.test.js.map +0 -1
  226. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,8 @@
1
+ export function matchesScope(view = {}, scope) {
2
+ if (view.scopes) {
3
+ return view.scopes.includes(scope);
4
+ }
5
+ // if there are no scopes specified, we match all scopes
6
+ return true;
7
+ }
8
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/shared/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,OAAmB,EAAE,EAAE,KAAa;IAC/D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,wDAAwD;IACxD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Signature } from "document-model";
2
+ import type { ISigner } from "./types.js";
3
+ export declare class PassthroughSigner implements ISigner {
4
+ sign(): Promise<Signature>;
5
+ }
6
+ //# sourceMappingURL=passthrough-signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passthrough-signer.d.ts","sourceRoot":"","sources":["../../../src/signer/passthrough-signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,qBAAa,iBAAkB,YAAW,OAAO;IAC/C,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;CAG3B"}
@@ -0,0 +1,6 @@
1
+ export class PassthroughSigner {
2
+ sign() {
3
+ return Promise.resolve(["", "", "", "", ""]);
4
+ }
5
+ }
6
+ //# sourceMappingURL=passthrough-signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passthrough-signer.js","sourceRoot":"","sources":["../../../src/signer/passthrough-signer.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,iBAAiB;IAC5B,IAAI;QACF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { Action, Signature } from "document-model";
2
+ /**
3
+ * Interface for signing actions before submission to the reactor.
4
+ */
5
+ export interface ISigner {
6
+ /**
7
+ * Signs an action
8
+ *
9
+ * @param action - The action to sign
10
+ * @param abortSignal - Optional abort signal to cancel the signing
11
+ * @returns The signature
12
+ */
13
+ sign(action: Action, abortSignal?: AbortSignal): Promise<Signature>;
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/signer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;;;;;OAMG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACrE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/signer/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,121 @@
1
+ import type { Operation, PHDocument } from "document-model";
2
+ export type OperationContext = {
3
+ documentId: string;
4
+ documentType: string;
5
+ scope: string;
6
+ branch: string;
7
+ resultingState?: string;
8
+ };
9
+ export type OperationWithContext = {
10
+ operation: Operation;
11
+ context: OperationContext;
12
+ };
13
+ export declare class DuplicateOperationError extends Error {
14
+ constructor(opId: string);
15
+ }
16
+ export declare class OptimisticLockError extends Error {
17
+ constructor(message: string);
18
+ }
19
+ export declare class RevisionMismatchError extends Error {
20
+ constructor(expected: number, actual: number);
21
+ }
22
+ export interface AtomicTxn {
23
+ addOperations(...operations: Operation[]): void;
24
+ }
25
+ export type DocumentRevisions = {
26
+ /** Map of scope to operation index for that scope */
27
+ revision: Record<string, number>;
28
+ /** Latest timestamp across revisions */
29
+ latestTimestamp: string;
30
+ };
31
+ export interface IOperationStore {
32
+ apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal): Promise<void>;
33
+ getSince(documentId: string, scope: string, branch: string, revision: number, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<Operation>>;
34
+ getSinceId(id: number, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<OperationWithContext>>;
35
+ /**
36
+ * Gets the latest operation index for each scope of a document, along with
37
+ * the latest timestamp across all scopes. This is used to efficiently reconstruct
38
+ * the revision map and lastModified timestamp for document headers.
39
+ *
40
+ * @param documentId - The document id
41
+ * @param branch - The branch name
42
+ * @param signal - Optional abort signal to cancel the request
43
+ * @returns Object containing revision map and latest timestamp
44
+ */
45
+ getRevisions(documentId: string, branch: string, signal?: AbortSignal): Promise<DocumentRevisions>;
46
+ }
47
+ export interface IKeyframeStore {
48
+ putKeyframe(documentId: string, scope: string, branch: string, revision: number, document: PHDocument, signal?: AbortSignal): Promise<void>;
49
+ findNearestKeyframe(documentId: string, scope: string, branch: string, targetRevision: number, signal?: AbortSignal): Promise<{
50
+ revision: number;
51
+ document: PHDocument;
52
+ } | undefined>;
53
+ deleteKeyframes(documentId: string, scope?: string, branch?: string, signal?: AbortSignal): Promise<number>;
54
+ }
55
+ export interface ViewFilter {
56
+ branch?: string;
57
+ scopes?: string[];
58
+ }
59
+ export interface SearchFilter {
60
+ documentType?: string;
61
+ parentId?: string;
62
+ identifiers?: Record<string, any>;
63
+ includeDeleted?: boolean;
64
+ }
65
+ export interface PagingOptions {
66
+ cursor?: string;
67
+ limit?: number;
68
+ }
69
+ export interface PagedResults<T> {
70
+ items: T[];
71
+ nextCursor?: string;
72
+ hasMore: boolean;
73
+ }
74
+ export interface DocumentSnapshot {
75
+ id: string;
76
+ documentId: string;
77
+ slug: string | null;
78
+ name: string | null;
79
+ scope: string;
80
+ branch: string;
81
+ content: string;
82
+ documentType: string;
83
+ lastOperationIndex: number;
84
+ lastOperationHash: string;
85
+ lastUpdatedAt: Date;
86
+ snapshotVersion: number;
87
+ identifiers: string | null;
88
+ metadata: string | null;
89
+ isDeleted: boolean;
90
+ deletedAt: Date | null;
91
+ }
92
+ export interface IDocumentView {
93
+ /**
94
+ * Initializes the view.
95
+ */
96
+ init(): Promise<void>;
97
+ /**
98
+ * Indexes a list of operations.
99
+ *
100
+ * @param items - Operations with context. Context MUST include ephemeral
101
+ * `resultingState` for optimization. IDocumentView never rebuilds
102
+ * documents from operations - it always requires resultingState.
103
+ */
104
+ indexOperations(items: OperationWithContext[]): Promise<void>;
105
+ /**
106
+ * Returns true if and only if the documents exist.
107
+ *
108
+ * @param documentIds - The list of document ids to check.
109
+ * @param signal - Optional abort signal to cancel the request
110
+ */
111
+ exists(documentIds: string[], signal?: AbortSignal): Promise<boolean[]>;
112
+ /**
113
+ * Returns the document with the given id.
114
+ *
115
+ * @param documentId - The id of the document to get.
116
+ * @param view - Optional filter containing branch and scopes information
117
+ * @param signal - Optional abort signal to cancel the request
118
+ */
119
+ get<TDocument extends PHDocument>(documentId: string, view?: ViewFilter, signal?: AbortSignal): Promise<TDocument>;
120
+ }
121
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export class DuplicateOperationError extends Error {
2
+ constructor(opId) {
3
+ super(`Operation with opId ${opId} already exists`);
4
+ this.name = "DuplicateOperationError";
5
+ }
6
+ }
7
+ export class OptimisticLockError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = "OptimisticLockError";
11
+ }
12
+ }
13
+ export class RevisionMismatchError extends Error {
14
+ constructor(expected, actual) {
15
+ super(`Revision mismatch: expected ${expected}, got ${actual}`);
16
+ this.name = "RevisionMismatchError";
17
+ }
18
+ }
19
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,IAAY;QACtB,KAAK,CAAC,uBAAuB,IAAI,iBAAiB,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CAAC,+BAA+B,QAAQ,SAAS,MAAM,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { PHDocument } from "document-model";
2
+ import type { Kysely } from "kysely";
3
+ import type { IKeyframeStore } from "../interfaces.js";
4
+ import type { Database } from "./types.js";
5
+ export declare class KyselyKeyframeStore implements IKeyframeStore {
6
+ private db;
7
+ constructor(db: Kysely<Database>);
8
+ putKeyframe(documentId: string, scope: string, branch: string, revision: number, document: PHDocument, signal?: AbortSignal): Promise<void>;
9
+ findNearestKeyframe(documentId: string, scope: string, branch: string, targetRevision: number, signal?: AbortSignal): Promise<{
10
+ revision: number;
11
+ document: PHDocument;
12
+ } | undefined>;
13
+ deleteKeyframes(documentId: string, scope?: string, branch?: string, signal?: AbortSignal): Promise<number>;
14
+ }
15
+ //# sourceMappingURL=keyframe-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyframe-store.d.ts","sourceRoot":"","sources":["../../../../src/storage/kysely/keyframe-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,qBAAa,mBAAoB,YAAW,cAAc;IAC5C,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;IAElC,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,UAAU,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC;IAuBV,mBAAmB,CACvB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,UAAU,CAAA;KAAE,GAAG,SAAS,CAAC;IAmC5D,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC;CAmBnB"}
@@ -0,0 +1,71 @@
1
+ export class KyselyKeyframeStore {
2
+ db;
3
+ constructor(db) {
4
+ this.db = db;
5
+ }
6
+ async putKeyframe(documentId, scope, branch, revision, document, signal) {
7
+ if (signal?.aborted) {
8
+ throw new Error("Operation aborted");
9
+ }
10
+ await this.db
11
+ .insertInto("Keyframe")
12
+ .values({
13
+ documentId,
14
+ documentType: document.header.documentType,
15
+ scope,
16
+ branch,
17
+ revision,
18
+ document: JSON.stringify(document),
19
+ })
20
+ .onConflict((oc) => oc
21
+ .columns(["documentId", "scope", "branch", "revision"])
22
+ .doUpdateSet({ document: JSON.stringify(document) }))
23
+ .execute();
24
+ }
25
+ async findNearestKeyframe(documentId, scope, branch, targetRevision, signal) {
26
+ if (signal?.aborted) {
27
+ throw new Error("Operation aborted");
28
+ }
29
+ const row = await this.db
30
+ .selectFrom("Keyframe")
31
+ .selectAll()
32
+ .where("documentId", "=", documentId)
33
+ .where("scope", "=", scope)
34
+ .where("branch", "=", branch)
35
+ .where("revision", "<=", targetRevision)
36
+ .orderBy("revision", "desc")
37
+ .limit(1)
38
+ .executeTakeFirst();
39
+ if (!row) {
40
+ return undefined;
41
+ }
42
+ try {
43
+ const document = JSON.parse(row.document);
44
+ return {
45
+ revision: row.revision,
46
+ document,
47
+ };
48
+ }
49
+ catch (err) {
50
+ console.warn(`Failed to parse keyframe for ${documentId}@${row.revision}:`, err);
51
+ return undefined;
52
+ }
53
+ }
54
+ async deleteKeyframes(documentId, scope, branch, signal) {
55
+ if (signal?.aborted) {
56
+ throw new Error("Operation aborted");
57
+ }
58
+ let query = this.db
59
+ .deleteFrom("Keyframe")
60
+ .where("documentId", "=", documentId);
61
+ if (scope !== undefined && branch !== undefined) {
62
+ query = query.where("scope", "=", scope).where("branch", "=", branch);
63
+ }
64
+ else if (scope !== undefined) {
65
+ query = query.where("scope", "=", scope);
66
+ }
67
+ const result = await query.executeTakeFirst();
68
+ return Number(result.numDeletedRows || 0n);
69
+ }
70
+ }
71
+ //# sourceMappingURL=keyframe-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyframe-store.js","sourceRoot":"","sources":["../../../../src/storage/kysely/keyframe-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type Operation } from "document-model";
2
+ import type { Kysely } from "kysely";
3
+ import { type AtomicTxn, type DocumentRevisions, type IOperationStore, type OperationWithContext, type PagedResults, type PagingOptions } from "../interfaces.js";
4
+ import type { Database } from "./types.js";
5
+ export declare class KyselyOperationStore implements IOperationStore {
6
+ private db;
7
+ constructor(db: Kysely<Database>);
8
+ apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal): Promise<void>;
9
+ getSince(documentId: string, scope: string, branch: string, revision: number, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<Operation>>;
10
+ getSinceId(id: number, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<OperationWithContext>>;
11
+ getRevisions(documentId: string, branch: string, signal?: AbortSignal): Promise<DocumentRevisions>;
12
+ private rowToOperation;
13
+ private rowToOperationWithContext;
14
+ }
15
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/storage/kysely/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AAEzD,qBAAa,oBAAqB,YAAW,eAAe;IAC9C,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;IAElC,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC5C,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC;IAiEV,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAoD7B,UAAU,CACd,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;IAiDxC,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC;IA2C7B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,yBAAyB;CAWlC"}
@@ -0,0 +1,196 @@
1
+ import {} from "document-model";
2
+ import { DuplicateOperationError, RevisionMismatchError, } from "../interfaces.js";
3
+ import { AtomicTransaction } from "../txn.js";
4
+ export class KyselyOperationStore {
5
+ db;
6
+ constructor(db) {
7
+ this.db = db;
8
+ }
9
+ async apply(documentId, documentType, scope, branch, revision, fn, signal) {
10
+ await this.db.transaction().execute(async (trx) => {
11
+ // Check for abort signal
12
+ if (signal?.aborted) {
13
+ throw new Error("Operation aborted");
14
+ }
15
+ // Get the latest operation for this stream to verify revision
16
+ const latestOp = await trx
17
+ .selectFrom("Operation")
18
+ .selectAll()
19
+ .where("documentId", "=", documentId)
20
+ .where("scope", "=", scope)
21
+ .where("branch", "=", branch)
22
+ .orderBy("index", "desc")
23
+ .limit(1)
24
+ .executeTakeFirst();
25
+ // Check revision matches
26
+ const currentRevision = latestOp ? latestOp.index : -1;
27
+ if (currentRevision !== revision - 1) {
28
+ throw new RevisionMismatchError(revision - 1, currentRevision);
29
+ }
30
+ // Create atomic transaction
31
+ const atomicTxn = new AtomicTransaction(documentId, documentType, scope, branch, revision);
32
+ await fn(atomicTxn);
33
+ // Get operations and header updates
34
+ const operations = atomicTxn.getOperations();
35
+ // Insert operations
36
+ if (operations.length > 0) {
37
+ // Set prevOpId for each operation
38
+ let prevOpId = latestOp?.opId || "";
39
+ for (const op of operations) {
40
+ op.prevOpId = prevOpId;
41
+ prevOpId = op.opId;
42
+ }
43
+ try {
44
+ await trx.insertInto("Operation").values(operations).execute();
45
+ }
46
+ catch (error) {
47
+ if (error instanceof Error) {
48
+ if (error.message.includes("unique constraint")) {
49
+ // Extract the opId from the error if possible
50
+ const opId = operations[0]?.opId || "unknown";
51
+ throw new DuplicateOperationError(opId);
52
+ }
53
+ throw error;
54
+ }
55
+ throw error;
56
+ }
57
+ }
58
+ });
59
+ }
60
+ async getSince(documentId, scope, branch, revision, paging, signal) {
61
+ if (signal?.aborted) {
62
+ throw new Error("Operation aborted");
63
+ }
64
+ let query = this.db
65
+ .selectFrom("Operation")
66
+ .selectAll()
67
+ .where("documentId", "=", documentId)
68
+ .where("scope", "=", scope)
69
+ .where("branch", "=", branch)
70
+ .where("index", ">", revision)
71
+ .orderBy("index", "asc");
72
+ // Handle cursor-based pagination
73
+ if (paging) {
74
+ // Cursor encodes the last seen index
75
+ if (paging.cursor) {
76
+ const lastIndex = Number.parseInt(paging.cursor, 10);
77
+ query = query.where("index", ">", lastIndex);
78
+ }
79
+ // Apply limit if specified (fetch one extra to determine hasMore)
80
+ if (paging.limit) {
81
+ query = query.limit(paging.limit + 1);
82
+ }
83
+ }
84
+ const rows = await query.execute();
85
+ // Determine if there are more results
86
+ let hasMore = false;
87
+ let items = rows;
88
+ if (paging?.limit && rows.length > paging.limit) {
89
+ hasMore = true;
90
+ items = rows.slice(0, paging.limit);
91
+ }
92
+ // Generate next cursor from last item's index
93
+ const nextCursor = hasMore && items.length > 0
94
+ ? items[items.length - 1].index.toString()
95
+ : undefined;
96
+ return {
97
+ items: items.map((row) => this.rowToOperation(row)),
98
+ nextCursor,
99
+ hasMore,
100
+ };
101
+ }
102
+ async getSinceId(id, paging, signal) {
103
+ if (signal?.aborted) {
104
+ throw new Error("Operation aborted");
105
+ }
106
+ let query = this.db
107
+ .selectFrom("Operation")
108
+ .selectAll()
109
+ .where("id", ">", id)
110
+ .orderBy("id", "asc");
111
+ // Handle cursor-based pagination
112
+ if (paging) {
113
+ // Cursor encodes the last seen id
114
+ if (paging.cursor) {
115
+ const lastId = Number.parseInt(paging.cursor, 10);
116
+ query = query.where("id", ">", lastId);
117
+ }
118
+ // Apply limit if specified (fetch one extra to determine hasMore)
119
+ if (paging.limit) {
120
+ query = query.limit(paging.limit + 1);
121
+ }
122
+ }
123
+ const rows = await query.execute();
124
+ // Determine if there are more results
125
+ let hasMore = false;
126
+ let items = rows;
127
+ if (paging?.limit && rows.length > paging.limit) {
128
+ hasMore = true;
129
+ items = rows.slice(0, paging.limit);
130
+ }
131
+ // Generate next cursor from last item's id
132
+ const nextCursor = hasMore && items.length > 0
133
+ ? items[items.length - 1].id.toString()
134
+ : undefined;
135
+ return {
136
+ items: items.map((row) => this.rowToOperationWithContext(row)),
137
+ nextCursor,
138
+ hasMore,
139
+ };
140
+ }
141
+ async getRevisions(documentId, branch, signal) {
142
+ if (signal?.aborted) {
143
+ throw new Error("Operation aborted");
144
+ }
145
+ // Get the latest operation for each scope in a single query
146
+ // Uses a subquery to find operations where the index equals the max index for that scope
147
+ const scopeRevisions = await this.db
148
+ .selectFrom("Operation as o1")
149
+ .select(["o1.scope", "o1.index", "o1.timestampUtcMs"])
150
+ .where("o1.documentId", "=", documentId)
151
+ .where("o1.branch", "=", branch)
152
+ .where((eb) => eb("o1.index", "=", eb
153
+ .selectFrom("Operation as o2")
154
+ .select((eb2) => eb2.fn.max("o2.index").as("maxIndex"))
155
+ .where("o2.documentId", "=", eb.ref("o1.documentId"))
156
+ .where("o2.branch", "=", eb.ref("o1.branch"))
157
+ .where("o2.scope", "=", eb.ref("o1.scope"))))
158
+ .execute();
159
+ const revision = {};
160
+ let latestTimestamp = new Date(0).toISOString();
161
+ for (const row of scopeRevisions) {
162
+ revision[row.scope] = row.index + 1;
163
+ const timestamp = row.timestampUtcMs.toISOString();
164
+ if (timestamp > latestTimestamp) {
165
+ latestTimestamp = timestamp;
166
+ }
167
+ }
168
+ return {
169
+ revision,
170
+ latestTimestamp,
171
+ };
172
+ }
173
+ rowToOperation(row) {
174
+ return {
175
+ index: row.index,
176
+ timestampUtcMs: row.timestampUtcMs.toISOString(),
177
+ hash: row.hash,
178
+ skip: row.skip,
179
+ error: row.error || undefined,
180
+ id: row.opId,
181
+ action: JSON.parse(row.action),
182
+ };
183
+ }
184
+ rowToOperationWithContext(row) {
185
+ return {
186
+ operation: this.rowToOperation(row),
187
+ context: {
188
+ documentId: row.documentId,
189
+ documentType: row.documentType,
190
+ scope: row.scope,
191
+ branch: row.branch,
192
+ },
193
+ };
194
+ }
195
+ }
196
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/storage/kysely/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { Generated, Insertable, Selectable, Updateable } from "kysely";
2
+ export interface OperationTable {
3
+ id: Generated<number>;
4
+ jobId: string;
5
+ opId: string;
6
+ prevOpId: string;
7
+ writeTimestampUtcMs: Generated<Date>;
8
+ documentId: string;
9
+ documentType: string;
10
+ scope: string;
11
+ branch: string;
12
+ timestampUtcMs: Date;
13
+ index: number;
14
+ action: string;
15
+ skip: number;
16
+ error?: string | null;
17
+ hash: string;
18
+ }
19
+ export interface KeyframeTable {
20
+ id: Generated<number>;
21
+ documentId: string;
22
+ documentType: string;
23
+ scope: string;
24
+ branch: string;
25
+ revision: number;
26
+ document: string;
27
+ createdAt: Generated<Date>;
28
+ }
29
+ export interface Database {
30
+ Operation: OperationTable;
31
+ Keyframe: KeyframeTable;
32
+ }
33
+ export type OperationRow = Selectable<OperationTable>;
34
+ export type InsertableOperation = Insertable<OperationTable>;
35
+ export type UpdateableOperation = Updateable<OperationTable>;
36
+ export type KeyframeRow = Selectable<KeyframeTable>;
37
+ export type InsertableKeyframe = Insertable<KeyframeTable>;
38
+ export type UpdateableKeyframe = Updateable<KeyframeTable>;
39
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/storage/kysely/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE5E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,cAAc,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;AAC7D,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;AAE7D,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;AAC3D,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/storage/kysely/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { Operation } from "document-model";
2
+ import { type AtomicTxn as IAtomicTxn } from "./interfaces.js";
3
+ import type { InsertableOperation } from "./kysely/types.js";
4
+ export declare class AtomicTransaction implements IAtomicTxn {
5
+ private documentId;
6
+ private documentType;
7
+ private scope;
8
+ private branch;
9
+ private baseRevision;
10
+ private operations;
11
+ constructor(documentId: string, documentType: string, scope: string, branch: string, baseRevision: number);
12
+ addOperations(...operations: Operation[]): void;
13
+ getOperations(): InsertableOperation[];
14
+ }
15
+ //# sourceMappingURL=txn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"txn.d.ts","sourceRoot":"","sources":["../../../src/storage/txn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,KAAK,SAAS,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,qBAAa,iBAAkB,YAAW,UAAU;IAIhD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IAPtB,OAAO,CAAC,UAAU,CAA6B;gBAGrC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM;IAK9B,aAAa,CAAC,GAAG,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAoB/C,aAAa,IAAI,mBAAmB,EAAE;CAGvC"}