@powerhousedao/reactor 5.0.0 → 5.0.1-staging.10
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/cache/kysely-write-cache.d.ts +4 -3
- package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
- package/dist/src/cache/kysely-write-cache.js +12 -12
- package/dist/src/cache/kysely-write-cache.js.map +1 -1
- package/dist/src/client/reactor-client.d.ts +2 -2
- package/dist/src/client/reactor-client.d.ts.map +1 -1
- package/dist/src/client/reactor-client.js +8 -8
- package/dist/src/client/reactor-client.js.map +1 -1
- package/dist/src/client/types.d.ts +4 -4
- package/dist/src/client/types.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.d.ts +32 -0
- package/dist/src/core/reactor-builder.d.ts.map +1 -0
- package/dist/src/core/reactor-builder.js +120 -0
- package/dist/src/core/reactor-builder.js.map +1 -0
- package/dist/src/core/reactor.d.ts +25 -11
- package/dist/src/core/reactor.d.ts.map +1 -1
- package/dist/src/core/reactor.js +625 -294
- package/dist/src/core/reactor.js.map +1 -1
- package/dist/src/core/types.d.ts +64 -7
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/utils.d.ts +46 -2
- package/dist/src/core/utils.d.ts.map +1 -1
- package/dist/src/core/utils.js +119 -0
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.js +3 -1
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +14 -2
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +368 -249
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/executor/types.d.ts +2 -0
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/executor/types.js.map +1 -1
- package/dist/src/executor/util.d.ts +18 -0
- package/dist/src/executor/util.d.ts.map +1 -1
- package/dist/src/executor/util.js +42 -1
- package/dist/src/executor/util.js.map +1 -1
- package/dist/src/index.d.ts +9 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts +2 -2
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -1
- package/dist/src/job-tracker/in-memory-job-tracker.js +7 -1
- package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -1
- package/dist/src/job-tracker/interfaces.d.ts +3 -2
- package/dist/src/job-tracker/interfaces.d.ts.map +1 -1
- package/dist/src/queue/types.d.ts +6 -1
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/read-models/document-view.d.ts +10 -6
- package/dist/src/read-models/document-view.d.ts.map +1 -1
- package/dist/src/read-models/document-view.js +116 -113
- package/dist/src/read-models/document-view.js.map +1 -1
- package/dist/src/read-models/types.d.ts +3 -3
- package/dist/src/read-models/types.d.ts.map +1 -1
- package/dist/src/shared/consistency-tracker.d.ts +48 -0
- package/dist/src/shared/consistency-tracker.d.ts.map +1 -0
- package/dist/src/shared/consistency-tracker.js +123 -0
- package/dist/src/shared/consistency-tracker.js.map +1 -0
- package/dist/src/shared/types.d.ts +26 -0
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/storage/interfaces.d.ts +148 -2
- package/dist/src/storage/interfaces.d.ts.map +1 -1
- package/dist/src/storage/interfaces.js.map +1 -1
- package/dist/src/storage/kysely/document-indexer.d.ts +28 -0
- package/dist/src/storage/kysely/document-indexer.d.ts.map +1 -0
- package/dist/src/storage/kysely/document-indexer.js +350 -0
- package/dist/src/storage/kysely/document-indexer.js.map +1 -0
- package/dist/src/storage/kysely/keyframe-store.d.ts.map +1 -1
- package/dist/src/storage/kysely/keyframe-store.js +6 -13
- package/dist/src/storage/kysely/keyframe-store.js.map +1 -1
- package/dist/src/storage/kysely/store.js +1 -1
- package/dist/src/storage/kysely/store.js.map +1 -1
- package/dist/src/storage/kysely/types.d.ts +35 -2
- package/dist/src/storage/kysely/types.d.ts.map +1 -1
- package/dist/src/storage/migrations/001_create_operation_table.d.ts +3 -0
- package/dist/src/storage/migrations/001_create_operation_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/001_create_operation_table.js +40 -0
- package/dist/src/storage/migrations/001_create_operation_table.js.map +1 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.d.ts +3 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.js +27 -0
- package/dist/src/storage/migrations/002_create_keyframe_table.js.map +1 -0
- package/dist/src/storage/migrations/003_create_document_table.d.ts +3 -0
- package/dist/src/storage/migrations/003_create_document_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/003_create_document_table.js +10 -0
- package/dist/src/storage/migrations/003_create_document_table.js.map +1 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.d.ts +3 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.js +35 -0
- package/dist/src/storage/migrations/004_create_document_relationship_table.js.map +1 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.d.ts +3 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.js +10 -0
- package/dist/src/storage/migrations/005_create_indexer_state_table.js.map +1 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.d.ts +3 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.js +49 -0
- package/dist/src/storage/migrations/006_create_document_snapshot_table.js.map +1 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.d.ts +3 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.js +24 -0
- package/dist/src/storage/migrations/007_create_slug_mapping_table.js.map +1 -0
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts +3 -0
- package/dist/src/storage/migrations/008_create_view_state_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/008_create_view_state_table.js +9 -0
- package/dist/src/storage/migrations/008_create_view_state_table.js.map +1 -0
- package/dist/src/storage/migrations/index.d.ts +3 -0
- package/dist/src/storage/migrations/index.d.ts.map +1 -0
- package/dist/src/storage/migrations/index.js +3 -0
- package/dist/src/storage/migrations/index.js.map +1 -0
- package/dist/src/storage/migrations/migrator.d.ts +5 -0
- package/dist/src/storage/migrations/migrator.d.ts.map +1 -0
- package/dist/src/storage/migrations/migrator.js +51 -0
- package/dist/src/storage/migrations/migrator.js.map +1 -0
- package/dist/src/storage/migrations/run-migrations.d.ts +2 -0
- package/dist/src/storage/migrations/run-migrations.d.ts.map +1 -0
- package/dist/src/storage/migrations/run-migrations.js +58 -0
- package/dist/src/storage/migrations/run-migrations.js.map +1 -0
- package/dist/src/storage/migrations/types.d.ts +9 -0
- package/dist/src/storage/migrations/types.d.ts.map +1 -0
- package/dist/src/storage/migrations/types.js +2 -0
- package/dist/src/storage/migrations/types.js.map +1 -0
- package/dist/src/storage/txn.d.ts.map +1 -1
- package/dist/src/storage/txn.js +2 -0
- package/dist/src/storage/txn.js.map +1 -1
- package/package.json +8 -5
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Operation, PHDocument } from "document-model";
|
|
2
|
+
import type { ConsistencyToken } from "../shared/types.js";
|
|
2
3
|
export type OperationContext = {
|
|
3
4
|
documentId: string;
|
|
4
5
|
documentType: string;
|
|
@@ -102,20 +103,165 @@ export interface IDocumentView {
|
|
|
102
103
|
* documents from operations - it always requires resultingState.
|
|
103
104
|
*/
|
|
104
105
|
indexOperations(items: OperationWithContext[]): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Blocks until the view has processed the coordinates referenced by the
|
|
108
|
+
* provided consistency token.
|
|
109
|
+
*
|
|
110
|
+
* @param token - Consistency token derived from the originating job
|
|
111
|
+
* @param timeoutMs - Optional timeout window in milliseconds
|
|
112
|
+
* @param signal - Optional abort signal to cancel the wait
|
|
113
|
+
*/
|
|
114
|
+
waitForConsistency(token: ConsistencyToken, timeoutMs?: number, signal?: AbortSignal): Promise<void>;
|
|
105
115
|
/**
|
|
106
116
|
* Returns true if and only if the documents exist.
|
|
107
117
|
*
|
|
108
118
|
* @param documentIds - The list of document ids to check.
|
|
119
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
109
120
|
* @param signal - Optional abort signal to cancel the request
|
|
110
121
|
*/
|
|
111
|
-
exists(documentIds: string[], signal?: AbortSignal): Promise<boolean[]>;
|
|
122
|
+
exists(documentIds: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<boolean[]>;
|
|
112
123
|
/**
|
|
113
124
|
* Returns the document with the given id.
|
|
114
125
|
*
|
|
115
126
|
* @param documentId - The id of the document to get.
|
|
116
127
|
* @param view - Optional filter containing branch and scopes information
|
|
128
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
129
|
+
* @param signal - Optional abort signal to cancel the request
|
|
130
|
+
*/
|
|
131
|
+
get<TDocument extends PHDocument>(documentId: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<TDocument>;
|
|
132
|
+
/**
|
|
133
|
+
* Finds documents by their document type.
|
|
134
|
+
*
|
|
135
|
+
* @param type - The document type to search for
|
|
136
|
+
* @param view - Optional filter containing branch and scopes information
|
|
137
|
+
* @param paging - Optional paging options for cursor-based pagination
|
|
138
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
139
|
+
* @param signal - Optional abort signal to cancel the request
|
|
140
|
+
*/
|
|
141
|
+
findByType(type: string, view?: ViewFilter, paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<PHDocument>>;
|
|
142
|
+
/**
|
|
143
|
+
* Resolves a slug to a document ID.
|
|
144
|
+
*
|
|
145
|
+
* @param slug - The slug to resolve
|
|
146
|
+
* @param view - Optional filter containing branch and scopes information
|
|
147
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
148
|
+
* @param signal - Optional abort signal to cancel the request
|
|
149
|
+
* @returns The document ID or undefined if the slug doesn't exist
|
|
150
|
+
*/
|
|
151
|
+
resolveSlug(slug: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string | undefined>;
|
|
152
|
+
}
|
|
153
|
+
export type DocumentRelationship = {
|
|
154
|
+
sourceId: string;
|
|
155
|
+
targetId: string;
|
|
156
|
+
relationshipType: string;
|
|
157
|
+
metadata?: Record<string, unknown>;
|
|
158
|
+
createdAt: Date;
|
|
159
|
+
updatedAt: Date;
|
|
160
|
+
};
|
|
161
|
+
export type DocumentGraphEdge = {
|
|
162
|
+
from: string;
|
|
163
|
+
to: string;
|
|
164
|
+
type: string;
|
|
165
|
+
};
|
|
166
|
+
export interface IDocumentGraph {
|
|
167
|
+
nodes: string[];
|
|
168
|
+
edges: DocumentGraphEdge[];
|
|
169
|
+
}
|
|
170
|
+
export interface IDocumentIndexer {
|
|
171
|
+
/**
|
|
172
|
+
* Initializes the indexer and catches up on any missed operations.
|
|
173
|
+
*/
|
|
174
|
+
init(): Promise<void>;
|
|
175
|
+
/**
|
|
176
|
+
* Indexes a list of operations to update the relationship graph.
|
|
177
|
+
*
|
|
178
|
+
* @param operations - Operations to index. Will process ADD_RELATIONSHIP and
|
|
179
|
+
* REMOVE_RELATIONSHIP operations.
|
|
180
|
+
*/
|
|
181
|
+
indexOperations(operations: OperationWithContext[]): Promise<void>;
|
|
182
|
+
/**
|
|
183
|
+
* Blocks until the indexer has processed the coordinates referenced by the
|
|
184
|
+
* provided consistency token.
|
|
185
|
+
*
|
|
186
|
+
* @param token - Consistency token derived from the originating job
|
|
187
|
+
* @param timeoutMs - Optional timeout window in milliseconds
|
|
188
|
+
* @param signal - Optional abort signal to cancel the wait
|
|
189
|
+
*/
|
|
190
|
+
waitForConsistency(token: ConsistencyToken, timeoutMs?: number, signal?: AbortSignal): Promise<void>;
|
|
191
|
+
/**
|
|
192
|
+
* Returns outgoing relationships from a document.
|
|
193
|
+
*
|
|
194
|
+
* @param documentId - The source document id
|
|
195
|
+
* @param types - Optional filter by relationship types
|
|
196
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
197
|
+
* @param signal - Optional abort signal to cancel the request
|
|
198
|
+
*/
|
|
199
|
+
getOutgoing(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
200
|
+
/**
|
|
201
|
+
* Returns incoming relationships to a document.
|
|
202
|
+
*
|
|
203
|
+
* @param documentId - The target document id
|
|
204
|
+
* @param types - Optional filter by relationship types
|
|
205
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
206
|
+
* @param signal - Optional abort signal to cancel the request
|
|
207
|
+
*/
|
|
208
|
+
getIncoming(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
209
|
+
/**
|
|
210
|
+
* Checks if a relationship exists between two documents.
|
|
211
|
+
*
|
|
212
|
+
* @param sourceId - The source document id
|
|
213
|
+
* @param targetId - The target document id
|
|
214
|
+
* @param types - Optional filter by relationship types
|
|
215
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
216
|
+
* @param signal - Optional abort signal to cancel the request
|
|
217
|
+
*/
|
|
218
|
+
hasRelationship(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<boolean>;
|
|
219
|
+
/**
|
|
220
|
+
* Returns all undirected relationships between two documents.
|
|
221
|
+
*
|
|
222
|
+
* @param a - The ID of the first document
|
|
223
|
+
* @param b - The ID of the second document
|
|
224
|
+
* @param types - Optional filter by relationship types
|
|
225
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
226
|
+
* @param signal - Optional abort signal to cancel the request
|
|
227
|
+
*/
|
|
228
|
+
getUndirectedRelationships(a: string, b: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
229
|
+
/**
|
|
230
|
+
* Returns all directed relationships between two documents.
|
|
231
|
+
*
|
|
232
|
+
* @param sourceId - The source document id
|
|
233
|
+
* @param targetId - The target document id
|
|
234
|
+
* @param types - Optional filter by relationship types
|
|
235
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
236
|
+
* @param signal - Optional abort signal to cancel the request
|
|
237
|
+
*/
|
|
238
|
+
getDirectedRelationships(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
239
|
+
/**
|
|
240
|
+
* Finds a path from source to target following directed edges.
|
|
241
|
+
*
|
|
242
|
+
* @param sourceId - The source document id
|
|
243
|
+
* @param targetId - The target document id
|
|
244
|
+
* @param types - Optional filter by relationship types
|
|
245
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
246
|
+
* @param signal - Optional abort signal to cancel the request
|
|
247
|
+
* @returns Array of document ids representing the path, or null if no path exists
|
|
248
|
+
*/
|
|
249
|
+
findPath(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[] | null>;
|
|
250
|
+
/**
|
|
251
|
+
* Returns all ancestors of a document in the relationship graph.
|
|
252
|
+
*
|
|
253
|
+
* @param documentId - The document id
|
|
254
|
+
* @param types - Optional filter by relationship types
|
|
255
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
256
|
+
* @param signal - Optional abort signal to cancel the request
|
|
257
|
+
*/
|
|
258
|
+
findAncestors(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<IDocumentGraph>;
|
|
259
|
+
/**
|
|
260
|
+
* Returns all relationship types currently in the system.
|
|
261
|
+
*
|
|
262
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
117
263
|
* @param signal - Optional abort signal to cancel the request
|
|
118
264
|
*/
|
|
119
|
-
|
|
265
|
+
getRelationshipTypes(consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
|
|
120
266
|
}
|
|
121
267
|
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"AAgBA,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,28 @@
|
|
|
1
|
+
import type { Kysely } from "kysely";
|
|
2
|
+
import type { IConsistencyTracker } from "../../shared/consistency-tracker.js";
|
|
3
|
+
import type { ConsistencyToken } from "../../shared/types.js";
|
|
4
|
+
import type { DocumentRelationship, IDocumentGraph, IDocumentIndexer, IOperationStore, OperationWithContext } from "../interfaces.js";
|
|
5
|
+
import type { Database as StorageDatabase, DocumentIndexerDatabase } from "./types.js";
|
|
6
|
+
type Database = StorageDatabase & DocumentIndexerDatabase;
|
|
7
|
+
export declare class KyselyDocumentIndexer implements IDocumentIndexer {
|
|
8
|
+
private db;
|
|
9
|
+
private operationStore;
|
|
10
|
+
private consistencyTracker;
|
|
11
|
+
private lastOperationId;
|
|
12
|
+
constructor(db: Kysely<Database>, operationStore: IOperationStore, consistencyTracker: IConsistencyTracker);
|
|
13
|
+
init(): Promise<void>;
|
|
14
|
+
indexOperations(items: OperationWithContext[]): Promise<void>;
|
|
15
|
+
waitForConsistency(token: ConsistencyToken, timeoutMs?: number, signal?: AbortSignal): Promise<void>;
|
|
16
|
+
getOutgoing(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
17
|
+
getIncoming(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
18
|
+
hasRelationship(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<boolean>;
|
|
19
|
+
getUndirectedRelationships(a: string, b: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
20
|
+
getDirectedRelationships(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
21
|
+
findPath(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[] | null>;
|
|
22
|
+
findAncestors(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<IDocumentGraph>;
|
|
23
|
+
getRelationshipTypes(consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
|
|
24
|
+
private handleAddRelationship;
|
|
25
|
+
private handleRemoveRelationship;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=document-indexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-indexer.d.ts","sourceRoot":"","sources":["../../../../src/storage/kysely/document-indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from "uuid";
|
|
2
|
+
export class KyselyDocumentIndexer {
|
|
3
|
+
db;
|
|
4
|
+
operationStore;
|
|
5
|
+
consistencyTracker;
|
|
6
|
+
lastOperationId = 0;
|
|
7
|
+
constructor(db, operationStore, consistencyTracker) {
|
|
8
|
+
this.db = db;
|
|
9
|
+
this.operationStore = operationStore;
|
|
10
|
+
this.consistencyTracker = consistencyTracker;
|
|
11
|
+
}
|
|
12
|
+
async init() {
|
|
13
|
+
const indexerState = await this.db
|
|
14
|
+
.selectFrom("IndexerState")
|
|
15
|
+
.selectAll()
|
|
16
|
+
.executeTakeFirst();
|
|
17
|
+
if (indexerState) {
|
|
18
|
+
this.lastOperationId = indexerState.lastOperationId;
|
|
19
|
+
const missedOperations = await this.operationStore.getSinceId(this.lastOperationId);
|
|
20
|
+
if (missedOperations.items.length > 0) {
|
|
21
|
+
await this.indexOperations(missedOperations.items);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
await this.db
|
|
26
|
+
.insertInto("IndexerState")
|
|
27
|
+
.values({
|
|
28
|
+
lastOperationId: 0,
|
|
29
|
+
})
|
|
30
|
+
.execute();
|
|
31
|
+
const allOperations = await this.operationStore.getSinceId(0);
|
|
32
|
+
if (allOperations.items.length > 0) {
|
|
33
|
+
await this.indexOperations(allOperations.items);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async indexOperations(items) {
|
|
38
|
+
if (items.length === 0)
|
|
39
|
+
return;
|
|
40
|
+
await this.db.transaction().execute(async (trx) => {
|
|
41
|
+
for (const item of items) {
|
|
42
|
+
const { operation } = item;
|
|
43
|
+
const actionType = operation.action.type;
|
|
44
|
+
if (actionType === "ADD_RELATIONSHIP") {
|
|
45
|
+
await this.handleAddRelationship(trx, operation);
|
|
46
|
+
}
|
|
47
|
+
else if (actionType === "REMOVE_RELATIONSHIP") {
|
|
48
|
+
await this.handleRemoveRelationship(trx, operation);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const lastOpId = items[items.length - 1].operation.id;
|
|
52
|
+
if (lastOpId && typeof lastOpId === "number") {
|
|
53
|
+
this.lastOperationId = lastOpId;
|
|
54
|
+
await trx
|
|
55
|
+
.updateTable("IndexerState")
|
|
56
|
+
.set({
|
|
57
|
+
lastOperationId: lastOpId,
|
|
58
|
+
lastOperationTimestamp: new Date(),
|
|
59
|
+
})
|
|
60
|
+
.execute();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
const coordinates = [];
|
|
64
|
+
for (let i = 0; i < items.length; i++) {
|
|
65
|
+
const item = items[i];
|
|
66
|
+
coordinates.push({
|
|
67
|
+
documentId: item.context.documentId,
|
|
68
|
+
scope: item.context.scope,
|
|
69
|
+
branch: item.context.branch,
|
|
70
|
+
operationIndex: item.operation.index,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
this.consistencyTracker.update(coordinates);
|
|
74
|
+
}
|
|
75
|
+
async waitForConsistency(token, timeoutMs, signal) {
|
|
76
|
+
if (token.coordinates.length === 0) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
await this.consistencyTracker.waitFor(token.coordinates, timeoutMs, signal);
|
|
80
|
+
}
|
|
81
|
+
async getOutgoing(documentId, types, consistencyToken, signal) {
|
|
82
|
+
if (consistencyToken) {
|
|
83
|
+
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
84
|
+
}
|
|
85
|
+
if (signal?.aborted) {
|
|
86
|
+
throw new Error("Operation aborted");
|
|
87
|
+
}
|
|
88
|
+
let query = this.db
|
|
89
|
+
.selectFrom("DocumentRelationship")
|
|
90
|
+
.selectAll()
|
|
91
|
+
.where("sourceId", "=", documentId);
|
|
92
|
+
if (types && types.length > 0) {
|
|
93
|
+
query = query.where("relationshipType", "in", types);
|
|
94
|
+
}
|
|
95
|
+
const rows = await query.execute();
|
|
96
|
+
return rows.map((row) => ({
|
|
97
|
+
sourceId: row.sourceId,
|
|
98
|
+
targetId: row.targetId,
|
|
99
|
+
relationshipType: row.relationshipType,
|
|
100
|
+
metadata: row.metadata
|
|
101
|
+
? row.metadata
|
|
102
|
+
: undefined,
|
|
103
|
+
createdAt: row.createdAt,
|
|
104
|
+
updatedAt: row.updatedAt,
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
async getIncoming(documentId, types, consistencyToken, signal) {
|
|
108
|
+
if (consistencyToken) {
|
|
109
|
+
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
110
|
+
}
|
|
111
|
+
if (signal?.aborted) {
|
|
112
|
+
throw new Error("Operation aborted");
|
|
113
|
+
}
|
|
114
|
+
let query = this.db
|
|
115
|
+
.selectFrom("DocumentRelationship")
|
|
116
|
+
.selectAll()
|
|
117
|
+
.where("targetId", "=", documentId);
|
|
118
|
+
if (types && types.length > 0) {
|
|
119
|
+
query = query.where("relationshipType", "in", types);
|
|
120
|
+
}
|
|
121
|
+
const rows = await query.execute();
|
|
122
|
+
return rows.map((row) => ({
|
|
123
|
+
sourceId: row.sourceId,
|
|
124
|
+
targetId: row.targetId,
|
|
125
|
+
relationshipType: row.relationshipType,
|
|
126
|
+
metadata: row.metadata
|
|
127
|
+
? row.metadata
|
|
128
|
+
: undefined,
|
|
129
|
+
createdAt: row.createdAt,
|
|
130
|
+
updatedAt: row.updatedAt,
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
async hasRelationship(sourceId, targetId, types, consistencyToken, signal) {
|
|
134
|
+
if (consistencyToken) {
|
|
135
|
+
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
136
|
+
}
|
|
137
|
+
if (signal?.aborted) {
|
|
138
|
+
throw new Error("Operation aborted");
|
|
139
|
+
}
|
|
140
|
+
let query = this.db
|
|
141
|
+
.selectFrom("DocumentRelationship")
|
|
142
|
+
.select("id")
|
|
143
|
+
.where("sourceId", "=", sourceId)
|
|
144
|
+
.where("targetId", "=", targetId);
|
|
145
|
+
if (types && types.length > 0) {
|
|
146
|
+
query = query.where("relationshipType", "in", types);
|
|
147
|
+
}
|
|
148
|
+
const result = await query.executeTakeFirst();
|
|
149
|
+
return result !== undefined;
|
|
150
|
+
}
|
|
151
|
+
async getUndirectedRelationships(a, b, types, consistencyToken, signal) {
|
|
152
|
+
if (consistencyToken) {
|
|
153
|
+
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
154
|
+
}
|
|
155
|
+
if (signal?.aborted) {
|
|
156
|
+
throw new Error("Operation aborted");
|
|
157
|
+
}
|
|
158
|
+
let query = this.db
|
|
159
|
+
.selectFrom("DocumentRelationship")
|
|
160
|
+
.selectAll()
|
|
161
|
+
.where((eb) => eb.or([
|
|
162
|
+
eb.and([eb("sourceId", "=", a), eb("targetId", "=", b)]),
|
|
163
|
+
eb.and([eb("sourceId", "=", b), eb("targetId", "=", a)]),
|
|
164
|
+
]));
|
|
165
|
+
if (types && types.length > 0) {
|
|
166
|
+
query = query.where("relationshipType", "in", types);
|
|
167
|
+
}
|
|
168
|
+
const rows = await query.execute();
|
|
169
|
+
return rows.map((row) => ({
|
|
170
|
+
sourceId: row.sourceId,
|
|
171
|
+
targetId: row.targetId,
|
|
172
|
+
relationshipType: row.relationshipType,
|
|
173
|
+
metadata: row.metadata
|
|
174
|
+
? row.metadata
|
|
175
|
+
: undefined,
|
|
176
|
+
createdAt: row.createdAt,
|
|
177
|
+
updatedAt: row.updatedAt,
|
|
178
|
+
}));
|
|
179
|
+
}
|
|
180
|
+
async getDirectedRelationships(sourceId, targetId, types, consistencyToken, signal) {
|
|
181
|
+
if (consistencyToken) {
|
|
182
|
+
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
183
|
+
}
|
|
184
|
+
if (signal?.aborted) {
|
|
185
|
+
throw new Error("Operation aborted");
|
|
186
|
+
}
|
|
187
|
+
let query = this.db
|
|
188
|
+
.selectFrom("DocumentRelationship")
|
|
189
|
+
.selectAll()
|
|
190
|
+
.where("sourceId", "=", sourceId)
|
|
191
|
+
.where("targetId", "=", targetId);
|
|
192
|
+
if (types && types.length > 0) {
|
|
193
|
+
query = query.where("relationshipType", "in", types);
|
|
194
|
+
}
|
|
195
|
+
const rows = await query.execute();
|
|
196
|
+
return rows.map((row) => ({
|
|
197
|
+
sourceId: row.sourceId,
|
|
198
|
+
targetId: row.targetId,
|
|
199
|
+
relationshipType: row.relationshipType,
|
|
200
|
+
metadata: row.metadata
|
|
201
|
+
? row.metadata
|
|
202
|
+
: undefined,
|
|
203
|
+
createdAt: row.createdAt,
|
|
204
|
+
updatedAt: row.updatedAt,
|
|
205
|
+
}));
|
|
206
|
+
}
|
|
207
|
+
async findPath(sourceId, targetId, types, consistencyToken, signal) {
|
|
208
|
+
if (consistencyToken) {
|
|
209
|
+
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
210
|
+
}
|
|
211
|
+
if (signal?.aborted) {
|
|
212
|
+
throw new Error("Operation aborted");
|
|
213
|
+
}
|
|
214
|
+
if (sourceId === targetId) {
|
|
215
|
+
return [sourceId];
|
|
216
|
+
}
|
|
217
|
+
const visited = new Set();
|
|
218
|
+
const queue = [
|
|
219
|
+
{ id: sourceId, path: [sourceId] },
|
|
220
|
+
];
|
|
221
|
+
while (queue.length > 0) {
|
|
222
|
+
const current = queue.shift();
|
|
223
|
+
if (current.id === targetId) {
|
|
224
|
+
return current.path;
|
|
225
|
+
}
|
|
226
|
+
if (visited.has(current.id)) {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
visited.add(current.id);
|
|
230
|
+
const outgoing = await this.getOutgoing(current.id, types, undefined, signal);
|
|
231
|
+
for (const rel of outgoing) {
|
|
232
|
+
if (!visited.has(rel.targetId)) {
|
|
233
|
+
queue.push({
|
|
234
|
+
id: rel.targetId,
|
|
235
|
+
path: [...current.path, rel.targetId],
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
async findAncestors(documentId, types, consistencyToken, signal) {
|
|
243
|
+
if (consistencyToken) {
|
|
244
|
+
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
245
|
+
}
|
|
246
|
+
if (signal?.aborted) {
|
|
247
|
+
throw new Error("Operation aborted");
|
|
248
|
+
}
|
|
249
|
+
const nodes = new Set([documentId]);
|
|
250
|
+
const edges = [];
|
|
251
|
+
const queue = [documentId];
|
|
252
|
+
const visited = new Set();
|
|
253
|
+
while (queue.length > 0) {
|
|
254
|
+
const currentId = queue.shift();
|
|
255
|
+
if (visited.has(currentId)) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
visited.add(currentId);
|
|
259
|
+
const incoming = await this.getIncoming(currentId, types, undefined, signal);
|
|
260
|
+
for (const rel of incoming) {
|
|
261
|
+
nodes.add(rel.sourceId);
|
|
262
|
+
edges.push({
|
|
263
|
+
from: rel.sourceId,
|
|
264
|
+
to: rel.targetId,
|
|
265
|
+
type: rel.relationshipType,
|
|
266
|
+
});
|
|
267
|
+
if (!visited.has(rel.sourceId)) {
|
|
268
|
+
queue.push(rel.sourceId);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
nodes: Array.from(nodes),
|
|
274
|
+
edges,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
async getRelationshipTypes(consistencyToken, signal) {
|
|
278
|
+
if (consistencyToken) {
|
|
279
|
+
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
280
|
+
}
|
|
281
|
+
if (signal?.aborted) {
|
|
282
|
+
throw new Error("Operation aborted");
|
|
283
|
+
}
|
|
284
|
+
const rows = await this.db
|
|
285
|
+
.selectFrom("DocumentRelationship")
|
|
286
|
+
.select("relationshipType")
|
|
287
|
+
.distinct()
|
|
288
|
+
.execute();
|
|
289
|
+
return rows.map((row) => row.relationshipType);
|
|
290
|
+
}
|
|
291
|
+
async handleAddRelationship(trx, operation) {
|
|
292
|
+
const input = operation.action.input;
|
|
293
|
+
const existingDoc = await trx
|
|
294
|
+
.selectFrom("Document")
|
|
295
|
+
.select("id")
|
|
296
|
+
.where("id", "=", input.sourceId)
|
|
297
|
+
.executeTakeFirst();
|
|
298
|
+
if (!existingDoc) {
|
|
299
|
+
await trx
|
|
300
|
+
.insertInto("Document")
|
|
301
|
+
.values({
|
|
302
|
+
id: input.sourceId,
|
|
303
|
+
})
|
|
304
|
+
.execute();
|
|
305
|
+
}
|
|
306
|
+
const existingTargetDoc = await trx
|
|
307
|
+
.selectFrom("Document")
|
|
308
|
+
.select("id")
|
|
309
|
+
.where("id", "=", input.targetId)
|
|
310
|
+
.executeTakeFirst();
|
|
311
|
+
if (!existingTargetDoc) {
|
|
312
|
+
await trx
|
|
313
|
+
.insertInto("Document")
|
|
314
|
+
.values({
|
|
315
|
+
id: input.targetId,
|
|
316
|
+
})
|
|
317
|
+
.execute();
|
|
318
|
+
}
|
|
319
|
+
const existingRel = await trx
|
|
320
|
+
.selectFrom("DocumentRelationship")
|
|
321
|
+
.select("id")
|
|
322
|
+
.where("sourceId", "=", input.sourceId)
|
|
323
|
+
.where("targetId", "=", input.targetId)
|
|
324
|
+
.where("relationshipType", "=", input.relationshipType)
|
|
325
|
+
.executeTakeFirst();
|
|
326
|
+
if (!existingRel) {
|
|
327
|
+
const relationship = {
|
|
328
|
+
id: uuidv4(),
|
|
329
|
+
sourceId: input.sourceId,
|
|
330
|
+
targetId: input.targetId,
|
|
331
|
+
relationshipType: input.relationshipType,
|
|
332
|
+
metadata: input.metadata || null,
|
|
333
|
+
};
|
|
334
|
+
await trx
|
|
335
|
+
.insertInto("DocumentRelationship")
|
|
336
|
+
.values(relationship)
|
|
337
|
+
.execute();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
async handleRemoveRelationship(trx, operation) {
|
|
341
|
+
const input = operation.action.input;
|
|
342
|
+
await trx
|
|
343
|
+
.deleteFrom("DocumentRelationship")
|
|
344
|
+
.where("sourceId", "=", input.sourceId)
|
|
345
|
+
.where("targetId", "=", input.targetId)
|
|
346
|
+
.where("relationshipType", "=", input.relationshipType)
|
|
347
|
+
.execute();
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=document-indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-indexer.js","sourceRoot":"","sources":["../../../../src/storage/kysely/document-indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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;IA0B5D,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"}
|
|
@@ -15,11 +15,11 @@ export class KyselyKeyframeStore {
|
|
|
15
15
|
scope,
|
|
16
16
|
branch,
|
|
17
17
|
revision,
|
|
18
|
-
document
|
|
18
|
+
document,
|
|
19
19
|
})
|
|
20
20
|
.onConflict((oc) => oc
|
|
21
21
|
.columns(["documentId", "scope", "branch", "revision"])
|
|
22
|
-
.doUpdateSet({ document
|
|
22
|
+
.doUpdateSet({ document }))
|
|
23
23
|
.execute();
|
|
24
24
|
}
|
|
25
25
|
async findNearestKeyframe(documentId, scope, branch, targetRevision, signal) {
|
|
@@ -39,17 +39,10 @@ export class KyselyKeyframeStore {
|
|
|
39
39
|
if (!row) {
|
|
40
40
|
return undefined;
|
|
41
41
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
document,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
catch (err) {
|
|
50
|
-
console.warn(`Failed to parse keyframe for ${documentId}@${row.revision}:`, err);
|
|
51
|
-
return undefined;
|
|
52
|
-
}
|
|
42
|
+
return {
|
|
43
|
+
revision: row.revision,
|
|
44
|
+
document: row.document,
|
|
45
|
+
};
|
|
53
46
|
}
|
|
54
47
|
async deleteKeyframes(documentId, scope, branch, signal) {
|
|
55
48
|
if (signal?.aborted) {
|