@powerhousedao/reactor 5.0.3 → 5.0.5
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/index.d.ts +3 -0
- package/dist/src/cache/index.d.ts.map +1 -0
- package/dist/src/cache/index.js +2 -0
- package/dist/src/cache/index.js.map +1 -0
- package/dist/src/cache/kysely-operation-index.d.ts +13 -0
- package/dist/src/cache/kysely-operation-index.d.ts.map +1 -0
- package/dist/src/cache/kysely-operation-index.js +207 -0
- package/dist/src/cache/kysely-operation-index.js.map +1 -0
- package/dist/src/cache/kysely-write-cache.d.ts +5 -4
- 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/cache/operation-index-types.d.ts +49 -0
- package/dist/src/cache/operation-index-types.d.ts.map +1 -0
- package/dist/src/cache/operation-index-types.js +4 -0
- package/dist/src/cache/operation-index-types.js.map +1 -0
- package/dist/src/cache/{types.d.ts → write-cache-types.d.ts} +1 -1
- package/dist/src/cache/write-cache-types.d.ts.map +1 -0
- package/dist/src/cache/write-cache-types.js +2 -0
- package/dist/src/cache/write-cache-types.js.map +1 -0
- package/dist/src/client/reactor-client.d.ts +6 -4
- package/dist/src/client/reactor-client.d.ts.map +1 -1
- package/dist/src/client/reactor-client.js +118 -37
- 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/builder.d.ts +15 -2
- package/dist/src/core/builder.d.ts.map +1 -1
- package/dist/src/core/builder.js +48 -7
- package/dist/src/core/builder.js.map +1 -1
- package/dist/src/core/reactor-builder.d.ts +40 -0
- package/dist/src/core/reactor-builder.d.ts.map +1 -0
- package/dist/src/core/reactor-builder.js +141 -0
- package/dist/src/core/reactor-builder.js.map +1 -0
- package/dist/src/core/reactor.d.ts +36 -11
- package/dist/src/core/reactor.d.ts.map +1 -1
- package/dist/src/core/reactor.js +609 -279
- package/dist/src/core/reactor.js.map +1 -1
- package/dist/src/core/types.d.ts +84 -7
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/utils.d.ts +44 -4
- package/dist/src/core/utils.d.ts.map +1 -1
- package/dist/src/core/utils.js +116 -6
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/events/types.d.ts +28 -0
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/events/types.js +2 -0
- package/dist/src/events/types.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 +19 -1
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +16 -2
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +458 -252
- 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 +12 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts +10 -1
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -1
- package/dist/src/job-tracker/in-memory-job-tracker.js +57 -23
- package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -1
- package/dist/src/job-tracker/interfaces.d.ts +5 -7
- 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/coordinator.d.ts.map +1 -1
- package/dist/src/read-models/coordinator.js +11 -0
- package/dist/src/read-models/coordinator.js.map +1 -1
- package/dist/src/read-models/document-view.d.ts +11 -6
- package/dist/src/read-models/document-view.d.ts.map +1 -1
- package/dist/src/read-models/document-view.js +156 -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/awaiter.d.ts +11 -8
- package/dist/src/shared/awaiter.d.ts.map +1 -1
- package/dist/src/shared/awaiter.js +66 -75
- package/dist/src/shared/awaiter.js.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 +30 -2
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js +4 -2
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/storage/index.d.ts +4 -0
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/src/storage/index.js +3 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/storage/interfaces.d.ts +227 -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/sync-cursor-storage.d.ts +13 -0
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts.map +1 -0
- package/dist/src/storage/kysely/sync-cursor-storage.js +93 -0
- package/dist/src/storage/kysely/sync-cursor-storage.js.map +1 -0
- package/dist/src/storage/kysely/sync-remote-storage.d.ts +13 -0
- package/dist/src/storage/kysely/sync-remote-storage.d.ts.map +1 -0
- package/dist/src/storage/kysely/sync-remote-storage.js +134 -0
- package/dist/src/storage/kysely/sync-remote-storage.js.map +1 -0
- package/dist/src/storage/kysely/types.d.ts +98 -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/009_create_operation_index_tables.d.ts +3 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.d.ts.map +1 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.js +50 -0
- package/dist/src/storage/migrations/009_create_operation_index_tables.js.map +1 -0
- package/dist/src/storage/migrations/010_create_sync_tables.d.ts +3 -0
- package/dist/src/storage/migrations/010_create_sync_tables.d.ts.map +1 -0
- package/dist/src/storage/migrations/010_create_sync_tables.js +43 -0
- package/dist/src/storage/migrations/010_create_sync_tables.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 +55 -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.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/dist/src/sync/channels/index.d.ts +3 -0
- package/dist/src/sync/channels/index.d.ts.map +1 -0
- package/dist/src/sync/channels/index.js +3 -0
- package/dist/src/sync/channels/index.js.map +1 -0
- package/dist/src/sync/channels/internal-channel.d.ts +57 -0
- package/dist/src/sync/channels/internal-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/internal-channel.js +106 -0
- package/dist/src/sync/channels/internal-channel.js.map +1 -0
- package/dist/src/sync/channels/utils.d.ts +15 -0
- package/dist/src/sync/channels/utils.d.ts.map +1 -0
- package/dist/src/sync/channels/utils.js +26 -0
- package/dist/src/sync/channels/utils.js.map +1 -0
- package/dist/src/sync/errors.d.ts +10 -0
- package/dist/src/sync/errors.d.ts.map +1 -0
- package/dist/src/sync/errors.js +17 -0
- package/dist/src/sync/errors.js.map +1 -0
- package/dist/src/sync/index.d.ts +12 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +9 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/sync/interfaces.d.ts +150 -0
- package/dist/src/sync/interfaces.d.ts.map +1 -0
- package/dist/src/sync/interfaces.js +2 -0
- package/dist/src/sync/interfaces.js.map +1 -0
- package/dist/src/sync/mailbox.d.ts +21 -0
- package/dist/src/sync/mailbox.d.ts.map +1 -0
- package/dist/src/sync/mailbox.js +59 -0
- package/dist/src/sync/mailbox.js.map +1 -0
- package/dist/src/sync/sync-builder.d.ts +17 -0
- package/dist/src/sync/sync-builder.d.ts.map +1 -0
- package/dist/src/sync/sync-builder.js +29 -0
- package/dist/src/sync/sync-builder.js.map +1 -0
- package/dist/src/sync/sync-manager.d.ts +33 -0
- package/dist/src/sync/sync-manager.d.ts.map +1 -0
- package/dist/src/sync/sync-manager.js +197 -0
- package/dist/src/sync/sync-manager.js.map +1 -0
- package/dist/src/sync/sync-operation.d.ts +28 -0
- package/dist/src/sync/sync-operation.d.ts.map +1 -0
- package/dist/src/sync/sync-operation.js +63 -0
- package/dist/src/sync/sync-operation.js.map +1 -0
- package/dist/src/sync/types.d.ts +61 -0
- package/dist/src/sync/types.d.ts.map +1 -0
- package/dist/src/sync/types.js +16 -0
- package/dist/src/sync/types.js.map +1 -0
- package/dist/src/sync/utils.d.ts +17 -0
- package/dist/src/sync/utils.d.ts.map +1 -0
- package/dist/src/sync/utils.js +34 -0
- package/dist/src/sync/utils.js.map +1 -0
- package/package.json +9 -5
- package/dist/src/cache/types.d.ts.map +0 -1
- package/dist/src/cache/types.js.map +0 -1
- /package/dist/src/{cache → storage/migrations}/types.js +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Operation, PHDocument } from "document-model";
|
|
2
|
+
import type { ConsistencyToken } from "../shared/types.js";
|
|
3
|
+
import type { RemoteCursor, RemoteRecord } from "../sync/types.js";
|
|
2
4
|
export type OperationContext = {
|
|
3
5
|
documentId: string;
|
|
4
6
|
documentType: string;
|
|
@@ -102,20 +104,243 @@ export interface IDocumentView {
|
|
|
102
104
|
* documents from operations - it always requires resultingState.
|
|
103
105
|
*/
|
|
104
106
|
indexOperations(items: OperationWithContext[]): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Blocks until the view has processed the coordinates referenced by the
|
|
109
|
+
* provided consistency token.
|
|
110
|
+
*
|
|
111
|
+
* @param token - Consistency token derived from the originating job
|
|
112
|
+
* @param timeoutMs - Optional timeout window in milliseconds
|
|
113
|
+
* @param signal - Optional abort signal to cancel the wait
|
|
114
|
+
*/
|
|
115
|
+
waitForConsistency(token: ConsistencyToken, timeoutMs?: number, signal?: AbortSignal): Promise<void>;
|
|
105
116
|
/**
|
|
106
117
|
* Returns true if and only if the documents exist.
|
|
107
118
|
*
|
|
108
119
|
* @param documentIds - The list of document ids to check.
|
|
120
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
109
121
|
* @param signal - Optional abort signal to cancel the request
|
|
110
122
|
*/
|
|
111
|
-
exists(documentIds: string[], signal?: AbortSignal): Promise<boolean[]>;
|
|
123
|
+
exists(documentIds: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<boolean[]>;
|
|
112
124
|
/**
|
|
113
125
|
* Returns the document with the given id.
|
|
114
126
|
*
|
|
115
127
|
* @param documentId - The id of the document to get.
|
|
116
128
|
* @param view - Optional filter containing branch and scopes information
|
|
129
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
130
|
+
* @param signal - Optional abort signal to cancel the request
|
|
131
|
+
*/
|
|
132
|
+
get<TDocument extends PHDocument>(documentId: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<TDocument>;
|
|
133
|
+
/**
|
|
134
|
+
* Returns the document with the given identifier (either id or slug).
|
|
135
|
+
* Throws an error if the identifier matches both an id and a slug that refer to different documents.
|
|
136
|
+
*
|
|
137
|
+
* @param identifier - The id or slug of the document to get.
|
|
138
|
+
* @param view - Optional filter containing branch and scopes information
|
|
139
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
140
|
+
* @param signal - Optional abort signal to cancel the request
|
|
141
|
+
* @throws {Error} If identifier matches both an ID and slug referring to different documents
|
|
142
|
+
*/
|
|
143
|
+
getByIdOrSlug<TDocument extends PHDocument>(identifier: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<TDocument>;
|
|
144
|
+
/**
|
|
145
|
+
* Finds documents by their document type.
|
|
146
|
+
*
|
|
147
|
+
* @param type - The document type to search for
|
|
148
|
+
* @param view - Optional filter containing branch and scopes information
|
|
149
|
+
* @param paging - Optional paging options for cursor-based pagination
|
|
150
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
151
|
+
* @param signal - Optional abort signal to cancel the request
|
|
152
|
+
*/
|
|
153
|
+
findByType(type: string, view?: ViewFilter, paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<PHDocument>>;
|
|
154
|
+
/**
|
|
155
|
+
* Resolves a slug to a document ID.
|
|
156
|
+
*
|
|
157
|
+
* @param slug - The slug to resolve
|
|
158
|
+
* @param view - Optional filter containing branch and scopes information
|
|
159
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
160
|
+
* @param signal - Optional abort signal to cancel the request
|
|
161
|
+
* @returns The document ID or undefined if the slug doesn't exist
|
|
162
|
+
*/
|
|
163
|
+
resolveSlug(slug: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string | undefined>;
|
|
164
|
+
}
|
|
165
|
+
export type DocumentRelationship = {
|
|
166
|
+
sourceId: string;
|
|
167
|
+
targetId: string;
|
|
168
|
+
relationshipType: string;
|
|
169
|
+
metadata?: Record<string, unknown>;
|
|
170
|
+
createdAt: Date;
|
|
171
|
+
updatedAt: Date;
|
|
172
|
+
};
|
|
173
|
+
export type DocumentGraphEdge = {
|
|
174
|
+
from: string;
|
|
175
|
+
to: string;
|
|
176
|
+
type: string;
|
|
177
|
+
};
|
|
178
|
+
export interface IDocumentGraph {
|
|
179
|
+
nodes: string[];
|
|
180
|
+
edges: DocumentGraphEdge[];
|
|
181
|
+
}
|
|
182
|
+
export interface IDocumentIndexer {
|
|
183
|
+
/**
|
|
184
|
+
* Initializes the indexer and catches up on any missed operations.
|
|
185
|
+
*/
|
|
186
|
+
init(): Promise<void>;
|
|
187
|
+
/**
|
|
188
|
+
* Indexes a list of operations to update the relationship graph.
|
|
189
|
+
*
|
|
190
|
+
* @param operations - Operations to index. Will process ADD_RELATIONSHIP and
|
|
191
|
+
* REMOVE_RELATIONSHIP operations.
|
|
192
|
+
*/
|
|
193
|
+
indexOperations(operations: OperationWithContext[]): Promise<void>;
|
|
194
|
+
/**
|
|
195
|
+
* Blocks until the indexer has processed the coordinates referenced by the
|
|
196
|
+
* provided consistency token.
|
|
197
|
+
*
|
|
198
|
+
* @param token - Consistency token derived from the originating job
|
|
199
|
+
* @param timeoutMs - Optional timeout window in milliseconds
|
|
200
|
+
* @param signal - Optional abort signal to cancel the wait
|
|
201
|
+
*/
|
|
202
|
+
waitForConsistency(token: ConsistencyToken, timeoutMs?: number, signal?: AbortSignal): Promise<void>;
|
|
203
|
+
/**
|
|
204
|
+
* Returns outgoing relationships from a document.
|
|
205
|
+
*
|
|
206
|
+
* @param documentId - The source document id
|
|
207
|
+
* @param types - Optional filter by relationship types
|
|
208
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
209
|
+
* @param signal - Optional abort signal to cancel the request
|
|
210
|
+
*/
|
|
211
|
+
getOutgoing(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
212
|
+
/**
|
|
213
|
+
* Returns incoming relationships to a document.
|
|
214
|
+
*
|
|
215
|
+
* @param documentId - The target document id
|
|
216
|
+
* @param types - Optional filter by relationship types
|
|
217
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
218
|
+
* @param signal - Optional abort signal to cancel the request
|
|
219
|
+
*/
|
|
220
|
+
getIncoming(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
221
|
+
/**
|
|
222
|
+
* Checks if a relationship exists between two documents.
|
|
223
|
+
*
|
|
224
|
+
* @param sourceId - The source document id
|
|
225
|
+
* @param targetId - The target document id
|
|
226
|
+
* @param types - Optional filter by relationship types
|
|
227
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
228
|
+
* @param signal - Optional abort signal to cancel the request
|
|
229
|
+
*/
|
|
230
|
+
hasRelationship(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<boolean>;
|
|
231
|
+
/**
|
|
232
|
+
* Returns all undirected relationships between two documents.
|
|
233
|
+
*
|
|
234
|
+
* @param a - The ID of the first document
|
|
235
|
+
* @param b - The ID of the second document
|
|
236
|
+
* @param types - Optional filter by relationship types
|
|
237
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
238
|
+
* @param signal - Optional abort signal to cancel the request
|
|
239
|
+
*/
|
|
240
|
+
getUndirectedRelationships(a: string, b: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
241
|
+
/**
|
|
242
|
+
* Returns all directed relationships between two documents.
|
|
243
|
+
*
|
|
244
|
+
* @param sourceId - The source document id
|
|
245
|
+
* @param targetId - The target document id
|
|
246
|
+
* @param types - Optional filter by relationship types
|
|
247
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
248
|
+
* @param signal - Optional abort signal to cancel the request
|
|
249
|
+
*/
|
|
250
|
+
getDirectedRelationships(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
|
|
251
|
+
/**
|
|
252
|
+
* Finds a path from source to target following directed edges.
|
|
253
|
+
*
|
|
254
|
+
* @param sourceId - The source document id
|
|
255
|
+
* @param targetId - The target document id
|
|
256
|
+
* @param types - Optional filter by relationship types
|
|
257
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
258
|
+
* @param signal - Optional abort signal to cancel the request
|
|
259
|
+
* @returns Array of document ids representing the path, or null if no path exists
|
|
260
|
+
*/
|
|
261
|
+
findPath(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[] | null>;
|
|
262
|
+
/**
|
|
263
|
+
* Returns all ancestors of a document in the relationship graph.
|
|
264
|
+
*
|
|
265
|
+
* @param documentId - The document id
|
|
266
|
+
* @param types - Optional filter by relationship types
|
|
267
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
268
|
+
* @param signal - Optional abort signal to cancel the request
|
|
269
|
+
*/
|
|
270
|
+
findAncestors(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<IDocumentGraph>;
|
|
271
|
+
/**
|
|
272
|
+
* Returns all relationship types currently in the system.
|
|
273
|
+
*
|
|
274
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
275
|
+
* @param signal - Optional abort signal to cancel the request
|
|
276
|
+
*/
|
|
277
|
+
getRelationshipTypes(consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
|
|
278
|
+
}
|
|
279
|
+
export interface ISyncRemoteStorage {
|
|
280
|
+
/**
|
|
281
|
+
* Lists all remotes.
|
|
282
|
+
*
|
|
283
|
+
* @param signal - Optional abort signal to cancel the request
|
|
284
|
+
* @returns The remotes
|
|
285
|
+
*/
|
|
286
|
+
list(signal?: AbortSignal): Promise<RemoteRecord[]>;
|
|
287
|
+
/**
|
|
288
|
+
* Gets a remote by name.
|
|
289
|
+
*
|
|
290
|
+
* @param name - The name of the remote
|
|
291
|
+
* @param signal - Optional abort signal to cancel the request
|
|
292
|
+
* @returns The remote
|
|
293
|
+
*/
|
|
294
|
+
get(name: string, signal?: AbortSignal): Promise<RemoteRecord>;
|
|
295
|
+
/**
|
|
296
|
+
* Upserts a remote.
|
|
297
|
+
*
|
|
298
|
+
* @param remote - The remote to upsert
|
|
299
|
+
* @param signal - Optional abort signal to cancel the request
|
|
300
|
+
* @returns The remote
|
|
301
|
+
*/
|
|
302
|
+
upsert(remote: RemoteRecord, signal?: AbortSignal): Promise<void>;
|
|
303
|
+
/**
|
|
304
|
+
* Removes a remote by name.
|
|
305
|
+
*
|
|
306
|
+
* @param name - The name of the remote
|
|
307
|
+
* @param signal - Optional abort signal to cancel the request
|
|
308
|
+
* @returns The remote
|
|
309
|
+
*/
|
|
310
|
+
remove(name: string, signal?: AbortSignal): Promise<void>;
|
|
311
|
+
}
|
|
312
|
+
export interface ISyncCursorStorage {
|
|
313
|
+
/**
|
|
314
|
+
* Lists all cursors for a remote.
|
|
315
|
+
*
|
|
316
|
+
* @param remoteName - The name of the remote
|
|
317
|
+
* @param signal - Optional abort signal to cancel the request
|
|
318
|
+
* @returns The cursors
|
|
319
|
+
*/
|
|
320
|
+
list(remoteName: string, signal?: AbortSignal): Promise<RemoteCursor[]>;
|
|
321
|
+
/**
|
|
322
|
+
* Gets a cursor for a remote.
|
|
323
|
+
*
|
|
324
|
+
* @param remoteName - The name of the remote
|
|
325
|
+
* @param signal - Optional abort signal to cancel the request
|
|
326
|
+
* @returns The cursor
|
|
327
|
+
*/
|
|
328
|
+
get(remoteName: string, signal?: AbortSignal): Promise<RemoteCursor>;
|
|
329
|
+
/**
|
|
330
|
+
* Upserts a cursor.
|
|
331
|
+
*
|
|
332
|
+
* @param cursor - The cursor to upsert
|
|
333
|
+
* @param signal - Optional abort signal to cancel the request
|
|
334
|
+
* @returns The cursor
|
|
335
|
+
*/
|
|
336
|
+
upsert(cursor: RemoteCursor, signal?: AbortSignal): Promise<void>;
|
|
337
|
+
/**
|
|
338
|
+
* Removes a cursor for a remote.
|
|
339
|
+
*
|
|
340
|
+
* @param remoteName - The name of the remote
|
|
117
341
|
* @param signal - Optional abort signal to cancel the request
|
|
342
|
+
* @returns The cursor
|
|
118
343
|
*/
|
|
119
|
-
|
|
344
|
+
remove(remoteName: string, signal?: AbortSignal): Promise<void>;
|
|
120
345
|
}
|
|
121
346
|
//# 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":"AAiBA,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
|