@powerhousedao/reactor 6.0.0-dev.5 → 6.0.0-dev.52
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/collection-membership-cache.d.ts +13 -0
- package/dist/src/cache/collection-membership-cache.d.ts.map +1 -0
- package/dist/src/cache/collection-membership-cache.js +33 -0
- package/dist/src/cache/collection-membership-cache.js.map +1 -0
- package/dist/src/cache/document-meta-cache.d.ts.map +1 -1
- package/dist/src/cache/document-meta-cache.js +4 -4
- package/dist/src/cache/document-meta-cache.js.map +1 -1
- package/dist/src/cache/kysely-operation-index.d.ts +6 -1
- package/dist/src/cache/kysely-operation-index.d.ts.map +1 -1
- package/dist/src/cache/kysely-operation-index.js +102 -7
- package/dist/src/cache/kysely-operation-index.js.map +1 -1
- package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
- package/dist/src/cache/kysely-write-cache.js +16 -12
- package/dist/src/cache/kysely-write-cache.js.map +1 -1
- package/dist/src/cache/operation-index-types.d.ts +16 -2
- package/dist/src/cache/operation-index-types.d.ts.map +1 -1
- package/dist/src/cache/operation-index-types.js.map +1 -1
- package/dist/src/client/reactor-client.d.ts +13 -10
- package/dist/src/client/reactor-client.d.ts.map +1 -1
- package/dist/src/client/reactor-client.js +134 -43
- package/dist/src/client/reactor-client.js.map +1 -1
- package/dist/src/client/types.d.ts +25 -6
- package/dist/src/client/types.d.ts.map +1 -1
- package/dist/src/client/types.js.map +1 -1
- package/dist/src/core/reactor-builder.d.ts +23 -7
- package/dist/src/core/reactor-builder.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.js +96 -24
- package/dist/src/core/reactor-builder.js.map +1 -1
- package/dist/src/core/reactor-client-builder.d.ts +5 -4
- package/dist/src/core/reactor-client-builder.d.ts.map +1 -1
- package/dist/src/core/reactor-client-builder.js +14 -5
- package/dist/src/core/reactor-client-builder.js.map +1 -1
- package/dist/src/core/reactor.d.ts +20 -80
- package/dist/src/core/reactor.d.ts.map +1 -1
- package/dist/src/core/reactor.js +235 -576
- package/dist/src/core/reactor.js.map +1 -1
- package/dist/src/core/types.d.ts +63 -28
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/utils.d.ts +39 -3
- package/dist/src/core/utils.d.ts.map +1 -1
- package/dist/src/core/utils.js +63 -9
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/events/types.d.ts +35 -10
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/events/types.js +7 -5
- package/dist/src/events/types.js.map +1 -1
- package/dist/src/executor/document-action-handler.d.ts +37 -0
- package/dist/src/executor/document-action-handler.d.ts.map +1 -0
- package/dist/src/executor/document-action-handler.js +354 -0
- package/dist/src/executor/document-action-handler.js.map +1 -0
- package/dist/src/executor/signature-verifier.d.ts +9 -0
- package/dist/src/executor/signature-verifier.d.ts.map +1 -0
- package/dist/src/executor/signature-verifier.js +70 -0
- package/dist/src/executor/signature-verifier.js.map +1 -0
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.js +20 -10
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +6 -46
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +94 -580
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/executor/types.d.ts +1 -3
- 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 +12 -2
- package/dist/src/executor/util.d.ts.map +1 -1
- package/dist/src/executor/util.js +47 -1
- package/dist/src/executor/util.js.map +1 -1
- package/dist/src/index.d.ts +11 -9
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts +4 -3
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -1
- package/dist/src/job-tracker/in-memory-job-tracker.js +20 -18
- package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -1
- package/dist/src/job-tracker/interfaces.d.ts +3 -1
- package/dist/src/job-tracker/interfaces.d.ts.map +1 -1
- package/dist/src/logging/console.d.ts +1 -22
- package/dist/src/logging/console.d.ts.map +1 -1
- package/dist/src/logging/console.js +1 -107
- package/dist/src/logging/console.js.map +1 -1
- package/dist/src/logging/types.d.ts +1 -11
- package/dist/src/logging/types.d.ts.map +1 -1
- package/dist/src/processors/index.d.ts +1 -1
- package/dist/src/processors/index.d.ts.map +1 -1
- package/dist/src/processors/index.js.map +1 -1
- package/dist/src/processors/processor-manager.d.ts +2 -2
- package/dist/src/processors/processor-manager.d.ts.map +1 -1
- package/dist/src/processors/processor-manager.js.map +1 -1
- package/dist/src/processors/relational/types.d.ts +2 -0
- package/dist/src/processors/relational/types.d.ts.map +1 -0
- package/dist/src/processors/relational/types.js +2 -0
- package/dist/src/processors/relational/types.js.map +1 -0
- package/dist/src/processors/relational/utils.d.ts +2 -0
- package/dist/src/processors/relational/utils.d.ts.map +1 -0
- package/dist/src/processors/relational/utils.js +2 -0
- package/dist/src/processors/relational/utils.js.map +1 -0
- package/dist/src/processors/utils.d.ts +2 -2
- package/dist/src/processors/utils.d.ts.map +1 -1
- package/dist/src/processors/utils.js +2 -1
- package/dist/src/processors/utils.js.map +1 -1
- package/dist/src/queue/queue.d.ts +33 -1
- package/dist/src/queue/queue.d.ts.map +1 -1
- package/dist/src/queue/queue.js +135 -1
- package/dist/src/queue/queue.js.map +1 -1
- package/dist/src/queue/types.d.ts +3 -3
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/read-models/base-read-model.d.ts +1 -1
- package/dist/src/read-models/base-read-model.d.ts.map +1 -1
- package/dist/src/read-models/base-read-model.js +4 -4
- package/dist/src/read-models/base-read-model.js.map +1 -1
- package/dist/src/read-models/coordinator.d.ts +2 -2
- package/dist/src/read-models/coordinator.d.ts.map +1 -1
- package/dist/src/read-models/coordinator.js +8 -8
- package/dist/src/read-models/coordinator.js.map +1 -1
- package/dist/src/read-models/document-view.d.ts +6 -3
- package/dist/src/read-models/document-view.d.ts.map +1 -1
- package/dist/src/read-models/document-view.js +130 -48
- package/dist/src/read-models/document-view.js.map +1 -1
- package/dist/src/read-models/interfaces.d.ts +1 -1
- package/dist/src/read-models/interfaces.d.ts.map +1 -1
- package/dist/src/registry/implementation.d.ts +2 -0
- package/dist/src/registry/implementation.d.ts.map +1 -1
- package/dist/src/registry/implementation.js +6 -0
- package/dist/src/registry/implementation.js.map +1 -1
- package/dist/src/registry/index.d.ts +1 -1
- package/dist/src/registry/index.d.ts.map +1 -1
- package/dist/src/registry/interfaces.d.ts +8 -0
- package/dist/src/registry/interfaces.d.ts.map +1 -1
- package/dist/src/shared/awaiter.d.ts +2 -2
- package/dist/src/shared/awaiter.d.ts.map +1 -1
- package/dist/src/shared/awaiter.js +11 -11
- package/dist/src/shared/awaiter.js.map +1 -1
- package/dist/src/shared/collect-all-pages.d.ts +7 -0
- package/dist/src/shared/collect-all-pages.d.ts.map +1 -0
- package/dist/src/shared/collect-all-pages.js +17 -0
- package/dist/src/shared/collect-all-pages.js.map +1 -0
- package/dist/src/shared/drive-url.d.ts +15 -0
- package/dist/src/shared/drive-url.d.ts.map +1 -0
- package/dist/src/shared/drive-url.js +17 -0
- package/dist/src/shared/drive-url.js.map +1 -0
- package/dist/src/shared/factories.d.ts +6 -2
- package/dist/src/shared/factories.d.ts.map +1 -1
- package/dist/src/shared/factories.js +10 -2
- package/dist/src/shared/factories.js.map +1 -1
- package/dist/src/shared/types.d.ts +32 -6
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js +4 -4
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/signer/passthrough-signer.d.ts +1 -1
- package/dist/src/signer/passthrough-signer.d.ts.map +1 -1
- package/dist/src/signer/passthrough-signer.js +1 -3
- package/dist/src/signer/passthrough-signer.js.map +1 -1
- package/dist/src/storage/interfaces.d.ts +56 -108
- 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 +8 -7
- package/dist/src/storage/kysely/document-indexer.d.ts.map +1 -1
- package/dist/src/storage/kysely/document-indexer.js +123 -52
- package/dist/src/storage/kysely/document-indexer.js.map +1 -1
- package/dist/src/storage/kysely/store.d.ts +5 -4
- package/dist/src/storage/kysely/store.d.ts.map +1 -1
- package/dist/src/storage/kysely/store.js +52 -21
- package/dist/src/storage/kysely/store.js.map +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts.map +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.js +6 -2
- package/dist/src/storage/kysely/sync-cursor-storage.js.map +1 -1
- package/dist/src/storage/kysely/sync-remote-storage.js +1 -1
- package/dist/src/storage/kysely/sync-remote-storage.js.map +1 -1
- package/dist/src/storage/kysely/types.d.ts +2 -0
- package/dist/src/storage/kysely/types.d.ts.map +1 -1
- package/dist/src/storage/migrations/011_add_cursor_type_column.d.ts +3 -0
- package/dist/src/storage/migrations/011_add_cursor_type_column.d.ts.map +1 -0
- package/dist/src/storage/migrations/011_add_cursor_type_column.js +29 -0
- package/dist/src/storage/migrations/011_add_cursor_type_column.js.map +1 -0
- package/dist/src/storage/migrations/012_add_source_remote_column.d.ts +3 -0
- package/dist/src/storage/migrations/012_add_source_remote_column.d.ts.map +1 -0
- package/dist/src/storage/migrations/012_add_source_remote_column.js +7 -0
- package/dist/src/storage/migrations/012_add_source_remote_column.js.map +1 -0
- package/dist/src/storage/migrations/migrator.d.ts.map +1 -1
- package/dist/src/storage/migrations/migrator.js +4 -0
- package/dist/src/storage/migrations/migrator.js.map +1 -1
- package/dist/src/subs/subscription-notification-read-model.d.ts +3 -2
- package/dist/src/subs/subscription-notification-read-model.d.ts.map +1 -1
- package/dist/src/subs/subscription-notification-read-model.js +1 -1
- package/dist/src/subs/subscription-notification-read-model.js.map +1 -1
- package/dist/src/sync/batch-aggregator.d.ts +25 -0
- package/dist/src/sync/batch-aggregator.d.ts.map +1 -0
- package/dist/src/sync/batch-aggregator.js +94 -0
- package/dist/src/sync/batch-aggregator.js.map +1 -0
- package/dist/src/sync/buffered-mailbox.d.ts +36 -0
- package/dist/src/sync/buffered-mailbox.d.ts.map +1 -0
- package/dist/src/sync/buffered-mailbox.js +164 -0
- package/dist/src/sync/buffered-mailbox.js.map +1 -0
- package/dist/src/sync/channels/{gql-channel.d.ts → gql-req-channel.d.ts} +44 -42
- package/dist/src/sync/channels/gql-req-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-req-channel.js +500 -0
- package/dist/src/sync/channels/gql-req-channel.js.map +1 -0
- package/dist/src/sync/channels/gql-request-channel-factory.d.ts +32 -0
- package/dist/src/sync/channels/gql-request-channel-factory.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-request-channel-factory.js +105 -0
- package/dist/src/sync/channels/gql-request-channel-factory.js.map +1 -0
- package/dist/src/sync/channels/gql-res-channel.d.ts +25 -0
- package/dist/src/sync/channels/gql-res-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-res-channel.js +79 -0
- package/dist/src/sync/channels/gql-res-channel.js.map +1 -0
- package/dist/src/sync/channels/gql-response-channel-factory.d.ts +13 -0
- package/dist/src/sync/channels/gql-response-channel-factory.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-response-channel-factory.js +14 -0
- package/dist/src/sync/channels/gql-response-channel-factory.js.map +1 -0
- package/dist/src/sync/channels/index.d.ts +6 -4
- package/dist/src/sync/channels/index.d.ts.map +1 -1
- package/dist/src/sync/channels/index.js +6 -4
- package/dist/src/sync/channels/index.js.map +1 -1
- package/dist/src/sync/channels/interval-poll-timer.d.ts +38 -0
- package/dist/src/sync/channels/interval-poll-timer.d.ts.map +1 -0
- package/dist/src/sync/channels/interval-poll-timer.js +117 -0
- package/dist/src/sync/channels/interval-poll-timer.js.map +1 -0
- package/dist/src/sync/channels/poll-timer.d.ts +14 -0
- package/dist/src/sync/channels/poll-timer.d.ts.map +1 -0
- package/dist/src/sync/channels/poll-timer.js +2 -0
- package/dist/src/sync/channels/poll-timer.js.map +1 -0
- package/dist/src/sync/channels/utils.d.ts +15 -1
- package/dist/src/sync/channels/utils.d.ts.map +1 -1
- package/dist/src/sync/channels/utils.js +66 -2
- package/dist/src/sync/channels/utils.js.map +1 -1
- package/dist/src/sync/index.d.ts +10 -6
- package/dist/src/sync/index.d.ts.map +1 -1
- package/dist/src/sync/index.js +7 -5
- package/dist/src/sync/index.js.map +1 -1
- package/dist/src/sync/interfaces.d.ts +34 -21
- package/dist/src/sync/interfaces.d.ts.map +1 -1
- package/dist/src/sync/mailbox.d.ts +51 -12
- package/dist/src/sync/mailbox.d.ts.map +1 -1
- package/dist/src/sync/mailbox.js +89 -6
- package/dist/src/sync/mailbox.js.map +1 -1
- package/dist/src/sync/sync-awaiter.d.ts +34 -0
- package/dist/src/sync/sync-awaiter.d.ts.map +1 -0
- package/dist/src/sync/sync-awaiter.js +124 -0
- package/dist/src/sync/sync-awaiter.js.map +1 -0
- package/dist/src/sync/sync-manager.d.ts +16 -6
- package/dist/src/sync/sync-manager.d.ts.map +1 -1
- package/dist/src/sync/sync-manager.js +204 -94
- package/dist/src/sync/sync-manager.js.map +1 -1
- package/dist/src/sync/sync-operation.d.ts +4 -2
- package/dist/src/sync/sync-operation.d.ts.map +1 -1
- package/dist/src/sync/sync-operation.js +8 -1
- package/dist/src/sync/sync-operation.js.map +1 -1
- package/dist/src/sync/sync-status-tracker.d.ts +31 -0
- package/dist/src/sync/sync-status-tracker.d.ts.map +1 -0
- package/dist/src/sync/sync-status-tracker.js +137 -0
- package/dist/src/sync/sync-status-tracker.js.map +1 -0
- package/dist/src/sync/types.d.ts +79 -2
- package/dist/src/sync/types.d.ts.map +1 -1
- package/dist/src/sync/types.js +15 -0
- package/dist/src/sync/types.js.map +1 -1
- package/dist/src/sync/utils.d.ts +28 -1
- package/dist/src/sync/utils.d.ts.map +1 -1
- package/dist/src/sync/utils.js +136 -0
- package/dist/src/sync/utils.js.map +1 -1
- package/dist/src/utils/reshuffle.d.ts +15 -5
- package/dist/src/utils/reshuffle.d.ts.map +1 -1
- package/dist/src/utils/reshuffle.js +29 -6
- package/dist/src/utils/reshuffle.js.map +1 -1
- package/package.json +12 -13
- package/dist/src/processors/types.d.ts +0 -63
- package/dist/src/processors/types.d.ts.map +0 -1
- package/dist/src/processors/types.js +0 -2
- package/dist/src/processors/types.js.map +0 -1
- package/dist/src/storage/consistency-aware-legacy-storage.d.ts +0 -33
- package/dist/src/storage/consistency-aware-legacy-storage.d.ts.map +0 -1
- package/dist/src/storage/consistency-aware-legacy-storage.js +0 -65
- package/dist/src/storage/consistency-aware-legacy-storage.js.map +0 -1
- package/dist/src/sync/channels/composite-channel-factory.d.ts +0 -30
- package/dist/src/sync/channels/composite-channel-factory.d.ts.map +0 -1
- package/dist/src/sync/channels/composite-channel-factory.js +0 -87
- package/dist/src/sync/channels/composite-channel-factory.js.map +0 -1
- package/dist/src/sync/channels/gql-channel-factory.d.ts +0 -25
- package/dist/src/sync/channels/gql-channel-factory.d.ts.map +0 -1
- package/dist/src/sync/channels/gql-channel-factory.js +0 -76
- package/dist/src/sync/channels/gql-channel-factory.js.map +0 -1
- package/dist/src/sync/channels/gql-channel.d.ts.map +0 -1
- package/dist/src/sync/channels/gql-channel.js +0 -423
- package/dist/src/sync/channels/gql-channel.js.map +0 -1
- package/dist/src/sync/channels/polling-channel.d.ts +0 -39
- package/dist/src/sync/channels/polling-channel.d.ts.map +0 -1
- package/dist/src/sync/channels/polling-channel.js +0 -72
- package/dist/src/sync/channels/polling-channel.js.map +0 -1
|
@@ -1,18 +1,7 @@
|
|
|
1
|
-
import type { Operation, PHDocument } from "document-model";
|
|
2
|
-
import type { ConsistencyToken } from "../shared/types.js";
|
|
1
|
+
import type { Operation, OperationWithContext, PHDocument } from "document-model";
|
|
2
|
+
import type { ConsistencyToken, PagedResults, PagingOptions } from "../shared/types.js";
|
|
3
3
|
import type { RemoteCursor, RemoteRecord } from "../sync/types.js";
|
|
4
|
-
export type
|
|
5
|
-
documentId: string;
|
|
6
|
-
documentType: string;
|
|
7
|
-
scope: string;
|
|
8
|
-
branch: string;
|
|
9
|
-
resultingState?: string;
|
|
10
|
-
ordinal: number;
|
|
11
|
-
};
|
|
12
|
-
export type OperationWithContext = {
|
|
13
|
-
operation: Operation;
|
|
14
|
-
context: OperationContext;
|
|
15
|
-
};
|
|
4
|
+
export type { PagedResults, PagingOptions } from "../shared/types.js";
|
|
16
5
|
export declare class DuplicateOperationError extends Error {
|
|
17
6
|
constructor(description: string);
|
|
18
7
|
}
|
|
@@ -33,7 +22,7 @@ export type DocumentRevisions = {
|
|
|
33
22
|
};
|
|
34
23
|
export interface IOperationStore {
|
|
35
24
|
apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal): Promise<void>;
|
|
36
|
-
getSince(documentId: string, scope: string, branch: string, revision: number, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<Operation>>;
|
|
25
|
+
getSince(documentId: string, scope: string, branch: string, revision: number, filter?: OperationFilter, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<Operation>>;
|
|
37
26
|
getSinceId(id: number, paging?: PagingOptions, signal?: AbortSignal): Promise<PagedResults<OperationWithContext>>;
|
|
38
27
|
/**
|
|
39
28
|
* Gets operations that may conflict with incoming operations during a load.
|
|
@@ -70,6 +59,7 @@ export interface IKeyframeStore {
|
|
|
70
59
|
export interface ViewFilter {
|
|
71
60
|
branch?: string;
|
|
72
61
|
scopes?: string[];
|
|
62
|
+
excludeSourceRemote?: string;
|
|
73
63
|
}
|
|
74
64
|
export interface SearchFilter {
|
|
75
65
|
documentType?: string;
|
|
@@ -77,14 +67,19 @@ export interface SearchFilter {
|
|
|
77
67
|
identifiers?: Record<string, any>;
|
|
78
68
|
includeDeleted?: boolean;
|
|
79
69
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
export interface
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
70
|
+
/**
|
|
71
|
+
* Filter options for querying operations. When multiple filters are provided,
|
|
72
|
+
* they are combined with AND logic.
|
|
73
|
+
*/
|
|
74
|
+
export interface OperationFilter {
|
|
75
|
+
/** Filter by action types (OR logic within array) */
|
|
76
|
+
actionTypes?: string[];
|
|
77
|
+
/** Filter operations with timestamp >= this value (ISO string) */
|
|
78
|
+
timestampFrom?: string;
|
|
79
|
+
/** Filter operations with timestamp <= this value (ISO string) */
|
|
80
|
+
timestampTo?: string;
|
|
81
|
+
/** Filter operations with index >= this value */
|
|
82
|
+
sinceRevision?: number;
|
|
88
83
|
}
|
|
89
84
|
export interface DocumentSnapshot {
|
|
90
85
|
id: string;
|
|
@@ -143,6 +138,15 @@ export interface IDocumentView {
|
|
|
143
138
|
* @param signal - Optional abort signal to cancel the request
|
|
144
139
|
*/
|
|
145
140
|
get<TDocument extends PHDocument>(documentId: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<TDocument>;
|
|
141
|
+
/**
|
|
142
|
+
* Returns the documents with the given ids.
|
|
143
|
+
*
|
|
144
|
+
* @param documentIds - The list of document ids to get.
|
|
145
|
+
* @param view - Optional filter containing branch and scopes information
|
|
146
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
147
|
+
* @param signal - Optional abort signal to cancel the request
|
|
148
|
+
*/
|
|
149
|
+
getMany<TDocument extends PHDocument>(documentIds: string[], view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<TDocument[]>;
|
|
146
150
|
/**
|
|
147
151
|
* Returns the document with the given identifier (either id or slug).
|
|
148
152
|
* Throws an error if the identifier matches both an id and a slug that refer to different documents.
|
|
@@ -174,6 +178,29 @@ export interface IDocumentView {
|
|
|
174
178
|
* @returns The document ID or undefined if the slug doesn't exist
|
|
175
179
|
*/
|
|
176
180
|
resolveSlug(slug: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string | undefined>;
|
|
181
|
+
/**
|
|
182
|
+
* Resolves a list of slugs to document IDs.
|
|
183
|
+
*
|
|
184
|
+
* @param slugs - The list of slugs to resolve.
|
|
185
|
+
* @param view - Optional filter containing branch and scopes information
|
|
186
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
187
|
+
* @param signal - Optional abort signal to cancel the request
|
|
188
|
+
* @returns The list of document IDs
|
|
189
|
+
*/
|
|
190
|
+
resolveSlugs(slugs: string[], view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
|
|
191
|
+
/**
|
|
192
|
+
* Resolves an identifier (either id or slug) to a document ID.
|
|
193
|
+
* This is a lightweight alternative to getByIdOrSlug that returns just the ID
|
|
194
|
+
* without fetching the full document.
|
|
195
|
+
*
|
|
196
|
+
* @param identifier - The id or slug to resolve
|
|
197
|
+
* @param view - Optional filter containing branch and scopes information
|
|
198
|
+
* @param consistencyToken - Optional token for read-after-write consistency
|
|
199
|
+
* @param signal - Optional abort signal to cancel the request
|
|
200
|
+
* @returns The document ID
|
|
201
|
+
* @throws {Error} If document not found or identifier matches both an ID and slug referring to different documents
|
|
202
|
+
*/
|
|
203
|
+
resolveIdOrSlug(identifier: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string>;
|
|
177
204
|
}
|
|
178
205
|
export type DocumentRelationship = {
|
|
179
206
|
sourceId: string;
|
|
@@ -221,7 +248,7 @@ export interface IDocumentIndexer {
|
|
|
221
248
|
* @param consistencyToken - Optional token for read-after-write consistency
|
|
222
249
|
* @param signal - Optional abort signal to cancel the request
|
|
223
250
|
*/
|
|
224
|
-
getOutgoing(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship
|
|
251
|
+
getOutgoing(documentId: string, types?: string[], paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<DocumentRelationship>>;
|
|
225
252
|
/**
|
|
226
253
|
* Returns incoming relationships to a document.
|
|
227
254
|
*
|
|
@@ -230,7 +257,7 @@ export interface IDocumentIndexer {
|
|
|
230
257
|
* @param consistencyToken - Optional token for read-after-write consistency
|
|
231
258
|
* @param signal - Optional abort signal to cancel the request
|
|
232
259
|
*/
|
|
233
|
-
getIncoming(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship
|
|
260
|
+
getIncoming(documentId: string, types?: string[], paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<DocumentRelationship>>;
|
|
234
261
|
/**
|
|
235
262
|
* Checks if a relationship exists between two documents.
|
|
236
263
|
*
|
|
@@ -250,7 +277,7 @@ export interface IDocumentIndexer {
|
|
|
250
277
|
* @param consistencyToken - Optional token for read-after-write consistency
|
|
251
278
|
* @param signal - Optional abort signal to cancel the request
|
|
252
279
|
*/
|
|
253
|
-
getUndirectedRelationships(a: string, b: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship
|
|
280
|
+
getUndirectedRelationships(a: string, b: string, types?: string[], paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<DocumentRelationship>>;
|
|
254
281
|
/**
|
|
255
282
|
* Returns all directed relationships between two documents.
|
|
256
283
|
*
|
|
@@ -260,7 +287,7 @@ export interface IDocumentIndexer {
|
|
|
260
287
|
* @param consistencyToken - Optional token for read-after-write consistency
|
|
261
288
|
* @param signal - Optional abort signal to cancel the request
|
|
262
289
|
*/
|
|
263
|
-
getDirectedRelationships(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship
|
|
290
|
+
getDirectedRelationships(sourceId: string, targetId: string, types?: string[], paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<DocumentRelationship>>;
|
|
264
291
|
/**
|
|
265
292
|
* Finds a path from source to target following directed edges.
|
|
266
293
|
*
|
|
@@ -289,86 +316,6 @@ export interface IDocumentIndexer {
|
|
|
289
316
|
*/
|
|
290
317
|
getRelationshipTypes(consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
|
|
291
318
|
}
|
|
292
|
-
/**
|
|
293
|
-
* A consistency-aware storage interface used by the Reactor when legacy storage
|
|
294
|
-
* mode is enabled. This interface provides read-after-write consistency by
|
|
295
|
-
* accepting an optional consistency token on read operations.
|
|
296
|
-
*
|
|
297
|
-
* This is a standalone interface (not extending IDocumentStorage) because the
|
|
298
|
-
* method signatures differ - consistency token is added as an optional parameter
|
|
299
|
-
* to read operations.
|
|
300
|
-
*/
|
|
301
|
-
export interface IConsistencyAwareStorage {
|
|
302
|
-
/**
|
|
303
|
-
* Returns the document with the given id.
|
|
304
|
-
*
|
|
305
|
-
* @param id - The id of the document to get
|
|
306
|
-
* @param consistencyToken - Optional token for read-after-write consistency
|
|
307
|
-
* @param signal - Optional abort signal to cancel the request
|
|
308
|
-
*/
|
|
309
|
-
get<TDocument extends PHDocument>(id: string, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<TDocument>;
|
|
310
|
-
/**
|
|
311
|
-
* Returns the document with the given slug.
|
|
312
|
-
*
|
|
313
|
-
* @param slug - The slug of the document to get
|
|
314
|
-
* @param consistencyToken - Optional token for read-after-write consistency
|
|
315
|
-
* @param signal - Optional abort signal to cancel the request
|
|
316
|
-
*/
|
|
317
|
-
getBySlug<TDocument extends PHDocument>(slug: string, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<TDocument>;
|
|
318
|
-
/**
|
|
319
|
-
* Returns true if the document exists.
|
|
320
|
-
*
|
|
321
|
-
* @param id - The id of the document to check
|
|
322
|
-
* @param consistencyToken - Optional token for read-after-write consistency
|
|
323
|
-
* @param signal - Optional abort signal to cancel the request
|
|
324
|
-
*/
|
|
325
|
-
exists(id: string, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<boolean>;
|
|
326
|
-
/**
|
|
327
|
-
* Finds documents by their document type.
|
|
328
|
-
*
|
|
329
|
-
* @param type - The document type to search for
|
|
330
|
-
* @param limit - Optional limit on the number of results
|
|
331
|
-
* @param cursor - Optional cursor for pagination
|
|
332
|
-
* @param consistencyToken - Optional token for read-after-write consistency
|
|
333
|
-
* @param signal - Optional abort signal to cancel the request
|
|
334
|
-
*/
|
|
335
|
-
findByType(type: string, limit?: number, cursor?: string, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<{
|
|
336
|
-
documents: string[];
|
|
337
|
-
nextCursor: string | undefined;
|
|
338
|
-
}>;
|
|
339
|
-
/**
|
|
340
|
-
* Returns the children of a document.
|
|
341
|
-
*
|
|
342
|
-
* @param id - The id of the parent document
|
|
343
|
-
* @param consistencyToken - Optional token for read-after-write consistency
|
|
344
|
-
* @param signal - Optional abort signal to cancel the request
|
|
345
|
-
*/
|
|
346
|
-
getChildren(id: string, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
|
|
347
|
-
/**
|
|
348
|
-
* Resolves slugs to document IDs.
|
|
349
|
-
*
|
|
350
|
-
* @param slugs - The slugs to resolve
|
|
351
|
-
* @param consistencyToken - Optional token for read-after-write consistency
|
|
352
|
-
* @param signal - Optional abort signal to cancel the request
|
|
353
|
-
*/
|
|
354
|
-
resolveIds(slugs: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
|
|
355
|
-
/**
|
|
356
|
-
* Resolves document IDs to slugs.
|
|
357
|
-
*
|
|
358
|
-
* @param ids - The document IDs to resolve
|
|
359
|
-
* @param consistencyToken - Optional token for read-after-write consistency
|
|
360
|
-
* @param signal - Optional abort signal to cancel the request
|
|
361
|
-
*/
|
|
362
|
-
resolveSlugs(ids: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
|
|
363
|
-
/**
|
|
364
|
-
* Returns all parent documents of the child document with the given id.
|
|
365
|
-
*
|
|
366
|
-
* @param childId - The id of the child document
|
|
367
|
-
* @param consistencyToken - Optional token for read-after-write consistency
|
|
368
|
-
* @param signal - Optional abort signal to cancel the request
|
|
369
|
-
*/
|
|
370
|
-
getParents(childId: string, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
|
|
371
|
-
}
|
|
372
319
|
export interface ISyncRemoteStorage {
|
|
373
320
|
/**
|
|
374
321
|
* Lists all remotes.
|
|
@@ -415,10 +362,11 @@ export interface ISyncCursorStorage {
|
|
|
415
362
|
* Gets a cursor for a remote.
|
|
416
363
|
*
|
|
417
364
|
* @param remoteName - The name of the remote
|
|
365
|
+
* @param cursorType - The type of cursor ("inbox" or "outbox")
|
|
418
366
|
* @param signal - Optional abort signal to cancel the request
|
|
419
367
|
* @returns The cursor
|
|
420
368
|
*/
|
|
421
|
-
get(remoteName: string, signal?: AbortSignal): Promise<RemoteCursor>;
|
|
369
|
+
get(remoteName: string, cursorType: "inbox" | "outbox", signal?: AbortSignal): Promise<RemoteCursor>;
|
|
422
370
|
/**
|
|
423
371
|
* Upserts a cursor.
|
|
424
372
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
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":"AAcA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,WAAmB;QAC7B,KAAK,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;QAC7C,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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { OperationWithContext } from "document-model";
|
|
1
2
|
import type { Kysely } from "kysely";
|
|
2
3
|
import type { IConsistencyTracker } from "../../shared/consistency-tracker.js";
|
|
3
|
-
import type { ConsistencyToken } from "../../shared/types.js";
|
|
4
|
-
import type { DocumentRelationship, IDocumentGraph, IDocumentIndexer, IOperationStore
|
|
5
|
-
import type { Database as StorageDatabase
|
|
4
|
+
import type { ConsistencyToken, PagedResults, PagingOptions } from "../../shared/types.js";
|
|
5
|
+
import type { DocumentRelationship, IDocumentGraph, IDocumentIndexer, IOperationStore } from "../interfaces.js";
|
|
6
|
+
import type { DocumentIndexerDatabase, Database as StorageDatabase } from "./types.js";
|
|
6
7
|
type Database = StorageDatabase & DocumentIndexerDatabase;
|
|
7
8
|
export declare class KyselyDocumentIndexer implements IDocumentIndexer {
|
|
8
9
|
private db;
|
|
@@ -13,11 +14,11 @@ export declare class KyselyDocumentIndexer implements IDocumentIndexer {
|
|
|
13
14
|
init(): Promise<void>;
|
|
14
15
|
indexOperations(items: OperationWithContext[]): Promise<void>;
|
|
15
16
|
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
|
|
17
|
+
getOutgoing(documentId: string, types?: string[], paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<DocumentRelationship>>;
|
|
18
|
+
getIncoming(documentId: string, types?: string[], paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<DocumentRelationship>>;
|
|
18
19
|
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
|
|
20
|
+
getUndirectedRelationships(a: string, b: string, types?: string[], paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<DocumentRelationship>>;
|
|
21
|
+
getDirectedRelationships(sourceId: string, targetId: string, types?: string[], paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<DocumentRelationship>>;
|
|
21
22
|
findPath(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[] | null>;
|
|
22
23
|
findAncestors(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<IDocumentGraph>;
|
|
23
24
|
getRelationshipTypes(consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-indexer.d.ts","sourceRoot":"","sources":["../../../../src/storage/kysely/document-indexer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"document-indexer.d.ts","sourceRoot":"","sources":["../../../../src/storage/kysely/document-indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { v4 as uuidv4 } from "uuid";
|
|
2
|
+
import { collectAllPages } from "../../shared/collect-all-pages.js";
|
|
2
3
|
export class KyselyDocumentIndexer {
|
|
3
4
|
db;
|
|
4
5
|
operationStore;
|
|
@@ -17,8 +18,8 @@ export class KyselyDocumentIndexer {
|
|
|
17
18
|
if (indexerState) {
|
|
18
19
|
this.lastOperationId = indexerState.lastOperationId;
|
|
19
20
|
const missedOperations = await this.operationStore.getSinceId(this.lastOperationId);
|
|
20
|
-
if (missedOperations.
|
|
21
|
-
await this.indexOperations(missedOperations.
|
|
21
|
+
if (missedOperations.results.length > 0) {
|
|
22
|
+
await this.indexOperations(missedOperations.results);
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
else {
|
|
@@ -29,8 +30,8 @@ export class KyselyDocumentIndexer {
|
|
|
29
30
|
})
|
|
30
31
|
.execute();
|
|
31
32
|
const allOperations = await this.operationStore.getSinceId(0);
|
|
32
|
-
if (allOperations.
|
|
33
|
-
await this.indexOperations(allOperations.
|
|
33
|
+
if (allOperations.results.length > 0) {
|
|
34
|
+
await this.indexOperations(allOperations.results);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
}
|
|
@@ -78,13 +79,15 @@ export class KyselyDocumentIndexer {
|
|
|
78
79
|
}
|
|
79
80
|
await this.consistencyTracker.waitFor(token.coordinates, timeoutMs, signal);
|
|
80
81
|
}
|
|
81
|
-
async getOutgoing(documentId, types, consistencyToken, signal) {
|
|
82
|
+
async getOutgoing(documentId, types, paging, consistencyToken, signal) {
|
|
82
83
|
if (consistencyToken) {
|
|
83
84
|
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
84
85
|
}
|
|
85
86
|
if (signal?.aborted) {
|
|
86
87
|
throw new Error("Operation aborted");
|
|
87
88
|
}
|
|
89
|
+
const startIndex = paging?.cursor ? parseInt(paging.cursor) : 0;
|
|
90
|
+
const limit = paging?.limit || 100;
|
|
88
91
|
let query = this.db
|
|
89
92
|
.selectFrom("DocumentRelationship")
|
|
90
93
|
.selectAll()
|
|
@@ -92,25 +95,42 @@ export class KyselyDocumentIndexer {
|
|
|
92
95
|
if (types && types.length > 0) {
|
|
93
96
|
query = query.where("relationshipType", "in", types);
|
|
94
97
|
}
|
|
95
|
-
const rows = await query
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
const rows = await query
|
|
99
|
+
.orderBy("createdAt", "asc")
|
|
100
|
+
.orderBy("id", "asc")
|
|
101
|
+
.offset(startIndex)
|
|
102
|
+
.limit(limit + 1)
|
|
103
|
+
.execute();
|
|
104
|
+
const hasMore = rows.length > limit;
|
|
105
|
+
const results = hasMore ? rows.slice(0, limit) : rows;
|
|
106
|
+
const nextCursor = hasMore ? String(startIndex + limit) : undefined;
|
|
107
|
+
return {
|
|
108
|
+
results: results.map((row) => ({
|
|
109
|
+
sourceId: row.sourceId,
|
|
110
|
+
targetId: row.targetId,
|
|
111
|
+
relationshipType: row.relationshipType,
|
|
112
|
+
metadata: row.metadata
|
|
113
|
+
? row.metadata
|
|
114
|
+
: undefined,
|
|
115
|
+
createdAt: row.createdAt,
|
|
116
|
+
updatedAt: row.updatedAt,
|
|
117
|
+
})),
|
|
118
|
+
options: paging || { cursor: "0", limit: 100 },
|
|
119
|
+
nextCursor,
|
|
120
|
+
next: hasMore
|
|
121
|
+
? () => this.getOutgoing(documentId, types, { cursor: nextCursor, limit }, consistencyToken, signal)
|
|
102
122
|
: undefined,
|
|
103
|
-
|
|
104
|
-
updatedAt: row.updatedAt,
|
|
105
|
-
}));
|
|
123
|
+
};
|
|
106
124
|
}
|
|
107
|
-
async getIncoming(documentId, types, consistencyToken, signal) {
|
|
125
|
+
async getIncoming(documentId, types, paging, consistencyToken, signal) {
|
|
108
126
|
if (consistencyToken) {
|
|
109
127
|
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
110
128
|
}
|
|
111
129
|
if (signal?.aborted) {
|
|
112
130
|
throw new Error("Operation aborted");
|
|
113
131
|
}
|
|
132
|
+
const startIndex = paging?.cursor ? parseInt(paging.cursor) : 0;
|
|
133
|
+
const limit = paging?.limit || 100;
|
|
114
134
|
let query = this.db
|
|
115
135
|
.selectFrom("DocumentRelationship")
|
|
116
136
|
.selectAll()
|
|
@@ -118,17 +138,32 @@ export class KyselyDocumentIndexer {
|
|
|
118
138
|
if (types && types.length > 0) {
|
|
119
139
|
query = query.where("relationshipType", "in", types);
|
|
120
140
|
}
|
|
121
|
-
const rows = await query
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
141
|
+
const rows = await query
|
|
142
|
+
.orderBy("createdAt", "asc")
|
|
143
|
+
.orderBy("id", "asc")
|
|
144
|
+
.offset(startIndex)
|
|
145
|
+
.limit(limit + 1)
|
|
146
|
+
.execute();
|
|
147
|
+
const hasMore = rows.length > limit;
|
|
148
|
+
const results = hasMore ? rows.slice(0, limit) : rows;
|
|
149
|
+
const nextCursor = hasMore ? String(startIndex + limit) : undefined;
|
|
150
|
+
return {
|
|
151
|
+
results: results.map((row) => ({
|
|
152
|
+
sourceId: row.sourceId,
|
|
153
|
+
targetId: row.targetId,
|
|
154
|
+
relationshipType: row.relationshipType,
|
|
155
|
+
metadata: row.metadata
|
|
156
|
+
? row.metadata
|
|
157
|
+
: undefined,
|
|
158
|
+
createdAt: row.createdAt,
|
|
159
|
+
updatedAt: row.updatedAt,
|
|
160
|
+
})),
|
|
161
|
+
options: paging || { cursor: "0", limit: 100 },
|
|
162
|
+
nextCursor,
|
|
163
|
+
next: hasMore
|
|
164
|
+
? () => this.getIncoming(documentId, types, { cursor: nextCursor, limit }, consistencyToken, signal)
|
|
128
165
|
: undefined,
|
|
129
|
-
|
|
130
|
-
updatedAt: row.updatedAt,
|
|
131
|
-
}));
|
|
166
|
+
};
|
|
132
167
|
}
|
|
133
168
|
async hasRelationship(sourceId, targetId, types, consistencyToken, signal) {
|
|
134
169
|
if (consistencyToken) {
|
|
@@ -148,13 +183,15 @@ export class KyselyDocumentIndexer {
|
|
|
148
183
|
const result = await query.executeTakeFirst();
|
|
149
184
|
return result !== undefined;
|
|
150
185
|
}
|
|
151
|
-
async getUndirectedRelationships(a, b, types, consistencyToken, signal) {
|
|
186
|
+
async getUndirectedRelationships(a, b, types, paging, consistencyToken, signal) {
|
|
152
187
|
if (consistencyToken) {
|
|
153
188
|
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
154
189
|
}
|
|
155
190
|
if (signal?.aborted) {
|
|
156
191
|
throw new Error("Operation aborted");
|
|
157
192
|
}
|
|
193
|
+
const startIndex = paging?.cursor ? parseInt(paging.cursor) : 0;
|
|
194
|
+
const limit = paging?.limit || 100;
|
|
158
195
|
let query = this.db
|
|
159
196
|
.selectFrom("DocumentRelationship")
|
|
160
197
|
.selectAll()
|
|
@@ -165,25 +202,42 @@ export class KyselyDocumentIndexer {
|
|
|
165
202
|
if (types && types.length > 0) {
|
|
166
203
|
query = query.where("relationshipType", "in", types);
|
|
167
204
|
}
|
|
168
|
-
const rows = await query
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
205
|
+
const rows = await query
|
|
206
|
+
.orderBy("createdAt", "asc")
|
|
207
|
+
.orderBy("id", "asc")
|
|
208
|
+
.offset(startIndex)
|
|
209
|
+
.limit(limit + 1)
|
|
210
|
+
.execute();
|
|
211
|
+
const hasMore = rows.length > limit;
|
|
212
|
+
const results = hasMore ? rows.slice(0, limit) : rows;
|
|
213
|
+
const nextCursor = hasMore ? String(startIndex + limit) : undefined;
|
|
214
|
+
return {
|
|
215
|
+
results: results.map((row) => ({
|
|
216
|
+
sourceId: row.sourceId,
|
|
217
|
+
targetId: row.targetId,
|
|
218
|
+
relationshipType: row.relationshipType,
|
|
219
|
+
metadata: row.metadata
|
|
220
|
+
? row.metadata
|
|
221
|
+
: undefined,
|
|
222
|
+
createdAt: row.createdAt,
|
|
223
|
+
updatedAt: row.updatedAt,
|
|
224
|
+
})),
|
|
225
|
+
options: paging || { cursor: "0", limit: 100 },
|
|
226
|
+
nextCursor,
|
|
227
|
+
next: hasMore
|
|
228
|
+
? () => this.getUndirectedRelationships(a, b, types, { cursor: nextCursor, limit }, consistencyToken, signal)
|
|
175
229
|
: undefined,
|
|
176
|
-
|
|
177
|
-
updatedAt: row.updatedAt,
|
|
178
|
-
}));
|
|
230
|
+
};
|
|
179
231
|
}
|
|
180
|
-
async getDirectedRelationships(sourceId, targetId, types, consistencyToken, signal) {
|
|
232
|
+
async getDirectedRelationships(sourceId, targetId, types, paging, consistencyToken, signal) {
|
|
181
233
|
if (consistencyToken) {
|
|
182
234
|
await this.waitForConsistency(consistencyToken, undefined, signal);
|
|
183
235
|
}
|
|
184
236
|
if (signal?.aborted) {
|
|
185
237
|
throw new Error("Operation aborted");
|
|
186
238
|
}
|
|
239
|
+
const startIndex = paging?.cursor ? parseInt(paging.cursor) : 0;
|
|
240
|
+
const limit = paging?.limit || 100;
|
|
187
241
|
let query = this.db
|
|
188
242
|
.selectFrom("DocumentRelationship")
|
|
189
243
|
.selectAll()
|
|
@@ -192,17 +246,32 @@ export class KyselyDocumentIndexer {
|
|
|
192
246
|
if (types && types.length > 0) {
|
|
193
247
|
query = query.where("relationshipType", "in", types);
|
|
194
248
|
}
|
|
195
|
-
const rows = await query
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
249
|
+
const rows = await query
|
|
250
|
+
.orderBy("createdAt", "asc")
|
|
251
|
+
.orderBy("id", "asc")
|
|
252
|
+
.offset(startIndex)
|
|
253
|
+
.limit(limit + 1)
|
|
254
|
+
.execute();
|
|
255
|
+
const hasMore = rows.length > limit;
|
|
256
|
+
const results = hasMore ? rows.slice(0, limit) : rows;
|
|
257
|
+
const nextCursor = hasMore ? String(startIndex + limit) : undefined;
|
|
258
|
+
return {
|
|
259
|
+
results: results.map((row) => ({
|
|
260
|
+
sourceId: row.sourceId,
|
|
261
|
+
targetId: row.targetId,
|
|
262
|
+
relationshipType: row.relationshipType,
|
|
263
|
+
metadata: row.metadata
|
|
264
|
+
? row.metadata
|
|
265
|
+
: undefined,
|
|
266
|
+
createdAt: row.createdAt,
|
|
267
|
+
updatedAt: row.updatedAt,
|
|
268
|
+
})),
|
|
269
|
+
options: paging || { cursor: "0", limit: 100 },
|
|
270
|
+
nextCursor,
|
|
271
|
+
next: hasMore
|
|
272
|
+
? () => this.getDirectedRelationships(sourceId, targetId, types, { cursor: nextCursor, limit }, consistencyToken, signal)
|
|
202
273
|
: undefined,
|
|
203
|
-
|
|
204
|
-
updatedAt: row.updatedAt,
|
|
205
|
-
}));
|
|
274
|
+
};
|
|
206
275
|
}
|
|
207
276
|
async findPath(sourceId, targetId, types, consistencyToken, signal) {
|
|
208
277
|
if (consistencyToken) {
|
|
@@ -227,8 +296,9 @@ export class KyselyDocumentIndexer {
|
|
|
227
296
|
continue;
|
|
228
297
|
}
|
|
229
298
|
visited.add(current.id);
|
|
230
|
-
const
|
|
231
|
-
|
|
299
|
+
const outgoingPage = await this.getOutgoing(current.id, types, undefined, consistencyToken, signal);
|
|
300
|
+
const outgoingRelationships = await collectAllPages(outgoingPage, signal);
|
|
301
|
+
for (const rel of outgoingRelationships) {
|
|
232
302
|
if (!visited.has(rel.targetId)) {
|
|
233
303
|
queue.push({
|
|
234
304
|
id: rel.targetId,
|
|
@@ -256,8 +326,9 @@ export class KyselyDocumentIndexer {
|
|
|
256
326
|
continue;
|
|
257
327
|
}
|
|
258
328
|
visited.add(currentId);
|
|
259
|
-
const
|
|
260
|
-
|
|
329
|
+
const incomingPage = await this.getIncoming(currentId, types, undefined, consistencyToken, signal);
|
|
330
|
+
const incomingRelationships = await collectAllPages(incomingPage, signal);
|
|
331
|
+
for (const rel of incomingRelationships) {
|
|
261
332
|
nodes.add(rel.sourceId);
|
|
262
333
|
edges.push({
|
|
263
334
|
from: rel.sourceId,
|