@powerhousedao/reactor 4.1.0-dev.59 → 4.1.0-dev.61
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/dist/src/core/reactor.d.ts.map +1 -1
- package/dist/src/core/reactor.js +33 -21
- package/dist/src/core/reactor.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +5 -0
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +45 -0
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/queue/queue.js +8 -8
- package/dist/src/queue/queue.js.map +1 -1
- package/dist/src/read-models/document-view.d.ts +21 -0
- package/dist/src/read-models/document-view.d.ts.map +1 -0
- package/dist/src/read-models/document-view.js +285 -0
- package/dist/src/read-models/document-view.js.map +1 -0
- package/dist/src/read-models/types.d.ts +46 -0
- package/dist/src/read-models/types.d.ts.map +1 -0
- package/dist/src/read-models/types.js +2 -0
- package/dist/src/read-models/types.js.map +1 -0
- package/dist/src/shared/awaiter.js +3 -3
- package/dist/src/shared/awaiter.js.map +1 -1
- package/dist/src/shared/types.d.ts +5 -0
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js +5 -0
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/storage/interfaces.d.ts +124 -0
- package/dist/src/storage/interfaces.d.ts.map +1 -0
- package/dist/src/storage/interfaces.js +19 -0
- package/dist/src/storage/interfaces.js.map +1 -0
- package/dist/src/storage/kysely/store.d.ts +15 -0
- package/dist/src/storage/kysely/store.d.ts.map +1 -0
- package/dist/src/storage/kysely/store.js +173 -0
- package/dist/src/storage/kysely/store.js.map +1 -0
- package/dist/src/storage/kysely/types.d.ts +26 -0
- package/dist/src/storage/kysely/types.d.ts.map +1 -0
- package/dist/src/storage/kysely/types.js +2 -0
- package/dist/src/storage/kysely/types.js.map +1 -0
- package/dist/src/storage/txn.d.ts +15 -0
- package/dist/src/storage/txn.d.ts.map +1 -0
- package/dist/src/storage/txn.js +42 -0
- package/dist/src/storage/txn.js.map +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { createPresignedHeader } from "document-model/core";
|
|
2
|
+
import { v4 as uuidv4 } from "uuid";
|
|
3
|
+
export class KyselyDocumentView {
|
|
4
|
+
db;
|
|
5
|
+
operationStore;
|
|
6
|
+
lastOperationId = 0;
|
|
7
|
+
constructor(db, operationStore) {
|
|
8
|
+
this.db = db;
|
|
9
|
+
this.operationStore = operationStore;
|
|
10
|
+
}
|
|
11
|
+
async init() {
|
|
12
|
+
// Create tables if they don't exist
|
|
13
|
+
await this.createTablesIfNotExist();
|
|
14
|
+
// Load the last processed operation ID from ViewState
|
|
15
|
+
const viewState = await this.db
|
|
16
|
+
.selectFrom("ViewState")
|
|
17
|
+
.selectAll()
|
|
18
|
+
.executeTakeFirst();
|
|
19
|
+
if (viewState) {
|
|
20
|
+
this.lastOperationId = viewState.lastOperationId;
|
|
21
|
+
// Catch up with any operations we missed
|
|
22
|
+
const missedOperations = await this.operationStore.getSinceId(this.lastOperationId);
|
|
23
|
+
if (missedOperations.length > 0) {
|
|
24
|
+
await this.indexOperations(missedOperations);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// Initialize ViewState with ID 0
|
|
29
|
+
await this.db
|
|
30
|
+
.insertInto("ViewState")
|
|
31
|
+
.values({
|
|
32
|
+
lastOperationId: 0,
|
|
33
|
+
})
|
|
34
|
+
.execute();
|
|
35
|
+
// Process all existing operations
|
|
36
|
+
const allOperations = await this.operationStore.getSinceId(0);
|
|
37
|
+
if (allOperations.length > 0) {
|
|
38
|
+
await this.indexOperations(allOperations);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async indexOperations(items) {
|
|
43
|
+
if (items.length === 0)
|
|
44
|
+
return;
|
|
45
|
+
await this.db.transaction().execute(async (trx) => {
|
|
46
|
+
for (const item of items) {
|
|
47
|
+
const { operation, context } = item;
|
|
48
|
+
const { documentId, scope, branch, documentType } = context;
|
|
49
|
+
const { index, hash } = operation;
|
|
50
|
+
// Check if we need to create or update a snapshot
|
|
51
|
+
const existingSnapshot = await trx
|
|
52
|
+
.selectFrom("DocumentSnapshot")
|
|
53
|
+
.selectAll()
|
|
54
|
+
.where("documentId", "=", documentId)
|
|
55
|
+
.where("scope", "=", scope)
|
|
56
|
+
.where("branch", "=", branch)
|
|
57
|
+
.executeTakeFirst();
|
|
58
|
+
if (existingSnapshot) {
|
|
59
|
+
// Update existing snapshot
|
|
60
|
+
await trx
|
|
61
|
+
.updateTable("DocumentSnapshot")
|
|
62
|
+
.set({
|
|
63
|
+
lastOperationIndex: index,
|
|
64
|
+
lastOperationHash: hash,
|
|
65
|
+
lastUpdatedAt: new Date(),
|
|
66
|
+
snapshotVersion: existingSnapshot.snapshotVersion + 1,
|
|
67
|
+
})
|
|
68
|
+
.where("documentId", "=", documentId)
|
|
69
|
+
.where("scope", "=", scope)
|
|
70
|
+
.where("branch", "=", branch)
|
|
71
|
+
.execute();
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Create new snapshot
|
|
75
|
+
const snapshot = {
|
|
76
|
+
id: uuidv4(),
|
|
77
|
+
documentId,
|
|
78
|
+
slug: null,
|
|
79
|
+
name: null,
|
|
80
|
+
scope,
|
|
81
|
+
branch,
|
|
82
|
+
content: JSON.stringify({}), // Empty for now, will be filled when we build full documents
|
|
83
|
+
documentType,
|
|
84
|
+
lastOperationIndex: index,
|
|
85
|
+
lastOperationHash: hash,
|
|
86
|
+
identifiers: null,
|
|
87
|
+
metadata: null,
|
|
88
|
+
deletedAt: null,
|
|
89
|
+
};
|
|
90
|
+
await trx.insertInto("DocumentSnapshot").values(snapshot).execute();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
async getHeader(documentId, branch, signal) {
|
|
96
|
+
if (signal?.aborted) {
|
|
97
|
+
throw new Error("Operation aborted");
|
|
98
|
+
}
|
|
99
|
+
// Query operations from header and document scopes only
|
|
100
|
+
// - "header" scope: CREATE_DOCUMENT actions contain initial header metadata
|
|
101
|
+
// - "document" scope: UPGRADE_DOCUMENT actions contain version transitions
|
|
102
|
+
const headerAndDocOps = await this.db
|
|
103
|
+
.selectFrom("Operation")
|
|
104
|
+
.selectAll()
|
|
105
|
+
.where("documentId", "=", documentId)
|
|
106
|
+
.where("branch", "=", branch)
|
|
107
|
+
.where("scope", "in", ["header", "document"])
|
|
108
|
+
.orderBy("timestampUtcMs", "asc") // Process in chronological order
|
|
109
|
+
.execute();
|
|
110
|
+
if (headerAndDocOps.length === 0) {
|
|
111
|
+
throw new Error(`Document header not found: ${documentId}`);
|
|
112
|
+
}
|
|
113
|
+
// Reconstruct header from header and document scope operations
|
|
114
|
+
let header = createPresignedHeader();
|
|
115
|
+
for (const op of headerAndDocOps) {
|
|
116
|
+
const action = JSON.parse(op.action);
|
|
117
|
+
if (action.type === "CREATE_DOCUMENT") {
|
|
118
|
+
const input = action.input;
|
|
119
|
+
// Extract header from CREATE_DOCUMENT action's signing parameters
|
|
120
|
+
if (input.signing) {
|
|
121
|
+
header = {
|
|
122
|
+
...header,
|
|
123
|
+
id: input.signing.signature, // documentId === signing.signature
|
|
124
|
+
documentType: input.signing.documentType,
|
|
125
|
+
createdAtUtcIso: input.signing.createdAtUtcIso,
|
|
126
|
+
lastModifiedAtUtcIso: input.signing.createdAtUtcIso,
|
|
127
|
+
sig: {
|
|
128
|
+
nonce: input.signing.nonce,
|
|
129
|
+
publicKey: input.signing.publicKey,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (action.type === "UPGRADE_DOCUMENT") {
|
|
135
|
+
// UPGRADE_DOCUMENT tracks version changes in the document scope
|
|
136
|
+
// Version information would be in the operation's resulting state
|
|
137
|
+
// For now, this is handled elsewhere in the document state
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Get revision map and latest timestamp from all scopes efficiently
|
|
141
|
+
const { revision, latestTimestamp } = await this.operationStore.getRevisions(documentId, branch, signal);
|
|
142
|
+
// Update header with cross-scope revision and timestamp information
|
|
143
|
+
header.revision = revision;
|
|
144
|
+
header.lastModifiedAtUtcIso = latestTimestamp;
|
|
145
|
+
return header;
|
|
146
|
+
}
|
|
147
|
+
async exists(documentIds, signal) {
|
|
148
|
+
if (signal?.aborted) {
|
|
149
|
+
throw new Error("Operation aborted");
|
|
150
|
+
}
|
|
151
|
+
if (documentIds.length === 0) {
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
// Query for all documents at once
|
|
155
|
+
const snapshots = await this.db
|
|
156
|
+
.selectFrom("DocumentSnapshot")
|
|
157
|
+
.select(["documentId"])
|
|
158
|
+
.where("documentId", "in", documentIds)
|
|
159
|
+
.where("isDeleted", "=", false)
|
|
160
|
+
.distinct()
|
|
161
|
+
.execute();
|
|
162
|
+
// Create a Set of existing document IDs for fast lookup
|
|
163
|
+
const existingIds = new Set(snapshots.map((s) => s.documentId));
|
|
164
|
+
// Return a boolean array in the same order as the input
|
|
165
|
+
return documentIds.map((id) => existingIds.has(id));
|
|
166
|
+
}
|
|
167
|
+
async getMany(documentIds, scope = "global", branch = "main", signal) {
|
|
168
|
+
if (signal?.aborted) {
|
|
169
|
+
throw new Error("Operation aborted");
|
|
170
|
+
}
|
|
171
|
+
if (documentIds.length === 0) {
|
|
172
|
+
return [];
|
|
173
|
+
}
|
|
174
|
+
// Query for all documents at once
|
|
175
|
+
const snapshots = await this.db
|
|
176
|
+
.selectFrom("DocumentSnapshot")
|
|
177
|
+
.selectAll()
|
|
178
|
+
.where("documentId", "in", documentIds)
|
|
179
|
+
.where("scope", "=", scope)
|
|
180
|
+
.where("branch", "=", branch)
|
|
181
|
+
.where("isDeleted", "=", false)
|
|
182
|
+
.execute();
|
|
183
|
+
// Create a Map of document ID to snapshot for fast lookup
|
|
184
|
+
const snapshotMap = new Map(snapshots.map((s) => [s.documentId, s]));
|
|
185
|
+
// Return an array in the same order as the input, with null for missing documents
|
|
186
|
+
return documentIds.map((id) => snapshotMap.get(id) || null);
|
|
187
|
+
}
|
|
188
|
+
async createTablesIfNotExist() {
|
|
189
|
+
// Check if tables exist by trying to query them
|
|
190
|
+
const tablesExist = await this.checkTablesExist();
|
|
191
|
+
if (!tablesExist) {
|
|
192
|
+
// Create ViewState table
|
|
193
|
+
await this.db.schema
|
|
194
|
+
.createTable("ViewState")
|
|
195
|
+
.ifNotExists()
|
|
196
|
+
.addColumn("lastOperationId", "integer", (col) => col.primaryKey())
|
|
197
|
+
.addColumn("lastOperationTimestamp", "timestamptz", (col) => col.defaultTo("now()").notNull())
|
|
198
|
+
.execute();
|
|
199
|
+
// Create DocumentSnapshot table
|
|
200
|
+
await this.db.schema
|
|
201
|
+
.createTable("DocumentSnapshot")
|
|
202
|
+
.ifNotExists()
|
|
203
|
+
.addColumn("id", "text", (col) => col.primaryKey())
|
|
204
|
+
.addColumn("documentId", "text", (col) => col.notNull())
|
|
205
|
+
.addColumn("slug", "text")
|
|
206
|
+
.addColumn("name", "text")
|
|
207
|
+
.addColumn("scope", "text", (col) => col.notNull())
|
|
208
|
+
.addColumn("branch", "text", (col) => col.notNull())
|
|
209
|
+
.addColumn("content", "text", (col) => col.notNull())
|
|
210
|
+
.addColumn("documentType", "text", (col) => col.notNull())
|
|
211
|
+
.addColumn("lastOperationIndex", "integer", (col) => col.notNull())
|
|
212
|
+
.addColumn("lastOperationHash", "text", (col) => col.notNull())
|
|
213
|
+
.addColumn("lastUpdatedAt", "timestamptz", (col) => col.defaultTo("now()").notNull())
|
|
214
|
+
.addColumn("snapshotVersion", "integer", (col) => col.defaultTo(1).notNull())
|
|
215
|
+
.addColumn("identifiers", "text")
|
|
216
|
+
.addColumn("metadata", "text")
|
|
217
|
+
.addColumn("isDeleted", "boolean", (col) => col.defaultTo(false).notNull())
|
|
218
|
+
.addColumn("deletedAt", "timestamptz")
|
|
219
|
+
.addUniqueConstraint("unique_doc_scope_branch", [
|
|
220
|
+
"documentId",
|
|
221
|
+
"scope",
|
|
222
|
+
"branch",
|
|
223
|
+
])
|
|
224
|
+
.execute();
|
|
225
|
+
// Create indexes for DocumentSnapshot
|
|
226
|
+
await this.db.schema
|
|
227
|
+
.createIndex("idx_slug_scope_branch")
|
|
228
|
+
.on("DocumentSnapshot")
|
|
229
|
+
.columns(["slug", "scope", "branch"])
|
|
230
|
+
.execute();
|
|
231
|
+
await this.db.schema
|
|
232
|
+
.createIndex("idx_doctype_scope_branch")
|
|
233
|
+
.on("DocumentSnapshot")
|
|
234
|
+
.columns(["documentType", "scope", "branch"])
|
|
235
|
+
.execute();
|
|
236
|
+
await this.db.schema
|
|
237
|
+
.createIndex("idx_last_updated")
|
|
238
|
+
.on("DocumentSnapshot")
|
|
239
|
+
.column("lastUpdatedAt")
|
|
240
|
+
.execute();
|
|
241
|
+
await this.db.schema
|
|
242
|
+
.createIndex("idx_is_deleted")
|
|
243
|
+
.on("DocumentSnapshot")
|
|
244
|
+
.column("isDeleted")
|
|
245
|
+
.execute();
|
|
246
|
+
// Create SlugMapping table
|
|
247
|
+
await this.db.schema
|
|
248
|
+
.createTable("SlugMapping")
|
|
249
|
+
.ifNotExists()
|
|
250
|
+
.addColumn("slug", "text", (col) => col.primaryKey())
|
|
251
|
+
.addColumn("documentId", "text", (col) => col.notNull())
|
|
252
|
+
.addColumn("scope", "text", (col) => col.notNull())
|
|
253
|
+
.addColumn("branch", "text", (col) => col.notNull())
|
|
254
|
+
.addColumn("createdAt", "timestamptz", (col) => col.defaultTo("now()").notNull())
|
|
255
|
+
.addColumn("updatedAt", "timestamptz", (col) => col.defaultTo("now()").notNull())
|
|
256
|
+
.addUniqueConstraint("unique_docid_scope_branch", [
|
|
257
|
+
"documentId",
|
|
258
|
+
"scope",
|
|
259
|
+
"branch",
|
|
260
|
+
])
|
|
261
|
+
.execute();
|
|
262
|
+
// Create index for SlugMapping
|
|
263
|
+
await this.db.schema
|
|
264
|
+
.createIndex("idx_slug_documentid")
|
|
265
|
+
.on("SlugMapping")
|
|
266
|
+
.column("documentId")
|
|
267
|
+
.execute();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
async checkTablesExist() {
|
|
271
|
+
try {
|
|
272
|
+
// Try to query ViewState table
|
|
273
|
+
await this.db
|
|
274
|
+
.selectFrom("ViewState")
|
|
275
|
+
.select("lastOperationId")
|
|
276
|
+
.limit(1)
|
|
277
|
+
.execute();
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=document-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-view.js","sourceRoot":"","sources":["../../../src/read-models/document-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Generated, Insertable, Selectable, Updateable } from "kysely";
|
|
2
|
+
export interface ViewStateTable {
|
|
3
|
+
lastOperationId: number;
|
|
4
|
+
lastOperationTimestamp: Generated<Date>;
|
|
5
|
+
}
|
|
6
|
+
export interface DocumentSnapshotTable {
|
|
7
|
+
id: Generated<string>;
|
|
8
|
+
documentId: string;
|
|
9
|
+
slug: string | null;
|
|
10
|
+
name: string | null;
|
|
11
|
+
scope: string;
|
|
12
|
+
branch: string;
|
|
13
|
+
content: string;
|
|
14
|
+
documentType: string;
|
|
15
|
+
lastOperationIndex: number;
|
|
16
|
+
lastOperationHash: string;
|
|
17
|
+
lastUpdatedAt: Generated<Date>;
|
|
18
|
+
snapshotVersion: Generated<number>;
|
|
19
|
+
identifiers: string | null;
|
|
20
|
+
metadata: string | null;
|
|
21
|
+
isDeleted: Generated<boolean>;
|
|
22
|
+
deletedAt: Date | null;
|
|
23
|
+
}
|
|
24
|
+
export interface SlugMappingTable {
|
|
25
|
+
slug: string;
|
|
26
|
+
documentId: string;
|
|
27
|
+
scope: string;
|
|
28
|
+
branch: string;
|
|
29
|
+
createdAt: Generated<Date>;
|
|
30
|
+
updatedAt: Generated<Date>;
|
|
31
|
+
}
|
|
32
|
+
export interface DocumentViewDatabase {
|
|
33
|
+
ViewState: ViewStateTable;
|
|
34
|
+
DocumentSnapshot: DocumentSnapshotTable;
|
|
35
|
+
SlugMapping: SlugMappingTable;
|
|
36
|
+
}
|
|
37
|
+
export type ViewStateRow = Selectable<ViewStateTable>;
|
|
38
|
+
export type InsertableViewState = Insertable<ViewStateTable>;
|
|
39
|
+
export type UpdateableViewState = Updateable<ViewStateTable>;
|
|
40
|
+
export type DocumentSnapshotRow = Selectable<DocumentSnapshotTable>;
|
|
41
|
+
export type InsertableDocumentSnapshot = Insertable<DocumentSnapshotTable>;
|
|
42
|
+
export type UpdateableDocumentSnapshot = Updateable<DocumentSnapshotTable>;
|
|
43
|
+
export type SlugMappingRow = Selectable<SlugMappingTable>;
|
|
44
|
+
export type InsertableSlugMapping = Insertable<SlugMappingTable>;
|
|
45
|
+
export type UpdateableSlugMapping = Updateable<SlugMappingTable>;
|
|
46
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/read-models/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,MAAM,CAAC;IACxB,sBAAsB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,WAAW,EAAE,gBAAgB,CAAC;CAC/B;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,mBAAmB,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC3E,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACjE,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/read-models/types.ts"],"names":[],"mappings":""}
|
|
@@ -65,11 +65,11 @@ export class JobAwaiter {
|
|
|
65
65
|
}
|
|
66
66
|
startInterval() {
|
|
67
67
|
if (this.intervalId === null && this.pendingJobs.size > 0) {
|
|
68
|
-
this.intervalId = setInterval(
|
|
69
|
-
|
|
68
|
+
this.intervalId = setInterval(() => {
|
|
69
|
+
void this.checkPendingJobs();
|
|
70
70
|
}, this.pollIntervalMs);
|
|
71
71
|
// Check immediately as well - schedule it for next tick
|
|
72
|
-
setTimeout(() => this.checkPendingJobs(), 0);
|
|
72
|
+
setTimeout(() => void this.checkPendingJobs(), 0);
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
stopIntervalIfNoJobs() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awaiter.js","sourceRoot":"","sources":["../../../src/shared/awaiter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"awaiter.js","sourceRoot":"","sources":["../../../src/shared/awaiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgB,MAAM,YAAY,CAAC;AAwBrD;;;GAGG;AACH,MAAM,OAAO,UAAU;IAMX;IAIA;IATV,8EAA8E;IACtE,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,UAAU,GAA0B,IAAI,CAAC;IAEjD,YACU,YAGa,EACb,iBAAiB,EAAE;QAJnB,iBAAY,GAAZ,YAAY,CAGC;QACb,mBAAc,GAAd,cAAc,CAAK;QAE3B,EAAE;IACJ,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,0BAA0B;QAC1B,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,MAAoB;QAClD,qCAAqC;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,8BAA8B;QAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,MAAM,MAAM,GAAc,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAEtD,0CAA0C;YAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1D,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YAE7C,sCAAsC;YACtC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,YAAY,GAAG,GAAG,EAAE;oBACxB,uCAAuC;oBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC5C,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;wBACtC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;4BACjB,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;4BACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gCACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACjC,CAAC;4BACD,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;4BAC9C,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBAC9B,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;gBAEF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,wCAAwC;QACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;gBACjC,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/B,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACxB,wDAAwD;YACxD,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC5D,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,8BAA8B;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAEnD,iBAAiB;QACjB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,6BAA6B;gBAC7B,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEhE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/B,2BAA2B;oBAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBAED,4DAA4D;gBAC5D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAExE,2BAA2B;gBAC3B,IACE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,SAAS;oBACtC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EACnC,CAAC;oBACD,sBAAsB;oBACtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAE/B,6BAA6B;oBAC7B,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;wBACnC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC1B,CAAC;oBAED,yBAAyB;oBACzB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;wBAC7B,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;4BAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;wBAChD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,sBAAsB;gBACtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAE/B,oCAAoC;gBACpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,CAAC,MAAM,CACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE7B,gCAAgC;QAChC,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The document ID used for system operations (CREATE_DOCUMENT, DELETE_DOCUMENT, etc.)
|
|
3
|
+
* System operations use this special ID along with the "system" scope.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SYSTEM_DOCUMENT_ID = "00000000-0000-0000-0000-000000000000";
|
|
1
6
|
/**
|
|
2
7
|
* Describes the status of a shutdown operation.
|
|
3
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;;OAQG;IACH,IAAI,UAAU,IAAI,OAAO,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,sBAAsB;IAChC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,oBAAY,SAAS;IACnB,wCAAwC;IACxC,OAAO,YAAY;IACnB,sCAAsC;IACtC,OAAO,YAAY;IACnB,iCAAiC;IACjC,SAAS,cAAc;IACvB,kCAAkC;IAClC,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IAEvB,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,yCAAyC,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;;OAQG;IACH,IAAI,UAAU,IAAI,OAAO,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,sBAAsB;IAChC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,oBAAY,SAAS;IACnB,wCAAwC;IACxC,OAAO,YAAY;IACnB,sCAAsC;IACtC,OAAO,YAAY;IACnB,iCAAiC;IACjC,SAAS,cAAc;IACvB,kCAAkC;IAClC,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IAEvB,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC"}
|
package/dist/src/shared/types.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The document ID used for system operations (CREATE_DOCUMENT, DELETE_DOCUMENT, etc.)
|
|
3
|
+
* System operations use this special ID along with the "system" scope.
|
|
4
|
+
*/
|
|
5
|
+
export const SYSTEM_DOCUMENT_ID = "00000000-0000-0000-0000-000000000000";
|
|
1
6
|
/**
|
|
2
7
|
* Enum that determines deletion propagation.
|
|
3
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,sCAAsC,CAAC;AAkBzE;;GAEG;AACH,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,sCAAmB,CAAA;AACrB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAChC,yCAAe,CAAA;IACf,6CAAmB,CAAA;AACrB,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;AAcD;;GAEG;AACH,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,wCAAwC;IACxC,gCAAmB,CAAA;IACnB,sCAAsC;IACtC,gCAAmB,CAAA;IACnB,iCAAiC;IACjC,oCAAuB,CAAA;IACvB,kCAAkC;IAClC,8BAAiB,CAAA;AACnB,CAAC,EATW,SAAS,KAAT,SAAS,QASpB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import type { Operation, PHDocumentHeader } from "document-model";
|
|
2
|
+
export type OperationContext = {
|
|
3
|
+
documentId: string;
|
|
4
|
+
documentType: string;
|
|
5
|
+
scope: string;
|
|
6
|
+
branch: string;
|
|
7
|
+
};
|
|
8
|
+
export type OperationWithContext = {
|
|
9
|
+
operation: Operation;
|
|
10
|
+
context: OperationContext;
|
|
11
|
+
};
|
|
12
|
+
export declare class DuplicateOperationError extends Error {
|
|
13
|
+
constructor(opId: string);
|
|
14
|
+
}
|
|
15
|
+
export declare class OptimisticLockError extends Error {
|
|
16
|
+
constructor(message: string);
|
|
17
|
+
}
|
|
18
|
+
export declare class RevisionMismatchError extends Error {
|
|
19
|
+
constructor(expected: number, actual: number);
|
|
20
|
+
}
|
|
21
|
+
export interface AtomicTxn {
|
|
22
|
+
addOperations(...operations: Operation[]): void;
|
|
23
|
+
}
|
|
24
|
+
export type DocumentRevisions = {
|
|
25
|
+
/** Map of scope to operation index for that scope */
|
|
26
|
+
revision: Record<string, number>;
|
|
27
|
+
/** Latest timestamp across revisions */
|
|
28
|
+
latestTimestamp: string;
|
|
29
|
+
};
|
|
30
|
+
export interface IOperationStore {
|
|
31
|
+
apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal): Promise<void>;
|
|
32
|
+
get(documentId: string, scope: string, branch: string, revision: number, signal?: AbortSignal): Promise<OperationWithContext>;
|
|
33
|
+
getSince(documentId: string, scope: string, branch: string, revision: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
|
|
34
|
+
getSinceTimestamp(documentId: string, scope: string, branch: string, timestampUtcMs: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
|
|
35
|
+
getSinceId(id: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Gets the latest operation index for each scope of a document, along with
|
|
38
|
+
* the latest timestamp across all scopes. This is used to efficiently reconstruct
|
|
39
|
+
* the revision map and lastModified timestamp for document headers.
|
|
40
|
+
*
|
|
41
|
+
* @param documentId - The document id
|
|
42
|
+
* @param branch - The branch name
|
|
43
|
+
* @param signal - Optional abort signal to cancel the request
|
|
44
|
+
* @returns Object containing revision map and latest timestamp
|
|
45
|
+
*/
|
|
46
|
+
getRevisions(documentId: string, branch: string, signal?: AbortSignal): Promise<DocumentRevisions>;
|
|
47
|
+
}
|
|
48
|
+
export interface ViewFilter {
|
|
49
|
+
branch?: string;
|
|
50
|
+
scopes?: string[];
|
|
51
|
+
}
|
|
52
|
+
export interface SearchFilter {
|
|
53
|
+
documentType?: string;
|
|
54
|
+
parentId?: string;
|
|
55
|
+
identifiers?: Record<string, any>;
|
|
56
|
+
}
|
|
57
|
+
export interface PagingOptions {
|
|
58
|
+
cursor?: string;
|
|
59
|
+
limit?: number;
|
|
60
|
+
}
|
|
61
|
+
export interface PagedResults<T> {
|
|
62
|
+
items: T[];
|
|
63
|
+
nextCursor?: string;
|
|
64
|
+
hasMore: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface DocumentSnapshot {
|
|
67
|
+
id: string;
|
|
68
|
+
documentId: string;
|
|
69
|
+
slug: string | null;
|
|
70
|
+
name: string | null;
|
|
71
|
+
scope: string;
|
|
72
|
+
branch: string;
|
|
73
|
+
content: string;
|
|
74
|
+
documentType: string;
|
|
75
|
+
lastOperationIndex: number;
|
|
76
|
+
lastOperationHash: string;
|
|
77
|
+
lastUpdatedAt: Date;
|
|
78
|
+
snapshotVersion: number;
|
|
79
|
+
identifiers: string | null;
|
|
80
|
+
metadata: string | null;
|
|
81
|
+
isDeleted: boolean;
|
|
82
|
+
deletedAt: Date | null;
|
|
83
|
+
}
|
|
84
|
+
export interface IDocumentView {
|
|
85
|
+
/**
|
|
86
|
+
* Initializes the view.
|
|
87
|
+
*/
|
|
88
|
+
init(): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Indexes a list of operations.
|
|
91
|
+
*/
|
|
92
|
+
indexOperations(items: OperationWithContext[]): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Retrieves a document header by reconstructing it from operations across all scopes.
|
|
95
|
+
*
|
|
96
|
+
* Headers contain cross-scope metadata (revision tracking, lastModified timestamps)
|
|
97
|
+
* that require aggregating information from multiple scopes, making this a
|
|
98
|
+
* view-layer concern rather than an operation store concern.
|
|
99
|
+
*
|
|
100
|
+
* @param documentId - The document id
|
|
101
|
+
* @param branch - The branch name
|
|
102
|
+
* @param signal - Optional abort signal to cancel the request
|
|
103
|
+
* @returns The reconstructed document header
|
|
104
|
+
*/
|
|
105
|
+
getHeader(documentId: string, branch: string, signal?: AbortSignal): Promise<PHDocumentHeader>;
|
|
106
|
+
/**
|
|
107
|
+
* Returns true if and only if the documents exist.
|
|
108
|
+
*
|
|
109
|
+
* @param documentIds - The list of document ids to check.
|
|
110
|
+
* @param signal - Optional abort signal to cancel the request
|
|
111
|
+
*/
|
|
112
|
+
exists(documentIds: string[], signal?: AbortSignal): Promise<boolean[]>;
|
|
113
|
+
/**
|
|
114
|
+
* Retrieves multiple document snapshots by their IDs.
|
|
115
|
+
*
|
|
116
|
+
* @param documentIds - The list of document ids to retrieve.
|
|
117
|
+
* @param scope - The scope to filter by (default: "global")
|
|
118
|
+
* @param branch - The branch to filter by (default: "main")
|
|
119
|
+
* @param signal - Optional abort signal to cancel the request
|
|
120
|
+
* @returns Array of document snapshots in the same order as input IDs (null for non-existent docs)
|
|
121
|
+
*/
|
|
122
|
+
getMany(documentIds: string[], scope?: string, branch?: string, signal?: AbortSignal): Promise<(DocumentSnapshot | null)[]>;
|
|
123
|
+
}
|
|
124
|
+
//# 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":"AAcA,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 { Kysely } from "kysely";
|
|
2
|
+
import { type AtomicTxn, type DocumentRevisions, type IOperationStore, type OperationWithContext } from "../interfaces.js";
|
|
3
|
+
import type { Database } from "./types.js";
|
|
4
|
+
export declare class KyselyOperationStore implements IOperationStore {
|
|
5
|
+
private db;
|
|
6
|
+
constructor(db: Kysely<Database>);
|
|
7
|
+
apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal): Promise<void>;
|
|
8
|
+
get(documentId: string, scope: string, branch: string, index: number, signal?: AbortSignal): Promise<OperationWithContext>;
|
|
9
|
+
getSince(documentId: string, scope: string, branch: string, index: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
|
|
10
|
+
getSinceTimestamp(documentId: string, scope: string, branch: string, timestampUtcMs: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
|
|
11
|
+
getSinceId(id: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
|
|
12
|
+
getRevisions(documentId: string, branch: string, signal?: AbortSignal): Promise<DocumentRevisions>;
|
|
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":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,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,GAAG,CACP,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,CAAC;IAuB1B,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAkB5B,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAkB5B,UAAU,CACd,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAe5B,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC;IA4C7B,OAAO,CAAC,yBAAyB;CAoBlC"}
|